From 31e788df17a4df614fa5b3605a06d06e60f18bb6 Mon Sep 17 00:00:00 2001 From: Gareth Davidson Date: Wed, 14 Oct 2026 18:03:50 +0100 Subject: [PATCH 1/3] Research: certify unrestricted selected k8 helper terminal frames --- .../DISCOVERY.json | 1462 +++++++++++++++++ .../DUALS.json.gz | Bin 0 -> 234875 bytes .../EXPECTED.json | 184 +++ .../selected-k8-unrestricted-ends/INPUTS.json | 14 + .../selected-k8-unrestricted-ends/NOTICE.md | 38 + .../PRIMAL.json.gz | Bin 0 -> 10213 bytes .../selected-k8-unrestricted-ends/PROOF.md | 227 +++ .../selected-k8-unrestricted-ends/README.md | 126 ++ .../SOURCES.json | 90 + .../selected-k8-unrestricted-ends/TASK.json | 450 +++++ .../selected-k8-unrestricted-ends/VERIFY.json | 54 + .../selected-k8-unrestricted-ends/common.py | 108 ++ .../independent.py | 462 ++++++ .../materialize.py | 40 + .../selected-k8-unrestricted-ends/model.py | 161 ++ .../selected-k8-unrestricted-ends/nominate.py | 133 ++ .../references/CEILING.md | 108 ++ .../references/END-RECIPE.json | 242 +++ .../references/END-WITNESS.md | 98 ++ .../references/FRAME-METHOD.md | 75 + .../references/SLOT-PINS.json | 47 + .../references/WORD-LINEAGE.md | 101 ++ .../references/WORD.json.gz | Bin 0 -> 57222 bytes .../references/audit_local.py | 171 ++ .../references/ceiling.py | 152 ++ .../references/construct.py | 37 + .../references/frame_model.py | 434 +++++ .../references/gen_duals.py | 149 ++ .../test_package.py | 227 +++ .../selected-k8-unrestricted-ends/verify.py | 184 +++ 30 files changed, 5574 insertions(+) create mode 100644 research/selected-k8-unrestricted-ends/DISCOVERY.json create mode 100644 research/selected-k8-unrestricted-ends/DUALS.json.gz create mode 100644 research/selected-k8-unrestricted-ends/EXPECTED.json create mode 100644 research/selected-k8-unrestricted-ends/INPUTS.json create mode 100644 research/selected-k8-unrestricted-ends/NOTICE.md create mode 100644 research/selected-k8-unrestricted-ends/PRIMAL.json.gz create mode 100644 research/selected-k8-unrestricted-ends/PROOF.md create mode 100644 research/selected-k8-unrestricted-ends/README.md create mode 100644 research/selected-k8-unrestricted-ends/SOURCES.json create mode 100644 research/selected-k8-unrestricted-ends/TASK.json create mode 100644 research/selected-k8-unrestricted-ends/VERIFY.json create mode 100644 research/selected-k8-unrestricted-ends/common.py create mode 100644 research/selected-k8-unrestricted-ends/independent.py create mode 100644 research/selected-k8-unrestricted-ends/materialize.py create mode 100644 research/selected-k8-unrestricted-ends/model.py create mode 100644 research/selected-k8-unrestricted-ends/nominate.py create mode 100644 research/selected-k8-unrestricted-ends/references/CEILING.md create mode 100644 research/selected-k8-unrestricted-ends/references/END-RECIPE.json create mode 100644 research/selected-k8-unrestricted-ends/references/END-WITNESS.md create mode 100644 research/selected-k8-unrestricted-ends/references/FRAME-METHOD.md create mode 100644 research/selected-k8-unrestricted-ends/references/SLOT-PINS.json create mode 100644 research/selected-k8-unrestricted-ends/references/WORD-LINEAGE.md create mode 100644 research/selected-k8-unrestricted-ends/references/WORD.json.gz create mode 100644 research/selected-k8-unrestricted-ends/references/audit_local.py create mode 100644 research/selected-k8-unrestricted-ends/references/ceiling.py create mode 100644 research/selected-k8-unrestricted-ends/references/construct.py create mode 100644 research/selected-k8-unrestricted-ends/references/frame_model.py create mode 100644 research/selected-k8-unrestricted-ends/references/gen_duals.py create mode 100644 research/selected-k8-unrestricted-ends/test_package.py create mode 100644 research/selected-k8-unrestricted-ends/verify.py diff --git a/research/selected-k8-unrestricted-ends/DISCOVERY.json b/research/selected-k8-unrestricted-ends/DISCOVERY.json new file mode 100644 index 0000000000..1cf0950849 --- /dev/null +++ b/research/selected-k8-unrestricted-ends/DISCOVERY.json @@ -0,0 +1,1462 @@ +{ + "versions": { + "highspy": "1.15.1", + "numpy": "2.5.4", + "scipy": "1.18.1", + "python": "3.12.3" + }, + "components": [ + { + "first": [ + "E", + 273 + ], + "nodes": 2134, + "rows": 97705, + "columns": 387989, + "fractional_columns": 0, + "numeric_objective": 10543.236464905558 + }, + { + "first": [ + "E", + 311 + ], + "nodes": 23, + "rows": 350, + "columns": 524, + "fractional_columns": 0, + "numeric_objective": 204.21695383497496 + }, + { + "first": [ + "E", + 500 + ], + "nodes": 9, + "rows": 72, + "columns": 81, + "fractional_columns": 0, + "numeric_objective": 102.10847691748745 + }, + { + "first": [ + "E", + 501 + ], + "nodes": 9, + "rows": 72, + "columns": 81, + "fractional_columns": 0, + "numeric_objective": 102.10847691748745 + }, + { + "first": [ + "G", + 616 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 758 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 900 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1042 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1184 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1266 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1270 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1274 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1278 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1420 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1424 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1428 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1432 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1574 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1578 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1582 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1586 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1728 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1732 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1736 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1740 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1882 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1886 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1890 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 1894 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2036 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2040 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2044 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2048 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2190 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2194 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2198 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2202 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2344 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2348 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2352 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2356 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2498 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2502 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2506 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2510 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2652 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2656 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2660 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2664 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2806 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2810 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2814 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2818 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2960 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2964 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2968 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 2972 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 3005 + ], + "nodes": 90, + "rows": 1514, + "columns": 2224, + "fractional_columns": 0, + "numeric_objective": 119.00453098089815 + }, + { + "first": [ + "G", + 3114 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 3118 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 3122 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 3126 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 3159 + ], + "nodes": 90, + "rows": 1514, + "columns": 2224, + "fractional_columns": 0, + "numeric_objective": 119.00453098089815 + }, + { + "first": [ + "G", + 3268 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 3272 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 3276 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 3280 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 3313 + ], + "nodes": 90, + "rows": 1514, + "columns": 2224, + "fractional_columns": 0, + "numeric_objective": 119.00453098089815 + }, + { + "first": [ + "G", + 3978 + ], + "nodes": 21, + "rows": 141, + "columns": 132, + "fractional_columns": 0, + "numeric_objective": 255.41699679873673 + }, + { + "first": [ + "G", + 4062 + ], + "nodes": 21, + "rows": 141, + "columns": 132, + "fractional_columns": 0, + "numeric_objective": 255.41699679873673 + }, + { + "first": [ + "G", + 4083 + ], + "nodes": 21, + "rows": 141, + "columns": 132, + "fractional_columns": 0, + "numeric_objective": 255.41699679873673 + }, + { + "first": [ + "G", + 4104 + ], + "nodes": 21, + "rows": 141, + "columns": 132, + "fractional_columns": 0, + "numeric_objective": 255.41699679873673 + }, + { + "first": [ + "G", + 4125 + ], + "nodes": 21, + "rows": 141, + "columns": 132, + "fractional_columns": 0, + "numeric_objective": 255.41699679873673 + }, + { + "first": [ + "G", + 4683 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4686 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4689 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4692 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4695 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4698 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4701 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4704 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4707 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4710 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4713 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4716 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4719 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4722 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4725 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4728 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4731 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4734 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4737 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4740 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4743 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4746 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4749 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4752 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4755 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4758 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4761 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4764 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4767 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4770 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4773 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4776 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4779 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4782 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4785 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4788 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4791 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4794 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4797 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4800 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4803 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4806 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4809 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4812 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4815 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4818 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4821 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4824 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4827 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4830 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4833 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4836 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4839 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4842 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4845 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + }, + { + "first": [ + "G", + 4848 + ], + "nodes": 1, + "rows": 1, + "columns": 2, + "fractional_columns": 0, + "numeric_objective": 3.948086077223247 + } + ], + "complete_integral_candidate": true, + "symbolic_component_objective": { + "1": "1063", + "2": "446", + "3": "416", + "4": "142", + "5": "82", + "6": "0", + "7": "0", + "8": "0", + "9": "0" + }, + "candidate_profile": { + "1": 2400, + "2": 446, + "3": 416, + "4": 142, + "5": 82, + "8": 8 + }, + "changed_endpoints": [ + 574, + 575, + 580, + 581 + ], + "changed_gate_frames": 159, + "canonical_duals_sha256": "afdf3858f6862bcb386c4e5c0f21fde8f05aed038d90f87025fe6915fa66a653", + "solver_options": { + "presolve": "on", + "threads": 1, + "solver": "simplex" + } +} diff --git a/research/selected-k8-unrestricted-ends/DUALS.json.gz b/research/selected-k8-unrestricted-ends/DUALS.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..a97ee5d4259b712cc50dda5943895c7b016df715 GIT binary patch literal 234875 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±@6`<=A}1E$%wjxA<~BW4s@B`u?vlr1& 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%0DYgLHpQ<*X`L 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%0AR?nbD;XGffN!>TK z8O8C5_*tmSnTX@{jF(>9iGre@oZruW)_L29%Rs@FTV7Op;+oM9)H%IBBe*x2+0GM9 zyD;dWgp*@Yj0SD_DrpFpgp=D<5eNz%Io(PHq44Gvrg1-QG%`bMr#ZAOLfDUS^Yp*) zwe-D!Z=3{3`rW*b!!mw5RpQDrq>a4R^7_*d8Oj=3`|J7?hoX;(aVooS{73s_bhl1~ zZa4!z3(~L@7Juh$bEH|ivLMGR_fillQd8wTQWvnzuyj)XlhfxyR_ES7__~sqZEBgV ze-J{Pbnj=*=5;0uiUvaxba5~W90~{N6Da-(*bqSqA`l>W{9aFiTYS`AMAUI7?*sCL zCDsgIxpm$TAt?QK6ThTℑ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 E_q. They constrain frames and never create recursive work. +The helper's own condition follows from its register chain. There are +106 such edges, retained separately from the 10,222 merged paid edges. + +All edges go forward in event order. Join predecessor lower frames in +that order and intersect successor upper frames in reverse order; fixed +nodes retain their prescribed frames, and each variable terminal has upper +frame FULL. Induction proves lo_n <= F_n <= hi_n for every feasible +assignment. No old end cap enters this propagation. + +For each interval, choose a complement of lo_n in hi_n. Enumerate its +quotient subspaces by starting at zero and adjoining each possible vector, +retaining each canonical basis once. Every subspace is generated by a +basis, so induction on basis size proves coverage. Lifting these subspaces +and adjoining lo_n is a bijection with the interval. The checker also +requires distinctness, both containments and the exact sum of binary +Gaussian coefficients. For quotient dimensions 0 through 5 the counts +are 1,2,5,16,67,374. The retained enumeration stops at four; this package +implements and checks the required fifth dimension without that limit. + +The resulting domains have: + +- 2,589 free gates, plus 78 free helper ends; +- 32 end intervals from a forced four-space to FULL, with 374 choices each; +- 46 end intervals from a forced seven-space to FULL, with five choices each; +- 402 other helper ends fixed FULL by ordinary cleanup. + +Across all free nodes, domain sizes 2,5,16,67,374 occur respectively +1,192,1,365,28,2,80 times. This is a complete domain description, not an +enumeration of the Cartesian product of all assignments. Shared-node, +chain and cone containments still apply. The 129 free components have sizes + + 117 x 1, 2 x 9, 5 x 21, 1 x 23, 3 x 90, 1 x 2134. + +An independent implementation reconstructs all bounds, domains and edges +using 512-bit subspace sets, quotient closure and inverse row covectors. +It agrees with every geometry digest and count in EXPECTED.json. + +## Variable mass must be recharged + +Let P_r count all local rank-r children, including centre work. A register's +climb dimensions telescope from its fixed start to its chosen end. +Consequently local mass L = sum r P_r varies with the ends. The old +fixed-mass reduction subtracting L times the rank-one price cannot be +used as a constant objective here. + +Under the unchanged width-73, 896-family/nine-call coverage law, total +paid rank mass per call is + + T = 72 (896/9) + 64 = 7232. + +Any decrease in local mass exposes exactly as much idle mass, T-L. +The strict halving guard permits idle rank at most 51, since +2*51^2 < 73^2 <= 2*52^2. For a>=0, cost per unit rank decreases with rank. +Every idle packing therefore costs at least fractional rank-51 packing. +Put w=896/9 and define + + h_d(a) = (d/73)^(1-a), + Phi_d(a) = 73 [h_d(a) - (d/51) h_51(a)], d=1,...,9. + +The complete favorable normalized bill is + + B_P(a) = [sum P_d h_d(a) + ((T-L)/51) h_51(a)] / w + = [T (73/51)^a + sum P_d Phi_d(a)] / (73 w). + +The first term is constant across endpoint choices. Minimizing the sum of +Phi charges therefore minimizes the *complete* relaxed bill even though +local mass varies. All local ranks are at most nine. Telescoping gives +L = 5586 + sum_q (dim(E_q)-dim(H_q)), where the sum is over the 78 variable +ends. Their complete lower/upper dimensions give 5540 <= L <= 5792. +Consequently 1440 <= T-L <= 1692 for every feasible assignment. The idle +relaxation therefore remains applicable throughout the entire enlarged +domain; no endpoint choice receives negative or omitted idle work. + +The cost of omitting this recharging is observable: for the attaining +profile below, retaining the obsolete idle mass 1,646 instead of 1,650 +makes the 5% target incorrectly pass. The control checks this false +positive using exact outward bounds. Released workspace is not free work. + +## Exact dual certificate and attainment + +For every free node n and complete frame choice F, use a nonnegative +variable x(n,F). For every edge between free nodes, use y(n,m,F,G) for +every nested pair F<=G, with both marginals equal to the corresponding x +variables. Normalize each x distribution to one. Unary costs count edges +to fixed/forced nodes; pair costs count paid multiplicity, including zero +for the additional cone edges. Every literal legal assignment gives a +zero/one feasible LP point, so the LP minimum is a lower bound. + +For each component write min c.z subject to A z=b, z>=0. DUALS.json.gz +supplies a rational linear form in Phi_1,...,Phi_9 for every used equality +row. The two checkers reconstruct all rows/columns and prove + + c - A^T q >= 0, + b^T q = the shipped primal component cost, coefficient by coefficient. + +There are 103,563 rows and 396,241 columns. Of the reduced-cost vectors, +100,197 vanish identically and 296,044 are strictly positive at each of the +two test exponents below; 1,463 distinct vectors occur. No solver tolerance, +status, primal float or numerical basis is acceptance evidence. HiGHS +only nominated the rational certificate and integral assignment. + +The complete primal is checked against every domain and containment edge. +Together with fixed edges and centre work its profile is + + P* = {1:2400, 2:446, 3:416, 4:142, 5:82, 8:8}, + L* = 5582, T-L* = 1650. + +It contracts helpers 574,575,580,581 to rank-seven ends. The unchanged +native auditor accepts its actual annotated word on all 704 input columns +in both orientations, including arbitrary dirty helper data, frame paths, +entrances, full cleanup, endpoint maps and low-end cones. Baseline and +credited PR1090 two-end words pass the same audit. This is exact local +scalar/frame validation. Emitted native programs, phase/wrapper admission, +a new complete physical owner allocation and the outer invoice were not +replayed. The attaining profile and four end changes already appeared in +PR1995; this certificate shows that the larger terminal domain cannot +improve its favorable ceiling at the certified endpoint. + +## Certified ceiling and 5% exclusion + +Set + + a_lo = 1690198050302 / 10^15, + a_hi = 1690198050303 / 10^15, + a_target = (21/20) (1690054109089 / 10^15). + +The exact dual inequalities and primal-objective identities hold at a_hi +and a_target. At these exponents P* minimizes the complete LP relaxation. +Independent outward arithmetic proves + + B_P*(a_lo) < 1 < B_P*(a_hi), + B_P*(a_target) > 1. + +At a_hi every legal assignment has local excess cost at least P* and idle +cost at least the rank-51 relaxation. Its full bill exceeds one. Every +actual child has rank less than 73, so its cost increases with a; the +failure at a_hi excludes all larger savings. Summing the per-call bound +also permits different legal endpoint/frame assignments in different calls. + +The feasible P* assignment supplies the lower bracket for the favorable +relaxation; fractional idle packing need not be realizable. Thus the best +relaxed ceiling lies strictly between a_lo and a_hi. Relative to the old +ceiling's certified lower endpoint, the ratio is less than + + 563399350101 / 563351369696 < 1.0000852. + +Arbitrary terminal choices can therefore improve the fixed-end ceiling by less than +0.00852%, and cannot meet the 5% gate. Under the retained balanced planning +transfer, kappa < 1690198050303/1001690198050303. This is a bound on the +stated mechanism, not a new multiplication exponent. + +The theorem does not assert optimality at every exponent, classify all +attaining assignments, compare all possible helper inventories, or exclude +changed entrances, scalar rewrites, reordered/changed cleanup, nonmonotone +within-call transports, shared centres or a different coverage law. Arbitrary +terminal rotations and enlargements under the declared contract are covered. The small bracketed +ceiling gain does not establish an attainable global improvement. + +## Arithmetic and verification limits + +The primary uses the retained outward log/exp engine. The separate checker +uses 256-bit integer-square-root intervals and 96-bit dyadic exponent +brackets, outward multiplication and an explicit carry-to-one case. Exact +square comparisons calibrate 72 rank cases; an invalid root oracle fails. +Both implementations share source/JSON utilities and certificate data, but +no frame, LP or moment mathematics. Both were written by the same +AI-assisted author; no independent human or proof-assistant review is claimed. + +Finite controls additionally reject omitted rotated/FULL endpoint choices, +missing gate-frame choices, centre work, +common-gate edges, primal nodes, dual components, overstated objectives, +wrong idle mass/coverage, source drift and malformed JSON. They support the +implementation; the universal implication within the finite domain follows +from the complete-domain and weak-duality argument above. diff --git a/research/selected-k8-unrestricted-ends/README.md b/research/selected-k8-unrestricted-ends/README.md new file mode 100644 index 0000000000..89f382ab66 --- /dev/null +++ b/research/selected-k8-unrestricted-ends/README.md @@ -0,0 +1,126 @@ +# Arbitrary helper terminal frames retain the selected k8 ceiling + +**Scoped obstruction; no new kappa.** Allowing every terminal subspace for +all 78 originally restricted helpers, jointly with all 5,413 gate frames, +still gives the favorable primitive ceiling + + 0.001690198050302 < best ceiling < 0.001690198050303. + +The upper planning bound is +`kappa < 1690198050303/1001690198050303`, approximately 0.001687346101213. +The ceiling gain over the fixed-end word is less than **0.00852%**, excluding +the declared 5% target. The full construction's exponent is unchanged. + +[PR1995](https://github.com/CrocSwap/integer-mult-bounds/pull/1995) permitted +only nested contractions inside each original end. This package removes +that cap: ends may rotate, enlarge or become FULL, subject only to containing +the fixed entrance and the unchanged scalar/frame/cleanup contract. The +larger domain has the same certified ceiling. Its attaining four-end profile +is already known from PR1995; the new result is the complete larger-domain +bound, not another discovery of that construction. + +## Evidence + +The [proof](PROOF.md) fixes the exact R480 selected k8 word, scalar operations, +coefficients/order, entrances, centre/target pins and early/full cleanup +membership/order. The 402 helpers in full cleanup still end FULL. Register +paths remain monotone and gates use common operand frames; arbitrary terminal +orientation does not mean arbitrary nonnested transitions within a call. + +- All 78 terminal nodes are free: 32 have complete 374-choice intervals, + and 46 have complete five-choice intervals. There are 2,589 free gate nodes. +- The complete event graph retains all 106 low-end cone relations as + zero-charge containments. A new quotient enumerator covers dimensions + through five; the predecessor implementation intentionally stopped at four. +- Exact rational duals check all **396,241 columns and 103,563 rows in 129 + components**: 100,197 zero residual vectors and 296,044 strictly positive + ones, at both the ceiling upper endpoint and the 5% target. +- An integral assignment contracts ends 574,575,580,581 and gives + `{1:2400,2:446,3:416,4:142,5:82,8:8}`. Local mass is 5,582; idle mass is 1,650. + Its annotated word passes the retained scalar/frame auditor on all + **704 input columns in both orientations**. +- A separate bitset/covector/integer-root implementation reconstructs every + domain, edge and cone and checks every dual inequality. It imports no + primary frame, LP or moment implementation. + +The complete endpoint domain has local mass between 5,540 and 5,792, so +idle mass stays between 1,440 and 1,692. The objective charges this variable +idle mass using the favorable rank-51 relaxation. Keeping the old 1,646 idle +units after contracting four ends would falsely pass the 5% target; the +control from PR1995 remains relevant to this enlarged class. + +## Reproduce + +Python 3.12 and the standard library, from the repository root: + +```sh +python3.12 -I -B scripts/research_package.py \ + --package research/selected-k8-unrestricted-ends +``` + +The registered replay runs both exact checkers and the control suite. Normal +replay is read-only, including under `-O`; unchanged retained code is compiled +with its guards enabled. `verify.py --write-expected` explicitly regenerates +the receipt. Compressed DUALS and PRIMAL artifacts are compared by canonical +parsed payload, not gzip stream bytes. Canonical receipt SHA256: +`1891bcf17e86405d265ed4b51b9de6f6059be95c50a5b6c28b21d2ac8057093e`. + +The full registered replay passed on CPython 3.12.3, including all 20 control +groups. Both exact checkers also passed CPython 3.14.4 under `-I -O -B` +from a relocated package with read-only files and directories, preserving +all bytes. Subsequent edits record validation and clarify proof prose. + +`nominate.py` is optional solver-based discovery, using Python 3.12.3, +highspy 1.15.1, NumPy 2.5.4 and SciPy 1.18.1. Its output is a proposal; +acceptance needs no solver dependency or floating-point decision. The +nomination code caches the solver's copied basis-status lists once, keeping +extraction practical for this larger LP. DISCOVERY.json is diagnostic only. + +## Scope and coordination + +Single random nonce `5f5984c68e5381ec12276b69c721f48c`, revision-3 +`complex-mechanisms / complex-new-helper-inventory`; no reroll. Base main +`1c47876ef742ba64bf9140b0527d63acf656a3b4`. The prescribed baseline-source, +ceiling and lever controls passed. The initial waiver of all affected helper +climb costs, with released mass recharged, had planning headroom; it was not +a realized word or a universal lower bound for the final domain. +[Discussion2000](https://github.com/CrocSwap/integer-mult-bounds/discussions/2000) +records the claim and outcome. TASK.json retains the original card, sources, +predecessor heads and overlap coverage. Metadata search is not a novelty +certificate. The final refresh covered 381 open PRs at 17:00:22 UTC and +643 Discussions at 17:01:43 UTC on 2026-10-14, with complete pagination. +Related PR1995/1186/1996 heads were unchanged. Main +`b6135f9fe8c0783f22bd87992a080575f2943511` preserved every mathematical +input and the selected record, with no package collision. Its new canonical +path validation passed separately; replay-command behavior was unchanged. + +This obstruction does not pass the card's physical-construction acceptance +gate. Emitted native programs, phase/wrapper admission, a new physical owner +map, selected cold replay and the global/outer invoice were not replayed. +Fractional ideal idle packing need not be realizable. The theorem does not +claim optimality at every exponent, unique optimal frames, or elimination of +remaining packing headroom below the ceiling. Changed entrances, scalar +rewrites/order, cleanup changes, nonmonotone internal transport, new helper +registers, shared centres or a changed coverage law remain outside scope. + +## Open next questions + +1. **Change an entrance or scalar dependency.** This changes the forced spans + that limit the current endpoint freedom. Pin one rewrite, establish its + arbitrary-dirty identity and complete frame/cone constraints, then screen + its whole local/idle bill. The blocker is a priced changed-word contract. +2. **Physically host the four-end word.** Compare its annotations with the + existing rank-seven-end constructions, then run native phase/wrapper and + complete owner admission. A local optimum supplies no global improvement; + the available ceiling gain is tiny and precision/outer obligations remain. + +## Credit + +Gareth Davidson (@bitplane), with substantial OpenAI Codex assistance. +Retains navinor's frame method and the chafreaky/PR557, ntedvs/PR776 and +Rohan Guliani/PR815 lineage; Alexander Schwartzman/PR1030 and Cinna Davis/PR1090; +Arham Tahir/PR1583; PR1671 and PR1995; Ross Richardson's uniform fixed-end +audit; Marius-Paul Dumitrean/PR1186 and Cinna Davis/PR1996; Douglas Colkitt/PR1240 +and Sagar Thakrar/PR1012; the full selected construction and word-reconciliation +lineage. See NOTICE.md and exact SOURCES.json pins. Apache-2.0; no independent +human or full formal verification is asserted. diff --git a/research/selected-k8-unrestricted-ends/SOURCES.json b/research/selected-k8-unrestricted-ends/SOURCES.json new file mode 100644 index 0000000000..e56d3e8b52 --- /dev/null +++ b/research/selected-k8-unrestricted-ends/SOURCES.json @@ -0,0 +1,90 @@ +{ + "schema_version": 1, + "base_commit": "1c47876ef742ba64bf9140b0527d63acf656a3b4", + "files": [ + { + "path": "certificates/selected-result.json", + "usage": "provenance", + "git_blob": "ae6a99f28aa468649eb66a361e764d769363bf11", + "sha256": "10b9e340fd8e354a37a0c4813c90e5de1dd42044b5f6aca4a3fc5a42b685fa32" + }, + { + "path": "docs/research/agent-task-catalog.json", + "usage": "provenance", + "git_blob": "06c96f5579bb67ed1b86d334e78fbed7da6945f1", + "sha256": "6686ad58f1fbdbc87134a78901b60fd53a20d3984355e91defbbebc9e9fa8075" + }, + { + "path": "research/complex-local-word-ceiling/README.md", + "usage": "input", + "git_blob": "f5f742f8196da29d2c3f4dffb3c27685ca9401f6", + "sha256": "b60be039cb0e03e064a27407d0bce9e58908d793da5ee405c876de5aebfa5f81" + }, + { + "path": "research/complex-local-word-ceiling/ceiling.py", + "usage": "input", + "git_blob": "6c0f54527d879396f689523bfde19928a9b6157c", + "sha256": "86a1432870b3b21d8454106ec9162fddc0471472d9214c590a1420f2426cedfc" + }, + { + "path": "research/complex-x4-frame-bound/README.md", + "usage": "input", + "git_blob": "e2ddf660ac1dabaf5286531dc784f9b21bfdd5bd", + "sha256": "0f5c4c73f9c20935b05698405543eccbf15a82663052a3d612ce7148799b34f4" + }, + { + "path": "research/complex-x4-frame-bound/gen_duals.py", + "usage": "input", + "git_blob": "bd85022a44dde95c14710d7dd28fed6b81926fd1", + "sha256": "9aac56f7cd1c497bfc50f0fb47bd5b14761033127575665d576d948ee11fc3f8" + }, + { + "path": "research/complex-x4-frame-bound/model.py", + "usage": "input", + "git_blob": "33cfb4f404be0ed9fabd53a362084ef8dbc1911c", + "sha256": "0fa808a82e12a8928e43de3131958b9018476ee8c25b1ebc841316705e4f0eff" + }, + { + "path": "research/gauge44-slots/construction/slots/SLOT-PINS-k8.json", + "usage": "input", + "git_blob": "2702c368f4de0b671577aee9a0e2df41c1b27658", + "sha256": "55dd229684febecb80638eff9c6b3986623e8539c6c956753b350209c3e0efe2" + }, + { + "path": "research/gauge44-slots/independent/audit_local.py", + "usage": "input", + "git_blob": "4744d8783c25bf7bf5076886169077ca3808309a", + "sha256": "03afcfc9da428b3f6edac81c1fee7f277ab81b64998efae78380b63498dec6cd" + }, + { + "path": "research/k8-rank7-composition/README.md", + "usage": "input", + "git_blob": "306ec133620358b6d043311d59f91013bbf1f886", + "sha256": "51a82cb44080ffa34fc0fa6a63a3ed7ecd63bea9c9e0258fb45adb36ae90563b" + }, + { + "path": "research/k8-rank7-composition/construct.py", + "usage": "input", + "git_blob": "5600f92cbb9d391563af88f59eafd0e16a3b33b0", + "sha256": "bdeb1584fc09457cb6d7e10977df6a9e009501ab26e52534e37df64ae3056324" + }, + { + "path": "research/k8-rank7-composition/data/END-RECIPE.json", + "usage": "input", + "git_blob": "7af7b6341c06589239bcf4c4634febbc8f757ec2", + "sha256": "071da31acee1c91c8297e81481bc505fb62b17444801c6b6bac3235e34dc0918" + }, + { + "path": "research/r480-owner-optimum/inputs/local/FULL-WORD.json.gz", + "usage": "input", + "git_blob": "723decbca8995e916d6f4b783aa3e1ddd4eb47fe", + "sha256": "49596aa4ed4fd36cd4582fd0e8ddeb09fd80370a7d8aea1ede52a135b536d289" + }, + { + "path": "research/selected1042-lineage-resolution98/README.md", + "usage": "input", + "git_blob": "b9d19db8834b1cd8b64e564555581748e870f948", + "sha256": "750417e6e34c6e0ce61fb85addfbdc5020dbbc12f01ba1a10df4cadc26d74845" + } + ] +} diff --git a/research/selected-k8-unrestricted-ends/TASK.json b/research/selected-k8-unrestricted-ends/TASK.json new file mode 100644 index 0000000000..cca70eaf58 --- /dev/null +++ b/research/selected-k8-unrestricted-ends/TASK.json @@ -0,0 +1,450 @@ +{ + "schema_version": 1, + "task_id": "complex-new-helper-inventory", + "priority_revision": 3, + "base_commit": "1c47876ef742ba64bf9140b0527d63acf656a3b4", + "original_card": { + "id": "complex-new-helper-inventory", + "question": "Can a new local cost interface change the deficit-to-recursive-cost ratio beyond current packing?", + "starting_points": [ + "research/complex-local-word-ceiling/README.md", + "research/heterogeneous-owner-assembly/README.md", + "certificates/selected-result.json" + ], + "methods": [ + "Propose a changed helper inventory and derive an optimistic exact moment.", + "Design a small completed instance and independently verify its endpoint and rank bill." + ], + "acceptance_gate": "A new physically realizable contract outside the frozen catalogue whose per-call profile, screened with ceiling.ceiling(), beats the selected word's packing ceiling; a lower cap does not establish identical circuitry or order attainable optima, and is insufficient to pass the stronger-budget target under this model.", + "first_step": { + "command": [ + "python3", + "-B", + "research/complex-local-word-ceiling/verify.py" + ], + "expected": "PASS_COMPLEX_LOCAL_WORD_CEILING", + "inspect": "Read the selected word's per-call local profile, its packing ceiling and the lever table; run levers.py for the ideal budget of the lever you target.", + "scope": "Positive control and planning budget only; this is not a new construction or full cold replay." + }, + "first_experiment": "Before any synthesis, write the candidate per-call local profile (and centre charge / unpaid coordinates if changed) and screen it with ceiling.ceiling(); reject it if even the ideal ceiling does not beat the selected word's by your stated margin.", + "bottleneck_link": "Packing of the selected word is capped at +0.87% (ceiling model); only a lower local excess spend or a changed coverage law raises the cap.", + "allowed_variations": [ + "Narrow to one changed boundary or helper type with explicit counts.", + "If the coverage law, template or guard changes, derive an applicable fully charged replacement bound instead of applying the incumbent ceiling outside its scope." + ], + "scope_change_triggers": [ + "Mixing only providers already inside the pinned catalogue." + ], + "overlap_terms": [ + "helper inventory", + "heterogeneous-owner", + "mutable leaver" + ] + }, + "scope_status": "refined", + "actual_scope": "All endpoints E_q between the original entrance S_q and FULL for each of 78 originally restricted selected k8 helpers, jointly with all A/B/early-cleanup frames. Original end subspace is no longer a cap. Fixed scalar operations/order, centre/target cut, entrances and early/full cleanup membership; all 402 full-cleanup helper ends stay FULL.", + "scope_change_reason": "Removes the old-terminal-subspace cap from PR1995, allowing every terminal subspace containing each fixed entrance, jointly with all gate frames. A negative screen does not satisfy the construction acceptance gate.", + "bottleneck_link": "Decides whether arbitrary helper terminal geometry can lower the complete per-call excess cost enough for the 5% target, beyond the proved nested-contraction class.", + "budget_minutes": 90, + "stop_rule": "One complete unrestricted-terminal endpoint screen or a precisely documented interface obstruction. No scalar reorder, entrance change or cleanup change.", + "outcome": "negative-result", + "evidence": "All 396241 LP columns in 129 components pass exact rational dual checks at the ceiling endpoint and the 5% target. A separate bitset/covector/integer-root checker agrees. The same four-end profile as PR1995 attains the bound; the unrestricted terminal domain retains a < 0.001690198050303, less than 0.00852% above the fixed-end ceiling. The attaining word passes the 704-column scalar/frame audit in both orientations.", + "author": "Gareth Davidson (@bitplane), with substantial OpenAI Codex assistance", + "ai_assistance": "Substantial OpenAI Codex assistance in mathematics, implementation, checking and writing; no independent human review.", + "open_questions": [ + { + "question": "Can changed entrances or one scalar dependency yield enough complete-profile gain?", + "why_it_matters": "Those changes alter the forced frame spans and escape this fixed-word, fixed-entrance domain.", + "first_step": "Pin one exact new entrance or dependency and reconstruct all gates, cones and the complete local/idle bill.", + "blocked_by": "Arbitrary-dirty scalar correctness, frame legality and a target-scale exact cost screen." + }, + { + "question": "Can a candidate attaining the unrestricted-terminal relaxation be physically hosted?", + "why_it_matters": "A local LP witness does not establish a global supplier improvement.", + "first_step": "Materialize its exact annotations, run native emission/phase/wrapper checks and price one complete owner placement.", + "blocked_by": "Emitted-interface admission, whole-call hosting and the inherited precision/outer obligations." + } + ], + "selection_nonce": "5f5984c68e5381ec12276b69c721f48c", + "catalogue_scope_key": "f3b0895a4f9f1cc62e75", + "discussion": "https://github.com/CrocSwap/integer-mult-bounds/discussions/2000", + "first_experiment": { + "baseline": { + "1": 2412, + "2": 418, + "3": 432, + "4": 142, + "5": 82, + "8": 8 + }, + "removed_helper_climbs": { + "1": 194, + "3": 60, + "2": 46 + }, + "optimistic_profile": { + "1": 2218, + "2": 372, + "3": 372, + "4": 142, + "5": 82, + "8": 8 + }, + "ceiling": [ + "456620750029/250000000000000", + "1826483000117/1000000000000000" + ], + "target": "35491136290869/20000000000000000", + "headroom": true, + "scope": "Planning profile only: waive the baseline costs of the 78 restricted helpers and retain all other baseline calls. Released mass recharged as ideal idle. Not a universal unrestricted-domain lower bound or a physical assignment." + }, + "predecessors": { + "PR1995": "d47b4b656732f840c9b3252cad5a4efa20924b71", + "PR1671": "ce130d291f5ab6dd801544886a16f62d42d86118", + "PR1583": "04516881142961cdf97a828fbbc63d72e232a148", + "uniform_fixed_ends": "Ross Richardson, research/selected-k8-uniform-frame-audit at the pinned base" + }, + "domain_census": { + "graph": { + "nodes_sha256": "4eb47e21725d21f8c23bc5491a576fd817c31c2403fc7bc3ff626ced5750b881", + "domains_sha256": "d4af047a50406102f73bb1e4826f417c75844e4d0155194bbd15899693341c06", + "edges_sha256": "4f30b8c3c22b7e70bf48ce5398212512081acb7fed4a61ad67873bc032218e62", + "cones_sha256": "5546e8ad5d979e0eaf618a4adbb333a7ec6b3528ef71bbf659b05ba2e5fc0004", + "node_count": 6941, + "edge_count": 10328, + "cone_helpers": 78, + "cone_edges": 106 + }, + "free_gates": 2589, + "free_ends": 78, + "quotient_counts": [ + 1, + 2, + 5, + 16, + 67, + 374 + ], + "component_sizes": { + "1": 117, + "9": 2, + "21": 5, + "23": 1, + "90": 3, + "2134": 1 + }, + "local_mass_interval": [ + 5540, + 5792 + ], + "idle_mass_interval": [ + 1440, + 1692 + ] + }, + "overlap": { + "entry": { + "searched_at": "2026-10-14T16:39:12.840794+00:00", + "coverage": { + "open_prs": { + "fetched_at": "2026-10-14T16:38:03.332379+00:00", + "complete_pagination": true, + "records": 413 + }, + "discussions": { + "fetched_at": "2026-10-14T16:39:12.789009+00:00", + "complete_pagination": true, + "records": 623 + } + }, + "warnings": [], + "limits": "Remote PR scope is open PRs including drafts. Closed work is searched through local READMEs, TASK metadata and ledger only. No code diffs or arbitrary package files are searched. Recheck relevant heads before submission.", + "matches_total": 178, + "returned_matches": 20 + }, + "terminal_search": { + "searched_at": "2026-10-14T16:42:03.250912+00:00", + "coverage": { + "open_prs": { + "fetched_at": "2026-10-14T16:38:03.332379+00:00", + "complete_pagination": true, + "records": 413 + }, + "discussions": { + "fetched_at": "2026-10-14T16:39:12.789009+00:00", + "complete_pagination": true, + "records": 623 + } + }, + "warnings": [], + "limits": "Remote PR scope is open PRs including drafts. Closed work is searched through local READMEs, TASK metadata and ledger only. No code diffs or arbitrary package files are searched. Recheck relevant heads before submission.", + "matches_total": 167, + "returned_matches": 167 + }, + "rotations": { + "searched_at": "2026-10-14T16:40:29.678586+00:00", + "coverage": { + "open_prs": { + "fetched_at": "2026-10-14T16:38:03.332379+00:00", + "complete_pagination": true, + "records": 413 + }, + "discussions": { + "fetched_at": "2026-10-14T16:39:12.789009+00:00", + "complete_pagination": true, + "records": 623 + } + }, + "warnings": [], + "limits": "Remote PR scope is open PRs including drafts. Closed work is searched through local READMEs, TASK metadata and ledger only. No code diffs or arbitrary package files are searched. Recheck relevant heads before submission.", + "matches_total": 21, + "returned_matches": 20 + }, + "nearby_heads": [ + { + "headRefOid": "3855fd413a3ccfc31988033801b9648c25aee783", + "number": 1186, + "state": "OPEN", + "title": "Tooling: exact frame solver and delivery-rewrite search for gauge44/k8 local words (no new \u03ba)", + "url": "https://github.com/CrocSwap/integer-mult-bounds/pull/1186" + }, + { + "headRefOid": "1885a1086172a61afbf97b0db01ec70927401d49", + "number": 1996, + "state": "OPEN", + "title": "Research: bound selected-word coordinate frame rails", + "url": "https://github.com/CrocSwap/integer-mult-bounds/pull/1996" + } + ], + "final": { + "searched_at": "2026-10-14T17:01:44.009879+00:00", + "coverage": { + "open_prs": { + "fetched_at": "2026-10-14T17:00:22.435271+00:00", + "complete_pagination": true, + "records": 381 + }, + "discussions": { + "fetched_at": "2026-10-14T17:01:43.921041+00:00", + "complete_pagination": true, + "records": 643 + } + }, + "warnings": [], + "limits": "Remote PR scope is open PRs including drafts. Closed work is searched through local READMEs, TASK metadata and ledger only. No code diffs or arbitrary package files are searched. Recheck relevant heads before submission.", + "matches_total": 16, + "returned_matches": 16 + }, + "final_related_heads": [ + { + "headRefOid": "d47b4b656732f840c9b3252cad5a4efa20924b71", + "number": 1995, + "state": "OPEN", + "title": "Research: bound joint helper-end and frame contractions of the selected k8 word", + "url": "https://github.com/CrocSwap/integer-mult-bounds/pull/1995" + }, + { + "headRefOid": "3855fd413a3ccfc31988033801b9648c25aee783", + "number": 1186, + "state": "OPEN", + "title": "Tooling: exact frame solver and delivery-rewrite search for gauge44/k8 local words (no new \u03ba)", + "url": "https://github.com/CrocSwap/integer-mult-bounds/pull/1186" + }, + { + "headRefOid": "1885a1086172a61afbf97b0db01ec70927401d49", + "number": 1996, + "state": "OPEN", + "title": "Research: bound selected-word coordinate frame rails", + "url": "https://github.com/CrocSwap/integer-mult-bounds/pull/1996" + } + ] + }, + "canonical_receipt_sha256": "1891bcf17e86405d265ed4b51b9de6f6059be95c50a5b6c28b21d2ac8057093e", + "canonical_duals_sha256": "afdf3858f6862bcb386c4e5c0f21fde8f05aed038d90f87025fe6915fa66a653", + "canonical_primal_sha256": "b97620f4bb69848445abd3053994fca2a40ab2bf248b4505c67e098700d5966c", + "latest_main_check": { + "verified_at_utc": "2026-10-14T17:01:26.908915+00:00", + "base": "1c47876ef742ba64bf9140b0527d63acf656a3b4", + "main": "b6135f9fe8c0783f22bd87992a080575f2943511", + "records": [ + { + "path": "AGENTS.md", + "base_blob": "860762e04e963e1b163b8fa5267854c0040a9e67", + "main_blob": "860762e04e963e1b163b8fa5267854c0040a9e67", + "same": true + }, + { + "path": "CONTRIBUTING.md", + "base_blob": "e51435543687f1bd88ab22248082dc689ce8b853", + "main_blob": "e51435543687f1bd88ab22248082dc689ce8b853", + "same": true + }, + { + "path": "autoresearch.md", + "base_blob": "84c108dd0d650944066ee34796e733f2329acf28", + "main_blob": "84c108dd0d650944066ee34796e733f2329acf28", + "same": true + }, + { + "path": "docs/research/agent-task-catalog.json", + "base_blob": "06c96f5579bb67ed1b86d334e78fbed7da6945f1", + "main_blob": "06c96f5579bb67ed1b86d334e78fbed7da6945f1", + "same": true + }, + { + "path": "certificates/selected-result.json", + "base_blob": "ae6a99f28aa468649eb66a361e764d769363bf11", + "main_blob": "ae6a99f28aa468649eb66a361e764d769363bf11", + "same": true + }, + { + "path": "scripts/research_package.py", + "base_blob": "2b85498087ba032c29d62a0b2080065ac9e53ff6", + "main_blob": "6733ec2f5700e6602d60dc95938c1ea1854980f0", + "same": false + }, + { + "path": "docs/research/research-package-guide.md", + "base_blob": "8dc1a921179dcc7a9ecc2dc961ccd77b5ed60c02", + "main_blob": "4aea949036c90566637d3c5f7f4a3054579dc40b", + "same": false + }, + { + "path": "research/r480-owner-optimum/inputs/local/FULL-WORD.json.gz", + "base_blob": "723decbca8995e916d6f4b783aa3e1ddd4eb47fe", + "main_blob": "723decbca8995e916d6f4b783aa3e1ddd4eb47fe", + "same": true + }, + { + "path": "research/gauge44-slots/construction/slots/SLOT-PINS-k8.json", + "base_blob": "2702c368f4de0b671577aee9a0e2df41c1b27658", + "main_blob": "2702c368f4de0b671577aee9a0e2df41c1b27658", + "same": true + }, + { + "path": "research/complex-x4-frame-bound/model.py", + "base_blob": "33cfb4f404be0ed9fabd53a362084ef8dbc1911c", + "main_blob": "33cfb4f404be0ed9fabd53a362084ef8dbc1911c", + "same": true + }, + { + "path": "research/complex-x4-frame-bound/gen_duals.py", + "base_blob": "bd85022a44dde95c14710d7dd28fed6b81926fd1", + "main_blob": "bd85022a44dde95c14710d7dd28fed6b81926fd1", + "same": true + }, + { + "path": "research/complex-x4-frame-bound/README.md", + "base_blob": "e2ddf660ac1dabaf5286531dc784f9b21bfdd5bd", + "main_blob": "e2ddf660ac1dabaf5286531dc784f9b21bfdd5bd", + "same": true + }, + { + "path": "research/complex-local-word-ceiling/ceiling.py", + "base_blob": "6c0f54527d879396f689523bfde19928a9b6157c", + "main_blob": "6c0f54527d879396f689523bfde19928a9b6157c", + "same": true + }, + { + "path": "research/complex-local-word-ceiling/README.md", + "base_blob": "f5f742f8196da29d2c3f4dffb3c27685ca9401f6", + "main_blob": "f5f742f8196da29d2c3f4dffb3c27685ca9401f6", + "same": true + }, + { + "path": "research/gauge44-slots/independent/audit_local.py", + "base_blob": "4744d8783c25bf7bf5076886169077ca3808309a", + "main_blob": "4744d8783c25bf7bf5076886169077ca3808309a", + "same": true + }, + { + "path": "research/k8-rank7-composition/data/END-RECIPE.json", + "base_blob": "7af7b6341c06589239bcf4c4634febbc8f757ec2", + "main_blob": "7af7b6341c06589239bcf4c4634febbc8f757ec2", + "same": true + }, + { + "path": "research/k8-rank7-composition/construct.py", + "base_blob": "5600f92cbb9d391563af88f59eafd0e16a3b33b0", + "main_blob": "5600f92cbb9d391563af88f59eafd0e16a3b33b0", + "same": true + }, + { + "path": "research/k8-rank7-composition/README.md", + "base_blob": "306ec133620358b6d043311d59f91013bbf1f886", + "main_blob": "306ec133620358b6d043311d59f91013bbf1f886", + "same": true + }, + { + "path": "research/selected1042-lineage-resolution98/README.md", + "base_blob": "b9d19db8834b1cd8b64e564555581748e870f948", + "main_blob": "b9d19db8834b1cd8b64e564555581748e870f948", + "same": true + } + ], + "package_path_collision": false + }, + "validation": { + "registered": { + "argv": [ + "/usr/bin/python3.12", + "-I", + "-B", + "scripts/research_package.py", + "--package", + "research/selected-k8-unrestricted-ends" + ], + "python": "Python 3.12.3", + "exit_code": 0, + "elapsed_seconds": 91.83699259298737 + }, + "controls": { + "groups": 20, + "separate_full_control_run": { + "argv": [ + "/usr/bin/python3.12", + "-I", + "-O", + "-B", + "research/selected-k8-unrestricted-ends/test_package.py" + ], + "exit_code": 0, + "elapsed_seconds": 75.95660864800448 + } + }, + "additional": { + "python": "CPython 3.14.4", + "commands": [ + "verify.py", + "independent.py" + ], + "flags": [ + "-I", + "-O", + "-B" + ], + "relocated": true, + "files_mode": "0444", + "directories_mode": "0555", + "exit_codes": [ + 0, + 0 + ], + "unchanged": true + }, + "latest_main_metadata": { + "main": "b6135f9fe8c0783f22bd87992a080575f2943511", + "check_only": true, + "exit_code": 0, + "scope": "Current-runner changes only canonical relative-path validation and planning; full command replay passed on the branch runner." + }, + "native_scope": "Three exact 704-column scalar/frame audits in both orientations. No emitted native program, phase/wrapper admission or full supplier replay.", + "unrun": [ + "selected full cold replay", + "emitted native programs and phase/wrapper admission", + "new physical owner allocation and global/outer invoice", + "all-size compiler and precision/tape obligations", + "outer analytic transfer" + ] + } +} diff --git a/research/selected-k8-unrestricted-ends/VERIFY.json b/research/selected-k8-unrestricted-ends/VERIFY.json new file mode 100644 index 0000000000..0de87b87d6 --- /dev/null +++ b/research/selected-k8-unrestricted-ends/VERIFY.json @@ -0,0 +1,54 @@ +{ + "schema_version": 1, + "status": "ready", + "python": "3.12", + "requirements": [], + "inputs": [ + "research/complex-local-word-ceiling/README.md", + "research/complex-local-word-ceiling/ceiling.py", + "research/complex-x4-frame-bound/README.md", + "research/complex-x4-frame-bound/gen_duals.py", + "research/complex-x4-frame-bound/model.py", + "research/gauge44-slots/construction/slots/SLOT-PINS-k8.json", + "research/gauge44-slots/independent/audit_local.py", + "research/k8-rank7-composition/README.md", + "research/k8-rank7-composition/construct.py", + "research/k8-rank7-composition/data/END-RECIPE.json", + "research/r480-owner-optimum/inputs/local/FULL-WORD.json.gz", + "research/selected1042-lineage-resolution98/README.md" + ], + "commands": [ + { + "argv": [ + "{python}", + "-I", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 300, + "checks": "Complete unrestricted terminal subspaces and coupled frame LP, every exact dual column, primal attainment and full idle-recharged ceiling." + }, + { + "argv": [ + "{python}", + "-I", + "-O", + "-B", + "{package}/independent.py" + ], + "timeout_seconds": 300, + "checks": "Separate bitset/covector graph and complete domains, all dual inequalities, integer-root full moment and global mass interval." + }, + { + "argv": [ + "{python}", + "-I", + "-O", + "-B", + "{package}/test_package.py" + ], + "timeout_seconds": 600, + "checks": "Three all-column scalar/frame audits; rotated and full endpoint omissions, quotient enumeration, idle-cost false positive, exact dual/source corruption and optimized relocation." + } + ] +} diff --git a/research/selected-k8-unrestricted-ends/common.py b/research/selected-k8-unrestricted-ends/common.py new file mode 100644 index 0000000000..28147d3749 --- /dev/null +++ b/research/selected-k8-unrestricted-ends/common.py @@ -0,0 +1,108 @@ +"""Source binding and serialization; no frame or optimization mathematics. + +Adapted from Gareth Davidson PR1995 (73e323159d65c974debb180189694fd59144da5f). +Gareth Davidson with OpenAI Codex assistance. Apache-2.0. +""" +import gzip +import hashlib +import json +from pathlib import Path +import types + +HERE = Path(__file__).resolve().parent +BASE = "1c47876ef742ba64bf9140b0527d63acf656a3b4" +WORD_SHA = "c2b294300760e1fd6eeab8c22c4d13e4633dca40e52cac8da0d68163a76e3ca8" +PROFILE = {1: 2412, 2: 418, 3: 432, 4: 142, 5: 82, 8: 8} +INPUTS = { + "research/r480-owner-optimum/inputs/local/FULL-WORD.json.gz": "WORD.json.gz", + "research/gauge44-slots/construction/slots/SLOT-PINS-k8.json": "SLOT-PINS.json", + "research/complex-x4-frame-bound/model.py": "frame_model.py", + "research/complex-x4-frame-bound/gen_duals.py": "gen_duals.py", + "research/complex-x4-frame-bound/README.md": "FRAME-METHOD.md", + "research/complex-local-word-ceiling/ceiling.py": "ceiling.py", + "research/complex-local-word-ceiling/README.md": "CEILING.md", + "research/gauge44-slots/independent/audit_local.py": "audit_local.py", + "research/k8-rank7-composition/data/END-RECIPE.json": "END-RECIPE.json", + "research/k8-rank7-composition/construct.py": "construct.py", + "research/k8-rank7-composition/README.md": "END-WITNESS.md", + "research/selected1042-lineage-resolution98/README.md": "WORD-LINEAGE.md" +} + + +def need(ok, why): + if not ok: + raise ValueError(why) + + +def parse(raw): + def pairs(items): + result = {} + for key, value in items: + need(key not in result, "duplicate JSON key: " + key) + result[key] = value + return result + def bad(value): + raise ValueError("noninteger/nonfinite JSON number: " + value) + return json.loads(raw, object_pairs_hook=pairs, parse_float=bad, parse_constant=bad) + + +def canonical(obj): + return json.dumps(obj, sort_keys=True, separators=(",", ":"), allow_nan=False).encode() + + +def digest(obj): + return hashlib.sha256(canonical(obj)).hexdigest() + + +def source_bindings(): + need(parse((HERE / "INPUTS.json").read_bytes()) == INPUTS, "input mapping") + data = parse((HERE / "SOURCES.json").read_bytes()) + provenance = {"certificates/selected-result.json", "docs/research/agent-task-catalog.json"} + need(data["base_commit"] == BASE, "source base") + need(len(data["files"]) == len(INPUTS) + 2 and + {r["path"] for r in data["files"]} == set(INPUTS) | provenance, "source inventory") + for row in data["files"]: + path = row["path"] + need(row["usage"] == ("input" if path in INPUTS else "provenance"), "source role") + if path not in INPUTS: + continue + raw = (HERE / "references" / INPUTS[path]).read_bytes() + need(hashlib.sha256(raw).hexdigest() == row["sha256"], "retained source SHA256") + blob = hashlib.sha1(b"blob " + str(len(raw)).encode() + b"\0" + raw).hexdigest() + need(blob == row["git_blob"], "retained source Git blob") + live = HERE.parents[1] / path + if live.exists(): + need(live.read_bytes() == raw, "live mathematical source drift") + + +def retained(name): + """Keep the retained source's guards active even when the caller uses -O.""" + path = HERE / "references" / name + result = types.ModuleType("retained_" + path.stem) + result.__file__ = str(path) + exec(compile(path.read_bytes(), str(path), "exec", optimize=0), result.__dict__) + return result + + +def word(): + raw = gzip.decompress((HERE / "references/WORD.json.gz").read_bytes()) + pins = parse((HERE / "references/SLOT-PINS.json").read_bytes()) + need(hashlib.sha256(raw).hexdigest() == pins["word_sha256"] == WORD_SHA, "selected word content pin") + data = parse(raw) + need({int(r): n for r, n in data["report"]["local_profile"].items()} == PROFILE, "baseline local profile") + need(data["report"]["R"] == 480 and data["report"]["h"] == 9 and data["report"]["v"] == 112, + "selected word dimensions") + need(sum(r*n for r, n in PROFILE.items()) == 5586, "local rank mass") + return data + + +def duals(): + raw = gzip.decompress((HERE / "DUALS.json.gz").read_bytes()) + data = parse(raw) + need(data["schema"] == "selected-k8-unrestricted-end-duals-v1" and data["word_sha256"] == WORD_SHA, + "dual word binding") + return data + + +def primal_data(): + return parse(gzip.decompress((HERE / "PRIMAL.json.gz").read_bytes())) diff --git a/research/selected-k8-unrestricted-ends/independent.py b/research/selected-k8-unrestricted-ends/independent.py new file mode 100644 index 0000000000..1beba31f13 --- /dev/null +++ b/research/selected-k8-unrestricted-ends/independent.py @@ -0,0 +1,462 @@ +#!/usr/bin/env python3 +"""Separate bitset/event-graph and integer-root dual checker. Apache-2.0. + +Shares only source binding/JSON utilities with the primary checker. Does not +import the retained frame model, LP generator, ceiling engine or primary code. +Adapts Gareth Davidson PR1995, mathematical commit +73e323159d65c974debb180189694fd59144da5f, to coupled variable endpoints. +Gareth Davidson, with substantial OpenAI Codex assistance. +""" +from collections import Counter, defaultdict +from fractions import Fraction as Q +from functools import lru_cache +import importlib.util +import json +from math import isqrt +from pathlib import Path + +HERE = Path(__file__).resolve().parent +spec = importlib.util.spec_from_file_location("independent_sources", HERE / "common.py") +U = importlib.util.module_from_spec(spec) +spec.loader.exec_module(U) +need = U.need +FULL = (1 << 512)-1 +SCALE = 1 << 256 +BITS = 96 +BASE_LO = Q(1690054109088, 10**15) +BASE_HI = Q(1690054109089, 10**15) +TARGET = Q(21, 20)*BASE_HI +RANKS = range(1, 10) + + +def elements(mask): + while mask: + bit = mask & -mask + yield bit.bit_length()-1 + mask ^= bit + + +@lru_cache(None) +def extend(frame, vector): + if (frame >> vector) & 1: + return frame + return frame | sum(1 << (x ^ vector) for x in elements(frame)) + + +def frame(vectors): + result = 1 + for vector in vectors: + need(type(vector) is int and 0 <= vector < 512, "frame-vector domain") + result = extend(result, vector) + return result + + +def dimension(space): + size = space.bit_count() + need(size > 0 and not size & (size-1), "subspace size") + return size.bit_length()-1 + + +@lru_cache(None) +def canonical_frame(space): + pivots = {} + for value in elements(space): + v = value + for p in sorted(pivots, reverse=True): + if (v >> p) & 1: + v ^= pivots[p] + if v: + p = v.bit_length()-1 + for k in list(pivots): + if (pivots[k] >> p) & 1: + pivots[k] ^= v + pivots[p] = v + result = tuple(pivots[p] for p in sorted(pivots, reverse=True)) + need(frame(result) == space, "canonical-frame span") + return result + + +@lru_cache(None) +def join(left, right): + result = left + for x in canonical_frame(right): + result = extend(result, x) + return result + + +@lru_cache(None) +def small_spaces(k): + seen, todo = {1}, [1] + while todo: + sub = todo.pop() + for x in range(1, 1 << k): + other = extend(sub, x) + if other not in seen: + seen.add(other) + todo.append(other) + return tuple(sorted(seen)) + + +def interval(lo, hi): + need(lo & ~hi == 0, "independent empty interval") + complement, current = [], lo + for x in canonical_frame(hi): + if not ((current >> x) & 1): + complement.append(x) + current = extend(current, x) + need(current == hi and len(complement) <= 5, "complete quotient domain") + result = [] + for sub in small_spaces(len(complement)): + value = lo + for bits in elements(sub): + x = 0 + for j, c in enumerate(complement): + if (bits >> j) & 1: + x ^= c + value = extend(value, x) + result.append(value) + need(len(set(result)) == len(result), "independent duplicate frame") + return sorted(result, key=lambda x: (dimension(x), canonical_frame(x))) + + +def operands(op): + need(op[0] in ("add", "scale"), "scalar primitive") + return op[1:3] if op[0] == "add" else op[1:2] + + +def scalar(rows, operations): + for op in operations: + if op[0] == "add": + t, s = op[1:3] + a = Q(op[3], op[4]) + for key, value in tuple(rows[s].items()): + new = rows[t].get(key, Q(0)) + a*value + if new: + rows[t][key] = new + else: + rows[t].pop(key, None) + else: + t = op[1] + a = Q(op[2], op[3]) + need(a, "invertible scale") + rows[t] = {key: a*value for key, value in rows[t].items()} + + +def cone_supports(word, n, v, low): + """Forward restricted columns, plus row covectors propagated through inverses.""" + main = word["A"]+word["cut"]+word["B"] + response = [{r: Q(1)} if r >= 2*v else {} for r in range(n)] + scalar(response, main) + dirty = [response[r].copy() if v <= r < 2*v else {} for r in range(n)] + scalar(dirty, word["precondition"]) + compensation = [["add", r, k, -a.numerator, a.denominator, []] + for r in range(v, 2*v) for k, a in sorted(dirty[r].items())] + prefix = word["precondition"]+compensation+main + columns = [{r: Q(1)} if r in low else {} for r in range(n)] + scalar(columns, prefix) + inverses = {q: {q: Q(1)} for q in low} + for op in prefix: + if op[0] == "add": + t, s = op[1:3] + a = Q(op[3], op[4]) + for row in inverses.values(): + if t in row: + new = row.get(s, Q(0))-a*row[t] + if new: + row[s] = new + else: + row.pop(s, None) + else: + t = op[1] + a = Q(op[2], op[3]) + for row in inverses.values(): + if t in row: + row[t] /= a + return {q: sorted((set(inverses[q]) | {k for k in range(n) if q in columns[k]})-{q}) + for q in low} + + +def build(word): + v, n = 112, 704 + fixed = {} + for q in range(n): + start = frame([word["ports"][q]]) if q < v else 1 + if str(q) in word["start_extra"]: + start = frame(word["start_extra"][str(q)]) + if v <= q < 2*v: + p = word["ports"][q-v] + end = sum(1 << x for x in range(512) if (x & p).bit_count() % 2 == 0) + else: + end = FULL + if str(q) in word["helper_final"]: + end = frame(word["helper_final"][str(q)]) + fixed[("S", q)], fixed[("E", q)] = start, end + low = {int(q): frame(x) for q, x in word["helper_final"].items()} + cones = cone_supports(word, n, v, low) + levels = {int(t): frame(x) for t, x in word["target_levels"].items()} + pins = {q: frame(x) for q, x in zip(word["centers"], word["center_frames"])} + need(len(pins) == 8, "independent centre count") + for t in range(v): + need(v+t not in pins, "centre/target collision") + pins[v+t] = levels.get(t, 1) + for q, f in pins.items(): + fixed[("P", q)] = f + centres = [] + for q, f in zip(word["centers"], word["center_frames"]): + cur = frame(f) + served = {levels.get(op[1]-v, 1) for op in word["cut"] if op[2] == q} + for target in sorted(served, key=lambda x: -dimension(x)): + need(target & ~cur == 0, "independent centre descent") + if target != cur: + centres.append(dimension(cur)-dimension(target)) + cur = target + tail = [word["cleanup"][i][:-1]+[f] for i, f in word["early_cleanup"]] + operations = word["A"]+word["B"]+tail + nA, nB = len(word["A"]), len(word["B"]) + chains = {q: [("S", q)] for q in range(n)} + order = [("S", q) for q in range(n)] + boundaries = {} + for i, op in enumerate(operations): + if i == nA: + for q in pins: + node = ("P", q) + chains[q].append(node) + order.append(node) + if i == nA+nB: + boundaries = {q: chains[q][-1] for q in range(n)} + node = ("G", i) + order.append(node) + for q in operands(op): + chains[q].append(node) + for q in range(n): + node = ("E", q) + chains[q].append(node) + order.append(node) + need(len(operations) > nA+nB, "selected word must have tail events") + edges = Counter((a, b) for ch in chains.values() for a, b in zip(ch, ch[1:])) + cone_edges = sorted({(boundaries[k], ("E",q)) for q,support in cones.items() for k in support}) + for edge in cone_edges: + edges.setdefault(edge, 0) + original_fixed = dict(fixed) + for q in low: + del fixed[("E",q)] + pred, succ = defaultdict(set), defaultdict(set) + for a, b in edges: + pred[b].add(a) + succ[a].add(b) + lo, hi = {}, {} + for node in order: + lower = 1 + for p in pred[node]: + lower = join(lower, lo[p]) + lo[node] = fixed.get(node, lower) + need(lower & ~lo[node] == 0, "independent fixed lower bound") + for node in reversed(order): + upper = FULL + for child in succ[node]: + upper &= hi[child] + hi[node] = fixed.get(node, upper) + need(hi[node] & ~upper == 0 and lo[node] & ~hi[node] == 0, "independent upper bound") + given = {**original_fixed, **{("G", i): frame(op[-1]) for i, op in enumerate(operations)}} + domains = {node: interval(lo[node],hi[node]) for node in order if lo[node]!=hi[node]} + profile = Counter(centres) + for (a, b), mult in edges.items(): + need(given[a] & ~given[b] == 0, "independent baseline nesting") + d = dimension(given[b])-dimension(given[a]) + if d and mult: + profile[d] += mult + need(dict(profile) == U.PROFILE, "independent baseline profile") + for node, f in given.items(): + need(lo[node] & ~f == 0 and f & ~hi[node] == 0, "independent given frame interval") + unseen, comps = set(domains), [] + while unseen: + start = min(unseen) + todo, comp = [start], set() + while todo: + node = todo.pop() + if node not in unseen: + continue + unseen.remove(node) + comp.add(node) + todo.extend((pred[node] | succ[node]) & unseen) + comps.append(sorted(comp)) + graph = {"nodes_sha256": U.digest([[list(n), lo[n], hi[n]] for n in sorted(lo)]), + "domains_sha256": U.digest([[list(n), sorted(domains[n])] for n in sorted(domains)]), + "edges_sha256": U.digest([[list(a), list(b), k] for (a, b), k in sorted(edges.items())]), + "cones_sha256": U.digest([[q,support] for q,support in sorted(cones.items())]), + "node_count": len(lo), "edge_count": len(edges), "cone_helpers": len(cones), "cone_edges": len(cone_edges)} + return dict(lo=lo, hi=hi, given=given, domains=domains, edges=edges, comps=comps, + graph=graph, centres=centres, chains=chains, original_caps=low, cones=cones) + + +def ceil_sqrt(n): + r = isqrt(n) + return r + int(r*r != n) + + +@lru_cache(None) +def child(r, a): + """Enclose (r/73)*(73/r)^a with dyadic exponent brackets and integer square roots.""" + need(1 <= r <= 73 and 0 <= a < 1, "root oracle domain") + lo = (73*SCALE)//r + hi = (73*SCALE+r-1)//r + integer_base = (lo, hi) + roots = [] + for _ in range(BITS): + lo, hi = isqrt(lo*SCALE), ceil_sqrt(hi*SCALE) + roots.append((lo, hi)) + power = (a.numerator << BITS)//a.denominator + def evaluate(k): + need(0 <= k <= 1 << BITS, "dyadic exponent bracket") + if k == 1 << BITS: + return integer_base + lower = upper = SCALE + for j, (left, right) in enumerate(roots, 1): + if (k >> (BITS-j)) & 1: + lower = (lower*left)//SCALE + upper = (upper*right+SCALE-1)//SCALE + return lower, upper + return Q(r*evaluate(power)[0], 73*SCALE), Q(r*evaluate(power+1)[1], 73*SCALE) + + +def charges(a): + costs={d:child(d,a) for d in RANKS} + idle=child(51,a) + return {d:(73*(costs[d][0]-Q(d,51)*idle[1]), + 73*(costs[d][1]-Q(d,51)*idle[0])) for d in RANKS} + + +def check(data, duals, bounds): + need(len(duals["components"]) == len(data["comps"]), "independent component coverage") + stats = Counter() + residuals = set() + for comp, record in zip(data["comps"], duals["components"]): + need(record["first"] == json.dumps(comp[0]) and record["nodes"] == len(comp), "independent component identity") + members = set(comp) + domain = data["domains"] + unary = {n: {f: Counter() for f in domain[n]} for n in comp} + pairs = {} + for (a, b), mult in data["edges"].items(): + if a in members and b in members: + pairs[(a, b)] = mult + elif a in members: + for f in domain[a]: + d = dimension(data["given"][b])-dimension(f) + need(f & ~data["given"][b] == 0, "independent unary nesting") + if d: + unary[a][f][d] += mult + elif b in members: + for f in domain[b]: + d = dimension(f)-dimension(data["given"][a]) + need(data["given"][a] & ~f == 0, "independent unary nesting") + if d: + unary[b][f][d] += mult + rows = {json.dumps(("N", n)) for n in comp} + touching = defaultdict(list) + for a, b in pairs: + for side, node in enumerate((a, b)): + touching[node].append((a, b, side)) + rows.update(json.dumps(("M", a, b, side, canonical_frame(f))) for f in domain[node]) + need(set(record["duals"]) <= rows, "independent unknown dual row") + q = {k: {int(d): Q(v) for d, v in vec.items()} for k, vec in record["duals"].items()} + need(all(d in RANKS for vec in q.values() for d in vec), "independent dual coordinate") + def add_to(vec, key, sign): + for d, v in q.get(json.dumps(key), {}).items(): + vec[d] = vec.get(d, Q(0))+sign*v + def accept(vec): + clean = {d: Q(vec.get(d, 0)) for d in RANKS} + if any(clean.values()): + for bound in bounds: + value = sum((v*bound[d][0 if v > 0 else 1] for d, v in clean.items() if v), Q(0)) + need(value > 0, "independent reduced cost") + stats["positive"] += 1 + else: + stats["zero"] += 1 + residuals.add(tuple(str(clean[d]) for d in RANKS)) + stats["columns"] += 1 + objective, baseline = Counter(), Counter() + for node in comp: + add_to(objective, ("N", node), 1) + baseline.update(unary[node][data["given"][node]]) + for f in domain[node]: + vec = dict(unary[node][f]) + add_to(vec, ("N", node), -1) + for a, b, side in touching[node]: + add_to(vec, ("M", a, b, side, canonical_frame(f)), 1) + accept(vec) + for (a, b), mult in pairs.items(): + d = dimension(data["given"][b])-dimension(data["given"][a]) + if d: + baseline[d] += mult + for left in domain[a]: + for right in domain[b]: + if left & ~right: + continue + d = dimension(right)-dimension(left) + vec = {d: mult} if d else {} + add_to(vec, ("M", a, b, 0, canonical_frame(left)), -1) + add_to(vec, ("M", a, b, 1, canonical_frame(right)), -1) + accept(vec) + need(all(objective[d] == baseline[d] for d in RANKS), "independent exact primal/dual identity") + stats.update(components=1, rows=len(rows)) + stats["distinct_reduced_vectors"] = len(residuals) + return dict(stats) + + +def main(): + U.source_bindings() + expected=U.parse((HERE/"EXPECTED.json").read_bytes()) + data=build(U.word()) + need(data["graph"]==expected["graph"],"independent complete graph differs") + dual=U.duals() + need(U.digest(dual)==expected["duals_sha256"],"independent dual binding") + primal=U.primal_data() + need(U.digest(primal)==expected["primal_sha256"],"independent primal binding") + need(set(primal["assignment"])=={json.dumps(n) for n in data["domains"]},"independent primal domain") + for n,choices in data["domains"].items(): + f=frame(primal["assignment"][json.dumps(n)]) + need(f in choices,"independent primal choice") + data["given"][n]=f + profile=Counter(data["centres"]) + for (a,b),mult in data["edges"].items(): + left,right=data["given"][a],data["given"][b] + need(left & ~right==0,"independent primal containment, including cones") + d=dimension(right)-dimension(left) + if d and mult:profile[d]+=mult + need(dict(profile)=={1:2400,2:446,3:416,4:142,5:82,8:8},"independent complete primal bill") + need({str(r):n for r,n in sorted(profile.items())}==expected["profile"]==primal["profile"],"independent profile fields") + free_ends=sorted(n[1] for n in data["domains"] if n[0]=="E") + need(free_ends==expected["free_ends"] and len(free_ends)==78,"independent endpoint coverage") + forced=sorted(set(data["original_caps"])-set(free_ends)) + need(forced==expected["forced_ends"] and len(forced)==0,"independent forced ends") + intervals=Counter((dimension(data["lo"][("E",q)]),dimension(data["hi"][("E",q)]),len(data["domains"][("E",q)])) for q in free_ends) + need(intervals=={(4,9,374):32,(7,9,5):46},"independent complete unrestricted end intervals") + need(expected["endpoint_intervals"]==[{"lower_dimension":a,"upper_dimension":b,"choices":c,"count":n} for (a,b,c),n in sorted(intervals.items())],"independent endpoint interval receipt") + min_mass=5586+sum(dimension(data["lo"][("E",q)])-dimension(cap) for q,cap in data["original_caps"].items()) + max_mass=5586+sum(9-dimension(cap) for cap in data["original_caps"].values()) + need([min_mass,max_mass]==expected["all_assignment_local_mass_interval"]==[5540,5792],"independent all-assignment mass") + need([7232-max_mass,7232-min_mass]==expected["all_assignment_idle_mass_interval"]==[1440,1692],"independent nonnegative idle for all assignments") + changed=sorted(q for q,cap in data["original_caps"].items() if data["given"][("E",q)]!=cap) + need(changed==expected["attaining_changed_ends"]==[574,575,580,581],"independent attaining ends") + need(expected["gates"]==5413 and expected["free_gates"]==len(data["domains"])-78==2589,"independent gate coverage") + for r in range(1,73): + lo,hi=child(r,Q(1,2)) + need(lo*lo<=Q(r,73)<=hi*hi,"square-root oracle calibration") + need(child(37,1-Q(1,1<<100))[1]>=1,"dyadic carry") + lo,hi=map(Q,expected["a_bracket"]) + need(BASE_HI1,"independent full ceiling sign") + need(str(hi/(1+hi))==expected["kappa_cap"] and str(TARGET)==expected["target_a"],"independent planning fields") + print("PASS_K8_UNRESTRICTED_END_INDEPENDENT", "components="+str(stats["components"]), + "columns="+str(stats["columns"]),"root_calibrations=72","graph_and_duality_match=True") + + +if __name__=="__main__":main() diff --git a/research/selected-k8-unrestricted-ends/materialize.py b/research/selected-k8-unrestricted-ends/materialize.py new file mode 100644 index 0000000000..bbef20cbcb --- /dev/null +++ b/research/selected-k8-unrestricted-ends/materialize.py @@ -0,0 +1,40 @@ +"""Exact candidate parsing and native-word annotations; no solver is used. + +Gareth Davidson with OpenAI Codex assistance. Apache-2.0. +""" +from collections import Counter +from copy import deepcopy +import json + + +def primal(U, model): + data = U.primal_data() + raw = data["assignment"] + U.need(set(raw) == {json.dumps(n) for n in model.domain}, "complete primal node coverage") + assignment = {} + for node, domain in model.domain.items(): + f = tuple(raw[json.dumps(node)]) + U.need(f in domain, "primal frame outside complete domain") + assignment[node] = f + profile = model.profile(assignment) + U.need(profile == {int(r): n for r, n in data["profile"].items()}, "primal profile") + return assignment, profile + + +def native_word(word, model, assignment): + result = deepcopy(word) + for i in range(len(word["A"])): + result["A"][i][-1] = list(model.frame_of(("G", i), assignment)) + for i in range(len(word["B"])): + result["B"][i][-1] = list(model.frame_of(("G", model.nA+i), assignment)) + for i in range(len(word["early_cleanup"])): + result["early_cleanup"][i][1] = list(model.frame_of(("G", model.nA+model.nB+i), assignment)) + for q in model.original_caps: + result["helper_final"][str(q)] = list(model.frame_of(("E", q), assignment)) + profile = model.profile(assignment) + widths = Counter(len(model.frame_of(("E", q), assignment))-len(model.fixed_frames[("S", q)]) + for q in range(2*model.v, model.n)) + result["report"].update(local_profile={str(r): n for r, n in profile.items()}, + local_rank_mass=sum(r*n for r, n in profile.items()), + width_inventory={str(r): n for r, n in sorted(widths.items())}) + return result diff --git a/research/selected-k8-unrestricted-ends/model.py b/research/selected-k8-unrestricted-ends/model.py new file mode 100644 index 0000000000..8ce020620d --- /dev/null +++ b/research/selected-k8-unrestricted-ends/model.py @@ -0,0 +1,161 @@ +"""Unrestricted helper terminal frames, with complete frame domains and coupled cones. + +Extends navinor's unchanged frame model in references/frame_model.py. +Gareth Davidson with OpenAI Codex assistance. Apache-2.0. +""" +from collections import defaultdict +from fractions import Fraction as Q +from pathlib import Path +from types import ModuleType + +HERE = Path(__file__).resolve().parent +M = ModuleType("retained_frame_model") +exec(compile((HERE / "references/frame_model.py").read_bytes(), + str(HERE / "references/frame_model.py"), "exec", optimize=0), M.__dict__) + + +def require(ok, why): + if not ok: + raise ValueError(why) + + +def cone_supports(word, n, v): + """Separate support for every low-end helper; do not merge their end caps.""" + ident = lambda: [{k: Q(1)} for k in range(n)] + main = word["A"] + word["cut"] + word["B"] + raw = ident() + for event in main: + M.apply(event, raw) + dirt = [{} for _ in range(n)] + for y in range(v, 2 * v): + dirt[y] = {k: a for k, a in raw[y].items() if k >= 2 * v} + for event in word["precondition"]: + M.apply(event, dirt) + compensation = [["add", y, k, -a.numerator, a.denominator, []] + for y in range(v, 2 * v) for k, a in sorted(dirt[y].items())] + prefix = word["precondition"] + compensation + main + direct, inverse = ident(), ident() + for event in prefix: + M.apply(event, direct) + for event in reversed(prefix): + M.apply(M.invert(event), inverse) + return {int(q): sorted((set(inverse[int(q)]) | + {k for k in range(n) if int(q) in direct[k]}) - {int(q)}) + for q in word["helper_final"]} + +# Discovery extension: enumerate quotient spaces by adjoining generators, +# not by all subsets of their nonzero vectors. Exact domains, no sampling. +from functools import lru_cache +@lru_cache(None) +def quotient_spaces(k): + require(0 <= k <= 5, "quotient outside declared finite domain") + seen = {()}; queue = [()] + for F in queue: + for x in range(1, 1 << k): + G = M.basis(F + (x,)) + if G not in seen: + seen.add(G); queue.append(G) + return tuple(sorted(seen, key=lambda F: (len(F), F))) + +@lru_cache(None) +def complete_interval(lo, hi): + require(M.contained(lo, hi), "empty interval") + comp=[]; cur=lo + for x in hi: + enlarged=M.basis(cur+(x,)) + if len(enlarged)>len(cur): comp.append(x);cur=enlarged + out=[] + for F in quotient_spaces(len(comp)): + lifted=[] + for x in F: + y=0 + for i,v in enumerate(comp): + if x >> i & 1:y ^= v + lifted.append(y) + out.append(M.basis(lo+tuple(lifted))) + return sorted(out,key=lambda F:(len(F),F)) + +@lru_cache(None) +def span_bits(F): + values=[0] + for x in F:values += [y^x for y in values] + return sum(1<1-1e-8: + chosen_by_node[key[1]].append(key[2]) + for node,chosen in chosen_by_node.items(): + if len(chosen)==1:candidate[node]=chosen[0] + report['components'].append({'first':comp[0],'nodes':len(comp),'rows':len(rows),'columns':len(cols),'fractional_columns':fractional,'numeric_objective':obj}) + out['components'].append({'first':json.dumps(comp[0]),'nodes':len(comp),'duals':{json.dumps(rows[i]):{str(d):str(z) for d,z in sorted(vec.items())} for i,vec in sorted(q.items())}}) + if index%20==0 or fractional:print(index,len(comp),len(cols),'fractional',fractional,flush=True) + full=len(candidate)==len(model.domain) + report['complete_integral_candidate']=full + report['symbolic_component_objective']={str(d):str(total[d]) for d in RANKS} + if full: + profile=model.profile(candidate) + report['candidate_profile']=profile + report['changed_endpoints']=[n[1] for n in candidate if n[0]=='E' and candidate[n]!=model.original_caps[n[1]]] + report['changed_gate_frames']=sum(n[0]=='G' and candidate[n]!=model.given[n[1]] for n in candidate) + primal={'assignment':{json.dumps(n):list(fr) for n,fr in sorted(candidate.items())},'profile':profile} + (HERE/'PRIMAL.json.gz').write_bytes(gzip.compress(json.dumps(primal,sort_keys=True,separators=(',',':')).encode(),mtime=0)) + data=json.dumps(out,sort_keys=True,separators=(',',':')).encode() + (HERE/'DUALS.json.gz').write_bytes(gzip.compress(data,mtime=0)) + report['canonical_duals_sha256']=hashlib.sha256(data).hexdigest() + (HERE/'DISCOVERY.json').write_text(json.dumps(report,indent=2)+'\n') + print('NOMINATED_NOT_CERTIFIED',len(out['components']),full,report.get('candidate_profile'),report.get('changed_endpoints'),flush=True) + +if __name__=='__main__':main() diff --git a/research/selected-k8-unrestricted-ends/references/CEILING.md b/research/selected-k8-unrestricted-ends/references/CEILING.md new file mode 100644 index 0000000000..f5f742f819 --- /dev/null +++ b/research/selected-k8-unrestricted-ends/references/CEILING.md @@ -0,0 +1,108 @@ +# Packing ceiling and target budget for the selected complex local word + +**Scoped obstruction and planning tool. No new κ; the selected record is unchanged.** + +The selected complex supplier (#1094) fixes a local word with this paid profile per call: +`{1:2412, 2:418, 3:432, 4:142, 5:82, 8:8}`, local mass 5,586. Everything else in the record is +idle-remainder packing on 896 live data families per nine-stage replica (2 × 4 pairs × 112 ports, +all 492 helpers hosted). + +Under PR1012's coverage identity, paid mass is exactly `72·W + 64·N`, so each call carries 1,646 units +of idle mass. Every child of rank `r` costs `(r/73)^(1−a) = r·r^(−a)·73^(a−1)`, which is non-increasing +per unit of mass in `r`. So **no** idle histogram beats putting all idle mass into (fractional) children +of the largest rank allowed by the outer halving guard, `R = 51` (73² > 2·51²). + +## Results (exact rational intervals, `verify.py`) + +| Quantity | Value | +|---|---| +| Ceiling for any hosting, owner packing or idle-remainder change of this word | **a < 0.001690054109089** | +| Implied κ bound (`κ < a/(1+a)` when the complex side binds) | **κ < 0.001687202646** | +| Maximum gain over the selected κ 0.001672660197076918 | **+0.869%** | +| Selected endpoint / relaxation at the endpoint | below the ceiling; actual moment ≥ relaxation | +| Previous record #1042 | same paid local profile plus an admissible idle histogram (derived idle `{1:2249, 2:1, 3:400, 7:3, 16:47, 48:4850}` matches its README); endpoint below the same ceiling | + +This updates the fixed-word ceilings computed for earlier words +([static44](../static44-packing-ceiling/README.md), PR525, PR643) to the selected hosted T16/T37 line. It +uses the coverage law instead of a dual certificate. At the level of this cost decomposition, #1042→#1094 keeps the local paid profile and changes the +idle contribution. This arithmetic check does not by itself establish identical circuits or attribute every +implementation change to packing. Less than 0.87% of packing headroom remains under the stated model. + +### What a local word must pay for the planning target a = 1/99 + +Rewrite `relax(a) ≤ 1` as `Σ n_r p_r(a) ≤ B(a)`. Here `p_r(a) = (r/73)^(1−a) − r(51/73)^(1−a)/51` is the +excess of a local rank-r child over ideal idle mass, and `B(a) = w − (72w+64)(51/73)^(1−a)/51` is the +budget per call. + +| a | Budget B | Selected word's excess spend | Ratio | +|---|---:|---:|---:| +| selected endpoint 0.0016755 | 0.42752 | 0.42330 | 0.990 | +| target 1/99 | 0.12753 | 2.59681 | **20.4** | + +At a = 1/99, the selected word's excess spend is 20.4 times the budget. **Even deleting all 2,412 rank-1 +children per call, with everything else fixed, cannot reach it.** The allowed rank-1 count is negative. +With 112 ports and this nine-stage template, a target-scale gain needs a local word whose fully priced +excess spend is about 95% lower. Otherwise the coverage law itself must change: more unpaid coordinates +per family, a smaller 64-per-call centre charge, or more families per call. Helper-inventory proposals +can be screened against these numbers before any network is built: `ceiling.ceiling(local, 73, 896, 9, 64)` +takes a per-call local profile. + +### Ideal lever budgets + +`levers.py` changes one premise at a time and reports the packing ceiling. These are favorable relaxations +that omit the costs of realizing each lever. + +| Lever | Ceiling × | κ cap | +|---|---:|---:| +| Centre path free (no rank-8 copies, no 64-per-call charge) | 2.80 | 0.00472 | +| Centre path shared by two calls | 1.90 | 0.00320 | +| Local mass as rank-16 children | 2.31 | 0.00389 | +| Local mass as rank-8 children | 1.62 | 0.00273 | +| Two unpaid coordinates per live family | 3.77 | 0.00634 | +| Centre free and rank-16 children | 6.51 | 0.01089 | + +## Scope and limits + +- The bound holds for one fixed paid local profile (in particular, for a fixed local word), 112 ports, the nine-stage four-pair + template, the coverage law and the outer halving guard. It allows fractional counts and every repacking, + without checking physical realizability. +- It does **not** bound other local words. Many open claims above the selected κ (for example #1148's + joint-entrance word and its descendants, all ≤ 0.0016759) change the local word, so they are outside it. + Changed port counts, templates, coverage laws, centre charges or outer recipes are also outside it. +- `κ < a/(1+a)` is the retained balanced reduction's planning ceiling. The actual seven-step recipe gives + slightly less. +- Four controls run: + - an idle-rank cap of 52 is rejected; + - a local mass beyond the coverage law is rejected; + - one extra rank-1 child lowers the ceiling; + - 25 sampled integer idle histograms all have exact moment above one at the ceiling. + +## Reproduce + +```sh +python3 -I -B research/complex-local-word-ceiling/verify.py # ~10 s, PASS_COMPLEX_LOCAL_WORD_CEILING +python3 scripts/research_package.py --package research/complex-local-word-ceiling +python3 -I -B research/complex-local-word-ceiling/levers.py # ~5 s, planning budgets +``` + +`verify.py --write` regenerates `RESULT.json`. The exact arithmetic in `ceiling.py` uses the standard +library only: atanh logarithm chains, Taylor exponentials with remainder, and outward rounding to 2⁻²⁵⁶. + +## Open next questions + +- **What is the ceiling of each pending local word?** The ceiling separates packing headroom from + word gains in the review queue. A first step is to run `ceiling()` on the per-call local profiles of + #1148/#1169/#1218, after subtracting their idle histograms. The blocker is that each claim's idle + histogram must be extracted from its package. +- **How does the target budget scale with the port count V?** `B(a)` grows linearly with families per call. + Whether a decoder's excess spend grows more slowly decides if wider words can help. A first step is to + fit `Σ n_r p_r` against V across the recorded complex words (R439–R560 lineage). The blocker is per-call + local profiles for different V on a comparable template. + +## Credit + +The coverage identity is PR1012's. The fixed-word packing-ceiling idea comes from the static44, PR525 and +PR643 lineage, and the catalogue mixture bound from Ali Romman's +[heterogeneous-owner-assembly](../heterogeneous-owner-assembly/README.md). The selected construction +credits are in its review. Prepared by Douglas Colkitt with substantial Claude (Anthropic) assistance. +Apache-2.0. diff --git a/research/selected-k8-unrestricted-ends/references/END-RECIPE.json b/research/selected-k8-unrestricted-ends/references/END-RECIPE.json new file mode 100644 index 0000000000..7af7b6341c --- /dev/null +++ b/research/selected-k8-unrestricted-ends/references/END-RECIPE.json @@ -0,0 +1,242 @@ +{ + "ends": [ + [ + 574, + [ + 256, + 128, + 96, + 16, + 8, + 4, + 2, + 1 + ], + [ + 256, + 128, + 96, + 17, + 9, + 5, + 3 + ] + ], + [ + 575, + [ + 256, + 128, + 96, + 16, + 8, + 4, + 2, + 1 + ], + [ + 256, + 128, + 96, + 17, + 9, + 5, + 3 + ] + ] + ], + "B_frames": [ + [ + 994, + [ + 260, + 130, + 96, + 20, + 10, + 1 + ], + [ + 261, + 131, + 96, + 20, + 10 + ] + ], + [ + 995, + [ + 258, + 132, + 96, + 20, + 10, + 1 + ], + [ + 259, + 133, + 96, + 20, + 10 + ] + ], + [ + 1026, + [ + 264, + 137, + 96, + 24, + 4, + 3 + ], + [ + 268, + 137, + 96, + 24, + 3 + ] + ], + [ + 1027, + [ + 265, + 136, + 96, + 24, + 4, + 3 + ], + [ + 265, + 140, + 96, + 24, + 3 + ] + ], + [ + 1106, + [ + 260, + 130, + 96, + 20, + 10, + 1 + ], + [ + 261, + 131, + 96, + 20, + 10 + ] + ], + [ + 1107, + [ + 258, + 132, + 96, + 20, + 10, + 1 + ], + [ + 259, + 133, + 96, + 20, + 10 + ] + ], + [ + 1138, + [ + 264, + 137, + 96, + 24, + 4, + 3 + ], + [ + 268, + 137, + 96, + 24, + 3 + ] + ], + [ + 1139, + [ + 265, + 136, + 96, + 24, + 4, + 3 + ], + [ + 265, + 140, + 96, + 24, + 3 + ] + ] + ], + "early_cleanup": [ + [ + 93, + 93, + [ + 256, + 128, + 96, + 16, + 8, + 4, + 2, + 1 + ], + [ + 256, + 128, + 96, + 17, + 9, + 5, + 3 + ] + ], + [ + 94, + 94, + [ + 256, + 128, + 96, + 16, + 8, + 4, + 2, + 1 + ], + [ + 256, + 128, + 96, + 17, + 9, + 5, + 3 + ] + ] + ] +} diff --git a/research/selected-k8-unrestricted-ends/references/END-WITNESS.md b/research/selected-k8-unrestricted-ends/references/END-WITNESS.md new file mode 100644 index 0000000000..306ec13362 --- /dev/null +++ b/research/selected-k8-unrestricted-ends/references/END-WITNESS.md @@ -0,0 +1,98 @@ +# Conditional kappa from smaller ends on the k8 word + +This finite construction certifies + +**κ = 0.001672404744903063**, + +or `1672404744903063 / 10^18`. The conservative calculation gives +`0.001672404742051193`. It improves the pinned PR1031 construction +`0.001672167430672016` by exactly `237314231047 / 10^18`. The base selected +certificate records PR942's `0.001661960547713947`; that selection is unchanged. + +This is a distinct construction, pending review. The last overlap scan found +PR1082 claiming a larger `0.001672653061493085` using the preceding k8 terminal +interface. This package claims a new smaller-end interface with a complete +paid packing, without claiming the highest pending or accepted frontier. + +## What changes + +Alexander Schwartzman's PR1030 helpers 588/589 map to **574/575** in the k8 +word. Their final frames become the dimension-seven space +`span_GF(2){256,128,96,17,9,5,3}`. Eight B frames and two early tails change. +The scalar program, gate order, all entrances and the center interface are +preserved. All twelve literal edits and both endpoint hashes are frozen in +`data/END-RECIPE.json` and `construct.py`. + +The local profile changes from +`{1:2412,2:418,3:432,4:142,5:82,8:8}` to +`{1:2406,2:432,3:424,4:142,5:82,8:8}`. Width per call decreases **3730 -> 3728**; +local rank mass decreases **5586 -> 5584**. Keeping the previous owners fails +the improvement screen: every newly exposed residual is priced. The new +69,120-role map in `data/OWNERS.json.gz` pays those residuals, whole helpers, +copies, spectators, source windows, restores, frame and coefficient work, +physical routing, and every recursive child through the unchanged full invoice. + +The final global profile is +`{1:348779,2:62233,3:61410,4:20459,5:11808,7:7,8:1156,16:16,32:1,48:4864}`. +It has 144 complete invocations, rank mass 1,041,408 and deficit 5,120. The +prefix is **397 < 512** bits and the physical row coefficient is +**16469 < 20161**. The complex supplier binds; PR589 is cited unchanged and +its complete bad-residue bit profile is repriced. + +## Reproduce + +Base: `2921874911956718fcaaaf9396fe8267b3cfa9f0`. PR1031: +`e900534f0beda892c726723524203b97471fb9a3`. PR1030: +`d71857cd0ae7824e935aac17327e4ec27f66322b`. All retained source archives and +348 main files are SHA-256 pinned in `SOURCES.json`. No solver or GitHub fetch +is required for replay; Python 3.12+ with assertions enabled is sufficient. + +From the repository root, with a new output directory: + +```sh +python3 -I -B research/k8-rank7-composition/reproduce.py --work /tmp/k8-rank7-replay +python3 -I -B research/k8-rank7-composition/check_controls.py --replay /tmp/k8-rank7-replay +``` + +Expected markers: + +```text +PASS_K8_RANK7_COMPLETE_REPRODUCTION 0.001672404744903063 +PASS_K8_RANK7_SEMANTIC_CONTROLS 10 +``` + +The command explicitly reuses the frozen parent ancestry in `evidence/ANCESTRY.json` +and `sources/SLOT-NATIVE.tar.gz`. That ancestry was freshly built before +publication: all 21 k8 chain stages, five cold-end control batches, native +programs/wrappers/phases, and all 34 new-slot controls passed. The portable +command checks its receipt and source identities, freshly constructs the +new word and native code, checks every exact scalar column in both +orientations, all frames and wrapper cones, and freshly verifies all phases. +It then replays both the preceding and new T16 controller, source geometry, +full invoice, both exact moment engines and all 47 outer conditions. +It does not rerun the inherited scalar constructors during every replay. + +Both full admissions include 69 admission controls, 12 bit controls, 15 +controller mutations and six independent owner controls. Ten additional +controls reject incomplete tails, invalid read frames/end spaces, false +profiles/widths, duplicate or split helpers, bad slices, restoration of the +preceding larger ends on the new map, and the next outer grid point. + +## Search and mathematical scope + +The changed width inventory is outside PR942's fixed-U8 all-replica theorem. +Searches used seed 32 and stopped at explicit budgets: six greedy epochs, +80 restricted MILPs (three seconds each), two global MILPs (120 seconds +each), one global CP-SAT run (120 seconds), and 12 window searches (18 +seconds each). The global MILPs found no integer witness. The final map is +feasible; neither failed searches nor restricted solver optimality establish +a global packing optimum. Exact domains, completed attempts, accepted moves, +software versions and stopping rules are in `evidence/SEARCH.json.gz`. +Reproduction consumes frozen data and performs independent admission. + +The inherited all-size/compiler, common-label and mutable-source realization, +whole-call hosting, physical implementation, precision/tape, exact recovery, +analytic transfer and bit H1-H5 obligations remain. This is a finite conditional +certificate, not an unconditional theorem or a full Lean proof. Contributor +credit, inherited licenses and substantial AI assistance are recorded in +`NOTICE.md` and the preserved source notices. diff --git a/research/selected-k8-unrestricted-ends/references/FRAME-METHOD.md b/research/selected-k8-unrestricted-ends/references/FRAME-METHOD.md new file mode 100644 index 0000000000..e2ddf660ac --- /dev/null +++ b/research/selected-k8-unrestricted-ends/references/FRAME-METHOD.md @@ -0,0 +1,75 @@ +# Frame reassignment cannot raise the selected X4 complex supplier + +**Scoped negative result. No new κ.** Base `f567884aeb8851b6e794af1184119a3bfbe1e631`, where the selected κ = 0.001661634653669567 comes from #799 with #589 on #555 and the complex side binds. Complex-supplier sprint track, OS seed 28 (see `CLAIM.md`). + +## Claim + +Fix the scalar program of the selected complex word, PR799's X4 word (decompressed content `1e1d99ba…`), which serves all 72 complex calls. Keep its gate list and order, registers, coefficients, start and end frames (so every helper width), cut, centres, target levels, precondition, FULL cleanup and the set of early-cleanup (tail) gates. Let each of its 6,364 A, B and tail gate frames be any subspace of F₂⁹ allowed by the frame contract that `research/gauge44-frames-x/independent/audit_local.py` checks: + +- frames are nested along every register, from its start frame to its end frame; +- centres and targets sit at their centre frame and target level at the start of B; +- for each of the 126 low-end helpers, every register in its inverse-row or dirt-column cone ends B inside that helper's end frame. + +No such assignment admits the native complex saving + + b_next = 832200139425241163957/500000000000000000000000 = 0.001664400278850482327914, + +the next 10⁻²⁴ grid point above the selected endpoint `0.001664400278850482327913`. Every child rank is below 73, so no larger b is admitted either. The pinned outer engine (`outer.py`) requires κ < ε·q = (1−η)q/(1+q) with q = a(1−2η) (`compact_phase_layer`) and a < b (`complex_above_bit`), so κ < b/(1+b). Since b_next/(1+b_next) = 0.0016616346536695670758… lies below the next κ tick 0.001661634653669568, frame reassignment alone cannot raise the selected κ. + +## Proof outline + +1. **Domains.** Forward joins from fixed starts and start-of-B pins give a lower frame `lo`. Backward meets from fixed ends, pins and cone ceilings give an upper frame `hi`. By induction every legal frame lies in `[lo, hi]`. Here `dim(hi/lo) ≤ 3`: 5,163 gates are forced and 1,201 have 2, 5 or 16 choices (965, 206 and 30 gates). The verifier enumerates each interval and checks its size against the Gaussian-binomial count. +2. **Cost.** A strict climb of dimension d along a register is one paid child of rank d (the `audit_local.py` rule). Climbs telescope along each register, so rank mass is fixed. The native moment then depends on the assignment only through C_d = M_d − d·M₁ with M_d = d·(73/d)^b, and C₀ = C₁ = 0. +3. **LP.** Free gates linked along register chains form 140 components. Each component's local-polytope LP has a variable for every (gate, frame) and for every nested frame pair on each merged register edge: 9,483 rows and 12,019 columns in total. Every legal assignment is a 0/1 point. +4. **Exact duals.** Each dual entry is a linear form in C₂…C₉ with integer coefficients. The verifier rebuilds every row, column and cost from the word, then checks every reduced cost. 8,582 are identically zero, and 3,437 are strictly positive under outward rational bounds from both pinned engines (`moment.py`, Mercator series, and `base_two_moment.py`, atanh series). In every component the dual objective equals the selected assignment's cost as an exact coefficient identity. By weak duality the selected frames minimise the local moment. +5. **Global step.** 72 times the local profile plus the remainder {1:1, 3:1, 44:1, 48:2396} reproduces the pinned global profile. Both engines put the global moment strictly above 1 at b_next and strictly below 1 at the selected endpoint. Each call costs at least the selected word, so any reassignment, even a different one in each call, has moment above 1 at b_next. + +The model relaxes the centre equality at the start of B to a charged climb, and it omits native-chain conditions beyond `audit_local.py`. Both choices only enlarge the feasible set, so the bound also covers the stricter native contract. + +## Cross-check against the independent auditor + +`crosscheck.py` draws 12 random legal reassignments (40 frame changes each, seed 28), writes each into the word with the profile the model predicts, and runs the pinned `audit_local.py` unchanged. All 12 pass its exact two-orientation scalar replay and its frame, centre, target and cone checks with the predicted profile. All 12 are strictly costlier at b_next. The auditor refuses a frame below the forward join and a mismatched profile. Receipt: `data/CROSSCHECK.json`. + +## Reproduce + +Python 3.11 or newer, standard library only, assertions on, from the repository root: + +```sh +python3 -B research/complex-x4-frame-bound/verify.py --controls +``` + +Expected final line: `PASS_X4_FRAME_ASSIGNMENT_EXCLUSION controls=6/6`, in about 5 seconds. The six controls must each be rejected: a dropped component, an inflated dual, an omitted frame choice, the accepted endpoint in place of b_next, a legal but costlier baseline, and a changed word. `RESULT.json` is the receipt of this command. + +Optional commands: + +```sh +python3 -B research/complex-x4-frame-bound/crosscheck.py # about 1 minute +python3 -B research/complex-x4-frame-bound/verify.py --word /tmp/x4/jx/FULL-WORD.json.gz +``` + +The second form checks a freshly rebuilt word from `research/gauge44-frames-x/README.md`; the content hash must match. By default the verifier reads the retained replay archive `research/community-frontier799-audit/pr799-replay.tar.gz`, whose hash the maintainer's integration receipt records. + +`gen_duals.py` nominated the duals with HiGHS (highspy 1.15.1, SciPy 1.18.1, NumPy 2.5.4, Python 3.12.14). Two runs wrote byte-identical `data/DUALS.json.gz`. The generator is not part of the proof: `verify.py` imports no solver and trusts no floating-point value. + +Checked on Windows 11 with CPython 3.12.14 and 3.14.7. + +## What this leaves for the complex track + +Per call, 1,745 of the 2,548 rank-1 children, all 56 rank-5 children and the eight centre descents lie on register edges between forced frames. Any κ gain from this supplier needs a scalar change (read sets, gate order, tail membership), new start or end frames (entrances, low ends, widths), or a change to owners and hosting. Frame re-choice on X4 is closed at b_next. + +## Scope + +Not covered: scalar rewrites, gate reordering or read-set exchanges; moving gates into or out of the early cleanup; entrance promotions or any other start or end frame change; owners, hosting and the finite invoice; the bit supplier; other outer theorems. The exclusion holds at b_next for the fixed word. It does not replay the native construction chain. The inherited all-size compiler, common-label and mutable-source realization, whole-call hosting, precision and tape, and analytic hypotheses remain. This is a finite certificate, not a Lean proof. + +## Prior work + +- chafreaky's #557 (`research/frame-domain-ceiling`) introduced complete F₂ domains, this LP relaxation and symbolic exact duals, for the PR551 word. +- ntedvs's #776 (open) applies the method to #626's jp8 and ck words, with tail frames outside its scope. +- Rohansguliani's #815 (open) solves PR699's SW4 word and #626's words with floating-point LP and CP-SAT, with tail frames fixed, and rediscovers #741. +- JointXF reported in #799 that FrameCoal's optimiser reaches the X4 profile. The #799 review keeps that as a search report. This package corroborates it with an exact certificate. + +This package is a new implementation for the native gauge44 word format. Unlike the earlier packages, it frees the 163 early-cleanup frames and derives the low-end cone ceilings from the exact prefix map. + +The X4 word is Jeremy Kothe's #799 construction on chafreaky's #741 frames, BRoute's SW4 exchange, BlockInvert's promotions, the p6n and no-triangle layers and icekylinx's #645 gauge44 factory, with the lineage recorded in `research/gauge44-frames-x/README.md` and `CONTRIBUTORS.md`. + +Prepared for @navinor with substantial assistance from Claude Code. Apache-2.0. No independent human review. diff --git a/research/selected-k8-unrestricted-ends/references/SLOT-PINS.json b/research/selected-k8-unrestricted-ends/references/SLOT-PINS.json new file mode 100644 index 0000000000..2702c368f4 --- /dev/null +++ b/research/selected-k8-unrestricted-ends/references/SLOT-PINS.json @@ -0,0 +1,47 @@ +{ + "base_sha256": "db2c7cfb3f8eee2b76c2e0154fc530520fb4d90cd9511a002cab527b16033b83", + "word_sha256": "c2b294300760e1fd6eeab8c22c4d13e4633dca40e52cac8da0d68163a76e3ca8", + "canonical_sha256": "4ddb29fb9bc6f27e0c0fbfcf19a2a93a3496ad900d0f6d89059d0305c9576c0c", + "program_sha256": { + "forward": "071ecdacc0bb3ac16046aad4119ed551a945cb0ed6c57002a548a3e2232503d8", + "backward": "f36c5831106f5637102c6bedeec76ed2b223c6671ce42fd0eceed9ef24725b23" + }, + "clifford_recipes_sha256": "d0768f2164d5f64a2fdbec422f1cfde4e400818792f1904ca541958377243731", + "slot_controls": [ + "C0_identity", + "donation_after", + "donation_after@236", + "donation_after@238", + "donation_after@434", + "donation_after@436", + "donation_after@439", + "donation_after@444", + "donation_after@446", + "drop_preread", + "drop_preread@236", + "drop_preread@238", + "drop_preread@434", + "drop_preread@436", + "drop_preread@439", + "drop_preread@444", + "drop_preread@446", + "drop_restore", + "drop_restore@236", + "drop_restore@238", + "drop_restore@434", + "drop_restore@436", + "drop_restore@439", + "drop_restore@444", + "drop_restore@446", + "recipe", + "restore_full", + "restore_full@236", + "restore_full@238", + "restore_full@434", + "restore_full@436", + "restore_full@439", + "restore_full@444", + "restore_full@446" + ], + "kappa_decimal": "0.00167166528321877" +} diff --git a/research/selected-k8-unrestricted-ends/references/WORD-LINEAGE.md b/research/selected-k8-unrestricted-ends/references/WORD-LINEAGE.md new file mode 100644 index 0000000000..b9d19db883 --- /dev/null +++ b/research/selected-k8-unrestricted-ends/references/WORD-LINEAGE.md @@ -0,0 +1,101 @@ +# Which word is selected in the PR1042 replay? + +The retained package file `research/gauge44-slots-t16/evidence/local/FULL-WORD.json.gz` +is an **R492 predecessor**, not the selected R480 seven-slot word. Its canonical +contents match `base/cold44/FULL-WORD.json.gz` in the maintainer's selected replay. +The selected word is the archive member **`slots/local/FULL-WORD.json.gz`**. +Five archive members contain that same canonical word. This package provides an +executable inventory and rejects confusing the retained evidence, the pre-slot +R480 word, or a compressed-container digest with the selected word. + +No selected mathematical input was found to be wrong. The original README +already requires freshly built `--local` output, and the selected orchestrator +passes that output explicitly. This is a provenance reconciliation with concrete +rejection controls, not a correction of the accepted conditional bound. + +## Three distinctions checked + +| Object | Retained evidence | Selected archive word | +|---|---:|---:| +| Helper count | 492 | 480 | +| B operations | 1918 | 1846 | +| A operations | 3738 | 3451 | +| Cleanup operations | 28150 | 6796 | + +The selected decoded payload is already compact sorted JSON. Its payload and +canonical SHA-256 both equal the original slot pin +`c2b294300760e1fd6eeab8c22c4d13e4633dca40e52cac8da0d68163a76e3ca8`. +Its committed gzip container SHA-256 is instead +`49596aa4ed4fd36cd4582fd0e8ddeb09fd80370a7d8aea1ede52a135b536d289`. +Both are correct in their respective domains. The verifier accepts recompressed +and reformatted copies when every parsed word field remains identical. It keeps +exact raw hashes for the frozen source archive and its recorded artifact receipts. + +The selected word's own report retains the stage-local status +`EXACT_CLEAN_OWN_Y_EARLY_CENTER_WORD_NOT_ADMITTED`. The later composition receipt +is `PASS_COMPLETE_PR1042_COMPOSITION`. They describe different stages and are +not contradictory. The old PR799 wording in the assembly scope similarly +describes inherited lineage; the explicit selected pointers, T16 receipt and +source-bound profile identify the PR1042 composition. This note does not turn a +stage-local claim into full admission by renaming it. + +## Exact evidence + +The command checks all files listed in the pinned selected-source manifest, +all **458 regular unique archive members**, the **457 artifact digests** in the +producer receipt, all ten recorded construction stages and their source/log +digests, and the selected assembly's identical archived and retained bytes. +It inventories every **35 FULL-WORD member**, including duplicate stages, using +container, decompressed-payload and canonical digests separately. Five aliases +match the selected slot pin; the retained R492 file matches only the historical +`base/cold44` member. + +An additional arithmetic bridge checks the local profile +`{1:2412,2:418,3:432,4:142,5:82,8:8}`, its local rank mass 5586, and its helper-width +inventory. Multiplying that profile by 144 whole invocations and adding the +recorded T16 idle profile reproduces the independent receipt, T16 replay and +assembly profile exactly, with total rank mass **1041408**. The assembly retains +PR589 on the bit side and conditional kappa `1672188119205421/10^18`. + +The complete word inventory, equality classes and exact values are in +`EXPECTED.json`. Eight controls reject the R492 word, the pre-slot R480 word, +an omitted operation, changed idle profile, omitted whole call, false helper +count, wrong digest domain and duplicate JSON. The archive is read in memory; +no tar paths are extracted or executed. + +## Reproduce + +From the repository root, Python 3.10+ standard library: + +```sh +python -I -O -B research/selected1042-lineage-resolution98/verify.py +``` + +Expected: `PASS_SELECTED1042_LINEAGE selected_R=480 retained_R=492 words=35 aliases=5 controls=8`. +The default command writes nothing. `--write-certificate` writes only when no +certificate exists. Every check remains active under `-O`. + +## Scope and provenance + +Base `ba82555c64e1879e4b7decce28186f208fcb8262`, assigned seed98 without reroll. +The selected snapshot is frozen for reproducibility. Later selected frontiers +are outside this investigation. This command checks provenance consistency and +profile arithmetic; it **does not rerun the original native construction**, all +controls, moment engines or outer inequalities, authenticate historical +execution, or prove the full multiplication theorem. It does not prove that a +different word with the same profile is correct. Source hashes and the exact +canonical word pin prevent substituting such a word here. + +The selected construction, source manifests and replay are credited to Jeremy +Kothe, Rohan Arun, Hao Yan and the credited compiler/supplier lineage, with +Douglas Colkitt's maintainer orchestration. The gzip distinction follows the +repository's existing reproducibility policy and Maxime Fleury's earlier audit; +no new general hashing principle is claimed. Concurrent local analysis of the +mutable-leaver cores first noticed the retained R492 evidence path; this package +adds the complete archive reconciliation and profile binding, not that core +optimality result. Prepared for @woklerx with substantial OpenAI Codex assistance. +Apache-2.0; algorithmic crosschecks and AI review are not independent human review. + +Fresh PR1112 independently checks the selected finite invoice, guards and outer +slacks. This package does not repeat that audit; it identifies exact word +artifacts and verifies their provenance and profile linkage. diff --git a/research/selected-k8-unrestricted-ends/references/WORD.json.gz b/research/selected-k8-unrestricted-ends/references/WORD.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..723decbca8995e916d6f4b783aa3e1ddd4eb47fe GIT binary patch literal 57222 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 and piv[j]>>k&1:piv[j]^=piv[k] + return tuple(piv[k] for k in sorted(piv,reverse=True)) + +def contained(a,b):return basis(a+b)==b + +def registers(e):return e[1:3] if e[0]=='add' else e[1:2] + +def apply(e,rows,dual=False): + if e[0]=='add': + t,s=e[1:3];q=F(e[3],e[4]);require(t!=s,'self add') + if dual:t,s,q=s,t,-q + dst=rows[t] + for k,x in list(rows[s].items()): + a=dst.get(k,F(0))+q*x + if a:dst[k]=a + else:dst.pop(k,None) + elif e[0]=='scale': + t=e[1];q=F(e[2],e[3]);require(q!=0,'zero scale') + if dual:q=1/q + rows[t]={k:q*x for k,x in rows[t].items()} + else:raise RuntimeError('unknown scalar primitive') + +def invert(e): + r=list(e) + if r[0]=='add':r[3]=-r[3] + else:r[2],r[3]=r[3],r[2] + return r + +def check_parent_interface(word,main): + # Read only the retained boundary data. No builder or local checker is imported. + relative="research/community-k492-audit/pr622/replay/baseline558/complex-global/base/split-centres/CANONICAL-WORD.json.gz" + path=main/relative;raw=path.read_bytes() + require(hashlib.sha256(raw).hexdigest()=="66d3c3c70983224650643a0a05a21ac6c6959f84d0f4528650601016f5a76844",'parent canonical input pin') + parent=json.loads(gzip.decompress(raw)) + tau=lambda x:x^(43 if (x&43).bit_count()%2 else 0) + ports=parent['ports'];v=word['report']['v'] + require(len(ports)==len(set(ports))==v,'parent port count') + require(set(map(tau,word['ports']))==set(ports),'transported source/target ports') + moved={i:ports.index(tau(p)) for i,p in enumerate(word['ports'])} + centers=[moved.get(r,r) for r in word['centers']] + actual=[list(basis([tau(x) for x in frame])) for frame in word['center_frames']] + expected=[parent['frames'][f] for f in parent['center_frames']] + require(len(centers)==len(set(centers))==len(actual)==8,'eight distinct centre carriers') + require(actual==expected and all(len(f)==8 for f in actual),'ordered centre frame interface') + return dict(parent_path=relative,parent_file_sha256=hashlib.sha256(raw).hexdigest(), + transport_tau=43,ordered_frame_bases_match=True,all_ports_match=True, + transported_centers=centers,source_centers=[r for r in centers if r=2*v} + for e in w['precondition']:apply(e,dirt) + compensation=[['add',y,k,-a.numerator,a.denominator,[]] for y in range(v,2*v) for k,a in sorted(dirt[y].items())] + entering=set(map(int,w.get('start_extra',{})));lowends=set(map(int,w.get('helper_final',{}))) + coldends=lowends-entering + require(not any(e[2] in entering for e in compensation),'nonzero entrance response') + require(not any(r in entering|coldends for e in w['precondition']+compensation for r in registers(e)), 'pre-wrapper touch of residual helper') + require(all(e[-1]==[] for e in w['precondition']+compensation),'nonzero frame precondition') + early=w.get('early_cleanup',[]);earlyids={i for i,U in early} + require(len(earlyids)==len(early),'duplicate early cleanup gate') + tail=[w['cleanup'][i][:-1]+[U] for i,U in early] + cleanup=[e for i,e in enumerate(w['cleanup']) if i not in earlyids] + prefix=w['precondition']+compensation+main + program=prefix+tail+cleanup + for dual in (False,True): + actual=ident() + for e in program:apply(e,actual,dual) + expected=ident() + for t in range(v):expected[t if dual else v+t][v+t if dual else t]=F(-1 if dual else 1) + bad=[i for i in range(n) if actual[i]!=expected[i]] + require(not bad,'all-column endpoint failure '+str((dual,bad[:8]))) + print('endpoint', 'dual' if dual else 'forward','PASS',flush=True) + full=basis([1< 1 is a what-if for a changed coverage law only); + * the local word fixes its own paid child profile `local` (per call); + * every remaining unit of mass is an idle/remainder child of rank at most R, where the outer + recipe's halving guard m^2 > 2 R^2 bounds R (R = 51 for m = 73). + +Lemma. For a >= 0, a child of rank r costs (r/m)^(1-a) = r * c(r), with c(r) = r^(-a) m^(a-1) +non-increasing in r. Hence, with idle mass M fixed and idle ranks <= R, every idle histogram has +moment >= the relaxation that puts all of M into (possibly fractional) rank-R children: + + relax(a) = [ sum_local n_r (r/m)^(1-a) + (M/R) (R/m)^(1-a) ] / w (per call). + +The moment is increasing in a. So relax(a*) > 1 certifies that no hosting, owner packing or +idle-remainder change of the given local word, template and outer recipe certifies a saving +>= a*. Under the retained reduction kappa < a/(1+a) when the complex side binds, so +a*/(1+a*) also bounds kappa. This is a bound for the stated model, not for other local words, +templates, coverage laws or outer recipes. + +Exact rational intervals: ln k from atanh chains, exp by Taylor with Lagrange remainder, +outward rounding to 2^-PREC. Standard library only. Douglas Colkitt, with Claude (Anthropic) +assistance. +""" +from fractions import Fraction as Q +from functools import lru_cache +from math import isqrt + +PREC = 256 + + +def require(ok, why): + if not ok: + raise ValueError(why) + + +def down(x): + return Q((x.numerator << PREC) // x.denominator, 1 << PREC) + + +def up(x): + return -down(-x) + + +@lru_cache(None) +def atanh(t): + """Enclosure of atanh(t) for rational 0 < t <= 1/3.""" + require(0 < t <= Q(1, 3), 'atanh range') + s, p, k = Q(0), t, 0 + while True: + term = p / (2 * k + 1) + s += term + p *= t * t + k += 1 + tail = p / ((2 * k + 1) * (1 - t * t)) + if tail < Q(1, 1 << (PREC + 8)): + return down(s), up(s + tail) + + +@lru_cache(None) +def ln(k): + """Enclosure of ln k for an integer k >= 1: ln k = ln(k-1) + 2 atanh(1/(2k-1)).""" + require(isinstance(k, int) and k >= 1, 'ln domain') + if k == 1: + return Q(0), Q(0) + lo, hi = ln(k - 1) + a, b = atanh(Q(1, 2 * k - 1)) + return down(lo + 2 * a), up(hi + 2 * b) + + +def exp(lo, hi): + """Enclosure of exp([lo, hi]) for 0 <= lo <= hi <= 1/2.""" + require(0 <= lo <= hi <= Q(1, 2), 'exp range') + def series(y, upper): + s, t, k = Q(1), Q(1), 0 + while True: + k += 1 + t = t * y / k + s += t + if t * y < Q(1, 1 << (PREC + 8)): + return up(s + 2 * t * y / (k + 1)) if upper else down(s) + return series(lo, False), series(hi, True) + + +def child_cost(r, m, a): + """Enclosure of (r/m)^(1-a) = (r/m) exp(a ln(m/r)).""" + lm, um = ln(m) + lr, ur = ln(r) + e = exp(max(Q(0), a * (lm - ur)), a * (um - lr)) + return down(Q(r, m) * e[0]), up(Q(r, m) * e[1]) + + +def max_idle_rank(m): + """Largest R with m^2 > 2 R^2 (outer halving guard).""" + R = isqrt((m * m - 1) // 2) + while 2 * (R + 1) ** 2 < m * m: + R += 1 + while 2 * R * R >= m * m: + R -= 1 + return R + + +def model(local, m, families, stages, centre, R=None, unpaid=1): + """Per-call quantities. local: {rank: count per call (Fraction ok)}.""" + R = max_idle_rank(m) if R is None else R + require(2 * R * R < m * m, 'idle rank cap violates the halving guard') + require(all(0 < r < m for r in local) and all(n >= 0 for n in local.values()), 'local profile') + w = Q(families, stages) + require(1 <= unpaid < m, 'unpaid coordinates per family') + total = (m - unpaid) * w + centre + local_mass = sum(r * Q(n) for r, n in local.items()) + idle = total - local_mass + require(idle >= 0, 'local word pays more mass than the coverage law allows') + return dict(R=R, w=w, total_mass=total, local_mass=local_mass, idle_mass=idle, deficit=unpaid * w - centre) + + +def relax(local, m, families, stages, centre, a, R=None, unpaid=1): + """Enclosure of the per-call relaxation moment at saving a.""" + q = model(local, m, families, stages, centre, R, unpaid) + lo = hi = Q(0) + for r, n in local.items(): + c = child_cost(r, m, a) + lo, hi = lo + Q(n) * c[0], hi + Q(n) * c[1] + c = child_cost(q['R'], m, a) + k = q['idle_mass'] / q['R'] + lo, hi = lo + k * c[0], hi + k * c[1] + return down(lo / q['w']), up(hi / q['w']) + + +def ceiling(local, m, families, stages, centre, grid=Q(1, 10 ** 15), R=None, unpaid=1): + """Grid bracket [a_lo, a_hi]: relax(a_lo) < 1 < relax(a_hi), certified. a_hi is the ceiling.""" + lo, hi = Q(0), Q(1, 20) + require(relax(local, m, families, stages, centre, hi, R, unpaid)[0] > 1, 'search window too small') + require(relax(local, m, families, stages, centre, lo, R, unpaid)[1] < 1, 'relaxation has no positive saving') + while hi - lo > grid: + mid = Q(int((lo + hi) / 2 / grid)) * grid + if mid <= lo: + mid = lo + grid + v = relax(local, m, families, stages, centre, mid, R, unpaid) + if v[1] < 1: + lo = mid + elif v[0] > 1: + hi = mid + else: + raise ValueError('enclosure too wide to separate the grid point') + return lo, hi diff --git a/research/selected-k8-unrestricted-ends/references/construct.py b/research/selected-k8-unrestricted-ends/references/construct.py new file mode 100644 index 0000000000..5600f92cbb --- /dev/null +++ b/research/selected-k8-unrestricted-ends/references/construct.py @@ -0,0 +1,37 @@ +# SPDX-License-Identifier: Apache-2.0 +# Prepared for 1337isnot1337 with substantial OpenAI Codex assistance. +"""Twelve literal frame edits; scalar program and every other field preserved.""" +import argparse,copy,gzip,hashlib,importlib.util,json +from collections import Counter +from pathlib import Path +BASE='c2b294300760e1fd6eeab8c22c4d13e4633dca40e52cac8da0d68163a76e3ca8' +TARGET='f64e0942edc5eb2d45b0a3b068ba942436f35ba9a077ff53d7e4424d1617b2cd' +HERE=Path(__file__).resolve().parent + +def build(path,promotion): + raw=gzip.decompress(path.read_bytes()) + if hashlib.sha256(raw).hexdigest()!=BASE:raise ValueError('source content pin') + w=json.loads(raw);base=copy.deepcopy(w);recipe=json.loads((HERE/'data/END-RECIPE.json').read_bytes()) + if [x[0] for x in recipe['ends']]!=[574,575]:raise ValueError('end sites') + for q,old,new in recipe['ends']: + if w['helper_final'][str(q)]!=old:raise ValueError('old end') + w['helper_final'][str(q)]=new + for i,old,new in recipe['B_frames']: + if w['B'][i][-1]!=old:raise ValueError('old B frame') + w['B'][i][-1]=new + for i,k,old,new in recipe['early_cleanup']: + if w['early_cleanup'][i]!=[k,old]:raise ValueError('old early tail') + w['early_cleanup'][i][1]=new + s=importlib.util.spec_from_file_location('credited_promotion',promotion);m=importlib.util.module_from_spec(s);s.loader.exec_module(m) + H=Counter({int(k):v for k,v in base['report']['local_profile'].items()});H.subtract(m.chain_profile(base));H.update(m.chain_profile(w));H=+H + w['report'].update(local_profile={str(k):v for k,v in sorted(H.items())},local_rank_mass=sum(k*v for k,v in H.items()),width_inventory={str(k):v for k,v in sorted(m.widths(w).items())}) + data=json.dumps(w,sort_keys=True,separators=(',',':')).encode() + if hashlib.sha256(data).hexdigest()!=TARGET:raise ValueError('constructed word pin') + for section in ('A','cut','B','precondition','cleanup'): + if [e[:-1] for e in w[section]]!=[e[:-1] for e in base[section]]:raise ValueError('scalar changed') + return data + +if __name__=='__main__': + ap=argparse.ArgumentParser();ap.add_argument('--input',type=Path,required=True);ap.add_argument('--promotion',type=Path,required=True);ap.add_argument('--output',type=Path,required=True);a=ap.parse_args() + if a.output.exists():raise ValueError('output exists') + data=build(a.input,a.promotion);a.output.write_bytes(gzip.compress(data,mtime=0));print('PASS_K8_RANK7_TWELVE_FRAME_CONSTRUCTION') diff --git a/research/selected-k8-unrestricted-ends/references/frame_model.py b/research/selected-k8-unrestricted-ends/references/frame_model.py new file mode 100644 index 0000000000..33cfb4f404 --- /dev/null +++ b/research/selected-k8-unrestricted-ends/references/frame_model.py @@ -0,0 +1,434 @@ +"""Complete frame-assignment model of a fixed native complex word (standard library only). + +The frame contract is the one checked by research/gauge44-frames-x/independent/audit_local.py: + +* every register has a fixed start frame and a fixed end frame; +* an A, B or tail gate has one frame, shared by its registers, and frames are monotone + (nested) along every register's event sequence; +* centre registers equal their centre frame, and targets their target level, at the start of B; +* for every low-end helper q, every register k in q's inverse-row or dirt-column cone has its + end-of-B frame inside q's end frame; +* each strict climb of dimension d along a register pays one child of rank d, and the eight + centre descents are fixed. + +The scalar program (gate list, order, registers, coefficients, cut, precondition, cleanup) is +fixed. Only the frames of A, B and early-cleanup (tail) gates vary. A climb into a centre or +target pin at the start of B is admitted and charged; the contract requires it to be zero, so +this only enlarges the feasible set. +""" +import gzip +import json +from collections import defaultdict +from fractions import Fraction as F + +H = 9 +FULL = tuple(1 << i for i in range(H - 1, -1, -1)) + + +def basis(vs): + piv = {} + for a in vs: + while a: + bit = a.bit_length() - 1 + if bit in piv: + a ^= piv[bit] + else: + piv[bit] = a + break + for k in sorted(piv): + for j in piv: + if j > k and piv[j] >> k & 1: + piv[j] ^= piv[k] + return tuple(piv[k] for k in sorted(piv, reverse=True)) + + +def contained(a, b): + return basis(list(a) + list(b)) == tuple(b) + + +def join(frames): + return basis([x for f in frames for x in f]) + + +def meet(a, b): + """Zassenhaus intersection of two subspaces of F_2^H.""" + rows = [(u << H) | u for u in a] + [x << H for x in b] + return basis([r for r in basis(rows) if r >> H == 0]) + + +def interval(lo, hi): + """Every subspace F with lo <= F <= hi, by closure over the quotient hi/lo.""" + assert contained(lo, hi), (lo, hi) + comp, cur = [], list(lo) + for x in hi: + if len(basis(cur + [x])) > len(basis(cur)): + comp.append(x) + cur.append(x) + k = len(comp) + assert k <= 4, 'quotient dimension above 4 is not enumerated' + vectors = list(range(1, 1 << k)) + out = [] + for mask in range(1 << len(vectors)): + chosen = {vectors[i] for i in range(len(vectors)) if mask >> i & 1} + if all((a ^ b) in chosen for a in chosen for b in chosen if a != b): + lifted = [] + for a in chosen: + x = 0 + for i in range(k): + if a >> i & 1: + x ^= comp[i] + lifted.append(x) + out.append(basis(list(lo) + lifted)) + assert len(set(out)) == len(out) + return sorted(out, key=lambda f: (len(f), f)) + + +def registers(e): + return tuple(e[1:3]) if e[0] == 'add' else tuple(e[1:2]) + + +def apply(e, rows, dual=False): + if e[0] == 'add': + t, s = e[1:3] + q = F(e[3], e[4]) + if dual: + t, s, q = s, t, -q + dst = rows[t] + for k, x in list(rows[s].items()): + a = dst.get(k, F(0)) + q * x + if a: + dst[k] = a + else: + dst.pop(k, None) + elif e[0] == 'scale': + t = e[1] + q = F(e[2], e[3]) + if dual: + q = 1 / q + rows[t] = {k: q * x for k, x in rows[t].items()} + else: + raise RuntimeError('unknown scalar primitive') + + +def invert(e): + r = list(e) + if r[0] == 'add': + r[3] = -r[3] + else: + r[2], r[3] = r[3], r[2] + return r + + +def cone_ceilings(w, n, v, low_ends): + """End-of-B ceilings implied by the low-end cone conditions of audit_local.py.""" + ident = lambda: [{k: F(1)} for k in range(n)] + main = w['A'] + w['cut'] + w['B'] + raw = ident() + for e in main: + apply(e, raw) + dirt = [{} for _ in range(n)] + for y in range(v, 2 * v): + dirt[y] = {k: a for k, a in raw[y].items() if k >= 2 * v} + for e in w['precondition']: + apply(e, dirt) + compensation = [['add', y, k, -a.numerator, a.denominator, []] + for y in range(v, 2 * v) for k, a in sorted(dirt[y].items())] + prefix = w['precondition'] + compensation + main + p, pinv = ident(), ident() + for e in prefix: + apply(e, p) + for e in reversed(prefix): + apply(invert(e), pinv) + holders = defaultdict(set) + for k in range(n): + for j in p[k]: + holders[j].add(k) + ceil = {} + for q, U in low_ends.items(): + for k in set(pinv[q]) | holders[q]: + if k != q: + ceil[k] = meet(ceil.get(k, FULL), U) + return ceil + + +class Model: + """Event graph, complete domains and components of a native complex word.""" + + def __init__(self, w): + rep = w['report'] + self.v, self.R = v, R = rep['v'], rep['R'] + assert rep['h'] == H + self.n = n = 2 * v + R + end = [FULL] * v + [basis([x for x in range(1, 1 << H) if (x & p).bit_count() % 2 == 0]) + for p in w['ports']] + [FULL] * R + low = {int(q): basis(U) for q, U in w.get('helper_final', {}).items()} + for q, U in low.items(): + assert 2 * v <= q < n + end[q] = U + start = [(p,) for p in w['ports']] + [()] * (v + R) + for q, U in w.get('start_extra', {}).items(): + assert 2 * v <= int(q) < n + start[int(q)] = basis(U) + early = w.get('early_cleanup', []) + assert len({i for i, _ in early}) == len(early) + tail = [w['cleanup'][i][:-1] + [U] for i, U in early] + lev = {int(t): basis(U) for t, U in w.get('target_levels', {}).items()} + pins = {q: basis(U) for q, U in zip(w['centers'], w['center_frames'])} + assert len(pins) == 8 + for t in range(v): + assert v + t not in pins + pins[v + t] = lev.get(t, ()) + self.ceil = cone_ceilings(w, n, v, low) + # centre descents: fixed children, recorded separately (audit_local.py rule) + self.centre_children = [] + for q, U in zip(w['centers'], w['center_frames']): + U = basis(U) + served = {lev.get(e[1] - v, ()) for e in w['cut'] if e[2] == q} + for T in sorted(served, key=lambda x: -len(x)): + assert contained(T, U) + if T != U: + self.centre_children.append(len(U) - len(T)) + U = T + # nodes: ('S',q) start, ('G',i) gate, ('P',q) start-of-B pin, ('E',q) end + gates = [('A', e) for e in w['A']] + [('B', e) for e in w['B']] + [('T', e) for e in tail] + self.gates = gates + self.given = [basis(e[-1]) for _, e in gates] + self.regs = [registers(e) for _, e in gates] + for rs in self.regs: + assert len(set(rs)) == len(rs) and all(0 <= q < n for q in rs) + nA, nB = len(w['A']), len(w['B']) + self.nA, self.nB = nA, nB + fixed = {} + for q in range(n): + fixed[('S', q)] = start[q] + fixed[('E', q)] = end[q] + for q, U in pins.items(): + fixed[('P', q)] = U + chains = defaultdict(list) + for q in range(n): + chains[q].append(('S', q)) + boundary = {} # register -> index in its chain of the last pre-tail node + for i, rs in enumerate(self.regs): + if i == nA: + for q in pins: + chains[q].append(('P', q)) + if i == nA + nB: + for q in range(n): + boundary[q] = len(chains[q]) - 1 + for q in rs: + chains[q].append(('G', i)) + if len(gates) == nA: + for q in pins: + chains[q].append(('P', q)) + if len(gates) <= nA + nB: + for q in range(n): + boundary[q] = len(chains[q]) - 1 + for q in range(n): + chains[q].append(('E', q)) + self.chains = chains + self.fixed_frames = fixed + # forward joins and backward meets + order = [('S', q) for q in range(n)] + for i in range(len(gates)): + if i == nA: + order += [('P', q) for q in pins] + order.append(('G', i)) + if len(gates) == nA: + order += [('P', q) for q in pins] + order += [('E', q) for q in range(n)] + position = {node: k for k, node in enumerate(order)} + pred = defaultdict(list) + succ = defaultdict(list) + for q, ch in chains.items(): + for a, b in zip(ch, ch[1:]): + assert position[a] < position[b] + succ[a].append((q, b)) + pred[b].append((q, a)) + lo, hi = {}, {} + for node in order: + if node in fixed: + lo[node] = fixed[node] + for q, a in pred[node]: + assert contained(lo[a], fixed[node]), ('fixed frame below forward join', node) + else: + lo[node] = join(lo[a] for q, a in pred[node]) + ceil_at = defaultdict(list) # node -> ceilings applying to that node + for q, k in boundary.items(): + if q in self.ceil: + ceil_at[chains[q][k]].append(self.ceil[q]) + for node in reversed(order): + if node in fixed: + hi[node] = fixed[node] + else: + U = FULL + for q, b in succ[node]: + U = meet(U, hi[b]) + for C in ceil_at[node]: + U = meet(U, C) + hi[node] = U + assert contained(lo[node], hi[node]), ('empty domain', node) + for node, Cs in ceil_at.items(): + if node in fixed: + assert all(contained(fixed[node], C) for C in Cs), ('fixed frame above a cone ceiling', node) + self.lo, self.hi = lo, hi + self.domain = {} + for i in range(len(gates)): + node = ('G', i) + if lo[node] != hi[node]: + self.domain[node] = interval(lo[node], hi[node]) + assert self.given[i] in self.domain[node] + else: + assert self.given[i] == lo[node], ('given frame differs from forced frame', i) + # edges, merged by endpoint pair, with integer multiplicity + mult = defaultdict(int) + for q, ch in chains.items(): + for a, b in zip(ch, ch[1:]): + mult[(a, b)] += 1 + self.edges = dict(mult) + + def frame_of(self, node, assignment): + if node in self.fixed_frames: + return self.fixed_frames[node] + if node in self.domain: + return assignment[node] + return self.lo[node] + + def baseline(self): + return {('G', i): self.given[i] for i in range(len(self.gates)) if ('G', i) in self.domain} + + def profile(self, assignment): + """Paid children of an assignment (graph climbs plus fixed centre descents).""" + count = defaultdict(int) + for (a, b), m in self.edges.items(): + A, B = self.frame_of(a, assignment), self.frame_of(b, assignment) + if not contained(A, B): + raise ValueError(('non-monotone', a, b)) + d = len(B) - len(A) + if d: + count[d] += m + for d in self.centre_children: + count[d] += 1 + return dict(sorted(count.items())) + + def components(self): + parent = {node: node for node in self.domain} + + def find(x): + while parent[x] != x: + parent[x] = parent[parent[x]] + x = parent[x] + return x + for (a, b) in self.edges: + if a in self.domain and b in self.domain: + parent[find(a)] = find(b) + groups = defaultdict(list) + for node in self.domain: + groups[find(node)].append(node) + comps = [sorted(g, key=lambda x: x[1]) for g in groups.values()] + return sorted(comps, key=lambda c: c[0][1]) + + def component_problem(self, comp): + """Unary and pairwise rank-count potentials of one component. + + Costs are integer vectors c[0..H]; c[d] counts children of rank d. + Returns (labels, unary, pairs): unary[node][F] collects the edges from the node + to fixed or forced neighbours, and pairs[(a,b)][(F,G)] the merged edges between + two members (only nested pairs F <= G appear). Edges with no free endpoint + belong to no component; fixed_profile() counts them. + """ + members = set(comp) + labels = {node: self.domain[node] for node in comp} + zero = lambda: [0] * (H + 1) + unary = {node: {Fr: zero() for Fr in labels[node]} for node in comp} + pairs = {} + for (a, b), m in self.edges.items(): + ina, inb = a in members, b in members + if not (ina or inb): + continue + if ina and inb: + table = {} + for Fa in labels[a]: + for Fb in labels[b]: + if contained(Fa, Fb): + c = zero() + d = len(Fb) - len(Fa) + if d: + c[d] += m + table[(Fa, Fb)] = c + pairs[(a, b)] = table + elif ina: + Fb = self.frame_of(b, None) + for Fa in labels[a]: + assert contained(Fa, Fb) + d = len(Fb) - len(Fa) + if d: + unary[a][Fa][d] += m + else: + Fa = self.frame_of(a, None) + for Fb in labels[b]: + assert contained(Fa, Fb) + d = len(Fb) - len(Fa) + if d: + unary[b][Fb][d] += m + return labels, unary, pairs + + def fixed_profile(self): + """Children on edges between two fixed or forced nodes, plus centre descents.""" + count = defaultdict(int) + for (a, b), m in self.edges.items(): + if a in self.domain or b in self.domain: + continue + A, B = self.frame_of(a, None), self.frame_of(b, None) + assert contained(A, B) + d = len(B) - len(A) + if d: + count[d] += m + for d in self.centre_children: + count[d] += 1 + return count + + +def lp(labels, unary, pairs): + """Local-polytope LP of one component: min c.z, A z = rhs, z >= 0. + + Rows: ('N', node) normalisation (rhs 1); ('M', a, b, side, frame) marginal of the + merged edge (a, b) at endpoint side 0 (a) or 1 (b) (rhs 0). + Columns: ('x', node, frame) and ('y', a, b, frame_a, frame_b) with F_a <= F_b. + Every literal legal assignment gives a 0/1 feasible point. + """ + rows = [('N', node) for node in sorted(labels)] + for (a, b) in sorted(pairs): + rows += [('M', a, b, 0, Fa) for Fa in labels[a]] + rows += [('M', a, b, 1, Fb) for Fb in labels[b]] + index = {r: i for i, r in enumerate(rows)} + rhs = [1 if r[0] == 'N' else 0 for r in rows] + touching = defaultdict(list) + for (a, b) in sorted(pairs): + touching[a].append((a, b, 0)) + touching[b].append((a, b, 1)) + cols = [] + for node in sorted(labels): + for Fr in labels[node]: + entries = [(index[('N', node)], 1)] + entries += [(index[('M', a, b, side, Fr)], -1) for a, b, side in touching[node]] + cols.append((('x', node, Fr), unary[node][Fr], entries)) + for (a, b) in sorted(pairs): + for (Fa, Fb), c in sorted(pairs[(a, b)].items()): + cols.append((('y', a, b, Fa, Fb), c, + [(index[('M', a, b, 0, Fa)], 1), (index[('M', a, b, 1, Fb)], 1)])) + return rows, rhs, cols + + +def assignment_cost(labels, unary, pairs, assignment): + c = [0] * (H + 1) + for node in labels: + for d, x in enumerate(unary[node][assignment[node]]): + c[d] += x + for (a, b), table in pairs.items(): + for d, x in enumerate(table[(assignment[a], assignment[b])]): + c[d] += x + return c + + +def load_word(raw_gz): + return json.loads(gzip.decompress(raw_gz)) diff --git a/research/selected-k8-unrestricted-ends/references/gen_duals.py b/research/selected-k8-unrestricted-ends/references/gen_duals.py new file mode 100644 index 0000000000..bd85022a44 --- /dev/null +++ b/research/selected-k8-unrestricted-ends/references/gen_duals.py @@ -0,0 +1,149 @@ +"""Nominate symbolic exact duals for every component (solver side; not part of the proof). + +Needs numpy, scipy and highspy. HiGHS solves each component's LP at the excluded +exponent; its optimal basis is then inverted for each rank coordinate C_2..C_9 +separately, so every dual entry is a rational linear form in those charges. The +rational values are checked exactly here and again, independently of any solver, +by verify.py. Output: data/DUALS.json.gz (deterministic). +""" +import argparse +import gzip +import json +import sys +from fractions import Fraction as F +from pathlib import Path + +import highspy +import numpy as np +import scipy.sparse as sp +import scipy.sparse.linalg as spla + +HERE = Path(__file__).resolve().parent +sys.path.insert(0, str(HERE)) +import model as M # noqa: E402 +import verify as V # noqa: E402 + +RANKS = range(2, M.H + 1) + + +def numeric_charges(b): + """C_d / (b * 73^b) as floats; only the solver uses these.""" + x = float(b) + return [0.0, 0.0] + [(d ** (1 - x) - d) / x for d in RANKS] + + +def solve(rows, rhs, cols, gamma): + nr, nc = len(rows), len(cols) + start, index, value = [0], [], [] + cost = [] + for _, c, entries in cols: + cost.append(sum(c[d] * gamma[d] for d in range(len(c)))) + for i, a in sorted(entries): + index.append(i) + value.append(float(a)) + start.append(len(index)) + lp = highspy.HighsLp() + lp.num_col_, lp.num_row_ = nc, nr + lp.col_cost_ = np.array(cost) + lp.col_lower_ = np.zeros(nc) + lp.col_upper_ = np.full(nc, highspy.kHighsInf) + lp.row_lower_ = np.array(rhs, dtype=float) + lp.row_upper_ = np.array(rhs, dtype=float) + lp.a_matrix_.format_ = highspy.MatrixFormat.kColwise + lp.a_matrix_.start_ = np.array(start, dtype=np.int32) + lp.a_matrix_.index_ = np.array(index, dtype=np.int32) + lp.a_matrix_.value_ = np.array(value) + h = highspy.Highs() + h.setOptionValue('output_flag', False) + h.setOptionValue('presolve', 'off') + h.setOptionValue('solver', 'simplex') + h.passModel(lp) + h.run() + assert h.getModelStatus() == highspy.HighsModelStatus.kOptimal, h.modelStatusToString(h.getModelStatus()) + basis = h.getBasis() + sol = h.getSolution() + return h.getInfo().objective_function_value, basis, list(sol.col_value) + + +def symbolic_duals(rows, cols, basis): + basic_cols = [j for j in range(len(cols)) if basis.col_status[j] == highspy.HighsBasisStatus.kBasic] + active_rows = [i for i in range(len(rows)) if basis.row_status[i] != highspy.HighsBasisStatus.kBasic] + assert len(basic_cols) == len(active_rows), (len(basic_cols), len(active_rows)) + rpos = {i: k for k, i in enumerate(active_rows)} + data, ri, ci = [], [], [] + for kc, j in enumerate(basic_cols): + for i, a in cols[j][2]: + if i in rpos: + # transpose: row = basic column, column = active row + ri.append(kc) + ci.append(rpos[i]) + data.append(float(a)) + At = sp.csc_matrix((data, (ri, ci)), shape=(len(basic_cols), len(active_rows))) + lu = spla.splu(At) + q = {} + for d in RANKS: + rhs_d = np.array([float(cols[j][1][d]) for j in basic_cols]) + sol = lu.solve(rhs_d) + for k, i in enumerate(active_rows): + x = F(float(sol[k])).limit_denominator(1 << 20) + if x: + q.setdefault(i, {})[d] = x + # exact check on the basic columns: A_B^T q == c_B coordinate-wise + for j in basic_cols: + key, c, entries = cols[j] + for d in RANKS: + s = sum((a * q.get(i, {}).get(d, 0) for i, a in entries), F(0)) + assert s == c[d], ('rationalised dual is not exact on a basic column', key, d, s, c[d]) + return q + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--output', type=Path, default=HERE / 'data' / 'DUALS.json.gz') + args = parser.parse_args() + word, src = V.load_selected_word(V.REPO) + model = M.Model(word) + b = V.excluded_exponent(V.REPO) + gamma = numeric_charges(b) + comps = model.components() + out = {'excluded_b': f'{b.numerator}/{b.denominator}', 'word_content_sha256': src['content_sha256'], + 'components': []} + base_total = [0] * (M.H + 1) + for n, comp in enumerate(comps): + labels, unary, pairs = model.component_problem(comp) + rows, rhs, cols = M.lp(labels, unary, pairs) + base = M.assignment_cost(labels, unary, pairs, {node: model.baseline()[node] for node in comp}) + base_num = sum(base[d] * gamma[d] for d in range(len(base))) + obj, basis, x = solve(rows, rhs, cols, gamma) + gap = base_num - obj + if gap > 1e-7: + frac = [cols[j][0] for j in range(len(cols)) if 1e-9 < x[j] < 1 - 1e-9] + print('component', n, 'LP below baseline by', gap, 'fractional columns', len(frac), flush=True) + q = symbolic_duals(rows, cols, basis) + dual_obj = [0] * (M.H + 1) + for i, vec in q.items(): + if rhs[i]: + for d, x_ in vec.items(): + dual_obj[d] += x_ * rhs[i] + neg = 0 + for key, c, entries in cols: + r = sum((c[d] - sum((a * q.get(i, {}).get(d, 0) for i, a in entries), F(0))) * gamma[d] for d in RANKS) + if r < -1e-9: + neg += 1 + same = all(dual_obj[d] == base[d] for d in RANKS) + print(f'component {n}: nodes={len(comp)} rows={len(rows)} cols={len(cols)} ' + f'lp={obj:.9f} base={base_num:.9f} identity={same} negative_reduced={neg}', flush=True) + for d in RANKS: + base_total[d] += base[d] + out['components'].append({ + 'first': json.dumps(comp[0]), 'nodes': len(comp), + 'duals': {json.dumps(rows[i]): {str(d): f'{x_.numerator}/{x_.denominator}' for d, x_ in sorted(vec.items())} + for i, vec in sorted(q.items())}}) + args.output.parent.mkdir(parents=True, exist_ok=True) + payload = json.dumps(out, sort_keys=True, separators=(',', ':')).encode() + args.output.write_bytes(gzip.compress(payload, mtime=0)) + print('wrote', args.output, len(payload), 'bytes; components', len(comps)) + + +if __name__ == '__main__': + main() diff --git a/research/selected-k8-unrestricted-ends/test_package.py b/research/selected-k8-unrestricted-ends/test_package.py new file mode 100644 index 0000000000..ac1b191661 --- /dev/null +++ b/research/selected-k8-unrestricted-ends/test_package.py @@ -0,0 +1,227 @@ +#!/usr/bin/env python3 +"""Native fixtures, endpoint/idle-accounting controls and external corruptions. + +Adapts Gareth Davidson PR1995 (73e323159d65c974debb180189694fd59144da5f). +Gareth Davidson with OpenAI Codex assistance. Apache-2.0. +""" +from contextlib import redirect_stdout +from collections import Counter +import copy +from fractions import Fraction as Q +import gzip +from hashlib import sha256 +import importlib.util +import io +import json +from pathlib import Path +import shutil +import subprocess +import sys +import tempfile + +HERE = Path(__file__).resolve().parent + + +def module(name, path): + spec = importlib.util.spec_from_file_location(name, path) + result = importlib.util.module_from_spec(spec) + spec.loader.exec_module(result) + return result + + +def need(ok, why): + if not ok: + raise ValueError(why) + + +def fails(action, text): + try: + action() + except (ValueError, RuntimeError, AssertionError) as error: + need(text in str(error), "wrong failure: "+str(error)) + else: + raise ValueError("control did not reject: "+text) + + +def inventory(path): + return {str(f.relative_to(path)): sha256(f.read_bytes()).hexdigest() + for f in path.rglob("*") if f.is_file()} + + +def main(): + V = module("tested_k8_primary", HERE / "verify.py") + I = module("tested_k8_independent", HERE / "independent.py") + U = V.U + U.source_bindings() + M, C, auditor = V.local("model"), U.retained("ceiling.py"), U.retained("audit_local.py") + P = V.local("materialize") + word = U.word() + model = M.Model(word) + duals = U.duals() + expected = U.parse((HERE/"EXPECTED.json").read_bytes()) + cap = Q(expected["a_bracket"][1]) + assignment, profile = P.primal(U, model) + bounds = {"cap": V.charges(C, cap), "target": V.charges(C, V.TARGET)} + controls = [] + with tempfile.TemporaryDirectory(prefix="k8-frame-controls-") as directory: + root = Path(directory) + # The existing all-column auditor checks scalar endpoints in both + # orientations, exact frame bills and the low-end cones independently. + native_profiles = {} + credited = model.baseline() + recipe = U.parse((HERE/"references/END-RECIPE.json").read_bytes()) + for q, old, new in recipe["ends"]: + need(list(model.original_caps[q]) == old, "credited old endpoint") + credited[("E",q)] = M.M.basis(new) + for i, old, new in recipe["B_frames"]: + need(word["B"][i][-1] == old, "credited old B frame") + credited[("G",model.nA+i)] = M.M.basis(new) + for i, k, old, new in recipe["early_cleanup"]: + need(word["early_cleanup"][i] == [k,old], "credited old early tail") + credited[("G",model.nA+model.nB+i)] = M.M.basis(new) + for label, chosen in (("baseline", model.baseline()), ("credited-two-ends", credited), + ("four-end-optimum", assignment)): + fixture = P.native_word(word,model,chosen) + for section in ("A","cut","B","precondition","cleanup"): + need([e[:-1] for e in fixture[section]] == [e[:-1] for e in word[section]], + "native scalar chronology unchanged") + chosen_profile = model.profile(chosen) + path, receipt = root/(label+".json.gz"), root/(label+"-audit.json") + path.write_bytes(gzip.compress(U.canonical(fixture), mtime=0)) + with redirect_stdout(io.StringIO()): + auditor.run(path, receipt) + checked = json.loads(receipt.read_text()) + need(checked["status"] == "PASS_INDEPENDENT_EXACT_FORWARD_AND_DUAL_ENDPOINT_FRAMES_ENTRANCES_CONES", + "legacy native auditor") + need(checked["checked_columns"] == 704 and checked["local_profile"] == fixture["report"]["local_profile"], + "all-column native fixture coverage") + native_profiles[label] = chosen_profile + need(len({tuple(sorted(p.items())) for p in native_profiles.values()})==3, + "three distinct native profiles") + controls.append("three-704-column-both-orientation-native-audits") + + # A reduced local mass is exposed idle work, not free removed work. + correct=C.relax(profile,73,896,9,64,V.TARGET) + fake_upper=(sum((n*C.child_cost(r,73,V.TARGET)[1] for r,n in profile.items()),Q(0)) + +Q(1646,51)*C.child_cost(51,73,V.TARGET)[1])/Q(896,9) + need(correct[0]>1 and fake_upper<1,"missing four idle ranks creates a false target pass") + controls.append("omitted-idle-mass-false-positive") + + # Both directions beyond the old cap are in the new quantified class. + broken=copy.deepcopy(model) + endpoint=("E",574) + rotated=next(f for f in broken.domain[endpoint] + if len(f)==8 and not M.M.contained(f,model.original_caps[574])) + broken.domain[endpoint].remove(rotated) + fails(lambda:V.check_duals(M,broken,duals,assignment,profile,bounds),"complete frame interval") + controls.append("omitted-feasible-rotated-end") + + broken=copy.deepcopy(model) + broken.domain[("E",273)].remove(M.M.FULL) + fails(lambda:V.check_duals(M,broken,duals,assignment,profile,bounds),"complete frame interval") + controls.append("omitted-feasible-full-end") + + # The retained vector-subset enumerator is an independent finite oracle + # through dimension four. For dimension five, unique valid spaces plus + # the Gaussian count certify coverage, separately matched by bitsets. + retained_model=U.retained("frame_model.py") + for k in range(5): + hi=retained_model.basis([1< 2) + broken.domain[node].pop() + fails(lambda: V.check_duals(M, broken, duals, assignment, profile, bounds), "complete frame interval") + controls.append("omitted-feasible-frame-choice") + + broken = copy.deepcopy(model) + broken.centre_children = [] + fails(lambda: V.check_duals(M, broken, duals, assignment, profile, bounds), "full fixed and variable cost coverage") + controls.append("omitted-centre-work") + + broken = copy.deepcopy(model) + edge = next(e for e in broken.edges if e[0] in broken.domain and e[1] in broken.domain) + del broken.edges[edge] + fails(lambda: V.check_duals(M, broken, duals, assignment, profile, bounds), "dual row domain") + controls.append("omitted-common-gate-edge") + + old = I.isqrt + I.isqrt = lambda n: old(n)+3 + I.child.cache_clear() + fails(I.main, "square-root oracle calibration") + I.isqrt = old + I.child.cache_clear() + controls.append("invalid-square-root-oracle") + + target = root/"relocated" + shutil.copytree(HERE, target, ignore=shutil.ignore_patterns("__pycache__", "*.pyc")) + def run(script="verify.py", error=None): + result = subprocess.run([sys.executable, "-I", "-O", "-B", str(target/script)], + cwd=directory, text=True, capture_output=True, timeout=300) + if error is None: + need(result.returncode == 0 and "PASS_" in result.stdout, "relocated replay: "+result.stderr) + else: + need(result.returncode != 0 and error in result.stderr, "wrong corruption rejection: "+result.stderr) + before = inventory(target) + for f in target.rglob("*"): + if f.is_file(): + f.chmod(0o444) + run() + run("independent.py") + need(inventory(target) == before, "read-only package changed") + controls.append("both-optimized-read-only-relocated-checkers") + for f in target.rglob("*"): + if f.is_file(): + f.chmod(0o644) + + def mutate(label, file, change, error): + path = target/file + raw = path.read_bytes() + path.write_bytes(change(raw)) + try: + run(error=error) + controls.append(label) + finally: + path.write_bytes(raw) + def edit(raw, change): + data = json.loads(raw) + change(data) + return U.canonical(data) + def change_dual(raw, change): + return gzip.compress(edit(gzip.decompress(raw), change), mtime=0) + mutate("omitted-dual-component", "DUALS.json.gz", + lambda raw: change_dual(raw, lambda x: x["components"].pop()), "component coverage") + def overstate(x): + record = x["components"][0]["duals"] + key = next(k for k in record if json.loads(k)[0] == "N") + record[key]["1"] = str(Q(record[key].get("1", "0"))+1) + mutate("overstated-dual-objective", "DUALS.json.gz", + lambda raw: change_dual(raw, overstate), "negative or uncertified reduced cost") + mutate("omitted-primal-node", "PRIMAL.json.gz", + lambda raw: change_dual(raw, lambda x: x["assignment"].pop(next(iter(x["assignment"])))), + "complete primal node coverage") + mutate("false-idle-mass", "EXPECTED.json", + lambda raw: edit(raw, lambda x: x.update(idle_mass=1646)), "receipt mismatch") + mutate("false-gate-coverage", "EXPECTED.json", + lambda raw: edit(raw, lambda x: x.update(free_gates=2588)), "receipt mismatch") + mutate("missing-source-inventory", "SOURCES.json", + lambda raw: edit(raw, lambda x: x["files"].pop()), "source inventory") + mutate("retained-model-drift", "references/frame_model.py", lambda raw: raw+b"\n", "retained source SHA256") + mutate("selected-word-drift", "references/WORD.json.gz", lambda raw: raw+b"\n", "retained source SHA256") + mutate("duplicate-receipt-key", "EXPECTED.json", lambda raw: b'{"x":0,"x":1}', "duplicate JSON key") + mutate("nonfinite-receipt", "EXPECTED.json", lambda raw: b'{"x":NaN}', "noninteger/nonfinite JSON number") + need(inventory(target) == before, "corruptions not restored") + print("PASS_K8_UNRESTRICTED_END_CONTROLS", "checks="+str(len(controls))) + print(json.dumps(controls)) + print("native_profiles="+json.dumps(native_profiles, sort_keys=True)) + + +if __name__ == "__main__": + main() diff --git a/research/selected-k8-unrestricted-ends/verify.py b/research/selected-k8-unrestricted-ends/verify.py new file mode 100644 index 0000000000..982f03713d --- /dev/null +++ b/research/selected-k8-unrestricted-ends/verify.py @@ -0,0 +1,184 @@ +#!/usr/bin/env python3 +"""Unrestricted terminal endpoint/frame bound, with variable-mass excess prices. + +Adapts Gareth Davidson PR1995, mathematical commit 73e323159d65c974debb180189694fd59144da5f. +Gareth Davidson with OpenAI Codex assistance. Apache-2.0. +""" +import argparse +from collections import Counter +from fractions import Fraction as Q +import importlib.util +import json +from pathlib import Path + +HERE = Path(__file__).resolve().parent +spec = importlib.util.spec_from_file_location("k8_common", HERE / "common.py") +U = importlib.util.module_from_spec(spec) +spec.loader.exec_module(U) +need = U.need +RANKS = range(1, 10) +BASE_LO = Q(1690054109088, 10**15) +BASE_HI = Q(1690054109089, 10**15) +TARGET = Q(21, 20) * BASE_HI + + +def span_mask(frame): + values = {0} + for vector in frame: + values |= {x ^ vector for x in values} + return sum(1 << x for x in values) + + +def graph_receipt(model): + nodes = [[list(n), span_mask(model.lo[n]), span_mask(model.hi[n])] for n in sorted(model.lo)] + domains = [[list(n), sorted(span_mask(f) for f in model.domain[n])] for n in sorted(model.domain)] + edges = [[list(a), list(b), k] for (a, b), k in sorted(model.edges.items())] + cones = [[q, support] for q, support in sorted(model.cones.items())] + return {"nodes_sha256": U.digest(nodes), "domains_sha256": U.digest(domains), + "edges_sha256": U.digest(edges), "cones_sha256": U.digest(cones), + "node_count": len(nodes), "edge_count": len(edges), "cone_helpers": len(cones), "cone_edges": len(model.cone_edges)} + + +def subspace_count(k): + total = 0 + for d in range(k+1): + top = bottom = 1 + for j in range(d): + top *= (1 << (k-j)) - 1 + bottom *= (1 << (d-j)) - 1 + total += top // bottom + return total + + +def charges(C, a): + costs = {d: C.child_cost(d, 73, a) for d in RANKS} + idle = C.child_cost(51, 73, a) + # Local mass varies. Reprice every released unit as idle, not as saved work. + return {d: (73*(costs[d][0]-Q(d,51)*idle[1]), + 73*(costs[d][1]-Q(d,51)*idle[0])) for d in RANKS} + + +def lower(vec, bounds): + return sum((value * bounds[d][0 if value > 0 else 1] + for d, value in vec.items() if value), Q(0)) + + +def check_duals(M, model, data, assignment, profile, all_bounds): + comps = model.components() + need(len(data["components"]) == len(comps), "component coverage") + stats = Counter() + total = Counter({d:n for d,n in model.fixed_profile().items() if n}) + distinct_reduced = set() + for comp, record in zip(comps, data["components"]): + need(record["first"] == json.dumps(comp[0]) and record["nodes"] == len(comp), "component identity") + labels, unary, pairs = model.component_problem(comp) + for node in comp: + domain = labels[node] + k = len(model.hi[node])-len(model.lo[node]) + need(len(domain) == len(set(domain)) == subspace_count(k), "complete frame interval") + need(all(M.M.contained(model.lo[node], f) and M.M.contained(f, model.hi[node]) for f in domain), + "frame outside interval") + rows, rhs, cols = M.lp(labels, unary, pairs) + keys = [json.dumps(row) for row in rows] + need(set(record["duals"]) <= set(keys), "dual row domain") + dual = [] + for key in keys: + vec = {int(d): Q(v) for d, v in record["duals"].get(key, {}).items()} + need(all(d in RANKS for d in vec), "dual rank coordinate") + dual.append(vec) + for _, cost, entries in cols: + residual = {d: Q(cost[d]) for d in RANKS} + for row, multiplier in entries: + for d, value in dual[row].items(): + residual[d] -= multiplier*value + if any(residual.values()): + for bounds in all_bounds.values(): + need(lower(residual, bounds) > 0, "negative or uncertified reduced cost") + stats["positive"] += 1 + else: + stats["zero"] += 1 + distinct_reduced.add(tuple(str(residual[d]) for d in RANKS)) + objective = {d: sum((rhs[i]*v.get(d, 0) for i, v in enumerate(dual)), Q(0)) for d in RANKS} + baseline = M.assignment_cost(labels, unary, pairs, {n: assignment[n] for n in comp}) + need(all(objective[d] == baseline[d] for d in RANKS), "dual/primal coefficient identity") + total.update({d: baseline[d] for d in range(1, 10) if baseline[d]}) + stats.update(rows=len(rows), columns=len(cols), components=1) + need(dict(total) == profile, "full fixed and variable cost coverage") + stats["distinct_reduced_vectors"] = len(distinct_reduced) + return dict(stats) + + +def local(name): + spec=importlib.util.spec_from_file_location("endpoint_"+name,HERE/(name+".py")) + result=importlib.util.module_from_spec(spec) + spec.loader.exec_module(result) + return result + + +def run(): + U.source_bindings() + word=U.word() + M,C,P=local("model"),U.retained("ceiling.py"),local("materialize") + model=M.Model(word) + need(model.profile(model.baseline())==U.PROFILE,"baseline profile") + assignment,profile=P.primal(U,model) + need(profile=={1:2400,2:446,3:416,4:142,5:82,8:8},"optimal profile binding") + lo,hi=C.ceiling(profile,73,896,9,64) + need(BASE_HI1,"ceiling bracket sign") + bills[str(a)]=[str(left-1),str(right-1)] + free_ends=[n for n in model.domain if n[0]=="E"] + need(len(model.original_caps)==78 and len(free_ends)==78,"all endpoint coverage") + endpoint_intervals=Counter((len(model.lo[n]),len(model.hi[n]),len(model.domain[n])) for n in free_ends) + need(endpoint_intervals=={(4,9,374):32,(7,9,5):46},"complete unrestricted endpoint domains") + min_mass=5586+sum(len(model.lo[("E",q)])-len(cap) for q,cap in model.original_caps.items()) + max_mass=5586+sum(9-len(cap) for cap in model.original_caps.values()) + need((min_mass,max_mass)==(5540,5792) and 7232-max_mass>=0,"all endpoint choices have nonnegative idle mass") + changed_ends=[q for q,cap in sorted(model.original_caps.items()) + if model.frame_of(("E",q),assignment)!=cap] + need(changed_ends==[574,575,580,581],"attaining contracted ends") + return {"schema":"selected-k8-unrestricted-end-bound-v1", + "status":"PASS_SELECTED_K8_UNRESTRICTED_END_BOUND","word_sha256":U.WORD_SHA, + "duals_sha256":U.digest(data),"primal_sha256":U.digest(U.primal_data()), + "profile":{str(r):n for r,n in profile.items()},"local_mass":5582,"idle_mass":1650, + "gates":len(model.gates),"free_gates":len(model.domain)-len(free_ends), + "restricted_ends":78,"free_ends":[n[1] for n in free_ends], + "forced_ends":sorted(set(model.original_caps)-{n[1] for n in free_ends}), + "endpoint_intervals":[{"lower_dimension":a,"upper_dimension":b,"choices":c,"count":n} + for (a,b,c),n in sorted(endpoint_intervals.items())], + "all_assignment_local_mass_interval":[min_mass,max_mass], + "all_assignment_idle_mass_interval":[7232-max_mass,7232-min_mass], + "attaining_changed_ends":changed_ends, + "component_sizes":{str(k):v for k,v in sorted(Counter(map(len,model.components())).items())}, + "domain_sizes":{str(k):v for k,v in sorted(Counter(map(len,model.domain.values())).items())}, + "graph":graph_receipt(model),"duality":stats, + "a_bracket":[str(lo),str(hi)],"kappa_cap":str(hi/(1+hi)),"target_a":str(TARGET), + "ceiling_ratio_upper":str(hi/BASE_LO),"bills":bills, + "scope":"fixed scalar word and entrances; arbitrary terminal subspaces of formerly restricted helpers and all gate frames; full idle charge; no global supplier or new kappa"} + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--write-expected", action="store_true") + args = parser.parse_args() + receipt = run() + path = HERE / "EXPECTED.json" + if args.write_expected: + path.write_text(json.dumps(receipt, indent=2, sort_keys=True)+"\n") + else: + need(U.parse(path.read_bytes()) == receipt, "receipt mismatch") + print(receipt["status"], "components="+str(receipt["duality"]["components"]), + "columns="+str(receipt["duality"]["columns"]), "receipt_sha256="+U.digest(receipt)) + + +if __name__ == "__main__": + main() From 2d63b2ba57c83d6b0d8a8aa1589a19e0530a0285 Mon Sep 17 00:00:00 2001 From: Gareth Davidson Date: Wed, 14 Oct 2026 18:04:45 +0100 Subject: [PATCH 2/3] Record unrestricted-terminal result publication --- research/selected-k8-unrestricted-ends/README.md | 4 +++- research/selected-k8-unrestricted-ends/TASK.json | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/research/selected-k8-unrestricted-ends/README.md b/research/selected-k8-unrestricted-ends/README.md index 89f382ab66..77e9357e23 100644 --- a/research/selected-k8-unrestricted-ends/README.md +++ b/research/selected-k8-unrestricted-ends/README.md @@ -85,7 +85,9 @@ ceiling and lever controls passed. The initial waiver of all affected helper climb costs, with released mass recharged, had planning headroom; it was not a realized word or a universal lower bound for the final domain. [Discussion2000](https://github.com/CrocSwap/integer-mult-bounds/discussions/2000) -records the claim and outcome. TASK.json retains the original card, sources, +records the claim and outcome. Published as [PR2013](https://github.com/CrocSwap/integer-mult-bounds/pull/2013); +mathematical commit `31e788df17a4df614fa5b3605a06d06e60f18bb6`. +TASK.json retains the original card, sources, predecessor heads and overlap coverage. Metadata search is not a novelty certificate. The final refresh covered 381 open PRs at 17:00:22 UTC and 643 Discussions at 17:01:43 UTC on 2026-10-14, with complete pagination. diff --git a/research/selected-k8-unrestricted-ends/TASK.json b/research/selected-k8-unrestricted-ends/TASK.json index cca70eaf58..03a5f6e04f 100644 --- a/research/selected-k8-unrestricted-ends/TASK.json +++ b/research/selected-k8-unrestricted-ends/TASK.json @@ -446,5 +446,7 @@ "all-size compiler and precision/tape obligations", "outer analytic transfer" ] - } + }, + "pr": "https://github.com/CrocSwap/integer-mult-bounds/pull/2013", + "mathematical_head": "31e788df17a4df614fa5b3605a06d06e60f18bb6" } From a43cc72abcb16ca4d61fc469174a9b971b084d6f Mon Sep 17 00:00:00 2001 From: Gareth Davidson Date: Wed, 14 Oct 2026 18:07:26 +0100 Subject: [PATCH 3/3] Clarify the certified ceiling bracket comparison --- research/selected-k8-unrestricted-ends/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/research/selected-k8-unrestricted-ends/README.md b/research/selected-k8-unrestricted-ends/README.md index 77e9357e23..9c71aae4b6 100644 --- a/research/selected-k8-unrestricted-ends/README.md +++ b/research/selected-k8-unrestricted-ends/README.md @@ -15,7 +15,7 @@ the declared 5% target. The full construction's exponent is unchanged. only nested contractions inside each original end. This package removes that cap: ends may rotate, enlarge or become FULL, subject only to containing the fixed entrance and the unchanged scalar/frame/cleanup contract. The -larger domain has the same certified ceiling. Its attaining four-end profile +larger domain has the same certified ceiling bracket. Its attaining four-end profile is already known from PR1995; the new result is the complete larger-domain bound, not another discovery of that construction.