From f917bc1b4a769a241349eda7c0e22e374548cf58 Mon Sep 17 00:00:00 2001 From: Ali Romman <226877337+aliromman@users.noreply.github.com> Date: Thu, 22 Oct 2026 12:27:42 -0500 Subject: [PATCH 1/2] Add paired centre gaps in original complex frames --- research/original-paired-gap/MANIFEST.json | 310 + research/original-paired-gap/NOTICE.md | 58 + research/original-paired-gap/PROOF.md | 271 + research/original-paired-gap/PROVENANCE.md | 34 + research/original-paired-gap/PUBLICATION.md | 46 + research/original-paired-gap/README.md | 182 + research/original-paired-gap/SOURCES.json | 209 + .../data/FULL-MODE-PROGRAMS.json.gz | Bin 0 -> 213376 bytes .../original-paired-gap/data/INPUT-LINES.json | 16421 ++++++++++++++++ .../data/PAIRED-PROGRAMS.json.gz | Bin 0 -> 29886 bytes .../evidence/ALGEBRA-CHECKS.json | 29 + .../evidence/COLD-REPLAY.json | 67 + .../evidence/COLD-REVIEW-SOURCE.txt | 82 + .../EXTRACTION-MANIFEST-20261020.json | 270 + .../evidence/FULL-MODE-REVIEW.json | 51 + .../evidence/INDEPENDENT-ALGEBRA.json | 80 + .../evidence/LOCAL-PROOF-REVIEW.json | 30 + .../evidence/LOCAL-PROOF-REVIEW.md | 212 + .../evidence/LOCAL-PROOF.md | 178 + .../evidence/MONOMIAL-SQUARE-PROOF.md | 134 + .../evidence/MONOMIAL-SQUARE-REVIEW.md | 71 + .../evidence/NATIVE-CHECKS.json | 12 + .../evidence/NATIVE-REVIEW.json | 35 + .../evidence/NATIVE-REVIEW.md | 184 + .../evidence/NEGATIVE-WITNESSES.json | 67 + .../evidence/OWNER-BINDING-REVIEW.json | 81 + .../evidence/OWNER-BINDING-REVIEW.md | 134 + .../evidence/OWNER-BINDING-SOURCE.txt | 219 + .../evidence/PACKAGE-REVIEW.json | 38 + .../evidence/PACKAGE-REVIEW.md | 142 + .../evidence/PAIR-CHECKS.json | 49 + .../evidence/PINS-AND-INVOICE.json | 52 + .../evidence/PRE-WRAP-MANIFEST.json | 256 + .../evidence/PRODUCER-COLD-PORTABILITY.json | 26 + .../evidence/PUBLICATION-CHECKS.md | 49 + .../evidence/PUBLICATION-PROVENANCE.json | 127 + .../original-paired-gap/evidence/REPLAY.json | 76 + .../evidence/REVIEWED-PACKAGE-HASHES.json | 153 + .../evidence/ROUTE-REPLACEMENT-CHECK.json | 9 + .../evidence/SUPPLEMENTAL-IO-ADAPTATION.json | 18 + .../evidence/SUPPLEMENTAL-IO-REVIEW.json | 67 + .../evidence/WORKTREE-REPLAY.json | 74 + .../evidence/WRAP-REPLAY.json | 138 + .../evidence/check_negative_witnesses.py | 90 + .../evidence/independent_algebra.py | 170 + .../publication-20261022/COLD-REPLAY.json | 135 + .../INDEPENDENT-CENSUS.json | 125 + .../evidence/publication-20261022/REVIEW.json | 71 + .../evidence/publication-20261022/REVIEW.md | 144 + .../publication-20261022/cold_review.py | 128 + .../independent_census.py | 173 + research/original-paired-gap/notices/LICENSE | 201 + .../research/gauge44-slots-t16/NOTICE.md | 24 + .../gauge44-slots-t16/UPSTREAM-NOTICE.md | 34 + .../gauge44-slots-t16/construction/NOTICE.md | 9 + .../research/gauge44-slots-t16/t16/NOTICE.md | 39 + research/original-paired-gap/replay.py | 97 + research/original-paired-gap/source_data.py | 348 + .../original-paired-gap/verify_algebra.py | 199 + research/original-paired-gap/verify_native.py | 207 + research/original-paired-gap/verify_pair.py | 259 + 61 files changed, 23194 insertions(+) create mode 100644 research/original-paired-gap/MANIFEST.json create mode 100644 research/original-paired-gap/NOTICE.md create mode 100644 research/original-paired-gap/PROOF.md create mode 100644 research/original-paired-gap/PROVENANCE.md create mode 100644 research/original-paired-gap/PUBLICATION.md create mode 100644 research/original-paired-gap/README.md create mode 100644 research/original-paired-gap/SOURCES.json create mode 100644 research/original-paired-gap/data/FULL-MODE-PROGRAMS.json.gz create mode 100644 research/original-paired-gap/data/INPUT-LINES.json create mode 100644 research/original-paired-gap/data/PAIRED-PROGRAMS.json.gz create mode 100644 research/original-paired-gap/evidence/ALGEBRA-CHECKS.json create mode 100644 research/original-paired-gap/evidence/COLD-REPLAY.json create mode 100644 research/original-paired-gap/evidence/COLD-REVIEW-SOURCE.txt create mode 100644 research/original-paired-gap/evidence/EXTRACTION-MANIFEST-20261020.json create mode 100644 research/original-paired-gap/evidence/FULL-MODE-REVIEW.json create mode 100644 research/original-paired-gap/evidence/INDEPENDENT-ALGEBRA.json create mode 100644 research/original-paired-gap/evidence/LOCAL-PROOF-REVIEW.json create mode 100644 research/original-paired-gap/evidence/LOCAL-PROOF-REVIEW.md create mode 100644 research/original-paired-gap/evidence/LOCAL-PROOF.md create mode 100644 research/original-paired-gap/evidence/MONOMIAL-SQUARE-PROOF.md create mode 100644 research/original-paired-gap/evidence/MONOMIAL-SQUARE-REVIEW.md create mode 100644 research/original-paired-gap/evidence/NATIVE-CHECKS.json create mode 100644 research/original-paired-gap/evidence/NATIVE-REVIEW.json create mode 100644 research/original-paired-gap/evidence/NATIVE-REVIEW.md create mode 100644 research/original-paired-gap/evidence/NEGATIVE-WITNESSES.json create mode 100644 research/original-paired-gap/evidence/OWNER-BINDING-REVIEW.json create mode 100644 research/original-paired-gap/evidence/OWNER-BINDING-REVIEW.md create mode 100644 research/original-paired-gap/evidence/OWNER-BINDING-SOURCE.txt create mode 100644 research/original-paired-gap/evidence/PACKAGE-REVIEW.json create mode 100644 research/original-paired-gap/evidence/PACKAGE-REVIEW.md create mode 100644 research/original-paired-gap/evidence/PAIR-CHECKS.json create mode 100644 research/original-paired-gap/evidence/PINS-AND-INVOICE.json create mode 100644 research/original-paired-gap/evidence/PRE-WRAP-MANIFEST.json create mode 100644 research/original-paired-gap/evidence/PRODUCER-COLD-PORTABILITY.json create mode 100644 research/original-paired-gap/evidence/PUBLICATION-CHECKS.md create mode 100644 research/original-paired-gap/evidence/PUBLICATION-PROVENANCE.json create mode 100644 research/original-paired-gap/evidence/REPLAY.json create mode 100644 research/original-paired-gap/evidence/REVIEWED-PACKAGE-HASHES.json create mode 100644 research/original-paired-gap/evidence/ROUTE-REPLACEMENT-CHECK.json create mode 100644 research/original-paired-gap/evidence/SUPPLEMENTAL-IO-ADAPTATION.json create mode 100644 research/original-paired-gap/evidence/SUPPLEMENTAL-IO-REVIEW.json create mode 100644 research/original-paired-gap/evidence/WORKTREE-REPLAY.json create mode 100644 research/original-paired-gap/evidence/WRAP-REPLAY.json create mode 100644 research/original-paired-gap/evidence/check_negative_witnesses.py create mode 100644 research/original-paired-gap/evidence/independent_algebra.py create mode 100644 research/original-paired-gap/evidence/publication-20261022/COLD-REPLAY.json create mode 100644 research/original-paired-gap/evidence/publication-20261022/INDEPENDENT-CENSUS.json create mode 100644 research/original-paired-gap/evidence/publication-20261022/REVIEW.json create mode 100644 research/original-paired-gap/evidence/publication-20261022/REVIEW.md create mode 100644 research/original-paired-gap/evidence/publication-20261022/cold_review.py create mode 100644 research/original-paired-gap/evidence/publication-20261022/independent_census.py create mode 100644 research/original-paired-gap/notices/LICENSE create mode 100644 research/original-paired-gap/notices/research/gauge44-slots-t16/NOTICE.md create mode 100644 research/original-paired-gap/notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md create mode 100644 research/original-paired-gap/notices/research/gauge44-slots-t16/construction/NOTICE.md create mode 100644 research/original-paired-gap/notices/research/gauge44-slots-t16/t16/NOTICE.md create mode 100644 research/original-paired-gap/replay.py create mode 100644 research/original-paired-gap/source_data.py create mode 100644 research/original-paired-gap/verify_algebra.py create mode 100644 research/original-paired-gap/verify_native.py create mode 100644 research/original-paired-gap/verify_pair.py diff --git a/research/original-paired-gap/MANIFEST.json b/research/original-paired-gap/MANIFEST.json new file mode 100644 index 0000000000..b94284bd93 --- /dev/null +++ b/research/original-paired-gap/MANIFEST.json @@ -0,0 +1,310 @@ +{ + "status": "PUBLICATION_EXTRACTION_VERIFIED", + "file_count_excluding_manifest": 60, + "total_bytes_excluding_manifest": 809979, + "manifest_excludes": [ + "MANIFEST.json" + ], + "files": [ + { + "path": "NOTICE.md", + "bytes": 3258, + "sha256": "06ebe05bf4c5abcfa840a9b2bd3b58059b293dd23fc23eb9ca8454a56d1c9e5a" + }, + { + "path": "PROOF.md", + "bytes": 10553, + "sha256": "d71781dad19b6ef4683a49ef67aeba3123486429af75d4432eb3ba650841d2be" + }, + { + "path": "PROVENANCE.md", + "bytes": 1876, + "sha256": "19e6f51ec27b36c2ce41dda7294fdb92da3f1ea8280b2de8622420b4e8c7c183" + }, + { + "path": "PUBLICATION.md", + "bytes": 2546, + "sha256": "835529f7034751a7f88075d4fef7204768d79fdde5744405768edc59eeeb1b79" + }, + { + "path": "README.md", + "bytes": 8790, + "sha256": "3e7b17cbf5d5e1331451edb68378e8473e2f1e39c9b441868ac82f17386691de" + }, + { + "path": "SOURCES.json", + "bytes": 8153, + "sha256": "2ca472d13712383755b7f25794edb810e97401ecfd3fc8b1aa1b68a354b1b581" + }, + { + "path": "data/FULL-MODE-PROGRAMS.json.gz", + "bytes": 213376, + "sha256": "ebc17d1d4c51a9c6b3cb05670d970db3d3e1000f26f1d864cdb27523ce1997dd" + }, + { + "path": "data/INPUT-LINES.json", + "bytes": 269114, + "sha256": "500c09dfc1d27ffd107341adf4c3c6874ee2c84e1a8afad91d931ed9e88fd1d7" + }, + { + "path": "data/PAIRED-PROGRAMS.json.gz", + "bytes": 29886, + "sha256": "ed7702a3fac280238bcaf8af8387d53c59731b8c21c0301f3d84de971027e2d0" + }, + { + "path": "evidence/ALGEBRA-CHECKS.json", + "bytes": 999, + "sha256": "49ed9629670af3825290409ef890e62850d71bec89aba9e3355277ec3303785a" + }, + { + "path": "evidence/COLD-REPLAY.json", + "bytes": 2620, + "sha256": "38eea308b27075bb3c9127e22da2e5da168c366c6c8e33935dea8bd8fe44666d" + }, + { + "path": "evidence/COLD-REVIEW-SOURCE.txt", + "bytes": 4057, + "sha256": "d02b53ddaacd435295899f87c034631fc0ab8670745c115bfbc4c3639f6a8fbe" + }, + { + "path": "evidence/EXTRACTION-MANIFEST-20261020.json", + "bytes": 8690, + "sha256": "a91b8ad2e9f3ac84e7dd7171328ba61794ebb74e00b0a2eacce3e0d419153de4" + }, + { + "path": "evidence/FULL-MODE-REVIEW.json", + "bytes": 1918, + "sha256": "ff123b08b3ac58f20d12d4fbec575472086ace1708d3242519884dbffe534372" + }, + { + "path": "evidence/INDEPENDENT-ALGEBRA.json", + "bytes": 1159, + "sha256": "9d5146ea7a8feb9e3f7a99e613841f793ca7afea2db8caf6ea8895e11fa1cf52" + }, + { + "path": "evidence/LOCAL-PROOF-REVIEW.json", + "bytes": 2156, + "sha256": "4018a1c2080d37b907631d1db0b356d3887294f99f720f6e63c10daf149395e2" + }, + { + "path": "evidence/LOCAL-PROOF-REVIEW.md", + "bytes": 7238, + "sha256": "6d27934ce620cc8b191b0822f955ec05f0679352c2a6f9ac31672085ee52a418" + }, + { + "path": "evidence/LOCAL-PROOF.md", + "bytes": 7037, + "sha256": "dd94a6e2220306aa76da329886921f1efc0420e6064fe9d056bc4c2286e693b3" + }, + { + "path": "evidence/MONOMIAL-SQUARE-PROOF.md", + "bytes": 5755, + "sha256": "300e7b894f8218fe3e17b31f0033daa85f57d5df414ce127d3613e3e705b2fd2" + }, + { + "path": "evidence/MONOMIAL-SQUARE-REVIEW.md", + "bytes": 3106, + "sha256": "53904f2fa0d12943d5639c454ed4598d0a4f3d4f1bc4441118d2576b25e25c68" + }, + { + "path": "evidence/NATIVE-CHECKS.json", + "bytes": 580, + "sha256": "ee369640862c4961be56327cd248599257469fbd090ba3b60814184be2f7f074" + }, + { + "path": "evidence/NATIVE-REVIEW.json", + "bytes": 1701, + "sha256": "e79603bee7c4077b3637f9b7891bac59719183e922a71d5994aaf9d405d5322f" + }, + { + "path": "evidence/NATIVE-REVIEW.md", + "bytes": 7579, + "sha256": "1783100d3333c83828b47bb89f267db54b791f4c4fe952b5a62fbdb5087c902f" + }, + { + "path": "evidence/NEGATIVE-WITNESSES.json", + "bytes": 1677, + "sha256": "1992edbbe31aedf839ccb2cdd37c77e7060018fd65032f34d044afc348808b1c" + }, + { + "path": "evidence/OWNER-BINDING-REVIEW.json", + "bytes": 4038, + "sha256": "11abe070f0fbf483f0afd243411cf861c017b7a6fc0b23c656e3508c3d9e89a4" + }, + { + "path": "evidence/OWNER-BINDING-REVIEW.md", + "bytes": 6392, + "sha256": "a85549bfda224f651f8f26235893e6b61f1f6683f9bc6f84a52ecf5e26782705" + }, + { + "path": "evidence/OWNER-BINDING-SOURCE.txt", + "bytes": 10590, + "sha256": "888852204cef466e051e2e16c84de68db05ab3995ac47c8c15fbf81356613676" + }, + { + "path": "evidence/PACKAGE-REVIEW.json", + "bytes": 2099, + "sha256": "16826ac4784c851b011867d2862ab2a019403445846745fe3fc327476c19de68" + }, + { + "path": "evidence/PACKAGE-REVIEW.md", + "bytes": 7581, + "sha256": "9bf3406f11dd1abe888eed1ce2f1f9f0cb43be5a0963565e22d3dfa160768676" + }, + { + "path": "evidence/PAIR-CHECKS.json", + "bytes": 1602, + "sha256": "89c50c9ece5c209c3f17ed9cea7dfd79715a8ef7c4031603adbc8e1a274f6089" + }, + { + "path": "evidence/PINS-AND-INVOICE.json", + "bytes": 1911, + "sha256": "9bbcf94527b80c8b85c27f008b6d5f46bee89a306061ff2e20dfc4b31efb6e41" + }, + { + "path": "evidence/PRE-WRAP-MANIFEST.json", + "bytes": 8344, + "sha256": "053b6a782e27164290866390ad7bd53370bd1473c270ce40732bcd4fef47f32e" + }, + { + "path": "evidence/PRODUCER-COLD-PORTABILITY.json", + "bytes": 1052, + "sha256": "36915ebf6c298b06f36e6103d78a0a5a5155bbf4546f14a622ee24e414c31b52" + }, + { + "path": "evidence/PUBLICATION-CHECKS.md", + "bytes": 2847, + "sha256": "2e2025650402a59196048ce9687a0c8b8a81895f890a4284361ef9ec7f979d5a" + }, + { + "path": "evidence/PUBLICATION-PROVENANCE.json", + "bytes": 8335, + "sha256": "4349b3033b2d5fb7cab03d799c9a6cec5030f68aa59a06601f5a8b35c7eed110" + }, + { + "path": "evidence/REPLAY.json", + "bytes": 5847, + "sha256": "12481f1fdb5464bd1bcba8950599da05a5ea0994e1e3559157d21423ef254e75" + }, + { + "path": "evidence/REVIEWED-PACKAGE-HASHES.json", + "bytes": 4917, + "sha256": "727b5b524c26ab5b9617fb8cbe259a501e121e6067d6b4ddb533ec6a277dca51" + }, + { + "path": "evidence/ROUTE-REPLACEMENT-CHECK.json", + "bytes": 544, + "sha256": "da9c021e6464616c2908f684c2f7aacf903bc97f68a75a0365860e86da9bbc16" + }, + { + "path": "evidence/SUPPLEMENTAL-IO-ADAPTATION.json", + "bytes": 3392, + "sha256": "7f4a0b9a860e66d67586b3a9bcbe7c4abd2cab6cfe27e7b42c96aa051c680c8e" + }, + { + "path": "evidence/SUPPLEMENTAL-IO-REVIEW.json", + "bytes": 3264, + "sha256": "3316f003b148759b1f629a678be8f8db4a762b53703f34429dd240a2e5b39703" + }, + { + "path": "evidence/WORKTREE-REPLAY.json", + "bytes": 3213, + "sha256": "7472175da0068436b620ac6b2fd61f89cf7addd9cb33e217d0e4e35536695ad0" + }, + { + "path": "evidence/WRAP-REPLAY.json", + "bytes": 7484, + "sha256": "f6a47c1274bf8b2266dabbca2cd62c304a0331638ff1d6be73cb8dde86c76531" + }, + { + "path": "evidence/check_negative_witnesses.py", + "bytes": 4259, + "sha256": "0909b6d246d1aaa7af64e2eac80f5d335042d76ae1daaf2fecdfffc3ad216498" + }, + { + "path": "evidence/independent_algebra.py", + "bytes": 6464, + "sha256": "357f426ecd1e3d0e74f7a768ad992b2738364737e44122fefcee07c623a7e382" + }, + { + "path": "evidence/publication-20261022/COLD-REPLAY.json", + "bytes": 8231, + "sha256": "ef210b883ae9f780d62bca995b4bda3cdd756eb1b335402345e54563a0fb8eac" + }, + { + "path": "evidence/publication-20261022/INDEPENDENT-CENSUS.json", + "bytes": 3652, + "sha256": "5b5e9e99362c61e2a1b70a45aa7867bb75afdb9d836c0c816435191e080acb39" + }, + { + "path": "evidence/publication-20261022/REVIEW.json", + "bytes": 3693, + "sha256": "1d8dbffc971f56d4f0c86022f540efaefcebb6de36e2be7db3e254804112b300" + }, + { + "path": "evidence/publication-20261022/REVIEW.md", + "bytes": 7915, + "sha256": "c4543e2c155f759bd4a3ec9bbc0207d1c8c1e62ee7938311e679f371c8654e24" + }, + { + "path": "evidence/publication-20261022/cold_review.py", + "bytes": 6499, + "sha256": "5d0bab877d47a1fe2172fb26dfa98d77df21370c133b55eeb5168322bf9c9bfb" + }, + { + "path": "evidence/publication-20261022/independent_census.py", + "bytes": 8851, + "sha256": "21d6dda25e3ca06978c36b4b876c5ad59c3f3527ac709a5696876dd1c56edf1f" + }, + { + "path": "notices/LICENSE", + "bytes": 11357, + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4" + }, + { + "path": "notices/research/gauge44-slots-t16/NOTICE.md", + "bytes": 1964, + "sha256": "7a8d17b04da1e6c9d0ec217fb5bda72faa09d9a21695128722dd1e2827870fcf" + }, + { + "path": "notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md", + "bytes": 6406, + "sha256": "a75967ebc34e3bf2ff2c25c08e6c7f1a61b0c0d171cfd1b62196ae2caaf2c610" + }, + { + "path": "notices/research/gauge44-slots-t16/construction/NOTICE.md", + "bytes": 950, + "sha256": "defe7e44af610e25a6c50c1c3b2efd0972d0690574995c0c872fc50eebf4c816" + }, + { + "path": "notices/research/gauge44-slots-t16/t16/NOTICE.md", + "bytes": 2245, + "sha256": "902370e6bfcd39dbea2ece474f15fccbcce3b8e966b2b94066bd03e5174591b5" + }, + { + "path": "replay.py", + "bytes": 4411, + "sha256": "8caab4a35955e8216d6d034786710e2f8a446e315a5481c2eb632bd93760b0b7" + }, + { + "path": "source_data.py", + "bytes": 14947, + "sha256": "d23924511e3aed41e5e64511ca70126a636d91c8aa02e656cb61d6ceca1fe0a0" + }, + { + "path": "verify_algebra.py", + "bytes": 8568, + "sha256": "c40b0e3dd5156584836539d882890dd8d34e68ed057970cba33146ac4137c425" + }, + { + "path": "verify_native.py", + "bytes": 10094, + "sha256": "0efefa821aba316e2557ea9991b878b20a624ec3135c5d58d3960ae95e589bba" + }, + { + "path": "verify_pair.py", + "bytes": 12197, + "sha256": "37807ae4cffdcaf5d13dcd7b8025da1d96251ef626124b670a641e9e471b2d95" + } + ] +} diff --git a/research/original-paired-gap/NOTICE.md b/research/original-paired-gap/NOTICE.md new file mode 100644 index 0000000000..c0c9752a66 --- /dev/null +++ b/research/original-paired-gap/NOTICE.md @@ -0,0 +1,58 @@ +# Source attribution and license + +New research, code, and verification used substantial OpenAI Codex +assistance under the user's direction. Separate agents developed and +reviewed the operator identities, scalar words, native phases, and owner +composition. These are agent reviews. No independent human review is +claimed. New material uses Apache-2.0; the [license](notices/LICENSE) is +retained without changes. + +The original scalar programs and phase data come from the historical +gauge44/t16 lineage at commit +`bce54fb3f895cbe5cd4c0eb477c3afeed100190f`. The following original notices +are retained byte for byte: + +- [Gauge44 notice](notices/research/gauge44-slots-t16/NOTICE.md). +- [Construction notice](notices/research/gauge44-slots-t16/construction/NOTICE.md). +- [T16 integration notice](notices/research/gauge44-slots-t16/t16/NOTICE.md). +- [Complete upstream notice](notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md). + +Those sources credit icekylinx for the source gauge and supplier +pipeline; Hao Yan (@FanPUYen) for t16 construction and integration; +Jeremy Kothe for the retained [PR #799](https://github.com/CrocSwap/integer-mult-bounds/pull/799) +X4 word; Chafik Boukhalfa for the +[PR #741](https://github.com/CrocSwap/integer-mult-bounds/pull/741) frames +and [PR #685](https://github.com/CrocSwap/integer-mult-bounds/pull/685) +owner construction; and Rohan Arun for the +native exact-complex recurrence correction. The retained notices give +the full earlier lineage, licenses, and AI disclosures. This package +does not claim those contributions as new work. + +The loader is unchanged from `research/native-source-codes/source_data.py` +at commit `7649d9ceecec949541bec4bbde5929344166ba59`. The direct route +calculation adapts `research/joint-query/verify_native.py` at commit +`a6e6ad3936f67b8f63b5b68c5e75d540610a65e7`. The earlier example circuits +are not runtime dependencies. + +Within the centre-encoding campaign, history-encoding supplied the +full-mode core, exact sparse replay, and physical phase-gap graphs. +Coherent-port supplied the complementary-gap argument and exact native +review. The coordinating agent supplied the original-complex replica +construction and its monomial-square abstraction. Residual-syndrome +supplied the literal paired packet and proof. Its independent reviewer +checked the operator order, routes, and corrected frame hypotheses. +Encoded-controller supplied the prior arbitrary-mode decoder consequence; +that conditional controller is not an executable dependency here. +Source-domain supplied the separate owner binding, and circuit-interface +reviewed its composition with the local pair. + +The portable pair checker adapts the history and residual-syndrome +replay methods. The native checker adapts the coherent-port independent +review, with the direct original-source route reconstruction described +above. The general checker records the ordered proof identities and +counterexamples. It does not replace the hypotheses by a numerical test. +Exact source paths and hashes are recorded in [SOURCES.json](SOURCES.json). + +The result is a local typed mechanism and an enabling theorem. Full +global closure, a complete supplier, and a kappa improvement are not +claimed. The package does not change the selected frontier. diff --git a/research/original-paired-gap/PROOF.md b/research/original-paired-gap/PROOF.md new file mode 100644 index 0000000000..58ee0bb2d0 --- /dev/null +++ b/research/original-paired-gap/PROOF.md @@ -0,0 +1,271 @@ +# A paired gap from a monomial square + +## General typed theorem + +Let Q be an invertible operator on data fields. Assume that `S=Q^2` +and its inverse have legal monomial implementations with known costs. +Let F_data and F_mode be the productive output operators. Assume + +```text +F_data Q = Q F_data, +F_mode R = R F_data, +F_data K = K F_mode. +``` + +R and K have legal coefficient operations at the stated endpoints. +Assume an admitted raw interface with input frames `(Q,I,I)` and output +frames `(F_data,F_data Q^-1,F_mode)` on `(x,y,u)`. Its two logical maps are + +```text +F_core: x'=x, y'=y+(I-KR)x-Ku, u'=-u-2Rx. +B_core: x'=x-(I+KR)y-8Ku, y'=y, u'=-u-Ry/4. +``` + +The raw words accept arbitrary data, modes, and ordinary borrowed +helpers. They restore each ordinary helper in its stated output frame. +The theorem does not construct such a raw interface for an unspecified Q. + +Use two replicas of this interface in the same chart. Extend Q, F, R, +and K by the replica identity. On the data fields define + +```text +A = [[0,I],[S^-1,0]], A^-1 = [[0,S],[I,0]], +T = Q A = [[0,Q],[Q^-1,0]]. +``` + +Direct multiplication gives + +```text +AQ=QA, T^2=I, SA=A^-1, +Q^-1 S A = S A Q^-1 = T. +``` + +These identities use only invertibility of Q. They do not use `Q^4=I`. +A acts on data fields. It need not act on the centre index, and it must +not move through R or K. F commutes with A because it commutes with Q. + +The F/R/K hypotheses are necessary for the displayed physical protocol. +For example, a physical output operation `u += R X` has logical +coefficient `F_mode^-1 R F_data`. Legal monomial access to R alone does +not identify that coefficient with R. With `Q=I`, F a Hadamard, and +`R=diag(1,-1)`, it is the bit exchange matrix instead. The exact control +in `verify_algebra.py` uses an unnormalized Hadamard and its rational +inverse; the conjugation is the same. A protocol with conjugated output +coefficients requires separate legal access to those coefficients. + +## Ordered forward and backward words + +Start with arbitrary mode content z. Before both forward cores, apply +the physical graph `u -= R A X`. The source is Qx, so the logical +mode input is `u=z-RTx`. After both cores, first apply `u += R X`. +The frame intertwiners give + +```text +v=-z-R(I-T)x, +y_1=y+x+Kv. +``` + +Then apply the physical graph `Y += A K U`. The logical addition is + +```text +(F_data Q^-1)^-1 A K F_mode v = T K v. +``` + +Thus, with `G=R(I-T)` and `H=(I+T)K`, the forward map is + +```text +x'=x, v=-z-Gx, y'=y+x+Hv. +``` + +Its inverse reads `x=x'`, `z=-v-Gx`, and `y=y'-x-Hv`. + +Before both backward cores, apply these physical graphs in this order: + +```text +X -= 8 S A K z, +u -= R Y/8. +``` + +The first graph must read the old mode z. Its logical source change is +`-8Q^-1 SAKz=-8TKz`. The second graph gives `u=z-Ry/8`. Substitution +in the raw backward word gives + +```text +x_1=x-y-8(I+T)Kz, +u_1=-z-Ry/8, +y_1=y. +``` + +After both cores, apply `u += R S A Y/8`. Its logical coefficient is +`R S A Q^-1/8=RT/8`, using the frame intertwiners. Therefore + +```text +x'=x-y-8Hz, y'=y, v=-z-Gy/8. +``` + +Its inverse reads `y=y'`, `z=-v-Gy/8`, and `x=x'+y+8Hz`. +These are algebraic inverses. This proof does not give free native +access to their boundary terms. The forward and backward words are not +claimed to be mutual inverses. + +Only monomial access to S and its inverse is added to the coefficient +graphs. Restore every changed source or target view after its ADD group. +The monomial implementation and its complete cost remain explicit +hypotheses. The theorem permits arbitrary well-typed R and K; it does +not assume they commute with Q or impose a scalar value on RK. + +## All-stage consequence + +Suppose the actual stage charts transport their phases to one global Q, +and hence one global T. For any legal invertible mode gauges N_s, write + +```text +G_s=N_s^-1 R_s(I-T), +H_t=(I+T)K_t N_t. +``` + +For every s and t, + +```text +G_s H_t = N_s^-1 R_s(I-T)(I+T)K_t N_t = 0. +``` + +No relation between the centre images at the two stages is required. +For well-typed mode maps C_i, the residual terms +`M_i=H_(s_i) C_i G_(t_i)` satisfy `M_i M_j=0`. It follows that any +finite ordered product of `I+M_i` equals `I+sum_i M_i`, with inverse +`I-sum_i M_i`. + +An intervening data map B is permitted when it commutes with T; then +`G_s B H_t=0`. An arbitrary port-mixing map need not have this property. +Unrelated stage operators T_s do not give the zero product either. +Equal per-port scalar bank operations on both replicas do commute with +T. This algebraic consequence does not prove that every proposed +controller operation has legal access or satisfies the hypotheses. + +The general test uses ordered words and only adjacent Q inverse +cancellation. The exact example `Q=[[0,1],[i,0]]` has `Q^2=iI`, a unit +monomial, but `Q^4=-I`. It checks the distinction from the native +order-four specialization. The proof above establishes the general +statement; the example alone does not. + +## The fixed original-complex instance + +The original source provides 112 ports, eight centre rows R, and +`K=R^T/4`, with `RR^T=56I`. Each replica has 704 persistent fields. +The mode carriers are + +```text +225, 226, 229, 232, 241, 242, 257, 258. +``` + +The full-mode core is pinned by decompressed SHA-256 +`f271842a741584389e166e700e262f161b0dd570ce8c7a540f2717e90ead5205`. +It has the raw maps above, restores the 472 ordinary helper contents, +and retains the old 5,056 native events. The mode basis changes are +pointwise scalar operations in the common input and output frames. +The exact common-frame lift and complete helper contract are inherited +from the pinned source and full-mode review. The local replay checks +the complete scalar maps, frame ledger, and native-event identity. + +Each original positive line is + +```text +C_p=((1+i)I+(1-i)X_p)/2. +``` + +Its exact square is the translation X_p, with no scalar phase. For +positive tensor depth lambda, take `Q_p=C_p^tensor(lambda)`. Then +`S_p=Q_p^2` translates each tensor coordinate by p and `S_p^-1=S_p`. +The two replicas are paired once at each tensor depth. This is not a +tensor power of a map with two replicas. + +The actual full frame F is a product of commuting line operators, so it +commutes with Q and S. R and K are scalar matrices on field indices and +therefore intertwine the copies of F. The generalized A reduces to +`[[0,I],[S,0]]`. The literal physical graphs are + +| Graph | Replica 0 | Replica 1 | +| --- | --- | --- | +| F input mode | u0 -= R X1 | u1 -= R S X0 | +| F output mode | u0 += R X0 | u1 += R X1 | +| F output target | Y0 += K u1 | Y1 += S K u0 | +| B input target | X0 -= 8 S K z1 | X1 -= 8 K z0 | +| B input mode | u0 -= R Y0/8 | u1 -= R Y1/8 | +| B output mode | u0 += R S Y1/8 | u1 += R Y0/8 | + +Each translated source or target is translated before and after its +ADD group. Both input graphs precede both cores, and both output graphs +follow both cores. The complete wrapper is pinned by decompressed +SHA-256 `42aeb0902d8b2330f9050718c6d949993111a9fd898acad599ec867bb63a2b20`. + +The native checker evaluates all 112 reviewed line recipes on all +512 spatial basis columns, including their scalar phase. The paired +scalar replay uses free ordered port lines with only the relation +`C_p^4=I`; it does not commute different port symbols through R or K. +It checks all 1,408 independent inputs, all helpers, arbitrary modes, +and both inverse orders. Since the exact line relations hold for each +tensor power, the same formal calculation proves every positive depth. + +## Actual routes and matching replicas + +At cover owner d, the port phase is the tensor power of `C_(dp)`. +An actual affine route is + +```text +M(g,delta) f(d,z) = f(dg,z+d delta), gp=p. +``` + +The translated native line at the source owner uses direction `dgp=dp`. +Address translations commute. Thus the complete affine route commutes +with the port phase, including the scalar phase, at every tensor depth. +The same route on both replicas commutes with A and T. + +The source-bound checker reconstructs all nine routes for all 112 ports +from the original DATA-PHASES ledger. It verifies direction fixation, +the exact entry and exit translations, and each route inverse. The +direct reconstruction was also compared with every matrix in the prior +doubled geometry. That geometry is not a runtime dependency. + +This proof requires matching replica views. A diagonal pair of different +views need not commute with the replica exchange. Nor does a common +port map A define a common action on the eight modes. In particular, +no terminal mode transport identity such as `QH=H A^-1` follows here. + +## Cost and construction boundary + +The literal wrapper has 2,688 physical ADDs and 448 translations in +each orientation. Its extra scalar allowances are 25,088 forward and +34,048 backward. Each full-mode core has allowance 204,418, so the +pair totals are 433,924 and 442,884. Two unchanged core profiles have +native rank mass 11,044 and 10,112 native events. There is no added +native child. The replay computes these values from the literal word. + +The actual unit monomial maps have infinity norm one, while +`norm_inf(R)=56` and `norm_inf(K)=1`. The forward prefix has bound +`1+56=57`. Its suffix first updates the mode and then the target, so +the bound is `1+1*(1+56)=58`. The backward bounds are +`max(1+8,1+56/8)=9` and `1+56/8=8`. + +These are wrapper bounds only. The scalar allowance excludes native +child implementation, native wrapper and address-map execution, +owner access, mode histories, displaced-owner backfills, the final +decoder, storage, precision, and recursive assembly. General monomial +implementations have their own costs and norms. + +The local theorem assumes a legal pair schedule. A separate accepted +owner result is included as archival applicability evidence. The replay +does not rerun that schedule or its one-shot histories. Complete-cover +sweeps, protected active roles, and restored ordinary helper jobs are +required for that composition. The local `(I,F)` mode endpoint does +not by itself give a persistent nine-call mode path. + +All-stage annihilation removes a feedback obstruction. It does not +implement the final odd-phase H/G operations, restore every arbitrary +mode in a complete controller, or give a complete supplier. Full global +closure remains unproved, and there is no kappa change. + +The [general source proof](evidence/MONOMIAL-SQUARE-PROOF.md), its +[independent review](evidence/MONOMIAL-SQUARE-REVIEW.md), and the +[native review](evidence/NATIVE-REVIEW.md) state the inherited premises. +Source credit and substantial AI assistance are recorded in [NOTICE.md](NOTICE.md). diff --git a/research/original-paired-gap/PROVENANCE.md b/research/original-paired-gap/PROVENANCE.md new file mode 100644 index 0000000000..dfc86440f7 --- /dev/null +++ b/research/original-paired-gap/PROVENANCE.md @@ -0,0 +1,34 @@ +# Publication extraction + +This package copies the reviewed local paired-gap package. The source +manifest is retained as `evidence/PRE-WRAP-MANIFEST.json`. It binds the +50 files that were prepared before the publication hold. All proof, +program, source, notice, and review files from that package are unchanged. +The package had no published PR when this extraction started. + +The current README already states that the independent portable review +passed. No stale review claim or publication hold required a text change. +The new `MANIFEST.json` covers this extraction and its added provenance. +Historical manifests and receipts keep their original bytes. + +The historical source commit remains +`bce54fb3f895cbe5cd4c0eb477c3afeed100190f`. The result is a local native +construction and a typed operator theorem. It gives no complete supplier +or kappa improvement. Its physical decoder access, global mode closure, +finite implementation cost, and recursive admission remain open. + +The publication audit read the full proof, source loader, replay driver, +and independent portable review. It ran the optimized isolated replay +again, plus the independent rectangular algebra example and the actual +Fourier-character mutation witnesses. The new receipt records each +command and compares the mathematical output bytes with the old receipts. +It does not replace the earlier cold package review. + +The audit also checked the live list of the author's PRs. The related +Walsh lift, native source codes, and joint query transfers are already +published in PRs 1719, 1862, and 1969. This package retains their distinct +roles and source credit. It does not submit those results again. + +This extraction and review used OpenAI Codex under the user's direction. +The independent reviews are agent reviews. No human review is claimed. +The source notices and Apache-2.0 license remain in this package. diff --git a/research/original-paired-gap/PUBLICATION.md b/research/original-paired-gap/PUBLICATION.md new file mode 100644 index 0000000000..12ef1af87c --- /dev/null +++ b/research/original-paired-gap/PUBLICATION.md @@ -0,0 +1,46 @@ +# Publication status on 22 October 2026 + +This package gives a local construction for the historical gauge44/t16 +interface pinned in SOURCES.json. The proof and executable source pins +have not changed. The fresh publication branch starts from canonical +main at `b58ad9ef4d4e861b0eaa5dba41742bdc072dca51`. + +At that main commit, the selected result is the conditional joint-helper +construction from [PR #4470](https://github.com/CrocSwap/integer-mult-bounds/pull/4470), +with kappa `60403/20000000`. See its +[selected record](https://github.com/CrocSwap/integer-mult-bounds/blob/b58ad9ef4d4e861b0eaa5dba41742bdc072dca51/certificates/selected-result.json) +and [review](https://github.com/CrocSwap/integer-mult-bounds/blob/b58ad9ef4d4e861b0eaa5dba41742bdc072dca51/docs/research/pr-intake-evidence/pr4470/PROOF-REVIEW.md). +This package does not prove that its historical local interface can +replace a call in that changed construction. It does not change the +selected record or establish a kappa improvement. + +## Related current work + +[PR #4694](https://github.com/CrocSwap/integer-mult-bounds/pull/4694) +constructs a retained-centre interface on a newer 640-field source. +[PR #4698](https://github.com/CrocSwap/integer-mult-bounds/pull/4698) +gives a helper basis for that interface and a conditional homogeneous +two-call consumer. Those are related contributions, not consumed +dependencies. This package supplies a different two-replica construction +on the pinned 704-field source. Its general monomial-square theorem does +not assume that Q has order four. No priority claim is made for elementary +block identities or for retaining arbitrary centre contents. + +## Verification boundary + +The fresh independent publication review uses a separate AI agent and +a minimal Git source store. It repeats the portable replay, the +rectangular algebra example, and the actual Fourier-character failure +controls. It also counts the literal word and evaluates the six mutation +witnesses with a separate implementation. See +`evidence/publication-20261022/REVIEW.md` and its receipt. + +The historical owner schedule remains separate applicability evidence. +The fresh local review does not rerun that schedule, every inherited +native kernel, the full supplier, or the selected kappa calculation. +No independent human review is claimed. + +The original structural research objective remains unresolved. The +campaign is closing with publication of its bounded results. The open +questions in README.md describe unresolved obligations; they do not +claim a completed supplier. diff --git a/research/original-paired-gap/README.md b/research/original-paired-gap/README.md new file mode 100644 index 0000000000..5ffacb2375 --- /dev/null +++ b/research/original-paired-gap/README.md @@ -0,0 +1,182 @@ +# Paired gaps in the original complex frames + +Two replicas of the actual local interface can carry centre information +through an exact involution. The extra operations are scalar ADDs and +translations. The pair needs no added native child and no Walsh change +of frame. Its query and injection factors have zero product at every +pair of stages. + +The general theorem applies when an invertible phase Q has legal +monomial square and inverse-square access. It does not assume `Q^4=I`. +It requires the stated raw interface, common productive frames, and +the R/K frame intertwiners. The fixed native instance uses the original +complex identity `C_p^2=X_p`, including its scalar phase. + +Read the [proof](PROOF.md), [literal paired packet](data/PAIRED-PROGRAMS.json.gz), +[independent native review](evidence/NATIVE-REVIEW.md), and +[source pins](SOURCES.json). The lane proofs and native packet have +separate-agent review. The [independent portable package review](evidence/PACKAGE-REVIEW.md) +passed with no material finding. These are AI-agent reviews, not independent +human reviews. + +This is a local construction and an enabling theorem. Full global +closure remains unproved. The package gives no complete supplier or +kappa improvement. In particular, the zero product does not make final +odd-phase H/G reads or injections free. + +The [publication update](PUBLICATION.md) records the 22 October source +refresh and cold review. This package uses a historical supplier; admission +to the newer selected joint-helper construction has not been proved. + +## Local contract + +Each replica has 112 X fields, 112 Y fields, eight arbitrary mode fields, +and 472 ordinary borrowed helpers. The input frames are `(Q,I,I)` for +`(X,Y,u)`; the output frames are `(F,FQ^-1,F)`. The two replicas have +the same chart and stage. Their active data and mode roles are separate. +Ordinary helpers can share a physical owner only under a complete +restored-job and consecutive-frame schedule proof. + +With `T=[[0,Q],[Q^-1,0]]`, set `G=R(I-T)` and `H=(I+T)K`. The maps are + +```text +Forward: x'=x, v=-z-Gx, y'=y+x+Hv. +Backward: x'=x-y-8Hz, v=-z-Gy/8, y'=y. +``` + +The 16 mode inputs z are arbitrary. Their outputs v are part of the +contract. All 944 ordinary helper contents are restored in their +specified output frames. The cores do not refer to private centre fields; +those fields are preserved by non-use. The pair has 1,408 persistent +input coordinates. It does not require an extra replica or a second +private core workspace. + +The factors at any stages s and t satisfy `G_s H_t=0`. This does not +require equal centre row spaces or commuting R/K through the phase. +The two local maps have explicit inverses. They are not stated to be +inverses of each other. Their inverses in the proof are algebraic maps; +native boundary access for those inverses remains a separate question. + +## Reproduce + +Use Python 3.10 or later, the standard library, and Git. The repository +must contain commit `bce54fb3f895cbe5cd4c0eb477c3afeed100190f` and its +historical1042 source archive. No network or third-party package is +needed. Run one process from the repository root: + +```sh +python3 -I -O -B research/original-paired-gap/replay.py --repo . --out /tmp/original-paired-gap +``` + +The command writes only to the explicit output directory, which must be +outside this package. Expected output: + +```text +PASS_EXACT_ORIGINAL_PAIRED_MAPS +PASS_ORIGINAL_PAIRED_NATIVE_COMPONENTS +PASS_GENERAL_MONOMIAL_SQUARE_IDENTITIES +PASS_PORTABLE_ORIGINAL_PAIRED_GAP +``` + +It writes `PAIR-CHECKS.json`, `NATIVE-CHECKS.json`, `ALGEBRA-CHECKS.json`, +and `REPLAY.json`. The last receipt binds the source blobs, code bytes, +and the other three output hashes. The check uses explicit failures; +Python assertions are disabled in the command above. + +The replay checks both cores on all 704 input columns and both paired +words on all 1,408 columns. It checks arbitrary helper and mode inputs, +private non-use, both algebraic inverse orders, chronological frame +records, all 10,112 retained native events per pair, and literal costs. +It checks all 57,344 positive line columns and all 1,008 actual affine +routes. The general operator check uses inverse cancellation for Q; +it does not reduce Q powers modulo four. + +Controls reject a missing basis output, missing input graphs, omitted +translations, a changed backward old-mode read, an early forward target +update, an incorrect native scalar phase, a wrong owner direction, +unrelated stage phases, incompatible replica views, and an unrestricted +data bridge. The general check also exhibits the failure caused by a +missing productive-frame intertwiner and a case with `Q^4=-I`. + +The old core native kernels and complete helper interface are inherited +from pinned source evidence. The replay checks their unchanged event +streams and local scalar frames; it does not repeat every old native +kernel calculation. The fixed local phase identities extend to every +positive tensor depth by exact tensoring and owner covariance, as proved +in PROOF.md. Finite column counts alone are not the all-depth proof. + +## Local cost + +| Per pair | Forward | Backward | +| --- | ---: | ---: | +| Extra physical ADDs | 2,688 | 2,688 | +| Extra literal translations | 448 | 448 | +| Added real scalar allowance | 25,088 | 34,048 | +| Complete explicit scalar allowance | 433,924 | 442,884 | +| Retained native events | 10,112 | 10,112 | +| Retained native rank mass | 11,044 | 11,044 | +| Added native children | 0 | 0 | + +Each retained core has scalar allowance 204,418 and native rank mass +5,522. The complete scalar entries include both cores and all added ADDs. +They exclude native child implementation, native wrapper and address-map +execution, owner access, mode preparation and completion, displaced-owner +backfills, the final decoder, storage, precision, and recursive assembly. +A translation count is not a unit-cost real-primitive bill. + +For the actual unit-modulus wrapper, the prefix/suffix infinity-norm +bounds are 57/58 forward and 9/8 backward. These bounds cover only the +added wrapper. They do not bound the core, recursive children, complete +controller, or supplier precision. All added scalar coefficients are +dyadic. + +## Owner applicability and open work + +The separate [owner composition review](evidence/OWNER-BINDING-REVIEW.md) +accepts a schedule for 72 same-stage pairs with a 280-slot owner patch, +fresh one-shot modes, and explicit displaced-owner backfills. The +[source proof](evidence/OWNER-BINDING-SOURCE.txt) is retained byte for byte +as an archival text file. Its path references refer to the source +campaign. Its exact producer and receipt pins are in the review. + +That result supplies a conditional owner and endpoint schedule. It is +not a full emitted global word. The local replay does not re-run the +owner patch, one-shot histories, or their child invoice. These are +separate applicability evidence, not hidden runtime inputs. Its +candidate productive stock remains conditional on content repair. + +The remaining construction work includes legal final H/G access, +arbitrary-mode restoration in the complete controller, a complete +global word, the finite scalar and address bill, precision, and recursive +supplier admission. Neither a complete kappa calculation nor the +repository-wide test suite is run by this package. + +## Open next questions + +1. How can one complete physical H/G boundary operation be implemented? + The zero feedback theorem does not provide that access. First emit and + price one read or injection at the stated native endpoint, with arbitrary + mode contents and exact phases. The blockers are unresolved native + endpoint access and its complete cost. +2. Can a complete paired supplier be constructed and priced? Local pairing + and the owner schedule do not establish that result. Start from the + separately reviewed owner schedule. Emit and price the complete mode + histories, backfills, and decoder, then check recursive admission. + Arbitrary-mode restoration, complete scalar and address costs, and + precision remain blockers. + +## Source and credit + +The historical source archive is read from immutable Git objects. The +source loader is unchanged from +[PR #1862](https://github.com/CrocSwap/integer-mult-bounds/pull/1862) at +commit `7649d9ceecec949541bec4bbde5929344166ba59`. The actual route +reconstruction adapts the calculation in +[PR #1969](https://github.com/CrocSwap/integer-mult-bounds/pull/1969) at +commit `a6e6ad3936f67b8f63b5b68c5e75d540610a65e7`. Their example circuits +are not runtime dependencies. + +The [notice](NOTICE.md) records the raw-core, graph, theorem, review, and +source lineage. It preserves the original contributor and license +notices and discloses substantial OpenAI Codex assistance. The package +does not change the selected frontier. diff --git a/research/original-paired-gap/SOURCES.json b/research/original-paired-gap/SOURCES.json new file mode 100644 index 0000000000..dbef0b58a2 --- /dev/null +++ b/research/original-paired-gap/SOURCES.json @@ -0,0 +1,209 @@ +{ + "checker_methods": [ + { + "file": "verify_pair.py", + "method": "Exact sparse core replay and ordered port-line replay; independent algebraic inverse checks added", + "source": "lanes/residual-syndrome/physical-algebra/emit_original_paired_gap.py" + }, + { + "file": "verify_native.py", + "method": "Literal wrapper groups and exact native line columns; original-source route reconstruction from PR1969", + "source": "lanes/coherent-port/review_original_paired_gap_native.py", + "source_sha256": "e79e104b2497e80427c2040c940942e9654c24e4736b981ec11f09eafb768f95" + }, + { + "file": "verify_algebra.py", + "method": "Ordered identities with Q inverse cancellation, frame counterexample, and non-order-four unit monomial example", + "source": "evidence/MONOMIAL-SQUARE-PROOF.md" + } + ], + "copied_files": [ + { + "bytes": 14947, + "file": "source_data.py", + "runtime": true, + "sha256": "d23924511e3aed41e5e64511ca70126a636d91c8aa02e656cb61d6ceca1fe0a0", + "source": "publication/joint-query-package/source_data.py", + "unchanged": true + }, + { + "bytes": 29886, + "file": "data/PAIRED-PROGRAMS.json.gz", + "runtime": true, + "sha256": "ed7702a3fac280238bcaf8af8387d53c59731b8c21c0301f3d84de971027e2d0", + "source": "lanes/residual-syndrome/physical-algebra/ORIGINAL-PAIRED-GAP-PROGRAMS.json.gz", + "unchanged": true + }, + { + "bytes": 213376, + "file": "data/FULL-MODE-PROGRAMS.json.gz", + "runtime": true, + "sha256": "ebc17d1d4c51a9c6b3cb05670d970db3d3e1000f26f1d864cdb27523ce1997dd", + "source": "lanes/history-encoding/FULL-MODE-PROGRAMS.json.gz", + "unchanged": true + }, + { + "bytes": 269114, + "file": "data/INPUT-LINES.json", + "runtime": true, + "sha256": "500c09dfc1d27ffd107341adf4c3c6874ee2c84e1a8afad91d931ed9e88fd1d7", + "source": "lanes/coherent-port/INPUT-COMPENSATION.json", + "unchanged": true + }, + { + "bytes": 5755, + "file": "evidence/MONOMIAL-SQUARE-PROOF.md", + "runtime": false, + "sha256": "300e7b894f8218fe3e17b31f0033daa85f57d5df414ce127d3613e3e705b2fd2", + "source": "lanes/residual-syndrome/physical-algebra/MONOMIAL-SQUARE-GAP.md", + "unchanged": true + }, + { + "bytes": 3106, + "file": "evidence/MONOMIAL-SQUARE-REVIEW.md", + "runtime": false, + "sha256": "53904f2fa0d12943d5639c454ed4598d0a4f3d4f1bc4441118d2576b25e25c68", + "source": "lanes/residual-syndrome/physical-algebra/review-gauss/original-paired-gap/MONOMIAL-SQUARE-REVIEW.md", + "unchanged": true + }, + { + "bytes": 7037, + "file": "evidence/LOCAL-PROOF.md", + "runtime": false, + "sha256": "dd94a6e2220306aa76da329886921f1efc0420e6064fe9d056bc4c2286e693b3", + "source": "lanes/residual-syndrome/physical-algebra/ORIGINAL-PAIRED-GAP.md", + "unchanged": true + }, + { + "bytes": 7238, + "file": "evidence/LOCAL-PROOF-REVIEW.md", + "runtime": false, + "sha256": "6d27934ce620cc8b191b0822f955ec05f0679352c2a6f9ac31672085ee52a418", + "source": "lanes/residual-syndrome/physical-algebra/review-gauss/original-paired-gap/REVIEW.md", + "unchanged": true + }, + { + "bytes": 2156, + "file": "evidence/LOCAL-PROOF-REVIEW.json", + "runtime": false, + "sha256": "4018a1c2080d37b907631d1db0b356d3887294f99f720f6e63c10daf149395e2", + "source": "lanes/residual-syndrome/physical-algebra/review-gauss/original-paired-gap/REVIEW.json", + "unchanged": true + }, + { + "bytes": 7579, + "file": "evidence/NATIVE-REVIEW.md", + "runtime": false, + "sha256": "1783100d3333c83828b47bb89f267db54b791f4c4fe952b5a62fbdb5087c902f", + "source": "lanes/coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md", + "unchanged": true + }, + { + "bytes": 1701, + "file": "evidence/NATIVE-REVIEW.json", + "runtime": false, + "sha256": "e79603bee7c4077b3637f9b7891bac59719183e922a71d5994aaf9d405d5322f", + "source": "lanes/coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.json", + "unchanged": true + }, + { + "bytes": 1918, + "file": "evidence/FULL-MODE-REVIEW.json", + "runtime": false, + "sha256": "ff123b08b3ac58f20d12d4fbec575472086ace1708d3242519884dbffe534372", + "source": "lanes/interface-proof/FULL-MODE-PORT-REVIEW.json", + "unchanged": true + }, + { + "bytes": 10590, + "file": "evidence/OWNER-BINDING-SOURCE.txt", + "runtime": false, + "sha256": "888852204cef466e051e2e16c84de68db05ab3995ac47c8c15fbf81356613676", + "source": "lanes/source-domain/paired-original/PROOF.md", + "unchanged": true + }, + { + "bytes": 6392, + "file": "evidence/OWNER-BINDING-REVIEW.md", + "runtime": false, + "sha256": "a85549bfda224f651f8f26235893e6b61f1f6683f9bc6f84a52ecf5e26782705", + "source": "lanes/circuit-interface/paired-original-review/REVIEW.md", + "unchanged": true + }, + { + "bytes": 4038, + "file": "evidence/OWNER-BINDING-REVIEW.json", + "runtime": false, + "sha256": "11abe070f0fbf483f0afd243411cf861c017b7a6fc0b23c656e3508c3d9e89a4", + "source": "lanes/circuit-interface/paired-original-review/REVIEW.json", + "unchanged": true + }, + { + "bytes": 1964, + "file": "notices/research/gauge44-slots-t16/NOTICE.md", + "runtime": false, + "sha256": "7a8d17b04da1e6c9d0ec217fb5bda72faa09d9a21695128722dd1e2827870fcf", + "source_commit": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f", + "source_path": "research/gauge44-slots-t16/NOTICE.md", + "unchanged": true + }, + { + "bytes": 950, + "file": "notices/research/gauge44-slots-t16/construction/NOTICE.md", + "runtime": false, + "sha256": "defe7e44af610e25a6c50c1c3b2efd0972d0690574995c0c872fc50eebf4c816", + "source_commit": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f", + "source_path": "research/gauge44-slots-t16/construction/NOTICE.md", + "unchanged": true + }, + { + "bytes": 2245, + "file": "notices/research/gauge44-slots-t16/t16/NOTICE.md", + "runtime": false, + "sha256": "902370e6bfcd39dbea2ece474f15fccbcce3b8e966b2b94066bd03e5174591b5", + "source_commit": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f", + "source_path": "research/gauge44-slots-t16/t16/NOTICE.md", + "unchanged": true + }, + { + "bytes": 6406, + "file": "notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md", + "runtime": false, + "sha256": "a75967ebc34e3bf2ff2c25c08e6c7f1a61b0c0d171cfd1b62196ae2caaf2c610", + "source_commit": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f", + "source_path": "research/gauge44-slots-t16/UPSTREAM-NOTICE.md", + "unchanged": true + }, + { + "bytes": 11357, + "file": "notices/LICENSE", + "runtime": false, + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "source_commit": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f", + "source_path": "LICENSE", + "unchanged": true + }, + { + "bytes": 544, + "file": "evidence/ROUTE-REPLACEMENT-CHECK.json", + "runtime": false, + "sha256": "da9c021e6464616c2908f684c2f7aacf903bc97f68a75a0365860e86da9bbc16", + "source": "Portable comparison of direct original routes with the pinned doubled geometry", + "unchanged": true + } + ], + "historical_base": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f", + "loader_origin": { + "also_present_at": "a6e6ad3936f67b8f63b5b68c5e75d540610a65e7", + "also_present_path": "research/joint-query/source_data.py", + "commit": "7649d9ceecec949541bec4bbde5929344166ba59", + "path": "research/native-source-codes/source_data.py" + }, + "route_method_origin": { + "adapted_scope": "Actual bases, stage matrices, and original entry/exit translations only", + "commit": "a6e6ad3936f67b8f63b5b68c5e75d540610a65e7", + "path": "research/joint-query/verify_native.py" + }, + "scope": "Local typed pair and all-stage annihilation; owner evidence is a separate inherited applicability result; no complete supplier or kappa change", + "status": "PINNED_LOCAL_SOURCE_INPUTS" +} diff --git a/research/original-paired-gap/data/FULL-MODE-PROGRAMS.json.gz b/research/original-paired-gap/data/FULL-MODE-PROGRAMS.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..d53ce4b3cf1b345be6b05e76dea4efbac38b37da GIT binary patch literal 213376 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 z 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 z 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

ycFUuOnN8sFRYLR!CbE<{+!9z>hFh}ICFsLQ zs|^=@B+<&e9AyC<$v(EQ0od28SF8^!l4uDm>@8NCpbsm8>opsS=q8Dlz=Bt|2HcpR zEXj<|7h)iu}6xt*NnMw#Ur9fdSfx>U_>k%s!ZHn!^9@BEki#vta+h#0zD$dDIElIQjUPl<=6db!9W!2i2L`&cyjBt15E6xTZJko}HlnwX9J(Tk(5|5?u z5SsM8ju}6&XmmI_%HilJhod8%caC!2Iq{r!oG<#cqU1J6+oJSXliTp?&z zJj$+klwI*C8{LT;3?JfDTnO40kFqTuWvBZM?xiSTorkJ#{H}^Irb>u7DQ*R8Mvjh4_=&ld} zMjgtK zCi##M!1-Y+fR7+~Nu;-i2B-djE{g0W7}P6x!lJEe=pzgg1zUl47Y5lC{n^maRY8M$ z69+FzBU?i&i=6~T5BRk|V$rV+lA}wNWSfL8${?piTM{jJG;%!@z>0}Vlh+OAydSAc7)*rbGZu+0>hmcMwL{6|f25 z(*$)`(a@&M;*ln13&!`lhv2kLLk|Vr1bcdYQsAPehF%I9e1hoLeE}DJH1tu>TUa)) z3w>;@=r*D^Wk+w)j;`Do^rmdmP1>ZD%ZRRAM)W3p!|6@mHoizRTMPIh70Ja&~A$8p@;^r2m+5GNZv&NFKLA2 zDk8{M^sxo-YmdgPzxRK`vb#XU6!1`V{k{ET){5=fl)zhI{kki_tiknD5G{aTH@28{ zH^rXNwRB)|B=l4U*(BPE=qk7;l7n>rs;1eJgUM2 zoWY(RV6Qi2>CUm0>kx3ZycX+z(_r}Ut`qVQPC2n8qkx}oQj*d+t$P0@#>>Mp5TS&ZZoBJfa5 X4}50{lHE@K{Qv%ceO4Pd`}CAD-(N=OMv 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 BbU^?B literal 0 HcmV?d00001 diff --git a/research/original-paired-gap/evidence/ALGEBRA-CHECKS.json b/research/original-paired-gap/evidence/ALGEBRA-CHECKS.json new file mode 100644 index 0000000000..0e98cb6f69 --- /dev/null +++ b/research/original-paired-gap/evidence/ALGEBRA-CHECKS.json @@ -0,0 +1,29 @@ +{ + "assumed_line_relation": "Q inverse cancellation only; no Q^4 relation", + "both_ordered_local_maps_and_inverse_orders": "PASS", + "general_hypotheses": [ + "Admitted raw interface and helper contract", + "Legal Q^2 and Q^-2 monomial access", + "F Q = Q F", + "F_mode R = R F_data and F_data K = K F_mode", + "One transported global T for all stages" + ], + "negative_controls": [ + "wrong backward old-mode order", + "S used in place of S inverse", + "Q fourth power need not be identity", + "missing productive-frame intertwiner", + "unrelated stage phases", + "distinct replica views", + "unrestricted intervening bridge" + ], + "scope": "Exact identities and counterexamples support the proof; no arbitrary-Q native core is constructed", + "stage_pairs": 81, + "status": "PASS_GENERAL_MONOMIAL_SQUARE_IDENTITIES", + "wrapper_infinity_norm_bounds": { + "backward_prefix": "9", + "backward_suffix": "8", + "forward_prefix": "57", + "forward_suffix": "58" + } +} diff --git a/research/original-paired-gap/evidence/COLD-REPLAY.json b/research/original-paired-gap/evidence/COLD-REPLAY.json new file mode 100644 index 0000000000..3ce569eb6b --- /dev/null +++ b/research/original-paired-gap/evidence/COLD-REPLAY.json @@ -0,0 +1,67 @@ +{ + "cold_root": "/private/tmp/paired-independent-bla2kyh7", + "command": [ + "/opt/homebrew/opt/python@3.14/bin/python3.14", + "-I", + "-O", + "-B", + "/private/tmp/paired-independent-bla2kyh7/package/replay.py", + "--repo", + "/private/tmp/paired-independent-bla2kyh7/source.git", + "--out", + "/private/tmp/paired-independent-bla2kyh7/outputs" + ], + "declared_bytes": 673318, + "declared_files": 29, + "elapsed_seconds": 6.536268374999054, + "git_objects": { + "2f7d5f18fc6a4d613351fefa46c377420bf38250": { + "bytes": 460, + "source": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f:research/.gitattributes", + "type": "blob" + }, + "38a158579145e2003db8d22fbf4af5a1bf9571a0": { + "bytes": 919, + "source": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f:", + "type": "tree" + }, + "45b16a3cee87668409b4fd2ff5fec39e419caea9": { + "bytes": 19474, + "source": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f:research", + "type": "tree" + }, + "6f4dc6fe7631d8aacf8081fcaecf32197181685b": { + "bytes": 19299540, + "source": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f:research/community-frontier1042-audit/selected-replay.tar.gz", + "type": "blob" + }, + "bad91d91760fed742536a3c5d4618c5dae6b74a7": { + "bytes": 7825, + "source": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f:.gitattributes", + "type": "blob" + }, + "bce54fb3f895cbe5cd4c0eb477c3afeed100190f": { + "bytes": 308, + "source": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f", + "type": "commit" + }, + "fbabd8c1252d92c121724cf0ea1de6979ab3e0d8": { + "bytes": 357, + "source": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f:research/community-frontier1042-audit", + "type": "tree" + } + }, + "object_database_alternates": false, + "output_sha256": { + "ALGEBRA-CHECKS.json": "49ed9629670af3825290409ef890e62850d71bec89aba9e3355277ec3303785a", + "NATIVE-CHECKS.json": "ee369640862c4961be56327cd248599257469fbd090ba3b60814184be2f7f074", + "PAIR-CHECKS.json": "89c50c9ece5c209c3f17ed9cea7dfd79715a8ef7c4031603adbc8e1a274f6089", + "REPLAY.json": "12481f1fdb5464bd1bcba8950599da05a5ea0994e1e3559157d21423ef254e75" + }, + "package_manifest_sha256": "727b5b524c26ab5b9617fb8cbe259a501e121e6067d6b4ddb533ec6a277dca51", + "returncode": 0, + "scope": "Only declared package files and seven exact Git objects; no private module import", + "status": "PASS_INDEPENDENT_COLD_PACKAGE", + "stderr": "", + "stdout": "PASS_EXACT_ORIGINAL_PAIRED_MAPS\nPASS_ORIGINAL_PAIRED_NATIVE_COMPONENTS\nPASS_GENERAL_MONOMIAL_SQUARE_IDENTITIES\nPASS_PORTABLE_ORIGINAL_PAIRED_GAP\n" +} diff --git a/research/original-paired-gap/evidence/COLD-REVIEW-SOURCE.txt b/research/original-paired-gap/evidence/COLD-REVIEW-SOURCE.txt new file mode 100644 index 0000000000..2f7382248f --- /dev/null +++ b/research/original-paired-gap/evidence/COLD-REVIEW-SOURCE.txt @@ -0,0 +1,82 @@ +"""Copy only declared package files and the exact required Git objects.""" + +from hashlib import sha256 +from pathlib import Path +import json +import os +import subprocess +import sys +import tempfile +import time + + +REPO = Path('/Users/aliromman/Projects/IntegerMultiplicationBounds') +PACKAGE = REPO / 'work/centre-encoding-campaign-20261014/publication/original-paired-gap-package' +HERE = Path(__file__).resolve().parent +BASE = 'bce54fb3f895cbe5cd4c0eb477c3afeed100190f' +ARCHIVE = 'research/community-frontier1042-audit/selected-replay.tar.gz' +MANIFEST_PIN = '727b5b524c26ab5b9617fb8cbe259a501e121e6067d6b4ddb533ec6a277dca51' + + +def need(value, message): + if not value: + raise ValueError(message) + + +def command(args, cwd=REPO, data=None): + return subprocess.check_output(args, cwd=cwd, input=data) + + +manifest_raw = (PACKAGE / 'PACKAGE-HASHES.json').read_bytes() +need(sha256(manifest_raw).hexdigest() == MANIFEST_PIN, 'Frozen package manifest') +manifest = json.loads(manifest_raw) +cold = Path(tempfile.mkdtemp(prefix='paired-independent-', dir='/private/tmp')) +copy = cold / 'package' +copy.mkdir() +for item in manifest['files']: + path = item['path'] + raw = (PACKAGE / path).read_bytes() + need(len(raw) == item['bytes'] and sha256(raw).hexdigest() == item['sha256'], path) + target = copy / path + target.parent.mkdir(parents=True, exist_ok=True) + target.write_bytes(raw) +need(len(list(path for path in copy.rglob('*') if path.is_file())) == 29, 'Only 29 declared files') + +bare = cold / 'source.git' +subprocess.run(['git', 'init', '--bare', '--quiet', str(bare)], check=True) +objects = {} +specs = [BASE + ':.gitattributes', BASE + ':research/.gitattributes', BASE] +parts = ARCHIVE.split('/') +specs += [BASE + ':' + '/'.join(parts[:n]) for n in range(len(parts) + 1)] +for spec in specs: + oid = command(['git', 'rev-parse', spec]).decode().strip() + kind = command(['git', 'cat-file', '-t', oid]).decode().strip() + raw = command(['git', 'cat-file', kind, oid]) + actual = command(['git', 'hash-object', '-w', '-t', kind, '--stdin'], bare, raw).decode().strip() + need(actual == oid, 'Exact Git object transfer') + objects[oid] = {'type': kind, 'bytes': len(raw), 'source': spec} +need(not (bare / 'objects/info/alternates').exists(), 'No alternate object database') +need(command(['git', 'show', BASE + ':' + ARCHIVE], bare) + == command(['git', 'show', BASE + ':' + ARCHIVE]), 'Exact standalone archive blob') + +env = {key: value for key, value in os.environ.items() + if not key.startswith(('PYTHON', 'GIT_', 'OMP_', 'OPENBLAS_', 'MKL_'))} +env.update({'OMP_NUM_THREADS': '1', 'OPENBLAS_NUM_THREADS': '1', 'MKL_NUM_THREADS': '1'}) +args = [sys.executable, '-I', '-O', '-B', str(copy / 'replay.py'), + '--repo', str(bare), '--out', str(cold / 'outputs')] +started = time.monotonic() +result = subprocess.run(args, cwd=cold, env=env, capture_output=True, text=True) +elapsed = time.monotonic() - started +need(result.returncode == 0, 'Cold replay: ' + result.stderr) +expected = ('PASS_EXACT_ORIGINAL_PAIRED_MAPS\nPASS_ORIGINAL_PAIRED_NATIVE_COMPONENTS\n' + 'PASS_GENERAL_MONOMIAL_SQUARE_IDENTITIES\nPASS_PORTABLE_ORIGINAL_PAIRED_GAP\n') +need(result.stdout == expected, 'Exact documented output') +hashes = {path.name: sha256(path.read_bytes()).hexdigest() for path in (cold / 'outputs').iterdir()} +receipt = {'status': 'PASS_INDEPENDENT_COLD_PACKAGE', 'package_manifest_sha256': MANIFEST_PIN, + 'declared_files': len(manifest['files']), 'declared_bytes': manifest['total_bytes'], + 'cold_root': str(cold), 'git_objects': objects, 'object_database_alternates': False, + 'command': args, 'elapsed_seconds': elapsed, 'returncode': result.returncode, + 'stdout': result.stdout, 'stderr': result.stderr, 'output_sha256': hashes, + 'scope': 'Only declared package files and seven exact Git objects; no private module import'} +(HERE / 'COLD-REPLAY.json').write_text(json.dumps(receipt, indent=2, sort_keys=True) + '\n') +print(json.dumps(receipt, indent=2, sort_keys=True)) diff --git a/research/original-paired-gap/evidence/EXTRACTION-MANIFEST-20261020.json b/research/original-paired-gap/evidence/EXTRACTION-MANIFEST-20261020.json new file mode 100644 index 0000000000..b66d53f28e --- /dev/null +++ b/research/original-paired-gap/evidence/EXTRACTION-MANIFEST-20261020.json @@ -0,0 +1,270 @@ +{ + "file_count_excluding_manifest": 52, + "files": [ + { + "bytes": 3258, + "path": "NOTICE.md", + "sha256": "06ebe05bf4c5abcfa840a9b2bd3b58059b293dd23fc23eb9ca8454a56d1c9e5a" + }, + { + "bytes": 10553, + "path": "PROOF.md", + "sha256": "d71781dad19b6ef4683a49ef67aeba3123486429af75d4432eb3ba650841d2be" + }, + { + "bytes": 1876, + "path": "PROVENANCE.md", + "sha256": "19e6f51ec27b36c2ce41dda7294fdb92da3f1ea8280b2de8622420b4e8c7c183" + }, + { + "bytes": 8573, + "path": "README.md", + "sha256": "664d1d91dacff672a9db6d6cf0430b23902e8045ee5f3b43de6229c5b2ea4615" + }, + { + "bytes": 8153, + "path": "SOURCES.json", + "sha256": "2ca472d13712383755b7f25794edb810e97401ecfd3fc8b1aa1b68a354b1b581" + }, + { + "bytes": 213376, + "path": "data/FULL-MODE-PROGRAMS.json.gz", + "sha256": "ebc17d1d4c51a9c6b3cb05670d970db3d3e1000f26f1d864cdb27523ce1997dd" + }, + { + "bytes": 269114, + "path": "data/INPUT-LINES.json", + "sha256": "500c09dfc1d27ffd107341adf4c3c6874ee2c84e1a8afad91d931ed9e88fd1d7" + }, + { + "bytes": 29886, + "path": "data/PAIRED-PROGRAMS.json.gz", + "sha256": "ed7702a3fac280238bcaf8af8387d53c59731b8c21c0301f3d84de971027e2d0" + }, + { + "bytes": 999, + "path": "evidence/ALGEBRA-CHECKS.json", + "sha256": "49ed9629670af3825290409ef890e62850d71bec89aba9e3355277ec3303785a" + }, + { + "bytes": 2620, + "path": "evidence/COLD-REPLAY.json", + "sha256": "38eea308b27075bb3c9127e22da2e5da168c366c6c8e33935dea8bd8fe44666d" + }, + { + "bytes": 4057, + "path": "evidence/COLD-REVIEW-SOURCE.txt", + "sha256": "d02b53ddaacd435295899f87c034631fc0ab8670745c115bfbc4c3639f6a8fbe" + }, + { + "bytes": 1918, + "path": "evidence/FULL-MODE-REVIEW.json", + "sha256": "ff123b08b3ac58f20d12d4fbec575472086ace1708d3242519884dbffe534372" + }, + { + "bytes": 1159, + "path": "evidence/INDEPENDENT-ALGEBRA.json", + "sha256": "9d5146ea7a8feb9e3f7a99e613841f793ca7afea2db8caf6ea8895e11fa1cf52" + }, + { + "bytes": 2156, + "path": "evidence/LOCAL-PROOF-REVIEW.json", + "sha256": "4018a1c2080d37b907631d1db0b356d3887294f99f720f6e63c10daf149395e2" + }, + { + "bytes": 7238, + "path": "evidence/LOCAL-PROOF-REVIEW.md", + "sha256": "6d27934ce620cc8b191b0822f955ec05f0679352c2a6f9ac31672085ee52a418" + }, + { + "bytes": 7037, + "path": "evidence/LOCAL-PROOF.md", + "sha256": "dd94a6e2220306aa76da329886921f1efc0420e6064fe9d056bc4c2286e693b3" + }, + { + "bytes": 5755, + "path": "evidence/MONOMIAL-SQUARE-PROOF.md", + "sha256": "300e7b894f8218fe3e17b31f0033daa85f57d5df414ce127d3613e3e705b2fd2" + }, + { + "bytes": 3106, + "path": "evidence/MONOMIAL-SQUARE-REVIEW.md", + "sha256": "53904f2fa0d12943d5639c454ed4598d0a4f3d4f1bc4441118d2576b25e25c68" + }, + { + "bytes": 580, + "path": "evidence/NATIVE-CHECKS.json", + "sha256": "ee369640862c4961be56327cd248599257469fbd090ba3b60814184be2f7f074" + }, + { + "bytes": 1701, + "path": "evidence/NATIVE-REVIEW.json", + "sha256": "e79603bee7c4077b3637f9b7891bac59719183e922a71d5994aaf9d405d5322f" + }, + { + "bytes": 7579, + "path": "evidence/NATIVE-REVIEW.md", + "sha256": "1783100d3333c83828b47bb89f267db54b791f4c4fe952b5a62fbdb5087c902f" + }, + { + "bytes": 1677, + "path": "evidence/NEGATIVE-WITNESSES.json", + "sha256": "1992edbbe31aedf839ccb2cdd37c77e7060018fd65032f34d044afc348808b1c" + }, + { + "bytes": 4038, + "path": "evidence/OWNER-BINDING-REVIEW.json", + "sha256": "11abe070f0fbf483f0afd243411cf861c017b7a6fc0b23c656e3508c3d9e89a4" + }, + { + "bytes": 6392, + "path": "evidence/OWNER-BINDING-REVIEW.md", + "sha256": "a85549bfda224f651f8f26235893e6b61f1f6683f9bc6f84a52ecf5e26782705" + }, + { + "bytes": 10590, + "path": "evidence/OWNER-BINDING-SOURCE.txt", + "sha256": "888852204cef466e051e2e16c84de68db05ab3995ac47c8c15fbf81356613676" + }, + { + "bytes": 2099, + "path": "evidence/PACKAGE-REVIEW.json", + "sha256": "16826ac4784c851b011867d2862ab2a019403445846745fe3fc327476c19de68" + }, + { + "bytes": 7581, + "path": "evidence/PACKAGE-REVIEW.md", + "sha256": "9bf3406f11dd1abe888eed1ce2f1f9f0cb43be5a0963565e22d3dfa160768676" + }, + { + "bytes": 1602, + "path": "evidence/PAIR-CHECKS.json", + "sha256": "89c50c9ece5c209c3f17ed9cea7dfd79715a8ef7c4031603adbc8e1a274f6089" + }, + { + "bytes": 1911, + "path": "evidence/PINS-AND-INVOICE.json", + "sha256": "9bbcf94527b80c8b85c27f008b6d5f46bee89a306061ff2e20dfc4b31efb6e41" + }, + { + "bytes": 8344, + "path": "evidence/PRE-WRAP-MANIFEST.json", + "sha256": "053b6a782e27164290866390ad7bd53370bd1473c270ce40732bcd4fef47f32e" + }, + { + "bytes": 1052, + "path": "evidence/PRODUCER-COLD-PORTABILITY.json", + "sha256": "36915ebf6c298b06f36e6103d78a0a5a5155bbf4546f14a622ee24e414c31b52" + }, + { + "bytes": 2847, + "path": "evidence/PUBLICATION-CHECKS.md", + "sha256": "2e2025650402a59196048ce9687a0c8b8a81895f890a4284361ef9ec7f979d5a" + }, + { + "bytes": 8335, + "path": "evidence/PUBLICATION-PROVENANCE.json", + "sha256": "4349b3033b2d5fb7cab03d799c9a6cec5030f68aa59a06601f5a8b35c7eed110" + }, + { + "bytes": 5847, + "path": "evidence/REPLAY.json", + "sha256": "12481f1fdb5464bd1bcba8950599da05a5ea0994e1e3559157d21423ef254e75" + }, + { + "bytes": 4917, + "path": "evidence/REVIEWED-PACKAGE-HASHES.json", + "sha256": "727b5b524c26ab5b9617fb8cbe259a501e121e6067d6b4ddb533ec6a277dca51" + }, + { + "bytes": 544, + "path": "evidence/ROUTE-REPLACEMENT-CHECK.json", + "sha256": "da9c021e6464616c2908f684c2f7aacf903bc97f68a75a0365860e86da9bbc16" + }, + { + "bytes": 3392, + "path": "evidence/SUPPLEMENTAL-IO-ADAPTATION.json", + "sha256": "7f4a0b9a860e66d67586b3a9bcbe7c4abd2cab6cfe27e7b42c96aa051c680c8e" + }, + { + "bytes": 3264, + "path": "evidence/SUPPLEMENTAL-IO-REVIEW.json", + "sha256": "3316f003b148759b1f629a678be8f8db4a762b53703f34429dd240a2e5b39703" + }, + { + "bytes": 3213, + "path": "evidence/WORKTREE-REPLAY.json", + "sha256": "7472175da0068436b620ac6b2fd61f89cf7addd9cb33e217d0e4e35536695ad0" + }, + { + "bytes": 7484, + "path": "evidence/WRAP-REPLAY.json", + "sha256": "f6a47c1274bf8b2266dabbca2cd62c304a0331638ff1d6be73cb8dde86c76531" + }, + { + "bytes": 4259, + "path": "evidence/check_negative_witnesses.py", + "sha256": "0909b6d246d1aaa7af64e2eac80f5d335042d76ae1daaf2fecdfffc3ad216498" + }, + { + "bytes": 6464, + "path": "evidence/independent_algebra.py", + "sha256": "357f426ecd1e3d0e74f7a768ad992b2738364737e44122fefcee07c623a7e382" + }, + { + "bytes": 11357, + "path": "notices/LICENSE", + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4" + }, + { + "bytes": 1964, + "path": "notices/research/gauge44-slots-t16/NOTICE.md", + "sha256": "7a8d17b04da1e6c9d0ec217fb5bda72faa09d9a21695128722dd1e2827870fcf" + }, + { + "bytes": 6406, + "path": "notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md", + "sha256": "a75967ebc34e3bf2ff2c25c08e6c7f1a61b0c0d171cfd1b62196ae2caaf2c610" + }, + { + "bytes": 950, + "path": "notices/research/gauge44-slots-t16/construction/NOTICE.md", + "sha256": "defe7e44af610e25a6c50c1c3b2efd0972d0690574995c0c872fc50eebf4c816" + }, + { + "bytes": 2245, + "path": "notices/research/gauge44-slots-t16/t16/NOTICE.md", + "sha256": "902370e6bfcd39dbea2ece474f15fccbcce3b8e966b2b94066bd03e5174591b5" + }, + { + "bytes": 4411, + "path": "replay.py", + "sha256": "8caab4a35955e8216d6d034786710e2f8a446e315a5481c2eb632bd93760b0b7" + }, + { + "bytes": 14947, + "path": "source_data.py", + "sha256": "d23924511e3aed41e5e64511ca70126a636d91c8aa02e656cb61d6ceca1fe0a0" + }, + { + "bytes": 8568, + "path": "verify_algebra.py", + "sha256": "c40b0e3dd5156584836539d882890dd8d34e68ed057970cba33146ac4137c425" + }, + { + "bytes": 10094, + "path": "verify_native.py", + "sha256": "0efefa821aba316e2557ea9991b878b20a624ec3135c5d58d3960ae95e589bba" + }, + { + "bytes": 12197, + "path": "verify_pair.py", + "sha256": "37807ae4cffdcaf5d13dcd7b8025da1d96251ef626124b670a641e9e471b2d95" + } + ], + "manifest_excludes": [ + "MANIFEST.json" + ], + "status": "PUBLICATION_EXTRACTION_VERIFIED", + "total_bytes_excluding_manifest": 759685 +} diff --git a/research/original-paired-gap/evidence/FULL-MODE-REVIEW.json b/research/original-paired-gap/evidence/FULL-MODE-REVIEW.json new file mode 100644 index 0000000000..23276ce660 --- /dev/null +++ b/research/original-paired-gap/evidence/FULL-MODE-REVIEW.json @@ -0,0 +1,51 @@ +{ + "checks": { + "backward": { + "all_persistent_columns": 704, + "native_wrapper_placement": "none", + "new_monomial_maps_after_lowering": 0, + "new_rank_one_children": 0, + "ordinary_helper_columns_restored": 472, + "paid_rank_mass": 5522, + "real_component_scalar_primitive_bound": 204418, + "retained_native_events": 5056 + }, + "forward": { + "all_persistent_columns": 704, + "native_wrapper_placement": "none", + "new_monomial_maps_after_lowering": 0, + "new_rank_one_children": 0, + "ordinary_helper_columns_restored": 472, + "paid_rank_mass": 5522, + "real_component_scalar_primitive_bound": 204418, + "retained_native_events": 5056 + } + }, + "complete_native_operator_equalities": 0, + "global_phase_controls": 0, + "inverse_transpose_scope": "Logical scalar coordinates after the stated native entry and exit frames are stripped", + "limits": [ + "The mode output is the full frame; its phase type changes under repeated routed calls.", + "Eight previous cold helper roles are now productive state roles.", + "No common-coordinate global controller or owner schedule is certified." + ], + "mode_labels": [ + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11 + ], + "mode_type": "full", + "native_scope": "All tensor powers by exact operator tensoring and the common-frame scalar lemma; arbitrary data and ordinary borrowed inputs", + "normal_recipe_source_sha256": "6c856f4d321bd63fc0b4869dcd8385b5e9851f38f9a1b8fb19a1dbd9c73e0eb9", + "program_payload_sha256": "f271842a741584389e166e700e262f161b0dd570ce8c7a540f2717e90ead5205", + "source_compressed_sha256": { + "CANONICAL-WORD.json.gz": "16bc0ebb04b4be6c0ade74badc6a0c0cdba4215eda86e4ff9f13abf8ecebd219", + "LOCAL-PROGRAMS.json.gz": "241fde27d4e43f5a9cb6b128f9f76c5131a53d09f0371676163f914d0b0fef3a" + }, + "status": "PASS_INDEPENDENT_EIGHT_MODE_NATIVE_PAIR" +} diff --git a/research/original-paired-gap/evidence/INDEPENDENT-ALGEBRA.json b/research/original-paired-gap/evidence/INDEPENDENT-ALGEBRA.json new file mode 100644 index 0000000000..42a5f4466f --- /dev/null +++ b/research/original-paired-gap/evidence/INDEPENDENT-ALGEBRA.json @@ -0,0 +1,80 @@ +{ + "K": [ + [ + 3, + 0 + ], + [ + 5, + 0 + ], + [ + 0, + 2 + ] + ], + "Q": [ + [ + 0, + 2, + 0 + ], + [ + 3, + 0, + 0 + ], + [ + 0, + 0, + 5 + ] + ], + "R": [ + [ + 1, + 2, + 0 + ], + [ + 0, + 0, + 3 + ] + ], + "S": [ + [ + 6, + 0, + 0 + ], + [ + 0, + 6, + 0 + ], + [ + 0, + 0, + 25 + ] + ], + "checks": [ + "Nontrivial productive intertwiners", + "Q K R differs from K R Q", + "Q fourth power is not identity", + "Both physical words equal the claimed formulas", + "Both inverse orders", + "G H is zero while H G is not zero" + ], + "controls": [ + "Missing productive mode intertwiner", + "Reversed backward old-mode order" + ], + "data_dimension_per_replica": 3, + "imports": "Python standard library only; no package or producer code", + "independent_input_columns_per_orientation": 16, + "mode_dimension_per_replica": 2, + "scope": "An independent exact example supports the separately reviewed general proof", + "status": "PASS_INDEPENDENT_RECTANGULAR_PHYSICAL_EXAMPLE" +} diff --git a/research/original-paired-gap/evidence/LOCAL-PROOF-REVIEW.json b/research/original-paired-gap/evidence/LOCAL-PROOF-REVIEW.json new file mode 100644 index 0000000000..411d97734f --- /dev/null +++ b/research/original-paired-gap/evidence/LOCAL-PROOF-REVIEW.json @@ -0,0 +1,30 @@ +{ + "claims": [ + "The original-complex paired T is an exact involution for every positive lambda.", + "The stated forward and backward physical orders give the proposed H/G maps on arbitrary modes.", + "A is port-dependent and is never commuted through R or K.", + "All 1008 actual stage/port routes fix their port normal; identical paired affine views commute with T.", + "All-stage G_s H_t=0, with arbitrary invertible mode coordinates, and pairwise-zero residual products." + ], + "inherited_full_mode_payload_sha256": "f271842a741584389e166e700e262f161b0dd570ce8c7a540f2717e90ead5205", + "method": "Independent exact operator algebra and a small source-bound route calculation; no paired native program replay.", + "not_checked": [ + "A complete paired native program payload or its scalar invoice.", + "The asynchronous supplier owner schedule or compatibility of shared helpers.", + "Native access to odd H/G factors at arbitrary boundaries.", + "Arbitrary-mode restoration in a complete controller.", + "Global decoding, storage, recursive precision, supplier admission, or a kappa improvement." + ], + "possible_lowering_pair_monomial_applications_per_orientation": 448, + "possible_lowering_scope": "A direct boundary sandwich count, not an emitted-program or physical map cost certificate.", + "proof_sha256": "6d27934ce620cc8b191b0822f955ec05f0679352c2a6f9ac31672085ee52a418", + "route_receipt_sha256": "2f6451d56fd1414898e52f9baf977c6065c6ec7185edc3186eedb8188c6a299c", + "source_pins": { + "coherent-port/COMPLEMENTARY-GAPS.md": "6b218df8d6825a1a6711c6afae18c53d06ef9095fafd07a967ad1eece0399ad0", + "history-encoding/FULL-MODE.json": "e67ae3c858311e72d55d62dbfb3f1d7b7cb66ec22a18a20ed8421bfbcd7cbf68", + "history-encoding/PHASE-GAP-PROOF.md": "9c0685fa6cb448acd6048f202d573da36d9378dfd7caf1343ed1a0def9a4d3ff", + "history-encoding/emit_phase_gap_modes.py": "67a4e02cc59407472a92de9117fe79739e8dfdfde34615cda93067faa685e629", + "interface-proof/FULL-MODE-PORT-REVIEW.json": "ff123b08b3ac58f20d12d4fbec575472086ace1708d3242519884dbffe534372" + }, + "status": "PASS_INDEPENDENT_ORIGINAL_COMPLEX_PAIRED_GAP_PROOF" +} diff --git a/research/original-paired-gap/evidence/LOCAL-PROOF-REVIEW.md b/research/original-paired-gap/evidence/LOCAL-PROOF-REVIEW.md new file mode 100644 index 0000000000..68d9274ba9 --- /dev/null +++ b/research/original-paired-gap/evidence/LOCAL-PROOF-REVIEW.md @@ -0,0 +1,212 @@ +# Proof review of the original-complex paired gap + +The proposed local operator identities are correct with the stated +physical order. They use the original complex line transform. No Walsh +retarget is required for these identities. This is a proof review of +the local algebra and routed zero-feedback theorem. It is not a replay +of the pending paired native packet or an owner-schedule admission. + +Use two copies of the same local frame interface. Extend R and K by the +identity on the replica index. There are 112 data-port pairs and eight +mode pairs. The two copies must have matching input and output frame +operators. The complete raw cores are assumed to have the stated +arbitrary-data, arbitrary-mode, and arbitrary-helper contracts. + +For each port, let Q_p be the lambda-fold tensor power of the original +native C_p. Put Q=diag_p(Q_p) on each replica and L=Q^2. The literal +identity C_p^2=X_p gives Q^4=I, L^2=I, and no scalar phase. Define + +```text +A = [[0,I],[L,0]], +A^-1 = [[0,L],[I,0]], +T = Q A = [[0,Q],[Q^-1,0]]. +``` + +Here Q on the left denotes its two-replica block diagonal extension. +Direct multiplication gives + +```text +A Q = Q A, A^2=L, Q^2 A=A^-1, T^2=I. +``` + +A is a replica exchange with a port-dependent simultaneous translation. +It is an exact monomial for every positive lambda. It generally cannot +move through R or K. In particular, A must not be applied as one common +two-by-two map to the eight mode pairs. The common full frame F commutes +with Q and L because all original complex line transforms are linear +combinations of commuting address translations. The same F on both +replicas therefore also commutes with A. + +## Forward physical order + +The input physical source is Qx and the input mode is arbitrary z. +The physical preload gives + +```text +u = z - R A(Qx) = z - R T x. +``` + +The raw forward core has + +```text +x_1=x, +y_1=y+(I-KR)x-Ku, +u_1=-u-2Rx. +``` + +At its output, X is Fx and the mode has frame F. The physical addition +`U += R X` thus gives + +```text +v = -z - R(I-T)x, +y_1 = y+x+K v. +``` + +The physical Y frame is FQ^-1. The final physical correction +`Y += A K U` contributes + +```text +(F Q^-1)^-1 A K F v = Q A K v = T K v. +``` + +Only the common F moved through K; A did not. Thus, with +`H=(I+T)K` and `G=R(I-T)`, the complete map is + +```text +x'=x, v=-z-Gx, y'=y+x+H v. +``` + +Its inverse is `x=x'`, `z=-v-Gx`, `y=y'-x-Hv`. No mode is assumed +zero. The raw cores keep their ordinary helper contract. + +## Backward physical order + +First use the original mode z in the physical source update + +```text +X -= 8 Q^2 A K z. +``` + +Since the input source frame is Q, this changes its logical value by +`-8 Q^-1 Q^2 A K z=-8T Kz`. Only after this update, set the mode to +`u=z-Ry/8`. The raw backward core gives + +```text +x_1=(x-8TKz)-(I+KR)y-8K(z-Ry/8) + =x-y-8(I+T)Kz, +u_1=-(z-Ry/8)-Ry/4=-z-Ry/8, +y_1=y. +``` + +Its physical Y is FQ^-1 y. The final physical update +`U += R Q^2 A Y/8` contributes + +```text +F^-1 R Q^2 A F Q^-1 y/8 = R T y/8. +``` + +This uses `Q^2 A Q^-1=Q A=T`. It does not move A through R. +Consequently + +```text +x'=x-y-8H z, y'=y, v=-z-Gy/8. +``` + +The inverse reads `y=y'`, `z=-v-Gy/8`, then `x=x'+y+8Hz`. +Using the updated mode in the first source correction would be a +different word. The displayed order is essential. + +## A literal boundary lowering + +The following monomial conjugations realize the physical formulas with +pointwise R/K ADDs. This is a possible lowering, not a replay or cost +certificate for the pending producer packet. + +* Forward preload: apply A to X, subtract R X from the modes, then + restore X by A inverse. +* Forward target correction: apply A inverse to Y, add K U to Y, + then restore Y by A. +* Backward source correction: apply A to X, subtract 8Kz from X, + then restore X by A inverse. +* Backward final query: apply A inverse to Y, add RY/8 to the modes, + then restore Y by A. + +Each orientation uses two such sandwiches on 112 port pairs, or 448 +pair-monomial applications. A pair-monomial application includes its +replica exchange and its stated port translation. This count is not +an execution cost for the maps. The scalar-A Walsh protocol's 240-map +count must not be copied into this port-dependent construction. + +## Actual routes and all-stage annihilation + +At owner d the port operator is C_(d q_p) in each payload layer. +For an actual affine cover view, + +```text +M(g,delta)f(d,z)=f(dg,z XOR d delta), +``` + +the two products M Q_p and Q_p M differ only by whether the native +line direction is d g q_p or d q_p. Every selected route fixes q_p, +so these are equal. The payload translation commutes with each native +line translation. Thus the commutation includes the complete phase +and holds in every tensor layer. Applying the same view to the two +replicas also commutes with A and T. + +A small independent source check reconstructs the single-layer columns +from the pinned doubled DATA-PHASES payload. It verifies `g q_p=q_p` +for all 112 ports and all nine stages, or 1008 exact cases. No producer +or native compiler is imported for this check. + +For actual routed data maps D_s, and any invertible mode coordinates +N_s, the factors are + +```text +G_s = N_s^-1 R D_s (I-T), +H_t = (I+T) D_t^-1 K N_t. +``` + +For every s and t, + +```text +G_s H_t + = N_s^-1 R D_s (I-T)(I+T) D_t^-1 K N_t + = 0. +``` + +No R/K commutation, equality of centre images, or special value of RK +is needed. Route commutation is needed to identify all local factors +with this one global T. If the two replicas use different views, +`diag(D_s,D_t)` need not commute with the replica exchange. That case +is not covered by this argument. + +As a consequence, `N_i=H_(s_i) C_i G_(t_i)` satisfies `N_i N_j=0` +for arbitrary well-typed mode maps C_i. Hence +`product(I+N_i)=I+sum(N_i)` and its inverse is `I-sum(N_i)`. +An intervening data map B is allowed when it commutes with T, since +then `G_s B H_t=0`. This is an algebraic construction family, not a +proof that each operation in the proposed physical controller meets +that hypothesis. + +## Scope and remaining obligations + +The local theorem assumes two compatible core interfaces. It does not +prove that the selected asynchronous supplier calls have disjoint or +compatible physical roles. The paired input gates must precede both +cores, and the paired output gates must follow both. Shared helper +owners, mode frames, and intervening calls need a separate schedule. +The native and source-domain reviewers are checking those obligations. + +The zero-feedback identity does not restore arbitrary modes by itself. +It also does not make boundary H or G access free. H and G still contain +the odd native factor Q or Q inverse. The physical conversions above +work at the specified Q/I/F/FQ^-1 endpoints; they are not automatically +available between two arbitrary full-frame fields. The final source +access, target access, restoration, map execution, storage, precision, +recursive children, and full supplier invoice remain separate. + +The source raw-core contract and endpoint frames are inherited from the +pinned full-mode and phase-gap evidence. This note does not repeat a +full native kernel check, certify a paired program payload, admit the +global controller, or claim a kappa improvement. A separate OpenAI +Codex research worker made this proof review. diff --git a/research/original-paired-gap/evidence/LOCAL-PROOF.md b/research/original-paired-gap/evidence/LOCAL-PROOF.md new file mode 100644 index 0000000000..6c500b5e1d --- /dev/null +++ b/research/original-paired-gap/evidence/LOCAL-PROOF.md @@ -0,0 +1,178 @@ +# A paired involution for the original complex phase + +The original complex line phases admit a two-replica involution. Its +extra maps are translations and cross-replica ADDs. It does not require +the Walsh retarget. The emitted local word retains both original cores +and restores all 944 ordinary helper inputs. It has 16 arbitrary mode +inputs, whose new values are part of the stated output contract. + +This result removes a local phase-normalization requirement from the +complementary-gap controller. It does not give free access to the final +odd-phase queries or injections. The paired owner schedule, mode jobs, +complete decoder, and supplier invoice are separate requirements. No +complete kappa improvement is claimed. + +## Exact phase and operator order + +Let `Q=diag_p(C_p^tensor(lambda))`. On one port, the original native line +has `C_p^2=X_p` exactly. Thus `L=Q^2` is a list of translations, and +`L^2=I`. Pair two replicas with the same stage and address chart. Put + + A = [[0,I],[L,0]], + T = Q A = [[0,Q],[Q^-1,0]]. (1) + +Here Q denotes the same diagonal port operator on both replicas. A acts +on port arrays, not on the eight centre indices. It is a monomial map. +Since A commutes with Q and `A^2=L`, we have `T^2=I`. Also `L A=A^-1`. +None of these statements moves A through R or K. + +Use `K=R^T/4`, `RR^T=56I`, with R and K extended by the replica identity. +The pinned raw core has these local physical frames: + +| Role | Input | Output | +| --- | --- | --- | +| X_p | C_p | F | +| Y_p | I | F C_p^-1 | +| mode u_k | I | F | + +The common F commutes with each Q_p and each translation L_p. After its +common output F is removed, the exact raw content maps are + + F_core: y'=y+(I-KR)x-Ku, u'=-u-2Rx, x'=x; + B_core: x'=x-(I+KR)y-8Ku, u'=-u-Ry/4, y'=y. (2) + +The signs in the backward core are required. + +## The forward physical word + +Start with arbitrary mode content z. Apply the following physical +operations before both cores: + + u -= R A X_physical. + +Because the input X frame is Q, the core mode input is `u=z-RTx`. +After both cores, first apply `u += R X_physical`. The new logical mode +and target then satisfy + + v=-z-R(I-T)x, + y_1=y+x+Kv. + +Next apply `Y_physical += A K U_physical`. The target frame converts this +term to `Q A K v=T K v`. Hence the complete map is + + x'=x, + v=-z-Gx, + y'=y+x+Hv, + G=R(I-T), H=(I+T)K. (3) + +The emitter implements the first graph as `u0-=R X1` and +`u1-=R L X0`. It implements the last graph as `Y0+=K v1` and +`Y1+=L K v0`. The translated source or target is translated once before +its ADDs and once after them. This restores its physical address view. +There is no common action of A on the eight mode fields. + +## The backward physical word + +Before both backward cores, apply, in this order, + + X_physical -= 8 L A K z, + u = z-RY_physical/8. + +The first line changes logical x by `-8 T K z`. Substitution in (2) +gives `x'=x-y-8(I+T)Kz` and `u'=-z-Ry/8`. After both cores, apply + + u += R L A Y_physical/8. + +Since `L A Q^-1=T`, this adds `RTy/8`. Therefore + + x'=x-y-8Hz, + y'=y, + v=-z-Gy/8. (4) + +The emitter uses `X0-=8L K z1`, `X1-=8K z0`, and the two common-frame +mode preloads. Its final graph is `u0+=R L Y1/8`, `u1+=R Y0/8`. +These are pointwise physical ADDs and literal translations. + +## Changing charts and one-shot mode gauges + +At cover class g, the port phase is `C_(g p)^tensor(lambda)`. Each actual +stage route fixes p. Orthogonal address covariance therefore implies +that every D_s commutes with Q, L, A, and T. The pair must use the same +cover class and stage view in this statement. + +Let N_s be the one-shot mode gauge from +`history-encoding/ONE-SHOT-MODE-PROOF.md`. Its input action and its full-F +conjugate are monomial. Applying the phase-gap graphs inside that active +core, before the mode output adapter, gives the routed maps + + G_s=N_s^-1 R D_s(I-T), + H_t=(I+T)D_t^-1 K N_t. + +Their cross-products vanish for every s,t: + + G_s H_t + =N_s^-1 R D_s (I-T)(I+T) D_t^-1 K N_t=0. (5) + +This is a typed composition consequence of the local endpoint table and +the reviewed one-shot adapters. It does not replace a global native +replay of those adapters and graphs. It makes no equal-chart assumption +and does not identify the distinct centre row spaces. + +The frozen `encoded-controller/NILPOTENT-CONTROLLER.md` now applies to +(3)--(5) at the operator level. Its output decoder restores all arbitrary +data and mode inputs when its H and G boundary operations are available. +The two-replica change has not made those boundary operations monomial. + +## Local invoice and checks + +The two cores are the unchanged payload with decompressed SHA256 +`f271842a741584389e166e700e262f161b0dd570ce8c7a540f2717e90ead5205`. +The generated paired payload has decompressed SHA256 +`42aeb0902d8b2330f9050718c6d949993111a9fd898acad599ec867bb63a2b20`. + +| Item per pair | Forward | Backward | +| --- | ---: | ---: | +| Extra physical ADDs | 2,688 | 2,688 | +| Extra translation maps | 448 | 448 | +| Extra real scalar primitives | 25,088 | 34,048 | +| Complete explicit scalar primitives | 433,924 | 442,884 | +| Retained native events | 10,112 | 10,112 | +| Paid native rank | 11,044 | 11,044 | +| Extra native children | 0 | 0 | + +The scalar invoice excludes address-map implementation, owner access, +mode preparation and completion, old-owner backfills, and the global +decoder. It is not a complete real-primitive supplier invoice. + +The producer checks both raw core maps on all 704 input columns, then +checks both paired maps on all 1,408 arbitrary input columns. It checks +all 944 ordinary helper outputs. Its free-line algebra uses only +`C_p^4=I`; it does not commute a port line through R or K. Omitting the +input graphs or the translations fails the map check. The native identity +`C_p^2=X_p` gives the all-tensor-depth interpretation. + +Run from the workspace: + + python3 -I -B work/centre-encoding-campaign-20261014/lanes/residual-syndrome/physical-algebra/emit_original_paired_gap.py + +Expected first output: + + PASS_EXACT_ORIGINAL_COMPLEX_PAIRED_PHASE_GAP + +Both pregraphs must precede both cores, and both postgraphs must follow +both cores. A serial execution of the cores is valid only if its borrowed +owners do not change the other replica's protected data or modes. The +selected asynchronous schedule is not admitted by this local check. + +## Credit and scope + +The history-encoding lane supplied the raw full-mode core and the +original physical phase-gap graphs. The coherent-port lane supplied the +complementary-gap and two-replica Walsh argument. The encoded-controller +lane supplied the all-stage nilpotent decoder. The coordinating agent +supplied (1), which uses the original complex translations. This lane +emitted the ordered physical graphs and checked their complete local +maps. Independent review is recorded separately. + +This work used substantial OpenAI Codex assistance under the user's +direction. It does not change the selected frontier. diff --git a/research/original-paired-gap/evidence/MONOMIAL-SQUARE-PROOF.md b/research/original-paired-gap/evidence/MONOMIAL-SQUARE-PROOF.md new file mode 100644 index 0000000000..825f4832ae --- /dev/null +++ b/research/original-paired-gap/evidence/MONOMIAL-SQUARE-PROOF.md @@ -0,0 +1,134 @@ +# Complementary gaps from a monomial square + +The paired phase-gap construction does not require a fourth root of the +identity or a port-diagonal phase. It applies to an invertible data +operator whose square has legal monomial access. The original complex +phase and the earlier paired Walsh phase are special cases. + +This theorem supplies an exact local protocol and removes all later +centre feedback when the stages share one transported phase operator. +It does not supply its final odd-phase boundary operations or a complete +supplier invoice. + +## Hypotheses + +Let Q be an invertible operator on the data fields. Put `S=Q^2`. Assume +that S and S inverse are legal monomial maps with known costs. Let F be +the common productive output operator, with `FQ=QF`. Thus F also commutes +with S. Assume the following exact physical interface is available: + + source X: Q -> F, + target Y: I -> FQ^-1, + mode u: I -> F. + +The two raw content words are + + forward: y'=y+(I-KR)x-Ku, u'=-u-2Rx, x'=x; + backward: x'=x-(I+KR)y-8Ku, u'=-u-Ry/4, y'=y. (1) + +R and K need not commute with Q or S. Their coefficient operations must +have legal pointwise scalar or monomial access at the displayed physical +endpoints. They must intertwine the productive frames: + + F_mode R=R F_data, F_data K=K F_mode. (1a) + +Here F_data and F_mode are the copies of the stated common F on their +respective field types. Scalar field matrices satisfy (1a). An arbitrary +monomial R or K need not satisfy it. Without (1a), the output physical +coefficients must instead be the conjugates `F_mode R F_data^-1` and +`F_data K F_mode^-1`, and their legal access is a new hypothesis. +The protocol below uses (1a). + +All input fields, including the modes and ordinary borrowed +helpers, can be arbitrary. The raw words must have their stated helper +restoration contracts. + +Use two replicas of this interface in the same chart. Extend Q, F, R, +and K by the replica identity. Define, on the paired data type, + + A=[[0,I],[S^-1,0]], + T=Q A=[[0,Q],[Q^-1,0]]. (2) + +A is monomial. Direct multiplication gives + + AQ=QA, T^2=I, S A Q^-1=T. (3) + +There is no hypothesis `Q^4=I`. The A in (2) acts on data fields; in +general it cannot act on the centre index or move through R or K. + +## Ordered physical protocol + +For the forward word, apply `u-=R A X_physical` before both raw cores. +Its logical input is `u=z-RTx`. After both cores, apply +`u+=R X_physical`, then `Y_physical+=A K U_physical`. The exact result is + + v=-z-Gx, x'=x, y'=y+x+Hv, + G=R(I-T), H=(I+T)K. (4) + +For the backward word, first apply + + X_physical-=8 S A K z, + u=z-RY_physical/8. + +After both raw cores, apply `u+=R S A Y_physical/8`. The exact result is + + v=-z-Gy/8, y'=y, x'=x-y-8Hz. (5) + +The input source conversion is `Q^-1 S A=T`. The output target +conversion is `S A Q^-1=T`. These identities and (1) prove (4)--(5), +with the displayed operator order. No R/K phase commutation is used. + +Only monomial access to S or its inverse is added to the scalar graphs. +For example, the forward input graph reads the other replica directly +in one direction and through S inverse in the other. The backward +input graph uses S in one direction and the identity in the other. +Every translated or reindexed source view is restored after its ADDs. +The costs of those maps remain part of the implementation invoice. + +## All-stage consequence + +Suppose the actual stage charts transport their phases to the same Q +on one global data space. For any legal mode gauges N_s, set + + G_s=N_s^-1 R_s(I-T), + H_t=(I+T)K_t N_t. + +Then for every pair of stages, + + G_s H_t=N_s^-1 R_s(I-T^2)K_t N_t=0. (6) + +No relation between the centre images at the two stages is needed. +The same cancellation holds with a data bridge B between the two gaps +when B commutes with T. Thus the existing complementary-gap controller +and its arbitrary-mode decoder apply. If stages have unrelated T_s, +equation (6) does not follow and is not claimed. + +## Actual original-complex specialization + +The actual native phase has `S=diag_p(X_p^tensor(lambda))=S^-1`. Every +actual route fixes its port direction and transports Q to the same +global cover operator. The emitted pair in `ORIGINAL-PAIRED-GAP.md` +uses the existing replica indices and no extra replica. Its two cores +retain 10,112 native events and paid rank 11,044. Each pair adds 2,688 +physical ADDs and 448 translation maps, but no native child. The complete +explicit scalar bounds are 433,924 forward and 442,884 backward. + +For this unit-modulus specialization, the forward wrapper prefix has +infinity norm at most 57, and its suffix has norm at most 58. The +backward bounds are 9 and 8. These follow from `||R||_infinity=56` and +`||K||_infinity=1`, in the literal operation order. They bound only the +extra wrappers; the raw core, native children, global controller, and +recursive precision still need their own bounds. All new scalar +coefficients are dyadic. No new odd denominator occurs. + +Independent native review of the actual paired payload is in +`coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md`. The general +abstraction in this note is an algebraic consequence, not a claim that +an unspecified Q already has an admitted native core. + +The coordinating agent supplied the monomial-square abstraction. +The raw interfaces and physical graph method come from history-encoding; +the complementary-gap argument comes from coherent-port and the global +decoder from encoded-controller. This note and the actual paired +emission were written with substantial OpenAI Codex assistance under +the user's direction. No selected-frontier change is claimed. diff --git a/research/original-paired-gap/evidence/MONOMIAL-SQUARE-REVIEW.md b/research/original-paired-gap/evidence/MONOMIAL-SQUARE-REVIEW.md new file mode 100644 index 0000000000..0a608c61b8 --- /dev/null +++ b/research/original-paired-gap/evidence/MONOMIAL-SQUARE-REVIEW.md @@ -0,0 +1,71 @@ +# Review of the monomial-square gap theorem + +The corrected theorem is accepted as a conditional local protocol. +It requires an admitted raw interface, legal access to the stated +monomial square and its inverse, and the productive-frame intertwiners +now stated in the note. It does not construct such a raw interface for +an arbitrary Q. + +The review found a missing hypothesis in the first version. A physical +output ADD `u += R X` gives logical coefficient +`F_mode^-1 R F_data`. An arbitrary legal monomial R does not make this +equal to R. For example, with Q equal to I, F equal to a one-qubit +Hadamard, and R equal to Z, this coefficient is X rather than Z. +Thus availability of monomial access alone did not prove the displayed +map. The final note requires + + F_mode R=R F_data, F_data K=K F_mode. + +These conditions repair the proof. They hold for the actual scalar +field matrices R and K. They do not change the emitted original-complex +payload. The note also states the alternative use of conjugated output +coefficients as a separate access hypothesis. + +For `S=Q^2`, direct block multiplication gives + + A=[[0,I],[S^-1,0]], + A Q=Q A, + Q A=[[0,Q],[Q^-1,0]]=T, + T^2=I, + S A=A^-1, + Q^-1 S A=S A Q^-1=T. + +No fourth-power identity is needed. F commutes with Q, hence with S +and A. The forward preload is `u=z-RTx`. The raw mode output followed +by the productive-frame-compatible R addition gives +`v=-z-R(I-T)x`. The raw target is `y+x+Kv`. Its last physical addition +has logical coefficient + + (F_data Q^-1)^-1 A K F_mode = T K. + +The final forward map is therefore the stated `y+x+(I+T)Kv`. +This does not move A through K. + +In the backward word the first physical source correction subtracts +`8 Q^-1 S A Kz=8 T Kz` from logical x. It reads the old mode z before +the mode preload. Substitution of `u=z-Ry/8` into the raw core gives +`x'=x-y-8(I+T)Kz` and `u'=-z-Ry/8`. The output graph contributes + + F_mode^-1 R S A F_data Q^-1 y/8 = R T y/8. + +This proves the stated backward map. The order and both frame +intertwiners are required. + +For stage maps that share this one global T, the product of a query +and an injection contains the adjacent factors `(I-T)(I+T)=0`. +Arbitrary stage-dependent R_s, K_t, and invertible mode gauges do not +alter this cancellation. A data bridge may be inserted when it commutes +with T. Unrelated stage operators T_s do not give this conclusion. + +For the actual unit-modulus specialization, `norm_inf(R)=56` and +`norm_inf(K)=1`. The literal forward preload has row norm at most 57. +Its ordered suffix has row norm at most 58: the mode can first gain +56 times the source, then the target can gain that updated mode. +The backward preload has row norm at most 9 and its suffix at most 8. +These are bounds for the extra wrappers only. They do not bound the +raw native core, recursive children, the whole controller, or a complete +supplier's precision. + +This was a proof review. No new native kernels or controller were run. +The accompanying physical-boundary receipt pins the corrected note. +OpenAI Codex performed this review under the user's direction. diff --git a/research/original-paired-gap/evidence/NATIVE-CHECKS.json b/research/original-paired-gap/evidence/NATIVE-CHECKS.json new file mode 100644 index 0000000000..0878d94588 --- /dev/null +++ b/research/original-paired-gap/evidence/NATIVE-CHECKS.json @@ -0,0 +1,12 @@ +{ + "actual_stage_port_routes": 1008, + "affine_translation_checks": 265216, + "derived_route_sha256": "20d81a06cbf3e0b4d0fc71e4d659c74ffe870dc1e54b8d0fd3e1e7fd69f06eb7", + "exact_line_spatial_columns": 57344, + "inherited": "Old core native kernels and complete helper interface; no fresh old-core kernel sweep", + "ordered_physical_groups": 20, + "phase_mutation_controls": 112, + "status": "PASS_ORIGINAL_PAIRED_NATIVE_COMPONENTS", + "tensor_scope": "Exact line identity and owner-dependent covariance tensor to every positive depth", + "wrong_owner_direction_controls": 112 +} diff --git a/research/original-paired-gap/evidence/NATIVE-REVIEW.json b/research/original-paired-gap/evidence/NATIVE-REVIEW.json new file mode 100644 index 0000000000..b93fef9ec4 --- /dev/null +++ b/research/original-paired-gap/evidence/NATIVE-REVIEW.json @@ -0,0 +1,35 @@ +{ + "actual_port_routes": 1008, + "affine_translation_checks": 265216, + "checker_sha256": "e79e104b2497e80427c2040c940942e9654c24e4736b981ec11f09eafb768f95", + "exact_line_spatial_columns": 57344, + "formal_ordered_operator_checks": 9, + "pins": { + "canonical_gzip": "16bc0ebb04b4be6c0ade74badc6a0c0cdba4215eda86e4ff9f13abf8ecebd219", + "core": "f271842a741584389e166e700e262f161b0dd570ce8c7a540f2717e90ead5205", + "geometry": "498d85807dd3032de01b5da72a67717f02ee0ecf068e8c47f67d4f21034cd896", + "interface": "5c6c51fbffc07a683e922f17532fd90262ae9e23cc3560a696002073dd234ef3", + "lines": "500c09dfc1d27ffd107341adf4c3c6874ee2c84e1a8afad91d931ed9e88fd1d7", + "original_phases": "c5916ff312678f12aba403847643fbbc29f643acec60bdf836fa56cd3e8251fa", + "program": "42aeb0902d8b2330f9050718c6d949993111a9fd898acad599ec867bb63a2b20" + }, + "proof_sha256": "1783100d3333c83828b47bb89f267db54b791f4c4fe952b5a62fbdb5087c902f", + "scope": "Independent literal wrapper, ordered endpoint, inherited line kernel and route covariance review. The full-mode core is a pinned dependency; no new full-core replay, paired owner admission, mode endpoint closure, terminal H/G access, full supplier invoice or kappa improvement is claimed.", + "status": "PASS_INDEPENDENT_ORIGINAL_PAIRED_GAP_NATIVE_COMPONENT", + "wrapper_counts": { + "backward": { + "ADDs": 2688, + "added_scalar_subtotal": 34048, + "core_dependent_scalar_subtotal": 442884, + "native_rank": 11044, + "translations": 448 + }, + "forward": { + "ADDs": 2688, + "added_scalar_subtotal": 25088, + "core_dependent_scalar_subtotal": 433924, + "native_rank": 11044, + "translations": 448 + } + } +} diff --git a/research/original-paired-gap/evidence/NATIVE-REVIEW.md b/research/original-paired-gap/evidence/NATIVE-REVIEW.md new file mode 100644 index 0000000000..fe63433f9d --- /dev/null +++ b/research/original-paired-gap/evidence/NATIVE-REVIEW.md @@ -0,0 +1,184 @@ +# Original complex paired phase graphs + +This review checks a local construction in the original complex native +frames. It does not use the Walsh change of frame. Two copies of the +reviewed full-mode core have identical port labels and native axes. +Their ordinary helper inputs and their sixteen mode inputs are arbitrary. +Their active data and mode roles must be separate during the paired call. +An ordinary helper owner may be reused only through complete restored +jobs, with the correct consecutive native frames and no intervening +scalar use. Admission of such reuse is part of the owner schedule; the +local wrapper check does not supply it. + +The reviewed payload is +`../residual-syndrome/physical-algebra/ORIGINAL-PAIRED-GAP-PROGRAMS.json.gz`, +with decompressed SHA256 +`42aeb0902d8b2330f9050718c6d949993111a9fd898acad599ec867bb63a2b20`. +It retains two copies of the full-mode payload +`f271842a741584389e166e700e262f161b0dd570ce8c7a540f2717e90ead5205`. +This review uses the prior exact core contract. It does not repeat the +complete native-event or 1408-column replay of that producer. + +## The fixed pair at every tensor size + +At port p let Q_p be the tensor power of the inherited C_p. Put + +```text +L_p = Q_p^2, +A_p = [[0,I],[L_p,0]], +T_p = Q_p A_p = [[0,Q_p],[Q_p^-1,0]]. +``` + +The exact inherited line identity is C_p squared equals the translation +X_p, with no scalar phase. Thus L_p translates every tensor coordinate by +p. It is an involution. It follows that T_p squared is I. This uses two +replicas for every tensor size. It is not a tensor power of a two-replica +map. All powers of the common full transform commute with these line +transforms and translations. + +Extend R and K by the identity on the replica index, and set K=R^T/4. +A acts on the port fields. No action of A on eight mode fields is defined +or used. In particular, this proof does not exchange R A with A R or +A K with K A. + +## The four physical boundary graphs + +The input frames of (x,y,u) are (Q,I,I). Their output frames are +(F,F Q^-1,F). A physical ADD between different frame types is interpreted +in this order; it is not treated as a scalar ADD on logical contents. + +For the forward word, use the following physical graphs in order: + +```text +u -= R A X; run both full-mode cores; +u += R X; Y += A K u. +``` + +The first graph gives u=z-R T x. The raw core gives + +```text +x'=x, y1=y+(I-KR)x-Ku, u1=-u-2Rx. +``` + +The last two graphs therefore give + +```text +v=-z-Gx, y'=y+x+Hv, x'=x, +G=R(I-T), H=(I+T)K. +``` + +For the backward word, use these physical graphs in order: + +```text +X -= 8 Q^2 A K u; u -= R Y/8; +run both full-mode cores; +u += R Q^2 A Y/8. +``` + +The first graph reads the old mode z, before the second graph changes it. +Their logical effects are x-=8 T K z and u=z-Ry/8. The raw backward map is + +```text +x1=x-(I+KR)y-8Ku, y1=y, u1=-u-Ry/4. +``` + +The output graph uses Q squared A Q inverse equals T. The result is + +```text +x'=x-y-8Hz, y'=y, v=-z-Gy/8. +``` + +These substitutions use only T squared equals I for the later feedback +statement. The local endpoint derivation does not need a scalar formula +for RK. It is valid when source, target and mode values are correlated. + +The literal graph expansions are as follows. Each R and K acts after the +displayed translation on a port, in the indicated replica. + +| Graph | Replica 0 | Replica 1 | +| --- | --- | --- | +| F input mode | u0 -= R X1 | u1 -= R L X0 | +| F output mode | u0 += R X0 | u1 += R X1 | +| F output target | Y0 += K u1 | Y1 += L K u0 | +| B input target | X0 -= 8 L K u1 | X1 -= 8 K u0 | +| B input mode | u0 -= R Y0/8 | u1 -= R Y1/8 | +| B output mode | u0 += R L Y1/8 | u1 += R Y0/8 | + +Translate each relevant source or target array, perform its ADD group, +then translate that same array again. Thus each orientation has 448 +literal translation maps and 2688 added scalar ADDs. It has no added +native child. The scalar subtotals are 433924 for the forward pair and +442884 for the backward pair. They exclude execution of the translation +maps, the retained native wrappers, and a global owner schedule. Each +pair retains native rank 11044 and restores 944 ordinary helper inputs, +subject to the pinned core contract. + +## Exact port routes and phases + +Use full-cover fields. At owner d, Q_p is C_(d p) tensored the required +number of times. An actual port route has the form + +```text +M_(g,a) f(d,z) = f(dg,z+d a), g p=p. +``` + +The owner-dependent translation by d p commutes with this route: the +source translation is d g p=d p, and address translations commute. +Since C_(d p) is a fixed linear combination of I and that translation, +the same statement holds for Q_p, at every tensor size, with no extra +phase. It follows for A and T. This argument includes the exact inherited +entry and exit translations a. It does not replace the cover route by +an address permutation at one fixed owner. + +The checker reconstructs all 1008 actual routes from the pinned retained +geometry and binds their labels and translations to the original complex +DATA-PHASES ledger. It checks each route's inverse and fixed port line. +It also checks the inherited positive line kernel on all 57344 spatial +columns, then checks its square, fourth power, and inverse. A global-phase +change and omission of the required L factor are rejected. + +For the routed maps + +```text +G_s=R D_s(I-T), H_t=(I+T)D_t^-1 K, +``` + +G_s H_t is zero for every pair of stages. The cancellation occurs before +R or K and does not require equal routed centre images. Any ordinary +bank operation which is identical in both replicas and commutes with T +can be inserted between these maps. The actual per-port scalar bank +shears have this property. A gate that mixes distinct ports needs its +own check and is not covered by this statement. + +## Verification boundary + +The independent checker imports no producer code. It checks the literal +boundary event order, coefficients and frame records, a free ordered +operator calculation for both endpoint maps, the exact line kernels, +the route covariance, and the stated component counts. It uses the +existing full-mode core as a pinned dependency. + +The earlier complementary-gap proof used a Walsh retarget and a scalar +replica normalization. The earlier original-complex phase-gap word had +the residual R(I-Q squared)K. This construction replaces that residual +with zero by a port-dependent monomial replica normalization in the +original frames. It does not prove that a final odd H or G read is free. +In particular, the old mode transport identities of the form Q H equals +H A inverse and G Q equals minus A inverse G used a common mode action A. +They do not follow for the present port-dependent A and are not used. + +To insert the graphs around an unchanged global core, let E be its +monomial input view from global fields to local input fields, and let O +be its output view from local output fields to global fields. The added +graphs are E inverse P E before that core and O S O inverse after it. +This keeps the original core views unchanged. It adds explicit view +maps, which require a separate count. It also requires the stated mode +views at their actual physical locations. The local (I,F) mode contract +alone does not supply a persistent nine-call mode path. + +The physical paired-owner schedule, promoted-role replacement, arbitrary +mode closure, recursive admission, precision, and complete supplier +invoice remain separate. No kappa improvement is claimed here. + +Research and verification: OpenAI Codex under the user's direction, with +substantial AI assistance. No independent human review is claimed. diff --git a/research/original-paired-gap/evidence/NEGATIVE-WITNESSES.json b/research/original-paired-gap/evidence/NEGATIVE-WITNESSES.json new file mode 100644 index 0000000000..14c6757630 --- /dev/null +++ b/research/original-paired-gap/evidence/NEGATIVE-WITNESSES.json @@ -0,0 +1,67 @@ +{ + "arithmetic": "Exact rational real and imaginary parts", + "controls": { + "backward": { + "missing_input_graph": { + "character": 0, + "input_coordinate": 112, + "nonzero_error": [ + "-1", + "0" + ], + "output_coordinate": 0 + }, + "missing_translations": { + "character": 1, + "input_coordinate": 929, + "nonzero_error": [ + "0", + "4" + ], + "output_coordinate": 0 + }, + "mode_preload_before_old_mode_read": { + "character": 0, + "input_coordinate": 816, + "nonzero_error": [ + "1", + "0" + ], + "output_coordinate": 0 + } + }, + "forward": { + "missing_input_graph": { + "character": 0, + "input_coordinate": 0, + "nonzero_error": [ + "-1", + "0" + ], + "output_coordinate": 112 + }, + "missing_translations": { + "character": 1, + "input_coordinate": 0, + "nonzero_error": [ + "-2", + "0" + ], + "output_coordinate": 112 + }, + "target_correction_before_mode_update": { + "character": 0, + "input_coordinate": 704, + "nonzero_error": [ + "-1", + "0" + ], + "output_coordinate": 112 + } + } + }, + "inherited": "Formal row generation uses the declared package; character evaluation is new review code", + "native_eigenvalue": "C_p has eigenvalue i^parity(character & port_label)", + "scope": "Each wrapper mutation fails on an actual spatial Fourier character at tensor depth one", + "status": "PASS_ACTUAL_NATIVE_NEGATIVE_WITNESSES" +} diff --git a/research/original-paired-gap/evidence/OWNER-BINDING-REVIEW.json b/research/original-paired-gap/evidence/OWNER-BINDING-REVIEW.json new file mode 100644 index 0000000000..6a3cc37b9d --- /dev/null +++ b/research/original-paired-gap/evidence/OWNER-BINDING-REVIEW.json @@ -0,0 +1,81 @@ +{ + "added_real_scalar_primitives": 2093056, + "additional_composite_views": 101376, + "archive_sha256": "f1da80610bf33c58527f18ad63b4350d0b864e1d4486141ee17ac9bed4d529d6", + "backfills": 1152, + "checker_sha256": "3a29f3540abd8f0e911cd94188fc841eb2bc6cc28789d3d693c84051b7bfce0d", + "complete_pairs": 72, + "conditional_paid_rank": 1116288, + "conditional_productive_stock": 15488, + "conditional_profile": { + "1": 349604, + "2": 60192, + "3": 62585, + "4": 20448, + "5": 11808, + "7": 7, + "8": 512, + "9": 1152, + "16": 512, + "24": 256, + "32": 256, + "40": 256, + "48": 5634 + }, + "core_and_graph_scalar_subtotal": 31529248, + "deep_owner_chart_audit_repeated": false, + "fresh_one_shot_modes": 1152, + "graph_translations": 32256, + "maximum_child_rank": 48, + "maximum_shared_ordinary_owners_per_pair": 103, + "native_kernel_sweep_repeated": false, + "negative_controls": [ + "missing backfill", + "output graph before second core", + "old data used as mode" + ], + "new_mode_cover_maps": 1152, + "old_native_jobs": 69120, + "ordinary_helper_occurrences": 67968, + "ordinary_shared_owners_across_pairs": 1333, + "ordinary_shared_same_pending_child_and_disjoint_coordinates": true, + "original_events": 482, + "pairs_with_shared_ordinary_owners": 60, + "payload_pins": { + "history-encoding/FULL-MODE-PROGRAMS.json.gz": "f271842a741584389e166e700e262f161b0dd570ce8c7a540f2717e90ead5205", + "residual-syndrome/physical-algebra/ORIGINAL-PAIRED-GAP-PROGRAMS.json.gz": "42aeb0902d8b2330f9050718c6d949993111a9fd898acad599ec867bb63a2b20" + }, + "physical_stock": 15978, + "plan_sha256": "7bd786ba8e66408f02aa9ef446eaf20c1bfe981ea2e4dd1e5a929f0aa7767bc0", + "private_centre_references_in_each_core": { + "backward": 0, + "forward": 0 + }, + "producer_imports": [], + "resolved_findings": [ + "The cores preserve C by non-use, not by clearing. The proof now states this contract." + ], + "retained_idle_remainders": 7526, + "retained_reserved_private_fields": 490, + "retimed_positions": 626, + "scope": "Exact incremental owner/endpoint binding under the pinned complete native helper and one-shot mode contracts. No coupled output decoder, final H/G access, full global emitted word, finite invoice or supplier closure.", + "shared_old_jobs_including_backfills": 1369, + "source_commit": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f", + "source_pins": { + "circuit-interface/INTERFACE.json": "5c6c51fbffc07a683e922f17532fd90262ae9e23cc3560a696002073dd234ef3", + "coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.json": "e79603bee7c4077b3637f9b7891bac59719183e922a71d5994aaf9d405d5322f", + "history-encoding/ONE-SHOT-MAX48.json": "6563798aeebe83d2d62c9d089012d2b7cea3818e673deaa4b2653be183a0ed21", + "interface-proof/FULL-MODE-PORT-REVIEW.json": "ff123b08b3ac58f20d12d4fbec575472086ace1708d3242519884dbffe534372", + "interface-proof/ONE-SHOT-MODE-REVIEW.json": "36d8f5a98265f7f1c96ab49892b2520cb37fca6edf0347caf2e7f871fb1db026", + "residual-syndrome/physical-algebra/ORIGINAL-PAIRED-GAP.json": "4b08a2b212abd99b79186e88ea3a4293085e603a36f5920261f227968194b71f", + "source-domain/PAIRED-OWNER-PATCH.json": "f39e8e0a39e423a5218a63590f40910b5c46216b170bc8ebe3b6dc61831b38c0", + "source-domain/paired-original/BINDING.json": "773a96832486605fc64a7bb982ff8b5315b5774325a7a169117cc9636c3c4af6", + "source-domain/paired-original/PROOF.md": "888852204cef466e051e2e16c84de68db05ab3995ac47c8c15fbf81356613676", + "source-domain/paired-original/bind_pairs.py": "b085863136994d96019a3046693ad88284899833de6263ec90c0520711bca638", + "temporal-reuse/PAIRED-OWNER-PATCH-REVIEW.json": "9acaae3a055d33665c12f938cbc1ee03e2d248f8cdbf493cb1b14ef9954bb882" + }, + "source_proof_before_clarification_sha256": "59ac17b6b2bc9c2e615a4405dcdda400fd22377f0e1560ac3c35c896a1dc4b77", + "status": "PASS_INDEPENDENT_ORIGINAL_COMPLEX_PAIRED_BINDING", + "stock_and_profile_use_complete_cover_families": true, + "template_compressed_sha256": "2acf02b418078e37090495c601fe550448751d4f35912757b13a1f778efc7760" +} diff --git a/research/original-paired-gap/evidence/OWNER-BINDING-REVIEW.md b/research/original-paired-gap/evidence/OWNER-BINDING-REVIEW.md new file mode 100644 index 0000000000..65979d1019 --- /dev/null +++ b/research/original-paired-gap/evidence/OWNER-BINDING-REVIEW.md @@ -0,0 +1,134 @@ +# Independent review of the original-complex paired owner binding + +The binding passes. It composes the accepted owner permutation with the +reviewed original-complex paired word and fresh one-shot modes. All 72 +pairs can use the stated serial core schedule under the pinned native +contracts. This result does not close the coupled output map or establish +a Fourier supplier. + +The review found one documentation error. The original proof said that +the first core clears the private work fields. Both literal full-mode +cores have no C references. They preserve the eight C fields by non-use. +The author corrected this statement and made the complete-cover family +convention explicit. The producer and binding receipt did not change. +The [original proof snapshot](FROZEN-SOURCE-PROOF.md) is retained. The +checker verifies the two exact prose changes. + +## Inputs and method + +The [checker](review_binding.py) imports no producer or other checker. +It reads the selected archive, its exact global template, the owner plan +from commit `bce54fb3f895cbe5cd4c0eb477c3afeed100190f`, the accepted owner +patch, the paired native payload, and their review receipts. All input +hashes are in [REVIEW.json](REVIEW.json). + +The reviewed source is +[paired-original/PROOF.md](../../source-domain/paired-original/PROOF.md), +with SHA256 +`888852204cef466e051e2e16c84de68db05ab3995ac47c8c15fbf81356613676`. +Its [producer](../../source-domain/paired-original/bind_pairs.py) has +SHA256 `b085863136994d96019a3046693ad88284899833de6263ec90c0520711bca638`. +Its [binding receipt](../../source-domain/paired-original/BINDING.json) +has SHA256 +`773a96832486605fc64a7bb982ff8b5315b5774325a7a169117cc9636c3c4af6`. +An executed producer replay is byte-equal to that receipt. + +The complete 280-slot chart audit and the exact local native kernels are +accepted dependencies. This review does not repeat them. It checks the +new composition and literal binding against their frozen results: + +- [Owner patch review](../../temporal-reuse/PAIRED-OWNER-PATCH-REVIEW.md). +- [Original-complex paired native review](../../coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md). +- [Full-mode local review](../../interface-proof/FULL-MODE-PORT-REVIEW.json). +- [One-shot mode endpoint review](../../interface-proof/ONE-SHOT-MODE-REVIEW.json). + +## New checks + +The 626-position schedule contains all 482 original events once. Each +replica keeps its original event order. Each pair has an input graph, +two complete serial core sweeps, and an output graph in that order. +Every old tail follows the output graph. Prefix and suffix operations +must finish over the complete cover; this is not a per-owner loop that +runs both cores before the next owner. + +The checker reconstructs each release window from the ordered list of +data touches. It then checks all 69,120 old helper jobs in the patched +assignment. Every job retains its exact route and width. Every job avoids +both active data pairs and all fresh modes. Each core has 704 distinct +active owners. The 1,152 promoted jobs remain fixed width-nine jobs at +their original slots. Each has one explicit backfill on its original +owner, before its core and after the paired prefix. All 7,526 original +idle remainders remain present. + +There are 1,333 shared ordinary-helper occurrences across 60 pairs. At +most 103 ordinary owners are shared in one pair. Each shared owner uses +the same pending child and disjoint coordinate intervals in its two +jobs. Including backfills gives 1,369 shared old-job occurrences. The +accepted complete-helper contract preserves arbitrary logical content +between the stated frames. The disjoint native factors commute. These +facts justify the consecutive frames of each shared owner. No paired +graph touches an ordinary helper. This argument does not permit an +active data or mode role to be shared. + +The fresh modes are exactly the 1,152 complete-cover families +`[14336,15488)`, used once each. The checker binds every stage's preparation +and completion to the reviewed rank-48 split. It checks the final cover +correction on all new modes. Their contents remain arbitrary; their +coupled output contents are not restored by this schedule theorem. + +All graph source and target roles, endpoint frame IDs, original port +translations, and replica choices match the reviewed paired payload. +The complete native-core hash agrees across the paired word, local +review, and one-shot history. Both full-mode core streams have zero +references to C. The original 490 private fields remain reserved under +the inherited core workspace contract. The reserved tableau fields are +not spare productive families. + +Three modified inputs are rejected by the same checks used for the valid +binding: remove a backfill, move the paired output graph before the +second core, or use an old data family as a fresh mode. + +## Exact counts and limits + +The independently reconstructed conditional profile is + +```text +{1:349604, 2:60192, 3:62585, 4:20448, 5:11808, + 7:7, 8:512, 9:1152, 16:512, 24:256, + 32:256, 40:256, 48:5634}. +``` + +Its rank mass is 1,116,288. The conditional productive stock is 15,488 +families and the physical stock is 15,978 families, each with its complete +cover range. The productive rank difference is 14,336. The maximum child +rank is 48, with width margin `73^2-2*48^2=721`. + +The exact graph ledger is 193,536 physical ADDs, 32,256 local translations, +and 101,376 additional composite endpoint views. There are also 1,152 new +mode cover corrections. The graph scalar subtotal is 2,093,056 real +primitives. Including all 144 local cores gives 31,529,248. These scalar +counts do not include native child work, the full implementation of +composite global maps, or finite precision costs. + +This review accepts the incremental owner and endpoint composition. +It does not supply a full emitted global word, the final H/G access, +the coupled data and mode decoder, the complete finite invoice, or +recursive supplier admission. It makes no kappa claim. + +## Reproduction + +From the workspace root: + +```text +python3 -I -O -B work/centre-encoding-campaign-20261014/lanes/circuit-interface/paired-original-review/review_binding.py +``` + +Expected status: + +```text +PASS_INDEPENDENT_ORIGINAL_COMPLEX_PAIRED_BINDING +``` + +The checker uses explicit failures and runs with assertions disabled. +The review was produced by an independent OpenAI Codex agent. It is not +a claim of independent human review. diff --git a/research/original-paired-gap/evidence/OWNER-BINDING-SOURCE.txt b/research/original-paired-gap/evidence/OWNER-BINDING-SOURCE.txt new file mode 100644 index 0000000000..4ea10a0a9f --- /dev/null +++ b/research/original-paired-gap/evidence/OWNER-BINDING-SOURCE.txt @@ -0,0 +1,219 @@ +# Paired calls in the original complex owner schedule + +The selected schedule can run the new original-complex paired graphs. +Use the accepted 280-slot owner permutation, 1,152 fresh mode families, +and 1,152 explicit backfills of the displaced old helper jobs. Run each +pair of cores in sequence. No second core workspace or extra recursive +child is needed for pairing itself. + +This is an owner and endpoint scheduling result. It retains the complete +one-shot mode preparation and completion bill. It does not close the +coupled data and mode output map or supply the missing final H/G access. + +## Inputs + +The checker pins the selected archive at commit +`bce54fb3f895cbe5cd4c0eb477c3afeed100190f`. The archive SHA256 is +`f1da80610bf33c58527f18ad63b4350d0b864e1d4486141ee17ac9bed4d529d6`. +It reads the literal `GLOBAL-TEMPLATE.json.gz` and the selected owner +plan. All other dependencies are separate frozen results: + +- [The paired owner proof](../PAIRED-OWNER-PROOF.md) and + [its independent review](../../temporal-reuse/PAIRED-OWNER-PATCH-REVIEW.md). +- [The original complex paired word](../../residual-syndrome/physical-algebra/ORIGINAL-PAIRED-GAP-PROGRAMS.json.gz), + with decompressed SHA256 + `42aeb0902d8b2330f9050718c6d949993111a9fd898acad599ec867bb63a2b20`. +- [Its native and phase review](../../coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md). +- [The full-mode local review](../../interface-proof/FULL-MODE-PORT-REVIEW.json). +- [The one-shot mode proof](../../history-encoding/ONE-SHOT-MODE-PROOF.md), + [its independent endpoint review](../../interface-proof/ONE-SHOT-MODE-REVIEW.json), + and [the maximum-rank-48 child plan](../../history-encoding/ONE-SHOT-MAX48.json). + +The paired payload contains two copies of the same full-mode core. Its +decompressed SHA256 is +`f271842a741584389e166e700e262f161b0dd570ce8c7a540f2717e90ead5205`. +The promoted local roles are +`[225,226,229,232,241,242,257,258]`. These are exactly the eight fixed +promoted roles in the accepted owner patch. Each core has 224 data roles, +eight arbitrary mode roles, and 472 ordinary helper roles. + +## The event order + +Consecutive calls `(2j,2j+1)` have the same stage, orientation, and bank +pair. Their replicas are `r` and `r+8`. Use this order for each of the +72 pairs: + +1. Prepare both fresh mode cohorts. +2. Run the paired input graph over the complete cover. +3. Run the first core's eight old-owner backfills, then its core sweep. +4. Run the second core's eight old-owner backfills, then its core sweep. +5. Run the paired output graph over the complete cover. +6. Complete both fresh mode cohorts. +7. Run the original first tail, then the original second tail. + +Each prefix and suffix is a complete cover sweep. It is not an operation +on one cover class followed immediately by both cores at that class. +The complete sweeps are required because a helper route can read a +different cover class. The two core sweeps run in sequence and reuse the +same private work fields under the retained core workspace contract. +The literal full-mode cores contain no C references, so they preserve +those eight fields by non-use. The other private work fields remain +reserved. + +The old schedule has 482 events. The accepted paired schedule contains +those same events once each, plus 144 endpoint markers. Its 626 positions +retain the exact event order within each replica. The new mode operations +use only fresh families and therefore add no release or deadline for an +old helper owner. The input and output markers already account for every +new scalar touch of the two active old data pairs. + +## Old helper owners and backfills + +The old assignment is not valid for this event order. It has 164 invalid +helper slots after the full tails are delayed. The accepted patch changes +280 slots in 116 cycles. It moves complete equal-width jobs and retains +their owner routes. The new checker applies that exact permutation and +rechecks each job against the full paired release and deadline windows. +Both active data pairs are excluded throughout both cores. + +The 1,152 promoted old helper jobs stay at their original call and role +in that patch. Each has width nine. Replace the core's use of its old +owner by a fresh mode field. Execute the old complete rank-nine job on +the old owner immediately before that core instead. This is a backfill, +not a deletion of an old output. It uses the exact old owner route and +the complete old input and output wrappers. + +The 67,968 ordinary helper occurrences and these 1,152 backfills contain +all 69,120 old helper jobs exactly once. All 7,526 old idle remainders +remain unchanged. The backfill owners avoid both paired data sets, and +they are distinct from the fresh modes. No ordinary helper is also an +active data or mode field in either member of the pair. + +An ordinary helper owner can occur in both cores. This does not require +two physical copies. A complete helper job sends its arbitrary logical +content h from its specified input frame to its specified output frame +without changing h. The selected owner jobs occupy disjoint pending +axes in the owner's exact chart. Their native factors commute, and the +retimed window check places each job before its completion deadline. +Thus the second core receives the required next frame and arbitrary h. +The local core theorem applies even when h is correlated with other +inputs. No intermediate scalar operation on that helper is inserted. +This argument does not permit sharing an active data or mode role. + +## Physical fields and mode histories + +Keep old productive families `[0,14336)`. At call time t, assign its +eight modes the fresh families `[14336+8t,14344+8t)`. These 1,152 families +are never old helper owners. Their inputs are arbitrary; no mode is +assumed zero. + +Rename the old private namespace without changing its contents or size: + +| Purpose | New range | +| --- | --- | +| Private centres | `[15488,15496)` | +| Reserved tableau | `[15496,15976)` | +| Coefficients | `[15976,15978)` | + +All stock and child counts here use the selected per-cover family +convention. Each family has its full cover range. The physical stock is +15,978 families. The candidate productive stock is 15,488. The latter +is a proposed supplier width only after the coupled +output content has been repaired. It is not an established Fourier +supplier width from this scheduling result alone. + +At stage s, the reviewed one-shot history has preparation rank `8s`, +active rank 9, and future completion rank `64-8s`. The sum is 73. The +rank-56 and rank-64 coordinate factors are split as 48+8 and 48+16 +inside their exact native recipes. Each mode is used in only one core. +Its completion occurs after both cores and their paired output graph. +There is no assumption of a repeated nine-call mode path. + +When a mode is stored in cover chart d, its completed frame is the full +native frame in that chart. Apply the retained cover correction also to +the 1,152 new mode families. Its exact translation is +`delta_i=(weight(row_i(d))-1)/2 mod 2`. This is 1,152 further map +applications. It introduces no child and does not repair coupled mode +content. + +## Native endpoint views + +The local paired word uses the original complex endpoint types +`(X,Y,u)=(Q,I,I)` at input and `(F,F Q^-1,F)` at output. The pinned native +review checks all actual port routes and the exact original entry and +exit translations. The two replicas have identical views at a given +stage and port. + +Let E map the stored global input fields to the local input fields. Let +O map the local output fields to the stored global output fields. Keep +the original core, including E and O. Insert + +```text +E^-1 P E before the core sweeps, +O S O^-1 after the core sweeps. +``` + +Here P and S are the literal paired prefix and suffix. These formulas +make the physical operation equal to `O S core P E`; no original view +is omitted or applied twice without its inverse. For modes, use the +reviewed one-shot input and output views. Its later completion stays +outside this block. The views are monomial maps and require no recursive +child. Their full scalar and address cost remains part of a future +finite invoice. + +The forward prefix touches 240 endpoint streams and the suffix touches +464. The backward counts are 464 and 240. Applying each touched view +and its inverse costs at most 1,408 composite monomial maps per pair, +or 101,376 over all pairs. This is an explicit unfused count. It is +separate from the local paired word's 448 translations per pair and +from mode preparation, completion, backfill, and final cover maps. +It does not claim that one composite view has unit real-primitive cost. + +## Complete conditional child count + +Relative to the selected original profile, the complete one-shot change +is + +```text +{8:-640, 9:+1152, 16:+512, 24:+256, + 32:+256, 40:+256, 48:+768}. +``` + +It includes every removed centre child, every new mode preparation and +completion, and every displaced old owner job. Pairing adds no other +child. The resulting conditional profile is + +```text +{1:349604, 2:60192, 3:62585, 4:20448, 5:11808, + 7:7, 8:512, 9:1152, 16:512, 24:256, + 32:256, 40:256, 48:5634}. +``` + +Its paid rank is 1,116,288. The candidate productive rank is +`15488*73=1130624`, with difference 14,336. The maximum child rank is +48, so the inherited width margin is `73^2-2*48^2=721`. + +There are 40 forward pairs and 32 backward pairs. The literal added +graphs contain 193,536 physical ADDs and 32,256 local translations. +Their added real scalar subtotal is 2,093,056. The two cores and graphs +have subtotal 31,529,248. These numbers exclude the native children and +the full global monomial and finite precision implementation. + +## Verification and limits + +`bind_pairs.py` reads pinned inputs and reconstructs the paired event +order, exact old-job permutation, full release/deadline checks, protected +family allocation, all backfills, graph endpoint uses, and child profile. +It rejects the unpatched owner assignment, one omitted backfill, and an +old data family used as a mode. `BINDING.json` records all 72 pairs and +all 1,152 backfill routes. The checker uses explicit failures and runs +with Python assertions disabled. + +This construction solves the local-pair owner scheduling question. +The one-shot history theorem and the local paired native theorem remain +explicit dependencies. A full emitted global word, the coupled output +decoder, final H/G access, the complete finite invoice, and recursive +supplier admission remain open. No kappa improvement is claimed. + +Research and verification used OpenAI Codex under the user's direction. +There is no claim of independent human review. diff --git a/research/original-paired-gap/evidence/PACKAGE-REVIEW.json b/research/original-paired-gap/evidence/PACKAGE-REVIEW.json new file mode 100644 index 0000000000..452bf2f9d9 --- /dev/null +++ b/research/original-paired-gap/evidence/PACKAGE-REVIEW.json @@ -0,0 +1,38 @@ +{ + "executed_checks": [ + "29-file cold replay against isolated pinned Git objects with no alternates", + "Independent rectangular physical-frame example", + "Exact actual-character witnesses for six wrapper mutation controls", + "Independent wrapper coefficient and native-rank census", + "Byte-identical loader and five source notices" + ], + "inherited_or_not_run": [ + "Old native core kernels and complete helper interface inherited", + "Owner patch, one-shot histories and global invoice not replayed", + "No global decoder, supplier admission, precision calculation or kappa improvement", + "No repository-wide suite or GitHub publication review" + ], + "material_findings": [], + "proof_scope": [ + "Typed monomial-square theorem and both physical words", + "Fixed native pair under inherited raw-core contract", + "Actual-route all-stage annihilation", + "Declared local invoice and scope boundaries" + ], + "review_files": { + "COLD-REPLAY.json": "38eea308b27075bb3c9127e22da2e5da168c366c6c8e33935dea8bd8fe44666d", + "INDEPENDENT-ALGEBRA.json": "9d5146ea7a8feb9e3f7a99e613841f793ca7afea2db8caf6ea8895e11fa1cf52", + "NEGATIVE-WITNESSES.json": "1992edbbe31aedf839ccb2cdd37c77e7060018fd65032f34d044afc348808b1c", + "PINS-AND-INVOICE.json": "9bbcf94527b80c8b85c27f008b6d5f46bee89a306061ff2e20dfc4b31efb6e41", + "REVIEW.md": "9bf3406f11dd1abe888eed1ce2f1f9f0cb43be5a0963565e22d3dfa160768676", + "check_negative_witnesses.py": "f39e62fb2114d487bc0f38f7293955b9ab4c3ec95331c5b3f31c9ed75ba74a82", + "cold_review.py": "d02b53ddaacd435295899f87c034631fc0ab8670745c115bfbc4c3639f6a8fbe", + "independent_algebra.py": "fe77f39f802cc78ed0dc77a00dc678aa11a6f25d85cfc32b4550f281e5f2bbe5" + }, + "reviewed_manifest_sha256": "727b5b524c26ab5b9617fb8cbe259a501e121e6067d6b4ddb533ec6a277dca51", + "reviewed_package_bytes": 673318, + "reviewed_package_files": 29, + "reviewer": "Separate OpenAI Codex agent; no independent human review claimed", + "source_base": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f", + "status": "PASS_INDEPENDENT_PORTABLE_PAIRED_GAP_REVIEW" +} diff --git a/research/original-paired-gap/evidence/PACKAGE-REVIEW.md b/research/original-paired-gap/evidence/PACKAGE-REVIEW.md new file mode 100644 index 0000000000..d12ec8571a --- /dev/null +++ b/research/original-paired-gap/evidence/PACKAGE-REVIEW.md @@ -0,0 +1,142 @@ +# Independent review of the portable paired-gap package + +The reviewed local theorem, fixed paired word, and declared replay pass. +No material defect was found in the reviewed scope. This is a separate +OpenAI Codex agent review. It is not a human review or a formal proof. + +The frozen package is +`publication/original-paired-gap-package`, relative to the campaign. +Its `PACKAGE-HASHES.json` has SHA-256 +`727b5b524c26ab5b9617fb8cbe259a501e121e6067d6b4ddb533ec6a277dca51`. +The manifest binds 29 files and 673,318 bytes. This review did not change +those files. The source commit is +`bce54fb3f895cbe5cd4c0eb477c3afeed100190f`. + +## Proof review + +For invertible Q, set S=Q squared and +`A=[[0,I],[S^-1,0]]`. Direct multiplication gives +`T=QA=[[0,Q],[Q^-1,0]]`, `T^2=I`, and `SA=A^-1`. +These identities do not require Q to have order four. Legal monomial +implementations of S and its inverse remain hypotheses. + +The physical conversion uses the stated common productive frames and +the two R/K intertwiners. In the forward word, the mode preload gives +`u=z-RTx`. The mode output update gives `v=-z-R(I-T)x`. Only then does +the target update add `TKv`, which gives `y'=y+x+(I+T)Kv`. +In the backward word, the input target update must read old z. It gives +`x-=8TKz` before the mode preload. The raw word and output mode update +then give `x'=x-y-8(I+T)Kz` and `v=-z-R(I-T)y/8`. +The formulas and both inverse orders hold for arbitrary mode inputs. +No step moves A through R or K or defines A on the mode space. + +After actual routes identify one global T, the cancellation +`R_s(I-T)(I+T)K_t=0` holds at every stage pair. It also gives the stated +pairwise-zero residual products and their finite product formula. +An intervening data map must meet the stated commutation condition. +Matching replica views are required. The proof does not infer a terminal +mode transport identity from the data-side A. + +The fixed line identity has its full complex phase: +`C_p=((1+i)I+(1-i)X_p)/2`, so `C_p^2=X_p`. Exact tensoring gives the +same relation at every positive depth. Two replicas are used once at +each depth; the proof does not tensor the replica index. An actual +affine route fixes p. Its owner-dependent direction is therefore +unchanged, and its address translation commutes with the line. This +proves the stated route covariance at every tensor depth. + +An additional exact check, written for this review without package or +producer imports, uses three data coordinates and two mode coordinates +per replica. It has rectangular R/K, nontrivial productive frames, +`Q^4 != I`, and `QKR != KRQ`. Both physical words agree with the claimed +logical formulas on all 16 input columns. Both inverse orders pass. +Missing frame intertwiners and reversed backward old-mode order fail. +The example supports the general proof; it does not replace that proof. +See `independent_algebra.py` and `INDEPENDENT-ALGEBRA.json`. + +## Cold replay and checker inspection + +The cold run copied only the 29 declared files to a new temporary +directory. Its separate bare Git database contains the source commit, +the three required trees, the selected archive blob, and two attribute +blobs. It has no alternates, checkout, parent commits, or campaign code. +The archive blob is byte-identical to the original pinned Git object. +Python ran with `-I -O -B`; the replay uses explicit failures, not +assertions. All four documented PASS lines were produced. The output +receipts match the producer receipts byte for byte: + +| Output | SHA-256 | +| --- | --- | +| PAIR-CHECKS.json | `89c50c9ece5c209c3f17ed9cea7dfd79715a8ef7c4031603adbc8e1a274f6089` | +| NATIVE-CHECKS.json | `ee369640862c4961be56327cd248599257469fbd090ba3b60814184be2f7f074` | +| ALGEBRA-CHECKS.json | `49ed9629670af3825290409ef890e62850d71bec89aba9e3355277ec3303785a` | +| REPLAY.json | `12481f1fdb5464bd1bcba8950599da05a5ea0994e1e3559157d21423ef254e75` | + +See `cold_review.py` and `COLD-REPLAY.json` for the isolated paths and +exact command. The replay took about 6.54 seconds on this run. This is +not a performance claim. + +The review read all five executable files. The scalar checker compares +the complete 704-column core maps and 1,408-column paired maps. It +keeps arbitrary modes, verifies all ordinary helper columns, verifies +private-field non-use, and checks both inverse orders. The frame ledger +and native-event equality bind the retained core to the historical +source. The formal port words preserve operator order and only reduce +the individual native fourth-power identities. + +The native checker verifies all literal wrapper groups, coefficients, +frames, and translation sandwiches. It checks 57,344 exact spatial +line columns and reconstructs all 1,008 actual routes from the original +phase ledger. The general checker uses only inverse cancellation for +Q and proves the displayed formal identities under the typed premises. + +The wrapper controls are also meaningful for the actual native lines. +This review evaluates each formal mutation difference on a spatial +Fourier character with the exact eigenvalue `i^parity(character & p)`. +Every missing graph, omitted translation, and wrong order has an exact +nonzero witness at depth one. For example, omitted translations produce +errors -2 in the forward word and 4i in the backward word at character +1. See `check_negative_witnesses.py` and `NEGATIVE-WITNESSES.json`. +This extra witness check uses declared package row generation and a +new character evaluator; it is not a second independent full simulator. + +## Local invoice and source lineage + +An independent event census gives 2,688 wrapper ADDs and 448 literal +translations in each direction. The forward wrapper has 1,792 ADDs of +absolute coefficient 1 and 896 of coefficient 1/4. Its scalar allowance +is 25,088. The backward wrapper has 1,792 ADDs of coefficient 1/8 and +896 of coefficient 2. Its allowance is 34,048. With two core allowances +of 204,418, the totals are 433,924 and 442,884. + +The native profile of each core is +`{1:2412, 2:418, 3:432, 4:142, 5:82}`. Its computed rank mass is 5,522, +so the pair has mass 11,044. The pair retains 10,112 native events and +adds no native child. Wrapper infinity-norm bounds 57/58 and 9/8 follow +from the stated chronological order and the exact R/K row norms. + +The loader is byte-identical to its declared earlier Git source. +All five retained license and contributor notices are byte-identical +to the pinned source objects. The package preserves the earlier +lineage and discloses AI assistance. See `PINS-AND-INVOICE.json`. + +## Scope and limits + +The review accepts the declared local result and portable verification. +It does not repeat every old native kernel calculation. The old core +kernel and full helper interface remain inherited, as the package says. +The review inspected the inherited local and native review evidence. +It did not rerun the separate owner patch, one-shot histories, or their +global invoice. + +The scalar totals exclude native child execution, native wrapper and +address-map execution, owner access, mode histories, displaced-owner +backfills, the final decoder, storage, precision, and recursive assembly. +A literal translation count is not a scalar execution cost. The zero +product does not give free odd-phase reads or injections. + +No complete global word, arbitrary-mode closure for a supplier, recursive +admission, kappa improvement, or repository-wide verification is claimed +or established by this review. Owner composition is separate archival +evidence. The package states these limits clearly. GitHub link and +rendering checks remain part of the coordinator's publication review. diff --git a/research/original-paired-gap/evidence/PAIR-CHECKS.json b/research/original-paired-gap/evidence/PAIR-CHECKS.json new file mode 100644 index 0000000000..2566e24a25 --- /dev/null +++ b/research/original-paired-gap/evidence/PAIR-CHECKS.json @@ -0,0 +1,49 @@ +{ + "orientations": { + "backward": { + "added_native_children": 0, + "added_scalar_allowance": 34048, + "arbitrary_mode_inputs": 16, + "both_algebraic_inverse_orders": "PASS", + "complete_scalar_allowance": 442884, + "core_input_columns": 704, + "core_scalar_allowance": 204418, + "literal_translation_maps": 448, + "negative_controls": [ + "missing output basis", + "missing input graph", + "missing translations", + "mode preload before old-mode read" + ], + "pair_input_columns": 1408, + "physical_ADDs": 2688, + "private_fields": "No access; arbitrary values are preserved", + "restored_ordinary_helpers": 944, + "retained_native_events": 10112, + "retained_native_rank_mass": 11044 + }, + "forward": { + "added_native_children": 0, + "added_scalar_allowance": 25088, + "arbitrary_mode_inputs": 16, + "both_algebraic_inverse_orders": "PASS", + "complete_scalar_allowance": 433924, + "core_input_columns": 704, + "core_scalar_allowance": 204418, + "literal_translation_maps": 448, + "negative_controls": [ + "missing output basis", + "missing input graph", + "missing translations", + "target correction before mode update" + ], + "pair_input_columns": 1408, + "physical_ADDs": 2688, + "private_fields": "No access; arbitrary values are preserved", + "restored_ordinary_helpers": 944, + "retained_native_events": 10112, + "retained_native_rank_mass": 11044 + } + }, + "status": "PASS_EXACT_ORIGINAL_PAIRED_MAPS" +} diff --git a/research/original-paired-gap/evidence/PINS-AND-INVOICE.json b/research/original-paired-gap/evidence/PINS-AND-INVOICE.json new file mode 100644 index 0000000000..5e8c7518ce --- /dev/null +++ b/research/original-paired-gap/evidence/PINS-AND-INVOICE.json @@ -0,0 +1,52 @@ +{ + "costs": { + "backward": { + "complete_explicit_scalar_allowance": 442884, + "native_profile_per_core": { + "1": 2412, + "2": 418, + "3": 432, + "4": 142, + "5": 82 + }, + "native_rank_mass_per_pair": 11044, + "translation_maps": 448, + "wrapper_abs_coefficients": { + "1/8": 1792, + "2": 896 + }, + "wrapper_scalar_allowance": 34048 + }, + "forward": { + "complete_explicit_scalar_allowance": 433924, + "native_profile_per_core": { + "1": 2412, + "2": 418, + "3": 432, + "4": 142, + "5": 82 + }, + "native_rank_mass_per_pair": 11044, + "translation_maps": 448, + "wrapper_abs_coefficients": { + "1": 1792, + "1/4": 896 + }, + "wrapper_scalar_allowance": 25088 + } + }, + "limits": "Core scalar allowance is reproduced by the package cold replay; native execution, monomial execution, global owner/decoder/supplier costs remain excluded.", + "source_checks": { + "loader_origin": { + "commit": "7649d9ceecec949541bec4bbde5929344166ba59", + "path": "research/native-source-codes/source_data.py", + "sha256": "d23924511e3aed41e5e64511ca70126a636d91c8aa02e656cb61d6ceca1fe0a0" + }, + "notices/LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "notices/research/gauge44-slots-t16/NOTICE.md": "7a8d17b04da1e6c9d0ec217fb5bda72faa09d9a21695128722dd1e2827870fcf", + "notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md": "a75967ebc34e3bf2ff2c25c08e6c7f1a61b0c0d171cfd1b62196ae2caaf2c610", + "notices/research/gauge44-slots-t16/construction/NOTICE.md": "defe7e44af610e25a6c50c1c3b2efd0972d0690574995c0c872fc50eebf4c816", + "notices/research/gauge44-slots-t16/t16/NOTICE.md": "902370e6bfcd39dbea2ece474f15fccbcce3b8e966b2b94066bd03e5174591b5" + }, + "status": "PASS_INDEPENDENT_PIN_AND_INVOICE_CHECK" +} diff --git a/research/original-paired-gap/evidence/PRE-WRAP-MANIFEST.json b/research/original-paired-gap/evidence/PRE-WRAP-MANIFEST.json new file mode 100644 index 0000000000..ded0ccd685 --- /dev/null +++ b/research/original-paired-gap/evidence/PRE-WRAP-MANIFEST.json @@ -0,0 +1,256 @@ +{ + "file_count_excluding_manifest": 49, + "files": [ + { + "bytes": 3258, + "path": "NOTICE.md", + "sha256": "06ebe05bf4c5abcfa840a9b2bd3b58059b293dd23fc23eb9ca8454a56d1c9e5a" + }, + { + "bytes": 10553, + "path": "PROOF.md", + "sha256": "d71781dad19b6ef4683a49ef67aeba3123486429af75d4432eb3ba650841d2be" + }, + { + "bytes": 8573, + "path": "README.md", + "sha256": "664d1d91dacff672a9db6d6cf0430b23902e8045ee5f3b43de6229c5b2ea4615" + }, + { + "bytes": 8153, + "path": "SOURCES.json", + "sha256": "2ca472d13712383755b7f25794edb810e97401ecfd3fc8b1aa1b68a354b1b581" + }, + { + "bytes": 213376, + "path": "data/FULL-MODE-PROGRAMS.json.gz", + "sha256": "ebc17d1d4c51a9c6b3cb05670d970db3d3e1000f26f1d864cdb27523ce1997dd" + }, + { + "bytes": 269114, + "path": "data/INPUT-LINES.json", + "sha256": "500c09dfc1d27ffd107341adf4c3c6874ee2c84e1a8afad91d931ed9e88fd1d7" + }, + { + "bytes": 29886, + "path": "data/PAIRED-PROGRAMS.json.gz", + "sha256": "ed7702a3fac280238bcaf8af8387d53c59731b8c21c0301f3d84de971027e2d0" + }, + { + "bytes": 999, + "path": "evidence/ALGEBRA-CHECKS.json", + "sha256": "49ed9629670af3825290409ef890e62850d71bec89aba9e3355277ec3303785a" + }, + { + "bytes": 2620, + "path": "evidence/COLD-REPLAY.json", + "sha256": "38eea308b27075bb3c9127e22da2e5da168c366c6c8e33935dea8bd8fe44666d" + }, + { + "bytes": 4057, + "path": "evidence/COLD-REVIEW-SOURCE.txt", + "sha256": "d02b53ddaacd435295899f87c034631fc0ab8670745c115bfbc4c3639f6a8fbe" + }, + { + "bytes": 1918, + "path": "evidence/FULL-MODE-REVIEW.json", + "sha256": "ff123b08b3ac58f20d12d4fbec575472086ace1708d3242519884dbffe534372" + }, + { + "bytes": 1159, + "path": "evidence/INDEPENDENT-ALGEBRA.json", + "sha256": "9d5146ea7a8feb9e3f7a99e613841f793ca7afea2db8caf6ea8895e11fa1cf52" + }, + { + "bytes": 2156, + "path": "evidence/LOCAL-PROOF-REVIEW.json", + "sha256": "4018a1c2080d37b907631d1db0b356d3887294f99f720f6e63c10daf149395e2" + }, + { + "bytes": 7238, + "path": "evidence/LOCAL-PROOF-REVIEW.md", + "sha256": "6d27934ce620cc8b191b0822f955ec05f0679352c2a6f9ac31672085ee52a418" + }, + { + "bytes": 7037, + "path": "evidence/LOCAL-PROOF.md", + "sha256": "dd94a6e2220306aa76da329886921f1efc0420e6064fe9d056bc4c2286e693b3" + }, + { + "bytes": 5755, + "path": "evidence/MONOMIAL-SQUARE-PROOF.md", + "sha256": "300e7b894f8218fe3e17b31f0033daa85f57d5df414ce127d3613e3e705b2fd2" + }, + { + "bytes": 3106, + "path": "evidence/MONOMIAL-SQUARE-REVIEW.md", + "sha256": "53904f2fa0d12943d5639c454ed4598d0a4f3d4f1bc4441118d2576b25e25c68" + }, + { + "bytes": 580, + "path": "evidence/NATIVE-CHECKS.json", + "sha256": "ee369640862c4961be56327cd248599257469fbd090ba3b60814184be2f7f074" + }, + { + "bytes": 1701, + "path": "evidence/NATIVE-REVIEW.json", + "sha256": "e79603bee7c4077b3637f9b7891bac59719183e922a71d5994aaf9d405d5322f" + }, + { + "bytes": 7579, + "path": "evidence/NATIVE-REVIEW.md", + "sha256": "1783100d3333c83828b47bb89f267db54b791f4c4fe952b5a62fbdb5087c902f" + }, + { + "bytes": 1677, + "path": "evidence/NEGATIVE-WITNESSES.json", + "sha256": "1992edbbe31aedf839ccb2cdd37c77e7060018fd65032f34d044afc348808b1c" + }, + { + "bytes": 4038, + "path": "evidence/OWNER-BINDING-REVIEW.json", + "sha256": "11abe070f0fbf483f0afd243411cf861c017b7a6fc0b23c656e3508c3d9e89a4" + }, + { + "bytes": 6392, + "path": "evidence/OWNER-BINDING-REVIEW.md", + "sha256": "a85549bfda224f651f8f26235893e6b61f1f6683f9bc6f84a52ecf5e26782705" + }, + { + "bytes": 10590, + "path": "evidence/OWNER-BINDING-SOURCE.txt", + "sha256": "888852204cef466e051e2e16c84de68db05ab3995ac47c8c15fbf81356613676" + }, + { + "bytes": 2099, + "path": "evidence/PACKAGE-REVIEW.json", + "sha256": "16826ac4784c851b011867d2862ab2a019403445846745fe3fc327476c19de68" + }, + { + "bytes": 7581, + "path": "evidence/PACKAGE-REVIEW.md", + "sha256": "9bf3406f11dd1abe888eed1ce2f1f9f0cb43be5a0963565e22d3dfa160768676" + }, + { + "bytes": 1602, + "path": "evidence/PAIR-CHECKS.json", + "sha256": "89c50c9ece5c209c3f17ed9cea7dfd79715a8ef7c4031603adbc8e1a274f6089" + }, + { + "bytes": 1911, + "path": "evidence/PINS-AND-INVOICE.json", + "sha256": "9bbcf94527b80c8b85c27f008b6d5f46bee89a306061ff2e20dfc4b31efb6e41" + }, + { + "bytes": 1052, + "path": "evidence/PRODUCER-COLD-PORTABILITY.json", + "sha256": "36915ebf6c298b06f36e6103d78a0a5a5155bbf4546f14a622ee24e414c31b52" + }, + { + "bytes": 2847, + "path": "evidence/PUBLICATION-CHECKS.md", + "sha256": "2e2025650402a59196048ce9687a0c8b8a81895f890a4284361ef9ec7f979d5a" + }, + { + "bytes": 8335, + "path": "evidence/PUBLICATION-PROVENANCE.json", + "sha256": "4349b3033b2d5fb7cab03d799c9a6cec5030f68aa59a06601f5a8b35c7eed110" + }, + { + "bytes": 5847, + "path": "evidence/REPLAY.json", + "sha256": "12481f1fdb5464bd1bcba8950599da05a5ea0994e1e3559157d21423ef254e75" + }, + { + "bytes": 4917, + "path": "evidence/REVIEWED-PACKAGE-HASHES.json", + "sha256": "727b5b524c26ab5b9617fb8cbe259a501e121e6067d6b4ddb533ec6a277dca51" + }, + { + "bytes": 544, + "path": "evidence/ROUTE-REPLACEMENT-CHECK.json", + "sha256": "da9c021e6464616c2908f684c2f7aacf903bc97f68a75a0365860e86da9bbc16" + }, + { + "bytes": 3392, + "path": "evidence/SUPPLEMENTAL-IO-ADAPTATION.json", + "sha256": "7f4a0b9a860e66d67586b3a9bcbe7c4abd2cab6cfe27e7b42c96aa051c680c8e" + }, + { + "bytes": 3264, + "path": "evidence/SUPPLEMENTAL-IO-REVIEW.json", + "sha256": "3316f003b148759b1f629a678be8f8db4a762b53703f34429dd240a2e5b39703" + }, + { + "bytes": 3213, + "path": "evidence/WORKTREE-REPLAY.json", + "sha256": "7472175da0068436b620ac6b2fd61f89cf7addd9cb33e217d0e4e35536695ad0" + }, + { + "bytes": 4259, + "path": "evidence/check_negative_witnesses.py", + "sha256": "0909b6d246d1aaa7af64e2eac80f5d335042d76ae1daaf2fecdfffc3ad216498" + }, + { + "bytes": 6464, + "path": "evidence/independent_algebra.py", + "sha256": "357f426ecd1e3d0e74f7a768ad992b2738364737e44122fefcee07c623a7e382" + }, + { + "bytes": 11357, + "path": "notices/LICENSE", + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4" + }, + { + "bytes": 1964, + "path": "notices/research/gauge44-slots-t16/NOTICE.md", + "sha256": "7a8d17b04da1e6c9d0ec217fb5bda72faa09d9a21695128722dd1e2827870fcf" + }, + { + "bytes": 6406, + "path": "notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md", + "sha256": "a75967ebc34e3bf2ff2c25c08e6c7f1a61b0c0d171cfd1b62196ae2caaf2c610" + }, + { + "bytes": 950, + "path": "notices/research/gauge44-slots-t16/construction/NOTICE.md", + "sha256": "defe7e44af610e25a6c50c1c3b2efd0972d0690574995c0c872fc50eebf4c816" + }, + { + "bytes": 2245, + "path": "notices/research/gauge44-slots-t16/t16/NOTICE.md", + "sha256": "902370e6bfcd39dbea2ece474f15fccbcce3b8e966b2b94066bd03e5174591b5" + }, + { + "bytes": 4411, + "path": "replay.py", + "sha256": "8caab4a35955e8216d6d034786710e2f8a446e315a5481c2eb632bd93760b0b7" + }, + { + "bytes": 14947, + "path": "source_data.py", + "sha256": "d23924511e3aed41e5e64511ca70126a636d91c8aa02e656cb61d6ceca1fe0a0" + }, + { + "bytes": 8568, + "path": "verify_algebra.py", + "sha256": "c40b0e3dd5156584836539d882890dd8d34e68ed057970cba33146ac4137c425" + }, + { + "bytes": 10094, + "path": "verify_native.py", + "sha256": "0efefa821aba316e2557ea9991b878b20a624ec3135c5d58d3960ae95e589bba" + }, + { + "bytes": 12197, + "path": "verify_pair.py", + "sha256": "37807ae4cffdcaf5d13dcd7b8025da1d96251ef626124b670a641e9e471b2d95" + } + ], + "manifest_excludes": [ + "MANIFEST.json" + ], + "scope": "Local typed pair, general theorem, accepted checks and archival owner evidence; no global closure or kappa change", + "status": "REVIEWED_LOCAL_PUBLICATION_COPY", + "total_bytes_excluding_manifest": 741981 +} diff --git a/research/original-paired-gap/evidence/PRODUCER-COLD-PORTABILITY.json b/research/original-paired-gap/evidence/PRODUCER-COLD-PORTABILITY.json new file mode 100644 index 0000000000..f6ae61d063 --- /dev/null +++ b/research/original-paired-gap/evidence/PRODUCER-COLD-PORTABILITY.json @@ -0,0 +1,26 @@ +{ + "child_max_rss": 165838848, + "cold_directory": "/private/tmp/original-paired-gap-cold-y2vsj0pa", + "command_flags": [ + "-I", + "-O", + "-B" + ], + "declared_bytes": 673318, + "declared_files_copied": 29, + "elapsed_seconds": 5.193, + "exit_code": 0, + "local_document_targets": "PASS", + "output_sha256": { + "ALGEBRA-CHECKS.json": "49ed9629670af3825290409ef890e62850d71bec89aba9e3355277ec3303785a", + "NATIVE-CHECKS.json": "ee369640862c4961be56327cd248599257469fbd090ba3b60814184be2f7f074", + "PAIR-CHECKS.json": "89c50c9ece5c209c3f17ed9cea7dfd79715a8ef7c4031603adbc8e1a274f6089", + "REPLAY.json": "12481f1fdb5464bd1bcba8950599da05a5ea0994e1e3559157d21423ef254e75" + }, + "package_manifest_sha256": "727b5b524c26ab5b9617fb8cbe259a501e121e6067d6b4ddb533ec6a277dca51", + "rss_unit": "bytes", + "same_four_output_bytes_as_staging": true, + "scope": "One local process; no new owner replay, global supplier, finite invoice, or kappa check", + "status": "PASS_COLD_PORTABLE_ORIGINAL_PAIRED_GAP", + "working_directory": "/private/tmp" +} diff --git a/research/original-paired-gap/evidence/PUBLICATION-CHECKS.md b/research/original-paired-gap/evidence/PUBLICATION-CHECKS.md new file mode 100644 index 0000000000..20abba88b6 --- /dev/null +++ b/research/original-paired-gap/evidence/PUBLICATION-CHECKS.md @@ -0,0 +1,49 @@ +# Publication checks and source records + +The independent package review covers the original 29-file package. +Its manifest is `REVIEWED-PACKAGE-HASHES.json`. The publication copy +changes the README review-status paragraph and adds two open next +questions. The other 28 original files are unchanged. +The five main executable files and all mathematical input files are +unchanged. + +`PACKAGE-REVIEW.md` and `PACKAGE-REVIEW.json` retain the accepted review +bytes. `COLD-REPLAY.json`, `INDEPENDENT-ALGEBRA.json`, +`NEGATIVE-WITNESSES.json`, and `PINS-AND-INVOICE.json` retain its checks. +`PAIR-CHECKS.json`, `NATIVE-CHECKS.json`, `ALGEBRA-CHECKS.json`, and +`REPLAY.json` are the exact producer outputs. The coordinator and the +independent cold run reproduced all four output hashes. + +The two supplementary Python scripts accept explicit paths in this +copy. Only argument parsing and input/output paths changed. Their +mathematical code is unchanged. The source hashes and complete small +diffs are in `PUBLICATION-PROVENANCE.json`. Their outputs must match +the retained independent receipts byte for byte. +`SUPPLEMENTAL-IO-REVIEW.json` accepts these path changes after a separate +exact replay. `SUPPLEMENTAL-IO-ADAPTATION.json` retains the reviewed diff. + +From the repository root, create an external output directory and run: + +```sh +mkdir -p /tmp/original-paired-gap-supplements +python3 -I -O -B research/original-paired-gap/evidence/independent_algebra.py --out /tmp/original-paired-gap-supplements/INDEPENDENT-ALGEBRA.json +python3 -I -O -B research/original-paired-gap/evidence/check_negative_witnesses.py --package research/original-paired-gap --repo . --out /tmp/original-paired-gap-supplements/NEGATIVE-WITNESSES.json +cmp research/original-paired-gap/evidence/INDEPENDENT-ALGEBRA.json /tmp/original-paired-gap-supplements/INDEPENDENT-ALGEBRA.json +cmp research/original-paired-gap/evidence/NEGATIVE-WITNESSES.json /tmp/original-paired-gap-supplements/NEGATIVE-WITNESSES.json +``` + +The main replay command is in the package README. It uses the unchanged +five executable files. `WORKTREE-REPLAY.json` records that command and +the exact four output comparisons from the publication worktree. + +`COLD-REVIEW-SOURCE.txt` preserves the independent cold-run driver byte +for byte. It records historical machine paths and is archival source. +It is not a runtime input. The same applies to the machine paths in +historical cold receipts and the source-campaign paths in owner evidence. +The original review JSON pins the original script filenames and hashes; +the publication record gives their new paths and the two I/O changes. + +The package review did not rerun the separate owner schedule or a global +supplier. This publication check does not add such a claim. Global +closure, a complete recursive invoice, and a kappa improvement remain +unproved by this package. diff --git a/research/original-paired-gap/evidence/PUBLICATION-PROVENANCE.json b/research/original-paired-gap/evidence/PUBLICATION-PROVENANCE.json new file mode 100644 index 0000000000..32a52e6dc1 --- /dev/null +++ b/research/original-paired-gap/evidence/PUBLICATION-PROVENANCE.json @@ -0,0 +1,127 @@ +{ + "four_output_files_match_originals": { + "ALGEBRA-CHECKS.json": "49ed9629670af3825290409ef890e62850d71bec89aba9e3355277ec3303785a", + "NATIVE-CHECKS.json": "ee369640862c4961be56327cd248599257469fbd090ba3b60814184be2f7f074", + "PAIR-CHECKS.json": "89c50c9ece5c209c3f17ed9cea7dfd79715a8ef7c4031603adbc8e1a274f6089", + "REPLAY.json": "12481f1fdb5464bd1bcba8950599da05a5ea0994e1e3559157d21423ef254e75" + }, + "independent_package_review": { + "path": "evidence/PACKAGE-REVIEW.json", + "sha256": "16826ac4784c851b011867d2862ab2a019403445846745fe3fc327476c19de68" + }, + "original_file_changes": [ + { + "change": "The review-status paragraph links the accepted portable review and states its result. Two open next questions state the missing physical H/G endpoint operation and complete paired-supplier obligations.", + "path": "README.md", + "publication_sha256": "664d1d91dacff672a9db6d6cf0430b23902e8045ee5f3b43de6229c5b2ea4615", + "source_sha256": "e331039f27666383c515278fa08cae528ddd52a2c91fba9a362b5c6943073c29" + } + ], + "original_files_unchanged": [ + "PROOF.md", + "NOTICE.md", + "SOURCES.json", + "source_data.py", + "verify_pair.py", + "verify_native.py", + "verify_algebra.py", + "replay.py", + "data/PAIRED-PROGRAMS.json.gz", + "data/FULL-MODE-PROGRAMS.json.gz", + "data/INPUT-LINES.json", + "evidence/MONOMIAL-SQUARE-PROOF.md", + "evidence/MONOMIAL-SQUARE-REVIEW.md", + "evidence/LOCAL-PROOF.md", + "evidence/LOCAL-PROOF-REVIEW.md", + "evidence/LOCAL-PROOF-REVIEW.json", + "evidence/NATIVE-REVIEW.md", + "evidence/NATIVE-REVIEW.json", + "evidence/FULL-MODE-REVIEW.json", + "evidence/OWNER-BINDING-SOURCE.txt", + "evidence/OWNER-BINDING-REVIEW.md", + "evidence/OWNER-BINDING-REVIEW.json", + "notices/research/gauge44-slots-t16/NOTICE.md", + "notices/research/gauge44-slots-t16/construction/NOTICE.md", + "notices/research/gauge44-slots-t16/t16/NOTICE.md", + "notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md", + "notices/LICENSE", + "evidence/ROUTE-REPLACEMENT-CHECK.json" + ], + "primary_executable_files_unchanged": [ + "source_data.py", + "verify_pair.py", + "verify_native.py", + "verify_algebra.py", + "replay.py" + ], + "provenance_notes": [ + "The original 29-file manifest retains its historical pre-review status and original README hash. The accepted review binds that exact manifest.", + "The independent review JSON pins its original filenames and original script hashes. The source map and exact diffs above identify the publication copies.", + "COLD-REVIEW-SOURCE.txt and historical cold receipts retain machine-specific paths as archival records. They are not runtime inputs.", + "The two supplemental scripts have only I/O changes. Each output matches the original independent receipt byte for byte.", + "The four component outputs are exact producer bytes. The independent cold run, the coordinator replay, and this publication worktree replay produced the same hashes.", + "The owner schedule is separate archival evidence. No owner-schedule replay, global closure, complete recursive invoice, or kappa improvement is claimed here." + ], + "retained_review_sources": { + "COLD-REPLAY.json": { + "path": "evidence/COLD-REPLAY.json", + "sha256": "38eea308b27075bb3c9127e22da2e5da168c366c6c8e33935dea8bd8fe44666d" + }, + "INDEPENDENT-ALGEBRA.json": { + "path": "evidence/INDEPENDENT-ALGEBRA.json", + "sha256": "9d5146ea7a8feb9e3f7a99e613841f793ca7afea2db8caf6ea8895e11fa1cf52" + }, + "NEGATIVE-WITNESSES.json": { + "path": "evidence/NEGATIVE-WITNESSES.json", + "sha256": "1992edbbe31aedf839ccb2cdd37c77e7060018fd65032f34d044afc348808b1c" + }, + "PINS-AND-INVOICE.json": { + "path": "evidence/PINS-AND-INVOICE.json", + "sha256": "9bbcf94527b80c8b85c27f008b6d5f46bee89a306061ff2e20dfc4b31efb6e41" + }, + "REVIEW.json": { + "path": "evidence/PACKAGE-REVIEW.json", + "sha256": "16826ac4784c851b011867d2862ab2a019403445846745fe3fc327476c19de68" + }, + "REVIEW.md": { + "path": "evidence/PACKAGE-REVIEW.md", + "sha256": "9bf3406f11dd1abe888eed1ce2f1f9f0cb43be5a0963565e22d3dfa160768676" + }, + "cold_review.py": { + "path": "evidence/COLD-REVIEW-SOURCE.txt", + "sha256": "d02b53ddaacd435295899f87c034631fc0ab8670745c115bfbc4c3639f6a8fbe" + } + }, + "reviewed_manifest": { + "files": 29, + "path": "evidence/REVIEWED-PACKAGE-HASHES.json", + "sha256": "727b5b524c26ab5b9617fb8cbe259a501e121e6067d6b4ddb533ec6a277dca51" + }, + "status": "PASS_REVIEWED_PUBLICATION_COPY", + "supplemental_io_adaptation": { + "path": "evidence/SUPPLEMENTAL-IO-ADAPTATION.json", + "sha256": "7f4a0b9a860e66d67586b3a9bcbe7c4abd2cab6cfe27e7b42c96aa051c680c8e" + }, + "supplemental_io_review": { + "path": "evidence/SUPPLEMENTAL-IO-REVIEW.json", + "sha256": "3316f003b148759b1f629a678be8f8db4a762b53703f34429dd240a2e5b39703" + }, + "supplemental_scripts": { + "check_negative_witnesses.py": { + "change": "Only command-line input and output paths change. All mathematical code is unchanged.", + "diff": "--- review/check_negative_witnesses.py\n+++ evidence/check_negative_witnesses.py\n@@ -7,14 +7,18 @@\n from fractions import Fraction as Q\n from hashlib import sha256\n from pathlib import Path\n+import argparse\n import gzip\n import importlib.util\n import json\n \n \n-HERE = Path(__file__).resolve().parent\n-cold = Path(json.loads((HERE / 'COLD-REPLAY.json').read_bytes())['cold_root'])\n-package = cold / 'package'\n+parser = argparse.ArgumentParser(description=__doc__)\n+parser.add_argument('--package', type=Path, required=True)\n+parser.add_argument('--repo', type=Path, required=True)\n+parser.add_argument('--out', type=Path, required=True)\n+args = parser.parse_args()\n+package = args.package\n \n \n def load(name):\n@@ -25,7 +29,7 @@\n \n \n source, pair_check = load('source_data'), load('verify_pair')\n-local = source.load_local(cold / 'source.git')\n+local = source.load_local(args.repo)\n word = local['CANONICAL-WORD.json.gz']\n original = local['LOCAL-PROGRAMS.json.gz']\n cores = json.loads(gzip.decompress((package / 'data/FULL-MODE-PROGRAMS.json.gz').read_bytes()))\n@@ -82,5 +86,5 @@\n 'arithmetic': 'Exact rational real and imaginary parts',\n 'scope': 'Each wrapper mutation fails on an actual spatial Fourier character at tensor depth one',\n 'inherited': 'Formal row generation uses the declared package; character evaluation is new review code'}\n-(HERE / 'NEGATIVE-WITNESSES.json').write_text(json.dumps(report, indent=2, sort_keys=True) + '\\n')\n+args.out.write_text(json.dumps(report, indent=2, sort_keys=True) + '\\n')\n print(json.dumps(report, indent=2, sort_keys=True))\n", + "publication_sha256": "0909b6d246d1aaa7af64e2eac80f5d335042d76ae1daaf2fecdfffc3ad216498", + "source_sha256": "f39e62fb2114d487bc0f38f7293955b9ab4c3ec95331c5b3f31c9ed75ba74a82" + }, + "independent_algebra.py": { + "change": "Only command-line input and output paths change. All mathematical code is unchanged.", + "diff": "--- review/independent_algebra.py\n+++ evidence/independent_algebra.py\n@@ -6,7 +6,13 @@\n \n from fractions import Fraction as F\n from pathlib import Path\n+import argparse\n import json\n+\n+\n+parser = argparse.ArgumentParser(description=__doc__)\n+parser.add_argument('--out', type=Path, required=True)\n+args = parser.parse_args()\n \n \n def need(condition, message):\n@@ -159,6 +165,6 @@\n 'controls': ['Missing productive mode intertwiner', 'Reversed backward old-mode order'],\n 'imports': 'Python standard library only; no package or producer code',\n 'scope': 'An independent exact example supports the separately reviewed general proof'}\n-path = Path(__file__).resolve().parent / 'INDEPENDENT-ALGEBRA.json'\n+path = args.out\n path.write_text(json.dumps(report, indent=2, sort_keys=True) + '\\n')\n print(report['status'])\n", + "publication_sha256": "357f426ecd1e3d0e74f7a768ad992b2738364737e44122fefcee07c623a7e382", + "source_sha256": "fe77f39f802cc78ed0dc77a00dc678aa11a6f25d85cfc32b4550f281e5f2bbe5" + } + }, + "worktree_replay": { + "path": "evidence/WORKTREE-REPLAY.json", + "sha256": "7472175da0068436b620ac6b2fd61f89cf7addd9cb33e217d0e4e35536695ad0" + } +} diff --git a/research/original-paired-gap/evidence/REPLAY.json b/research/original-paired-gap/evidence/REPLAY.json new file mode 100644 index 0000000000..3bf91dd1e4 --- /dev/null +++ b/research/original-paired-gap/evidence/REPLAY.json @@ -0,0 +1,76 @@ +{ + "code_sha256": { + "replay.py": "8caab4a35955e8216d6d034786710e2f8a446e315a5481c2eb632bd93760b0b7", + "source_data.py": "d23924511e3aed41e5e64511ca70126a636d91c8aa02e656cb61d6ceca1fe0a0", + "verify_algebra.py": "c40b0e3dd5156584836539d882890dd8d34e68ed057970cba33146ac4137c425", + "verify_native.py": "0efefa821aba316e2557ea9991b878b20a624ec3135c5d58d3960ae95e589bba", + "verify_pair.py": "37807ae4cffdcaf5d13dcd7b8025da1d96251ef626124b670a641e9e471b2d95" + }, + "copied_input_sha256": { + "data/FULL-MODE-PROGRAMS.json.gz": "ebc17d1d4c51a9c6b3cb05670d970db3d3e1000f26f1d864cdb27523ce1997dd", + "data/INPUT-LINES.json": "500c09dfc1d27ffd107341adf4c3c6874ee2c84e1a8afad91d931ed9e88fd1d7", + "data/PAIRED-PROGRAMS.json.gz": "ed7702a3fac280238bcaf8af8387d53c59731b8c21c0301f3d84de971027e2d0", + "evidence/FULL-MODE-REVIEW.json": "ff123b08b3ac58f20d12d4fbec575472086ace1708d3242519884dbffe534372", + "evidence/LOCAL-PROOF-REVIEW.json": "4018a1c2080d37b907631d1db0b356d3887294f99f720f6e63c10daf149395e2", + "evidence/LOCAL-PROOF-REVIEW.md": "6d27934ce620cc8b191b0822f955ec05f0679352c2a6f9ac31672085ee52a418", + "evidence/LOCAL-PROOF.md": "dd94a6e2220306aa76da329886921f1efc0420e6064fe9d056bc4c2286e693b3", + "evidence/MONOMIAL-SQUARE-PROOF.md": "300e7b894f8218fe3e17b31f0033daa85f57d5df414ce127d3613e3e705b2fd2", + "evidence/MONOMIAL-SQUARE-REVIEW.md": "53904f2fa0d12943d5639c454ed4598d0a4f3d4f1bc4441118d2576b25e25c68", + "evidence/NATIVE-REVIEW.json": "e79603bee7c4077b3637f9b7891bac59719183e922a71d5994aaf9d405d5322f", + "evidence/NATIVE-REVIEW.md": "1783100d3333c83828b47bb89f267db54b791f4c4fe952b5a62fbdb5087c902f", + "evidence/OWNER-BINDING-REVIEW.json": "11abe070f0fbf483f0afd243411cf861c017b7a6fc0b23c656e3508c3d9e89a4", + "evidence/OWNER-BINDING-REVIEW.md": "a85549bfda224f651f8f26235893e6b61f1f6683f9bc6f84a52ecf5e26782705", + "evidence/OWNER-BINDING-SOURCE.txt": "888852204cef466e051e2e16c84de68db05ab3995ac47c8c15fbf81356613676", + "evidence/ROUTE-REPLACEMENT-CHECK.json": "da9c021e6464616c2908f684c2f7aacf903bc97f68a75a0365860e86da9bbc16", + "notices/LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "notices/research/gauge44-slots-t16/NOTICE.md": "7a8d17b04da1e6c9d0ec217fb5bda72faa09d9a21695128722dd1e2827870fcf", + "notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md": "a75967ebc34e3bf2ff2c25c08e6c7f1a61b0c0d171cfd1b62196ae2caaf2c610", + "notices/research/gauge44-slots-t16/construction/NOTICE.md": "defe7e44af610e25a6c50c1c3b2efd0972d0690574995c0c872fc50eebf4c816", + "notices/research/gauge44-slots-t16/t16/NOTICE.md": "902370e6bfcd39dbea2ece474f15fccbcce3b8e966b2b94066bd03e5174591b5", + "source_data.py": "d23924511e3aed41e5e64511ca70126a636d91c8aa02e656cb61d6ceca1fe0a0" + }, + "core_payload_sha256": "f271842a741584389e166e700e262f161b0dd570ce8c7a540f2717e90ead5205", + "fresh_checks": [ + "All 704 raw core input columns and 1408 paired input columns", + "Arbitrary modes, ordinary helper restoration, private non-use, both algebraic inverse orders", + "Exact 57344 line columns and 1008 source-derived affine routes", + "Ordered physical groups, literal local costs, general monomial-square identities and controls" + ], + "inherited_or_not_run": [ + "Retained core native kernels and full helper interface are inherited", + "Owner binding and one-shot mode histories are separately reviewed and not replayed here", + "No complete global native word, final H/G access, coupled decoder, finite invoice, or supplier admission", + "No repository-wide test suite or kappa calculation" + ], + "output_sha256": { + "ALGEBRA-CHECKS.json": "49ed9629670af3825290409ef890e62850d71bec89aba9e3355277ec3303785a", + "NATIVE-CHECKS.json": "ee369640862c4961be56327cd248599257469fbd090ba3b60814184be2f7f074", + "PAIR-CHECKS.json": "89c50c9ece5c209c3f17ed9cea7dfd79715a8ef7c4031603adbc8e1a274f6089" + }, + "program_payload_sha256": "42aeb0902d8b2330f9050718c6d949993111a9fd898acad599ec867bb63a2b20", + "source": { + "archive_path": "research/community-frontier1042-audit/selected-replay.tar.gz", + "archive_sha256": "22c3f4dce4b897a1d423d1388801933e288b6a6b1906cb15e1b16a5eb68db754", + "base": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f", + "credit_sources": { + "LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "research/gauge44-slots-t16/NOTICE.md": "7a8d17b04da1e6c9d0ec217fb5bda72faa09d9a21695128722dd1e2827870fcf", + "research/gauge44-slots-t16/UPSTREAM-NOTICE.md": "a75967ebc34e3bf2ff2c25c08e6c7f1a61b0c0d171cfd1b62196ae2caaf2c610", + "research/gauge44-slots-t16/construction/NOTICE.md": "defe7e44af610e25a6c50c1c3b2efd0972d0690574995c0c872fc50eebf4c816", + "research/gauge44-slots-t16/t16/NOTICE.md": "902370e6bfcd39dbea2ece474f15fccbcce3b8e966b2b94066bd03e5174591b5" + }, + "decompressed_payloads": { + "CANONICAL-WORD.json.gz": "4ddb29fb9bc6f27e0c0fbfcf19a2a93a3496ad900d0f6d89059d0305c9576c0c", + "LOCAL-PROGRAMS.json.gz": "9f41d53659e9be84e20c661560c5687abbf5cd0660cdecbe01ad5eb29e6b8ee3" + }, + "members": { + "slots/local/CANONICAL-WORD.json.gz": "16bc0ebb04b4be6c0ade74badc6a0c0cdba4215eda86e4ff9f13abf8ecebd219", + "slots/local/CLIFFORD-RECIPES.json": "d0768f2164d5f64a2fdbec422f1cfde4e400818792f1904ca541958377243731", + "slots/local/LOCAL-PROGRAMS.json.gz": "241fde27d4e43f5a9cb6b128f9f76c5131a53d09f0371676163f914d0b0fef3a", + "slots/local/RESIDUAL-ADAPTERS.json": "383f40aadd00a4ac700dfd0d4c22d6c6c0be9a9863116e4d69c7acd23bafae0c", + "t16/global/base/work/complex-nine-native/DATA-PHASES.json": "c5916ff312678f12aba403847643fbbc29f643acec60bdf836fa56cd3e8251fa" + } + }, + "source_manifest_sha256": "2ca472d13712383755b7f25794edb810e97401ecfd3fc8b1aa1b68a354b1b581", + "status": "PASS_PORTABLE_ORIGINAL_PAIRED_GAP" +} diff --git a/research/original-paired-gap/evidence/REVIEWED-PACKAGE-HASHES.json b/research/original-paired-gap/evidence/REVIEWED-PACKAGE-HASHES.json new file mode 100644 index 0000000000..a0a4ef78ed --- /dev/null +++ b/research/original-paired-gap/evidence/REVIEWED-PACKAGE-HASHES.json @@ -0,0 +1,153 @@ +{ + "files": [ + { + "bytes": 7785, + "path": "README.md", + "sha256": "e331039f27666383c515278fa08cae528ddd52a2c91fba9a362b5c6943073c29" + }, + { + "bytes": 10553, + "path": "PROOF.md", + "sha256": "d71781dad19b6ef4683a49ef67aeba3123486429af75d4432eb3ba650841d2be" + }, + { + "bytes": 3258, + "path": "NOTICE.md", + "sha256": "06ebe05bf4c5abcfa840a9b2bd3b58059b293dd23fc23eb9ca8454a56d1c9e5a" + }, + { + "bytes": 8153, + "path": "SOURCES.json", + "sha256": "2ca472d13712383755b7f25794edb810e97401ecfd3fc8b1aa1b68a354b1b581" + }, + { + "bytes": 14947, + "path": "source_data.py", + "sha256": "d23924511e3aed41e5e64511ca70126a636d91c8aa02e656cb61d6ceca1fe0a0" + }, + { + "bytes": 12197, + "path": "verify_pair.py", + "sha256": "37807ae4cffdcaf5d13dcd7b8025da1d96251ef626124b670a641e9e471b2d95" + }, + { + "bytes": 10094, + "path": "verify_native.py", + "sha256": "0efefa821aba316e2557ea9991b878b20a624ec3135c5d58d3960ae95e589bba" + }, + { + "bytes": 8568, + "path": "verify_algebra.py", + "sha256": "c40b0e3dd5156584836539d882890dd8d34e68ed057970cba33146ac4137c425" + }, + { + "bytes": 4411, + "path": "replay.py", + "sha256": "8caab4a35955e8216d6d034786710e2f8a446e315a5481c2eb632bd93760b0b7" + }, + { + "bytes": 29886, + "path": "data/PAIRED-PROGRAMS.json.gz", + "sha256": "ed7702a3fac280238bcaf8af8387d53c59731b8c21c0301f3d84de971027e2d0" + }, + { + "bytes": 213376, + "path": "data/FULL-MODE-PROGRAMS.json.gz", + "sha256": "ebc17d1d4c51a9c6b3cb05670d970db3d3e1000f26f1d864cdb27523ce1997dd" + }, + { + "bytes": 269114, + "path": "data/INPUT-LINES.json", + "sha256": "500c09dfc1d27ffd107341adf4c3c6874ee2c84e1a8afad91d931ed9e88fd1d7" + }, + { + "bytes": 5755, + "path": "evidence/MONOMIAL-SQUARE-PROOF.md", + "sha256": "300e7b894f8218fe3e17b31f0033daa85f57d5df414ce127d3613e3e705b2fd2" + }, + { + "bytes": 3106, + "path": "evidence/MONOMIAL-SQUARE-REVIEW.md", + "sha256": "53904f2fa0d12943d5639c454ed4598d0a4f3d4f1bc4441118d2576b25e25c68" + }, + { + "bytes": 7037, + "path": "evidence/LOCAL-PROOF.md", + "sha256": "dd94a6e2220306aa76da329886921f1efc0420e6064fe9d056bc4c2286e693b3" + }, + { + "bytes": 7238, + "path": "evidence/LOCAL-PROOF-REVIEW.md", + "sha256": "6d27934ce620cc8b191b0822f955ec05f0679352c2a6f9ac31672085ee52a418" + }, + { + "bytes": 2156, + "path": "evidence/LOCAL-PROOF-REVIEW.json", + "sha256": "4018a1c2080d37b907631d1db0b356d3887294f99f720f6e63c10daf149395e2" + }, + { + "bytes": 7579, + "path": "evidence/NATIVE-REVIEW.md", + "sha256": "1783100d3333c83828b47bb89f267db54b791f4c4fe952b5a62fbdb5087c902f" + }, + { + "bytes": 1701, + "path": "evidence/NATIVE-REVIEW.json", + "sha256": "e79603bee7c4077b3637f9b7891bac59719183e922a71d5994aaf9d405d5322f" + }, + { + "bytes": 1918, + "path": "evidence/FULL-MODE-REVIEW.json", + "sha256": "ff123b08b3ac58f20d12d4fbec575472086ace1708d3242519884dbffe534372" + }, + { + "bytes": 10590, + "path": "evidence/OWNER-BINDING-SOURCE.txt", + "sha256": "888852204cef466e051e2e16c84de68db05ab3995ac47c8c15fbf81356613676" + }, + { + "bytes": 6392, + "path": "evidence/OWNER-BINDING-REVIEW.md", + "sha256": "a85549bfda224f651f8f26235893e6b61f1f6683f9bc6f84a52ecf5e26782705" + }, + { + "bytes": 4038, + "path": "evidence/OWNER-BINDING-REVIEW.json", + "sha256": "11abe070f0fbf483f0afd243411cf861c017b7a6fc0b23c656e3508c3d9e89a4" + }, + { + "bytes": 1964, + "path": "notices/research/gauge44-slots-t16/NOTICE.md", + "sha256": "7a8d17b04da1e6c9d0ec217fb5bda72faa09d9a21695128722dd1e2827870fcf" + }, + { + "bytes": 950, + "path": "notices/research/gauge44-slots-t16/construction/NOTICE.md", + "sha256": "defe7e44af610e25a6c50c1c3b2efd0972d0690574995c0c872fc50eebf4c816" + }, + { + "bytes": 2245, + "path": "notices/research/gauge44-slots-t16/t16/NOTICE.md", + "sha256": "902370e6bfcd39dbea2ece474f15fccbcce3b8e966b2b94066bd03e5174591b5" + }, + { + "bytes": 6406, + "path": "notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md", + "sha256": "a75967ebc34e3bf2ff2c25c08e6c7f1a61b0c0d171cfd1b62196ae2caaf2c610" + }, + { + "bytes": 11357, + "path": "notices/LICENSE", + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4" + }, + { + "bytes": 544, + "path": "evidence/ROUTE-REPLACEMENT-CHECK.json", + "sha256": "da9c021e6464616c2908f684c2f7aacf903bc97f68a75a0365860e86da9bbc16" + } + ], + "scope": "Local typed pair and general theorem; optional owner evidence is archival only", + "status": "PRIVATE_PACKAGE_AWAITING_INDEPENDENT_REVIEW", + "total_bytes": 673318, + "total_files": 29 +} diff --git a/research/original-paired-gap/evidence/ROUTE-REPLACEMENT-CHECK.json b/research/original-paired-gap/evidence/ROUTE-REPLACEMENT-CHECK.json new file mode 100644 index 0000000000..8295047f2a --- /dev/null +++ b/research/original-paired-gap/evidence/ROUTE-REPLACEMENT-CHECK.json @@ -0,0 +1,9 @@ +{ + "all_chart_bases": 112, + "all_stage_matrices": 1008, + "new_route_method": "Direct from the immutable original phase ledger, with every entry and exit translation checked", + "original_phase_ledger_sha256": "c5916ff312678f12aba403847643fbbc29f643acec60bdf836fa56cd3e8251fa", + "removed_runtime_payload_sha256": "498d85807dd3032de01b5da72a67717f02ee0ecf068e8c47f67d4f21034cd896", + "scope": "One-time equivalence check for removal of the doubled geometry runtime input; not a supplier result", + "status": "PASS_SOURCE_ROUTE_REPLACEMENT" +} diff --git a/research/original-paired-gap/evidence/SUPPLEMENTAL-IO-ADAPTATION.json b/research/original-paired-gap/evidence/SUPPLEMENTAL-IO-ADAPTATION.json new file mode 100644 index 0000000000..932d0c6a62 --- /dev/null +++ b/research/original-paired-gap/evidence/SUPPLEMENTAL-IO-ADAPTATION.json @@ -0,0 +1,18 @@ +{ + "original_manifest_sha256": "727b5b524c26ab5b9617fb8cbe259a501e121e6067d6b4ddb533ec6a277dca51", + "status": "PREPARED_FOR_SUPPLEMENTAL_IO_REVIEW", + "supplemental_scripts": { + "check_negative_witnesses.py": { + "change": "Only command-line input and output paths change. All mathematical code is unchanged.", + "diff": "--- review/check_negative_witnesses.py\n+++ evidence/check_negative_witnesses.py\n@@ -7,14 +7,18 @@\n from fractions import Fraction as Q\n from hashlib import sha256\n from pathlib import Path\n+import argparse\n import gzip\n import importlib.util\n import json\n \n \n-HERE = Path(__file__).resolve().parent\n-cold = Path(json.loads((HERE / 'COLD-REPLAY.json').read_bytes())['cold_root'])\n-package = cold / 'package'\n+parser = argparse.ArgumentParser(description=__doc__)\n+parser.add_argument('--package', type=Path, required=True)\n+parser.add_argument('--repo', type=Path, required=True)\n+parser.add_argument('--out', type=Path, required=True)\n+args = parser.parse_args()\n+package = args.package\n \n \n def load(name):\n@@ -25,7 +29,7 @@\n \n \n source, pair_check = load('source_data'), load('verify_pair')\n-local = source.load_local(cold / 'source.git')\n+local = source.load_local(args.repo)\n word = local['CANONICAL-WORD.json.gz']\n original = local['LOCAL-PROGRAMS.json.gz']\n cores = json.loads(gzip.decompress((package / 'data/FULL-MODE-PROGRAMS.json.gz').read_bytes()))\n@@ -82,5 +86,5 @@\n 'arithmetic': 'Exact rational real and imaginary parts',\n 'scope': 'Each wrapper mutation fails on an actual spatial Fourier character at tensor depth one',\n 'inherited': 'Formal row generation uses the declared package; character evaluation is new review code'}\n-(HERE / 'NEGATIVE-WITNESSES.json').write_text(json.dumps(report, indent=2, sort_keys=True) + '\\n')\n+args.out.write_text(json.dumps(report, indent=2, sort_keys=True) + '\\n')\n print(json.dumps(report, indent=2, sort_keys=True))\n", + "publication_sha256": "0909b6d246d1aaa7af64e2eac80f5d335042d76ae1daaf2fecdfffc3ad216498", + "source_sha256": "f39e62fb2114d487bc0f38f7293955b9ab4c3ec95331c5b3f31c9ed75ba74a82" + }, + "independent_algebra.py": { + "change": "Only command-line input and output paths change. All mathematical code is unchanged.", + "diff": "--- review/independent_algebra.py\n+++ evidence/independent_algebra.py\n@@ -6,7 +6,13 @@\n \n from fractions import Fraction as F\n from pathlib import Path\n+import argparse\n import json\n+\n+\n+parser = argparse.ArgumentParser(description=__doc__)\n+parser.add_argument('--out', type=Path, required=True)\n+args = parser.parse_args()\n \n \n def need(condition, message):\n@@ -159,6 +165,6 @@\n 'controls': ['Missing productive mode intertwiner', 'Reversed backward old-mode order'],\n 'imports': 'Python standard library only; no package or producer code',\n 'scope': 'An independent exact example supports the separately reviewed general proof'}\n-path = Path(__file__).resolve().parent / 'INDEPENDENT-ALGEBRA.json'\n+path = args.out\n path.write_text(json.dumps(report, indent=2, sort_keys=True) + '\\n')\n print(report['status'])\n", + "publication_sha256": "357f426ecd1e3d0e74f7a768ad992b2738364737e44122fefcee07c623a7e382", + "source_sha256": "fe77f39f802cc78ed0dc77a00dc678aa11a6f25d85cfc32b4550f281e5f2bbe5" + } + } +} diff --git a/research/original-paired-gap/evidence/SUPPLEMENTAL-IO-REVIEW.json b/research/original-paired-gap/evidence/SUPPLEMENTAL-IO-REVIEW.json new file mode 100644 index 0000000000..8b367e806f --- /dev/null +++ b/research/original-paired-gap/evidence/SUPPLEMENTAL-IO-REVIEW.json @@ -0,0 +1,67 @@ +{ + "adaptation_record_sha256": "7f4a0b9a860e66d67586b3a9bcbe7c4abd2cab6cfe27e7b42c96aa051c680c8e", + "material_findings": [], + "output_directory": "/private/tmp/paired-io-independent-15jx5ibv", + "outputs": { + "INDEPENDENT-ALGEBRA.json": { + "byte_equal_to_original": true, + "command": [ + "/opt/homebrew/opt/python@3.14/bin/python3.14", + "-I", + "-O", + "-B", + "/Users/aliromman/.codex/worktrees/original-paired-gap/IntegerMultiplicationBounds/research/original-paired-gap/evidence/independent_algebra.py", + "--out", + "/private/tmp/paired-io-independent-15jx5ibv/INDEPENDENT-ALGEBRA.json" + ], + "returncode": 0, + "sha256": "9d5146ea7a8feb9e3f7a99e613841f793ca7afea2db8caf6ea8895e11fa1cf52", + "stderr": "" + }, + "NEGATIVE-WITNESSES.json": { + "byte_equal_to_original": true, + "command": [ + "/opt/homebrew/opt/python@3.14/bin/python3.14", + "-I", + "-O", + "-B", + "/Users/aliromman/.codex/worktrees/original-paired-gap/IntegerMultiplicationBounds/research/original-paired-gap/evidence/check_negative_witnesses.py", + "--package", + "/Users/aliromman/.codex/worktrees/original-paired-gap/IntegerMultiplicationBounds/research/original-paired-gap", + "--repo", + "/private/tmp/paired-independent-bla2kyh7/source.git", + "--out", + "/private/tmp/paired-io-independent-15jx5ibv/NEGATIVE-WITNESSES.json" + ], + "returncode": 0, + "sha256": "1992edbbe31aedf839ccb2cdd37c77e7060018fd65032f34d044afc348808b1c", + "stderr": "" + } + }, + "reviewed_original_manifest_sha256": "727b5b524c26ab5b9617fb8cbe259a501e121e6067d6b4ddb533ec6a277dca51", + "scope": "CLI and path adaptation only. The mathematical review and all limits in REVIEW.json remain unchanged. No package edits or publication performed.", + "status": "PASS_INDEPENDENT_PUBLICATION_IO_REVIEW", + "supplemental_scripts": { + "check_negative_witnesses.py": { + "change_scope": "argparse and explicit input/output paths only; mathematical blocks unchanged", + "exact_diff_verified": true, + "managed_worktree_copy_identical": true, + "publication_sha256": "0909b6d246d1aaa7af64e2eac80f5d335042d76ae1daaf2fecdfffc3ad216498", + "source_sha256": "f39e62fb2114d487bc0f38f7293955b9ab4c3ec95331c5b3f31c9ed75ba74a82" + }, + "independent_algebra.py": { + "change_scope": "argparse and explicit input/output paths only; mathematical blocks unchanged", + "exact_diff_verified": true, + "managed_worktree_copy_identical": true, + "publication_sha256": "357f426ecd1e3d0e74f7a768ad992b2738364737e44122fefcee07c623a7e382", + "source_sha256": "fe77f39f802cc78ed0dc77a00dc678aa11a6f25d85cfc32b4550f281e5f2bbe5" + } + }, + "unchanged_primary_code": { + "replay.py": "8caab4a35955e8216d6d034786710e2f8a446e315a5481c2eb632bd93760b0b7", + "source_data.py": "d23924511e3aed41e5e64511ca70126a636d91c8aa02e656cb61d6ceca1fe0a0", + "verify_algebra.py": "c40b0e3dd5156584836539d882890dd8d34e68ed057970cba33146ac4137c425", + "verify_native.py": "0efefa821aba316e2557ea9991b878b20a624ec3135c5d58d3960ae95e589bba", + "verify_pair.py": "37807ae4cffdcaf5d13dcd7b8025da1d96251ef626124b670a641e9e471b2d95" + } +} diff --git a/research/original-paired-gap/evidence/WORKTREE-REPLAY.json b/research/original-paired-gap/evidence/WORKTREE-REPLAY.json new file mode 100644 index 0000000000..16ccde4557 --- /dev/null +++ b/research/original-paired-gap/evidence/WORKTREE-REPLAY.json @@ -0,0 +1,74 @@ +{ + "command": [ + "/opt/homebrew/opt/python@3.14/bin/python3.14", + "-I", + "-O", + "-B", + "/Users/aliromman/.codex/worktrees/original-paired-gap/IntegerMultiplicationBounds/research/original-paired-gap/replay.py", + "--repo", + "/Users/aliromman/.codex/worktrees/original-paired-gap/IntegerMultiplicationBounds", + "--out", + "/private/tmp/original-paired-gap-worktree-yihp9hit" + ], + "elapsed_seconds": 13.9227293330041, + "original_manifest_sha256": "727b5b524c26ab5b9617fb8cbe259a501e121e6067d6b4ddb533ec6a277dca51", + "output_checks": { + "ALGEBRA-CHECKS.json": { + "matches_producer_and_independent_review": true, + "sha256": "49ed9629670af3825290409ef890e62850d71bec89aba9e3355277ec3303785a" + }, + "NATIVE-CHECKS.json": { + "matches_producer_and_independent_review": true, + "sha256": "ee369640862c4961be56327cd248599257469fbd090ba3b60814184be2f7f074" + }, + "PAIR-CHECKS.json": { + "matches_producer_and_independent_review": true, + "sha256": "89c50c9ece5c209c3f17ed9cea7dfd79715a8ef7c4031603adbc8e1a274f6089" + }, + "REPLAY.json": { + "matches_producer_and_independent_review": true, + "sha256": "12481f1fdb5464bd1bcba8950599da05a5ea0994e1e3559157d21423ef254e75" + } + }, + "output_directory": "/private/tmp/original-paired-gap-worktree-yihp9hit", + "python_version": "3.14.7 (main, Aug 5 2026, 10:29:49) [Clang 21.0.0 (clang-2100.1.1.101)]", + "returncode": 0, + "scope": "Local package and two supplementary checks only; no global supplier or owner-schedule replay", + "status": "PASS_PUBLICATION_WORKTREE_REPLAY", + "stderr": "", + "stdout": "PASS_EXACT_ORIGINAL_PAIRED_MAPS\nPASS_ORIGINAL_PAIRED_NATIVE_COMPONENTS\nPASS_GENERAL_MONOMIAL_SQUARE_IDENTITIES\nPASS_PORTABLE_ORIGINAL_PAIRED_GAP\n", + "supplemental_checks": { + "INDEPENDENT-ALGEBRA.json": { + "command": [ + "/opt/homebrew/opt/python@3.14/bin/python3.14", + "-I", + "-O", + "-B", + "/Users/aliromman/.codex/worktrees/original-paired-gap/IntegerMultiplicationBounds/research/original-paired-gap/evidence/independent_algebra.py", + "--out", + "/private/tmp/original-paired-gap-worktree-yihp9hit/INDEPENDENT-ALGEBRA.json" + ], + "matches_independent_receipt": true, + "returncode": 0, + "sha256": "9d5146ea7a8feb9e3f7a99e613841f793ca7afea2db8caf6ea8895e11fa1cf52" + }, + "NEGATIVE-WITNESSES.json": { + "command": [ + "/opt/homebrew/opt/python@3.14/bin/python3.14", + "-I", + "-O", + "-B", + "/Users/aliromman/.codex/worktrees/original-paired-gap/IntegerMultiplicationBounds/research/original-paired-gap/evidence/check_negative_witnesses.py", + "--package", + "/Users/aliromman/.codex/worktrees/original-paired-gap/IntegerMultiplicationBounds/research/original-paired-gap", + "--repo", + "/Users/aliromman/.codex/worktrees/original-paired-gap/IntegerMultiplicationBounds", + "--out", + "/private/tmp/original-paired-gap-worktree-yihp9hit/NEGATIVE-WITNESSES.json" + ], + "matches_independent_receipt": true, + "returncode": 0, + "sha256": "1992edbbe31aedf839ccb2cdd37c77e7060018fd65032f34d044afc348808b1c" + } + } +} diff --git a/research/original-paired-gap/evidence/WRAP-REPLAY.json b/research/original-paired-gap/evidence/WRAP-REPLAY.json new file mode 100644 index 0000000000..7247654f26 --- /dev/null +++ b/research/original-paired-gap/evidence/WRAP-REPLAY.json @@ -0,0 +1,138 @@ +{ + "commands": [ + { + "check": "local", + "command": [ + "/opt/homebrew/opt/python@3.14/bin/python3.14", + "-I", + "-O", + "-B", + "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261020/packages/original-paired-gap/replay.py", + "--repo", + "/Users/aliromman/Projects/IntegerMultiplicationBounds", + "--out", + "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261020/foundations-paired-stage-replay" + ], + "elapsed_seconds": 9.829182667017449, + "returncode": 0, + "stderr": "", + "stdout": "PASS_EXACT_ORIGINAL_PAIRED_MAPS\nPASS_ORIGINAL_PAIRED_NATIVE_COMPONENTS\nPASS_GENERAL_MONOMIAL_SQUARE_IDENTITIES\nPASS_PORTABLE_ORIGINAL_PAIRED_GAP\n" + }, + { + "check": "independent_algebra", + "command": [ + "/opt/homebrew/opt/python@3.14/bin/python3.14", + "-I", + "-O", + "-B", + "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261020/packages/original-paired-gap/evidence/independent_algebra.py", + "--out", + "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261020/foundations-paired-stage-replay/INDEPENDENT-ALGEBRA.json" + ], + "elapsed_seconds": 0.8440690410207026, + "returncode": 0, + "stderr": "", + "stdout": "PASS_INDEPENDENT_RECTANGULAR_PHYSICAL_EXAMPLE\n" + }, + { + "check": "native_negative_controls", + "command": [ + "/opt/homebrew/opt/python@3.14/bin/python3.14", + "-I", + "-O", + "-B", + "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261020/packages/original-paired-gap/evidence/check_negative_witnesses.py", + "--package", + "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261020/packages/original-paired-gap", + "--repo", + "/Users/aliromman/Projects/IntegerMultiplicationBounds", + "--out", + "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261020/foundations-paired-stage-replay/NEGATIVE-WITNESSES.json" + ], + "elapsed_seconds": 6.17675191705348, + "returncode": 0, + "stderr": "", + "stdout": "{\n \"arithmetic\": \"Exact rational real and imaginary parts\",\n \"controls\": {\n \"backward\": {\n \"missing_input_graph\": {\n \"character\": 0,\n \"input_coordinate\": 112,\n \"nonzero_error\": [\n \"-1\",\n \"0\"\n ],\n \"output_coordinate\": 0\n },\n \"missing_translations\": {\n \"character\": 1,\n \"input_coordinate\": 929,\n \"nonzero_error\": [\n \"0\",\n \"4\"\n ],\n \"output_coordinate\": 0\n },\n \"mode_preload_before_old_mode_read\": {\n \"character\": 0,\n \"input_coordinate\": 816,\n \"nonzero_error\": [\n \"1\",\n \"0\"\n ],\n \"output_coordinate\": 0\n }\n },\n \"forward\": {\n \"missing_input_graph\": {\n \"character\": 0,\n \"input_coordinate\": 0,\n \"nonzero_error\": [\n \"-1\",\n \"0\"\n ],\n \"output_coordinate\": 112\n },\n \"missing_translations\": {\n \"character\": 1,\n \"input_coordinate\": 0,\n \"nonzero_error\": [\n \"-2\",\n \"0\"\n ],\n \"output_coordinate\": 112\n },\n \"target_correction_before_mode_update\": {\n \"character\": 0,\n \"input_coordinate\": 704,\n \"nonzero_error\": [\n \"-1\",\n \"0\"\n ],\n \"output_coordinate\": 112\n }\n }\n },\n \"inherited\": \"Formal row generation uses the declared package; character evaluation is new review code\",\n \"native_eigenvalue\": \"C_p has eigenvalue i^parity(character & port_label)\",\n \"scope\": \"Each wrapper mutation fails on an actual spatial Fourier character at tensor depth one\",\n \"status\": \"PASS_ACTUAL_NATIVE_NEGATIVE_WITNESSES\"\n}\n" + } + ], + "outputs": { + "ALGEBRA-CHECKS.json": { + "matches_reviewed_output": true, + "sha256": "49ed9629670af3825290409ef890e62850d71bec89aba9e3355277ec3303785a" + }, + "INDEPENDENT-ALGEBRA.json": { + "matches_reviewed_output": true, + "sha256": "9d5146ea7a8feb9e3f7a99e613841f793ca7afea2db8caf6ea8895e11fa1cf52" + }, + "NATIVE-CHECKS.json": { + "matches_reviewed_output": true, + "sha256": "ee369640862c4961be56327cd248599257469fbd090ba3b60814184be2f7f074" + }, + "NEGATIVE-WITNESSES.json": { + "matches_reviewed_output": true, + "sha256": "1992edbbe31aedf839ccb2cdd37c77e7060018fd65032f34d044afc348808b1c" + }, + "PAIR-CHECKS.json": { + "matches_reviewed_output": true, + "sha256": "89c50c9ece5c209c3f17ed9cea7dfd79715a8ef7c4031603adbc8e1a274f6089" + }, + "REPLAY.json": { + "matches_reviewed_output": true, + "sha256": "12481f1fdb5464bd1bcba8950599da05a5ea0994e1e3559157d21423ef254e75" + } + }, + "scope": "Local paired map and supplementary checks only. No complete supplier, owner schedule replay, repository-wide suite, or kappa calculation.", + "source_manifest_sha256": "053b6a782e27164290866390ad7bd53370bd1473c270ce40732bcd4fef47f32e", + "status": "PASS_PUBLICATION_EXTRACTION_REPLAY", + "unchanged_historical_files": [ + "NOTICE.md", + "PROOF.md", + "README.md", + "SOURCES.json", + "data/FULL-MODE-PROGRAMS.json.gz", + "data/INPUT-LINES.json", + "data/PAIRED-PROGRAMS.json.gz", + "evidence/ALGEBRA-CHECKS.json", + "evidence/COLD-REPLAY.json", + "evidence/COLD-REVIEW-SOURCE.txt", + "evidence/FULL-MODE-REVIEW.json", + "evidence/INDEPENDENT-ALGEBRA.json", + "evidence/LOCAL-PROOF-REVIEW.json", + "evidence/LOCAL-PROOF-REVIEW.md", + "evidence/LOCAL-PROOF.md", + "evidence/MONOMIAL-SQUARE-PROOF.md", + "evidence/MONOMIAL-SQUARE-REVIEW.md", + "evidence/NATIVE-CHECKS.json", + "evidence/NATIVE-REVIEW.json", + "evidence/NATIVE-REVIEW.md", + "evidence/NEGATIVE-WITNESSES.json", + "evidence/OWNER-BINDING-REVIEW.json", + "evidence/OWNER-BINDING-REVIEW.md", + "evidence/OWNER-BINDING-SOURCE.txt", + "evidence/PACKAGE-REVIEW.json", + "evidence/PACKAGE-REVIEW.md", + "evidence/PAIR-CHECKS.json", + "evidence/PINS-AND-INVOICE.json", + "evidence/PRODUCER-COLD-PORTABILITY.json", + "evidence/PUBLICATION-CHECKS.md", + "evidence/PUBLICATION-PROVENANCE.json", + "evidence/REPLAY.json", + "evidence/REVIEWED-PACKAGE-HASHES.json", + "evidence/ROUTE-REPLACEMENT-CHECK.json", + "evidence/SUPPLEMENTAL-IO-ADAPTATION.json", + "evidence/SUPPLEMENTAL-IO-REVIEW.json", + "evidence/WORKTREE-REPLAY.json", + "evidence/check_negative_witnesses.py", + "evidence/independent_algebra.py", + "notices/LICENSE", + "notices/research/gauge44-slots-t16/NOTICE.md", + "notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md", + "notices/research/gauge44-slots-t16/construction/NOTICE.md", + "notices/research/gauge44-slots-t16/t16/NOTICE.md", + "replay.py", + "source_data.py", + "verify_algebra.py", + "verify_native.py", + "verify_pair.py" + ] +} diff --git a/research/original-paired-gap/evidence/check_negative_witnesses.py b/research/original-paired-gap/evidence/check_negative_witnesses.py new file mode 100644 index 0000000000..e226527439 --- /dev/null +++ b/research/original-paired-gap/evidence/check_negative_witnesses.py @@ -0,0 +1,90 @@ +"""Find native character witnesses for the wrapper mutation controls. + +This check uses only the declared cold package and its isolated Git data. +It evaluates formal differences with the actual native line eigenvalues. +""" + +from fractions import Fraction as Q +from hashlib import sha256 +from pathlib import Path +import argparse +import gzip +import importlib.util +import json + + +parser = argparse.ArgumentParser(description=__doc__) +parser.add_argument('--package', type=Path, required=True) +parser.add_argument('--repo', type=Path, required=True) +parser.add_argument('--out', type=Path, required=True) +args = parser.parse_args() +package = args.package + + +def load(name): + spec = importlib.util.spec_from_file_location(name, package / (name + '.py')) + module = importlib.util.module_from_spec(spec) + spec.loader.exec_module(module) + return module + + +source, pair_check = load('source_data'), load('verify_pair') +local = source.load_local(args.repo) +word = local['CANONICAL-WORD.json.gz'] +original = local['LOCAL-PROGRAMS.json.gz'] +cores = json.loads(gzip.decompress((package / 'data/FULL-MODE-PROGRAMS.json.gz').read_bytes())) +packet = json.loads(gzip.decompress((package / 'data/PAIRED-PROGRAMS.json.gz').read_bytes())) +boundary = source.replay(original['forward'], cut=original['forward'].index(['phase', 'centers'])) +r = [{p: value for p, value in boundary[c].items() if p < 112} for c in word['centers']] +k = [{j: row[p] / 4 for j, row in enumerate(r) if p in row} for p in range(112)] +identity = [{(i, ()): Q(1)} for i in range(1408)] + + +def witness(actual, expected): + differences = [] + for i, (left, right) in enumerate(zip(actual, expected)): + diff = dict(left) + pair_check.add(diff, right, -1) + if diff: + differences.append((i, diff)) + for character in range(512): + for row, diff in differences: + value = {} + for (column, operators), coefficient in diff.items(): + power = sum(e * ((word['ports'][p] & character).bit_count() % 2) + for p, e in operators) % 4 + a, b = value.get(column, (Q(0), Q(0))) + dr, di = ((1, 0), (0, 1), (-1, 0), (0, -1))[power] + value[column] = a + coefficient * dr, b + coefficient * di + for column, error in sorted(value.items()): + if error != (0, 0): + return {'character': character, 'output_coordinate': row, + 'input_coordinate': column, 'nonzero_error': [str(x) for x in error]} + raise ValueError('No actual native character rejects this mutation') + + +reports = {} +for direction in ('forward', 'backward'): + core_map = source.replay(cores[direction])[:704] + parts = packet['programs'][direction] + expected = pair_check.formula(identity, direction, r, k) + controls = {'missing_input_graph': {'prefix': [], 'suffix': parts['suffix']}, + 'missing_translations': {side: [e for e in parts[side] + if e['kind'] != 'physical_translation'] + for side in ('prefix', 'suffix')}} + if direction == 'backward': + controls['mode_preload_before_old_mode_read'] = { + 'prefix': parts['prefix'][-896:] + parts['prefix'][:-896], 'suffix': parts['suffix']} + else: + controls['target_correction_before_mode_update'] = { + 'prefix': parts['prefix'], 'suffix': parts['suffix'][896:] + parts['suffix'][:896]} + reports[direction] = {name: witness(pair_check.run_pair(mutant, core_map, identity, word), expected) + for name, mutant in controls.items()} + +report = {'status': 'PASS_ACTUAL_NATIVE_NEGATIVE_WITNESSES', 'controls': reports, + 'native_eigenvalue': 'C_p has eigenvalue i^parity(character & port_label)', + 'arithmetic': 'Exact rational real and imaginary parts', + 'scope': 'Each wrapper mutation fails on an actual spatial Fourier character at tensor depth one', + 'inherited': 'Formal row generation uses the declared package; character evaluation is new review code'} +args.out.write_text(json.dumps(report, indent=2, sort_keys=True) + '\n') +print(json.dumps(report, indent=2, sort_keys=True)) diff --git a/research/original-paired-gap/evidence/independent_algebra.py b/research/original-paired-gap/evidence/independent_algebra.py new file mode 100644 index 0000000000..98b3ae29e7 --- /dev/null +++ b/research/original-paired-gap/evidence/independent_algebra.py @@ -0,0 +1,170 @@ +"""Check the general physical protocol with exact rectangular operators. + +This check does not import package or producer code. It supplements the +operator proof and does not replace its hypotheses. +""" + +from fractions import Fraction as F +from pathlib import Path +import argparse +import json + + +parser = argparse.ArgumentParser(description=__doc__) +parser.add_argument('--out', type=Path, required=True) +args = parser.parse_args() + + +def need(condition, message): + if not condition: + raise ValueError(message) + + +def zero(m, n): + return [[F(0) for _ in range(n)] for _ in range(m)] + + +def identity(n): + result = zero(n, n) + for i in range(n): + result[i][i] = F(1) + return result + + +def scale(a, c): + return [[c * x for x in row] for row in a] + + +def plus(a, b): + return [[x + y for x, y in zip(ar, br)] for ar, br in zip(a, b)] + + +def times(a, b): + return [[sum(x * y for x, y in zip(row, col)) for col in zip(*b)] for row in a] + + +def inverse(a): + n = len(a) + work = [list(map(F, row)) + eye for row, eye in zip(a, identity(n))] + for k in range(n): + pivot = next(j for j in range(k, n) if work[j][k]) + work[k], work[pivot] = work[pivot], work[k] + divisor = work[k][k] + work[k] = [x / divisor for x in work[k]] + for j in range(n): + if j != k: + c = work[j][k] + work[j] = [x - c * y for x, y in zip(work[j], work[k])] + return [row[n:] for row in work] + + +def blocks(rows): + return [sum((block[i] for block in row), []) for row in rows for i in range(len(row[0]))] + + +def duplicate(a): + m, n = len(a), len(a[0]) + z = zero(m, n) + return blocks([[a, z], [z, a]]) + + +q0 = [[0, 2, 0], [3, 0, 0], [0, 0, 5]] +r0 = [[1, 2, 0], [0, 0, 3]] +k0 = [[3, 0], [5, 0], [0, 2]] +q, r, k = duplicate(q0), duplicate(r0), duplicate(k0) +s = times(q, q) +si = inverse(s) +a = blocks([[zero(3, 3), identity(3)], [inverse(times(q0, q0)), zero(3, 3)]]) +t = times(q, a) +f_data = s +f_mode = duplicate([[6, 0], [0, 25]]) +need(times(f_mode, r) == times(r, f_data), 'R productive intertwiner') +need(times(f_data, k) == times(k, f_mode), 'K productive intertwiner') +need(times(q, f_data) == times(f_data, q), 'Q productive intertwiner') +need(times(t, t) == identity(6), 'The paired T is an involution') +need(times(s, s) != identity(6), 'The example has no fourth-power identity') +g = times(r, plus(identity(6), scale(t, -1))) +h = times(plus(identity(6), t), k) +need(times(g, h) == zero(4, 4), 'The feedback product vanishes') +need(times(h, g) != zero(6, 6), 'The opposite product is not zero') +need(times(q, times(k, r)) != times(times(k, r), q), 'Q does not commute with K R') + +ix, iy, iu = 0, 6, 12 +def update(target, source, coefficient): + result = identity(16) + for i, row in enumerate(coefficient): + for j, value in enumerate(row): + result[target + i][source + j] += value + return result + + +def core(direction): + zdd, zdm, zmd = zero(6, 6), zero(6, 4), zero(4, 6) + dd, mm = identity(6), identity(4) + kr = times(k, r) + if direction == 'forward': + return blocks([[dd, zdd, zdm], [plus(dd, scale(kr, -1)), dd, scale(k, -1)], + [scale(r, -2), zmd, scale(mm, -1)]]) + return blocks([[dd, scale(plus(dd, kr), -1), scale(k, -8)], [zdd, dd, zdm], + [zmd, scale(r, -F(1, 4)), scale(mm, -1)]]) + + +def diagonal(x, y, u): + return blocks([[x, zero(6, 6), zero(6, 4)], [zero(6, 6), y, zero(6, 4)], + [zero(4, 6), zero(4, 6), u]]) + + +def physical(direction, mode_frame, wrong_order=False): + pin = diagonal(q, identity(6), identity(4)) + pout = diagonal(f_data, times(f_data, inverse(q)), mode_frame) + raw = times(pout, times(core(direction), inverse(pin))) + if direction == 'forward': + sequence = [update(iu, ix, scale(times(r, a), -1)), raw, + update(iu, ix, r), update(iy, iu, times(a, k))] + else: + first = update(ix, iu, scale(times(s, times(a, k)), -8)) + second = update(iu, iy, scale(r, -F(1, 8))) + sequence = ([second, first] if wrong_order else [first, second]) + sequence += [raw, update(iu, iy, scale(times(r, times(s, a)), F(1, 8)))] + result = pin + for gate in sequence: + result = times(gate, result) + return times(inverse(pout), result) + + +def expected(direction): + result = identity(16) + if direction == 'forward': + result = times(update(iu, ix, scale(g, -1)), + times(diagonal(identity(6), identity(6), scale(identity(4), -1)), result)) + result = times(update(iy, ix, identity(6)), result) + result = times(update(iy, iu, h), result) + else: + result = times(update(ix, iy, scale(identity(6), -1)), result) + result = times(update(ix, iu, scale(h, -8)), result) + result = times(diagonal(identity(6), identity(6), scale(identity(4), -1)), result) + result = times(update(iu, iy, scale(g, -F(1, 8))), result) + return result + + +for direction in ('forward', 'backward'): + actual = physical(direction, f_mode) + need(actual == expected(direction), 'Every physical input column: ' + direction) + need(times(inverse(actual), actual) == times(actual, inverse(actual)) == identity(16), + 'Both inverse orders: ' + direction) + wrong_f = duplicate([[6, 0], [0, 26]]) + need(physical(direction, wrong_f) != actual, 'Missing output intertwiner fails: ' + direction) +need(physical('backward', f_mode, True) != expected('backward'), 'Old-mode order is required') +report = {'status': 'PASS_INDEPENDENT_RECTANGULAR_PHYSICAL_EXAMPLE', + 'data_dimension_per_replica': 3, 'mode_dimension_per_replica': 2, + 'independent_input_columns_per_orientation': 16, + 'Q': q0, 'R': r0, 'K': k0, 'S': [[6, 0, 0], [0, 6, 0], [0, 0, 25]], + 'checks': ['Nontrivial productive intertwiners', 'Q K R differs from K R Q', + 'Q fourth power is not identity', 'Both physical words equal the claimed formulas', + 'Both inverse orders', 'G H is zero while H G is not zero'], + 'controls': ['Missing productive mode intertwiner', 'Reversed backward old-mode order'], + 'imports': 'Python standard library only; no package or producer code', + 'scope': 'An independent exact example supports the separately reviewed general proof'} +path = args.out +path.write_text(json.dumps(report, indent=2, sort_keys=True) + '\n') +print(report['status']) diff --git a/research/original-paired-gap/evidence/publication-20261022/COLD-REPLAY.json b/research/original-paired-gap/evidence/publication-20261022/COLD-REPLAY.json new file mode 100644 index 0000000000..30111cbb60 --- /dev/null +++ b/research/original-paired-gap/evidence/publication-20261022/COLD-REPLAY.json @@ -0,0 +1,135 @@ +{ + "command": [ + "/opt/homebrew/opt/python@3.14/bin/python3.14", + "-I", + "-O", + "-B", + "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261022/reviews/original-paired-gap/cold-verified/package/replay.py", + "--repo", + "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261022/reviews/original-paired-gap/cold-verified/source.git", + "--out", + "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261022/reviews/original-paired-gap/cold-verified/replay" + ], + "cwd": "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261022/reviews/original-paired-gap/cold-verified", + "exit_code": 0, + "free_bytes_after": 7520698368, + "output_comparisons": { + "ALGEBRA-CHECKS.json": { + "matches_retained_receipt": true, + "sha256": "49ed9629670af3825290409ef890e62850d71bec89aba9e3355277ec3303785a" + }, + "NATIVE-CHECKS.json": { + "matches_retained_receipt": true, + "sha256": "ee369640862c4961be56327cd248599257469fbd090ba3b60814184be2f7f074" + }, + "PAIR-CHECKS.json": { + "matches_retained_receipt": true, + "sha256": "89c50c9ece5c209c3f17ed9cea7dfd79715a8ef7c4031603adbc8e1a274f6089" + }, + "REPLAY.json": { + "matches_retained_receipt": true, + "sha256": "12481f1fdb5464bd1bcba8950599da05a5ea0994e1e3559157d21423ef254e75" + } + }, + "package_files": 53, + "package_manifest_sha256": "a91b8ad2e9f3ac84e7dd7171328ba61794ebb74e00b0a2eacce3e0d419153de4", + "platform": "macOS-26.6.1-arm64-arm-64bit-Mach-O", + "python": "3.14.7 (main, Aug 5 2026, 10:29:49) [Clang 21.0.0 (clang-2100.1.1.101)]", + "review_type": "Separate OpenAI Codex agent review; no human review claim", + "seconds": 10.248987000028137, + "source_alternates": false, + "source_checkout": false, + "source_objects": [ + { + "bytes": 7825, + "oid": "bad91d91760fed742536a3c5d4618c5dae6b74a7", + "revision": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f:.gitattributes", + "sha256": "a8597db942c32e682808045bb5c669793754e3f10434ef770e2ffca1af569169", + "type": "blob" + }, + { + "bytes": 460, + "oid": "2f7d5f18fc6a4d613351fefa46c377420bf38250", + "revision": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f:research/.gitattributes", + "sha256": "82343cdaea9d7821d1fd9772e7262bebbfe85f95d893ffcbd538eaf2f29d3ae6", + "type": "blob" + }, + { + "bytes": 308, + "oid": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f", + "revision": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f", + "sha256": "440439a31ee35224b315ef51f7e83d34eb9a6da9356c74eed5bc8ae96b4e7684", + "type": "commit" + }, + { + "bytes": 919, + "oid": "38a158579145e2003db8d22fbf4af5a1bf9571a0", + "revision": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f^{tree}", + "sha256": "6bd434d2a5d050a9a2428787b2370e4b5db42de5bcc4900d5827ad4a7b950e85", + "type": "tree" + }, + { + "bytes": 19474, + "oid": "45b16a3cee87668409b4fd2ff5fec39e419caea9", + "revision": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f:research", + "sha256": "bc99a497a17383b1de39af0ebbdcc754c5dea463bb1994901f7af3f0dfce355a", + "type": "tree" + }, + { + "bytes": 357, + "oid": "fbabd8c1252d92c121724cf0ea1de6979ab3e0d8", + "revision": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f:research/community-frontier1042-audit", + "sha256": "508b07143b6d6ca14f5345ee9dacc2d7e94fd0621f16fe5b656eb8a2f80ab566", + "type": "tree" + }, + { + "bytes": 19299540, + "oid": "6f4dc6fe7631d8aacf8081fcaecf32197181685b", + "revision": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f:research/community-frontier1042-audit/selected-replay.tar.gz", + "sha256": "22c3f4dce4b897a1d423d1388801933e288b6a6b1906cb15e1b16a5eb68db754", + "type": "blob" + } + ], + "source_package": "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261020/packages/original-paired-gap", + "source_package_unchanged": true, + "source_parent_commits": false, + "status": "PASS_CURRENT_PUBLICATION_COLD_REPLAY", + "stderr": "", + "stdout": "PASS_EXACT_ORIGINAL_PAIRED_MAPS\nPASS_ORIGINAL_PAIRED_NATIVE_COMPONENTS\nPASS_GENERAL_MONOMIAL_SQUARE_IDENTITIES\nPASS_PORTABLE_ORIGINAL_PAIRED_GAP\n", + "supplement_runs": [ + { + "command": [ + "/opt/homebrew/opt/python@3.14/bin/python3.14", + "-I", + "-O", + "-B", + "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261022/reviews/original-paired-gap/cold-verified/package/evidence/independent_algebra.py", + "--out", + "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261022/reviews/original-paired-gap/cold-verified/INDEPENDENT-ALGEBRA.json" + ], + "matches_retained_receipt": true, + "sha256": "9d5146ea7a8feb9e3f7a99e613841f793ca7afea2db8caf6ea8895e11fa1cf52", + "stderr": "", + "stdout": "PASS_INDEPENDENT_RECTANGULAR_PHYSICAL_EXAMPLE\n" + }, + { + "command": [ + "/opt/homebrew/opt/python@3.14/bin/python3.14", + "-I", + "-O", + "-B", + "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261022/reviews/original-paired-gap/cold-verified/package/evidence/check_negative_witnesses.py", + "--package", + "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261022/reviews/original-paired-gap/cold-verified/package", + "--repo", + "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261022/reviews/original-paired-gap/cold-verified/source.git", + "--out", + "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261022/reviews/original-paired-gap/cold-verified/NEGATIVE-WITNESSES.json" + ], + "matches_retained_receipt": true, + "sha256": "1992edbbe31aedf839ccb2cdd37c77e7060018fd65032f34d044afc348808b1c", + "stderr": "", + "stdout": "{\n \"arithmetic\": \"Exact rational real and imaginary parts\",\n \"controls\": {\n \"backward\": {\n \"missing_input_graph\": {\n \"character\": 0,\n \"input_coordinate\": 112,\n \"nonzero_error\": [\n \"-1\",\n \"0\"\n ],\n \"output_coordinate\": 0\n },\n \"missing_translations\": {\n \"character\": 1,\n \"input_coordinate\": 929,\n \"nonzero_error\": [\n \"0\",\n \"4\"\n ],\n \"output_coordinate\": 0\n },\n \"mode_preload_before_old_mode_read\": {\n \"character\": 0,\n \"input_coordinate\": 816,\n \"nonzero_error\": [\n \"1\",\n \"0\"\n ],\n \"output_coordinate\": 0\n }\n },\n \"forward\": {\n \"missing_input_graph\": {\n \"character\": 0,\n \"input_coordinate\": 0,\n \"nonzero_error\": [\n \"-1\",\n \"0\"\n ],\n \"output_coordinate\": 112\n },\n \"missing_translations\": {\n \"character\": 1,\n \"input_coordinate\": 0,\n \"nonzero_error\": [\n \"-2\",\n \"0\"\n ],\n \"output_coordinate\": 112\n },\n \"target_correction_before_mode_update\": {\n \"character\": 0,\n \"input_coordinate\": 704,\n \"nonzero_error\": [\n \"-1\",\n \"0\"\n ],\n \"output_coordinate\": 112\n }\n }\n },\n \"inherited\": \"Formal row generation uses the declared package; character evaluation is new review code\",\n \"native_eigenvalue\": \"C_p has eigenvalue i^parity(character & port_label)\",\n \"scope\": \"Each wrapper mutation fails on an actual spatial Fourier character at tensor depth one\",\n \"status\": \"PASS_ACTUAL_NATIVE_NEGATIVE_WITNESSES\"\n}\n" + } + ] +} diff --git a/research/original-paired-gap/evidence/publication-20261022/INDEPENDENT-CENSUS.json b/research/original-paired-gap/evidence/publication-20261022/INDEPENDENT-CENSUS.json new file mode 100644 index 0000000000..215035689f --- /dev/null +++ b/research/original-paired-gap/evidence/publication-20261022/INDEPENDENT-CENSUS.json @@ -0,0 +1,125 @@ +{ + "costs": { + "backward": { + "complete_scalar_allowance": 442884, + "core_scalar_allowance": 204418, + "native_events_per_pair": 10112, + "native_profile_per_core": { + "1": 2412, + "2": 418, + "3": 432, + "4": 142, + "5": 82 + }, + "native_rank_mass_per_pair": 11044, + "wrapper_ADDs": 2688, + "wrapper_abs_coefficients": { + "1/8": 1792, + "2": 896 + }, + "wrapper_scalar_allowance": 34048, + "wrapper_translations": 448 + }, + "forward": { + "complete_scalar_allowance": 433924, + "core_scalar_allowance": 204418, + "native_events_per_pair": 10112, + "native_profile_per_core": { + "1": 2412, + "2": 418, + "3": 432, + "4": 142, + "5": 82 + }, + "native_rank_mass_per_pair": 11044, + "wrapper_ADDs": 2688, + "wrapper_abs_coefficients": { + "1": 1792, + "1/4": 896 + }, + "wrapper_scalar_allowance": 25088, + "wrapper_translations": 448 + } + }, + "imports": "Python standard library only; no package or producer imports", + "limits": "The vector evaluation strips the admitted native frames. It does not recheck old core native kernels, the owner schedule, or a complete supplier.", + "scope": "Exact source bytes, literal scalar costs, and six depth-one actual-character mutation witnesses", + "source_checks": { + "loader_origin": { + "commit": "7649d9ceecec949541bec4bbde5929344166ba59", + "path": "research/native-source-codes/source_data.py", + "sha256": "d23924511e3aed41e5e64511ca70126a636d91c8aa02e656cb61d6ceca1fe0a0" + }, + "notices/LICENSE": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "notices/research/gauge44-slots-t16/NOTICE.md": "7a8d17b04da1e6c9d0ec217fb5bda72faa09d9a21695128722dd1e2827870fcf", + "notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md": "a75967ebc34e3bf2ff2c25c08e6c7f1a61b0c0d171cfd1b62196ae2caaf2c610", + "notices/research/gauge44-slots-t16/construction/NOTICE.md": "defe7e44af610e25a6c50c1c3b2efd0972d0690574995c0c872fc50eebf4c816", + "notices/research/gauge44-slots-t16/t16/NOTICE.md": "902370e6bfcd39dbea2ece474f15fccbcce3b8e966b2b94066bd03e5174591b5", + "route_method_origin": { + "commit": "a6e6ad3936f67b8f63b5b68c5e75d540610a65e7", + "path": "research/joint-query/verify_native.py", + "sha256": "1c58e7b6e8e1cde4df455c2129601c145ed763fc63a3ab427eb1058d1fc08bd2" + } + }, + "status": "PASS_INDEPENDENT_PUBLICATION_CENSUS_AND_WITNESSES", + "witnesses": { + "backward": { + "missing_input_graph": { + "character": 0, + "error": [ + "-1", + "0" + ], + "input_column": 112, + "output_row": 0 + }, + "missing_translations": { + "character": 1, + "error": [ + "0", + "4" + ], + "input_column": 929, + "output_row": 0 + }, + "wrong_order": { + "character": 0, + "error": [ + "1", + "0" + ], + "input_column": 816, + "output_row": 0 + } + }, + "forward": { + "missing_input_graph": { + "character": 0, + "error": [ + "-1", + "0" + ], + "input_column": 0, + "output_row": 112 + }, + "missing_translations": { + "character": 1, + "error": [ + "-2", + "0" + ], + "input_column": 0, + "output_row": 112 + }, + "wrong_order": { + "character": 0, + "error": [ + "-1", + "0" + ], + "input_column": 704, + "output_row": 112 + } + } + } +} diff --git a/research/original-paired-gap/evidence/publication-20261022/REVIEW.json b/research/original-paired-gap/evidence/publication-20261022/REVIEW.json new file mode 100644 index 0000000000..888d45290d --- /dev/null +++ b/research/original-paired-gap/evidence/publication-20261022/REVIEW.json @@ -0,0 +1,71 @@ +{ + "checks_not_run": [ + "Every old native core kernel calculation", + "Separate 280-slot owner patch and one-shot mode histories", + "Complete global native word and final H/G access", + "Full data and mode decoder", + "Complete finite implementation invoice and precision", + "Recursive supplier admission and kappa calculation", + "Repository-wide historical test suites", + "Final PR body, GitHub links, and rendered publication" + ], + "claims_accepted": [ + "Conditional monomial-square local protocol with explicit raw-interface and frame premises", + "Original-complex fixed local pair with arbitrary mode and helper inputs", + "Both algebraic inverse orders, not mutual inverse words", + "All-stage query/injection zero product under one transported global T", + "Specified literal wrapper and complete explicit scalar allowances", + "No complete supplier, global closure, kappa change, or selected-frontier change" + ], + "free_bytes_after": 8691105792, + "fresh_execution": { + "cold_source_alternates": false, + "cold_source_checkout": false, + "cold_source_objects": 7, + "independent_census_status": "PASS_INDEPENDENT_PUBLICATION_CENSUS_AND_WITNESSES", + "output_comparisons": { + "ALGEBRA-CHECKS.json": { + "matches_retained_receipt": true, + "sha256": "49ed9629670af3825290409ef890e62850d71bec89aba9e3355277ec3303785a" + }, + "NATIVE-CHECKS.json": { + "matches_retained_receipt": true, + "sha256": "ee369640862c4961be56327cd248599257469fbd090ba3b60814184be2f7f074" + }, + "PAIR-CHECKS.json": { + "matches_retained_receipt": true, + "sha256": "89c50c9ece5c209c3f17ed9cea7dfd79715a8ef7c4031603adbc8e1a274f6089" + }, + "REPLAY.json": { + "matches_retained_receipt": true, + "sha256": "12481f1fdb5464bd1bcba8950599da05a5ea0994e1e3559157d21423ef254e75" + } + }, + "returncode": 0, + "stderr": "", + "stdout": "PASS_EXACT_ORIGINAL_PAIRED_MAPS\nPASS_ORIGINAL_PAIRED_NATIVE_COMPONENTS\nPASS_GENERAL_MONOMIAL_SQUARE_IDENTITIES\nPASS_PORTABLE_ORIGINAL_PAIRED_GAP\n", + "supplemental_output_hashes": { + "INDEPENDENT-ALGEBRA.json": "9d5146ea7a8feb9e3f7a99e613841f793ca7afea2db8caf6ea8895e11fa1cf52", + "NEGATIVE-WITNESSES.json": "1992edbbe31aedf839ccb2cdd37c77e7060018fd65032f34d044afc348808b1c" + } + }, + "historical_source_commit": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f", + "material_findings": [], + "package_changed_by_review": false, + "review_date": "2026-10-22", + "review_files_sha256": { + "COLD-REPLAY.json": "ef210b883ae9f780d62bca995b4bda3cdd756eb1b335402345e54563a0fb8eac", + "INDEPENDENT-CENSUS.json": "5b5e9e99362c61e2a1b70a45aa7867bb75afdb9d836c0c816435191e080acb39", + "REVIEW.md": "c4543e2c155f759bd4a3ec9bbc0207d1c8c1e62ee7938311e679f371c8654e24", + "cold_review.py": "5d0bab877d47a1fe2172fb26dfa98d77df21370c133b55eeb5168322bf9c9bfb", + "independent_census.py": "21d6dda25e3ca06978c36b4b876c5ad59c3f3527ac709a5696876dd1c56edf1f" + }, + "review_type": "Separate OpenAI Codex agent review; not a human review or formal proof", + "reviewed_package": "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261020/packages/original-paired-gap", + "reviewed_package_files": 53, + "reviewed_package_manifest_sha256": "a91b8ad2e9f3ac84e7dd7171328ba61794ebb74e00b0a2eacce3e0d419153de4", + "staged_original_file_differences": [], + "staged_original_files_compared": 53, + "staged_package": "/Users/aliromman/.codex/worktrees/centre-publication-wrap/IntegerMultiplicationBounds/research/original-paired-gap", + "status": "PASS_SCOPED_PAIRED_GAP_PUBLICATION_REVIEW" +} diff --git a/research/original-paired-gap/evidence/publication-20261022/REVIEW.md b/research/original-paired-gap/evidence/publication-20261022/REVIEW.md new file mode 100644 index 0000000000..abf312d484 --- /dev/null +++ b/research/original-paired-gap/evidence/publication-20261022/REVIEW.md @@ -0,0 +1,144 @@ +# Review of the paired-gap publication package + +The prepared package passes this review in its stated local scope. No +material defect was found. This is a separate OpenAI Codex agent review. +It is not a human review, a formal proof, or a complete supplier audit. + +The review covers the 53-file publication extraction at +`publication-wrap-20261020/packages/original-paired-gap`. Its +`MANIFEST.json` has SHA-256 +`a91b8ad2e9f3ac84e7dd7171328ba61794ebb74e00b0a2eacce3e0d419153de4`. +Every manifest entry was checked. The review did not change this package +or its frozen evidence. All 53 original files also match the staged copy +at `research/original-paired-gap` in the publication worktree. + +## Claims and proof + +The general result is a conditional local protocol. It requires the +admitted raw interface, arbitrary helper and mode contracts, legal +monomial access to `Q^2` and `Q^-2`, matching replica views, and the stated +productive-frame intertwiners. These conditions are explicit. The proof +does not construct a raw interface for an unspecified Q. + +For invertible Q, the definitions give +`T=[[0,Q],[Q^-1,0]]` and `T^2=I`. The conversion from each physical graph +to its logical map uses the stated frames in the correct order. The +forward target graph uses the updated mode. The backward source graph +uses the old mode before the mode preload. Both displayed inverses are +correct. The two local words are not asserted to be mutual inverses. + +The all-stage conclusion uses one transported global T. It does not +require R or K to commute with Q, or equal centre row spaces. The +cancellation is the adjacent product `(I-T)(I+T)=0`. The proof correctly +restricts an intervening data map and requires matching replica views. +It does not infer a common mode action from the data-side map A. + +For the fixed native instance, the line formula includes the scalar +phase and gives `C_p^2=X_p`. The route argument uses `gp=p`, including +owner-dependent direction and the entry and exit translations. Exact +tensoring supports the stated positive-depth extension. Two replicas +are used at each depth; the replica index is not tensored. The complete +old core kernel and helper-frame contract remain inherited premises. + +The README, proof, and notices agree on the scope. All 16 mode inputs +are arbitrary. Their outputs are part of the map and are not claimed +restored. The 944 ordinary helpers are restored in their specified +frames. The private fields are preserved by non-use. Final odd-phase +H/G access, mode restoration in a complete controller, and full global +closure remain open. The package claims no complete supplier, kappa +change, or selected-frontier change. + +## Fresh execution + +The accepted cold run copied the current 53-file package to a fresh +directory. Its bare Git source store contains only seven exact objects: +the historical commit, three path trees, the archive blob, and two +attribute blobs. It has no parent commits, alternates, or source checkout. +The Python process used `-I -O -B`, one-thread environment settings, and +no campaign module imports. The documented four PASS lines were produced. + +All four output receipts match the retained receipts byte for byte: + +| Receipt | SHA-256 | +| --- | --- | +| PAIR-CHECKS.json | `89c50c9ece5c209c3f17ed9cea7dfd79715a8ef7c4031603adbc8e1a274f6089` | +| NATIVE-CHECKS.json | `ee369640862c4961be56327cd248599257469fbd090ba3b60814184be2f7f074` | +| ALGEBRA-CHECKS.json | `49ed9629670af3825290409ef890e62850d71bec89aba9e3355277ec3303785a` | +| REPLAY.json | `12481f1fdb5464bd1bcba8950599da05a5ea0994e1e3559157d21423ef254e75` | + +The cold run also executed both portable supplemental scripts. The +rectangular physical example and actual-character mutation receipts +match their retained bytes. The rectangular example imports no package +code. It checks noncommuting rectangular R/K, nontrivial productive +frames, both inverse orders, and a Q without a fourth-power identity. +The retained mutation script uses package row generation. This limit +is stated in its receipt. + +A new check, `independent_census.py`, imports no package or producer code. +It evaluates the literal scalar words and physical wrapper on six exact +native Fourier-character inputs. It reproduces each retained nonzero +mutation error. Missing input graphs, omitted translations, and the +wrong update order all fail. In particular, omitted translations give +errors `-2` forward and `4i` backward at character 1. The scalar-frame +interpretation of the old native core is an inherited premise of this +vector check. This check is not a new native-core audit. + +The main replay checks every 704-column core map and every 1,408-column +paired map, arbitrary helper and mode inputs, private non-use, both +inverse orders, frame records, and the retained native streams. It also +checks 57,344 line columns and all 1,008 source-derived affine routes. +These counts were checked in the code and the fresh outputs. Finite +checks support the separately read proof; they do not prove a full +multiplication theorem. + +## Costs and source credit + +An independent event census gives 2,688 added ADDs and 448 literal +translations per orientation. The forward coefficients are 1,792 at +absolute value 1 and 896 at absolute value 1/4. The backward coefficients +are 1,792 at absolute value 1/8 and 896 at absolute value 2. The added +real scalar allowances are 25,088 and 34,048. Each retained core has +allowance 204,418, so the complete explicit scalar totals are 433,924 +and 442,884. + +The retained native profile per core is +`{1:2412,2:418,3:432,4:142,5:82}`. Two cores have rank mass 11,044 and +10,112 native events. No native child is added. The stated wrapper norm +bounds 57/58 and 9/8 follow from the physical order and the R/K row norms. +They do not bound the complete core or supplier. + +The cost exclusions are clear: native child work, native wrapper and +address-map execution, owner access, mode histories, backfills, final +decoder, storage, precision, and recursive assembly. A translation count +is not a real-primitive execution cost. + +The five retained license and contributor files match the historical +Git blobs byte for byte. The loader matches its +[pinned source](https://github.com/CrocSwap/integer-mult-bounds/blob/7649d9ceecec949541bec4bbde5929344166ba59/research/native-source-codes/source_data.py) +in [PR #1862](https://github.com/CrocSwap/integer-mult-bounds/pull/1862). +The direct route calculation follows the +[pinned source](https://github.com/CrocSwap/integer-mult-bounds/blob/a6e6ad3936f67b8f63b5b68c5e75d540610a65e7/research/joint-query/verify_native.py) +in [PR #1969](https://github.com/CrocSwap/integer-mult-bounds/pull/1969). +The original notices support the named predecessor roles and the +`@FanPUYen` identity. The package distinguishes these source contributions +from the campaign work and discloses substantial AI assistance. + +## Limits and publication handoff + +The review read the complete current proof and all five main executable +files, the supplemental scripts, the relevant local and native reviews, +and the owner composition review. It did not rerun the separate 280-slot +owner patch, one-shot mode histories, or their invoice. These remain +archival applicability evidence. It did not rerun every old native +kernel, a repository-wide suite, recursive admission, or a kappa +calculation. It does not establish a full emitted global word. + +The first cold fixture omitted the two attribute blobs and Git emitted +missing-attribute diagnostics during object insertion. The accepted +fresh fixture includes both exact blobs and ran without those messages. +This was a review-fixture correction. No package change was needed. + +The coordinator must review the final PR body against these limits and +check its exact commit links and GitHub rendering. Those publication +checks are outside this package acceptance. The new upstream selected +result does not change this package's historical source pins. diff --git a/research/original-paired-gap/evidence/publication-20261022/cold_review.py b/research/original-paired-gap/evidence/publication-20261022/cold_review.py new file mode 100644 index 0000000000..de044099f6 --- /dev/null +++ b/research/original-paired-gap/evidence/publication-20261022/cold_review.py @@ -0,0 +1,128 @@ +"""Check the publication package with a separate Git object store. + +This review uses the Python standard library and Git. It does not change +the source package. OpenAI Codex assisted this review. +""" + +from hashlib import sha256 +from pathlib import Path +import argparse +import json +import os +import platform +import shutil +import subprocess +import sys +import time + + +BASE = "bce54fb3f895cbe5cd4c0eb477c3afeed100190f" +ARCHIVE = "research/community-frontier1042-audit/selected-replay.tar.gz" +EXPECTED_LINES = [ + "PASS_EXACT_ORIGINAL_PAIRED_MAPS", + "PASS_ORIGINAL_PAIRED_NATIVE_COMPONENTS", + "PASS_GENERAL_MONOMIAL_SQUARE_IDENTITIES", + "PASS_PORTABLE_ORIGINAL_PAIRED_GAP", +] + + +def need(condition, message): + if not condition: + raise ValueError(message) + + +def digest(path): + return sha256(path.read_bytes()).hexdigest() + + +def git(repo, *args, data=None): + return subprocess.check_output(["git", "-C", str(repo), *args], input=data) + + +def save(path, value): + path.write_text(json.dumps(value, indent=2, sort_keys=True) + "\n", encoding="utf-8") + + +def main(args): + package = args.package.resolve() + repo = args.repo.resolve() + out = args.out.resolve() + need(not out.exists(), "Use a new cold output directory") + need(shutil.disk_usage(out.parent).free >= 3 * 1024**3, "Free space is below 3 GiB") + manifest = json.loads((package / "MANIFEST.json").read_bytes()) + before = {str(p.relative_to(package)): digest(p) for p in package.rglob("*") if p.is_file()} + need(set(before) == {"MANIFEST.json", *(item["path"] for item in manifest["files"])}, + "The manifest file set differs") + for item in manifest["files"]: + path = package / item["path"] + need(before[item["path"]] == item["sha256"] and path.stat().st_size == item["bytes"], + "The manifest bytes differ: " + item["path"]) + out.mkdir() + copy = out / "package" + shutil.copytree(package, copy) + bare = out / "source.git" + subprocess.run(["git", "init", "--bare", "--quiet", str(bare)], check=True) + objects = [] + for revision in (BASE + ":.gitattributes", BASE + ":research/.gitattributes", BASE, BASE + "^{tree}", BASE + ":research", BASE + ":research/community-frontier1042-audit", BASE + ":" + ARCHIVE): + oid = git(repo, "rev-parse", revision).decode().strip() + kind = git(repo, "cat-file", "-t", oid).decode().strip() + raw = git(repo, "cat-file", kind, oid) + actual = git(bare, "hash-object", "-w", "-t", kind, "--stdin", data=raw).decode().strip() + need(actual == oid, "The copied Git object differs") + objects.append({"revision": revision, "oid": oid, "type": kind, "bytes": len(raw), "sha256": sha256(raw).hexdigest()}) + need(not (bare / "objects/info/alternates").exists(), "The cold repository uses alternates") + archive = git(bare, "show", BASE + ":" + ARCHIVE) + need(sha256(archive).hexdigest() == "22c3f4dce4b897a1d423d1388801933e288b6a6b1906cb15e1b16a5eb68db754", "The cold archive differs") + run_out = out / "replay" + command = [sys.executable, "-I", "-O", "-B", str(copy / "replay.py"), "--repo", str(bare), "--out", str(run_out)] + env = {key: value for key, value in os.environ.items() + if not key.startswith(("GIT_", "PYTHON", "OMP_", "OPENBLAS_", "MKL_", "VECLIB_"))} + env.update(OMP_NUM_THREADS="1", OPENBLAS_NUM_THREADS="1", MKL_NUM_THREADS="1", VECLIB_MAXIMUM_THREADS="1") + started = time.monotonic() + result = subprocess.run(command, cwd=out, env=env, text=True, capture_output=True) + elapsed = time.monotonic() - started + (out / "stdout.txt").write_text(result.stdout, encoding="utf-8") + (out / "stderr.txt").write_text(result.stderr, encoding="utf-8") + need(result.returncode == 0 and result.stdout.splitlines() == EXPECTED_LINES, "The cold replay failed") + comparisons = {} + for name in ("PAIR-CHECKS.json", "NATIVE-CHECKS.json", "ALGEBRA-CHECKS.json", "REPLAY.json"): + actual = digest(run_out / name) + expected = digest(copy / "evidence" / name) + need(actual == expected, "The cold output differs: " + name) + comparisons[name] = {"sha256": actual, "matches_retained_receipt": True} + supplemental = [ + [sys.executable, "-I", "-O", "-B", str(copy / "evidence/independent_algebra.py"), "--out", str(out / "INDEPENDENT-ALGEBRA.json")], + [sys.executable, "-I", "-O", "-B", str(copy / "evidence/check_negative_witnesses.py"), "--package", str(copy), "--repo", str(bare), "--out", str(out / "NEGATIVE-WITNESSES.json")], + ] + supplement_runs = [] + for command2 in supplemental: + result2 = subprocess.run(command2, cwd=out, env=env, text=True, capture_output=True) + need(result2.returncode == 0, "A supplementary check failed: " + result2.stderr) + path = Path(command2[-1]) + need(digest(path) == digest(copy / "evidence" / path.name), "A supplementary receipt differs") + supplement_runs.append({"command": command2, "stdout": result2.stdout, "stderr": result2.stderr, "sha256": digest(path), "matches_retained_receipt": True}) + after = {str(p.relative_to(package)): digest(p) for p in package.rglob("*") if p.is_file()} + need(before == after, "The source package changed") + need(shutil.disk_usage(out).free >= 3 * 1024**3, "Free space is below 3 GiB") + save(out / "COLD-REPLAY.json", { + "status": "PASS_CURRENT_PUBLICATION_COLD_REPLAY", + "review_type": "Separate OpenAI Codex agent review; no human review claim", + "source_package": str(package), "source_package_unchanged": True, + "package_files": len(before), "package_manifest_sha256": before["MANIFEST.json"], + "python": sys.version, "platform": platform.platform(), + "command": command, "cwd": str(out), "exit_code": result.returncode, + "stdout": result.stdout, "stderr": result.stderr, "seconds": elapsed, + "source_objects": objects, "source_alternates": False, + "source_checkout": False, "source_parent_commits": False, + "output_comparisons": comparisons, "supplement_runs": supplement_runs, + "free_bytes_after": shutil.disk_usage(out).free, + }) + print("PASS_CURRENT_PUBLICATION_COLD_REPLAY") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--package", required=True, type=Path) + parser.add_argument("--repo", required=True, type=Path) + parser.add_argument("--out", required=True, type=Path) + main(parser.parse_args()) diff --git a/research/original-paired-gap/evidence/publication-20261022/independent_census.py b/research/original-paired-gap/evidence/publication-20261022/independent_census.py new file mode 100644 index 0000000000..2415f8efd9 --- /dev/null +++ b/research/original-paired-gap/evidence/publication-20261022/independent_census.py @@ -0,0 +1,173 @@ +"""Check source bytes, literal costs, and six mutation witnesses. + +This check imports no package or producer module. It evaluates one exact +input vector for each witness. The old native core contract is inherited. +OpenAI Codex assisted this review. +""" + +from collections import Counter +from copy import deepcopy +from fractions import Fraction as F +from hashlib import sha256 +from pathlib import Path +import argparse +import gzip +import json +import subprocess + + +def need(condition, message): + if not condition: + raise ValueError(message) + + +def git_blob(repo, commit, path): + return subprocess.check_output(["git", "-C", str(repo), "show", commit + ":" + path]) + + +def digest(raw): + return sha256(raw).hexdigest() + + +def allowance(op): + if op[0] in ("copy", "clear"): + return 1 + value = F(*op[-2:]) + numerator, denominator = abs(value.numerator), value.denominator + need(numerator > 0 and denominator & (denominator - 1) == 0, "Nonzero dyadic coefficient") + if op[0] == "scale": + need(numerator & (numerator - 1) == 0, "Power-of-two scale") + return abs(numerator.bit_length() - denominator.bit_length()) + (value < 0) + need(op[0] == "add", "Known scalar operation") + return 1 + numerator.bit_length() + numerator.bit_count() + denominator.bit_length() + + +def rotate(value, power): + a, b = value + return ((a, b), (-b, a), (-a, -b), (b, -a))[power % 4] + + +def add(left, right, coefficient): + return left[0] + coefficient * right[0], left[1] + coefficient * right[1] + + +def evaluate(parts, core, labels, character, input_column): + values = [(F(0), F(0)) for _ in range(1408)] + values[input_column] = F(1), F(0) + parity = [(character & label).bit_count() % 2 for label in labels] + + def endpoint(events, bank, power): + for replica in range(2): + for port in range(112): + index = replica * 704 + bank + port + values[index] = rotate(values[index], power * parity[port]) + for event in events: + replica, slot = event["target"] + index = replica * 704 + slot + if event["kind"] == "physical_translation": + values[index] = rotate(values[index], 2 * parity[slot % 112]) + else: + need(event["kind"] == "physical_add", "Known wrapper event") + source_replica, source_slot = event["source"] + values[index] = add(values[index], values[source_replica * 704 + source_slot], F(event["coefficient"])) + for replica in range(2): + for port in range(112): + index = replica * 704 + bank + port + values[index] = rotate(values[index], -power * parity[port]) + + endpoint(parts["prefix"], 0, 1) + for replica in range(2): + for event in core: + if event[0] != "scalar": + continue + op = event[1] + need(op[1][0] == "L", "The core does not use a private target") + index = replica * 704 + op[1][1] + if op[0] == "scale": + values[index] = tuple(F(op[2], op[3]) * value for value in values[index]) + else: + need(op[0] == "add" and op[2][0] == "L", "The core does not use a private source") + values[index] = add(values[index], values[replica * 704 + op[2][1]], F(op[3], op[4])) + endpoint(parts["suffix"], 112, -1) + return values + + +def main(args): + package = args.package.resolve() + source = json.loads((package / "SOURCES.json").read_bytes()) + source_checks = {} + for item in source["copied_files"]: + if "source_commit" in item: + raw = git_blob(args.repo, item["source_commit"], item["source_path"]) + need(raw == (package / item["file"]).read_bytes(), "Exact retained source notice") + source_checks[item["file"]] = digest(raw) + for name in ("loader_origin", "route_method_origin"): + item = source[name] + raw = git_blob(args.repo, item["commit"], item["path"]) + if name == "loader_origin": + need(raw == (package / "source_data.py").read_bytes(), "Unchanged loader source") + source_checks[name] = {"commit": item["commit"], "path": item["path"], "sha256": digest(raw)} + t16 = (package / "notices/research/gauge44-slots-t16/t16/NOTICE.md").read_text() + need("Hao Yan (@FanPUYen)" in t16, "The named account has source evidence") + cores = json.loads(gzip.decompress((package / "data/FULL-MODE-PROGRAMS.json.gz").read_bytes())) + packet = json.loads(gzip.decompress((package / "data/PAIRED-PROGRAMS.json.gz").read_bytes())) + labels = [item["label"] for item in json.loads((package / "data/INPUT-LINES.json").read_bytes())["recipes"]] + costs, witnesses = {}, {} + cases = { + "forward": {"missing_input_graph": (0, 0, 112, (-1, 0)), + "missing_translations": (1, 0, 112, (-2, 0)), + "wrong_order": (0, 704, 112, (-1, 0))}, + "backward": {"missing_input_graph": (0, 112, 0, (-1, 0)), + "missing_translations": (1, 929, 0, (0, 4)), + "wrong_order": (0, 816, 0, (1, 0))}, + } + for direction, core in cores.items(): + parts = packet["programs"][direction] + wrapper = parts["prefix"] + parts["suffix"] + adds = [event for event in wrapper if event["kind"] == "physical_add"] + coefficients = Counter(str(abs(F(event["coefficient"]))) for event in adds) + profile = Counter(event[5] for event in core if event[0] == "climb") + core_cost = 2 * sum(allowance(event[1]) for event in core if event[0] == "scalar") + wrapper_cost = 2 * sum(allowance(["add", None, None, F(event["coefficient"]).numerator, F(event["coefficient"]).denominator]) for event in adds) + native_count = sum(event[0] in ("climb", "adapter", "residual_adapter") for event in core) + need(core_cost == 204418 and native_count == 5056, "Exact core invoice") + need(len(adds) == 2688 and len(wrapper) == 3136, "Exact wrapper event count") + need(wrapper_cost == (25088 if direction == "forward" else 34048), "Exact wrapper invoice") + need(2 * sum(rank * count for rank, count in profile.items()) == 11044, "Exact native rank mass") + costs[direction] = {"wrapper_ADDs": len(adds), "wrapper_translations": len(wrapper) - len(adds), + "wrapper_abs_coefficients": dict(coefficients), "core_scalar_allowance": core_cost, + "wrapper_scalar_allowance": wrapper_cost, "complete_scalar_allowance": 2 * core_cost + wrapper_cost, + "native_profile_per_core": dict(profile), "native_events_per_pair": 2 * native_count, + "native_rank_mass_per_pair": 11044} + witnesses[direction] = {} + for name, (character, column, row, expected) in cases[direction].items(): + mutant = deepcopy(parts) + if name == "missing_input_graph": + mutant["prefix"] = [] + elif name == "missing_translations": + for side in ("prefix", "suffix"): + mutant[side] = [event for event in mutant[side] if event["kind"] != "physical_translation"] + elif direction == "forward": + mutant["suffix"] = mutant["suffix"][896:] + mutant["suffix"][:896] + else: + mutant["prefix"] = mutant["prefix"][-896:] + mutant["prefix"][:-896] + original = evaluate(parts, core, labels, character, column) + changed = evaluate(mutant, core, labels, character, column) + error = add(changed[row], original[row], -1) + need(error == expected and error != (0, 0), "Exact actual-character mutation witness") + witnesses[direction][name] = {"character": character, "input_column": column, "output_row": row, "error": [str(x) for x in error]} + result = {"status": "PASS_INDEPENDENT_PUBLICATION_CENSUS_AND_WITNESSES", + "imports": "Python standard library only; no package or producer imports", + "source_checks": source_checks, "costs": costs, "witnesses": witnesses, + "scope": "Exact source bytes, literal scalar costs, and six depth-one actual-character mutation witnesses", + "limits": "The vector evaluation strips the admitted native frames. It does not recheck old core native kernels, the owner schedule, or a complete supplier."} + args.out.write_text(json.dumps(result, indent=2, sort_keys=True) + "\n", encoding="utf-8") + print(result["status"]) + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--package", required=True, type=Path) + parser.add_argument("--repo", required=True, type=Path) + parser.add_argument("--out", required=True, type=Path) + main(parser.parse_args()) diff --git a/research/original-paired-gap/notices/LICENSE b/research/original-paired-gap/notices/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/original-paired-gap/notices/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/research/original-paired-gap/notices/research/gauge44-slots-t16/NOTICE.md b/research/original-paired-gap/notices/research/gauge44-slots-t16/NOTICE.md new file mode 100644 index 0000000000..30d0c8cd3c --- /dev/null +++ b/research/original-paired-gap/notices/research/gauge44-slots-t16/NOTICE.md @@ -0,0 +1,24 @@ +# Gauge44 attribution and scope + +New contributions by icekylinx, with OpenAI GPT-6 Astra assistance. +Local review and packaging used OpenAI Codex. Apache-2.0 applies; +the license is included. The full original PR635 notice is preserved as +UPSTREAM-NOTICE.md and construction/UPSTREAM-NOTICE.md. + +The new contribution is the changed source-branch gauge and retired-row +completion, source-carried coordinate totals, exact 44-cold-end realization, +and explicit all72 whole-family assignment using concave capacity matching +with integer majorization certificates. The center-carrier generalization +retains the exact ordered common frames and complete native local contract. +Independent local, price, interface and owner fixed-point checks are included. + +The construction retains the credited PR635 K-triangle and porting machinery, +earlier joint-prefix/HPE/frame ancestry and icekylinx's prior factory work. +#645 used the same cited PR543 bit supplier as PR635. This package (research/gauge44-leaver8) cites the merged PR589 bit supplier instead, with a derived rank-mass deficit (PROOF-NOTE-BIT.md); #645's retained PR543-based evidence is historical. It builds #645's word without K-triangles (PartialK) and stacks earlier community jp8 layers on it (G44Stack), adds the p6n ends (NoTriReopen), entrance promotions (BlockInvert) a read-set exchange (BRoute), chafreaky's #741 frames, JointXF's joint exchange, NewBArch's triangle-hybrid B rewrite and LeaverSAT's eight k8 leaver cells (with LeaverSAT2's frame re-optimisation); see README. All-size, realization, +hosting, precision/tape, analytic-transfer and bit H1-H5 assumptions remain +conditional. No upstream license, credit, source pin or AI disclosure is +replaced by this notice. + +PR641 and PR642 were checked as concurrent reported frontier comparisons. +Their endpoints and owner maps are not included here. See CONSTRUCTION.md, +hosting/PROOF.md, independent/ and README.md for the exact contribution scope. diff --git a/research/original-paired-gap/notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md b/research/original-paired-gap/notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md new file mode 100644 index 0000000000..ebc24a0168 --- /dev/null +++ b/research/original-paired-gap/notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md @@ -0,0 +1,34 @@ +# Attribution and scope + +Four verified provider types are offered to every call: PR571's prefix word with twelve multi-cut cold kernels (PR568's unchanged constructor), the same word with forty width-five entrance promotions (PR569's unchanged frame constructor) before those kernels, PR575's plain joint-prefix provider, and PR568's eight-cold provider. A window MILP with an exact per-pattern model chooses the dispatch and a literal owner map. PR583's six source-bound kernel frame coalescences (its unchanged constructor and negative controls) are applied to every PR571-prefix provider word (ck and atm3), followed by two further coalescences that each first move one addition past two commuting additions (package code/build_gate_moves.py, extending PR583's constructor); a final hyperplane_end step (package code/build_hpe.py) then runs 46 single-gate cleanups h -= p right after part B at the dim-8 join U of their registers, so 46 width-8 entering helpers per call end at U with width 7; each such gate commutes with every earlier cleanup gate on its registers (for 8 of them the partner's one earlier gate x -= p only reads p), and the reordered program is replayed exactly. A window MILP (exact windows, RINS around an LP vertex) gives the dispatch ck 45 / atm3 21 / jp8 6 and the literal owner map. + +Pinned external sources (unchanged; `verify.py` checks their manifests and every file it uses): +- PR568 (`research/complex-multicold`, commit `71c99ac935a33bb7b59a1b4a7af8725a939b0b90`). +- PR571 (`research/structural-gain`, commit `b7bdc5a8de18fcf418cfb9c7d83a2b1097a5e4a3`). +- PR569 (`research/larger-gain`, commit `897213a855b7fb8a1b8b0e552a2f5c42e6c1b326`). +- PR575 (`research/complex-joint-prefix`, commit `eac6f7e378ab622dac50a2fd4b7ef6eab014de44`). +- PR583 (`research/kernel-frame-coalescing`, commit `89be768f0157f5a3d8e4db69cf1748768605eac9`). + +Provider construction is described as typed steps in `data/SPEC.json` (`build`); `verify.py` runs only allowlisted step types with their paired omission audits and checks every input and output content hash. `code/` holds the spec-driven global admission scripts adapted from PR571's `frontier-composition/global-code/` (OpenAI Codex assisted, Apache-2.0): every expected value is read from `data/SPEC.json` and compared only after independent recomputation. `code/generated_identity.py` and `code/generated_identity_controls.py`, and the decompressed-content artifact identities in the bind, audit, invoice, assembly and phase-timing scripts, are taken unchanged from PR586 by chafreaky (`research/promoted-kernel-coalescing`, commit `4846fee5b06af770e9b3a10c36200f673d656725`, OpenAI Codex assisted, Apache-2.0), including its proof-content and reference/metadata mutation controls; the normalization of descriptive width metadata after frame changes follows the same PR. + +In PR601, the owner map was nominated by a HiGHS window MILP (adapted from PR569's `global/nominate_width7.py`) with lazy cross-time Hall cuts; this package's re-solved map is described below. Neither is an admission dependency. + +DreamingOfClouds with Claude Opus 5.5 (Anthropic), via Claude Code. (The PR601 package this one starts from states: "Prepared by Claude Code (Anthropic) research agents.") Apache-2.0 applies; LICENSE is included. All notices, licenses, source pins and AI disclosures of the pinned sources and their ancestry are retained in those packages and are not replaced by this notice. All inherited conditional assumptions remain conditional. + +**This package (complex-571-cold14, DreamingOfClouds).** It starts from PR601 (jeremykothe2, `research/complex-571-hpem46`, commit `529ab7dcb59d5ea7a5798e9e06cf5b3aee8a1550`). Everything above is kept unchanged except the following: +- every provider chain (ck, atm3, jp8) gains the typed step `cold_end` (`code/build_cold_end.py`, `code/cold_end_controls.py`; recipes `data/recipes/*-cold_end.json.gz`); +- the generalised native chain and the global admission scripts accept cold helpers that end below FULL (with `0:U` wrappers), a refactored exact cleanup, and check the wrapper order; +- `data/PLAN.json` / `data/OWNERS.json.gz` (dispatch and literal owner map) come from a relocate/swap/ejection-chain/provider-flip annealing search started from PR601's map, refined by an exact pattern-restricted owner model (CP-SAT) with a literal edge-colouring expansion (not an admission dependency); +- `data/SPEC.json` holds the expected values, recorded by a discovery run and then checked by a strict run. + +The cold-end construction (a row-plus-column cone condition for low-frame ends, a rank-0 dirt-spread premix and multi-gate lower-frame cleanup) builds on PR591 / PR592 / PR593 / PR601 (jeremykothe2) and our PR599 (Lean: multi-gate and cold hyperplane-end tails). DreamingOfClouds with Claude Opus 5.5 (Anthropic), via Claude Code. Build on this at your own risk. + +**This package (complex-571-cold14-b3, jeremykothe2).** It is PR604's `complex-571-cold14` (DreamingOfClouds) with ColdBeyond's second cold end per block (two new `cold_end` A-gate primitives, `PROOF-NOTE.md`), ColdSupply's E1 entering pair and reviewed controls, a free dispatch (jp8 ×60, atm3 ×12) and a literal owner map from an exact per-time-Hall window MIP. All other construction, code, controls and proofs are PR604's and earlier contributors', unchanged. + +**This package (complex-571-cold14-k492).** It is complex-571-cold14-b3 with these changes: +- **K-triangle base words.** The leaver-read K-triangle skeleton atom and its read schedule (`data/TRI-SCHEDULE.json`) are by AtomScout, a Claude Code research agent. `code/construct_k_triangle.py` is PR531's `code/construct_504.py` (icekylinx, OpenAI Codex / GPT assisted, Apache-2.0; pinned source `direct_delivery`) extended with that atom. +- **Ported chains.** The PR604/B3 chains are ported stage by stage onto the K-triangle words by `code/build_port_stage.py` (Port480, a Claude Code research agent). `code/build_frame_regroup.py` extends PR583's `build_frames.py` (chafreaky). +- **Helper count R.** The generalisation of the global scripts to the provider helper count R is by GlobalR (a Claude Code research agent), with AtomReviewer's fixes (PROOF-NOTE-R.md). +- **Owner map.** The owner map, the cold_end recipes on the K-triangle words and the package assembly are by Stack492, Port480 and ColdBeyond (Claude Code research agents). + +Build on this at your own risk. diff --git a/research/original-paired-gap/notices/research/gauge44-slots-t16/construction/NOTICE.md b/research/original-paired-gap/notices/research/gauge44-slots-t16/construction/NOTICE.md new file mode 100644 index 0000000000..16b0507070 --- /dev/null +++ b/research/original-paired-gap/notices/research/gauge44-slots-t16/construction/NOTICE.md @@ -0,0 +1,9 @@ +# Construction delta notice + +Prepared for icekylinx with OpenAI GPT-6 Astra assistance. Apache-2.0. + +`construct_gauge_xcentre.py` modifies PR635's credited `construct_k_triangle.py`, which in turn extends icekylinx's PR531/PR514/PR425 factory lineage. Its original source comments are retained. The K-triangle schedule and the upstream porting, JP8 frame, kernel and HPE procedures are reused from the pinned source checkouts and are not new contributions of this delta. + +The new source-copy exchanges, complementary factory basis, carrier assignment, exact cold44 constructor and compact reproduction driver are described in `../CONSTRUCTION.md`. + +`UPSTREAM-NOTICE.md` is the complete unmodified notice from the pinned PR635 package. `LICENSE` is that package's Apache-2.0 license. All further notices and source credits of the referenced upstream packages remain applicable and are retained in the source checkouts rather than vendored again here. diff --git a/research/original-paired-gap/notices/research/gauge44-slots-t16/t16/NOTICE.md b/research/original-paired-gap/notices/research/gauge44-slots-t16/t16/NOTICE.md new file mode 100644 index 0000000000..403f4afffb --- /dev/null +++ b/research/original-paired-gap/notices/research/gauge44-slots-t16/t16/NOTICE.md @@ -0,0 +1,39 @@ +# Attribution and license + +Apache-2.0. New construction and integration: Hao Yan (@FanPUYen), 2026. +Prepared with substantial OpenAI Codex assistance, including separately tasked +AI agents for owner construction, independent mathematical/code checking and +native verification. These are not claims of independent human peer review. + +The exact local supplier is Jeremy Kothe's accepted PR799 X4 word, layered on +Chafik Boukhalfa's PR741 frame changes and PR685 owner construction. Chafik's +PR795 fixed-inventory optimality result motivated changing the replica count. +The original owner bytes, scalar program, local frame and width inventory, +native phase and wrapper implementations retain their existing authorship. + +Credit icekylinx for the source gauge and supplier/admission pipeline; +DreamingOfClouds for the PR589 bit transport and inherited cold-end work; +eumemic for the PR555 bit supplier and earlier supplier work; Rohan Arun for +the native exact-complex recurrence correction; Jeremy Diviney, jaymosley07, +and the other retained owner/allocation contributors; and the complete +PR514/PR484/PR507/PR558 controller, physical hosting and verification lineage. +This list is cumulative credit, not approval of every claim in those PRs. + +All original notices and licenses remain in the referenced source packages: + +- `research/gauge44-frames-x/{NOTICE,UPSTREAM-NOTICE}.md` +- `research/complex-sw4-frame8/PROVENANCE.md` +- `research/e8-bit-p111-tuned/tune/README.md` +- the repository `CONTRIBUTORS.md` and source-package licenses. + +The verifier copies pinned global source files into an external replay +directory and applies an explicit checked edit list. Original attribution +comments are preserved in those generated derivatives. No original source +file or historical certificate is rewritten. + +The optional ancestry-reuse coverage guard addresses the omission issue +identified by Lucas (@ljste) in PR838 and the related PR847 integration by +Chinmay (@chinmayarvind23). Its fixed inventories were read from the accepted +PR741 source; no pending implementation is imported. Charles Bethin's +concurrent PR850 strengthens the fixed-inventory owner-profile theorem and +was checked for overlap before publication; that inventory is changed here. diff --git a/research/original-paired-gap/replay.py b/research/original-paired-gap/replay.py new file mode 100644 index 0000000000..c6d5270704 --- /dev/null +++ b/research/original-paired-gap/replay.py @@ -0,0 +1,97 @@ +"""Replay the fixed paired-gap package into an explicit output directory. + +Python 3.10+, the standard library, and Git are required. New code is +Apache-2.0. OpenAI Codex assisted the research and implementation. +""" + +from hashlib import sha256 +from pathlib import Path +import argparse +import gzip +import importlib.util +import json + + +HERE = Path(__file__).resolve().parent +CORE_PIN = 'f271842a741584389e166e700e262f161b0dd570ce8c7a540f2717e90ead5205' +PAIR_PIN = '42aeb0902d8b2330f9050718c6d949993111a9fd898acad599ec867bb63a2b20' + + +def need(value, message): + if not value: + raise ValueError(message) + + +def module(name): + path = HERE / (name + '.py') + spec = importlib.util.spec_from_file_location(name, path) + result = importlib.util.module_from_spec(spec) + spec.loader.exec_module(result) + return result + + +def payload(name, expected): + raw = gzip.decompress((HERE / 'data' / name).read_bytes()) + need(sha256(raw).hexdigest() == expected, 'Decompressed payload pin: ' + name) + return json.loads(raw) + + +def write_json(path, value): + raw = (json.dumps(value, indent=2, sort_keys=True) + '\n').encode() + path.write_bytes(raw) + return sha256(raw).hexdigest() + + +def main(args): + output = args.out.resolve() + need(output != HERE and HERE not in output.parents, 'Use an output directory outside the package') + sources = json.loads((HERE / 'SOURCES.json').read_bytes()) + inputs = {} + for item in sources['copied_files']: + name = item['file'] + raw = (HERE / name).read_bytes() + need(sha256(raw).hexdigest() == item['sha256'], 'Pinned source differs: ' + name) + inputs[name] = item['sha256'] + source = module('source_data') + local = source.load_local(args.repo) + cores = payload('FULL-MODE-PROGRAMS.json.gz', CORE_PIN) + pair = payload('PAIRED-PROGRAMS.json.gz', PAIR_PIN) + need(pair['schema'] == 'paired-original-complex-endpoint-graphs-v1', 'Fixed packet schema') + need(pair['core_payload_sha256'] == CORE_PIN, 'Paired core binding') + scalar, r, k = module('verify_pair').verify(local, cores, pair, source) + print(scalar['status'], flush=True) + lines = json.loads((HERE / 'data' / 'INPUT-LINES.json').read_bytes()) + native = module('verify_native').verify(local, lines, pair, r) + print(native['status'], flush=True) + algebra = module('verify_algebra').verify(r, k) + print(algebra['status'], flush=True) + output.mkdir(parents=True, exist_ok=True) + outputs = {} + for name, value in [('PAIR-CHECKS.json', scalar), ('NATIVE-CHECKS.json', native), ('ALGEBRA-CHECKS.json', algebra)]: + outputs[name] = write_json(output / name, value) + result = { + 'status': 'PASS_PORTABLE_ORIGINAL_PAIRED_GAP', + 'source': source.source_manifest(), 'copied_input_sha256': inputs, + 'program_payload_sha256': PAIR_PIN, 'core_payload_sha256': CORE_PIN, + 'code_sha256': {name: sha256((HERE / name).read_bytes()).hexdigest() + for name in ('source_data.py', 'verify_pair.py', 'verify_native.py', 'verify_algebra.py', 'replay.py')}, + 'source_manifest_sha256': sha256((HERE / 'SOURCES.json').read_bytes()).hexdigest(), + 'output_sha256': outputs, + 'fresh_checks': ['All 704 raw core input columns and 1408 paired input columns', + 'Arbitrary modes, ordinary helper restoration, private non-use, both algebraic inverse orders', + 'Exact 57344 line columns and 1008 source-derived affine routes', + 'Ordered physical groups, literal local costs, general monomial-square identities and controls'], + 'inherited_or_not_run': ['Retained core native kernels and full helper interface are inherited', + 'Owner binding and one-shot mode histories are separately reviewed and not replayed here', + 'No complete global native word, final H/G access, coupled decoder, finite invoice, or supplier admission', + 'No repository-wide test suite or kappa calculation'], + } + write_json(output / 'REPLAY.json', result) + print(result['status']) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--repo', type=Path, required=True) + parser.add_argument('--out', type=Path, required=True) + main(parser.parse_args()) diff --git a/research/original-paired-gap/source_data.py b/research/original-paired-gap/source_data.py new file mode 100644 index 0000000000..c9d465ed47 --- /dev/null +++ b/research/original-paired-gap/source_data.py @@ -0,0 +1,348 @@ +"""Load frozen source data and derive the two clean-J scalar words. + +The source notices retain the supplier credits. New code is Apache-2.0. +The reconstruction follows the centre-encoding campaign's exact sparse +replay. Research, code and verification used OpenAI Codex assistance. +""" + +from collections import Counter +from fractions import Fraction as Q +from hashlib import sha256 +from io import BytesIO +from pathlib import Path +import argparse +import gzip +import json +import subprocess +import tarfile + + +BASE = "bce54fb3f895cbe5cd4c0eb477c3afeed100190f" +ARCHIVE = "research/community-frontier1042-audit/selected-replay.tar.gz" +ARCHIVE_SHA256 = "22c3f4dce4b897a1d423d1388801933e288b6a6b1906cb15e1b16a5eb68db754" +MEMBER_PINS = { + "slots/local/CANONICAL-WORD.json.gz": + "16bc0ebb04b4be6c0ade74badc6a0c0cdba4215eda86e4ff9f13abf8ecebd219", + "slots/local/LOCAL-PROGRAMS.json.gz": + "241fde27d4e43f5a9cb6b128f9f76c5131a53d09f0371676163f914d0b0fef3a", + "slots/local/CLIFFORD-RECIPES.json": + "d0768f2164d5f64a2fdbec422f1cfde4e400818792f1904ca541958377243731", + "slots/local/RESIDUAL-ADAPTERS.json": + "383f40aadd00a4ac700dfd0d4c22d6c6c0be9a9863116e4d69c7acd23bafae0c", + "t16/global/base/work/complex-nine-native/DATA-PHASES.json": + "c5916ff312678f12aba403847643fbbc29f643acec60bdf836fa56cd3e8251fa", +} +PAYLOAD_PINS = { + "CANONICAL-WORD.json.gz": + "4ddb29fb9bc6f27e0c0fbfcf19a2a93a3496ad900d0f6d89059d0305c9576c0c", + "LOCAL-PROGRAMS.json.gz": + "9f41d53659e9be84e20c661560c5687abbf5cd0660cdecbe01ad5eb29e6b8ee3", +} +CREDIT_PINS = { + "research/gauge44-slots-t16/NOTICE.md": + "7a8d17b04da1e6c9d0ec217fb5bda72faa09d9a21695128722dd1e2827870fcf", + "research/gauge44-slots-t16/construction/NOTICE.md": + "defe7e44af610e25a6c50c1c3b2efd0972d0690574995c0c872fc50eebf4c816", + "research/gauge44-slots-t16/UPSTREAM-NOTICE.md": + "a75967ebc34e3bf2ff2c25c08e6c7f1a61b0c0d171cfd1b62196ae2caaf2c610", + "research/gauge44-slots-t16/t16/NOTICE.md": + "902370e6bfcd39dbea2ece474f15fccbcce3b8e966b2b94066bd03e5174591b5", + "LICENSE": + "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", +} + + +def require(condition, message): + if not condition: + raise ValueError(message) + + +def read_git(repo, path, expected_sha256): + """Read a blob at BASE. Do not read the worktree copy.""" + raw = subprocess.check_output( + ["git", "show", BASE + ":" + path], cwd=Path(repo) + ) + require(sha256(raw).hexdigest() == expected_sha256, + "Source pin differs: " + path) + return raw + + +def archive_members(repo): + """Check the archive and each full member path before JSON parsing.""" + raw = read_git(repo, ARCHIVE, ARCHIVE_SHA256) + result = {} + with tarfile.open(fileobj=BytesIO(raw), mode="r:gz") as archive: + for name, expected in MEMBER_PINS.items(): + matches = [m for m in archive.getmembers() if m.name == name] + require(len(matches) == 1 and matches[0].isfile(), + "Source member is not one regular file: " + name) + payload = archive.extractfile(matches[0]).read() + require(sha256(payload).hexdigest() == expected, + "Member pin differs: " + name) + result[name] = payload + return result + + +def load_local(repo): + """Return the five decoded objects, keyed by their file names.""" + result = {} + for member, raw in archive_members(repo).items(): + name = member.rsplit("/", 1)[1] + payload = gzip.decompress(raw) if name.endswith(".gz") else raw + require(sha256(payload).hexdigest() == PAYLOAD_PINS.get( + name, MEMBER_PINS[member]), "Payload pin differs: " + name) + result[name] = json.loads(payload) + return result + + +def add(row, other, coefficient): + for column, value in other.items(): + value = row.get(column, 0) + coefficient * value + if value: + row[column] = value + else: + row.pop(column, None) + + +def product(left, right): + result = [] + for row in left: + result.append({}) + for k, coefficient in row.items(): + add(result[-1], right[k], coefficient) + return result + + +def difference(left, right): + result = [row.copy() for row in left] + require(len(left) == len(right), "Matrix row counts differ") + for row, other in zip(result, right): + add(row, other, Q(-1)) + return result + + +def scale(matrix, coefficient): + return [{j: coefficient * x for j, x in row.items() if coefficient * x} + for row in matrix] + + +def replay(program, n=704, cut=None): + """Replay exact scalar contents on all n+8 independent input columns.""" + rows = [{i: Q(1)} for i in range(n + 8)] + for index, event in enumerate(program): + if index == cut: + break + if event[0] != "scalar": + continue + op = event[1] + target = op[1][1] + (n if op[1][0] == "C" else 0) + if op[0] == "clear": + rows[target] = {} + elif op[0] == "scale": + rows[target] = {j: x * Q(op[2], op[3]) + for j, x in rows[target].items()} + else: + require(op[0] in ("copy", "add"), "Unknown scalar operation") + source = op[2][1] + (n if op[2][0] == "C" else 0) + if op[0] == "copy": + rows[target] = rows[source].copy() + else: + add(rows[target], rows[source], Q(op[3], op[4])) + return rows + + +def primitive_bound(op): + """Return the retained one-real-component dyadic scalar allowance.""" + if op[0] in ("clear", "copy"): + return 1 + coefficient = Q(op[3], op[4]) if op[0] == "add" else Q(op[2], op[3]) + a, b = abs(coefficient.numerator), coefficient.denominator + require(a > 0 and b & (b - 1) == 0, "Non-dyadic scalar allowance") + if op[0] == "scale": + require(a & (a - 1) == 0, "Scale is not a signed power of two") + return abs(a.bit_length() - b.bit_length()) + int(coefficient < 0) + require(op[0] == "add", "Unknown scalar allowance") + return 3 + a.bit_length() - 1 + a.bit_count() + b.bit_length() - 1 + + +def corrected_program(program, H, D, backward): + prefix = [] + + def emit(target, source, coefficient): + prefix.append(["scalar", ["add", target, source, + coefficient.numerator, coefficient.denominator], 0]) + + for k in range(8): + private = ["C", k] + prefix.append(["scalar", ["clear", private], 0]) + if backward: + for j, row in enumerate(D): + if k in row: + emit(private, ["L", 112 + j], row[k]) + for j, coefficient in sorted(H[k].items()): + emit(["L", j], private, -coefficient) + else: + for j, coefficient in sorted(H[k].items()): + emit(private, ["L", j], coefficient) + for j, row in enumerate(D): + if k in row: + emit(["L", 112 + j], private, row[k]) + prefix.append(["scalar", ["clear", private], 0]) + before = program.index(["phase", "A"]) + begin = program.index(["phase", "centers"]) + end = program.index(["phase", "B"]) + return (program[:before] + [["phase", "centre_dirty_correction"]] + + prefix + program[before:begin] + program[end:]), prefix + + +def check_frame_access(program, word): + """Check the canonical scalar ledger, between the retained adapters.""" + current = word["start"].copy() + [None] * 8 + n = len(word["start"]) + for event in program: + if event[0] == "climb": + require(current[event[2]] == event[3], "Wrong climb input frame") + current[event[2]] = event[4] + elif event[0] == "scalar": + op, frame = event[1:] + target = op[1][1] + (n if op[1][0] == "C" else 0) + if op[0] == "clear": + current[target] = frame + else: + require(current[target] == frame, "Wrong scalar target frame") + if op[0] in ("add", "copy"): + source = op[2][1] + (n if op[2][0] == "C" else 0) + require(current[source] == frame, "Wrong scalar source frame") + require(current[:n] == word["final"], "Wrong persistent final frames") + require(current[n:] == [0] * 8, "Wrong private final frames") + + +def reconstruct(repo): + """Derive R,H,D,J and both exact clean words from the frozen inputs.""" + local = load_local(repo) + word = local["CANONICAL-WORD.json.gz"] + programs = local["LOCAL-PROGRAMS.json.gz"] + v, n = word["v"], 2 * word["v"] + word["R"] + require((v, n, word["h"]) == (112, 704, 9), "Wrong supplier geometry") + boundary = replay(programs["forward"], n, + programs["forward"].index(["phase", "centers"])) + R = [{j: x for j, x in boundary[c].items() if j < v} + for c in word["centers"]] + H = [{j: x for j, x in boundary[c].items() if j >= 2 * v} + for c in word["centers"]] + require(len(R) == 8 and all( + boundary[c] == R[k] | H[k] + for k, c in enumerate(word["centers"])), "Unexpected centre dependence") + RT = [{k: row[j] for k, row in enumerate(R) if j in row} + for j in range(v)] + D = [{} for _ in range(v)] + for event in word["cut"]: + add(D[event[1] - v], {word["centers"].index(event[2]): + Q(event[3], event[4])}, Q(1)) + identity = [{i: Q(1)} for i in range(v)] + P = scale(product(RT, R), Q(1, 4)) + J = difference(identity, P) + require(product(R, RT) == [{i: Q(56)} for i in range(8)], + "R R^T differs from 56 I") + require(product(P, P) == scale(P, Q(14)), "P^2 differs from 14 P") + require(product(J, J) == difference(scale(identity, Q(13)), + scale(J, Q(12))), "Wrong J polynomial") + checks, clean = {}, {} + for name, program in programs.items(): + fixed, prefix = corrected_program(program, H, D, name == "backward") + rows = replay(fixed, n) + for i, row in enumerate(rows): + expected = {i: Q(1)} if i < n else {} + if name == "forward" and v <= i < 2 * v: + add(expected, J[i - v], Q(1)) + if name == "backward" and i < v: + add(expected, {v + j: x for j, x in J[i].items()}, Q(-1)) + require(row == expected, "Wrong clean-J map: " + name + ":" + str(i)) + check_frame_access(fixed, word) + native = ("climb", "adapter", "residual_adapter") + require([e for e in fixed if e[0] in native] == + [e for e in program if e[0] in native], + "Persistent native events changed") + require(not any(e[0] == "center" for e in fixed), "Centre child remains") + first_clear = next(i for i, e in enumerate(fixed) + if e == ["scalar", ["clear", ["C", 0]], 0]) + dirty = replay(fixed[:first_clear] + fixed[first_clear + 1:], n) + require(any(n in row for row in dirty[:n]), + "Missing-private-clear control did not fail") + start = fixed.index(["phase", "centre_dirty_correction"]) + first_add = next(i for i in range(start, len(fixed)) + if fixed[i][0] == "scalar" and fixed[i][1][0] == "add") + require(replay(fixed[:first_add] + fixed[first_add + 1:], n) != rows, + "Missing-dirty-correction control did not fail") + profile = Counter(e[5] for e in fixed if e[0] == "climb") + mass = sum(r * count for r, count in profile.items()) + require(mass == 5522, "Wrong clean-J child rank mass") + checks[name] = { + "independent_input_columns": n + 8, + "persistent_helpers_restored": word["R"], + "private_outputs_zero": 8, + "canonical_scalar_frames": "PASS", + "persistent_native_events": sum(e[0] in native for e in fixed), + "child_profile": dict(sorted(profile.items())), + "child_rank_mass": mass, + "removed_centre_rank_mass": sum( + e[4] for e in program if e[0] == "center"), + "scalar_macros": sum(e[0] == "scalar" for e in fixed), + "primitive_bound_real_components": 2 * sum( + primitive_bound(e[1]) for e in fixed if e[0] == "scalar"), + "correction_adds": sum(e[1][0] == "add" for e in prefix), + "correction_clears": sum(e[1][0] == "clear" for e in prefix), + "missing_clear_control": "REJECT", + "missing_correction_control": "REJECT", + } + clean[name] = fixed + clean_raw = json.dumps(clean, sort_keys=True, separators=(",", ":")).encode() + report = { + "status": "PASS_PINNED_CLEAN_J_RECONSTRUCTION", + "source_base": BASE, + "archive_sha256": ARCHIVE_SHA256, + "clean_program_payload_sha256": sha256(clean_raw).hexdigest(), + "geometry": {"ports": v, "helpers": word["R"], "axes": word["h"]}, + "R_row_support": dict(Counter(map(len, R))), + "R_column_support": dict(Counter(map(len, RT))), + "J_row_support": dict(Counter(map(len, J))), + "orientations": checks, + "scope": "Exact scalar maps, canonical frame access and retained native events. Native recipe phases, global hosting and supplier admission are separate.", + } + return {"word": word, "programs": programs, + "recipes": local["CLIFFORD-RECIPES.json"], + "residuals": local["RESIDUAL-ADAPTERS.json"], + "phases": local["DATA-PHASES.json"], + "R": R, "H": H, "D": D, "J": J, + "clean_programs": clean, "checks": report} + + +def source_manifest(): + return {"base": BASE, "archive_path": ARCHIVE, + "archive_sha256": ARCHIVE_SHA256, "members": MEMBER_PINS, + "decompressed_payloads": PAYLOAD_PINS, "credit_sources": CREDIT_PINS} + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--repo", required=True, type=Path) + parser.add_argument("--out", required=True, type=Path) + args = parser.parse_args() + data = reconstruct(args.repo) + args.out.mkdir(parents=True, exist_ok=True) + raw = json.dumps(data["clean_programs"], sort_keys=True, + separators=(",", ":")).encode() + (args.out / "CLEAN-J-PROGRAMS.json.gz").write_bytes(gzip.compress(raw, mtime=0)) + for name, value in (("CLEAN-J-CHECKS.json", data["checks"]), + ("SOURCE-MANIFEST.json", source_manifest())): + (args.out / name).write_text(json.dumps(value, indent=2, sort_keys=True) + + "\n", encoding="utf-8") + for path, expected in CREDIT_PINS.items(): + target = args.out / "credit-evidence" / path + target.parent.mkdir(parents=True, exist_ok=True) + target.write_bytes(read_git(args.repo, path, expected)) + print(data["checks"]["status"]) + + +if __name__ == "__main__": + main() diff --git a/research/original-paired-gap/verify_algebra.py b/research/original-paired-gap/verify_algebra.py new file mode 100644 index 0000000000..0d20ac4ab6 --- /dev/null +++ b/research/original-paired-gap/verify_algebra.py @@ -0,0 +1,199 @@ +"""Check ordered identities for the reviewed monomial-square theorem. + +The proof states the access and frame hypotheses. These checks use no +fourth-power relation for Q. New code is Apache-2.0, with Codex assistance. +""" + +from fractions import Fraction as Q + + +def need(value, message): + if not value: + raise ValueError(message) + + +def reduce_word(word): + result = [] + for token in word: + if result and ((result[-1], token) in (('q', 'q-'), ('q-', 'q'), ('T', 'T'))): + result.pop() + else: + result.append(token) + return tuple(result) + + +def add(a, b, coefficient=1): + result = dict(a) + for word, value in b.items(): + value = result.get(word, 0) + coefficient * value + if value: + result[word] = value + else: + result.pop(word, None) + return result + + +def product(a, b): + result = {} + for u, x in a.items(): + for v, y in b.items(): + result = add(result, {reduce_word(u + v): x * y}) + return result + + +def scale(value, coefficient): + return {word: coefficient * x for word, x in value.items() if coefficient * x} + + +I, ZERO = {(): Q(1)}, {} + + +def token(name): + return {(name,): Q(1)} + + +def eye(n): + return [[dict(I if i == j else ZERO) for j in range(n)] for i in range(n)] + + +def mm(a, b): + result = [] + for row in a: + values = [] + for column in zip(*b): + value = {} + for x, y in zip(row, column): + value = add(value, product(x, y)) + values.append(value) + result.append(values) + return result + + +def shear(n, target, source, coefficient): + result = eye(n) + result[target][source] = coefficient + return result + + +def ordered_maps(): + r, k, t = map(token, ('R', 'K', 'T')) + kr = product(k, r) + g, h = product(r, add(I, t, -1)), product(add(I, t), k) + raw_f = [[I, ZERO, ZERO], [add(I, kr, -1), I, scale(k, -1)], + [scale(r, -2), ZERO, scale(I, -1)]] + pre = shear(3, 2, 0, scale(product(r, t), -1)) + mode = shear(3, 2, 0, r) + target = shear(3, 1, 2, product(t, k)) + forward = mm(target, mm(mode, mm(raw_f, pre))) + expected_f = [[I, ZERO, ZERO], [add(I, product(h, g), -1), I, scale(h, -1)], + [scale(g, -1), ZERO, scale(I, -1)]] + need(forward == expected_f, 'General ordered forward map') + raw_b = [[I, scale(add(I, kr), -1), scale(k, -8)], [ZERO, I, ZERO], + [ZERO, scale(r, -Q(1, 4)), scale(I, -1)]] + pre_x = shear(3, 0, 2, scale(product(t, k), -8)) + pre_mode = shear(3, 2, 1, scale(r, -Q(1, 8))) + post_mode = shear(3, 2, 1, scale(product(r, t), Q(1, 8))) + backward = mm(post_mode, mm(raw_b, mm(pre_mode, pre_x))) + expected_b = [[I, scale(I, -1), scale(h, -8)], [ZERO, I, ZERO], + [ZERO, scale(g, -Q(1, 8)), scale(I, -1)]] + need(backward == expected_b, 'General ordered backward map') + need(mm(post_mode, mm(raw_b, mm(pre_x, pre_mode))) != expected_b, + 'Wrong backward old-mode order control') + inverse_f = [[I, ZERO, ZERO], [scale(I, -1), I, scale(h, -1)], + [scale(g, -1), ZERO, scale(I, -1)]] + inverse_b = [[I, add(I, product(h, g), -1), scale(h, -8)], [ZERO, I, ZERO], + [ZERO, scale(g, -Q(1, 8)), scale(I, -1)]] + for actual, inverse in ((forward, inverse_f), (backward, inverse_b)): + need(mm(actual, inverse) == mm(inverse, actual) == eye(3), 'Both general inverse orders') + need(product(g, h) == ZERO and product(h, g) != ZERO, 'Only the required feedback product is zero') + for s in range(9): + gs = product(token('Ninv_' + str(s)), product(token('R_' + str(s)), add(I, t, -1))) + for j in range(9): + hj = product(add(I, t), product(token('K_' + str(j)), token('N_' + str(j)))) + need(product(gs, hj) == ZERO, 'Every ordered stage pair annihilates') + n1 = product(h, product(token('C1'), g)) + n2 = product(h, product(token('C2'), g)) + need(product(n1, n2) == product(n2, n1) == ZERO, 'Pairwise-zero residual products') + need(product(add(I, n1), add(I, n2)) == add(add(I, n1), n2), 'Finite product consequence') + need(product(add(I, add(n1, n2)), add(I, add(n1, n2), -1)) == I, 'Finite inverse consequence') + other = token('T_other') + need(product(add(I, t, -1), add(I, other)) != ZERO, 'Unrelated stage phases control') + need(product(g, product(token('B'), h)) != ZERO, 'Unrestricted bridge control') + return 81 + + +def monomial_square(): + q, qi = token('q'), token('q-') + square, inverse_square = product(q, q), product(qi, qi) + qq, qii = [[q, ZERO], [ZERO, q]], [[qi, ZERO], [ZERO, qi]] + ss = [[square, ZERO], [ZERO, square]] + a = [[ZERO, I], [inverse_square, ZERO]] + ai = [[ZERO, square], [I, ZERO]] + t = [[ZERO, q], [qi, ZERO]] + need(mm(a, qq) == mm(qq, a) == t, 'General monomial-square T') + need(mm(t, t) == eye(2), 'General paired involution') + need(mm(a, ai) == mm(ai, a) == eye(2), 'General monomial access inverse') + need(mm(ss, a) == ai, 'S A equals A inverse') + need(mm(qii, mm(ss, a)) == mm(mm(ss, a), qii) == t, 'Both physical backward conversions') + need(product(square, square) != I, 'No Q fourth-power relation was used') + wrong = [[ZERO, I], [square, ZERO]] + need(mm(mm(qq, wrong), mm(qq, wrong)) != eye(2), 'Using S instead of S inverse fails in general') + distinct_views = [[I, ZERO], [ZERO, q]] + need(mm(distinct_views, t) != mm(t, distinct_views), 'Distinct replica views need not commute with T') + + # Q=[[0,1],[i,0]] has unit monomial square iI and Q^4=-I. + zero, one, imaginary = (0, 0), (1, 0), (0, 1) + def cmul(x, y): + return x[0] * y[0] - x[1] * y[1], x[0] * y[1] + x[1] * y[0] + def cmm(left, right): + result = [] + for row in left: + values = [] + for column in zip(*right): + terms = [cmul(x, y) for x, y in zip(row, column)] + values.append((sum(x[0] for x in terms), sum(x[1] for x in terms))) + result.append(values) + return result + actual_q = [[zero, one], [imaginary, zero]] + actual_square = cmm(actual_q, actual_q) + need(actual_square == [[imaginary, zero], [zero, imaginary]], 'Concrete legal monomial square') + need(cmm(actual_square, actual_square) == [[(-1, 0), zero], [zero, (-1, 0)]], + 'Concrete Q fourth power is not identity') + + +def frame_counterexample(): + def multiply(left, right): + return [[sum(x * y for x, y in zip(row, column)) for column in zip(*right)] for row in left] + f = [[Q(1), Q(1)], [Q(1), Q(-1)]] + fi = [[value / 2 for value in row] for row in f] + r = [[Q(1), Q(0)], [Q(0), Q(-1)]] + x = [[Q(0), Q(1)], [Q(1), Q(0)]] + need(multiply(fi, multiply(r, f)) == x != r, 'Missing productive-frame intertwiner control') + + +def verify(r, k): + pairs = ordered_maps() + monomial_square() + frame_counterexample() + rnorm = max(sum(abs(value) for value in row.values()) for row in r) + knorm = max(sum(abs(value) for value in row.values()) for row in k) + need((rnorm, knorm) == (56, 1), 'Actual scalar operator row norms') + bounds = {'forward_prefix': 1 + rnorm, + 'forward_suffix': max(1 + rnorm, 1 + knorm * (1 + rnorm)), + 'backward_prefix': max(1 + 8 * knorm, 1 + rnorm / 8), + 'backward_suffix': 1 + rnorm / 8} + need(bounds == {'forward_prefix': 57, 'forward_suffix': 58, + 'backward_prefix': 9, 'backward_suffix': 8}, 'Wrapper norm bounds') + return { + 'status': 'PASS_GENERAL_MONOMIAL_SQUARE_IDENTITIES', + 'stage_pairs': pairs, 'both_ordered_local_maps_and_inverse_orders': 'PASS', + 'assumed_line_relation': 'Q inverse cancellation only; no Q^4 relation', + 'general_hypotheses': ['Admitted raw interface and helper contract', 'Legal Q^2 and Q^-2 monomial access', + 'F Q = Q F', 'F_mode R = R F_data and F_data K = K F_mode', + 'One transported global T for all stages'], + 'wrapper_infinity_norm_bounds': {name: str(value) for name, value in bounds.items()}, + 'negative_controls': ['wrong backward old-mode order', 'S used in place of S inverse', + 'Q fourth power need not be identity', 'missing productive-frame intertwiner', + 'unrelated stage phases', 'distinct replica views', 'unrestricted intervening bridge'], + 'scope': 'Exact identities and counterexamples support the proof; no arbitrary-Q native core is constructed', + } diff --git a/research/original-paired-gap/verify_native.py b/research/original-paired-gap/verify_native.py new file mode 100644 index 0000000000..0a243db837 --- /dev/null +++ b/research/original-paired-gap/verify_native.py @@ -0,0 +1,207 @@ +"""Check exact line phases, actual routes, and physical wrapper groups. + +This code adapts the coherent-port review and PR #1969 route calculation. +New code uses Apache-2.0. OpenAI Codex assisted this work. +""" + +from collections import Counter +from copy import deepcopy +from fractions import Fraction as Q +from hashlib import sha256 +import json + + +AXES = tuple(1 << j for j in range(73)) +MODES = (225, 226, 229, 232, 241, 242, 257, 258) + + +def need(value, message): + if not value: + raise ValueError(message) + + +def act(columns, vector): + result = 0 + while vector: + bit = vector & -vector + result ^= columns[bit.bit_length() - 1] + vector ^= bit + return result + + +def routes_from_source(phases, ports): + need(phases['m'] == 73 and len(phases['recipes']) == 112, 'Actual phase source dimensions') + result = [] + for p, record in enumerate(phases['recipes']): + basis = tuple([record['q']] + record['idle_children'][0]['orthogonal_axes'][:8]) + AXES[9:] + need(record['port'] == p and basis[0] == ports[p], 'Actual source port and normal') + need(all((basis[i] & basis[j]).bit_count() % 2 == (i == j) + for i in range(73) for j in range(73)), 'Actual source orthogonal chart') + beta = sum(1 << i for i, value in enumerate(basis[1:9]) if (value.bit_count() - 1) // 2 % 2) + stages = [] + for stage in range(9): + if stage == 0: + columns, entry, exit_value = AXES, 0, 0 + else: + swaps = [basis[i + 1] ^ AXES[9 + 8 * (stage - 1) + i] for i in range(8)] + columns = tuple(value ^ act(swaps, sum(((value & axis).bit_count() % 2) << i + for i, axis in enumerate(swaps))) for value in AXES) + entry = ports[p] ^ act(basis[1:9], beta) + exit_value = act(basis[1:9], beta) ^ (beta << (9 + 8 * (stage - 1))) + shifts = {'entry_X': entry, 'entry_Y': entry, 'exit_X': exit_value, 'exit_Y': exit_value} + need(record['stage_alignment'][stage] == shifts, 'Original entry and exit translations') + need(tuple(act(columns, col) for col in columns) == AXES, 'Actual route inverse') + need(act(columns, ports[p]) == ports[p], 'Actual route fixes its native line') + stages.append({'matrix_columns': list(columns), 'translations': shifts}) + result.append({'port': p, 'basis': list(basis), 'stages': stages}) + return result + + +def mono(recipe, address): + exponent = recipe['phase'] + for i in range(9): + if address >> i & 1: + exponent += recipe['linear_Z4'][i] + exponent += 2 * ((recipe['quadratic_rows'][i] & address) >> (i + 1)).bit_count() + result = recipe['offset'] + for i, row in enumerate(recipe['matrix_rows']): + result ^= ((row & address).bit_count() % 2) << i + return result, exponent % 4 + + +def gaussian_mul(a, b): + return a[0] * b[0] - a[1] * b[1], a[0] * b[1] + a[1] * b[0] + + +def line_column(recipe, address): + moved, phase = mono(recipe['right'], address) + result = {} + for point, value in ((moved, (1, 1)), (moved ^ 1, (1, -1))): + final, extra = mono(recipe['left'], point) + result[final] = gaussian_mul(value, ((1, 0), (0, 1), (-1, 0), (0, -1))[(phase + extra) % 4]) + return result + + +def check_lines(lines, ports): + need([item['port'] for item in lines['recipes']] == list(range(112)), 'All positive line recipes once') + count = 0 + for item in lines['recipes']: + p, recipe = item['port'], item['recipe'] + q = ports[p] + need(item['label'] == q and recipe['rank'] == 1, 'Native line and rank') + columns = [line_column(recipe, x) for x in range(512)] + for x, column in enumerate(columns): + need(column == {x: (1, 1), x ^ q: (1, -1)}, 'Exact positive line kernel and phase') + square = {} + for z, value in column.items(): + for y, other in columns[z].items(): + a, b = square.get(y, (0, 0)), gaussian_mul(value, other) + square[y] = a[0] + b[0], a[1] + b[1] + square = {y: value for y, value in square.items() if value != (0, 0)} + need(square == {x ^ q: (4, 0)}, 'C squared is the translation, including phase') + need({y ^ q: value for y, value in column.items()} + == {x: (1, -1), x ^ q: (1, 1)}, 'Exact inverse line') + need((x ^ q) ^ q == x, 'Exact fourth power') + count += 1 + altered = deepcopy(recipe) + altered['left']['phase'] = (altered['left']['phase'] + 1) % 4 + need(line_column(altered, 0) != {0: (1, 1), q: (1, -1)}, 'Wrong global phase control') + return count + + +def wrapper_groups(packet, word, r): + def event(rt, target, rs, source, coefficient, endpoint): + frames = word['start' if endpoint == 'input' else 'final'] + return {'kind': 'physical_add', 'target': [rt, target], 'source': [rs, source], + 'coefficient': str(coefficient), 'endpoint': endpoint, + 'target_frame': frames[target], 'source_frame': frames[source]} + + def read(rt, rs, offset, scale, endpoint): + return [event(rt, MODES[k], rs, offset + p, scale * r[k][p], endpoint) + for k in range(8) for p in range(112) if p in r[k]] + + def scatter(rt, rs, offset, scale, endpoint): + return [event(rt, offset + p, rs, MODES[k], scale * r[k][p] / 4, endpoint) + for p in range(112) for k in range(8) if p in r[k]] + + def translate(replica, offset, endpoint): + return [{'kind': 'physical_translation', 'target': [replica, offset + p], + 'label': word['ports'][p], 'endpoint': endpoint} for p in range(112)] + + expected = { + 'forward': { + 'prefix': [read(0, 1, 0, -1, 'input'), translate(0, 0, 'input'), + read(1, 0, 0, -1, 'input'), translate(0, 0, 'input')], + 'suffix': [read(0, 0, 0, 1, 'output'), read(1, 1, 0, 1, 'output'), + scatter(0, 1, 112, 1, 'output'), translate(1, 112, 'output'), + scatter(1, 0, 112, 1, 'output'), translate(1, 112, 'output')], + }, + 'backward': { + 'prefix': [translate(0, 0, 'input'), scatter(0, 1, 0, -8, 'input'), + translate(0, 0, 'input'), scatter(1, 0, 0, -8, 'input'), + read(0, 0, 112, -Q(1, 8), 'input'), read(1, 1, 112, -Q(1, 8), 'input')], + 'suffix': [translate(1, 112, 'output'), read(0, 1, 112, Q(1, 8), 'output'), + translate(1, 112, 'output'), read(1, 0, 112, Q(1, 8), 'output')], + }, + } + encode = lambda value: json.dumps(value, sort_keys=True) + for direction, parts in expected.items(): + for side, groups in parts.items(): + actual = packet['programs'][direction][side] + offset = 0 + for group in groups: + need(Counter(map(encode, actual[offset:offset + len(group)])) == Counter(map(encode, group)), + 'Every physical graph, coefficient, frame, and boundary is exact') + offset += len(group) + need(offset == len(actual), 'No operation outside the specified physical groups') + return sum(len(groups) for parts in expected.values() for groups in parts.values()) + + +def verify(local, lines, packet, r): + word = local['CANONICAL-WORD.json.gz'] + ports = word['ports'] + for p, label in enumerate(ports): + need(word['frames'][word['start'][p]] == [label], 'Input X has its exact canonical line') + need(word['start'][112 + p] == 0 and word['final'][p] == 1, + 'Input Y and output X have the required common endpoints') + vectors = word['frames'][word['final'][112 + p]] + pivots = {} + for vector in vectors: + need((vector & label).bit_count() % 2 == 0, 'Output Y space is perpendicular to its line') + while vector: + bit = vector.bit_length() - 1 + if bit not in pivots: + pivots[bit] = vector + break + vector ^= pivots[bit] + need(len(pivots) == len(vectors) == 8, 'Output Y has the exact rank-eight complement') + need(lines['recipes'][p]['canonical_start_frame_id'] == word['start'][p], + 'Native line recipe binds the actual input frame') + groups = wrapper_groups(packet, word, r) + columns = check_lines(lines, ports) + routes = routes_from_source(local['DATA-PHASES.json'], ports) + checks = 0 + for item in routes: + p, basis = item['port'], item['basis'] + for stage, record in enumerate(item['stages']): + g = record['matrix_columns'] + if stage: + for delta in record['translations'].values(): + for z in (0, *AXES): + need(act(g, z ^ ports[p]) ^ delta == act(g, z) ^ delta ^ ports[p], + 'Affine route commutes with its line translation') + checks += 1 + swapped = tuple(value ^ (basis[0] ^ basis[1]) + if (value & (basis[0] ^ basis[1])).bit_count() % 2 else value for value in AXES) + need(act(swapped, ports[p]) != ports[p], 'Wrong owner direction control') + need(columns == 57344 and checks == 265216, 'Complete line and affine census') + raw = json.dumps(routes, sort_keys=True, separators=(',', ':')).encode() + return { + 'status': 'PASS_ORIGINAL_PAIRED_NATIVE_COMPONENTS', + 'exact_line_spatial_columns': columns, 'phase_mutation_controls': 112, + 'actual_stage_port_routes': 1008, 'affine_translation_checks': checks, + 'ordered_physical_groups': groups, 'wrong_owner_direction_controls': 112, + 'derived_route_sha256': sha256(raw).hexdigest(), + 'tensor_scope': 'Exact line identity and owner-dependent covariance tensor to every positive depth', + 'inherited': 'Old core native kernels and complete helper interface; no fresh old-core kernel sweep', + } diff --git a/research/original-paired-gap/verify_pair.py b/research/original-paired-gap/verify_pair.py new file mode 100644 index 0000000000..a47b12004d --- /dev/null +++ b/research/original-paired-gap/verify_pair.py @@ -0,0 +1,259 @@ +"""Check the fixed pair on every independent input and count its gates. + +This code adapts the history and residual-syndrome exact replay methods. +New code uses Apache-2.0. OpenAI Codex assisted this work. +""" + +from collections import Counter +from fractions import Fraction as Q + + +MODES = (225, 226, 229, 232, 241, 242, 257, 258) +WIDTH = 704 + + +def need(value, message): + if not value: + raise ValueError(message) + + +def add(target, source, coefficient=1): + for key, value in source.items(): + value = target.get(key, 0) + coefficient * value + if value: + target[key] = value + else: + target.pop(key, None) + + +def line(row, port, exponent): + """Prepend one port line. Use only its exact order-four relation.""" + result = {} + for (column, word), value in row.items(): + power = exponent % 4 + if word and word[0][0] == port: + power = (power + word[0][1]) % 4 + word = word[1:] + if power: + word = ((port, power),) + word + add(result, {(column, word): value}) + return result + + +def compose(matrix, rows): + result = [] + for coefficients in matrix: + row = {} + for index, value in coefficients.items(): + add(row, rows[index], value) + result.append(row) + return result + + +def core_frames(events, word): + current = word['start'].copy() + for event in events: + if event[0] == 'climb': + need(current[event[2]] == event[3], 'Core climb input frame') + current[event[2]] = event[4] + elif event[0] == 'scalar': + gate, frame = event[1:] + need(gate[0] in ('add', 'scale') and gate[1][0] == 'L', + 'Core uses invertible scalar gates and no private field') + need(current[gate[1][1]] == frame, 'Core scalar target frame') + if gate[0] == 'add': + need(gate[2][0] == 'L' and current[gate[2][1]] == frame, + 'Core scalar source frame') + need(current == word['final'], 'Core final frames') + + +def endpoint(events, rows, word, where): + result = [row.copy() for row in rows] + bank, power = (0, 1) if where == 'input' else (112, -1) + for rep in range(2): + for p in range(112): + i = rep * WIDTH + bank + p + result[i] = line(result[i], p, power) + frames = word['start' if where == 'input' else 'final'] + for event in events: + need(event['endpoint'] == where, 'Wrapper endpoint tag') + rep, slot = event['target'] + need(rep in (0, 1) and (0 <= slot < 224 or slot in MODES), + 'Wrapper target is data or mode') + target = rep * WIDTH + slot + if event['kind'] == 'physical_translation': + need(slot < 224 and word['ports'][slot % 112] == event['label'], + 'Translation uses its own port') + result[target] = line(result[target], slot % 112, 2) + else: + need(event['kind'] == 'physical_add', 'Known wrapper operation') + r, source = event['source'] + need(r in (0, 1) and (0 <= source < 224 or source in MODES), + 'Wrapper source is data or mode') + need(event['target_frame'] == frames[slot] + and event['source_frame'] == frames[source], + 'Recorded physical endpoint frames') + add(result[target], result[r * WIDTH + source], Q(event['coefficient'])) + for rep in range(2): + for p in range(112): + i = rep * WIDTH + bank + p + result[i] = line(result[i], p, -power) + return result + + +def run_pair(parts, core_map, rows, word): + result = endpoint(parts['prefix'], rows, word, 'input') + middle = [] + for rep in range(2): + middle.extend(compose(core_map, result[rep * WIDTH:(rep + 1) * WIDTH])) + return endpoint(parts['suffix'], middle, word, 'output') + + +def gap_query(rows, bank, r): + result = [] + for rep in range(2): + other, power = 1 - rep, 1 if rep == 0 else -1 + for row in r: + value = {} + for p, coefficient in row.items(): + add(value, rows[rep * WIDTH + bank + p], coefficient) + add(value, line(rows[other * WIDTH + bank + p], p, power), -coefficient) + result.append(value) + return result + + +def gap_injection(modes, k): + result = [] + for rep in range(2): + other, power = 1 - rep, 1 if rep == 0 else -1 + for p, row in enumerate(k): + value = {} + for j, coefficient in row.items(): + add(value, modes[8 * rep + j], coefficient) + add(value, line(modes[8 * other + j], p, power), coefficient) + result.append(value) + return result + + +def formula(rows, direction, r, k, inverse=False): + result = [row.copy() for row in rows] + bank, beta = (0, Q(1)) if direction == 'forward' else (112, Q(1, 8)) + query = gap_query(rows, bank, r) + old = [rows[rep * WIDTH + slot] for rep in range(2) for slot in MODES] + modes = [] + for initial, value in zip(old, query): + modes.append({key: -x for key, x in initial.items()}) + add(modes[-1], value, -beta) + for rep in range(2): + for j, slot in enumerate(MODES): + result[rep * WIDTH + slot] = modes[8 * rep + j] + injection_modes = old if direction == 'forward' and inverse else modes + if direction == 'backward' and not inverse: + injection_modes = old + injection = gap_injection(injection_modes, k) + for rep in range(2): + for p in range(112): + x, y = rep * WIDTH + p, rep * WIDTH + 112 + p + if direction == 'forward': + coefficient = -1 if inverse else 1 + add(result[y], rows[x], coefficient) + add(result[y], injection[112 * rep + p], coefficient) + else: + coefficient = 1 if inverse else -1 + add(result[x], rows[y], coefficient) + add(result[x], injection[112 * rep + p], 8 * coefficient) + return result + + +def verify(local, cores, packet, source): + word = local['CANONICAL-WORD.json.gz'] + original = local['LOCAL-PROGRAMS.json.gz'] + need((word['v'], word['R'], word['h']) == (112, 480, 9), 'Source geometry') + need(packet['mode_carriers_per_replica'] == list(MODES), 'Actual promoted roles') + boundary = source.replay(original['forward'], cut=original['forward'].index(['phase', 'centers'])) + r = [{p: q for p, q in boundary[c].items() if p < 112} for c in word['centers']] + k = [{j: row[p] / 4 for j, row in enumerate(r) if p in row} for p in range(112)] + need(source.product(r, k) == [{j: Q(14)} for j in range(8)], 'R K is 14 I') + need(sum(map(len, r)) == 448, 'All 448 centre incidences') + need(all(word['start'][slot] == 0 and word['final'][slot] == 1 for slot in MODES), + 'Modes have I to F endpoints') + projection = source.product(k, r) + identity = [{i: Q(1)} for i in range(WIDTH)] + formal_identity = [{(i, ()): Q(1)} for i in range(2 * WIDTH)] + reports = {} + for direction in ('forward', 'backward'): + events = cores[direction] + core_frames(events, word) + native = lambda stream: [e for e in stream if e[0] in ('climb', 'adapter', 'residual_adapter')] + need(native(events) == native(original[direction]), 'Original native events retained') + need(len(native(events)) == 5056, 'Core native event count') + need(not any(e[0] == 'center' for e in events), 'Centre children removed') + profile = Counter(e[5] for e in events if e[0] == 'climb') + need(dict(profile) == {1: 2412, 2: 418, 3: 432, 4: 142, 5: 82}, 'Core rank profile') + core_cost = 2 * sum(source.primitive_bound(e[1]) for e in events if e[0] == 'scalar') + need(core_cost == 204418, 'Full core scalar allowance') + all_rows = source.replay(events) + need(all_rows[WIDTH:] == [{i: Q(1)} for i in range(WIDTH, WIDTH + 8)], + 'Private centres preserved by non-use') + actual = all_rows[:WIDTH] + expected = [row.copy() for row in identity] + for p in range(112): + if direction == 'forward': + add(expected[112 + p], {p: Q(1)}) + add(expected[112 + p], projection[p], -1) + add(expected[112 + p], {MODES[j]: q for j, q in k[p].items()}, -1) + else: + add(expected[p], {112 + p: Q(1)}, -1) + add(expected[p], {112 + j: q for j, q in projection[p].items()}, -1) + add(expected[p], {MODES[j]: q for j, q in k[p].items()}, -8) + for j, slot in enumerate(MODES): + expected[slot] = {slot: Q(-1)} + add(expected[slot], {p if direction == 'forward' else 112 + p: q for p, q in r[j].items()}, + -2 if direction == 'forward' else -Q(1, 4)) + need(actual == expected, 'Every core input column: ' + direction) + suffix = next(i for i, e in enumerate(events) if e == ['phase', 'mode_output_basis']) + bad = events[:suffix] + [e for e in events[suffix:] if e[0] != 'scalar'] + need(source.replay(bad)[:WIDTH] != expected, 'Missing output basis control') + parts = packet['programs'][direction] + need(parts['core_invocations'] == [{'replica': rep, 'orientation': direction} for rep in range(2)], + 'Both cores have the required order') + pair_rows = run_pair(parts, actual, formal_identity, word) + desired = formula(formal_identity, direction, r, k) + need(pair_rows == desired, 'Every paired input column: ' + direction) + for rep in range(2): + need(all(pair_rows[rep * WIDTH + j] == formal_identity[rep * WIDTH + j] + for j in range(224, WIDTH) if j not in MODES), 'Arbitrary ordinary helpers restored') + need(formula(pair_rows, direction, r, k, True) == formal_identity, 'Inverse after pair') + need(run_pair(parts, actual, formula(formal_identity, direction, r, k, True), word) + == formal_identity, 'Pair after inverse') + controls = {'missing input graph': {'prefix': [], 'suffix': parts['suffix']}, + 'missing translations': {side: [e for e in parts[side] if e['kind'] != 'physical_translation'] + for side in ('prefix', 'suffix')}} + if direction == 'backward': + controls['mode preload before old-mode read'] = { + 'prefix': parts['prefix'][-896:] + parts['prefix'][:-896], 'suffix': parts['suffix']} + else: + controls['target correction before mode update'] = { + 'prefix': parts['prefix'], 'suffix': parts['suffix'][896:] + parts['suffix'][:896]} + for label, mutant in controls.items(): + need(run_pair(mutant, actual, formal_identity, word) != desired, 'Mutation rejected: ' + label) + wrapper = parts['prefix'] + parts['suffix'] + adds = [e for e in wrapper if e['kind'] == 'physical_add'] + cost = 0 + for event in adds: + q = Q(event['coefficient']) + cost += 2 * source.primitive_bound(['add', ['L', 0], ['L', 1], q.numerator, q.denominator]) + need(len(adds) == 2688 and len(wrapper) - len(adds) == 448, 'Complete wrapper counts') + need(cost == (25088 if direction == 'forward' else 34048), 'Added scalar allowance') + reports[direction] = { + 'core_input_columns': WIDTH, 'pair_input_columns': 2 * WIDTH, + 'arbitrary_mode_inputs': 16, 'restored_ordinary_helpers': 944, + 'private_fields': 'No access; arbitrary values are preserved', + 'core_scalar_allowance': core_cost, 'added_scalar_allowance': cost, + 'complete_scalar_allowance': 2 * core_cost + cost, + 'physical_ADDs': len(adds), 'literal_translation_maps': len(wrapper) - len(adds), + 'retained_native_events': 2 * len(native(events)), 'retained_native_rank_mass': 11044, + 'added_native_children': 0, 'both_algebraic_inverse_orders': 'PASS', + 'negative_controls': ['missing output basis', *controls], + } + return {'status': 'PASS_EXACT_ORIGINAL_PAIRED_MAPS', 'orientations': reports}, r, k From 6093fe10aad90178b3c650fed39862c169919f60 Mon Sep 17 00:00:00 2001 From: Ali Romman <226877337+aliromman@users.noreply.github.com> Date: Thu, 22 Oct 2026 13:32:47 -0500 Subject: [PATCH 2/2] Add productive-owner frame interpretation and retain fixed-word failure --- .../productive-owner-view/ANNEX-MANIFEST.json | 145 + .../annexes/productive-owner-view/NOTICE.md | 20 + .../annexes/productive-owner-view/README.md | 116 + .../productive-owner-view/SOURCES.json | 95 + .../productive-owner-view/check_sources.py | 45 + .../evidence/DOCUMENT-LINKS.json | 135 + .../evidence/PUBLISHED-SOURCE-IDENTITY.json | 61 + .../evidence/SOURCE-AUDIT-normal.json | 9 + .../evidence/SOURCE-AUDIT-optimized.json | 9 + .../FIRST-OWNER-EXCHANGES.json | 4458 +++++++++++++++++ .../productive-owner-review/REVIEW.json | 430 ++ .../productive-owner-review/REVIEW.md | 142 + .../productive-owner-review/review_drift.py | 299 ++ .../screen_first_owner.py | 119 + .../ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md | 184 + .../PRODUCTIVE-OWNER-VIEW-REVIEW.json | 28 + .../PRODUCTIVE-OWNER-VIEW-REVIEW.md | 98 + .../PRODUCTIVE-OWNER-DRIFT.md | 97 + .../REPAIRED-OWNER-DRIFT.md | 31 + .../productive-owner-drift/PROOF.md | 129 + .../productive-owner-drift/REPAIR.json | 3539 +++++++++++++ .../productive-owner-drift/REVIEW-STATUS.md | 50 + .../paired-source/NOTICE.md | 58 + .../paired-source/SOURCES.json | 209 + .../paired-source/notices/LICENSE | 201 + .../research/gauge44-slots-t16/NOTICE.md | 24 + .../gauge44-slots-t16/UPSTREAM-NOTICE.md | 34 + .../gauge44-slots-t16/construction/NOTICE.md | 9 + .../research/gauge44-slots-t16/t16/NOTICE.md | 39 + .../BODY-CLAIM-CHECK.json | 15 + .../CAMPAIGN-SOURCE-CHECK.json | 71 + .../FINAL-ANNEX-INTEGRITY.json | 199 + .../INITIAL-INPUT-HASHES.json | 17 + .../NORMAL-CHECKS.json | 9 + .../OPTIMIZED-CHECKS.json | 9 + .../productive-owner-review/PROOF-REVIEW.md | 81 + .../PUBLISHED-SOURCE-CHECK.json | 70 + .../productive-owner-review/REVIEW.json | 207 + .../productive-owner-review/REVIEW.md | 62 + .../SOURCE-AUDIT-REPLAY.json | 36 + .../SOURCE-PROOF-PINS.json | 12 + 41 files changed, 11601 insertions(+) create mode 100644 research/original-paired-gap/annexes/productive-owner-view/ANNEX-MANIFEST.json create mode 100644 research/original-paired-gap/annexes/productive-owner-view/NOTICE.md create mode 100644 research/original-paired-gap/annexes/productive-owner-view/README.md create mode 100644 research/original-paired-gap/annexes/productive-owner-view/SOURCES.json create mode 100644 research/original-paired-gap/annexes/productive-owner-view/check_sources.py create mode 100644 research/original-paired-gap/annexes/productive-owner-view/evidence/DOCUMENT-LINKS.json create mode 100644 research/original-paired-gap/annexes/productive-owner-view/evidence/PUBLISHED-SOURCE-IDENTITY.json create mode 100644 research/original-paired-gap/annexes/productive-owner-view/evidence/SOURCE-AUDIT-normal.json create mode 100644 research/original-paired-gap/annexes/productive-owner-view/evidence/SOURCE-AUDIT-optimized.json create mode 100644 research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/FIRST-OWNER-EXCHANGES.json create mode 100644 research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/REVIEW.json create mode 100644 research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/REVIEW.md create mode 100644 research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/review_drift.py create mode 100644 research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/screen_first_owner.py create mode 100644 research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md create mode 100644 research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.json create mode 100644 research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.md create mode 100644 research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/encoded-controller/PRODUCTIVE-OWNER-DRIFT.md create mode 100644 research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/encoded-controller/REPAIRED-OWNER-DRIFT.md create mode 100644 research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/source-domain/productive-owner-drift/PROOF.md create mode 100644 research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/source-domain/productive-owner-drift/REPAIR.json create mode 100644 research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/source-domain/productive-owner-drift/REVIEW-STATUS.md create mode 100644 research/original-paired-gap/annexes/productive-owner-view/paired-source/NOTICE.md create mode 100644 research/original-paired-gap/annexes/productive-owner-view/paired-source/SOURCES.json create mode 100644 research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/LICENSE create mode 100644 research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/research/gauge44-slots-t16/NOTICE.md create mode 100644 research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md create mode 100644 research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/research/gauge44-slots-t16/construction/NOTICE.md create mode 100644 research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/research/gauge44-slots-t16/t16/NOTICE.md create mode 100644 research/publication-reviews/original-paired-gap/productive-owner-review/BODY-CLAIM-CHECK.json create mode 100644 research/publication-reviews/original-paired-gap/productive-owner-review/CAMPAIGN-SOURCE-CHECK.json create mode 100644 research/publication-reviews/original-paired-gap/productive-owner-review/FINAL-ANNEX-INTEGRITY.json create mode 100644 research/publication-reviews/original-paired-gap/productive-owner-review/INITIAL-INPUT-HASHES.json create mode 100644 research/publication-reviews/original-paired-gap/productive-owner-review/NORMAL-CHECKS.json create mode 100644 research/publication-reviews/original-paired-gap/productive-owner-review/OPTIMIZED-CHECKS.json create mode 100644 research/publication-reviews/original-paired-gap/productive-owner-review/PROOF-REVIEW.md create mode 100644 research/publication-reviews/original-paired-gap/productive-owner-review/PUBLISHED-SOURCE-CHECK.json create mode 100644 research/publication-reviews/original-paired-gap/productive-owner-review/REVIEW.json create mode 100644 research/publication-reviews/original-paired-gap/productive-owner-review/REVIEW.md create mode 100644 research/publication-reviews/original-paired-gap/productive-owner-review/SOURCE-AUDIT-REPLAY.json create mode 100644 research/publication-reviews/original-paired-gap/productive-owner-review/SOURCE-PROOF-PINS.json diff --git a/research/original-paired-gap/annexes/productive-owner-view/ANNEX-MANIFEST.json b/research/original-paired-gap/annexes/productive-owner-view/ANNEX-MANIFEST.json new file mode 100644 index 0000000000..026844b8a5 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/ANNEX-MANIFEST.json @@ -0,0 +1,145 @@ +{ + "files": [ + { + "bytes": 1080, + "path": "NOTICE.md", + "sha256": "0438424cfde91bc47e1dfb73810f9c2ab1a5077d96c211f498ef265a46b50fe8" + }, + { + "bytes": 5508, + "path": "README.md", + "sha256": "1795deb0b13f3250cc312cabfc4c9831e2484ca7e9dd8ebfe6ef97421bdd26ec" + }, + { + "bytes": 4758, + "path": "SOURCES.json", + "sha256": "ca5f5527d0bceaf8564b19b04bbb84ec7ca686a6dba4c940b2d20f17a629ce97" + }, + { + "bytes": 1887, + "path": "check_sources.py", + "sha256": "b954f85361d76e02d3bbb23b04de4e73dabb981b81d5edefdeacfa491894ad40" + }, + { + "bytes": 3934, + "path": "evidence/DOCUMENT-LINKS.json", + "sha256": "fee9fe8be59093c528b09a8193915760225177d238337503bc730b51509f3157" + }, + { + "bytes": 3210, + "path": "evidence/PUBLISHED-SOURCE-IDENTITY.json", + "sha256": "ddc9d532faf63cab7d8f376d6d9874efb185f19f087843cca215fa16814b89e6" + }, + { + "bytes": 510, + "path": "evidence/SOURCE-AUDIT-normal.json", + "sha256": "d42a53fb571945019e29597137140a365da6437c8a8bff9676aba2ac38777585" + }, + { + "bytes": 510, + "path": "evidence/SOURCE-AUDIT-optimized.json", + "sha256": "d42a53fb571945019e29597137140a365da6437c8a8bff9676aba2ac38777585" + }, + { + "bytes": 93678, + "path": "frozen/lanes/circuit-interface/productive-owner-review/FIRST-OWNER-EXCHANGES.json", + "sha256": "5bf753a968040842192974e11374454716afb857eb0f96be84c985d782c6a12a" + }, + { + "bytes": 11965, + "path": "frozen/lanes/circuit-interface/productive-owner-review/REVIEW.json", + "sha256": "e7f57ef06675fd3dd0e54e119590be6c411aa58cde89b6845656fad2ff1e6b04" + }, + { + "bytes": 7379, + "path": "frozen/lanes/circuit-interface/productive-owner-review/REVIEW.md", + "sha256": "e11b224b6d0e46e14086188c4476bb0ff260374e02ff72626af3c32b986dec55" + }, + { + "bytes": 19232, + "path": "frozen/lanes/circuit-interface/productive-owner-review/review_drift.py", + "sha256": "5c0d25220cecf772c5ca79895a5b87008b8d5b6fda60c7506a5b0d92d8b019ea" + }, + { + "bytes": 7001, + "path": "frozen/lanes/circuit-interface/productive-owner-review/screen_first_owner.py", + "sha256": "0d9d856ed81ad406ce3eb1cdb44e458b739c7ca8e6f35f215db58ddedeacee5d" + }, + { + "bytes": 7579, + "path": "frozen/lanes/coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md", + "sha256": "1783100d3333c83828b47bb89f267db54b791f4c4fe952b5a62fbdb5087c902f" + }, + { + "bytes": 1346, + "path": "frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.json", + "sha256": "0a1c7fd42130f6078f011e32e6b2fcc6f2002eb9532d4d5d0de5b91e75fabe59" + }, + { + "bytes": 4001, + "path": "frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.md", + "sha256": "3a113ede36815a85f1d15201d682959b0aa40f3fbaa5ce423600d595b707bc15" + }, + { + "bytes": 4624, + "path": "frozen/lanes/encoded-controller/PRODUCTIVE-OWNER-DRIFT.md", + "sha256": "afc421177ab5ac693d6a0f7fa9f3fcd56b9f324f3bedbcf0061826139223a691" + }, + { + "bytes": 1690, + "path": "frozen/lanes/encoded-controller/REPAIRED-OWNER-DRIFT.md", + "sha256": "c34df7c493b38cbd1c7c77c21cb31fef6cc84e33ce1f51c60aeca780aff82ce0" + }, + { + "bytes": 6900, + "path": "frozen/lanes/source-domain/productive-owner-drift/PROOF.md", + "sha256": "50f1af3b6614fd0a687b0557ff7b00539cfc23743ef747b576fad75fe72fdcab" + }, + { + "bytes": 50536, + "path": "frozen/lanes/source-domain/productive-owner-drift/REPAIR.json", + "sha256": "847c35e0709f115f57543d3cb6f5fca1d30b58ace17807d3b5c61398b21ddd40" + }, + { + "bytes": 2758, + "path": "frozen/lanes/source-domain/productive-owner-drift/REVIEW-STATUS.md", + "sha256": "b6993dd6ed819f8538a22c463988811308f838074ea33aeb2258753ae1fb2dfd" + }, + { + "bytes": 3258, + "path": "paired-source/NOTICE.md", + "sha256": "06ebe05bf4c5abcfa840a9b2bd3b58059b293dd23fc23eb9ca8454a56d1c9e5a" + }, + { + "bytes": 8153, + "path": "paired-source/SOURCES.json", + "sha256": "2ca472d13712383755b7f25794edb810e97401ecfd3fc8b1aa1b68a354b1b581" + }, + { + "bytes": 11357, + "path": "paired-source/notices/LICENSE", + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4" + }, + { + "bytes": 1964, + "path": "paired-source/notices/research/gauge44-slots-t16/NOTICE.md", + "sha256": "7a8d17b04da1e6c9d0ec217fb5bda72faa09d9a21695128722dd1e2827870fcf" + }, + { + "bytes": 6406, + "path": "paired-source/notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md", + "sha256": "a75967ebc34e3bf2ff2c25c08e6c7f1a61b0c0d171cfd1b62196ae2caaf2c610" + }, + { + "bytes": 950, + "path": "paired-source/notices/research/gauge44-slots-t16/construction/NOTICE.md", + "sha256": "defe7e44af610e25a6c50c1c3b2efd0972d0690574995c0c872fc50eebf4c816" + }, + { + "bytes": 2245, + "path": "paired-source/notices/research/gauge44-slots-t16/t16/NOTICE.md", + "sha256": "902370e6bfcd39dbea2ece474f15fccbcce3b8e966b2b94066bd03e5174591b5" + } + ], + "scope": "Additive annex. Existing accepted package files and manifests are unchanged." +} diff --git a/research/original-paired-gap/annexes/productive-owner-view/NOTICE.md b/research/original-paired-gap/annexes/productive-owner-view/NOTICE.md new file mode 100644 index 0000000000..9996cef9b4 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/NOTICE.md @@ -0,0 +1,20 @@ +# Notice + +The source-domain lane supplied the inherited-owner frame analysis and +same-call repair record. The coherent-port lane supplied the independent +physical-view interpretation proof. The circuit-interface lane supplied +the separate alias-repair and wrong-output review retained as status +context. Those global checks are not rerun in this annex. + +The [published paired-source notice](paired-source/NOTICE.md) and its +complete referenced notices are retained byte for byte from +`f917bc1b4a769a241349eda7c0e22e374548cf58`. They preserve the historical +gauge44/t16 source lineage, contributor credit, and license terms. +The exact native-review identity and notice blobs are recorded in +[evidence/PUBLISHED-SOURCE-IDENTITY.json](evidence/PUBLISHED-SOURCE-IDENTITY.json). + +New wrapper material uses Apache-2.0, as given in the retained +[license](paired-source/notices/LICENSE). Substantial OpenAI Codex +assistance was used for the source work, proof review, and packaging. +Separate agent checks are not independent human review. Historical +status and source text are unchanged. diff --git a/research/original-paired-gap/annexes/productive-owner-view/README.md b/research/original-paired-gap/annexes/productive-owner-view/README.md new file mode 100644 index 0000000000..0e3907f09b --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/README.md @@ -0,0 +1,116 @@ +# Old-owner coefficients without a physical conversion + +This annex proves the general old-owner interpretation of the existing +paired physical program. In each invocation chart, the same physical word +has old-owner content map B_old=D_out^-1 B D_in. No Delta or Delta^-1 +conversion is physically executed. Delta can differ across promoted modes +and can be nonmonomial. It interprets changing promoted-mode outputs as well as restored ordinary +helpers. + +The fixed original and repaired full words are known to have the wrong +output map. With family 13005 equal to one and every other family zero, +family 112 ends at -1/4. This holds for both mode-sign variants. The view +theorem does not repair that defect or establish global owner restoration. +No complete kappa improvement, output decoder, or supplier is claimed. + +Read the [physical-view proof review](frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.md), +[its exact pins](frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.json), +[source proof](frozen/lanes/source-domain/productive-owner-drift/PROOF.md), +and [final status](frozen/lanes/source-domain/productive-owner-drift/REVIEW-STATUS.md). + +## Ordered change of coordinates + +Let F_L be the complete transform on the nine local axes. At entry an +old owner has inherited physical frame O=X_delta product_(j in W) C_j, +where W is disjoint from those axes. The fresh mode interpretation uses +exterior frame P. Put Delta=P^-1 O. The exterior convolution factors and +translations commute with F_L, so the same Delta relates the old and fresh +logical values at both entry and exit. + +Let B be the complete reviewed local map in fresh variables. D_in and +D_out are identity on data and ordinary helpers and Delta on each promoted +mode. The unchanged literal physical word therefore computes + +```text +B_old = D_out^-1 B D_in. +``` + +The order matters. In this local chart, the input and output mode blocks +are the same Delta. They need not be common to the eight centre indices. +For example, fresh equations v=-z-Gx and y'=y+x+Hv become + +```text +h' = -h - Delta^-1 G x, +y' = y + x + H Delta h'. +``` + +The old exterior frame changes logical query and response coefficients. +It does not itself add a normalization child. A construction that instead +requires the original fresh coefficients or endpoint must supply the +required physical change and its cost. The actual scalar graphs and +address domains stay unchanged under this interpretation. + +## Required complete-job contracts + +The local core must be valid on arbitrary mode and helper values, +including correlated values. Every owner entry/output view and each +role's complete-job wrapper must be retained. An internal fragment cannot +be replaced by its endpoint map. + +Each promoted owner must avoid every role in the other core. Shared +ordinary owners are permitted only through complete helper jobs at the +checked consecutive frames and disjoint pending factors. The first job +restores the arbitrary logical content while advancing its assigned +factor; the next job must use the resulting declared frame. Correlated +contents do not invalidate that complete-job argument. + +Owner matching, all phase records, the 37 exchanges, and strict helper +windows remain inherited premises. The written view review does not +replay them. It also does not identify Delta with the earlier fresh-mode +N_s gauge, prove productive drift harmless at later uses, or close the +global controller. All explicit monomial views retain their scalar and +address costs. A change of interpretation is not a complete cost saving. + +## Validation and published base + +There is no separate numerical checker for this general view theorem. +The mathematical evidence is the written proof and its independent +reasoning review. The existing paired replay validates B. The fresh +annex command checks source integrity only: + +```sh +python3 -I -B check_sources.py --out /tmp/productive-owner-view-audit +``` + +Expected output: + +```text +PASS_PRODUCTIVE_OWNER_VIEW_SOURCE_AUDIT +``` + +Use Python 3.11 or later, the standard library, and a new output directory. +The normal and optimized audits give equal receipts. They verify all +thirteen retained source files and the four exact source pins in the +written review. The [fresh source receipt](evidence/SOURCE-AUDIT-normal.json) +explicitly records that no mathematical replay occurred. The retained +owner-drift and bounded-exchange checkers are status evidence; they were +not executed for this annex. No phase/history, 37-exchange, global-defect, +restoration, or recursive supplier replay is claimed. + +This annex targets the published original-paired-gap tree at +`f917bc1b4a769a241349eda7c0e22e374548cf58`. Its native review is byte-equal +to the copy pinned by this proof; the [Git-object record](evidence/PUBLISHED-SOURCE-IDENTITY.json) +checks that identity. The published package was prepared on upstream +`b58ad9ef4d4e861b0eaa5dba41742bdc072dca51`; its historical gauge44/t16 +source remains `bce54fb3f895cbe5cd4c0eb477c3afeed100190f`. No source pin +or accepted package file is changed. The annex is staged separately for +integration into that exact published tree. + +[NOTICE.md](NOTICE.md) retains source credit and the Apache-2.0 terms. + +## Open next question + +A full caller must propagate these actual old-owner coefficients through +later productive and promoted uses and prove the required raw outputs. +The known fixed-word counterexample rules out silently treating the old +owners as the fresh interface. This annex does not propose a repair. diff --git a/research/original-paired-gap/annexes/productive-owner-view/SOURCES.json b/research/original-paired-gap/annexes/productive-owner-view/SOURCES.json new file mode 100644 index 0000000000..0664dbe75d --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/SOURCES.json @@ -0,0 +1,95 @@ +{ + "files": [ + { + "bytes": 93678, + "campaign_path": "lanes/circuit-interface/productive-owner-review/FIRST-OWNER-EXCHANGES.json", + "path": "frozen/lanes/circuit-interface/productive-owner-review/FIRST-OWNER-EXCHANGES.json", + "reason": "linked historical proof or evidence; no new mathematical replay", + "sha256": "5bf753a968040842192974e11374454716afb857eb0f96be84c985d782c6a12a" + }, + { + "bytes": 11965, + "campaign_path": "lanes/circuit-interface/productive-owner-review/REVIEW.json", + "path": "frozen/lanes/circuit-interface/productive-owner-review/REVIEW.json", + "reason": "linked historical proof or evidence; no new mathematical replay", + "sha256": "e7f57ef06675fd3dd0e54e119590be6c411aa58cde89b6845656fad2ff1e6b04" + }, + { + "bytes": 7379, + "campaign_path": "lanes/circuit-interface/productive-owner-review/REVIEW.md", + "path": "frozen/lanes/circuit-interface/productive-owner-review/REVIEW.md", + "reason": "linked historical proof or evidence; no new mathematical replay", + "sha256": "e11b224b6d0e46e14086188c4476bb0ff260374e02ff72626af3c32b986dec55" + }, + { + "bytes": 19232, + "campaign_path": "lanes/circuit-interface/productive-owner-review/review_drift.py", + "path": "frozen/lanes/circuit-interface/productive-owner-review/review_drift.py", + "reason": "linked historical proof or evidence; no new mathematical replay", + "sha256": "5c0d25220cecf772c5ca79895a5b87008b8d5b6fda60c7506a5b0d92d8b019ea" + }, + { + "bytes": 7001, + "campaign_path": "lanes/circuit-interface/productive-owner-review/screen_first_owner.py", + "path": "frozen/lanes/circuit-interface/productive-owner-review/screen_first_owner.py", + "reason": "linked historical proof or evidence; no new mathematical replay", + "sha256": "0d9d856ed81ad406ce3eb1cdb44e458b739c7ca8e6f35f215db58ddedeacee5d" + }, + { + "bytes": 7579, + "campaign_path": "lanes/coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md", + "path": "frozen/lanes/coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md", + "reason": "narrow view theorem or its stated dependency/status record", + "sha256": "1783100d3333c83828b47bb89f267db54b791f4c4fe952b5a62fbdb5087c902f" + }, + { + "bytes": 1346, + "campaign_path": "lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.json", + "path": "frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.json", + "reason": "narrow view theorem or its stated dependency/status record", + "sha256": "0a1c7fd42130f6078f011e32e6b2fcc6f2002eb9532d4d5d0de5b91e75fabe59" + }, + { + "bytes": 4001, + "campaign_path": "lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.md", + "path": "frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.md", + "reason": "narrow view theorem or its stated dependency/status record", + "sha256": "3a113ede36815a85f1d15201d682959b0aa40f3fbaa5ce423600d595b707bc15" + }, + { + "bytes": 4624, + "campaign_path": "lanes/encoded-controller/PRODUCTIVE-OWNER-DRIFT.md", + "path": "frozen/lanes/encoded-controller/PRODUCTIVE-OWNER-DRIFT.md", + "reason": "linked historical proof or evidence; no new mathematical replay", + "sha256": "afc421177ab5ac693d6a0f7fa9f3fcd56b9f324f3bedbcf0061826139223a691" + }, + { + "bytes": 1690, + "campaign_path": "lanes/encoded-controller/REPAIRED-OWNER-DRIFT.md", + "path": "frozen/lanes/encoded-controller/REPAIRED-OWNER-DRIFT.md", + "reason": "linked historical proof or evidence; no new mathematical replay", + "sha256": "c34df7c493b38cbd1c7c77c21cb31fef6cc84e33ce1f51c60aeca780aff82ce0" + }, + { + "bytes": 6900, + "campaign_path": "lanes/source-domain/productive-owner-drift/PROOF.md", + "path": "frozen/lanes/source-domain/productive-owner-drift/PROOF.md", + "reason": "narrow view theorem or its stated dependency/status record", + "sha256": "50f1af3b6614fd0a687b0557ff7b00539cfc23743ef747b576fad75fe72fdcab" + }, + { + "bytes": 50536, + "campaign_path": "lanes/source-domain/productive-owner-drift/REPAIR.json", + "path": "frozen/lanes/source-domain/productive-owner-drift/REPAIR.json", + "reason": "narrow view theorem or its stated dependency/status record", + "sha256": "847c35e0709f115f57543d3cb6f5fca1d30b58ace17807d3b5c61398b21ddd40" + }, + { + "bytes": 2758, + "campaign_path": "lanes/source-domain/productive-owner-drift/REVIEW-STATUS.md", + "path": "frozen/lanes/source-domain/productive-owner-drift/REVIEW-STATUS.md", + "reason": "narrow view theorem or its stated dependency/status record", + "sha256": "b6993dd6ed819f8538a22c463988811308f838074ea33aeb2258753ae1fb2dfd" + } + ] +} diff --git a/research/original-paired-gap/annexes/productive-owner-view/check_sources.py b/research/original-paired-gap/annexes/productive-owner-view/check_sources.py new file mode 100644 index 0000000000..63a1fea155 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/check_sources.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python3 +"""Audit the retained proof sources. This is not a mathematical replay.""" +import argparse +import hashlib +import json +from pathlib import Path + +ROOT = Path(__file__).resolve().parent + + +def require(condition, message): + if not condition: + raise ValueError(message) + + +def digest(path): + return hashlib.sha256(path.read_bytes()).hexdigest() + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--out", type=Path, required=True) + output = parser.parse_args().out + require(not output.exists(), "Use a new output directory") + manifest = json.loads((ROOT / "SOURCES.json").read_bytes()) + for entry in manifest["files"]: + require(digest(ROOT / entry["path"]) == entry["sha256"], "Source changed: " + entry["path"]) + lanes = ROOT / "frozen/lanes" + review = json.loads((lanes / "coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.json").read_bytes()) + for relative, pin in review["sources"].items(): + require(digest(lanes / relative) == pin, "Written review source pin: " + relative) + require(review["status"] == "PASS_NARROW_PHYSICAL_VIEW_PROOF_REVIEW", "Wrong review scope") + output.mkdir(parents=True) + result = {"status": "PASS_PRODUCTIVE_OWNER_VIEW_SOURCE_AUDIT", + "source_count": len(manifest["files"]), "written_review_pins_checked": len(review["sources"]), + "source_manifest_sha256": digest(ROOT / "SOURCES.json"), + "checker_sha256": digest(Path(__file__)), + "mathematical_replay_performed": False, + "scope": "Fresh source-integrity audit for the written change-of-coordinates proof. No native phase, owner-history, matching, global defect, or restoration replay."} + (output / "CHECKS.json").write_text(json.dumps(result, indent=2, sort_keys=True) + "\n") + print(result["status"]) + + +if __name__ == "__main__": + main() diff --git a/research/original-paired-gap/annexes/productive-owner-view/evidence/DOCUMENT-LINKS.json b/research/original-paired-gap/annexes/productive-owner-view/evidence/DOCUMENT-LINKS.json new file mode 100644 index 0000000000..27691f0926 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/evidence/DOCUMENT-LINKS.json @@ -0,0 +1,135 @@ +{ + "links": [ + { + "document": "README.md", + "exists": true, + "target": "frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.md" + }, + { + "document": "README.md", + "exists": true, + "target": "frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.json" + }, + { + "document": "README.md", + "exists": true, + "target": "frozen/lanes/source-domain/productive-owner-drift/PROOF.md" + }, + { + "document": "README.md", + "exists": true, + "target": "frozen/lanes/source-domain/productive-owner-drift/REVIEW-STATUS.md" + }, + { + "document": "README.md", + "exists": true, + "target": "evidence/SOURCE-AUDIT-normal.json" + }, + { + "document": "README.md", + "exists": true, + "target": "evidence/PUBLISHED-SOURCE-IDENTITY.json" + }, + { + "document": "README.md", + "exists": true, + "target": "NOTICE.md" + }, + { + "document": "NOTICE.md", + "exists": true, + "target": "paired-source/NOTICE.md" + }, + { + "document": "NOTICE.md", + "exists": true, + "target": "evidence/PUBLISHED-SOURCE-IDENTITY.json" + }, + { + "document": "NOTICE.md", + "exists": true, + "target": "paired-source/notices/LICENSE" + }, + { + "document": "paired-source/NOTICE.md", + "exists": true, + "target": "notices/LICENSE" + }, + { + "document": "paired-source/NOTICE.md", + "exists": true, + "target": "notices/research/gauge44-slots-t16/NOTICE.md" + }, + { + "document": "paired-source/NOTICE.md", + "exists": true, + "target": "notices/research/gauge44-slots-t16/construction/NOTICE.md" + }, + { + "document": "paired-source/NOTICE.md", + "exists": true, + "target": "notices/research/gauge44-slots-t16/t16/NOTICE.md" + }, + { + "document": "paired-source/NOTICE.md", + "exists": true, + "target": "notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md" + }, + { + "document": "paired-source/NOTICE.md", + "exists": true, + "target": "SOURCES.json" + }, + { + "document": "frozen/lanes/circuit-interface/productive-owner-review/REVIEW.md", + "exists": true, + "target": "../../encoded-controller/PRODUCTIVE-OWNER-DRIFT.md" + }, + { + "document": "frozen/lanes/circuit-interface/productive-owner-review/REVIEW.md", + "exists": true, + "target": "../../encoded-controller/REPAIRED-OWNER-DRIFT.md" + }, + { + "document": "frozen/lanes/circuit-interface/productive-owner-review/REVIEW.md", + "exists": true, + "target": "../../source-domain/productive-owner-drift/PROOF.md" + }, + { + "document": "frozen/lanes/circuit-interface/productive-owner-review/REVIEW.md", + "exists": true, + "target": "REVIEW.json" + }, + { + "document": "frozen/lanes/circuit-interface/productive-owner-review/REVIEW.md", + "exists": true, + "target": "review_drift.py" + }, + { + "document": "frozen/lanes/circuit-interface/productive-owner-review/REVIEW.md", + "exists": true, + "target": "screen_first_owner.py" + }, + { + "document": "frozen/lanes/circuit-interface/productive-owner-review/REVIEW.md", + "exists": true, + "target": "FIRST-OWNER-EXCHANGES.json" + }, + { + "document": "frozen/lanes/source-domain/productive-owner-drift/REVIEW-STATUS.md", + "exists": true, + "target": "../../circuit-interface/productive-owner-review/REVIEW.md" + }, + { + "document": "frozen/lanes/source-domain/productive-owner-drift/REVIEW-STATUS.md", + "exists": true, + "target": "../../circuit-interface/productive-owner-review/FIRST-OWNER-EXCHANGES.json" + }, + { + "document": "frozen/lanes/source-domain/productive-owner-drift/REVIEW-STATUS.md", + "exists": true, + "target": "../../coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.md" + } + ], + "missing": [] +} diff --git a/research/original-paired-gap/annexes/productive-owner-view/evidence/PUBLISHED-SOURCE-IDENTITY.json b/research/original-paired-gap/annexes/productive-owner-view/evidence/PUBLISHED-SOURCE-IDENTITY.json new file mode 100644 index 0000000000..f4254c11d2 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/evidence/PUBLISHED-SOURCE-IDENTITY.json @@ -0,0 +1,61 @@ +{ + "files": [ + { + "git_blob": "c0c9752a66f1863c0e0398fc733bf13b0233bf6a", + "path": "paired-source/NOTICE.md", + "repository_path": "research/original-paired-gap/NOTICE.md", + "sha256": "06ebe05bf4c5abcfa840a9b2bd3b58059b293dd23fc23eb9ca8454a56d1c9e5a", + "source_commit": "f917bc1b4a769a241349eda7c0e22e374548cf58" + }, + { + "git_blob": "dbef0b58a20efa3942a45c98a9a4a844dfca5cda", + "path": "paired-source/SOURCES.json", + "repository_path": "research/original-paired-gap/SOURCES.json", + "sha256": "2ca472d13712383755b7f25794edb810e97401ecfd3fc8b1aa1b68a354b1b581", + "source_commit": "f917bc1b4a769a241349eda7c0e22e374548cf58" + }, + { + "git_blob": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64", + "path": "paired-source/notices/LICENSE", + "repository_path": "research/original-paired-gap/notices/LICENSE", + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "source_commit": "f917bc1b4a769a241349eda7c0e22e374548cf58" + }, + { + "git_blob": "30d0c8cd3ca119c2eb8765908f44e483dda4caea", + "path": "paired-source/notices/research/gauge44-slots-t16/NOTICE.md", + "repository_path": "research/original-paired-gap/notices/research/gauge44-slots-t16/NOTICE.md", + "sha256": "7a8d17b04da1e6c9d0ec217fb5bda72faa09d9a21695128722dd1e2827870fcf", + "source_commit": "f917bc1b4a769a241349eda7c0e22e374548cf58" + }, + { + "git_blob": "ebc24a0168c65c48c771dcf4e89359afc418e848", + "path": "paired-source/notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md", + "repository_path": "research/original-paired-gap/notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md", + "sha256": "a75967ebc34e3bf2ff2c25c08e6c7f1a61b0c0d171cfd1b62196ae2caaf2c610", + "source_commit": "f917bc1b4a769a241349eda7c0e22e374548cf58" + }, + { + "git_blob": "16b0507070427fb5bb20e7783c05768b8cdb3265", + "path": "paired-source/notices/research/gauge44-slots-t16/construction/NOTICE.md", + "repository_path": "research/original-paired-gap/notices/research/gauge44-slots-t16/construction/NOTICE.md", + "sha256": "defe7e44af610e25a6c50c1c3b2efd0972d0690574995c0c872fc50eebf4c816", + "source_commit": "f917bc1b4a769a241349eda7c0e22e374548cf58" + }, + { + "git_blob": "403f4afffb49ef96a3ec1a8053b95cb9346da3ea", + "path": "paired-source/notices/research/gauge44-slots-t16/t16/NOTICE.md", + "repository_path": "research/original-paired-gap/notices/research/gauge44-slots-t16/t16/NOTICE.md", + "sha256": "902370e6bfcd39dbea2ece474f15fccbcce3b8e966b2b94066bd03e5174591b5", + "source_commit": "f917bc1b4a769a241349eda7c0e22e374548cf58" + }, + { + "git_blob": "fe63433f9d95a505bbeba2e722666773be64e832", + "path": "frozen/lanes/coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md", + "repository_path": "research/original-paired-gap/evidence/NATIVE-REVIEW.md", + "sha256": "1783100d3333c83828b47bb89f267db54b791f4c4fe952b5a62fbdb5087c902f", + "source_commit": "f917bc1b4a769a241349eda7c0e22e374548cf58" + } + ], + "method": "Exact local Git object comparison at the published f917bc1b tree. No checkout or published file changed." +} diff --git a/research/original-paired-gap/annexes/productive-owner-view/evidence/SOURCE-AUDIT-normal.json b/research/original-paired-gap/annexes/productive-owner-view/evidence/SOURCE-AUDIT-normal.json new file mode 100644 index 0000000000..7dc50f9926 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/evidence/SOURCE-AUDIT-normal.json @@ -0,0 +1,9 @@ +{ + "checker_sha256": "b954f85361d76e02d3bbb23b04de4e73dabb981b81d5edefdeacfa491894ad40", + "mathematical_replay_performed": false, + "scope": "Fresh source-integrity audit for the written change-of-coordinates proof. No native phase, owner-history, matching, global defect, or restoration replay.", + "source_count": 13, + "source_manifest_sha256": "ca5f5527d0bceaf8564b19b04bbb84ec7ca686a6dba4c940b2d20f17a629ce97", + "status": "PASS_PRODUCTIVE_OWNER_VIEW_SOURCE_AUDIT", + "written_review_pins_checked": 4 +} diff --git a/research/original-paired-gap/annexes/productive-owner-view/evidence/SOURCE-AUDIT-optimized.json b/research/original-paired-gap/annexes/productive-owner-view/evidence/SOURCE-AUDIT-optimized.json new file mode 100644 index 0000000000..7dc50f9926 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/evidence/SOURCE-AUDIT-optimized.json @@ -0,0 +1,9 @@ +{ + "checker_sha256": "b954f85361d76e02d3bbb23b04de4e73dabb981b81d5edefdeacfa491894ad40", + "mathematical_replay_performed": false, + "scope": "Fresh source-integrity audit for the written change-of-coordinates proof. No native phase, owner-history, matching, global defect, or restoration replay.", + "source_count": 13, + "source_manifest_sha256": "ca5f5527d0bceaf8564b19b04bbb84ec7ca686a6dba4c940b2d20f17a629ce97", + "status": "PASS_PRODUCTIVE_OWNER_VIEW_SOURCE_AUDIT", + "written_review_pins_checked": 4 +} diff --git a/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/FIRST-OWNER-EXCHANGES.json b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/FIRST-OWNER-EXCHANGES.json new file mode 100644 index 0000000000..da6483d774 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/FIRST-OWNER-EXCHANGES.json @@ -0,0 +1,4458 @@ +{ + "call": 0, + "checker_sha256": "0d9d856ed81ad406ce3eb1cdb44e458b739c7ca8e6f35f215db58ddedeacee5d", + "mode_role": 225, + "prime": 65537, + "repaired_skeleton_payload_sha256": "fc9b441fbb8c41aaa9ed41df3cb4ec853008affededadf328dc0185bb4614e00", + "review_checker_sha256": "5c0d25220cecf772c5ca79895a5b87008b8d5b6fda60c7506a5b0d92d8b019ea", + "scope": "All single same-call width-nine exchanges at mode role225 of call0, with all other repaired assignments and graphs fixed. Nonzero reduction modulo an odd prime certifies an exact dyadic defect. This does not exclude several coordinated exchanges, changed graph shears, or another controller.", + "status": "PASS_ALL_SINGLE_FIRST_MODE_EXCHANGES_HAVE_EXPLICIT_DEFECTS", + "tested_donors": 202, + "variants_per_donor": 2, + "witnesses": [ + { + "donor_role": 224, + "new_mode_family": 13006, + "variants": [ + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 1169, + "signs": false + }, + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 1168, + "signs": true + } + ] + }, + { + "donor_role": 227, + "new_mode_family": 13003, + "variants": [ + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 1153, + "signs": false + }, + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 1152, + "signs": true + } + ] + }, + { + "donor_role": 228, + "new_mode_family": 13002, + "variants": [ + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 1141, + "signs": false + }, + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 1140, + "signs": true + } + ] + }, + { + "donor_role": 230, + "new_mode_family": 13000, + "variants": [ + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 179, + "signs": false + }, + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 178, + "signs": true + } + ] + }, + { + "donor_role": 231, + "new_mode_family": 12999, + "variants": [ + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 153, + "signs": false + }, + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 152, + "signs": true + } + ] + }, + { + "donor_role": 233, + "new_mode_family": 12997, + "variants": [ + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 1190, + "signs": false + }, + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 1190, + "signs": true + } + ] + }, + { + "donor_role": 234, + "new_mode_family": 12996, + "variants": [ + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 1186, + "signs": false + }, + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 1186, + "signs": true + } + ] + }, + { + "donor_role": 235, + "new_mode_family": 12995, + "variants": [ + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 179, + "signs": false + }, + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 178, + "signs": true + } + ] + }, + { + "donor_role": 236, + "new_mode_family": 12994, + "variants": [ + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 160, + "signs": false + }, + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 159, + "signs": true + } + ] + }, + { + "donor_role": 237, + "new_mode_family": 12993, + "variants": [ + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 175, + "signs": false + }, + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 174, + "signs": true + } + ] + }, + { + "donor_role": 238, + "new_mode_family": 6763, + "variants": [ + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 154, + "signs": false + }, + { + "first_defect_mod_prime": [ + 112, + 16384 + ], + "nonzero_defect_families_mod_prime": 153, + "signs": true + } + ] + }, + { + "donor_role": 239, + "new_mode_family": 8518, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 5752, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 5642, + "signs": true + } + ] + }, + { + "donor_role": 240, + "new_mode_family": 8517, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32771 + ], + "nonzero_defect_families_mod_prime": 5821, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 5638, + "signs": true + } + ] + }, + { + "donor_role": 243, + "new_mode_family": 8514, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 5699, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 5696, + "signs": true + } + ] + }, + { + "donor_role": 244, + "new_mode_family": 8513, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 5753, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 5641, + "signs": true + } + ] + }, + { + "donor_role": 245, + "new_mode_family": 8512, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32771 + ], + "nonzero_defect_families_mod_prime": 3996, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 3691, + "signs": true + } + ] + }, + { + "donor_role": 246, + "new_mode_family": 509, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 8090, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 8344, + "signs": true + } + ] + }, + { + "donor_role": 247, + "new_mode_family": 508, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 9315, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 9342, + "signs": true + } + ] + }, + { + "donor_role": 248, + "new_mode_family": 507, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 9315, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 9342, + "signs": true + } + ] + }, + { + "donor_role": 249, + "new_mode_family": 506, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 9625, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 9619, + "signs": true + } + ] + }, + { + "donor_role": 250, + "new_mode_family": 505, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9565, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9630, + "signs": true + } + ] + }, + { + "donor_role": 251, + "new_mode_family": 504, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9711, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9711, + "signs": true + } + ] + }, + { + "donor_role": 252, + "new_mode_family": 503, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9528, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9528, + "signs": true + } + ] + }, + { + "donor_role": 253, + "new_mode_family": 502, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9526, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9527, + "signs": true + } + ] + }, + { + "donor_role": 254, + "new_mode_family": 501, + "variants": [ + { + "first_defect_mod_prime": [ + 4, + 16384 + ], + "nonzero_defect_families_mod_prime": 9418, + "signs": false + }, + { + "first_defect_mod_prime": [ + 4, + 49153 + ], + "nonzero_defect_families_mod_prime": 9442, + "signs": true + } + ] + }, + { + "donor_role": 255, + "new_mode_family": 500, + "variants": [ + { + "first_defect_mod_prime": [ + 4, + 16384 + ], + "nonzero_defect_families_mod_prime": 9454, + "signs": false + }, + { + "first_defect_mod_prime": [ + 4, + 49153 + ], + "nonzero_defect_families_mod_prime": 9407, + "signs": true + } + ] + }, + { + "donor_role": 256, + "new_mode_family": 499, + "variants": [ + { + "first_defect_mod_prime": [ + 4, + 16384 + ], + "nonzero_defect_families_mod_prime": 8833, + "signs": false + }, + { + "first_defect_mod_prime": [ + 4, + 49153 + ], + "nonzero_defect_families_mod_prime": 8839, + "signs": true + } + ] + }, + { + "donor_role": 259, + "new_mode_family": 496, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9828, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9821, + "signs": true + } + ] + }, + { + "donor_role": 260, + "new_mode_family": 495, + "variants": [ + { + "first_defect_mod_prime": [ + 45, + 8192 + ], + "nonzero_defect_families_mod_prime": 8359, + "signs": false + }, + { + "first_defect_mod_prime": [ + 45, + 8192 + ], + "nonzero_defect_families_mod_prime": 8358, + "signs": true + } + ] + }, + { + "donor_role": 261, + "new_mode_family": 494, + "variants": [ + { + "first_defect_mod_prime": [ + 45, + 8192 + ], + "nonzero_defect_families_mod_prime": 8379, + "signs": false + }, + { + "first_defect_mod_prime": [ + 45, + 8192 + ], + "nonzero_defect_families_mod_prime": 8336, + "signs": true + } + ] + }, + { + "donor_role": 262, + "new_mode_family": 493, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9821, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9829, + "signs": true + } + ] + }, + { + "donor_role": 263, + "new_mode_family": 492, + "variants": [ + { + "first_defect_mod_prime": [ + 4, + 49153 + ], + "nonzero_defect_families_mod_prime": 8335, + "signs": false + }, + { + "first_defect_mod_prime": [ + 4, + 16384 + ], + "nonzero_defect_families_mod_prime": 8336, + "signs": true + } + ] + }, + { + "donor_role": 264, + "new_mode_family": 491, + "variants": [ + { + "first_defect_mod_prime": [ + 4, + 49153 + ], + "nonzero_defect_families_mod_prime": 8834, + "signs": false + }, + { + "first_defect_mod_prime": [ + 4, + 16384 + ], + "nonzero_defect_families_mod_prime": 8841, + "signs": true + } + ] + }, + { + "donor_role": 265, + "new_mode_family": 490, + "variants": [ + { + "first_defect_mod_prime": [ + 4, + 49153 + ], + "nonzero_defect_families_mod_prime": 9453, + "signs": false + }, + { + "first_defect_mod_prime": [ + 4, + 16384 + ], + "nonzero_defect_families_mod_prime": 9407, + "signs": true + } + ] + }, + { + "donor_role": 266, + "new_mode_family": 489, + "variants": [ + { + "first_defect_mod_prime": [ + 4, + 49153 + ], + "nonzero_defect_families_mod_prime": 9418, + "signs": false + }, + { + "first_defect_mod_prime": [ + 4, + 16384 + ], + "nonzero_defect_families_mod_prime": 9441, + "signs": true + } + ] + }, + { + "donor_role": 267, + "new_mode_family": 488, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9525, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9526, + "signs": true + } + ] + }, + { + "donor_role": 268, + "new_mode_family": 487, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9527, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9527, + "signs": true + } + ] + }, + { + "donor_role": 269, + "new_mode_family": 486, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9719, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9713, + "signs": true + } + ] + }, + { + "donor_role": 270, + "new_mode_family": 485, + "variants": [ + { + "first_defect_mod_prime": [ + 45, + 8192 + ], + "nonzero_defect_families_mod_prime": 8832, + "signs": false + }, + { + "first_defect_mod_prime": [ + 45, + 8192 + ], + "nonzero_defect_families_mod_prime": 8770, + "signs": true + } + ] + }, + { + "donor_role": 271, + "new_mode_family": 484, + "variants": [ + { + "first_defect_mod_prime": [ + 45, + 8192 + ], + "nonzero_defect_families_mod_prime": 8804, + "signs": false + }, + { + "first_defect_mod_prime": [ + 45, + 8192 + ], + "nonzero_defect_families_mod_prime": 8810, + "signs": true + } + ] + }, + { + "donor_role": 272, + "new_mode_family": 483, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9835, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9881, + "signs": true + } + ] + }, + { + "donor_role": 274, + "new_mode_family": 482, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9100, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9058, + "signs": true + } + ] + }, + { + "donor_role": 276, + "new_mode_family": 481, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9096, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9058, + "signs": true + } + ] + }, + { + "donor_role": 278, + "new_mode_family": 480, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9878, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9835, + "signs": true + } + ] + }, + { + "donor_role": 279, + "new_mode_family": 479, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9720, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9711, + "signs": true + } + ] + }, + { + "donor_role": 280, + "new_mode_family": 478, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 9314, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 9341, + "signs": true + } + ] + }, + { + "donor_role": 281, + "new_mode_family": 477, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 9312, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 9341, + "signs": true + } + ] + }, + { + "donor_role": 283, + "new_mode_family": 476, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 9627, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 9627, + "signs": true + } + ] + }, + { + "donor_role": 284, + "new_mode_family": 475, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9630, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9630, + "signs": true + } + ] + }, + { + "donor_role": 285, + "new_mode_family": 474, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 10085, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 10075, + "signs": true + } + ] + }, + { + "donor_role": 286, + "new_mode_family": 473, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 7463, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 7474, + "signs": true + } + ] + }, + { + "donor_role": 287, + "new_mode_family": 472, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9879, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9835, + "signs": true + } + ] + }, + { + "donor_role": 288, + "new_mode_family": 471, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9096, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9058, + "signs": true + } + ] + }, + { + "donor_role": 290, + "new_mode_family": 470, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9100, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9058, + "signs": true + } + ] + }, + { + "donor_role": 292, + "new_mode_family": 469, + "variants": [ + { + "first_defect_mod_prime": [ + 45, + 57345 + ], + "nonzero_defect_families_mod_prime": 8359, + "signs": false + }, + { + "first_defect_mod_prime": [ + 45, + 57345 + ], + "nonzero_defect_families_mod_prime": 8356, + "signs": true + } + ] + }, + { + "donor_role": 294, + "new_mode_family": 468, + "variants": [ + { + "first_defect_mod_prime": [ + 45, + 57345 + ], + "nonzero_defect_families_mod_prime": 8379, + "signs": false + }, + { + "first_defect_mod_prime": [ + 45, + 57345 + ], + "nonzero_defect_families_mod_prime": 8338, + "signs": true + } + ] + }, + { + "donor_role": 295, + "new_mode_family": 467, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9762, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9761, + "signs": true + } + ] + }, + { + "donor_role": 296, + "new_mode_family": 466, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9763, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9761, + "signs": true + } + ] + }, + { + "donor_role": 297, + "new_mode_family": 465, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9716, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9711, + "signs": true + } + ] + }, + { + "donor_role": 299, + "new_mode_family": 464, + "variants": [ + { + "first_defect_mod_prime": [ + 4, + 49153 + ], + "nonzero_defect_families_mod_prime": 8292, + "signs": false + }, + { + "first_defect_mod_prime": [ + 4, + 16384 + ], + "nonzero_defect_families_mod_prime": 8294, + "signs": true + } + ] + }, + { + "donor_role": 300, + "new_mode_family": 463, + "variants": [ + { + "first_defect_mod_prime": [ + 4, + 16384 + ], + "nonzero_defect_families_mod_prime": 9419, + "signs": false + }, + { + "first_defect_mod_prime": [ + 4, + 49153 + ], + "nonzero_defect_families_mod_prime": 9442, + "signs": true + } + ] + }, + { + "donor_role": 301, + "new_mode_family": 462, + "variants": [ + { + "first_defect_mod_prime": [ + 4, + 16384 + ], + "nonzero_defect_families_mod_prime": 9456, + "signs": false + }, + { + "first_defect_mod_prime": [ + 4, + 49153 + ], + "nonzero_defect_families_mod_prime": 9407, + "signs": true + } + ] + }, + { + "donor_role": 302, + "new_mode_family": 461, + "variants": [ + { + "first_defect_mod_prime": [ + 4, + 16384 + ], + "nonzero_defect_families_mod_prime": 8834, + "signs": false + }, + { + "first_defect_mod_prime": [ + 4, + 49153 + ], + "nonzero_defect_families_mod_prime": 8839, + "signs": true + } + ] + }, + { + "donor_role": 303, + "new_mode_family": 460, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9717, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9713, + "signs": true + } + ] + }, + { + "donor_role": 304, + "new_mode_family": 459, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9602, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9580, + "signs": true + } + ] + }, + { + "donor_role": 306, + "new_mode_family": 458, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9626, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9593, + "signs": true + } + ] + }, + { + "donor_role": 308, + "new_mode_family": 457, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 8091, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 8381, + "signs": true + } + ] + }, + { + "donor_role": 310, + "new_mode_family": 456, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 10065, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 10101, + "signs": true + } + ] + }, + { + "donor_role": 312, + "new_mode_family": 455, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9610, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9644, + "signs": true + } + ] + }, + { + "donor_role": 313, + "new_mode_family": 454, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 9629, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 9623, + "signs": true + } + ] + }, + { + "donor_role": 315, + "new_mode_family": 453, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 9266, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 9325, + "signs": true + } + ] + }, + { + "donor_role": 316, + "new_mode_family": 452, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 9249, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 9305, + "signs": true + } + ] + }, + { + "donor_role": 317, + "new_mode_family": 451, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 10111, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 10056, + "signs": true + } + ] + }, + { + "donor_role": 318, + "new_mode_family": 450, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 7451, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 7494, + "signs": true + } + ] + }, + { + "donor_role": 319, + "new_mode_family": 449, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 65533 + ], + "nonzero_defect_families_mod_prime": 9649, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 65535 + ], + "nonzero_defect_families_mod_prime": 9667, + "signs": true + } + ] + }, + { + "donor_role": 320, + "new_mode_family": 448, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16382 + ], + "nonzero_defect_families_mod_prime": 9816, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9813, + "signs": true + } + ] + }, + { + "donor_role": 322, + "new_mode_family": 8461, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 7591, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 7590, + "signs": true + } + ] + }, + { + "donor_role": 324, + "new_mode_family": 8460, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 65535 + ], + "nonzero_defect_families_mod_prime": 6391, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 65535 + ], + "nonzero_defect_families_mod_prime": 6394, + "signs": true + } + ] + }, + { + "donor_role": 326, + "new_mode_family": 8459, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 65535 + ], + "nonzero_defect_families_mod_prime": 7209, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 65535 + ], + "nonzero_defect_families_mod_prime": 7210, + "signs": true + } + ] + }, + { + "donor_role": 328, + "new_mode_family": 8458, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 65535 + ], + "nonzero_defect_families_mod_prime": 7398, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 65535 + ], + "nonzero_defect_families_mod_prime": 7391, + "signs": true + } + ] + }, + { + "donor_role": 329, + "new_mode_family": 8457, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32771 + ], + "nonzero_defect_families_mod_prime": 7264, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 7200, + "signs": true + } + ] + }, + { + "donor_role": 331, + "new_mode_family": 8456, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 49153 + ], + "nonzero_defect_families_mod_prime": 7597, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 49153 + ], + "nonzero_defect_families_mod_prime": 6439, + "signs": true + } + ] + }, + { + "donor_role": 332, + "new_mode_family": 8455, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 51201 + ], + "nonzero_defect_families_mod_prime": 7253, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 47105 + ], + "nonzero_defect_families_mod_prime": 7213, + "signs": true + } + ] + }, + { + "donor_role": 333, + "new_mode_family": 8454, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 47105 + ], + "nonzero_defect_families_mod_prime": 7249, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 51201 + ], + "nonzero_defect_families_mod_prime": 7211, + "signs": true + } + ] + }, + { + "donor_role": 334, + "new_mode_family": 8453, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32768 + ], + "nonzero_defect_families_mod_prime": 5699, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 61441 + ], + "nonzero_defect_families_mod_prime": 5537, + "signs": true + } + ] + }, + { + "donor_role": 335, + "new_mode_family": 8452, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32768 + ], + "nonzero_defect_families_mod_prime": 5375, + "signs": false + }, + { + "first_defect_mod_prime": [ + 56, + 57345 + ], + "nonzero_defect_families_mod_prime": 4937, + "signs": true + } + ] + }, + { + "donor_role": 336, + "new_mode_family": 8451, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32768 + ], + "nonzero_defect_families_mod_prime": 6813, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 63489 + ], + "nonzero_defect_families_mod_prime": 6655, + "signs": true + } + ] + }, + { + "donor_role": 338, + "new_mode_family": 8450, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32768 + ], + "nonzero_defect_families_mod_prime": 7586, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 49153 + ], + "nonzero_defect_families_mod_prime": 7450, + "signs": true + } + ] + }, + { + "donor_role": 340, + "new_mode_family": 8449, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32768 + ], + "nonzero_defect_families_mod_prime": 7582, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 53249 + ], + "nonzero_defect_families_mod_prime": 7446, + "signs": true + } + ] + }, + { + "donor_role": 342, + "new_mode_family": 8448, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32768 + ], + "nonzero_defect_families_mod_prime": 7736, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 51201 + ], + "nonzero_defect_families_mod_prime": 7606, + "signs": true + } + ] + }, + { + "donor_role": 343, + "new_mode_family": 8447, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 63489 + ], + "nonzero_defect_families_mod_prime": 6603, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 2048 + ], + "nonzero_defect_families_mod_prime": 6560, + "signs": true + } + ] + }, + { + "donor_role": 344, + "new_mode_family": 8446, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 2048 + ], + "nonzero_defect_families_mod_prime": 6607, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 63489 + ], + "nonzero_defect_families_mod_prime": 6602, + "signs": true + } + ] + }, + { + "donor_role": 345, + "new_mode_family": 8445, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 7543, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 51201 + ], + "nonzero_defect_families_mod_prime": 7368, + "signs": true + } + ] + }, + { + "donor_role": 347, + "new_mode_family": 8444, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 6143, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 63489 + ], + "nonzero_defect_families_mod_prime": 6012, + "signs": true + } + ] + }, + { + "donor_role": 348, + "new_mode_family": 8443, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 6924, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 2048 + ], + "nonzero_defect_families_mod_prime": 6768, + "signs": true + } + ] + }, + { + "donor_role": 349, + "new_mode_family": 8442, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 5607, + "signs": false + }, + { + "first_defect_mod_prime": [ + 56, + 8192 + ], + "nonzero_defect_families_mod_prime": 5168, + "signs": true + } + ] + }, + { + "donor_role": 350, + "new_mode_family": 8441, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 5927, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 4096 + ], + "nonzero_defect_families_mod_prime": 5766, + "signs": true + } + ] + }, + { + "donor_role": 351, + "new_mode_family": 8440, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 47105 + ], + "nonzero_defect_families_mod_prime": 7239, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 51201 + ], + "nonzero_defect_families_mod_prime": 7317, + "signs": true + } + ] + }, + { + "donor_role": 352, + "new_mode_family": 8439, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 51201 + ], + "nonzero_defect_families_mod_prime": 7241, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 47105 + ], + "nonzero_defect_families_mod_prime": 7318, + "signs": true + } + ] + }, + { + "donor_role": 354, + "new_mode_family": 8438, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 49153 + ], + "nonzero_defect_families_mod_prime": 7603, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 49153 + ], + "nonzero_defect_families_mod_prime": 6506, + "signs": true + } + ] + }, + { + "donor_role": 356, + "new_mode_family": 1258, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32770 + ], + "nonzero_defect_families_mod_prime": 7533, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 7443, + "signs": true + } + ] + }, + { + "donor_role": 358, + "new_mode_family": 1257, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 7539, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 7541, + "signs": true + } + ] + }, + { + "donor_role": 359, + "new_mode_family": 1256, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32768 + ], + "nonzero_defect_families_mod_prime": 7764, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 18432 + ], + "nonzero_defect_families_mod_prime": 7631, + "signs": true + } + ] + }, + { + "donor_role": 360, + "new_mode_family": 1255, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32768 + ], + "nonzero_defect_families_mod_prime": 7662, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 20480 + ], + "nonzero_defect_families_mod_prime": 7524, + "signs": true + } + ] + }, + { + "donor_role": 361, + "new_mode_family": 1254, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32768 + ], + "nonzero_defect_families_mod_prime": 7666, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 16384 + ], + "nonzero_defect_families_mod_prime": 7528, + "signs": true + } + ] + }, + { + "donor_role": 363, + "new_mode_family": 1253, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 6144 + ], + "nonzero_defect_families_mod_prime": 6580, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 59393 + ], + "nonzero_defect_families_mod_prime": 6577, + "signs": true + } + ] + }, + { + "donor_role": 364, + "new_mode_family": 1252, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 2048 + ], + "nonzero_defect_families_mod_prime": 6584, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 63489 + ], + "nonzero_defect_families_mod_prime": 6576, + "signs": true + } + ] + }, + { + "donor_role": 365, + "new_mode_family": 1251, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 14336 + ], + "nonzero_defect_families_mod_prime": 7237, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 18432 + ], + "nonzero_defect_families_mod_prime": 7271, + "signs": true + } + ] + }, + { + "donor_role": 366, + "new_mode_family": 1250, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 18432 + ], + "nonzero_defect_families_mod_prime": 7241, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 14336 + ], + "nonzero_defect_families_mod_prime": 7277, + "signs": true + } + ] + }, + { + "donor_role": 367, + "new_mode_family": 1249, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 16384 + ], + "nonzero_defect_families_mod_prime": 6469, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 16384 + ], + "nonzero_defect_families_mod_prime": 7565, + "signs": true + } + ] + }, + { + "donor_role": 368, + "new_mode_family": 1248, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32768 + ], + "nonzero_defect_families_mod_prime": 6167, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 63489 + ], + "nonzero_defect_families_mod_prime": 5988, + "signs": true + } + ] + }, + { + "donor_role": 370, + "new_mode_family": 1247, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 6492, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 61441 + ], + "nonzero_defect_families_mod_prime": 6333, + "signs": true + } + ] + }, + { + "donor_role": 372, + "new_mode_family": 1246, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 6178, + "signs": false + }, + { + "first_defect_mod_prime": [ + 56, + 57345 + ], + "nonzero_defect_families_mod_prime": 5736, + "signs": true + } + ] + }, + { + "donor_role": 374, + "new_mode_family": 1245, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 6815, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 63489 + ], + "nonzero_defect_families_mod_prime": 6657, + "signs": true + } + ] + }, + { + "donor_role": 375, + "new_mode_family": 1244, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 20480 + ], + "nonzero_defect_families_mod_prime": 7566, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 12288 + ], + "nonzero_defect_families_mod_prime": 7571, + "signs": true + } + ] + }, + { + "donor_role": 376, + "new_mode_family": 1243, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 65535 + ], + "nonzero_defect_families_mod_prime": 7739, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 65535 + ], + "nonzero_defect_families_mod_prime": 7734, + "signs": true + } + ] + }, + { + "donor_role": 377, + "new_mode_family": 1242, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 65535 + ], + "nonzero_defect_families_mod_prime": 7744, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 65535 + ], + "nonzero_defect_families_mod_prime": 7087, + "signs": true + } + ] + }, + { + "donor_role": 379, + "new_mode_family": 1241, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 65535 + ], + "nonzero_defect_families_mod_prime": 7591, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 65535 + ], + "nonzero_defect_families_mod_prime": 7590, + "signs": true + } + ] + }, + { + "donor_role": 380, + "new_mode_family": 1240, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32770 + ], + "nonzero_defect_families_mod_prime": 7540, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 7458, + "signs": true + } + ] + }, + { + "donor_role": 381, + "new_mode_family": 1239, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32767 + ], + "nonzero_defect_families_mod_prime": 6594, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 65535 + ], + "nonzero_defect_families_mod_prime": 6562, + "signs": true + } + ] + }, + { + "donor_role": 382, + "new_mode_family": 1238, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 7444, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 7447, + "signs": true + } + ] + }, + { + "donor_role": 383, + "new_mode_family": 1237, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32771 + ], + "nonzero_defect_families_mod_prime": 7361, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 7278, + "signs": true + } + ] + }, + { + "donor_role": 384, + "new_mode_family": 1236, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32771 + ], + "nonzero_defect_families_mod_prime": 7357, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 7274, + "signs": true + } + ] + }, + { + "donor_role": 386, + "new_mode_family": 1235, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32771 + ], + "nonzero_defect_families_mod_prime": 7329, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 7170, + "signs": true + } + ] + }, + { + "donor_role": 388, + "new_mode_family": 1234, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 7539, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 7541, + "signs": true + } + ] + }, + { + "donor_role": 390, + "new_mode_family": 1233, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 6917, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 6911, + "signs": true + } + ] + }, + { + "donor_role": 391, + "new_mode_family": 1232, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32771 + ], + "nonzero_defect_families_mod_prime": 6993, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 2 + ], + "nonzero_defect_families_mod_prime": 6830, + "signs": true + } + ] + }, + { + "donor_role": 392, + "new_mode_family": 1231, + "variants": [ + { + "first_defect_mod_prime": [ + 36, + 1 + ], + "nonzero_defect_families_mod_prime": 6184, + "signs": false + }, + { + "first_defect_mod_prime": [ + 36, + 1 + ], + "nonzero_defect_families_mod_prime": 6195, + "signs": true + } + ] + }, + { + "donor_role": 393, + "new_mode_family": 1230, + "variants": [ + { + "first_defect_mod_prime": [ + 36, + 65536 + ], + "nonzero_defect_families_mod_prime": 6181, + "signs": false + }, + { + "first_defect_mod_prime": [ + 36, + 65536 + ], + "nonzero_defect_families_mod_prime": 6189, + "signs": true + } + ] + }, + { + "donor_role": 395, + "new_mode_family": 1229, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9400, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9397, + "signs": true + } + ] + }, + { + "donor_role": 396, + "new_mode_family": 1228, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9416, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9412, + "signs": true + } + ] + }, + { + "donor_role": 397, + "new_mode_family": 1227, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9198, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9118, + "signs": true + } + ] + }, + { + "donor_role": 398, + "new_mode_family": 1226, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 6534, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 6525, + "signs": true + } + ] + }, + { + "donor_role": 399, + "new_mode_family": 1225, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 6506, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 6495, + "signs": true + } + ] + }, + { + "donor_role": 400, + "new_mode_family": 1224, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 6975, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 6971, + "signs": true + } + ] + }, + { + "donor_role": 401, + "new_mode_family": 1223, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9231, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9226, + "signs": true + } + ] + }, + { + "donor_role": 402, + "new_mode_family": 1222, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 8611, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 7913, + "signs": true + } + ] + }, + { + "donor_role": 403, + "new_mode_family": 1221, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 8462, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 7991, + "signs": true + } + ] + }, + { + "donor_role": 404, + "new_mode_family": 1220, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9226, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 8722, + "signs": true + } + ] + }, + { + "donor_role": 405, + "new_mode_family": 1219, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 65535 + ], + "nonzero_defect_families_mod_prime": 6523, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 65535 + ], + "nonzero_defect_families_mod_prime": 6521, + "signs": true + } + ] + }, + { + "donor_role": 406, + "new_mode_family": 1218, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9177, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9126, + "signs": true + } + ] + }, + { + "donor_role": 407, + "new_mode_family": 1217, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 5010, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 4563, + "signs": true + } + ] + }, + { + "donor_role": 408, + "new_mode_family": 1216, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 4444, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 4977, + "signs": true + } + ] + }, + { + "donor_role": 409, + "new_mode_family": 1215, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 6510, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 6508, + "signs": true + } + ] + }, + { + "donor_role": 410, + "new_mode_family": 1214, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9056, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9077, + "signs": true + } + ] + }, + { + "donor_role": 411, + "new_mode_family": 1213, + "variants": [ + { + "first_defect_mod_prime": [ + 37, + 1 + ], + "nonzero_defect_families_mod_prime": 6589, + "signs": false + }, + { + "first_defect_mod_prime": [ + 37, + 1 + ], + "nonzero_defect_families_mod_prime": 6563, + "signs": true + } + ] + }, + { + "donor_role": 412, + "new_mode_family": 1212, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 7978, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 7148, + "signs": true + } + ] + }, + { + "donor_role": 413, + "new_mode_family": 1211, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9080, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9049, + "signs": true + } + ] + }, + { + "donor_role": 414, + "new_mode_family": 1210, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9054, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9018, + "signs": true + } + ] + }, + { + "donor_role": 415, + "new_mode_family": 1209, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9164, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9095, + "signs": true + } + ] + }, + { + "donor_role": 416, + "new_mode_family": 1208, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 65535 + ], + "nonzero_defect_families_mod_prime": 6521, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 65535 + ], + "nonzero_defect_families_mod_prime": 6520, + "signs": true + } + ] + }, + { + "donor_role": 417, + "new_mode_family": 1207, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 8376, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 8411, + "signs": true + } + ] + }, + { + "donor_role": 418, + "new_mode_family": 1206, + "variants": [ + { + "first_defect_mod_prime": [ + 37, + 65536 + ], + "nonzero_defect_families_mod_prime": 6384, + "signs": false + }, + { + "first_defect_mod_prime": [ + 37, + 65536 + ], + "nonzero_defect_families_mod_prime": 6390, + "signs": true + } + ] + }, + { + "donor_role": 419, + "new_mode_family": 1205, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9191, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9129, + "signs": true + } + ] + }, + { + "donor_role": 420, + "new_mode_family": 1204, + "variants": [ + { + "first_defect_mod_prime": [ + 36, + 65536 + ], + "nonzero_defect_families_mod_prime": 6523, + "signs": false + }, + { + "first_defect_mod_prime": [ + 36, + 65536 + ], + "nonzero_defect_families_mod_prime": 6525, + "signs": true + } + ] + }, + { + "donor_role": 421, + "new_mode_family": 1203, + "variants": [ + { + "first_defect_mod_prime": [ + 36, + 1 + ], + "nonzero_defect_families_mod_prime": 6541, + "signs": false + }, + { + "first_defect_mod_prime": [ + 36, + 1 + ], + "nonzero_defect_families_mod_prime": 6543, + "signs": true + } + ] + }, + { + "donor_role": 422, + "new_mode_family": 1202, + "variants": [ + { + "first_defect_mod_prime": [ + 37, + 1 + ], + "nonzero_defect_families_mod_prime": 6588, + "signs": false + }, + { + "first_defect_mod_prime": [ + 37, + 1 + ], + "nonzero_defect_families_mod_prime": 6595, + "signs": true + } + ] + }, + { + "donor_role": 423, + "new_mode_family": 1201, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 8366, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 8388, + "signs": true + } + ] + }, + { + "donor_role": 424, + "new_mode_family": 1200, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 65535 + ], + "nonzero_defect_families_mod_prime": 6526, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 65535 + ], + "nonzero_defect_families_mod_prime": 6524, + "signs": true + } + ] + }, + { + "donor_role": 425, + "new_mode_family": 1199, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9073, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9099, + "signs": true + } + ] + }, + { + "donor_role": 426, + "new_mode_family": 1198, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 65535 + ], + "nonzero_defect_families_mod_prime": 6518, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 65535 + ], + "nonzero_defect_families_mod_prime": 6518, + "signs": true + } + ] + }, + { + "donor_role": 427, + "new_mode_family": 1197, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9233, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9257, + "signs": true + } + ] + }, + { + "donor_role": 428, + "new_mode_family": 1196, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 8013, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 7324, + "signs": true + } + ] + }, + { + "donor_role": 429, + "new_mode_family": 1195, + "variants": [ + { + "first_defect_mod_prime": [ + 37, + 65536 + ], + "nonzero_defect_families_mod_prime": 6400, + "signs": false + }, + { + "first_defect_mod_prime": [ + 37, + 65536 + ], + "nonzero_defect_families_mod_prime": 6394, + "signs": true + } + ] + }, + { + "donor_role": 430, + "new_mode_family": 1194, + "variants": [ + { + "first_defect_mod_prime": [ + 36, + 65536 + ], + "nonzero_defect_families_mod_prime": 6534, + "signs": false + }, + { + "first_defect_mod_prime": [ + 36, + 65536 + ], + "nonzero_defect_families_mod_prime": 6551, + "signs": true + } + ] + }, + { + "donor_role": 431, + "new_mode_family": 1193, + "variants": [ + { + "first_defect_mod_prime": [ + 36, + 1 + ], + "nonzero_defect_families_mod_prime": 6516, + "signs": false + }, + { + "first_defect_mod_prime": [ + 36, + 1 + ], + "nonzero_defect_families_mod_prime": 6532, + "signs": true + } + ] + }, + { + "donor_role": 432, + "new_mode_family": 1192, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9048, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9161, + "signs": true + } + ] + }, + { + "donor_role": 433, + "new_mode_family": 1191, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9070, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9027, + "signs": true + } + ] + }, + { + "donor_role": 434, + "new_mode_family": 1190, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9083, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9047, + "signs": true + } + ] + }, + { + "donor_role": 435, + "new_mode_family": 1189, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 65535 + ], + "nonzero_defect_families_mod_prime": 5555, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 65535 + ], + "nonzero_defect_families_mod_prime": 5557, + "signs": true + } + ] + }, + { + "donor_role": 436, + "new_mode_family": 1188, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 65535 + ], + "nonzero_defect_families_mod_prime": 5433, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 65535 + ], + "nonzero_defect_families_mod_prime": 5430, + "signs": true + } + ] + }, + { + "donor_role": 437, + "new_mode_family": 1187, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 65535 + ], + "nonzero_defect_families_mod_prime": 6518, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 65535 + ], + "nonzero_defect_families_mod_prime": 6515, + "signs": true + } + ] + }, + { + "donor_role": 438, + "new_mode_family": 1186, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 6510, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 6507, + "signs": true + } + ] + }, + { + "donor_role": 439, + "new_mode_family": 1185, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 4447, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 4976, + "signs": true + } + ] + }, + { + "donor_role": 440, + "new_mode_family": 1184, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 5011, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 4565, + "signs": true + } + ] + }, + { + "donor_role": 441, + "new_mode_family": 1183, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9125, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9072, + "signs": true + } + ] + }, + { + "donor_role": 442, + "new_mode_family": 1182, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9096, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9045, + "signs": true + } + ] + }, + { + "donor_role": 443, + "new_mode_family": 1181, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9041, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9154, + "signs": true + } + ] + }, + { + "donor_role": 444, + "new_mode_family": 1180, + "variants": [ + { + "first_defect_mod_prime": [ + 36, + 65536 + ], + "nonzero_defect_families_mod_prime": 6644, + "signs": false + }, + { + "first_defect_mod_prime": [ + 36, + 65536 + ], + "nonzero_defect_families_mod_prime": 6628, + "signs": true + } + ] + }, + { + "donor_role": 445, + "new_mode_family": 1179, + "variants": [ + { + "first_defect_mod_prime": [ + 1, + 63489 + ], + "nonzero_defect_families_mod_prime": 7657, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 4096 + ], + "nonzero_defect_families_mod_prime": 7640, + "signs": true + } + ] + }, + { + "donor_role": 446, + "new_mode_family": 1178, + "variants": [ + { + "first_defect_mod_prime": [ + 37, + 1 + ], + "nonzero_defect_families_mod_prime": 6809, + "signs": false + }, + { + "first_defect_mod_prime": [ + 37, + 1 + ], + "nonzero_defect_families_mod_prime": 6802, + "signs": true + } + ] + }, + { + "donor_role": 447, + "new_mode_family": 1177, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 8515, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 7909, + "signs": true + } + ] + }, + { + "donor_role": 456, + "new_mode_family": 1176, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9311, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 8829, + "signs": true + } + ] + }, + { + "donor_role": 457, + "new_mode_family": 1175, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 10565, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 10665, + "signs": true + } + ] + }, + { + "donor_role": 458, + "new_mode_family": 1174, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 8616, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 7896, + "signs": true + } + ] + }, + { + "donor_role": 459, + "new_mode_family": 1173, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 7282, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 53249 + ], + "nonzero_defect_families_mod_prime": 7273, + "signs": true + } + ] + }, + { + "donor_role": 460, + "new_mode_family": 1172, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 65535 + ], + "nonzero_defect_families_mod_prime": 5939, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 65535 + ], + "nonzero_defect_families_mod_prime": 5933, + "signs": true + } + ] + }, + { + "donor_role": 461, + "new_mode_family": 1171, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 65535 + ], + "nonzero_defect_families_mod_prime": 6975, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 65535 + ], + "nonzero_defect_families_mod_prime": 6975, + "signs": true + } + ] + }, + { + "donor_role": 462, + "new_mode_family": 1170, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9403, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9397, + "signs": true + } + ] + }, + { + "donor_role": 463, + "new_mode_family": 1169, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9467, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9461, + "signs": true + } + ] + }, + { + "donor_role": 464, + "new_mode_family": 1168, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9285, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9203, + "signs": true + } + ] + }, + { + "donor_role": 465, + "new_mode_family": 1167, + "variants": [ + { + "first_defect_mod_prime": [ + 36, + 1 + ], + "nonzero_defect_families_mod_prime": 6007, + "signs": false + }, + { + "first_defect_mod_prime": [ + 36, + 1 + ], + "nonzero_defect_families_mod_prime": 5994, + "signs": true + } + ] + }, + { + "donor_role": 466, + "new_mode_family": 1166, + "variants": [ + { + "first_defect_mod_prime": [ + 36, + 65536 + ], + "nonzero_defect_families_mod_prime": 6000, + "signs": false + }, + { + "first_defect_mod_prime": [ + 36, + 65536 + ], + "nonzero_defect_families_mod_prime": 5989, + "signs": true + } + ] + }, + { + "donor_role": 467, + "new_mode_family": 1165, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 9266, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 9217, + "signs": true + } + ] + }, + { + "donor_role": 468, + "new_mode_family": 1164, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 6815, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 6816, + "signs": true + } + ] + }, + { + "donor_role": 469, + "new_mode_family": 1163, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 6975, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 6979, + "signs": true + } + ] + }, + { + "donor_role": 470, + "new_mode_family": 1162, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 5992, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 6005, + "signs": true + } + ] + }, + { + "donor_role": 471, + "new_mode_family": 1161, + "variants": [ + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 5964, + "signs": false + }, + { + "first_defect_mod_prime": [ + 2, + 2 + ], + "nonzero_defect_families_mod_prime": 5975, + "signs": true + } + ] + }, + { + "donor_role": 478, + "new_mode_family": 1160, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 8612, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 8544, + "signs": true + } + ] + }, + { + "donor_role": 479, + "new_mode_family": 1159, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 32769 + ], + "nonzero_defect_families_mod_prime": 8460, + "signs": false + }, + { + "first_defect_mod_prime": [ + 0, + 16384 + ], + "nonzero_defect_families_mod_prime": 8629, + "signs": true + } + ] + }, + { + "donor_role": 480, + "new_mode_family": 1158, + "variants": [ + { + "first_defect_mod_prime": [ + 0, + 16385 + ], + "nonzero_defect_families_mod_prime": 10850, + "signs": false + }, + { + "first_defect_mod_prime": [ + 1, + 57345 + ], + "nonzero_defect_families_mod_prime": 10838, + "signs": true + } + ] + }, + { + "donor_role": 481, + "new_mode_family": 1157, + "variants": [ + { + "first_defect_mod_prime": [ + 36, + 65536 + ], + "nonzero_defect_families_mod_prime": 6508, + "signs": false + }, + { + "first_defect_mod_prime": [ + 36, + 65536 + ], + "nonzero_defect_families_mod_prime": 6494, + "signs": true + } + ] + } + ] +} diff --git a/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/REVIEW.json b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/REVIEW.json new file mode 100644 index 0000000000..21c6e2bb9a --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/REVIEW.json @@ -0,0 +1,430 @@ +{ + "checker_sha256": "5c0d25220cecf772c5ca79895a5b87008b8d5b6fda60c7506a5b0d92d8b019ea", + "deep_owner_patch_audit_repeated": false, + "literal_core_replay": true, + "new_native_kernel_sweep": false, + "pins": { + "coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.json": "e79603bee7c4077b3637f9b7891bac59719183e922a71d5994aaf9d405d5322f", + "encoded-controller/PRODUCTIVE-OWNER-DRIFT.json": "50ce5fa78259a44c036f261d9f4d123af77bb22293dda1f0d616aa6b4156f066", + "encoded-controller/PRODUCTIVE-OWNER-DRIFT.md": "afc421177ab5ac693d6a0f7fa9f3fcd56b9f324f3bedbcf0061826139223a691", + "encoded-controller/REPAIRED-OWNER-DRIFT.json": "7cf0ee03ac7ec5741acf574e613eabab6d00f35cfa29dca5d6157abf1b50cda6", + "encoded-controller/REPAIRED-OWNER-DRIFT.md": "c34df7c493b38cbd1c7c77c21cb31fef6cc84e33ce1f51c60aeca780aff82ce0", + "encoded-controller/check_productive_owner_drift.py": "b7107d6cae2851d20f394f2f445bae73c1cec9e6e75390b8286d21604dcdd857", + "encoded-controller/check_repaired_owner_drift.py": "ef55586a7ef81060de4b9e103b496049c77dbf144ea6ca028a333709d57c2640", + "history-encoding/FULL-MODE-PROGRAMS.json.gz": "f271842a741584389e166e700e262f161b0dd570ce8c7a540f2717e90ead5205", + "interface-proof/FULL-MODE-PORT-REVIEW.json": "ff123b08b3ac58f20d12d4fbec575472086ace1708d3242519884dbffe534372", + "residual-syndrome/physical-algebra/ORIGINAL-PAIRED-GAP-PROGRAMS.json.gz": "42aeb0902d8b2330f9050718c6d949993111a9fd898acad599ec867bb63a2b20", + "source-domain/PAIRED-OWNER-PATCH.json": "f39e8e0a39e423a5218a63590f40910b5c46216b170bc8ebe3b6dc61831b38c0", + "source-domain/productive-owner-drift/PROOF.md": "50f1af3b6614fd0a687b0557ff7b00539cfc23743ef747b576fad75fe72fdcab", + "source-domain/productive-owner-drift/REPAIR.json": "847c35e0709f115f57543d3cb6f5fca1d30b58ace17807d3b5c61398b21ddd40", + "source-domain/productive-owner-drift/REPAIRED-SKELETON.json.gz": "fc9b441fbb8c41aaa9ed41df3cb4ec853008affededadf328dc0185bb4614e00", + "source-domain/productive-owner-drift/SKELETON.json.gz": "653b5f47d14d88cab23420796597e860a8bab73e86aa31fd471c3843c079e6d0", + "source-domain/productive-owner-drift/repair.py": "579889368029946edc2bdba05c21beff09a35e79b2803f969904103ff2e65252", + "temporal-reuse/PAIRED-OWNER-PATCH-REVIEW.json": "9acaae3a055d33665c12f938cbc1ee03e2d248f8cdbf493cb1b14ef9954bb882" + }, + "producer_imports": [], + "raw_core_formula_used": false, + "repair": { + "changed_calls": 14, + "changed_roles": 74, + "conditional_native_mass": 1032192, + "minimum_changed_roles_in_fixed_call_class": 74, + "old_jobs_preserved": 69120, + "same_call_exchanges": 37, + "shared_ordinary_occurrences": 1369 + }, + "scope": "Two fixed old-owner assignments and two sign conventions fail on one exact constant-sector input. The same-call alias repair preserves all whole jobs conditionally on the retained slot-specific native contracts. No arbitrary-owner-controller obstruction or supplier admission.", + "status": "PASS_INDEPENDENT_PRODUCTIVE_OWNER_DRIFT_AND_ALIAS_REPAIR", + "variants": [ + { + "assignment": "unchanged", + "counts": { + "literal_core_scalars": 2936016, + "paired_ADDs": 193536 + }, + "defect_families": 177, + "defect_sha256": "e23d3cf20454ef4cc4215bc9856743994f83ccad1e6157664e686a19ffc4f840", + "first_defect": [ + 112, + "-1/4" + ], + "inverse": "PASS", + "mode_signs": false, + "trace": [ + { + "after": "-1/4", + "before": "0", + "family": 112, + "kind": "local_cover_sweep", + "position": 1 + }, + { + "after": "-1", + "before": "1", + "family": 13005, + "kind": "local_cover_sweep", + "position": 1 + }, + { + "after": "-1/4", + "before": "0", + "family": 7280, + "kind": "paired_output_boundary", + "position": 3 + }, + { + "after": "1/4", + "before": "0", + "family": 0, + "kind": "local_cover_sweep", + "position": 9 + }, + { + "after": "0", + "before": "-1/4", + "family": 112, + "kind": "local_cover_sweep", + "position": 29 + }, + { + "after": "0", + "before": "-1/4", + "family": 7280, + "kind": "local_cover_sweep", + "position": 30 + }, + { + "after": "0", + "before": "1/4", + "family": 0, + "kind": "terminal", + "position": 324 + }, + { + "after": "-1/4", + "before": "0", + "family": 112, + "kind": "terminal", + "position": 324 + }, + { + "after": "-1/4", + "before": "0", + "family": 7280, + "kind": "terminal", + "position": 333 + }, + { + "after": "0", + "before": "-1", + "family": 13005, + "kind": "local_cover_sweep", + "position": 460 + }, + { + "after": "-1", + "before": "0", + "family": 13005, + "kind": "terminal", + "position": 601 + } + ] + }, + { + "assignment": "unchanged", + "counts": { + "literal_core_scalars": 2936016, + "paired_ADDs": 193536 + }, + "defect_families": 176, + "defect_sha256": "f1d1fc14d9f2e0dbafa0693028a367a5e2df80a4ab2c240f2d0711cb7b6845cd", + "first_defect": [ + 112, + "-1/4" + ], + "inverse": "PASS", + "mode_signs": true, + "trace": [ + { + "after": "-1/4", + "before": "0", + "family": 112, + "kind": "local_cover_sweep", + "position": 1 + }, + { + "after": "-1", + "before": "1", + "family": 13005, + "kind": "local_cover_sweep", + "position": 1 + }, + { + "after": "-1/4", + "before": "0", + "family": 7280, + "kind": "paired_output_boundary", + "position": 3 + }, + { + "after": "1", + "before": "-1", + "family": 13005, + "kind": "paired_output_boundary", + "position": 3 + }, + { + "after": "1/4", + "before": "0", + "family": 0, + "kind": "local_cover_sweep", + "position": 9 + }, + { + "after": "0", + "before": "-1/4", + "family": 112, + "kind": "local_cover_sweep", + "position": 29 + }, + { + "after": "0", + "before": "-1/4", + "family": 7280, + "kind": "local_cover_sweep", + "position": 30 + }, + { + "after": "0", + "before": "1/4", + "family": 0, + "kind": "terminal", + "position": 324 + }, + { + "after": "-1/4", + "before": "0", + "family": 112, + "kind": "terminal", + "position": 324 + }, + { + "after": "-1/4", + "before": "0", + "family": 7280, + "kind": "terminal", + "position": 333 + }, + { + "after": "0", + "before": "1", + "family": 13005, + "kind": "local_cover_sweep", + "position": 460 + }, + { + "after": "1", + "before": "0", + "family": 13005, + "kind": "terminal", + "position": 601 + } + ] + }, + { + "assignment": "repaired", + "counts": { + "literal_core_scalars": 2936016, + "paired_ADDs": 193536 + }, + "defect_families": 177, + "defect_sha256": "e23d3cf20454ef4cc4215bc9856743994f83ccad1e6157664e686a19ffc4f840", + "first_defect": [ + 112, + "-1/4" + ], + "inverse": "PASS", + "mode_signs": false, + "trace": [ + { + "after": "-1/4", + "before": "0", + "family": 112, + "kind": "local_cover_sweep", + "position": 1 + }, + { + "after": "-1", + "before": "1", + "family": 13005, + "kind": "local_cover_sweep", + "position": 1 + }, + { + "after": "-1/4", + "before": "0", + "family": 7280, + "kind": "paired_output_boundary", + "position": 3 + }, + { + "after": "1/4", + "before": "0", + "family": 0, + "kind": "local_cover_sweep", + "position": 9 + }, + { + "after": "0", + "before": "-1/4", + "family": 112, + "kind": "local_cover_sweep", + "position": 29 + }, + { + "after": "0", + "before": "-1/4", + "family": 7280, + "kind": "local_cover_sweep", + "position": 30 + }, + { + "after": "0", + "before": "1/4", + "family": 0, + "kind": "terminal", + "position": 324 + }, + { + "after": "-1/4", + "before": "0", + "family": 112, + "kind": "terminal", + "position": 324 + }, + { + "after": "-1/4", + "before": "0", + "family": 7280, + "kind": "terminal", + "position": 333 + }, + { + "after": "0", + "before": "-1", + "family": 13005, + "kind": "local_cover_sweep", + "position": 460 + }, + { + "after": "-1", + "before": "0", + "family": 13005, + "kind": "terminal", + "position": 601 + } + ] + }, + { + "assignment": "repaired", + "counts": { + "literal_core_scalars": 2936016, + "paired_ADDs": 193536 + }, + "defect_families": 176, + "defect_sha256": "f1d1fc14d9f2e0dbafa0693028a367a5e2df80a4ab2c240f2d0711cb7b6845cd", + "first_defect": [ + 112, + "-1/4" + ], + "inverse": "PASS", + "mode_signs": true, + "trace": [ + { + "after": "-1/4", + "before": "0", + "family": 112, + "kind": "local_cover_sweep", + "position": 1 + }, + { + "after": "-1", + "before": "1", + "family": 13005, + "kind": "local_cover_sweep", + "position": 1 + }, + { + "after": "-1/4", + "before": "0", + "family": 7280, + "kind": "paired_output_boundary", + "position": 3 + }, + { + "after": "1", + "before": "-1", + "family": 13005, + "kind": "paired_output_boundary", + "position": 3 + }, + { + "after": "1/4", + "before": "0", + "family": 0, + "kind": "local_cover_sweep", + "position": 9 + }, + { + "after": "0", + "before": "-1/4", + "family": 112, + "kind": "local_cover_sweep", + "position": 29 + }, + { + "after": "0", + "before": "-1/4", + "family": 7280, + "kind": "local_cover_sweep", + "position": 30 + }, + { + "after": "0", + "before": "1/4", + "family": 0, + "kind": "terminal", + "position": 324 + }, + { + "after": "-1/4", + "before": "0", + "family": 112, + "kind": "terminal", + "position": 324 + }, + { + "after": "-1/4", + "before": "0", + "family": 7280, + "kind": "terminal", + "position": 333 + }, + { + "after": "0", + "before": "1", + "family": 13005, + "kind": "local_cover_sweep", + "position": 460 + }, + { + "after": "1", + "before": "0", + "family": 13005, + "kind": "terminal", + "position": 601 + } + ] + } + ] +} diff --git a/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/REVIEW.md b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/REVIEW.md new file mode 100644 index 0000000000..43c8479a08 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/REVIEW.md @@ -0,0 +1,142 @@ +# Independent review of productive-owner drift + +The two counterexamples pass independent review. The 37-exchange alias +repair also passes its stated job-preservation checks. It does not repair +the output map. In both assignments, the constant unit input in family +13005 gives output `-1/4` in family 112, where the required output is zero. +The result holds with the original mode signs and with a negation after +each mode occurrence. + +The review checks the frozen +[original counterexample](../../encoded-controller/PRODUCTIVE-OWNER-DRIFT.md), +[repaired counterexample](../../encoded-controller/REPAIRED-OWNER-DRIFT.md), +and [same-call repair](../../source-domain/productive-owner-drift/PROOF.md). +Their exact inputs and hashes are in [REVIEW.json](REVIEW.json). +No producer or other checker is imported by [review_drift.py](review_drift.py). + +## Literal counterexample replay + +The checker reads the frozen 626-event schedule and binds every event +to the selected template or accepted paired marker. It executes every +paired physical ADD on the actual productive family. It then executes +all 20,389 scalar events in each raw FULL-MODE core. It does not use the +producer's closed formula for a raw core. Across one complete word this +is 2,936,016 core scalar events and 193,536 paired graph ADDs. + +The state has all 14,336 productive coordinates. There is no separate +clean-mode input. Cross-core aliases are used literally in the original +assignment. In the repaired assignment, all promoted fields avoid every +role in the other core. The two variants also apply mode negation once +per occurrence, including both occurrences of a shared owner in the +original assignment. + +All four complete output vectors match the frozen defect hashes. There +are 177 defective output families with the original signs and 176 with +the additional signs. The first defect is family 112 with coefficient +`-1/4` in all cases. The inverse of every literal scalar event, bridge, +and terminal restores the unit input exactly. This establishes that the +failure is an output-restoration defect of these reversible words. + +The exact input is constant on the native payload and cover. Each +complete retained native operator and each route or translation fixes +this sector. This uses the pinned native-core and paired-phase contracts; +the review does not repeat their native kernel checks. A successful +constant-sector replay would not establish a native construction. A +nonzero defect in this sector is enough to reject the fixed content word. + +## The first dependency + +At position 1, raw call 0 sends the first promoted owner 13005 into target +family 112 with coefficient `-1/4`. This is the actual first mode column +of the literal core. At position 9, the next backward call sends `+1/4` +to X-family 0. The later forward call at position 29 restores family 112 +to zero, but does not remove family 0's value. At position 324, the retained +terminal sends its negative into family 112. Family 112 is not changed +after this event. + +Owner 13005 has no later promoted occurrence. Its later active data calls +are 117 and 127, after the defective output has closed. A suffix sign can +restore this owner's initial sign, but it cannot remove the earlier +data dependency. These facts concern the fixed schedule and input; they +do not prove that every use of productive owners must fail. + +## The alias repair + +The checker reconstructs the original 36 incidences by intersecting the +two complete owner sets in each pair. These give 37 bad promoted positions: +15 first-mode/second-helper cases, 20 second-mode/first-helper cases, and +one shared mode owner that occupies two positions. + +For every bad position, it recomputes all ordinary width-nine donors in +the same call whose owners are absent from the other core. It verifies +each reported matching and the exact exchange of whole source-job IDs. +The 37 exchanges change 74 positions in 14 calls. They leave every active +data family, every complete call owner set, all 626 schedule positions, +and each call's complete job multiset unchanged. Every destination +width-nine slot has canonical I-to-FULL endpoints. The destination's +slot-specific whole-job wrappers must remain in use. + +All 69,120 jobs keep their time, route, and pending axes. Thus the accepted +strict owner windows remain valid. The remaining 1,369 shared occurrences +are ordinary helpers in both cores. The independent check confirms the +same pending child and disjoint coordinate intervals for each such pair. +The accepted complete-helper contract remains a dependency; this review +does not repeat the earlier deep 280-slot chart audit. + +Within fixed complete call owner sets, each of the 37 bad jobs must leave +the mode positions. Each needs a different ordinary position, and each +replacement comes from an ordinary position. Hence at least 74 positions +must change. The frozen 37 disjoint exchanges attain this bound. This +does not give a minimum over changed call times, owner stock, or graphs. + +The conditional centre-removed native rank mass is 1,032,192. It has no +new family or child from the alias exchanges. It is not a supplier +profile because the productive output contents are wrong. Exact native +views for inherited old-mode prefixes, the output decoder, the complete +finite invoice, and recursive admission remain separate obligations. + +## A bounded assignment escape + +[screen_first_owner.py](screen_first_owner.py) tests all 202 admissible +single exchanges of call 0's promoted role 225 with an ordinary width-nine +role. All other repaired calls and graphs stay fixed. Each exchange +retains the full job contract and avoids a new cross-core alias. + +For each candidate, set its newly promoted owner to one and all other +productive fields to zero. Both sign variants have a nonzero output +defect. [FIRST-OWNER-EXCHANGES.json](FIRST-OWNER-EXCHANGES.json) gives the +first defect for each of the 404 cases. + +This screen evaluates the exact dyadic word in the field modulo 65537. +The modulus is prime and odd, so every power-of-two denominator is a +unit. A nonzero reduced defect proves a nonzero rational defect; this +is not a probabilistic inference. The endpoint algorithm is also checked +against both independent literal base replays. Its use on each candidate +requires the verified absence of cross-core mode aliases. + +The result rules out each single reassignment in this stated class. +It does not rule out several coordinated exchanges, a changed graph, +a paid correction, or another controller. Moving owner 13005 out of the +first mode position can remove that particular witness, but every legal +single replacement has a witness on its own arbitrary input. + +## Reproduction + +From the workspace root: + +```text +python3 -I -O -B work/centre-encoding-campaign-20261014/lanes/circuit-interface/productive-owner-review/review_drift.py +python3 -I -O -B work/centre-encoding-campaign-20261014/lanes/circuit-interface/productive-owner-review/screen_first_owner.py +``` + +Expected statuses: + +```text +PASS_INDEPENDENT_PRODUCTIVE_OWNER_DRIFT_AND_ALIAS_REPAIR +PASS_ALL_SINGLE_FIRST_MODE_EXCHANGES_HAVE_EXPLICIT_DEFECTS +``` + +No unresolved material finding remains in the stated counterexamples or +same-call alias repair. No full productive-owner construction, complete +decoder, or kappa improvement is claimed. The review used an independent +OpenAI Codex agent, not an independent human reviewer. diff --git a/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/review_drift.py b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/review_drift.py new file mode 100644 index 0000000000..97b11796cd --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/review_drift.py @@ -0,0 +1,299 @@ +"""Check the owner repair and replay the literal constant-sector word.""" + +from collections import Counter +from fractions import Fraction +from hashlib import sha256 +from pathlib import Path +import gzip +import json +import tarfile + + +HERE = Path(__file__).resolve().parent +LANES = HERE.parent.parent +ROOT = LANES.parents[2] +ARCHIVE = ROOT/'worktrees/k5-persistent-cleanup/research/community-frontier1094-audit/selected-replay.tar.gz' +PINS = { + 'source-domain/productive-owner-drift/SKELETON.json.gz': '653b5f47d14d88cab23420796597e860a8bab73e86aa31fd471c3843c079e6d0', + 'source-domain/productive-owner-drift/REPAIRED-SKELETON.json.gz': 'fc9b441fbb8c41aaa9ed41df3cb4ec853008affededadf328dc0185bb4614e00', + 'source-domain/productive-owner-drift/REPAIR.json': '847c35e0709f115f57543d3cb6f5fca1d30b58ace17807d3b5c61398b21ddd40', + 'source-domain/productive-owner-drift/repair.py': '579889368029946edc2bdba05c21beff09a35e79b2803f969904103ff2e65252', + 'source-domain/productive-owner-drift/PROOF.md': '50f1af3b6614fd0a687b0557ff7b00539cfc23743ef747b576fad75fe72fdcab', + 'source-domain/PAIRED-OWNER-PATCH.json': 'f39e8e0a39e423a5218a63590f40910b5c46216b170bc8ebe3b6dc61831b38c0', + 'history-encoding/FULL-MODE-PROGRAMS.json.gz': 'f271842a741584389e166e700e262f161b0dd570ce8c7a540f2717e90ead5205', + 'residual-syndrome/physical-algebra/ORIGINAL-PAIRED-GAP-PROGRAMS.json.gz': '42aeb0902d8b2330f9050718c6d949993111a9fd898acad599ec867bb63a2b20', + 'encoded-controller/PRODUCTIVE-OWNER-DRIFT.json': '50ce5fa78259a44c036f261d9f4d123af77bb22293dda1f0d616aa6b4156f066', + 'encoded-controller/PRODUCTIVE-OWNER-DRIFT.md': 'afc421177ab5ac693d6a0f7fa9f3fcd56b9f324f3bedbcf0061826139223a691', + 'encoded-controller/check_productive_owner_drift.py': 'b7107d6cae2851d20f394f2f445bae73c1cec9e6e75390b8286d21604dcdd857', + 'encoded-controller/REPAIRED-OWNER-DRIFT.json': '7cf0ee03ac7ec5741acf574e613eabab6d00f35cfa29dca5d6157abf1b50cda6', + 'encoded-controller/REPAIRED-OWNER-DRIFT.md': 'c34df7c493b38cbd1c7c77c21cb31fef6cc84e33ce1f51c60aeca780aff82ce0', + 'encoded-controller/check_repaired_owner_drift.py': 'ef55586a7ef81060de4b9e103b496049c77dbf144ea6ca028a333709d57c2640', + 'temporal-reuse/PAIRED-OWNER-PATCH-REVIEW.json': '9acaae3a055d33665c12f938cbc1ee03e2d248f8cdbf493cb1b14ef9954bb882', + 'coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.json': 'e79603bee7c4077b3637f9b7891bac59719183e922a71d5994aaf9d405d5322f', + 'interface-proof/FULL-MODE-PORT-REVIEW.json': 'ff123b08b3ac58f20d12d4fbec575472086ace1708d3242519884dbffe534372', +} +MODES = (225, 226, 229, 232, 241, 242, 257, 258) + + +def need(ok, reason): + if not ok: + raise ValueError(reason) + + +def digest(value): + return sha256(json.dumps(value, separators=(',', ':')).encode()).hexdigest() + + +def load(): + data = {} + for name, pin in PINS.items(): + raw = (LANES/name).read_bytes() + if name.endswith('.gz'): + raw = gzip.decompress(raw) + need(sha256(raw).hexdigest() == pin, 'The frozen input: '+name) + if name.endswith(('.json', '.json.gz')): + data[name] = json.loads(raw) + need(sha256(ARCHIVE.read_bytes()).hexdigest() == 'f1da80610bf33c58527f18ad63b4350d0b864e1d4486141ee17ac9bed4d529d6', 'The archive') + with tarfile.open(ARCHIVE) as archive: + for key, name, pin in ( + ('template', 'candidate/strict/global/hosted/GLOBAL-TEMPLATE.json.gz', '2acf02b418078e37090495c601fe550448751d4f35912757b13a1f778efc7760'), + ('canonical', 'candidate/strict/global/base/providers/gauge44/CANONICAL-WORD.json.gz', '16bc0ebb04b4be6c0ade74badc6a0c0cdba4215eda86e4ff9f13abf8ecebd219')): + raw = archive.extractfile(name).read() + need(sha256(raw).hexdigest() == pin, 'The exact archive member') + data[key] = json.loads(gzip.decompress(raw)) + return data + + +def check_repair(data): + old = data['source-domain/productive-owner-drift/SKELETON.json.gz'] + new = data['source-domain/productive-owner-drift/REPAIRED-SKELETON.json.gz'] + receipt = data['source-domain/productive-owner-drift/REPAIR.json'] + patch = data['source-domain/PAIRED-OWNER-PATCH.json'] + template, canonical = data['template'], data['canonical'] + jobs = template['hosting']['pooled_slots'] + source_jobs = list(range(69120)) + for item in patch['helper_owner_replacements']: + source_jobs[item['target_role_index']] = item['source_role_index'] + need(old['execution_schedule'] == new['execution_schedule'] and len(old['execution_schedule']) == 626, + 'All retimed event positions stay fixed') + for position, (item, event) in enumerate(zip(patch['schedule'], old['execution_schedule'])): + if 'original_event' in item: + source = item['original_event'] + expected = dict(template['execution_schedule'][source], original_event=source, position=position) + else: + expected = dict(item, orientation=template['calls'][item['times'][0]]['orientation'], position=position) + need(event == expected, 'Every skeleton event is bound to its actual source event') + incidences = [] + for a, b in zip(old['calls'][::2], old['calls'][1::2]): + for family in set(a['owner_families']) & set(b['owner_families']): + ra, rb = a['owner_families'].index(family), b['owner_families'].index(family) + if ra in MODES or rb in MODES: + kind = 'mode_mode' if ra in MODES and rb in MODES else ( + 'first_mode_second_helper' if ra in MODES else 'second_mode_first_helper') + incidences.append((a['time'], b['time'], family, ra, rb, kind)) + recorded = [(x['times'][0], x['times'][1], x['family'], x['first_role'], x['second_role'], x['kind']) + for x in old['cross_core_incidences']] + need(sorted(incidences) == sorted(recorded) and len(incidences) == 36, + 'All original cross-core incidences are independently reconstructed') + need(Counter(x[-1] for x in incidences) == {'mode_mode': 1, 'first_mode_second_helper': 15, + 'second_mode_first_helper': 20}, 'The exact incidence types') + widths = {role: len(canonical['frames'][canonical['final'][role]])- + len(canonical['frames'][canonical['start'][role]]) for role in range(224, 704)} + exchanges = {(row['time'], row['promoted_role']): row for row in receipt['exchanges']} + need(len(exchanges) == len(receipt['exchanges']) == 37, 'All exchanges are distinct') + bad = [] + all_changed = [] + bad_calls = set() + matching_rows = {row['time']: row for row in receipt['matchings']} + for time, (a, b) in enumerate(zip(old['calls'], new['calls'])): + need(a['time'] == b['time'] == time and all(a[k] == b[k] == template['calls'][time][k] + for k in ('replica', 'stage', 'pair', 'orientation')), 'Every call retains its source context') + need(a['helper_source_roles'] == source_jobs[480*time:480*(time+1)], 'The old accepted job permutation') + need(a['data_families'] == b['data_families'] == [x[0] for x in template['calls'][time]['owners'][:224]], + 'The selected active data stays fixed') + need(set(a['owner_families']) == set(b['owner_families']) and len(set(b['owner_families'])) == 704, + 'The complete owner set stays fixed and distinct') + need(sorted(a['helper_source_roles']) == sorted(b['helper_source_roles']), 'Every job stays at its original call') + other = set(old['calls'][time ^ 1]['owner_families']) + bad_here = [role for role in MODES if a['owner_families'][role] in other] + donors = [role for role in range(224, 704) if role not in MODES and widths[role] == 9 + and a['owner_families'][role] not in other] + expected_families = a['owner_families'][:] + expected_jobs = a['helper_source_roles'][:] + used = set() + if bad_here: + bad_calls.add(time) + need(matching_rows[time]['bad_mode_roles'] == bad_here and + matching_rows[time]['admissible_ordinary_roles'] == donors, 'Every exact donor set') + for role in bad_here: + bad.append((time, role)) + row = exchanges[time, role] + donor = row['ordinary_role'] + need(donor in donors and donor not in used, 'Each bad mode has a distinct legal ordinary donor') + used.add(donor) + need(row['old_mode_owner'] == a['owner_families'][role] and + row['new_mode_owner'] == a['owner_families'][donor], 'Exact old and new mode owners') + need((row['mode_job'], row['ordinary_job']) == + (a['helper_source_roles'][role-224], a['helper_source_roles'][donor-224]), 'Both exact whole jobs') + for r in (role, donor): + need(widths[r] == 9 and canonical['frames'][canonical['start'][r]] == [] and + len(canonical['frames'][canonical['final'][r]]) == 9, 'The complete I-to-FULL local contract') + expected_families[role], expected_families[donor] = expected_families[donor], expected_families[role] + expected_jobs[role-224], expected_jobs[donor-224] = expected_jobs[donor-224], expected_jobs[role-224] + need(expected_families == b['owner_families'] and expected_jobs == b['helper_source_roles'], + 'Only the declared disjoint exchanges change the literal call') + need(b['mode_families'] == [b['owner_families'][r] for r in MODES], 'The exact new mode roles') + need(not set(b['mode_families']) & set(new['calls'][time ^ 1]['owner_families']), 'No cross-core mode alias') + for helper, source in enumerate(b['helper_source_roles']): + job = jobs[source] + need(job['width'] == widths[224+helper] and job['family'] == b['owner_families'][224+helper], + 'The original whole job and its width reach the new local slot') + all_changed.extend((time, r) for r, (x, y) in enumerate(zip(a['owner_families'], b['owner_families'])) if x != y) + need((len(bad), len(bad_calls), len(all_changed)) == (37, 14, 74), 'The exact repair size and attained role bound') + need(not new['cross_core_incidences'] and new['same_call_job_exchanges'] == receipt['exchanges'], 'Complete alias removal') + shared = 0 + for a, b in zip(new['calls'][::2], new['calls'][1::2]): + both = set(a['owner_families']) & set(b['owner_families']) + shared += len(both) + for family in both: + ra, rb = a['owner_families'].index(family), b['owner_families'].index(family) + need(ra >= 224 and rb >= 224 and ra not in MODES and rb not in MODES, 'Every remaining shared owner is ordinary') + ja, jb = jobs[a['helper_source_roles'][ra-224]], jobs[b['helper_source_roles'][rb-224]] + need(ja['child'] == jb['child'] and + (ja['offset']+ja['width'] <= jb['offset'] or jb['offset']+jb['width'] <= ja['offset']), + 'Shared ordinary jobs use the same chart and disjoint pending axes') + need(shared == 1369, 'All shared ordinary occurrences') + profile = {int(k): v for k, v in data['temporal-reuse/PAIRED-OWNER-PATCH-REVIEW.json']['complete_profile'].items()} + need(sum(k*v for k, v in profile.items())-1152*8 == 1032192, 'The conditional centre-removed native mass') + return {'same_call_exchanges': 37, 'changed_roles': 74, 'changed_calls': 14, + 'old_jobs_preserved': 69120, 'shared_ordinary_occurrences': shared, + 'minimum_changed_roles_in_fixed_call_class': 74, 'conditional_native_mass': 1032192} + + +def scalar_core(core, reverse=False): + result = [] + for event in reversed(core) if reverse else core: + if event[0] != 'scalar': + need(event[0] in ('phase', 'climb', 'adapter', 'residual_adapter'), 'Every other core event is native or a phase marker') + continue + op = event[1] + need(op[0] in ('add', 'scale') and op[1][0] == 'L', 'The literal core has no private erasure') + c = Fraction(op[-2], op[-1]) + if op[0] == 'add': + need(op[2][0] == 'L' and op[1][1] != op[2][1], 'An off-diagonal literal ADD') + result.append(('add', op[1][1], op[2][1], -c if reverse else c)) + else: + result.append(('scale', op[1][1], None, 1/c if reverse else c)) + return result + + +def replay(skeleton, paired, cores, initial, signs, reverse=False): + values = initial[:] + traces = [] + graph_count = core_count = 0 + for event in reversed(skeleton['execution_schedule']) if reverse else skeleton['execution_schedule']: + watched = [values[f] for f in (0, 112, 7280, 13005)] + kind = event['kind'] + if kind in ('paired_input_boundary', 'paired_output_boundary'): + calls = [skeleton['calls'][t] for t in event['times']] + if reverse and signs and kind == 'paired_output_boundary': + for call in reversed(calls): + for family in reversed(call['mode_families']): + values[family] = -values[family] + part = 'prefix' if kind == 'paired_input_boundary' else 'suffix' + gates = paired['programs'][event['orientation']][part] + for gate in reversed(gates) if reverse else gates: + if gate['kind'] == 'physical_translation': + continue + need(gate['kind'] == 'physical_add', 'Every paired gate is accounted for') + tr, ts = gate['target'] + sr, ss = gate['source'] + target, source = calls[tr]['owner_families'][ts], calls[sr]['owner_families'][ss] + need(target != source, 'Every paired ADD remains off-diagonal') + c = Fraction(gate['coefficient']) + if values[source]: + values[target] += (-c if reverse else c)*values[source] + graph_count += 1 + if not reverse and signs and kind == 'paired_output_boundary': + for call in calls: + for family in call['mode_families']: + values[family] = -values[family] + elif kind == 'local_cover_sweep': + call = skeleton['calls'][event['time']] + owners = call['owner_families'] + local = [values[f] for f in owners] + for op, target, source, c in cores[call['orientation'], reverse]: + if op == 'scale': + if local[target]: + local[target] *= c + elif local[source]: + local[target] += c*local[source] + core_count += 1 + for family, value in zip(owners, local): + values[family] = value + elif kind == 'bridge': + base = 896*event['replica'] + dst, src = event['dst'], event['src'] + c = event['coefficient']*(-1 if reverse else 1) + for p in range(112): + values[base+224*dst+p] += c*values[base+224*src+p] + values[base+224*src+112+p] -= c*values[base+224*dst+112+p] + elif kind == 'terminal': + for pair in range(4): + base = 896*event['replica']+224*pair + for p in range(112): + x, y = values[base+p], values[base+112+p] + values[base+p], values[base+112+p] = (-y, x) if reverse else (y, -x) + else: + need(kind in ('idle_cover_sweep', 'terminal_Y_translations', 'bank_padding_cover_sweep', + 'translate_every_live_family'), 'Every remaining event fixes the constant sector') + if not reverse: + for family, before in zip((0, 112, 7280, 13005), watched): + if values[family] != before: + traces.append({'position': event['position'], 'kind': kind, 'family': family, + 'before': str(before), 'after': str(values[family])}) + return values, traces, {'literal_core_scalars': core_count, 'paired_ADDs': graph_count} + + +def main(): + data = load() + repair = check_repair(data) + paired = data['residual-syndrome/physical-algebra/ORIGINAL-PAIRED-GAP-PROGRAMS.json.gz'] + raw_core = data['history-encoding/FULL-MODE-PROGRAMS.json.gz'] + need(paired['core_payload_sha256'] == PINS['history-encoding/FULL-MODE-PROGRAMS.json.gz'], 'The exact literal core dependency') + cores = {(o, rev): scalar_core(raw_core[o], rev) for o in ('forward', 'backward') for rev in (False, True)} + need(all(len(word) == 20389 for word in cores.values()), 'Every retained scalar core event') + results = [] + for name, file, expected_file in ( + ('unchanged', 'SKELETON.json.gz', 'PRODUCTIVE-OWNER-DRIFT.json'), + ('repaired', 'REPAIRED-SKELETON.json.gz', 'REPAIRED-OWNER-DRIFT.json')): + skeleton = data['source-domain/productive-owner-drift/'+file] + expected = data['encoded-controller/'+expected_file] + initial = [Fraction(0)]*14336 + initial[13005] = Fraction(1) + for signs in (False, True): + output, traces, counts = replay(skeleton, paired, cores, initial, signs) + need(replay(skeleton, paired, cores, output, signs, True)[0] == initial, 'The inverse of every literal event restores the input') + differences = [[i, str(v-initial[i])] for i, v in enumerate(output) if v != initial[i]] + expected_variant = expected['variants'][int(signs)] + need(digest(differences) == expected_variant['defect_sha256'] and + len(differences) == expected_variant['nonzero_defect_families'], 'The complete independently reproduced defect vector') + need(output[112] == Fraction(-1, 4) and differences[0] == [112, '-1/4'], 'The exact first wrong output') + need(any(x == {'position': 1, 'kind': 'local_cover_sweep', 'family': 112, + 'before': '0', 'after': '-1/4'} for x in traces), 'The first actual damaging owner-to-data edge') + results.append({'assignment': name, 'mode_signs': signs, 'defect_sha256': digest(differences), + 'defect_families': len(differences), 'first_defect': differences[0], + 'trace': traces, 'inverse': 'PASS', 'counts': counts}) + print(name, signs, differences[0], len(differences), flush=True) + receipt = {'status': 'PASS_INDEPENDENT_PRODUCTIVE_OWNER_DRIFT_AND_ALIAS_REPAIR', 'pins': PINS, + 'repair': repair, 'variants': results, 'producer_imports': [], + 'literal_core_replay': True, 'raw_core_formula_used': False, + 'deep_owner_patch_audit_repeated': False, 'new_native_kernel_sweep': False, + 'scope': 'Two fixed old-owner assignments and two sign conventions fail on one exact constant-sector input. The same-call alias repair preserves all whole jobs conditionally on the retained slot-specific native contracts. No arbitrary-owner-controller obstruction or supplier admission.', + 'checker_sha256': sha256(Path(__file__).read_bytes()).hexdigest()} + (HERE/'REVIEW.json').write_text(json.dumps(receipt, indent=2, sort_keys=True)+'\n') + print(receipt['status']) + + +if __name__ == '__main__': + main() diff --git a/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/screen_first_owner.py b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/screen_first_owner.py new file mode 100644 index 0000000000..d86c53c911 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/circuit-interface/productive-owner-review/screen_first_owner.py @@ -0,0 +1,119 @@ +"""Test every legal single exchange at the first promoted role.""" + +from copy import deepcopy +from hashlib import sha256 +from pathlib import Path +import importlib.util +import json + + +HERE = Path(__file__).resolve().parent +PRIME = 65537 + + +def need(ok, reason): + if not ok: + raise ValueError(reason) + + +def modular_word(skeleton, rows, columns, family, signs): + values = [0]*14336 + values[family] = 1 + inv8 = pow(8, -1, PRIME) + for event in skeleton['execution_schedule']: + kind = event['kind'] + if kind == 'paired_input_boundary': + pair = [skeleton['calls'][t] for t in event['times']] + backward = pair[0]['orientation'] == 'backward' + source = [[values[f] for f in call['data_families'][112:224]] + if backward else [values[f] for f in call['data_families'][:112]] for call in pair] + z = [[values[f] for f in call['mode_families']] for call in pair] + query = [[sum(c*source[j][p] for p, c in row) % PRIME for row in rows] for j in range(2)] + next_modes = [[(-z[j][k]-(query[j][k]-query[1-j][k])*(inv8 if backward else 1)) % PRIME + for k in range(8)] for j in range(2)] + h = [(z[0][k]+z[1][k]) % PRIME for k in range(8)] + for j, call in enumerate(pair): + targets = call['data_families'][:112] if backward else call['data_families'][112:224] + for p, target in enumerate(targets): + kh = sum(c*h[k] for k, c in columns[p]) + delta = -source[j][p]-8*kh if backward else source[j][p]-kh + values[target] = (values[target]+delta) % PRIME + for k, target in enumerate(call['mode_families']): + values[target] = (-next_modes[j][k] if signs else next_modes[j][k]) % PRIME + elif kind == 'bridge': + base, dst, src, c = 896*event['replica'], event['dst'], event['src'], event['coefficient'] + for p in range(112): + values[base+224*dst+p] = (values[base+224*dst+p]+c*values[base+224*src+p]) % PRIME + values[base+224*src+112+p] = (values[base+224*src+112+p]-c*values[base+224*dst+112+p]) % PRIME + elif kind == 'terminal': + for pair in range(4): + base = 896*event['replica']+224*pair + for p in range(112): + values[base+p], values[base+112+p] = values[base+112+p], -values[base+p] % PRIME + return values + + +def main(): + helper = HERE/'review_drift.py' + spec = importlib.util.spec_from_file_location('independent_drift_review', helper) + review = importlib.util.module_from_spec(spec) + spec.loader.exec_module(review) + data = review.load() + review.check_repair(data) + need(all(PRIME % p for p in range(2, 257)), 'The fixed odd modulus is prime') + interface_path = review.LANES/'circuit-interface/INTERFACE.json' + need(sha256(interface_path.read_bytes()).hexdigest() == '5c6c51fbffc07a683e922f17532fd90262ae9e23cc3560a696002073dd234ef3', 'The actual coefficient matrix') + interface = json.loads(interface_path.read_text()) + rows = [[(int(p), int(c)) for p, c in row.items()] for row in interface['R']] + columns = [[(k, dict(row)[p]*pow(4, -1, PRIME) % PRIME) for k, row in enumerate(rows) if p in dict(row)] for p in range(112)] + skeleton = data['source-domain/productive-owner-drift/REPAIRED-SKELETON.json.gz'] + canonical = data['canonical'] + a, b = skeleton['calls'][:2] + donors = [r for r in range(224, 704) if r not in review.MODES + and len(canonical['frames'][canonical['final'][r]])-len(canonical['frames'][canonical['start'][r]]) == 9 + and a['owner_families'][r] not in b['owner_families']] + need(len(donors) == 202, 'All legal same-call width-nine donors') + paired = data['residual-syndrome/physical-algebra/ORIGINAL-PAIRED-GAP-PROGRAMS.json.gz'] + core = data['history-encoding/FULL-MODE-PROGRAMS.json.gz'] + cores = {(o, rev): review.scalar_core(core[o], rev) for o in ('forward', 'backward') for rev in (False, True)} + for signs in (False, True): + initial = [review.Fraction(0)]*14336 + initial[13005] = review.Fraction(1) + exact = review.replay(skeleton, paired, cores, initial, signs)[0] + modular = modular_word(skeleton, rows, columns, 13005, signs) + need(modular == [x.numerator*pow(x.denominator, -1, PRIME) % PRIME for x in exact], + 'The endpoint algorithm agrees with the independent literal word') + witnesses = [] + for donor in donors: + candidate = deepcopy(skeleton) + call = candidate['calls'][0] + for key, offset in (('owner_families', 0), ('helper_source_roles', 224)): + first, second = 225-offset, donor-offset + call[key][first], call[key][second] = call[key][second], call[key][first] + call['mode_families'] = [call['owner_families'][r] for r in review.MODES] + family = call['owner_families'][225] + need(set(call['owner_families']) == set(a['owner_families']) and + sorted(call['helper_source_roles']) == sorted(a['helper_source_roles']) and + not set(call['mode_families']) & set(b['owner_families']), 'The candidate preserves the legal same-call job contract') + variants = [] + for signs in (False, True): + output = modular_word(candidate, rows, columns, family, signs) + differences = [(i, (value-(i == family)) % PRIME) for i, value in enumerate(output) + if value != (i == family)] + need(differences, 'Every candidate has a certified nonzero defect for its new owner input') + variants.append({'signs': signs, 'first_defect_mod_prime': differences[0], + 'nonzero_defect_families_mod_prime': len(differences)}) + witnesses.append({'donor_role': donor, 'new_mode_family': family, 'variants': variants}) + receipt = {'status': 'PASS_ALL_SINGLE_FIRST_MODE_EXCHANGES_HAVE_EXPLICIT_DEFECTS', + 'repaired_skeleton_payload_sha256': review.PINS['source-domain/productive-owner-drift/REPAIRED-SKELETON.json.gz'], + 'review_checker_sha256': sha256(helper.read_bytes()).hexdigest(), + 'prime': PRIME, 'call': 0, 'mode_role': 225, 'tested_donors': len(donors), + 'variants_per_donor': 2, 'witnesses': witnesses, + 'scope': 'All single same-call width-nine exchanges at mode role225 of call0, with all other repaired assignments and graphs fixed. Nonzero reduction modulo an odd prime certifies an exact dyadic defect. This does not exclude several coordinated exchanges, changed graph shears, or another controller.', + 'checker_sha256': sha256(Path(__file__).read_bytes()).hexdigest()} + (HERE/'FIRST-OWNER-EXCHANGES.json').write_text(json.dumps(receipt, indent=2, sort_keys=True)+'\n') + print(receipt['status'], len(witnesses)) + + +if __name__ == '__main__': + main() diff --git a/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md new file mode 100644 index 0000000000..fe63433f9d --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md @@ -0,0 +1,184 @@ +# Original complex paired phase graphs + +This review checks a local construction in the original complex native +frames. It does not use the Walsh change of frame. Two copies of the +reviewed full-mode core have identical port labels and native axes. +Their ordinary helper inputs and their sixteen mode inputs are arbitrary. +Their active data and mode roles must be separate during the paired call. +An ordinary helper owner may be reused only through complete restored +jobs, with the correct consecutive native frames and no intervening +scalar use. Admission of such reuse is part of the owner schedule; the +local wrapper check does not supply it. + +The reviewed payload is +`../residual-syndrome/physical-algebra/ORIGINAL-PAIRED-GAP-PROGRAMS.json.gz`, +with decompressed SHA256 +`42aeb0902d8b2330f9050718c6d949993111a9fd898acad599ec867bb63a2b20`. +It retains two copies of the full-mode payload +`f271842a741584389e166e700e262f161b0dd570ce8c7a540f2717e90ead5205`. +This review uses the prior exact core contract. It does not repeat the +complete native-event or 1408-column replay of that producer. + +## The fixed pair at every tensor size + +At port p let Q_p be the tensor power of the inherited C_p. Put + +```text +L_p = Q_p^2, +A_p = [[0,I],[L_p,0]], +T_p = Q_p A_p = [[0,Q_p],[Q_p^-1,0]]. +``` + +The exact inherited line identity is C_p squared equals the translation +X_p, with no scalar phase. Thus L_p translates every tensor coordinate by +p. It is an involution. It follows that T_p squared is I. This uses two +replicas for every tensor size. It is not a tensor power of a two-replica +map. All powers of the common full transform commute with these line +transforms and translations. + +Extend R and K by the identity on the replica index, and set K=R^T/4. +A acts on the port fields. No action of A on eight mode fields is defined +or used. In particular, this proof does not exchange R A with A R or +A K with K A. + +## The four physical boundary graphs + +The input frames of (x,y,u) are (Q,I,I). Their output frames are +(F,F Q^-1,F). A physical ADD between different frame types is interpreted +in this order; it is not treated as a scalar ADD on logical contents. + +For the forward word, use the following physical graphs in order: + +```text +u -= R A X; run both full-mode cores; +u += R X; Y += A K u. +``` + +The first graph gives u=z-R T x. The raw core gives + +```text +x'=x, y1=y+(I-KR)x-Ku, u1=-u-2Rx. +``` + +The last two graphs therefore give + +```text +v=-z-Gx, y'=y+x+Hv, x'=x, +G=R(I-T), H=(I+T)K. +``` + +For the backward word, use these physical graphs in order: + +```text +X -= 8 Q^2 A K u; u -= R Y/8; +run both full-mode cores; +u += R Q^2 A Y/8. +``` + +The first graph reads the old mode z, before the second graph changes it. +Their logical effects are x-=8 T K z and u=z-Ry/8. The raw backward map is + +```text +x1=x-(I+KR)y-8Ku, y1=y, u1=-u-Ry/4. +``` + +The output graph uses Q squared A Q inverse equals T. The result is + +```text +x'=x-y-8Hz, y'=y, v=-z-Gy/8. +``` + +These substitutions use only T squared equals I for the later feedback +statement. The local endpoint derivation does not need a scalar formula +for RK. It is valid when source, target and mode values are correlated. + +The literal graph expansions are as follows. Each R and K acts after the +displayed translation on a port, in the indicated replica. + +| Graph | Replica 0 | Replica 1 | +| --- | --- | --- | +| F input mode | u0 -= R X1 | u1 -= R L X0 | +| F output mode | u0 += R X0 | u1 += R X1 | +| F output target | Y0 += K u1 | Y1 += L K u0 | +| B input target | X0 -= 8 L K u1 | X1 -= 8 K u0 | +| B input mode | u0 -= R Y0/8 | u1 -= R Y1/8 | +| B output mode | u0 += R L Y1/8 | u1 += R Y0/8 | + +Translate each relevant source or target array, perform its ADD group, +then translate that same array again. Thus each orientation has 448 +literal translation maps and 2688 added scalar ADDs. It has no added +native child. The scalar subtotals are 433924 for the forward pair and +442884 for the backward pair. They exclude execution of the translation +maps, the retained native wrappers, and a global owner schedule. Each +pair retains native rank 11044 and restores 944 ordinary helper inputs, +subject to the pinned core contract. + +## Exact port routes and phases + +Use full-cover fields. At owner d, Q_p is C_(d p) tensored the required +number of times. An actual port route has the form + +```text +M_(g,a) f(d,z) = f(dg,z+d a), g p=p. +``` + +The owner-dependent translation by d p commutes with this route: the +source translation is d g p=d p, and address translations commute. +Since C_(d p) is a fixed linear combination of I and that translation, +the same statement holds for Q_p, at every tensor size, with no extra +phase. It follows for A and T. This argument includes the exact inherited +entry and exit translations a. It does not replace the cover route by +an address permutation at one fixed owner. + +The checker reconstructs all 1008 actual routes from the pinned retained +geometry and binds their labels and translations to the original complex +DATA-PHASES ledger. It checks each route's inverse and fixed port line. +It also checks the inherited positive line kernel on all 57344 spatial +columns, then checks its square, fourth power, and inverse. A global-phase +change and omission of the required L factor are rejected. + +For the routed maps + +```text +G_s=R D_s(I-T), H_t=(I+T)D_t^-1 K, +``` + +G_s H_t is zero for every pair of stages. The cancellation occurs before +R or K and does not require equal routed centre images. Any ordinary +bank operation which is identical in both replicas and commutes with T +can be inserted between these maps. The actual per-port scalar bank +shears have this property. A gate that mixes distinct ports needs its +own check and is not covered by this statement. + +## Verification boundary + +The independent checker imports no producer code. It checks the literal +boundary event order, coefficients and frame records, a free ordered +operator calculation for both endpoint maps, the exact line kernels, +the route covariance, and the stated component counts. It uses the +existing full-mode core as a pinned dependency. + +The earlier complementary-gap proof used a Walsh retarget and a scalar +replica normalization. The earlier original-complex phase-gap word had +the residual R(I-Q squared)K. This construction replaces that residual +with zero by a port-dependent monomial replica normalization in the +original frames. It does not prove that a final odd H or G read is free. +In particular, the old mode transport identities of the form Q H equals +H A inverse and G Q equals minus A inverse G used a common mode action A. +They do not follow for the present port-dependent A and are not used. + +To insert the graphs around an unchanged global core, let E be its +monomial input view from global fields to local input fields, and let O +be its output view from local output fields to global fields. The added +graphs are E inverse P E before that core and O S O inverse after it. +This keeps the original core views unchanged. It adds explicit view +maps, which require a separate count. It also requires the stated mode +views at their actual physical locations. The local (I,F) mode contract +alone does not supply a persistent nine-call mode path. + +The physical paired-owner schedule, promoted-role replacement, arbitrary +mode closure, recursive admission, precision, and complete supplier +invoice remain separate. No kappa improvement is claimed here. + +Research and verification: OpenAI Codex under the user's direction, with +substantial AI assistance. No independent human review is claimed. diff --git a/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.json b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.json new file mode 100644 index 0000000000..98775b5f68 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.json @@ -0,0 +1,28 @@ +{ + "dependencies_not_replayed": [ + "owner matching and37 exchanges", + "all native owner frame records", + "complete-helper windows and disjoint pending factors" + ], + "material_findings": [], + "not_claimed": [ + "fresh-mode N_s interface", + "productive owner restoration", + "global content closure", + "full scalar or map invoice", + "recursive supplier admission" + ], + "sources": { + "coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md": "1783100d3333c83828b47bb89f267db54b791f4c4fe952b5a62fbdb5087c902f", + "coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.md": "3a113ede36815a85f1d15201d682959b0aa40f3fbaa5ce423600d595b707bc15", + "source-domain/productive-owner-drift/PROOF.md": "50f1af3b6614fd0a687b0557ff7b00539cfc23743ef747b576fad75fe72fdcab", + "source-domain/productive-owner-drift/REPAIR.json": "847c35e0709f115f57543d3cb6f5fca1d30b58ace17807d3b5c61398b21ddd40" + }, + "status": "PASS_NARROW_PHYSICAL_VIEW_PROOF_REVIEW", + "verified_by_independent_reasoning": [ + "ordered old-owner logical map D_out^-1 B D_in for the unchanged physical word", + "same Delta at local entry and exit because all native convolution and translation factors commute with F_L", + "arbitrary and correlated inputs remain admissible", + "ordinary complete-helper jobs can compose at their declared consecutive frames" + ] +} diff --git a/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.md b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.md new file mode 100644 index 0000000000..ac84bdbf94 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.md @@ -0,0 +1,98 @@ +# Review of productive-owner physical views + +Status: PASS for the interpretation of the physical maps below. + +This note reviews the inherited-frame paragraph and the complete-job +argument in `../source-domain/productive-owner-drift/PROOF.md`. It does +not repeat the allocation or owner-history replay. The source hashes are +in the accompanying JSON file. + +## A changed logical coefficient does not require a conversion + +Work in one invocation's physical address chart. Let L be its nine local +axes, let F_L be its complete local native transform, and let P be the +common exterior frame used for an active Y array. After its actual +monomial helper entry view, an old width-nine owner has frame + +```text +O=X_delta product_{j in W} C_(e_j), W disjoint from L. +``` + +The complete helper job advances this frame to O F_L. The fresh mode +interpretation instead uses P at entry and P F_L at exit. Define + +```text +Delta=P^-1 O. +``` + +The nonmonomial factors of P and O act outside L. Their translations +also commute with F_L, since the native C factors are convolution +operators. Thus Delta commutes with F_L. The same physical mode input +has fresh logical value z=Delta h when its old-owner +logical value is h. The fresh and old output values have the same +relation. For several promoted owners, Delta is a diagonal block map +whose blocks can differ. It need not be monomial or common to the eight +centre indices. + +Let B be the complete reviewed local content map in the fresh mode +interpretation. Let D_in and D_out be identity on data and ordinary +helpers and Delta on each promoted mode. Then the literal physical +program has the old-owner content map + +```text +B_old=D_out^-1 B D_in. +``` + +In this local chart D_in and D_out have the same mode blocks. The order +in this equation is essential. No map Delta or Delta^-1 is executed. +The equation states what the existing physical program computes on a +different choice of logical variables. + +For example, a fresh forward map + +```text +v=-z-Gx, y'=y+x+Hv +``` + +becomes + +```text +h'=-h-Delta^-1 Gx, +y'=y+x+H Delta h'. +``` + +An exterior-frame discrepancy therefore changes the query and response +coefficients. It does not require a normalization child unless the +construction also requires the old fresh-mode coefficients or endpoint. +The full physical scalar graphs remain the same operations on arrays +with the same address domain. A frame label does not change their +elementwise meaning. The changed content must be tracked explicitly. + +## Complete jobs and shared helpers + +The reviewed full-mode core is valid on arbitrary mode and helper +values, including correlated values. A change of variables by Delta +therefore does not restrict its input domain. Keep the actual owner +entry and output views and the destination role's complete-job wrappers. +Do not replace an internal fragment by its endpoint map. + +The repaired allocation states that each promoted owner avoids every +role in the other core. Under that premise, the paired prefix and suffix +cannot be overwritten by the other core. A shared ordinary helper owner +is permitted when both appearances are complete helper jobs on the +declared disjoint pending factors, at the checked consecutive frames. +The first job restores its arbitrary logical content and advances only +its assigned factor. The second job can then act on that arbitrary +content at its required frame. This reasoning permits correlations; it +does not require independent helper inputs. + +## Review boundary + +The physical-view interpretation passes this proof review. The owner +matching, all phase records, the 37 exchanges, and the complete-helper +window conditions remain pinned dependencies. This review does not +repeat those checks. It does not show that productive owner drift is +restored before a later data or mode use. It does not identify Delta with +the earlier fresh-mode gauge N_s, prove a global controller, or give a +complete cost. All explicit monomial entry and output views still need +their scalar and address-map invoice. diff --git a/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/encoded-controller/PRODUCTIVE-OWNER-DRIFT.md b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/encoded-controller/PRODUCTIVE-OWNER-DRIFT.md new file mode 100644 index 0000000000..f6c8333480 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/encoded-controller/PRODUCTIVE-OWNER-DRIFT.md @@ -0,0 +1,97 @@ +# A check of the unchanged productive-owner word + +The original paired graphs do not restore the old productive inputs +when their mode roles use the unchanged 280-slot owner assignment. +An exact unit input in family 13005 gives output -1/4 in family 112. +The required output there is zero. The result also holds if every +promoted mode occurrence is negated after each paired suffix. + +This rejects these two complete scalar words. It does not reject a +changed owner assignment, a new controller, or a paid correction. +The source inventory also has unresolved cross-core native aliases. +The calculation does not admit those aliases. + +## Exact sector and event order + +Use arrays that are constant on the native payload and on the cover. +Every native line, complete child transform, address permutation and +translation fixes this sector. Thus the actual source inventory gives +a finite rational scalar word on all 14336 productive families. +No family is treated as a clean mode or as an additional input. + +The checker pins the source-domain skeleton. It has 144 calls and 626 +paired event positions. Each call has 704 distinct owners. Across the +two cores there are 36 promoted-mode incidences, including family 991 +used as a mode by both cores at times 64 and 65. + +The checker executes the emitted paired prefix gates, the first raw +core, the second raw core, and the emitted paired suffix gates in that +order. It maps every local role to the actual old owner. It does not +replace an aliased pair by the endpoint formula for sixteen independent +modes. A mode negation, when enabled, occurs once per local mode role. +Therefore a shared role receives both literal negations. + +At each raw core, its separately checked content map is + +```text +F: x'=x, y'=y+(I-KR)x-Kz, z'=-z-2Rx; +B: y'=y, x'=x-(I+KR)y-8Kz, z'=-z-Ry/4. +``` + +Here `K=R^T/4` is the pinned actual coefficient matrix. The other +ordinary helper values are unchanged in this sector. Each raw core +receives the current values after all earlier operations. + +## A unit-input witness + +Set family 13005 to one and every other productive family to zero. +Family 13005 is the first mode of call zero. The main path is + +| Position | Operation | Change | +| --- | --- | --- | +| 1 | First raw F0 core | Family 112 becomes -1/4; owner 13005 becomes -1 | +| 3 | Paired suffix | Counterpart family 7280 becomes -1/4 | +| 9 | Raw B1 core | Family 0 becomes 1/4 | +| 29 | Raw F2 core | Family 112 returns to zero | +| 324 | Replica-zero terminal | Family 112 becomes -1/4 from family 0 | + +Family 0 has no further change between positions 9 and 324. Family 112 +has no further change after position 324. The counterpart output gets +the same defect at position 333. + +Owner 13005 has no other promoted occurrence. Its first later active +data use is at time 117, stage five, replica fourteen, X port thirteen +of pair two. That event is at position 460, after the defective output +has closed. Its next active use is time 127. A sign flip at position +three restores this old owner's value to one, but does not change the +early data path in the table. + +The original-sign word changes 177 output families on this input. The +post-suffix-sign word changes 176. Both have the same first output +defect, family 112 with value -1/4. The JSON receipt gives hashes of the +complete exact defect vectors and the selected event traces. + +## Controls and scope + +The checker reverses every scalar graph, raw core and bridge in the +complete aliased word. Both variants restore the witness input exactly. +Thus the observed failure is an output-restoration defect of a +reversible word. It is not caused by a noninvertible update. + +An independent eight-by-eight bank replay for every replica replaces +the raw core by the ordinary signed shear and removes the paired +graphs. All 128 independent bank columns return to their inputs. Since +those operations do not mix port coordinates, this checks the ordinary +event order on all 14336 productive coordinates. + +Run `python3 -I -O -B check_productive_owner_drift.py` from this directory. +The expected status is `PASS_EXACT_PRODUCTIVE_OWNER_DRIFT_COUNTEREXAMPLE`. +The proof uses one explicit admissible input, which suffices to refute +the claimed identity for this fixed word. It does not test every input +or establish a limit for every productive-owner controller. + +The surviving path identifies a concrete obligation for a changed +construction: remove the first mode owner's contribution before the +first replica's terminal, or change how that contribution is stored and +used. The much later data use of that owner cannot repair this path in +the unchanged scalar schedule. diff --git a/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/encoded-controller/REPAIRED-OWNER-DRIFT.md b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/encoded-controller/REPAIRED-OWNER-DRIFT.md new file mode 100644 index 0000000000..5f3660afe6 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/encoded-controller/REPAIRED-OWNER-DRIFT.md @@ -0,0 +1,31 @@ +# The repaired productive-owner word + +The repair removes all cross-core promoted-mode incidences. It does not +restore the intended output map. A constant unit input in productive +family 13005 still gives -1/4 in output family 112, whose required value +is zero. The result holds with the original mode signs and with a mode +negation after every paired suffix. + +The pinned repair exchanges 37 pairs of roles in 14 calls. It keeps all +704-owner sets and the complete event order. The first pair and the +early path from family 13005 are unchanged. The checker does not infer +the result from that path alone: it executes the complete changed word +on all 14336 productive coordinates with exact rational arithmetic. + +The checker also uses a second replay. The repaired mode roles are +disjoint from every owner in the other core. Thus each pair has the +separately proved endpoint map, with `T` equal to replica exchange in +the constant sector. This second replay uses those endpoint formulas +instead of the literal scalar prefix, two raw cores, and suffix. Both +methods give the same complete output vector. The full literal inverse +restores the input in both sign variants. An ordinary bank control +returns every independent bank column to its input. + +Run `python3 -I -O -B check_repaired_owner_drift.py`. The expected status +is `PASS_REPAIRED_OWNER_COUNTEREXAMPLE`. The receipt contains both exact +defect hashes and the selected event traces. + +This result rejects two fixed content words on the repaired assignment. +It does not reject a changed owner controller, a paid correction, or a +new use of the owner inputs. It does not replace the separate native +frame and helper-job admission checks. diff --git a/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/source-domain/productive-owner-drift/PROOF.md b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/source-domain/productive-owner-drift/PROOF.md new file mode 100644 index 0000000000..62bc16cf51 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/source-domain/productive-owner-drift/PROOF.md @@ -0,0 +1,129 @@ +# Old productive owners at the paired mode ports + +The selected allocation can remove all cross-core mode aliases with 37 +exchanges of complete width-nine jobs. Each exchange stays within one call. +It changes 74 local role assignments in 14 calls. It does not change a job's +time, physical owner, pending axes, or address route. The global content +map still needs a proof. In particular, this result does not show that the +changed old owners return their required outputs. + +## Exact source and event scope + +`extract.py` reads the pinned selected 1094 archive and the accepted +280-role paired owner patch. It emits `SKELETON.json.gz`. The decompressed +SHA-256 is +`653b5f47d14d88cab23420796597e860a8bab73e86aa31fd471c3843c079e6d0`. +The file has all 144 calls, all 704 owner roles in each call, and the exact +626-position paired schedule. It retains the old 14,336 productive families +and all 490 private families. + +The eight mode roles in each call are +`[225,226,229,232,241,242,257,258]`. Before the new repair, 11 pairs have +36 cross-core incidences. These are 15 first-mode/second-helper incidences, +20 second-mode/first-helper incidences, and one shared mode owner. The last +case is family 991 in calls 64 and 65. Both appearances must change if each +mode is to avoid every role in the other core. Thus there are 37 bad mode +positions. + +The first skeleton is a literal input for a scalar-sector check. The check +must use the paired prefix, the first raw core, the second raw core, and +the paired suffix in that order. It must not replace these events with a +formula that assumes 16 distinct mode owners. Native operators and cover +permutations fix a constant array, so a negative exact vector in this +sector rejects the full proposed content word. A successful sector check +would not prove native access. + +## Inherited frames + +`frames.py` reads the original `DATA-PHASES.json` member and replays the +complete native owner history under the old paired patch. It checks all +69,120 complete helper jobs, 7,526 idle suffixes, 35,840 complete idle phase +slots, 32,256 bridge frame pairs, and 1,008 original Y-entry phase maps. +The decompressed `FRAMES.json.gz` SHA-256 is +`05fea8db6582bab35fe457bb333f0e7b3c6bd35c48c668ecea59457e2b6d50f7`. + +For a physical owner with port label q, use its pinned orthonormal basis +B=(q,b1,...,b8,e9,...,e72). Its exact frame is + + X_delta product_{i in W} C_(B[i]). + +The code retains both the axis set W and the translation delta. It checks +phase equality as a polynomial over Z/4, including all quadratic terms. +Every operator has eigenvalue 1 on the zero Fourier character, so these +polynomials do not omit a scalar phase. + +For a width-nine helper job, sigma has the nine pending B axes first and +the remaining B axes after them. The owner class is g=d sigma^-1. Thus its +frame in invocation coordinates is + + X_(sigma^-1 delta) product_{j in sigma^-1 W} C_(e_j). + +The pending nine axes are absent from W. The inherited frame is therefore +outside the nine local axes. The exact active Y input at stage s has the +coordinate Fourier frame on axes 9 through 8s+8, after the original entry +translation. The code checks this last assertion directly against every +serialized original phase map. + +The relative native rank is the size of the symmetric difference of these +two coordinate axis sets. It is zero for 40 of the 1,152 occurrences. +The translation also vanishes in 34 cases. The largest relative rank is +49. This is a statement about the logical interpretation of the old owner. +It is not a mandatory added circuit cost: the physical paired graphs can +use the inherited owner arrays, with this relative operator included in +the resulting content map. A conversion cost arises if a construction +requires the fresh-mode logical interface instead. + +The table has 973 distinct promoted owners. Of the 1,152 occurrences, +493 have a later active data use and 179 have a later promoted use. Each +record gives its next active role and its complete later native, +bridge, and terminal event list. These are baseline paths. They do not +assert that a modified owner content is harmless at those later uses. + +## A repair within the same complete calls + +Each of the 37 bad mode positions has an ordinary width-nine role in the +same call whose owner is absent from the other core. `repair.py` constructs +and checks a matching to distinct such roles. It exchanges the two +complete job descriptors, including the physical owner and its route. +The resulting `REPAIRED-SKELETON.json.gz` has decompressed SHA-256 +`fc9b441fbb8c41aaa9ed41df3cb4ec853008affededadf328dc0185bb4614e00`. +`REPAIR.json` gives all candidate sets, matchings, and exchanges. + +Every width-nine role has canonical input frame I and output frame FULL. +The exact whole-job wrappers must remain those for the destination local +role. The source owner descriptor supplies the same physical pending +nine-axis job as before. This uses the already reviewed complete-helper +contract; it does not replace a partial internal program by its endpoint. + +The complete job multiset in each call is unchanged. Therefore every old +strict owner window remains valid. Each call has the same 704 distinct +owners, and both active data sets are unchanged. All 16 promoted owners +in a pair are now distinct and avoid every role in the other core. The +1,369 owners shared between the two cores have ordinary helper roles on +both sides. Their complete native jobs use the same disjoint pending +slices as the accepted paired schedule. Their arbitrary contents can be +correlated; the complete helper contract preserves these contents. + +Within this fixed-call owner class, at least 74 positions must change. +Each of the 37 bad owners must leave a mode position. All of them must +enter ordinary positions, since their owner also occurs in the other +core. At least 37 ordinary positions must supply replacement owners. +The 37 disjoint exchanges attain this count. This is not a minimum over +different call orders or owner stocks. + +There is no added native child, private family, or productive family in +this repair. If all 144 centre-free FULL-MODE calls are used, their native +profile is the selected profile with 1,152 rank-eight centre children +removed. The resulting mass is 1,032,192. This is a conditional circuit +profile, not a Fourier supplier: the old productive owners now carry mode +drift. The paired physical graphs and their explicit entry/exit views also +need their full scalar and address costs. + +## Validation limit + +The three producer checks ran with `python3 -I -O -B`. They check the +source pins and the exact records stated above. Independent review of this +new packet is pending. The accepted 280-role window repair and the accepted +raw FULL-MODE and paired graph contracts remain separate dependencies. +No full data restoration, endpoint decoder, recursive admission, finite +invoice, or kappa improvement is claimed here. diff --git a/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/source-domain/productive-owner-drift/REPAIR.json b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/source-domain/productive-owner-drift/REPAIR.json new file mode 100644 index 0000000000..bc557c56dd --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/source-domain/productive-owner-drift/REPAIR.json @@ -0,0 +1,3539 @@ +{ + "archive_sha256": "f1da80610bf33c58527f18ad63b4350d0b864e1d4486141ee17ac9bed4d529d6", + "canonical_word_sha256": "16bc0ebb04b4be6c0ade74badc6a0c0cdba4215eda86e4ff9f13abf8ecebd219", + "changed_calls": 14, + "changed_slots": 74, + "conditional_native_interface": "Every width-nine role has I-to-FULL endpoints. Keep the exact slot-specific whole-job wrappers when changing its owner route. The selected whole-job and FULL-MODE interface reviews remain premises.", + "exchanges": [ + { + "mode_job": 9153, + "new_mode_owner": 2551, + "old_mode_owner": 2518, + "ordinary_job": 9123, + "ordinary_role": 227, + "promoted_role": 257, + "time": 19 + }, + { + "mode_job": 9154, + "new_mode_owner": 2554, + "old_mode_owner": 2517, + "ordinary_job": 9120, + "ordinary_role": 224, + "promoted_role": 258, + "time": 19 + }, + { + "mode_job": 10561, + "new_mode_owner": 4459, + "old_mode_owner": 13325, + "ordinary_job": 10569, + "ordinary_role": 233, + "promoted_role": 225, + "time": 22 + }, + { + "mode_job": 10562, + "new_mode_owner": 4461, + "old_mode_owner": 13324, + "ordinary_job": 10567, + "ordinary_role": 231, + "promoted_role": 226, + "time": 22 + }, + { + "mode_job": 10565, + "new_mode_owner": 7040, + "old_mode_owner": 13320, + "ordinary_job": 10560, + "ordinary_role": 224, + "promoted_role": 229, + "time": 22 + }, + { + "mode_job": 11041, + "new_mode_owner": 8700, + "old_mode_owner": 8846, + "ordinary_job": 11068, + "ordinary_role": 252, + "promoted_role": 225, + "time": 23 + }, + { + "mode_job": 11042, + "new_mode_owner": 9452, + "old_mode_owner": 8845, + "ordinary_job": 11067, + "ordinary_role": 251, + "promoted_role": 226, + "time": 23 + }, + { + "mode_job": 11045, + "new_mode_owner": 9453, + "old_mode_owner": 8842, + "ordinary_job": 11066, + "ordinary_role": 250, + "promoted_role": 229, + "time": 23 + }, + { + "mode_job": 11048, + "new_mode_owner": 9454, + "old_mode_owner": 8839, + "ordinary_job": 11065, + "ordinary_role": 249, + "promoted_role": 232, + "time": 23 + }, + { + "mode_job": 11057, + "new_mode_owner": 9455, + "old_mode_owner": 8818, + "ordinary_job": 11064, + "ordinary_role": 248, + "promoted_role": 241, + "time": 23 + }, + { + "mode_job": 11058, + "new_mode_owner": 9456, + "old_mode_owner": 8817, + "ordinary_job": 11063, + "ordinary_role": 247, + "promoted_role": 242, + "time": 23 + }, + { + "mode_job": 12005, + "new_mode_owner": 13327, + "old_mode_owner": 13318, + "ordinary_job": 12000, + "ordinary_role": 224, + "promoted_role": 229, + "time": 25 + }, + { + "mode_job": 16322, + "new_mode_owner": 1034, + "old_mode_owner": 177, + "ordinary_job": 16320, + "ordinary_role": 224, + "promoted_role": 226, + "time": 34 + }, + { + "mode_job": 30721, + "new_mode_owner": 218, + "old_mode_owner": 991, + "ordinary_job": 30730, + "ordinary_role": 234, + "promoted_role": 225, + "time": 64 + }, + { + "mode_job": 30722, + "new_mode_owner": 219, + "old_mode_owner": 990, + "ordinary_job": 30729, + "ordinary_role": 233, + "promoted_role": 226, + "time": 64 + }, + { + "mode_job": 30725, + "new_mode_owner": 221, + "old_mode_owner": 223, + "ordinary_job": 30727, + "ordinary_role": 231, + "promoted_role": 229, + "time": 64 + }, + { + "mode_job": 31217, + "new_mode_owner": 1037, + "old_mode_owner": 992, + "ordinary_job": 31203, + "ordinary_role": 227, + "promoted_role": 241, + "time": 65 + }, + { + "mode_job": 31218, + "new_mode_owner": 1063, + "old_mode_owner": 991, + "ordinary_job": 31200, + "ordinary_role": 224, + "promoted_role": 242, + "time": 65 + }, + { + "mode_job": 37925, + "new_mode_owner": 2229, + "old_mode_owner": 6156, + "ordinary_job": 37962, + "ordinary_role": 266, + "promoted_role": 229, + "time": 79 + }, + { + "mode_job": 37928, + "new_mode_owner": 2997, + "old_mode_owner": 6153, + "ordinary_job": 37961, + "ordinary_role": 265, + "promoted_role": 232, + "time": 79 + }, + { + "mode_job": 37937, + "new_mode_owner": 2998, + "old_mode_owner": 6144, + "ordinary_job": 37960, + "ordinary_role": 264, + "promoted_role": 241, + "time": 79 + }, + { + "mode_job": 37938, + "new_mode_owner": 2999, + "old_mode_owner": 6143, + "ordinary_job": 37959, + "ordinary_role": 263, + "promoted_role": 242, + "time": 79 + }, + { + "mode_job": 37953, + "new_mode_owner": 3000, + "old_mode_owner": 6128, + "ordinary_job": 37958, + "ordinary_role": 262, + "promoted_role": 257, + "time": 79 + }, + { + "mode_job": 37954, + "new_mode_owner": 10974, + "old_mode_owner": 6127, + "ordinary_job": 37920, + "ordinary_role": 224, + "promoted_role": 258, + "time": 79 + }, + { + "mode_job": 39873, + "new_mode_owner": 8982, + "old_mode_owner": 160, + "ordinary_job": 39843, + "ordinary_role": 227, + "promoted_role": 257, + "time": 83 + }, + { + "mode_job": 39874, + "new_mode_owner": 9183, + "old_mode_owner": 159, + "ordinary_job": 39840, + "ordinary_role": 224, + "promoted_role": 258, + "time": 83 + }, + { + "mode_job": 43217, + "new_mode_owner": 2009, + "old_mode_owner": 1995, + "ordinary_job": 43203, + "ordinary_role": 227, + "promoted_role": 241, + "time": 90 + }, + { + "mode_job": 43218, + "new_mode_owner": 6274, + "old_mode_owner": 1994, + "ordinary_job": 43200, + "ordinary_role": 224, + "promoted_role": 242, + "time": 90 + }, + { + "mode_job": 53778, + "new_mode_owner": 13313, + "old_mode_owner": 13299, + "ordinary_job": 53764, + "ordinary_role": 228, + "promoted_role": 242, + "time": 112 + }, + { + "mode_job": 53793, + "new_mode_owner": 13314, + "old_mode_owner": 13277, + "ordinary_job": 53763, + "ordinary_role": 227, + "promoted_role": 257, + "time": 112 + }, + { + "mode_job": 53794, + "new_mode_owner": 9183, + "old_mode_owner": 13276, + "ordinary_job": 53760, + "ordinary_role": 224, + "promoted_role": 258, + "time": 112 + }, + { + "mode_job": 55697, + "new_mode_owner": 10017, + "old_mode_owner": 2903, + "ordinary_job": 55683, + "ordinary_role": 227, + "promoted_role": 241, + "time": 116 + }, + { + "mode_job": 55698, + "new_mode_owner": 6403, + "old_mode_owner": 2902, + "ordinary_job": 55680, + "ordinary_role": 224, + "promoted_role": 242, + "time": 116 + }, + { + "mode_job": 65285, + "new_mode_owner": 13864, + "old_mode_owner": 13862, + "ordinary_job": 65283, + "ordinary_role": 227, + "promoted_role": 229, + "time": 136 + }, + { + "mode_job": 65288, + "new_mode_owner": 13456, + "old_mode_owner": 13859, + "ordinary_job": 65280, + "ordinary_role": 224, + "promoted_role": 232, + "time": 136 + }, + { + "mode_job": 65793, + "new_mode_owner": 13633, + "old_mode_owner": 6707, + "ordinary_job": 65763, + "ordinary_role": 227, + "promoted_role": 257, + "time": 137 + }, + { + "mode_job": 65794, + "new_mode_owner": 13660, + "old_mode_owner": 6706, + "ordinary_job": 65760, + "ordinary_role": 224, + "promoted_role": 258, + "time": 137 + } + ], + "matchings": [ + { + "admissible_ordinary_roles": [ + 224, + 227, + 228, + 230, + 231, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 268, + 269, + 270, + 271, + 272, + 274, + 276, + 278, + 279, + 280, + 281, + 283, + 284, + 285, + 286, + 287, + 288, + 290, + 292, + 294, + 295, + 296, + 297, + 299, + 300, + 301, + 302, + 303, + 304, + 306, + 308, + 310, + 312, + 313, + 315, + 316, + 317, + 318, + 319, + 320, + 322, + 324, + 326, + 328, + 329, + 331, + 332, + 333, + 334, + 335, + 336, + 338, + 340, + 342, + 343, + 344, + 345, + 347, + 348, + 349, + 350, + 351, + 352, + 354, + 356, + 358, + 359, + 360, + 361, + 363, + 364, + 365, + 366, + 367, + 368, + 370, + 372, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 386, + 388, + 390, + 391, + 392, + 393, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 464, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 478, + 479, + 480, + 481, + 482, + 483, + 490, + 491, + 492, + 493, + 494, + 495, + 499, + 502, + 503, + 504, + 505, + 507, + 511, + 514, + 515, + 516, + 517, + 519, + 530, + 542, + 546, + 547, + 548, + 549, + 558, + 560, + 568, + 570 + ], + "bad_mode_roles": [ + 257, + 258 + ], + "matching": [ + [ + 257, + 227 + ], + [ + 258, + 224 + ] + ], + "time": 19 + }, + { + "admissible_ordinary_roles": [ + 224, + 231, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 256, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 274, + 276, + 278, + 279, + 280, + 281, + 283, + 284, + 285, + 286, + 310, + 312, + 313, + 315, + 316, + 317, + 318, + 319, + 320, + 322, + 324, + 326, + 336, + 338, + 340, + 342, + 343, + 344, + 345, + 347, + 348, + 349, + 350, + 351, + 352, + 354, + 356, + 358, + 359, + 360, + 361, + 363, + 364, + 365, + 366, + 367, + 368, + 370, + 372, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 386, + 388, + 390, + 391, + 392, + 393, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 464, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 478, + 479, + 480, + 481, + 482, + 483, + 490, + 491, + 492, + 493, + 494, + 495, + 499, + 502, + 503, + 504, + 505, + 507, + 511, + 514, + 515, + 516, + 517, + 519, + 530, + 542, + 546, + 547, + 548, + 549, + 558, + 560, + 568, + 570 + ], + "bad_mode_roles": [ + 225, + 226, + 229 + ], + "matching": [ + [ + 225, + 233 + ], + [ + 226, + 231 + ], + [ + 229, + 224 + ] + ], + "time": 22 + }, + { + "admissible_ordinary_roles": [ + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 256, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 274, + 276, + 278, + 279, + 280, + 281, + 283, + 284, + 285, + 286, + 287, + 288, + 290, + 292, + 294, + 295, + 296, + 297, + 299, + 300, + 301, + 302, + 303, + 304, + 306, + 308, + 310, + 312, + 313, + 315, + 316, + 317, + 318, + 319, + 320, + 322, + 324, + 326, + 328, + 329, + 331, + 332, + 333, + 334, + 335, + 336, + 338, + 340, + 342, + 343, + 344, + 345, + 347, + 348, + 349, + 350, + 351, + 352, + 354, + 356, + 358, + 359, + 360, + 361, + 363, + 364, + 365, + 366, + 367, + 368, + 370, + 372, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 386, + 388, + 390, + 391, + 392, + 393, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 464, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 478, + 479, + 480, + 481, + 482, + 483, + 490, + 491, + 492, + 493, + 494, + 495, + 499, + 502, + 503, + 504, + 505, + 507, + 511, + 514, + 515, + 516, + 517, + 519, + 530, + 542, + 546, + 547, + 548, + 549, + 558, + 560, + 568, + 570 + ], + "bad_mode_roles": [ + 225, + 226, + 229, + 232, + 241, + 242 + ], + "matching": [ + [ + 225, + 252 + ], + [ + 226, + 251 + ], + [ + 229, + 250 + ], + [ + 232, + 249 + ], + [ + 241, + 248 + ], + [ + 242, + 247 + ] + ], + "time": 23 + }, + { + "admissible_ordinary_roles": [ + 224, + 227, + 228, + 230, + 231, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 256, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 274, + 276, + 278, + 279, + 280, + 281, + 283, + 284, + 285, + 286, + 287, + 288, + 290, + 292, + 294, + 295, + 296, + 297, + 299, + 300, + 301, + 302, + 303, + 304, + 306, + 308, + 310, + 312, + 313, + 315, + 316, + 317, + 318, + 319, + 320, + 322, + 324, + 326, + 328, + 329, + 331, + 332, + 333, + 334, + 335, + 336, + 338, + 340, + 342, + 343, + 344, + 345, + 347, + 348, + 349, + 350, + 351, + 358, + 359, + 360, + 361, + 363, + 364, + 365, + 366, + 367, + 368, + 370, + 372, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 386, + 388, + 390, + 391, + 392, + 393, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 464, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 478, + 479, + 480, + 481, + 482, + 483, + 490, + 491, + 492, + 493, + 494, + 495, + 499, + 502, + 503, + 504, + 505, + 507, + 511, + 514, + 515, + 516, + 517, + 519, + 530, + 542, + 546, + 547, + 548, + 549, + 558, + 560, + 568, + 570 + ], + "bad_mode_roles": [ + 229 + ], + "matching": [ + [ + 229, + 224 + ] + ], + "time": 25 + }, + { + "admissible_ordinary_roles": [ + 224, + 227, + 228, + 230, + 231, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 256, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 274, + 276, + 278, + 279, + 280, + 281, + 283, + 284, + 285, + 286, + 287, + 288, + 290, + 292, + 294, + 295, + 296, + 297, + 299, + 300, + 301, + 302, + 303, + 304, + 306, + 308, + 310, + 312, + 313, + 315, + 316, + 317, + 318, + 319, + 320, + 322, + 324, + 326, + 328, + 329, + 331, + 332, + 333, + 334, + 335, + 336, + 338, + 340, + 342, + 343, + 344, + 345, + 347, + 348, + 349, + 350, + 351, + 352, + 354, + 356, + 358, + 359, + 360, + 361, + 363, + 364, + 365, + 366, + 367, + 368, + 370, + 372, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 386, + 388, + 390, + 391, + 392, + 393, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 515, + 516, + 517, + 519, + 530, + 542, + 546, + 547, + 548, + 549, + 558, + 560, + 568, + 570 + ], + "bad_mode_roles": [ + 226 + ], + "matching": [ + [ + 226, + 224 + ] + ], + "time": 34 + }, + { + "admissible_ordinary_roles": [ + 231, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 256, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 274, + 276, + 278, + 279, + 280, + 281, + 283, + 284, + 285, + 286, + 287, + 288, + 290, + 292, + 294, + 295, + 296, + 297, + 299, + 300, + 301, + 302, + 303, + 304, + 306, + 308, + 310, + 312, + 313, + 315, + 316, + 317, + 318, + 319, + 320, + 322, + 324, + 326, + 328, + 329, + 331, + 332, + 333, + 334, + 335, + 336, + 338, + 340, + 342, + 343, + 344, + 345, + 347, + 348, + 349, + 350, + 351, + 352, + 354, + 356, + 358, + 359, + 360, + 361, + 363, + 364, + 365, + 366, + 367, + 368, + 370, + 372, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 386, + 388, + 390, + 391, + 392, + 393, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 464, + 505, + 507, + 511, + 514, + 515, + 516, + 517, + 519, + 530, + 542, + 546, + 547, + 548, + 549, + 558, + 560, + 568, + 570 + ], + "bad_mode_roles": [ + 225, + 226, + 229 + ], + "matching": [ + [ + 225, + 234 + ], + [ + 226, + 233 + ], + [ + 229, + 231 + ] + ], + "time": 64 + }, + { + "admissible_ordinary_roles": [ + 224, + 227, + 228, + 230, + 231, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 256, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 269, + 270, + 271, + 276, + 278, + 279, + 280, + 281, + 283, + 284, + 285, + 286, + 287, + 288, + 290, + 292, + 294, + 295, + 296, + 297, + 299, + 300, + 301, + 302, + 303, + 304, + 306, + 308, + 310, + 312, + 313, + 315, + 316, + 317, + 318, + 319, + 320, + 322, + 324, + 326, + 328, + 329, + 331, + 332, + 333, + 334, + 335, + 336, + 338, + 340, + 342, + 343, + 344, + 345, + 347, + 348, + 349, + 350, + 351, + 352, + 354, + 356, + 358, + 359, + 360, + 361, + 363, + 364, + 365, + 366, + 367, + 368, + 370, + 372, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 386, + 388, + 390, + 391, + 392, + 393, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 464, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 478, + 479, + 480, + 481, + 482, + 548, + 549, + 558, + 560, + 568, + 570 + ], + "bad_mode_roles": [ + 241, + 242 + ], + "matching": [ + [ + 241, + 227 + ], + [ + 242, + 224 + ] + ], + "time": 65 + }, + { + "admissible_ordinary_roles": [ + 224, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 274, + 276, + 278, + 279, + 280, + 281, + 283, + 284, + 285, + 286, + 287, + 288, + 290, + 292, + 294, + 295, + 296, + 297, + 299, + 300, + 301, + 302, + 303, + 304, + 306, + 308, + 310, + 312, + 313, + 315, + 316, + 317, + 318, + 319, + 320, + 322, + 324, + 326, + 328, + 329, + 331, + 332, + 333, + 334, + 335, + 336, + 338, + 340, + 342, + 343, + 344, + 345, + 347, + 348, + 349, + 350, + 351, + 352, + 354, + 356, + 358, + 359, + 360, + 361, + 363, + 364, + 365, + 366, + 367, + 368, + 370, + 372, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 386, + 388, + 390, + 391, + 392, + 393, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 464, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 478, + 479, + 480, + 481, + 482, + 483, + 490, + 491, + 492, + 493, + 494, + 495, + 499, + 502, + 503, + 504, + 505, + 507, + 511, + 514, + 515, + 516, + 517, + 519, + 530, + 542, + 546, + 547, + 548, + 549, + 558, + 560, + 568, + 570 + ], + "bad_mode_roles": [ + 229, + 232, + 241, + 242, + 257, + 258 + ], + "matching": [ + [ + 229, + 266 + ], + [ + 232, + 265 + ], + [ + 241, + 264 + ], + [ + 242, + 263 + ], + [ + 257, + 262 + ], + [ + 258, + 224 + ] + ], + "time": 79 + }, + { + "admissible_ordinary_roles": [ + 224, + 227, + 228, + 230, + 231, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 281, + 283, + 284, + 285, + 286, + 287, + 288, + 290, + 292, + 294, + 295, + 296, + 297, + 299, + 300, + 301, + 302, + 303, + 304, + 306, + 308, + 310, + 312, + 313, + 315, + 316, + 317, + 318, + 319, + 320, + 322, + 324, + 326, + 328, + 329, + 331, + 332, + 333, + 334, + 335, + 336, + 338, + 340, + 342, + 343, + 344, + 345, + 347, + 348, + 349, + 350, + 351, + 352, + 354, + 356, + 358, + 359, + 360, + 361, + 363, + 364, + 365, + 366, + 367, + 368, + 370, + 372, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 386, + 388, + 390, + 391, + 392, + 393, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 464, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 478, + 479, + 480, + 481, + 482, + 483, + 490, + 491, + 492, + 493, + 494, + 495, + 499, + 502, + 503, + 504, + 505, + 507, + 511, + 514, + 515, + 516, + 517, + 519, + 530, + 542, + 546, + 547, + 548, + 549, + 558, + 560, + 568, + 570 + ], + "bad_mode_roles": [ + 257, + 258 + ], + "matching": [ + [ + 257, + 227 + ], + [ + 258, + 224 + ] + ], + "time": 83 + }, + { + "admissible_ordinary_roles": [ + 224, + 227, + 228, + 230, + 231, + 233, + 234, + 235, + 236, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 256, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 274, + 276, + 278, + 279, + 280, + 281, + 283, + 284, + 285, + 286, + 287, + 288, + 290, + 292, + 294, + 295, + 296, + 297, + 299, + 300, + 301, + 302, + 303, + 304, + 306, + 308, + 310, + 312, + 313, + 315, + 316, + 317, + 318, + 319, + 320, + 322, + 324, + 326, + 328, + 329, + 331, + 332, + 333, + 334, + 335, + 336, + 338, + 340, + 342, + 343, + 344, + 345, + 347, + 348, + 349, + 350, + 351, + 352, + 354, + 356, + 358, + 359, + 360, + 361, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 464, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 478, + 479, + 480, + 481, + 482, + 483, + 490, + 491, + 492, + 493, + 494, + 495, + 499, + 502, + 503, + 504, + 505, + 507, + 511, + 514, + 515, + 516, + 517, + 519, + 530, + 542, + 546, + 547, + 548, + 549, + 558, + 560, + 568, + 570 + ], + "bad_mode_roles": [ + 241, + 242 + ], + "matching": [ + [ + 241, + 227 + ], + [ + 242, + 224 + ] + ], + "time": 90 + }, + { + "admissible_ordinary_roles": [ + 224, + 227, + 228, + 230, + 231, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 256, + 269, + 270, + 271, + 322, + 324, + 326, + 328, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 386, + 388, + 390, + 391, + 392, + 393, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 464, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 478, + 479, + 480, + 481, + 482, + 483, + 490, + 491, + 492, + 493, + 494, + 495, + 499, + 502, + 503, + 504, + 505, + 507, + 511, + 514, + 515, + 516, + 517, + 519, + 530, + 542, + 546, + 547, + 548, + 549, + 558, + 560, + 568, + 570 + ], + "bad_mode_roles": [ + 242, + 257, + 258 + ], + "matching": [ + [ + 242, + 228 + ], + [ + 257, + 227 + ], + [ + 258, + 224 + ] + ], + "time": 112 + }, + { + "admissible_ordinary_roles": [ + 224, + 227, + 228, + 230, + 231, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 256, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 274, + 276, + 278, + 279, + 280, + 281, + 283, + 284, + 285, + 286, + 287, + 288, + 290, + 292, + 294, + 295, + 296, + 297, + 299, + 300, + 301, + 302, + 303, + 304, + 306, + 308, + 310, + 312, + 313, + 315, + 316, + 317, + 318, + 319, + 320, + 322, + 324, + 326, + 328, + 329, + 331, + 332, + 333, + 334, + 335, + 336, + 338, + 340, + 342, + 343, + 344, + 345, + 347, + 359, + 360, + 361, + 363, + 364, + 365, + 366, + 367, + 368, + 370, + 372, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 386, + 388, + 390, + 391, + 392, + 393, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 464, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 478, + 479, + 480, + 481, + 482, + 483, + 490, + 515, + 516, + 517, + 519, + 530, + 542, + 546, + 547, + 548 + ], + "bad_mode_roles": [ + 241, + 242 + ], + "matching": [ + [ + 241, + 227 + ], + [ + 242, + 224 + ] + ], + "time": 116 + }, + { + "admissible_ordinary_roles": [ + 224, + 227, + 228, + 236, + 237, + 238, + 239, + 240, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254, + 255, + 256, + 259, + 260, + 261, + 262, + 263, + 264, + 265, + 266, + 267, + 268, + 269, + 270, + 271, + 272, + 274, + 276, + 278, + 279, + 280, + 281, + 283, + 284, + 285, + 286, + 287, + 288, + 290, + 292, + 294, + 295, + 296, + 297, + 299, + 300, + 301, + 302, + 303, + 304, + 306, + 308, + 310, + 312, + 313, + 315, + 316, + 317, + 318, + 319, + 320, + 322, + 324, + 326, + 328, + 329, + 331, + 332, + 333, + 334, + 335, + 336, + 338, + 340, + 342, + 343, + 344, + 345, + 347, + 348, + 349, + 350, + 351, + 352, + 354, + 356, + 358, + 359, + 360, + 361, + 363, + 364, + 365, + 366, + 367, + 368, + 370, + 372, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 386, + 388, + 390, + 391, + 392, + 393, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 464, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 478, + 479, + 480, + 481, + 482, + 483, + 490, + 491, + 492, + 493, + 494, + 495, + 499, + 502, + 503, + 504, + 505, + 507, + 511, + 514, + 515, + 516, + 517, + 519, + 530, + 542, + 546, + 547, + 548, + 549, + 558, + 560, + 568, + 570 + ], + "bad_mode_roles": [ + 229, + 232 + ], + "matching": [ + [ + 229, + 227 + ], + [ + 232, + 224 + ] + ], + "time": 136 + }, + { + "admissible_ordinary_roles": [ + 224, + 227, + 228, + 230, + 231, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 243, + 244, + 270, + 271, + 272, + 274, + 276, + 278, + 279, + 280, + 281, + 283, + 284, + 285, + 286, + 287, + 288, + 290, + 292, + 294, + 295, + 296, + 297, + 299, + 300, + 301, + 302, + 303, + 304, + 306, + 308, + 310, + 312, + 313, + 315, + 316, + 317, + 318, + 319, + 320, + 322, + 324, + 326, + 328, + 329, + 331, + 332, + 333, + 334, + 335, + 336, + 338, + 340, + 342, + 343, + 344, + 345, + 347, + 348, + 349, + 350, + 351, + 352, + 354, + 356, + 358, + 359, + 360, + 361, + 363, + 364, + 365, + 366, + 367, + 368, + 370, + 372, + 374, + 375, + 376, + 377, + 379, + 380, + 381, + 382, + 383, + 384, + 386, + 388, + 390, + 391, + 392, + 393, + 395, + 396, + 397, + 398, + 399, + 400, + 401, + 402, + 403, + 404, + 405, + 406, + 407, + 408, + 409, + 410, + 411, + 412, + 413, + 414, + 415, + 416, + 417, + 418, + 419, + 420, + 421, + 422, + 423, + 424, + 425, + 426, + 427, + 428, + 429, + 430, + 431, + 432, + 433, + 434, + 435, + 436, + 437, + 438, + 439, + 440, + 441, + 442, + 443, + 444, + 445, + 446, + 447, + 456, + 457, + 458, + 459, + 460, + 461, + 462, + 463, + 464, + 465, + 466, + 467, + 468, + 469, + 470, + 471, + 478, + 479, + 480, + 481, + 482, + 483, + 490, + 491, + 492, + 493, + 494, + 495, + 499, + 502, + 503, + 504, + 505, + 507, + 511, + 514, + 515, + 516, + 517, + 519, + 530, + 542, + 546, + 547, + 548, + 549, + 558, + 560, + 568, + 570 + ], + "bad_mode_roles": [ + 257, + 258 + ], + "matching": [ + [ + 257, + 227 + ], + [ + 258, + 224 + ] + ], + "time": 137 + } + ], + "minimality_scope": "Within the fixed call owner sets, each of37 bad mode positions needs a different owner. Their37 jobs must leave the mode set. Thus74 role positions must change;37 disjoint exchanges attain this bound.", + "mode_exchanges": 37, + "parent_skeleton_payload_sha256": "653b5f47d14d88cab23420796597e860a8bab73e86aa31fd471c3843c079e6d0", + "preserved": { + "active_data": true, + "all626_schedule_positions": true, + "call_owner_sets": true, + "helper_jobs_at_each_call": true, + "job_routes_and_pending_axes": true, + "native_profile": true, + "stock": true + }, + "repaired_skeleton_payload_sha256": "fc9b441fbb8c41aaa9ed41df3cb4ec853008affededadf328dc0185bb4614e00", + "shared_ordinary_occurrences": 1369, + "status": "PASS_SAME_CALL_PROMOTED_OWNER_ALIAS_REPAIR", + "template_sha256": "2acf02b418078e37090495c601fe550448751d4f35912757b13a1f778efc7760", + "unresolved": [ + "Exact paired-mode input and output views for each inherited old-owner prefix", + "Full arbitrary-input data and promoted-owner content restoration", + "Complete scalar/address/finite invoice and recursive supplier admission" + ] +} diff --git a/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/source-domain/productive-owner-drift/REVIEW-STATUS.md b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/source-domain/productive-owner-drift/REVIEW-STATUS.md new file mode 100644 index 0000000000..f6fd247ea8 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/frozen/lanes/source-domain/productive-owner-drift/REVIEW-STATUS.md @@ -0,0 +1,50 @@ +# Frozen review status + +The same-call alias repair has passed independent review. It removes all +36 cross-core incidences with 37 complete-job exchanges and 74 changed +roles. All 69,120 jobs keep their time, owner, route, and pending axes. +The 1,369 remaining shared occurrences are complete ordinary helper jobs +on the checked disjoint pending intervals. The 74-role minimum applies +only to the fixed complete call owner sets. + +The reviewed source `PROOF.md` remains unchanged at SHA-256 +`50f1af3b6614fd0a687b0557ff7b00539cfc23743ef747b576fad75fe72fdcab`. +The review is +[Circuit-interface's note](../../circuit-interface/productive-owner-review/REVIEW.md). +Its receipt SHA-256 is +`e7f57ef06675fd3dd0e54e119590be6c411aa58cde89b6845656fad2ff1e6b04`; +the checker SHA-256 is +`5c0d25220cecf772c5ca79895a5b87008b8d5b6fda60c7506a5b0d92d8b019ea`. +The review retains the earlier native and deep owner-window contracts as +explicit dependencies. It does not repeat a complete native kernel sweep. + +The repair does not restore the output contents. The independent checker +replays every literal scalar gate in both original and repaired words. +For the input with family 13005 equal to one and all other families zero, +family 112 has final value -1/4. This holds with the original mode signs +and with a negation after each mode occurrence. Each full inverse returns +the initial input. Thus these are reversible words with the wrong output +map, not an irreversible loss of information. + +The separate screen checks all 202 legal ordinary width-nine replacements +for call 0's mode role 225. With all other assignments and graphs fixed, +every replacement fails on a unit input in its new mode owner, in both +sign variants. The receipt +[FIRST-OWNER-EXCHANGES.json](../../circuit-interface/productive-owner-review/FIRST-OWNER-EXCHANGES.json) +has SHA-256 +`5bf753a968040842192974e11374454716afb857eb0f96be84c985d782c6a12a`. +Each nonzero residue modulo the odd prime 65537 certifies a nonzero dyadic +defect. This includes the 51 replacements with the exact rank-zero Y +prefix. It does not exclude coordinated exchanges, new graphs, or a +different controller. + +[Coherent-port's physical-view review](../../coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.md) +also passes. Its receipt SHA-256 is +`0a1c7fd42130f6078f011e32e6b2fcc6f2002eb9532d4d5d0de5b91e75fabe59`. +That proof keeps each old owner's exact relative operator in the logical +content map. It does not execute a normalization. It does not prove +global drift restoration. The exact inherited-frame inventory remains a +producer check rather than a new independent full phase replay. + +No full supplier, output decoder, complete finite invoice, or kappa gain +follows from this packet. The reviews used separate OpenAI Codex agents. diff --git a/research/original-paired-gap/annexes/productive-owner-view/paired-source/NOTICE.md b/research/original-paired-gap/annexes/productive-owner-view/paired-source/NOTICE.md new file mode 100644 index 0000000000..c0c9752a66 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/paired-source/NOTICE.md @@ -0,0 +1,58 @@ +# Source attribution and license + +New research, code, and verification used substantial OpenAI Codex +assistance under the user's direction. Separate agents developed and +reviewed the operator identities, scalar words, native phases, and owner +composition. These are agent reviews. No independent human review is +claimed. New material uses Apache-2.0; the [license](notices/LICENSE) is +retained without changes. + +The original scalar programs and phase data come from the historical +gauge44/t16 lineage at commit +`bce54fb3f895cbe5cd4c0eb477c3afeed100190f`. The following original notices +are retained byte for byte: + +- [Gauge44 notice](notices/research/gauge44-slots-t16/NOTICE.md). +- [Construction notice](notices/research/gauge44-slots-t16/construction/NOTICE.md). +- [T16 integration notice](notices/research/gauge44-slots-t16/t16/NOTICE.md). +- [Complete upstream notice](notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md). + +Those sources credit icekylinx for the source gauge and supplier +pipeline; Hao Yan (@FanPUYen) for t16 construction and integration; +Jeremy Kothe for the retained [PR #799](https://github.com/CrocSwap/integer-mult-bounds/pull/799) +X4 word; Chafik Boukhalfa for the +[PR #741](https://github.com/CrocSwap/integer-mult-bounds/pull/741) frames +and [PR #685](https://github.com/CrocSwap/integer-mult-bounds/pull/685) +owner construction; and Rohan Arun for the +native exact-complex recurrence correction. The retained notices give +the full earlier lineage, licenses, and AI disclosures. This package +does not claim those contributions as new work. + +The loader is unchanged from `research/native-source-codes/source_data.py` +at commit `7649d9ceecec949541bec4bbde5929344166ba59`. The direct route +calculation adapts `research/joint-query/verify_native.py` at commit +`a6e6ad3936f67b8f63b5b68c5e75d540610a65e7`. The earlier example circuits +are not runtime dependencies. + +Within the centre-encoding campaign, history-encoding supplied the +full-mode core, exact sparse replay, and physical phase-gap graphs. +Coherent-port supplied the complementary-gap argument and exact native +review. The coordinating agent supplied the original-complex replica +construction and its monomial-square abstraction. Residual-syndrome +supplied the literal paired packet and proof. Its independent reviewer +checked the operator order, routes, and corrected frame hypotheses. +Encoded-controller supplied the prior arbitrary-mode decoder consequence; +that conditional controller is not an executable dependency here. +Source-domain supplied the separate owner binding, and circuit-interface +reviewed its composition with the local pair. + +The portable pair checker adapts the history and residual-syndrome +replay methods. The native checker adapts the coherent-port independent +review, with the direct original-source route reconstruction described +above. The general checker records the ordered proof identities and +counterexamples. It does not replace the hypotheses by a numerical test. +Exact source paths and hashes are recorded in [SOURCES.json](SOURCES.json). + +The result is a local typed mechanism and an enabling theorem. Full +global closure, a complete supplier, and a kappa improvement are not +claimed. The package does not change the selected frontier. diff --git a/research/original-paired-gap/annexes/productive-owner-view/paired-source/SOURCES.json b/research/original-paired-gap/annexes/productive-owner-view/paired-source/SOURCES.json new file mode 100644 index 0000000000..dbef0b58a2 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/paired-source/SOURCES.json @@ -0,0 +1,209 @@ +{ + "checker_methods": [ + { + "file": "verify_pair.py", + "method": "Exact sparse core replay and ordered port-line replay; independent algebraic inverse checks added", + "source": "lanes/residual-syndrome/physical-algebra/emit_original_paired_gap.py" + }, + { + "file": "verify_native.py", + "method": "Literal wrapper groups and exact native line columns; original-source route reconstruction from PR1969", + "source": "lanes/coherent-port/review_original_paired_gap_native.py", + "source_sha256": "e79e104b2497e80427c2040c940942e9654c24e4736b981ec11f09eafb768f95" + }, + { + "file": "verify_algebra.py", + "method": "Ordered identities with Q inverse cancellation, frame counterexample, and non-order-four unit monomial example", + "source": "evidence/MONOMIAL-SQUARE-PROOF.md" + } + ], + "copied_files": [ + { + "bytes": 14947, + "file": "source_data.py", + "runtime": true, + "sha256": "d23924511e3aed41e5e64511ca70126a636d91c8aa02e656cb61d6ceca1fe0a0", + "source": "publication/joint-query-package/source_data.py", + "unchanged": true + }, + { + "bytes": 29886, + "file": "data/PAIRED-PROGRAMS.json.gz", + "runtime": true, + "sha256": "ed7702a3fac280238bcaf8af8387d53c59731b8c21c0301f3d84de971027e2d0", + "source": "lanes/residual-syndrome/physical-algebra/ORIGINAL-PAIRED-GAP-PROGRAMS.json.gz", + "unchanged": true + }, + { + "bytes": 213376, + "file": "data/FULL-MODE-PROGRAMS.json.gz", + "runtime": true, + "sha256": "ebc17d1d4c51a9c6b3cb05670d970db3d3e1000f26f1d864cdb27523ce1997dd", + "source": "lanes/history-encoding/FULL-MODE-PROGRAMS.json.gz", + "unchanged": true + }, + { + "bytes": 269114, + "file": "data/INPUT-LINES.json", + "runtime": true, + "sha256": "500c09dfc1d27ffd107341adf4c3c6874ee2c84e1a8afad91d931ed9e88fd1d7", + "source": "lanes/coherent-port/INPUT-COMPENSATION.json", + "unchanged": true + }, + { + "bytes": 5755, + "file": "evidence/MONOMIAL-SQUARE-PROOF.md", + "runtime": false, + "sha256": "300e7b894f8218fe3e17b31f0033daa85f57d5df414ce127d3613e3e705b2fd2", + "source": "lanes/residual-syndrome/physical-algebra/MONOMIAL-SQUARE-GAP.md", + "unchanged": true + }, + { + "bytes": 3106, + "file": "evidence/MONOMIAL-SQUARE-REVIEW.md", + "runtime": false, + "sha256": "53904f2fa0d12943d5639c454ed4598d0a4f3d4f1bc4441118d2576b25e25c68", + "source": "lanes/residual-syndrome/physical-algebra/review-gauss/original-paired-gap/MONOMIAL-SQUARE-REVIEW.md", + "unchanged": true + }, + { + "bytes": 7037, + "file": "evidence/LOCAL-PROOF.md", + "runtime": false, + "sha256": "dd94a6e2220306aa76da329886921f1efc0420e6064fe9d056bc4c2286e693b3", + "source": "lanes/residual-syndrome/physical-algebra/ORIGINAL-PAIRED-GAP.md", + "unchanged": true + }, + { + "bytes": 7238, + "file": "evidence/LOCAL-PROOF-REVIEW.md", + "runtime": false, + "sha256": "6d27934ce620cc8b191b0822f955ec05f0679352c2a6f9ac31672085ee52a418", + "source": "lanes/residual-syndrome/physical-algebra/review-gauss/original-paired-gap/REVIEW.md", + "unchanged": true + }, + { + "bytes": 2156, + "file": "evidence/LOCAL-PROOF-REVIEW.json", + "runtime": false, + "sha256": "4018a1c2080d37b907631d1db0b356d3887294f99f720f6e63c10daf149395e2", + "source": "lanes/residual-syndrome/physical-algebra/review-gauss/original-paired-gap/REVIEW.json", + "unchanged": true + }, + { + "bytes": 7579, + "file": "evidence/NATIVE-REVIEW.md", + "runtime": false, + "sha256": "1783100d3333c83828b47bb89f267db54b791f4c4fe952b5a62fbdb5087c902f", + "source": "lanes/coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md", + "unchanged": true + }, + { + "bytes": 1701, + "file": "evidence/NATIVE-REVIEW.json", + "runtime": false, + "sha256": "e79603bee7c4077b3637f9b7891bac59719183e922a71d5994aaf9d405d5322f", + "source": "lanes/coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.json", + "unchanged": true + }, + { + "bytes": 1918, + "file": "evidence/FULL-MODE-REVIEW.json", + "runtime": false, + "sha256": "ff123b08b3ac58f20d12d4fbec575472086ace1708d3242519884dbffe534372", + "source": "lanes/interface-proof/FULL-MODE-PORT-REVIEW.json", + "unchanged": true + }, + { + "bytes": 10590, + "file": "evidence/OWNER-BINDING-SOURCE.txt", + "runtime": false, + "sha256": "888852204cef466e051e2e16c84de68db05ab3995ac47c8c15fbf81356613676", + "source": "lanes/source-domain/paired-original/PROOF.md", + "unchanged": true + }, + { + "bytes": 6392, + "file": "evidence/OWNER-BINDING-REVIEW.md", + "runtime": false, + "sha256": "a85549bfda224f651f8f26235893e6b61f1f6683f9bc6f84a52ecf5e26782705", + "source": "lanes/circuit-interface/paired-original-review/REVIEW.md", + "unchanged": true + }, + { + "bytes": 4038, + "file": "evidence/OWNER-BINDING-REVIEW.json", + "runtime": false, + "sha256": "11abe070f0fbf483f0afd243411cf861c017b7a6fc0b23c656e3508c3d9e89a4", + "source": "lanes/circuit-interface/paired-original-review/REVIEW.json", + "unchanged": true + }, + { + "bytes": 1964, + "file": "notices/research/gauge44-slots-t16/NOTICE.md", + "runtime": false, + "sha256": "7a8d17b04da1e6c9d0ec217fb5bda72faa09d9a21695128722dd1e2827870fcf", + "source_commit": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f", + "source_path": "research/gauge44-slots-t16/NOTICE.md", + "unchanged": true + }, + { + "bytes": 950, + "file": "notices/research/gauge44-slots-t16/construction/NOTICE.md", + "runtime": false, + "sha256": "defe7e44af610e25a6c50c1c3b2efd0972d0690574995c0c872fc50eebf4c816", + "source_commit": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f", + "source_path": "research/gauge44-slots-t16/construction/NOTICE.md", + "unchanged": true + }, + { + "bytes": 2245, + "file": "notices/research/gauge44-slots-t16/t16/NOTICE.md", + "runtime": false, + "sha256": "902370e6bfcd39dbea2ece474f15fccbcce3b8e966b2b94066bd03e5174591b5", + "source_commit": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f", + "source_path": "research/gauge44-slots-t16/t16/NOTICE.md", + "unchanged": true + }, + { + "bytes": 6406, + "file": "notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md", + "runtime": false, + "sha256": "a75967ebc34e3bf2ff2c25c08e6c7f1a61b0c0d171cfd1b62196ae2caaf2c610", + "source_commit": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f", + "source_path": "research/gauge44-slots-t16/UPSTREAM-NOTICE.md", + "unchanged": true + }, + { + "bytes": 11357, + "file": "notices/LICENSE", + "runtime": false, + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "source_commit": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f", + "source_path": "LICENSE", + "unchanged": true + }, + { + "bytes": 544, + "file": "evidence/ROUTE-REPLACEMENT-CHECK.json", + "runtime": false, + "sha256": "da9c021e6464616c2908f684c2f7aacf903bc97f68a75a0365860e86da9bbc16", + "source": "Portable comparison of direct original routes with the pinned doubled geometry", + "unchanged": true + } + ], + "historical_base": "bce54fb3f895cbe5cd4c0eb477c3afeed100190f", + "loader_origin": { + "also_present_at": "a6e6ad3936f67b8f63b5b68c5e75d540610a65e7", + "also_present_path": "research/joint-query/source_data.py", + "commit": "7649d9ceecec949541bec4bbde5929344166ba59", + "path": "research/native-source-codes/source_data.py" + }, + "route_method_origin": { + "adapted_scope": "Actual bases, stage matrices, and original entry/exit translations only", + "commit": "a6e6ad3936f67b8f63b5b68c5e75d540610a65e7", + "path": "research/joint-query/verify_native.py" + }, + "scope": "Local typed pair and all-stage annihilation; owner evidence is a separate inherited applicability result; no complete supplier or kappa change", + "status": "PINNED_LOCAL_SOURCE_INPUTS" +} diff --git a/research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/LICENSE b/research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/research/gauge44-slots-t16/NOTICE.md b/research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/research/gauge44-slots-t16/NOTICE.md new file mode 100644 index 0000000000..30d0c8cd3c --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/research/gauge44-slots-t16/NOTICE.md @@ -0,0 +1,24 @@ +# Gauge44 attribution and scope + +New contributions by icekylinx, with OpenAI GPT-6 Astra assistance. +Local review and packaging used OpenAI Codex. Apache-2.0 applies; +the license is included. The full original PR635 notice is preserved as +UPSTREAM-NOTICE.md and construction/UPSTREAM-NOTICE.md. + +The new contribution is the changed source-branch gauge and retired-row +completion, source-carried coordinate totals, exact 44-cold-end realization, +and explicit all72 whole-family assignment using concave capacity matching +with integer majorization certificates. The center-carrier generalization +retains the exact ordered common frames and complete native local contract. +Independent local, price, interface and owner fixed-point checks are included. + +The construction retains the credited PR635 K-triangle and porting machinery, +earlier joint-prefix/HPE/frame ancestry and icekylinx's prior factory work. +#645 used the same cited PR543 bit supplier as PR635. This package (research/gauge44-leaver8) cites the merged PR589 bit supplier instead, with a derived rank-mass deficit (PROOF-NOTE-BIT.md); #645's retained PR543-based evidence is historical. It builds #645's word without K-triangles (PartialK) and stacks earlier community jp8 layers on it (G44Stack), adds the p6n ends (NoTriReopen), entrance promotions (BlockInvert) a read-set exchange (BRoute), chafreaky's #741 frames, JointXF's joint exchange, NewBArch's triangle-hybrid B rewrite and LeaverSAT's eight k8 leaver cells (with LeaverSAT2's frame re-optimisation); see README. All-size, realization, +hosting, precision/tape, analytic-transfer and bit H1-H5 assumptions remain +conditional. No upstream license, credit, source pin or AI disclosure is +replaced by this notice. + +PR641 and PR642 were checked as concurrent reported frontier comparisons. +Their endpoints and owner maps are not included here. See CONSTRUCTION.md, +hosting/PROOF.md, independent/ and README.md for the exact contribution scope. diff --git a/research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md b/research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md new file mode 100644 index 0000000000..ebc24a0168 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md @@ -0,0 +1,34 @@ +# Attribution and scope + +Four verified provider types are offered to every call: PR571's prefix word with twelve multi-cut cold kernels (PR568's unchanged constructor), the same word with forty width-five entrance promotions (PR569's unchanged frame constructor) before those kernels, PR575's plain joint-prefix provider, and PR568's eight-cold provider. A window MILP with an exact per-pattern model chooses the dispatch and a literal owner map. PR583's six source-bound kernel frame coalescences (its unchanged constructor and negative controls) are applied to every PR571-prefix provider word (ck and atm3), followed by two further coalescences that each first move one addition past two commuting additions (package code/build_gate_moves.py, extending PR583's constructor); a final hyperplane_end step (package code/build_hpe.py) then runs 46 single-gate cleanups h -= p right after part B at the dim-8 join U of their registers, so 46 width-8 entering helpers per call end at U with width 7; each such gate commutes with every earlier cleanup gate on its registers (for 8 of them the partner's one earlier gate x -= p only reads p), and the reordered program is replayed exactly. A window MILP (exact windows, RINS around an LP vertex) gives the dispatch ck 45 / atm3 21 / jp8 6 and the literal owner map. + +Pinned external sources (unchanged; `verify.py` checks their manifests and every file it uses): +- PR568 (`research/complex-multicold`, commit `71c99ac935a33bb7b59a1b4a7af8725a939b0b90`). +- PR571 (`research/structural-gain`, commit `b7bdc5a8de18fcf418cfb9c7d83a2b1097a5e4a3`). +- PR569 (`research/larger-gain`, commit `897213a855b7fb8a1b8b0e552a2f5c42e6c1b326`). +- PR575 (`research/complex-joint-prefix`, commit `eac6f7e378ab622dac50a2fd4b7ef6eab014de44`). +- PR583 (`research/kernel-frame-coalescing`, commit `89be768f0157f5a3d8e4db69cf1748768605eac9`). + +Provider construction is described as typed steps in `data/SPEC.json` (`build`); `verify.py` runs only allowlisted step types with their paired omission audits and checks every input and output content hash. `code/` holds the spec-driven global admission scripts adapted from PR571's `frontier-composition/global-code/` (OpenAI Codex assisted, Apache-2.0): every expected value is read from `data/SPEC.json` and compared only after independent recomputation. `code/generated_identity.py` and `code/generated_identity_controls.py`, and the decompressed-content artifact identities in the bind, audit, invoice, assembly and phase-timing scripts, are taken unchanged from PR586 by chafreaky (`research/promoted-kernel-coalescing`, commit `4846fee5b06af770e9b3a10c36200f673d656725`, OpenAI Codex assisted, Apache-2.0), including its proof-content and reference/metadata mutation controls; the normalization of descriptive width metadata after frame changes follows the same PR. + +In PR601, the owner map was nominated by a HiGHS window MILP (adapted from PR569's `global/nominate_width7.py`) with lazy cross-time Hall cuts; this package's re-solved map is described below. Neither is an admission dependency. + +DreamingOfClouds with Claude Opus 5.5 (Anthropic), via Claude Code. (The PR601 package this one starts from states: "Prepared by Claude Code (Anthropic) research agents.") Apache-2.0 applies; LICENSE is included. All notices, licenses, source pins and AI disclosures of the pinned sources and their ancestry are retained in those packages and are not replaced by this notice. All inherited conditional assumptions remain conditional. + +**This package (complex-571-cold14, DreamingOfClouds).** It starts from PR601 (jeremykothe2, `research/complex-571-hpem46`, commit `529ab7dcb59d5ea7a5798e9e06cf5b3aee8a1550`). Everything above is kept unchanged except the following: +- every provider chain (ck, atm3, jp8) gains the typed step `cold_end` (`code/build_cold_end.py`, `code/cold_end_controls.py`; recipes `data/recipes/*-cold_end.json.gz`); +- the generalised native chain and the global admission scripts accept cold helpers that end below FULL (with `0:U` wrappers), a refactored exact cleanup, and check the wrapper order; +- `data/PLAN.json` / `data/OWNERS.json.gz` (dispatch and literal owner map) come from a relocate/swap/ejection-chain/provider-flip annealing search started from PR601's map, refined by an exact pattern-restricted owner model (CP-SAT) with a literal edge-colouring expansion (not an admission dependency); +- `data/SPEC.json` holds the expected values, recorded by a discovery run and then checked by a strict run. + +The cold-end construction (a row-plus-column cone condition for low-frame ends, a rank-0 dirt-spread premix and multi-gate lower-frame cleanup) builds on PR591 / PR592 / PR593 / PR601 (jeremykothe2) and our PR599 (Lean: multi-gate and cold hyperplane-end tails). DreamingOfClouds with Claude Opus 5.5 (Anthropic), via Claude Code. Build on this at your own risk. + +**This package (complex-571-cold14-b3, jeremykothe2).** It is PR604's `complex-571-cold14` (DreamingOfClouds) with ColdBeyond's second cold end per block (two new `cold_end` A-gate primitives, `PROOF-NOTE.md`), ColdSupply's E1 entering pair and reviewed controls, a free dispatch (jp8 ×60, atm3 ×12) and a literal owner map from an exact per-time-Hall window MIP. All other construction, code, controls and proofs are PR604's and earlier contributors', unchanged. + +**This package (complex-571-cold14-k492).** It is complex-571-cold14-b3 with these changes: +- **K-triangle base words.** The leaver-read K-triangle skeleton atom and its read schedule (`data/TRI-SCHEDULE.json`) are by AtomScout, a Claude Code research agent. `code/construct_k_triangle.py` is PR531's `code/construct_504.py` (icekylinx, OpenAI Codex / GPT assisted, Apache-2.0; pinned source `direct_delivery`) extended with that atom. +- **Ported chains.** The PR604/B3 chains are ported stage by stage onto the K-triangle words by `code/build_port_stage.py` (Port480, a Claude Code research agent). `code/build_frame_regroup.py` extends PR583's `build_frames.py` (chafreaky). +- **Helper count R.** The generalisation of the global scripts to the provider helper count R is by GlobalR (a Claude Code research agent), with AtomReviewer's fixes (PROOF-NOTE-R.md). +- **Owner map.** The owner map, the cold_end recipes on the K-triangle words and the package assembly are by Stack492, Port480 and ColdBeyond (Claude Code research agents). + +Build on this at your own risk. diff --git a/research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/research/gauge44-slots-t16/construction/NOTICE.md b/research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/research/gauge44-slots-t16/construction/NOTICE.md new file mode 100644 index 0000000000..16b0507070 --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/research/gauge44-slots-t16/construction/NOTICE.md @@ -0,0 +1,9 @@ +# Construction delta notice + +Prepared for icekylinx with OpenAI GPT-6 Astra assistance. Apache-2.0. + +`construct_gauge_xcentre.py` modifies PR635's credited `construct_k_triangle.py`, which in turn extends icekylinx's PR531/PR514/PR425 factory lineage. Its original source comments are retained. The K-triangle schedule and the upstream porting, JP8 frame, kernel and HPE procedures are reused from the pinned source checkouts and are not new contributions of this delta. + +The new source-copy exchanges, complementary factory basis, carrier assignment, exact cold44 constructor and compact reproduction driver are described in `../CONSTRUCTION.md`. + +`UPSTREAM-NOTICE.md` is the complete unmodified notice from the pinned PR635 package. `LICENSE` is that package's Apache-2.0 license. All further notices and source credits of the referenced upstream packages remain applicable and are retained in the source checkouts rather than vendored again here. diff --git a/research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/research/gauge44-slots-t16/t16/NOTICE.md b/research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/research/gauge44-slots-t16/t16/NOTICE.md new file mode 100644 index 0000000000..403f4afffb --- /dev/null +++ b/research/original-paired-gap/annexes/productive-owner-view/paired-source/notices/research/gauge44-slots-t16/t16/NOTICE.md @@ -0,0 +1,39 @@ +# Attribution and license + +Apache-2.0. New construction and integration: Hao Yan (@FanPUYen), 2026. +Prepared with substantial OpenAI Codex assistance, including separately tasked +AI agents for owner construction, independent mathematical/code checking and +native verification. These are not claims of independent human peer review. + +The exact local supplier is Jeremy Kothe's accepted PR799 X4 word, layered on +Chafik Boukhalfa's PR741 frame changes and PR685 owner construction. Chafik's +PR795 fixed-inventory optimality result motivated changing the replica count. +The original owner bytes, scalar program, local frame and width inventory, +native phase and wrapper implementations retain their existing authorship. + +Credit icekylinx for the source gauge and supplier/admission pipeline; +DreamingOfClouds for the PR589 bit transport and inherited cold-end work; +eumemic for the PR555 bit supplier and earlier supplier work; Rohan Arun for +the native exact-complex recurrence correction; Jeremy Diviney, jaymosley07, +and the other retained owner/allocation contributors; and the complete +PR514/PR484/PR507/PR558 controller, physical hosting and verification lineage. +This list is cumulative credit, not approval of every claim in those PRs. + +All original notices and licenses remain in the referenced source packages: + +- `research/gauge44-frames-x/{NOTICE,UPSTREAM-NOTICE}.md` +- `research/complex-sw4-frame8/PROVENANCE.md` +- `research/e8-bit-p111-tuned/tune/README.md` +- the repository `CONTRIBUTORS.md` and source-package licenses. + +The verifier copies pinned global source files into an external replay +directory and applies an explicit checked edit list. Original attribution +comments are preserved in those generated derivatives. No original source +file or historical certificate is rewritten. + +The optional ancestry-reuse coverage guard addresses the omission issue +identified by Lucas (@ljste) in PR838 and the related PR847 integration by +Chinmay (@chinmayarvind23). Its fixed inventories were read from the accepted +PR741 source; no pending implementation is imported. Charles Bethin's +concurrent PR850 strengthens the fixed-inventory owner-profile theorem and +was checked for overlap before publication; that inventory is changed here. diff --git a/research/publication-reviews/original-paired-gap/productive-owner-review/BODY-CLAIM-CHECK.json b/research/publication-reviews/original-paired-gap/productive-owner-review/BODY-CLAIM-CHECK.json new file mode 100644 index 0000000000..68cb4c91d6 --- /dev/null +++ b/research/publication-reviews/original-paired-gap/productive-owner-review/BODY-CLAIM-CHECK.json @@ -0,0 +1,15 @@ +{ + "commands_and_expected_status_match_runner": true, + "commit_placeholder": "COMMIT", + "file": "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261022/original-paired-gap-owner-body-addendum.template.md", + "limitations_and_no_complete_kappa_improvement_present": true, + "mathematical_claims_match_reviewed_annex": true, + "not_checked": [ + "Final publication commit links", + "GitHub rendered Markdown", + "Published body and rendered readback" + ], + "scope": "Read the complete addendum draft. The coordinator must complete publication checks after replacing COMMIT.", + "sha256": "145ecacb2298b4ce43875cafe263b4d0a3b636e8223ee9c829ab84153c698e0c", + "status": "PASS_BODY_CLAIMS_ONLY" +} diff --git a/research/publication-reviews/original-paired-gap/productive-owner-review/CAMPAIGN-SOURCE-CHECK.json b/research/publication-reviews/original-paired-gap/productive-owner-review/CAMPAIGN-SOURCE-CHECK.json new file mode 100644 index 0000000000..c57a22fbf8 --- /dev/null +++ b/research/publication-reviews/original-paired-gap/productive-owner-review/CAMPAIGN-SOURCE-CHECK.json @@ -0,0 +1,71 @@ +{ + "files": [ + { + "campaign_path": "lanes/circuit-interface/productive-owner-review/FIRST-OWNER-EXCHANGES.json", + "path": "frozen/lanes/circuit-interface/productive-owner-review/FIRST-OWNER-EXCHANGES.json", + "sha256": "5bf753a968040842192974e11374454716afb857eb0f96be84c985d782c6a12a" + }, + { + "campaign_path": "lanes/circuit-interface/productive-owner-review/REVIEW.json", + "path": "frozen/lanes/circuit-interface/productive-owner-review/REVIEW.json", + "sha256": "e7f57ef06675fd3dd0e54e119590be6c411aa58cde89b6845656fad2ff1e6b04" + }, + { + "campaign_path": "lanes/circuit-interface/productive-owner-review/REVIEW.md", + "path": "frozen/lanes/circuit-interface/productive-owner-review/REVIEW.md", + "sha256": "e11b224b6d0e46e14086188c4476bb0ff260374e02ff72626af3c32b986dec55" + }, + { + "campaign_path": "lanes/circuit-interface/productive-owner-review/review_drift.py", + "path": "frozen/lanes/circuit-interface/productive-owner-review/review_drift.py", + "sha256": "5c0d25220cecf772c5ca79895a5b87008b8d5b6fda60c7506a5b0d92d8b019ea" + }, + { + "campaign_path": "lanes/circuit-interface/productive-owner-review/screen_first_owner.py", + "path": "frozen/lanes/circuit-interface/productive-owner-review/screen_first_owner.py", + "sha256": "0d9d856ed81ad406ce3eb1cdb44e458b739c7ca8e6f35f215db58ddedeacee5d" + }, + { + "campaign_path": "lanes/coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md", + "path": "frozen/lanes/coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md", + "sha256": "1783100d3333c83828b47bb89f267db54b791f4c4fe952b5a62fbdb5087c902f" + }, + { + "campaign_path": "lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.json", + "path": "frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.json", + "sha256": "0a1c7fd42130f6078f011e32e6b2fcc6f2002eb9532d4d5d0de5b91e75fabe59" + }, + { + "campaign_path": "lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.md", + "path": "frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.md", + "sha256": "3a113ede36815a85f1d15201d682959b0aa40f3fbaa5ce423600d595b707bc15" + }, + { + "campaign_path": "lanes/encoded-controller/PRODUCTIVE-OWNER-DRIFT.md", + "path": "frozen/lanes/encoded-controller/PRODUCTIVE-OWNER-DRIFT.md", + "sha256": "afc421177ab5ac693d6a0f7fa9f3fcd56b9f324f3bedbcf0061826139223a691" + }, + { + "campaign_path": "lanes/encoded-controller/REPAIRED-OWNER-DRIFT.md", + "path": "frozen/lanes/encoded-controller/REPAIRED-OWNER-DRIFT.md", + "sha256": "c34df7c493b38cbd1c7c77c21cb31fef6cc84e33ce1f51c60aeca780aff82ce0" + }, + { + "campaign_path": "lanes/source-domain/productive-owner-drift/PROOF.md", + "path": "frozen/lanes/source-domain/productive-owner-drift/PROOF.md", + "sha256": "50f1af3b6614fd0a687b0557ff7b00539cfc23743ef747b576fad75fe72fdcab" + }, + { + "campaign_path": "lanes/source-domain/productive-owner-drift/REPAIR.json", + "path": "frozen/lanes/source-domain/productive-owner-drift/REPAIR.json", + "sha256": "847c35e0709f115f57543d3cb6f5fca1d30b58ace17807d3b5c61398b21ddd40" + }, + { + "campaign_path": "lanes/source-domain/productive-owner-drift/REVIEW-STATUS.md", + "path": "frozen/lanes/source-domain/productive-owner-drift/REVIEW-STATUS.md", + "sha256": "b6993dd6ed819f8538a22c463988811308f838074ea33aeb2258753ae1fb2dfd" + } + ], + "source_count": 13, + "status": "PASS_EXACT_FROZEN_CAMPAIGN_BYTES" +} diff --git a/research/publication-reviews/original-paired-gap/productive-owner-review/FINAL-ANNEX-INTEGRITY.json b/research/publication-reviews/original-paired-gap/productive-owner-review/FINAL-ANNEX-INTEGRITY.json new file mode 100644 index 0000000000..91c104f696 --- /dev/null +++ b/research/publication-reviews/original-paired-gap/productive-owner-review/FINAL-ANNEX-INTEGRITY.json @@ -0,0 +1,199 @@ +{ + "added_since_initial": [ + "ANNEX-MANIFEST.json", + "NOTICE.md", + "README.md", + "evidence/DOCUMENT-LINKS.json", + "evidence/PUBLISHED-SOURCE-IDENTITY.json", + "evidence/SOURCE-AUDIT-normal.json", + "evidence/SOURCE-AUDIT-optimized.json", + "paired-source/NOTICE.md", + "paired-source/SOURCES.json", + "paired-source/notices/LICENSE", + "paired-source/notices/research/gauge44-slots-t16/NOTICE.md", + "paired-source/notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md", + "paired-source/notices/research/gauge44-slots-t16/construction/NOTICE.md", + "paired-source/notices/research/gauge44-slots-t16/t16/NOTICE.md" + ], + "annex_path": "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261022/annexes/original-paired-gap-owner", + "files": { + "ANNEX-MANIFEST.json": { + "bytes": 5246, + "sha256": "12cfbbfb8e2412cce6d8688a70aafaf6f1b4e77e93a3b443aac333fab28a28b7" + }, + "NOTICE.md": { + "bytes": 1080, + "sha256": "0438424cfde91bc47e1dfb73810f9c2ab1a5077d96c211f498ef265a46b50fe8" + }, + "README.md": { + "bytes": 5508, + "sha256": "1795deb0b13f3250cc312cabfc4c9831e2484ca7e9dd8ebfe6ef97421bdd26ec" + }, + "SOURCES.json": { + "bytes": 4758, + "sha256": "ca5f5527d0bceaf8564b19b04bbb84ec7ca686a6dba4c940b2d20f17a629ce97" + }, + "check_sources.py": { + "bytes": 1887, + "sha256": "b954f85361d76e02d3bbb23b04de4e73dabb981b81d5edefdeacfa491894ad40" + }, + "evidence/DOCUMENT-LINKS.json": { + "bytes": 3934, + "sha256": "fee9fe8be59093c528b09a8193915760225177d238337503bc730b51509f3157" + }, + "evidence/PUBLISHED-SOURCE-IDENTITY.json": { + "bytes": 3210, + "sha256": "ddc9d532faf63cab7d8f376d6d9874efb185f19f087843cca215fa16814b89e6" + }, + "evidence/SOURCE-AUDIT-normal.json": { + "bytes": 510, + "sha256": "d42a53fb571945019e29597137140a365da6437c8a8bff9676aba2ac38777585" + }, + "evidence/SOURCE-AUDIT-optimized.json": { + "bytes": 510, + "sha256": "d42a53fb571945019e29597137140a365da6437c8a8bff9676aba2ac38777585" + }, + "frozen/lanes/circuit-interface/productive-owner-review/FIRST-OWNER-EXCHANGES.json": { + "bytes": 93678, + "sha256": "5bf753a968040842192974e11374454716afb857eb0f96be84c985d782c6a12a" + }, + "frozen/lanes/circuit-interface/productive-owner-review/REVIEW.json": { + "bytes": 11965, + "sha256": "e7f57ef06675fd3dd0e54e119590be6c411aa58cde89b6845656fad2ff1e6b04" + }, + "frozen/lanes/circuit-interface/productive-owner-review/REVIEW.md": { + "bytes": 7379, + "sha256": "e11b224b6d0e46e14086188c4476bb0ff260374e02ff72626af3c32b986dec55" + }, + "frozen/lanes/circuit-interface/productive-owner-review/review_drift.py": { + "bytes": 19232, + "sha256": "5c0d25220cecf772c5ca79895a5b87008b8d5b6fda60c7506a5b0d92d8b019ea" + }, + "frozen/lanes/circuit-interface/productive-owner-review/screen_first_owner.py": { + "bytes": 7001, + "sha256": "0d9d856ed81ad406ce3eb1cdb44e458b739c7ca8e6f35f215db58ddedeacee5d" + }, + "frozen/lanes/coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md": { + "bytes": 7579, + "sha256": "1783100d3333c83828b47bb89f267db54b791f4c4fe952b5a62fbdb5087c902f" + }, + "frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.json": { + "bytes": 1346, + "sha256": "0a1c7fd42130f6078f011e32e6b2fcc6f2002eb9532d4d5d0de5b91e75fabe59" + }, + "frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.md": { + "bytes": 4001, + "sha256": "3a113ede36815a85f1d15201d682959b0aa40f3fbaa5ce423600d595b707bc15" + }, + "frozen/lanes/encoded-controller/PRODUCTIVE-OWNER-DRIFT.md": { + "bytes": 4624, + "sha256": "afc421177ab5ac693d6a0f7fa9f3fcd56b9f324f3bedbcf0061826139223a691" + }, + "frozen/lanes/encoded-controller/REPAIRED-OWNER-DRIFT.md": { + "bytes": 1690, + "sha256": "c34df7c493b38cbd1c7c77c21cb31fef6cc84e33ce1f51c60aeca780aff82ce0" + }, + "frozen/lanes/source-domain/productive-owner-drift/PROOF.md": { + "bytes": 6900, + "sha256": "50f1af3b6614fd0a687b0557ff7b00539cfc23743ef747b576fad75fe72fdcab" + }, + "frozen/lanes/source-domain/productive-owner-drift/REPAIR.json": { + "bytes": 50536, + "sha256": "847c35e0709f115f57543d3cb6f5fca1d30b58ace17807d3b5c61398b21ddd40" + }, + "frozen/lanes/source-domain/productive-owner-drift/REVIEW-STATUS.md": { + "bytes": 2758, + "sha256": "b6993dd6ed819f8538a22c463988811308f838074ea33aeb2258753ae1fb2dfd" + }, + "paired-source/NOTICE.md": { + "bytes": 3258, + "sha256": "06ebe05bf4c5abcfa840a9b2bd3b58059b293dd23fc23eb9ca8454a56d1c9e5a" + }, + "paired-source/SOURCES.json": { + "bytes": 8153, + "sha256": "2ca472d13712383755b7f25794edb810e97401ecfd3fc8b1aa1b68a354b1b581" + }, + "paired-source/notices/LICENSE": { + "bytes": 11357, + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4" + }, + "paired-source/notices/research/gauge44-slots-t16/NOTICE.md": { + "bytes": 1964, + "sha256": "7a8d17b04da1e6c9d0ec217fb5bda72faa09d9a21695128722dd1e2827870fcf" + }, + "paired-source/notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md": { + "bytes": 6406, + "sha256": "a75967ebc34e3bf2ff2c25c08e6c7f1a61b0c0d171cfd1b62196ae2caaf2c610" + }, + "paired-source/notices/research/gauge44-slots-t16/construction/NOTICE.md": { + "bytes": 950, + "sha256": "defe7e44af610e25a6c50c1c3b2efd0972d0690574995c0c872fc50eebf4c816" + }, + "paired-source/notices/research/gauge44-slots-t16/t16/NOTICE.md": { + "bytes": 2245, + "sha256": "902370e6bfcd39dbea2ece474f15fccbcce3b8e966b2b94066bd03e5174591b5" + } + }, + "initial_file_changes": [], + "initial_files_checked_unchanged": 15, + "manifest_mismatches": [], + "manifest_sha256": "12cfbbfb8e2412cce6d8688a70aafaf6f1b4e77e93a3b443aac333fab28a28b7", + "missing_files": [], + "payload_files": 28, + "status": "PASS_FINAL_ANNEX_INTEGRITY", + "total_bytes_including_manifest": 279665, + "total_files_including_manifest": 29, + "unexpected_files": [], + "wrapper_relative_links": [ + { + "exists": true, + "from": "README.md", + "target": "frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.md" + }, + { + "exists": true, + "from": "README.md", + "target": "frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.json" + }, + { + "exists": true, + "from": "README.md", + "target": "frozen/lanes/source-domain/productive-owner-drift/PROOF.md" + }, + { + "exists": true, + "from": "README.md", + "target": "frozen/lanes/source-domain/productive-owner-drift/REVIEW-STATUS.md" + }, + { + "exists": true, + "from": "README.md", + "target": "evidence/SOURCE-AUDIT-normal.json" + }, + { + "exists": true, + "from": "README.md", + "target": "evidence/PUBLISHED-SOURCE-IDENTITY.json" + }, + { + "exists": true, + "from": "README.md", + "target": "NOTICE.md" + }, + { + "exists": true, + "from": "NOTICE.md", + "target": "paired-source/NOTICE.md" + }, + { + "exists": true, + "from": "NOTICE.md", + "target": "evidence/PUBLISHED-SOURCE-IDENTITY.json" + }, + { + "exists": true, + "from": "NOTICE.md", + "target": "paired-source/notices/LICENSE" + } + ] +} diff --git a/research/publication-reviews/original-paired-gap/productive-owner-review/INITIAL-INPUT-HASHES.json b/research/publication-reviews/original-paired-gap/productive-owner-review/INITIAL-INPUT-HASHES.json new file mode 100644 index 0000000000..98ee062afc --- /dev/null +++ b/research/publication-reviews/original-paired-gap/productive-owner-review/INITIAL-INPUT-HASHES.json @@ -0,0 +1,17 @@ +{ + "SOURCES.json": "ca5f5527d0bceaf8564b19b04bbb84ec7ca686a6dba4c940b2d20f17a629ce97", + "check_sources.py": "b954f85361d76e02d3bbb23b04de4e73dabb981b81d5edefdeacfa491894ad40", + "frozen/lanes/circuit-interface/productive-owner-review/FIRST-OWNER-EXCHANGES.json": "5bf753a968040842192974e11374454716afb857eb0f96be84c985d782c6a12a", + "frozen/lanes/circuit-interface/productive-owner-review/REVIEW.json": "e7f57ef06675fd3dd0e54e119590be6c411aa58cde89b6845656fad2ff1e6b04", + "frozen/lanes/circuit-interface/productive-owner-review/REVIEW.md": "e11b224b6d0e46e14086188c4476bb0ff260374e02ff72626af3c32b986dec55", + "frozen/lanes/circuit-interface/productive-owner-review/review_drift.py": "5c0d25220cecf772c5ca79895a5b87008b8d5b6fda60c7506a5b0d92d8b019ea", + "frozen/lanes/circuit-interface/productive-owner-review/screen_first_owner.py": "0d9d856ed81ad406ce3eb1cdb44e458b739c7ca8e6f35f215db58ddedeacee5d", + "frozen/lanes/coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md": "1783100d3333c83828b47bb89f267db54b791f4c4fe952b5a62fbdb5087c902f", + "frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.json": "0a1c7fd42130f6078f011e32e6b2fcc6f2002eb9532d4d5d0de5b91e75fabe59", + "frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.md": "3a113ede36815a85f1d15201d682959b0aa40f3fbaa5ce423600d595b707bc15", + "frozen/lanes/encoded-controller/PRODUCTIVE-OWNER-DRIFT.md": "afc421177ab5ac693d6a0f7fa9f3fcd56b9f324f3bedbcf0061826139223a691", + "frozen/lanes/encoded-controller/REPAIRED-OWNER-DRIFT.md": "c34df7c493b38cbd1c7c77c21cb31fef6cc84e33ce1f51c60aeca780aff82ce0", + "frozen/lanes/source-domain/productive-owner-drift/PROOF.md": "50f1af3b6614fd0a687b0557ff7b00539cfc23743ef747b576fad75fe72fdcab", + "frozen/lanes/source-domain/productive-owner-drift/REPAIR.json": "847c35e0709f115f57543d3cb6f5fca1d30b58ace17807d3b5c61398b21ddd40", + "frozen/lanes/source-domain/productive-owner-drift/REVIEW-STATUS.md": "b6993dd6ed819f8538a22c463988811308f838074ea33aeb2258753ae1fb2dfd" +} diff --git a/research/publication-reviews/original-paired-gap/productive-owner-review/NORMAL-CHECKS.json b/research/publication-reviews/original-paired-gap/productive-owner-review/NORMAL-CHECKS.json new file mode 100644 index 0000000000..7dc50f9926 --- /dev/null +++ b/research/publication-reviews/original-paired-gap/productive-owner-review/NORMAL-CHECKS.json @@ -0,0 +1,9 @@ +{ + "checker_sha256": "b954f85361d76e02d3bbb23b04de4e73dabb981b81d5edefdeacfa491894ad40", + "mathematical_replay_performed": false, + "scope": "Fresh source-integrity audit for the written change-of-coordinates proof. No native phase, owner-history, matching, global defect, or restoration replay.", + "source_count": 13, + "source_manifest_sha256": "ca5f5527d0bceaf8564b19b04bbb84ec7ca686a6dba4c940b2d20f17a629ce97", + "status": "PASS_PRODUCTIVE_OWNER_VIEW_SOURCE_AUDIT", + "written_review_pins_checked": 4 +} diff --git a/research/publication-reviews/original-paired-gap/productive-owner-review/OPTIMIZED-CHECKS.json b/research/publication-reviews/original-paired-gap/productive-owner-review/OPTIMIZED-CHECKS.json new file mode 100644 index 0000000000..7dc50f9926 --- /dev/null +++ b/research/publication-reviews/original-paired-gap/productive-owner-review/OPTIMIZED-CHECKS.json @@ -0,0 +1,9 @@ +{ + "checker_sha256": "b954f85361d76e02d3bbb23b04de4e73dabb981b81d5edefdeacfa491894ad40", + "mathematical_replay_performed": false, + "scope": "Fresh source-integrity audit for the written change-of-coordinates proof. No native phase, owner-history, matching, global defect, or restoration replay.", + "source_count": 13, + "source_manifest_sha256": "ca5f5527d0bceaf8564b19b04bbb84ec7ca686a6dba4c940b2d20f17a629ce97", + "status": "PASS_PRODUCTIVE_OWNER_VIEW_SOURCE_AUDIT", + "written_review_pins_checked": 4 +} diff --git a/research/publication-reviews/original-paired-gap/productive-owner-review/PROOF-REVIEW.md b/research/publication-reviews/original-paired-gap/productive-owner-review/PROOF-REVIEW.md new file mode 100644 index 0000000000..222039c0f3 --- /dev/null +++ b/research/publication-reviews/original-paired-gap/productive-owner-review/PROOF-REVIEW.md @@ -0,0 +1,81 @@ +# Productive-owner view proof review + +The narrow physical-view theorem passes this proof review. It describes +the local content map of the unchanged physical word. It does not +restore global owner drift or give a new supplier. This is a separate +OpenAI Codex agent review, not independent human review or a formal +proof. + +The reviewer read the workspace PR description standard. Final PR links, +rendering, and published readback remain the coordinator's checks. + +## The ordered coordinate change + +In the invocation chart, the old owner has frame +`O=X_delta product_(j in W) C_ej`; the fresh mode has frame `P`. +The complete local native job has transform `F_L`. The stated frames +are products of convolution operators and translations, so +`Delta=P^-1 O` commutes with `F_L`. This gives the same relative mode +operator at input and output. The proof does not assume that Delta is +monomial, the same on every mode, or the earlier fresh-mode gauge. + +Let the physical word be `M`, with fresh input and output frame maps +`A_in` and `A_out`. Its reviewed fresh logical map is +`B=A_out^-1 M A_in`. The old frame maps are `A_in D_in` and +`A_out D_out`. Their logical map is therefore exactly +`D_out^-1 B D_in`. This calculation fixes the order of the factors. +It introduces no executed Delta, inverse Delta, normalization child, +or physical instruction. + +The example is consistent with this identity. Substitution of +`z=Delta h` and `v=Delta h'` into `v=-z-Gx` and +`y'=y+x+Hv` gives `h'=-h-Delta^-1 Gx` and +`y'=y+x+H Delta h'`. Delta must remain between the actual query and +response operators. It cannot be commuted through them without a +separate argument. + +Invertible changes of logical coordinates preserve the arbitrary input +domain, including correlations between mode and helper contents. A +shared ordinary owner is permitted only through complete restored jobs +at the checked consecutive frames and on the declared pending factors. +The proof uses the stated matching, owner-history, whole-job wrapper, +and window premises. It does not prove those premises again or replace +an internal circuit fragment by its endpoint. + +No physical conversion follows solely from a different logical frame +label. If a later construction requires the original fresh coefficients +or endpoint, it still needs an explicit conversion and its cost. All +actual monomial entry and output views also retain their map and scalar +invoice obligations. + +## Known global failure and verification boundary + +The fixed original and repaired complete words are known to fail. In +the retained exact constant-sector replay, family 13005 equal to one +and all other inputs zero gives output `-1/4` in family 112, which +should be zero. This holds with the original signs and with a negation +after every mode occurrence. The retained full inverse restores the +input. Thus the obstruction is the wrong output map, not irreversible +loss of information. This review retains that historical evidence; it +does not claim a new global-defect replay. + +The 37-exchange alias repair, 74-position minimum, complete owner +history, and first-owner replacement screen remain separately reviewed +source results. They are not consequences of the view theorem and do +not establish a successful global owner construction. + +There is no numerical checker for the general view theorem. Its +validation here is the ordered operator argument above. The annex's +source auditor was run from a relocated copy in normal Python and with +`-O`. Both receipts are equal and explicitly set +`mathematical_replay_performed=false`. The auditor verifies 13 retained +files and all four source pins of the historical written review. +An additional direct comparison confirms that all 13 files match the +campaign originals. + +No native-phase replay, owner-history replay, matching replay, global +restoration, complete finite invoice, recursive supplier admission, or +kappa calculation ran for this annex review. The included older global +checkers are historical evidence; their full runtime input closure is +not advertised as part of this narrow annex. No source rewrite or +fragile workaround was introduced. diff --git a/research/publication-reviews/original-paired-gap/productive-owner-review/PUBLISHED-SOURCE-CHECK.json b/research/publication-reviews/original-paired-gap/productive-owner-review/PUBLISHED-SOURCE-CHECK.json new file mode 100644 index 0000000000..d1a1af98dd --- /dev/null +++ b/research/publication-reviews/original-paired-gap/productive-owner-review/PUBLISHED-SOURCE-CHECK.json @@ -0,0 +1,70 @@ +{ + "files": [ + { + "exact_match": true, + "git_blob": "c0c9752a66f1863c0e0398fc733bf13b0233bf6a", + "path": "paired-source/NOTICE.md", + "repository_path": "research/original-paired-gap/NOTICE.md", + "sha256": "06ebe05bf4c5abcfa840a9b2bd3b58059b293dd23fc23eb9ca8454a56d1c9e5a", + "source_commit": "f917bc1b4a769a241349eda7c0e22e374548cf58" + }, + { + "exact_match": true, + "git_blob": "dbef0b58a20efa3942a45c98a9a4a844dfca5cda", + "path": "paired-source/SOURCES.json", + "repository_path": "research/original-paired-gap/SOURCES.json", + "sha256": "2ca472d13712383755b7f25794edb810e97401ecfd3fc8b1aa1b68a354b1b581", + "source_commit": "f917bc1b4a769a241349eda7c0e22e374548cf58" + }, + { + "exact_match": true, + "git_blob": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64", + "path": "paired-source/notices/LICENSE", + "repository_path": "research/original-paired-gap/notices/LICENSE", + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4", + "source_commit": "f917bc1b4a769a241349eda7c0e22e374548cf58" + }, + { + "exact_match": true, + "git_blob": "30d0c8cd3ca119c2eb8765908f44e483dda4caea", + "path": "paired-source/notices/research/gauge44-slots-t16/NOTICE.md", + "repository_path": "research/original-paired-gap/notices/research/gauge44-slots-t16/NOTICE.md", + "sha256": "7a8d17b04da1e6c9d0ec217fb5bda72faa09d9a21695128722dd1e2827870fcf", + "source_commit": "f917bc1b4a769a241349eda7c0e22e374548cf58" + }, + { + "exact_match": true, + "git_blob": "ebc24a0168c65c48c771dcf4e89359afc418e848", + "path": "paired-source/notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md", + "repository_path": "research/original-paired-gap/notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md", + "sha256": "a75967ebc34e3bf2ff2c25c08e6c7f1a61b0c0d171cfd1b62196ae2caaf2c610", + "source_commit": "f917bc1b4a769a241349eda7c0e22e374548cf58" + }, + { + "exact_match": true, + "git_blob": "16b0507070427fb5bb20e7783c05768b8cdb3265", + "path": "paired-source/notices/research/gauge44-slots-t16/construction/NOTICE.md", + "repository_path": "research/original-paired-gap/notices/research/gauge44-slots-t16/construction/NOTICE.md", + "sha256": "defe7e44af610e25a6c50c1c3b2efd0972d0690574995c0c872fc50eebf4c816", + "source_commit": "f917bc1b4a769a241349eda7c0e22e374548cf58" + }, + { + "exact_match": true, + "git_blob": "403f4afffb49ef96a3ec1a8053b95cb9346da3ea", + "path": "paired-source/notices/research/gauge44-slots-t16/t16/NOTICE.md", + "repository_path": "research/original-paired-gap/notices/research/gauge44-slots-t16/t16/NOTICE.md", + "sha256": "902370e6bfcd39dbea2ece474f15fccbcce3b8e966b2b94066bd03e5174591b5", + "source_commit": "f917bc1b4a769a241349eda7c0e22e374548cf58" + }, + { + "exact_match": true, + "git_blob": "fe63433f9d95a505bbeba2e722666773be64e832", + "path": "frozen/lanes/coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md", + "repository_path": "research/original-paired-gap/evidence/NATIVE-REVIEW.md", + "sha256": "1783100d3333c83828b47bb89f267db54b791f4c4fe952b5a62fbdb5087c902f", + "source_commit": "f917bc1b4a769a241349eda7c0e22e374548cf58" + } + ], + "method": "Read git cat-file blob COMMIT:PATH from the local repository, then compare exact bytes, SHA-256, and Git blob SHA-1.", + "status": "PASS_EIGHT_EXACT_PUBLISHED_GIT_OBJECTS" +} diff --git a/research/publication-reviews/original-paired-gap/productive-owner-review/REVIEW.json b/research/publication-reviews/original-paired-gap/productive-owner-review/REVIEW.json new file mode 100644 index 0000000000..2bc5cd47a9 --- /dev/null +++ b/research/publication-reviews/original-paired-gap/productive-owner-review/REVIEW.json @@ -0,0 +1,207 @@ +{ + "accepted_scope": [ + "Ordered local physical-view identity B_old=D_out^-1 B D_in for unchanged physical word", + "Same relative mode operator at both cuts under the stated commutation premise", + "Arbitrary correlated contents under the inherited complete-job, owner, matching, and wrapper premises" + ], + "annex_manifest_sha256": "12cfbbfb8e2412cce6d8688a70aafaf6f1b4e77e93a3b443aac333fab28a28b7", + "body_claim_check": { + "commands_and_expected_status_match_runner": true, + "commit_placeholder": "COMMIT", + "file": "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261022/original-paired-gap-owner-body-addendum.template.md", + "limitations_and_no_complete_kappa_improvement_present": true, + "mathematical_claims_match_reviewed_annex": true, + "not_checked": [ + "Final publication commit links", + "GitHub rendered Markdown", + "Published body and rendered readback" + ], + "scope": "Read the complete addendum draft. The coordinator must complete publication checks after replacing COMMIT.", + "sha256": "145ecacb2298b4ce43875cafe263b4d0a3b636e8223ee9c829ab84153c698e0c", + "status": "PASS_BODY_CLAIMS_ONLY" + }, + "date": "2026-10-22", + "final_files": { + "ANNEX-MANIFEST.json": { + "bytes": 5246, + "sha256": "12cfbbfb8e2412cce6d8688a70aafaf6f1b4e77e93a3b443aac333fab28a28b7" + }, + "NOTICE.md": { + "bytes": 1080, + "sha256": "0438424cfde91bc47e1dfb73810f9c2ab1a5077d96c211f498ef265a46b50fe8" + }, + "README.md": { + "bytes": 5508, + "sha256": "1795deb0b13f3250cc312cabfc4c9831e2484ca7e9dd8ebfe6ef97421bdd26ec" + }, + "SOURCES.json": { + "bytes": 4758, + "sha256": "ca5f5527d0bceaf8564b19b04bbb84ec7ca686a6dba4c940b2d20f17a629ce97" + }, + "check_sources.py": { + "bytes": 1887, + "sha256": "b954f85361d76e02d3bbb23b04de4e73dabb981b81d5edefdeacfa491894ad40" + }, + "evidence/DOCUMENT-LINKS.json": { + "bytes": 3934, + "sha256": "fee9fe8be59093c528b09a8193915760225177d238337503bc730b51509f3157" + }, + "evidence/PUBLISHED-SOURCE-IDENTITY.json": { + "bytes": 3210, + "sha256": "ddc9d532faf63cab7d8f376d6d9874efb185f19f087843cca215fa16814b89e6" + }, + "evidence/SOURCE-AUDIT-normal.json": { + "bytes": 510, + "sha256": "d42a53fb571945019e29597137140a365da6437c8a8bff9676aba2ac38777585" + }, + "evidence/SOURCE-AUDIT-optimized.json": { + "bytes": 510, + "sha256": "d42a53fb571945019e29597137140a365da6437c8a8bff9676aba2ac38777585" + }, + "frozen/lanes/circuit-interface/productive-owner-review/FIRST-OWNER-EXCHANGES.json": { + "bytes": 93678, + "sha256": "5bf753a968040842192974e11374454716afb857eb0f96be84c985d782c6a12a" + }, + "frozen/lanes/circuit-interface/productive-owner-review/REVIEW.json": { + "bytes": 11965, + "sha256": "e7f57ef06675fd3dd0e54e119590be6c411aa58cde89b6845656fad2ff1e6b04" + }, + "frozen/lanes/circuit-interface/productive-owner-review/REVIEW.md": { + "bytes": 7379, + "sha256": "e11b224b6d0e46e14086188c4476bb0ff260374e02ff72626af3c32b986dec55" + }, + "frozen/lanes/circuit-interface/productive-owner-review/review_drift.py": { + "bytes": 19232, + "sha256": "5c0d25220cecf772c5ca79895a5b87008b8d5b6fda60c7506a5b0d92d8b019ea" + }, + "frozen/lanes/circuit-interface/productive-owner-review/screen_first_owner.py": { + "bytes": 7001, + "sha256": "0d9d856ed81ad406ce3eb1cdb44e458b739c7ca8e6f35f215db58ddedeacee5d" + }, + "frozen/lanes/coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md": { + "bytes": 7579, + "sha256": "1783100d3333c83828b47bb89f267db54b791f4c4fe952b5a62fbdb5087c902f" + }, + "frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.json": { + "bytes": 1346, + "sha256": "0a1c7fd42130f6078f011e32e6b2fcc6f2002eb9532d4d5d0de5b91e75fabe59" + }, + "frozen/lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.md": { + "bytes": 4001, + "sha256": "3a113ede36815a85f1d15201d682959b0aa40f3fbaa5ce423600d595b707bc15" + }, + "frozen/lanes/encoded-controller/PRODUCTIVE-OWNER-DRIFT.md": { + "bytes": 4624, + "sha256": "afc421177ab5ac693d6a0f7fa9f3fcd56b9f324f3bedbcf0061826139223a691" + }, + "frozen/lanes/encoded-controller/REPAIRED-OWNER-DRIFT.md": { + "bytes": 1690, + "sha256": "c34df7c493b38cbd1c7c77c21cb31fef6cc84e33ce1f51c60aeca780aff82ce0" + }, + "frozen/lanes/source-domain/productive-owner-drift/PROOF.md": { + "bytes": 6900, + "sha256": "50f1af3b6614fd0a687b0557ff7b00539cfc23743ef747b576fad75fe72fdcab" + }, + "frozen/lanes/source-domain/productive-owner-drift/REPAIR.json": { + "bytes": 50536, + "sha256": "847c35e0709f115f57543d3cb6f5fca1d30b58ace17807d3b5c61398b21ddd40" + }, + "frozen/lanes/source-domain/productive-owner-drift/REVIEW-STATUS.md": { + "bytes": 2758, + "sha256": "b6993dd6ed819f8538a22c463988811308f838074ea33aeb2258753ae1fb2dfd" + }, + "paired-source/NOTICE.md": { + "bytes": 3258, + "sha256": "06ebe05bf4c5abcfa840a9b2bd3b58059b293dd23fc23eb9ca8454a56d1c9e5a" + }, + "paired-source/SOURCES.json": { + "bytes": 8153, + "sha256": "2ca472d13712383755b7f25794edb810e97401ecfd3fc8b1aa1b68a354b1b581" + }, + "paired-source/notices/LICENSE": { + "bytes": 11357, + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4" + }, + "paired-source/notices/research/gauge44-slots-t16/NOTICE.md": { + "bytes": 1964, + "sha256": "7a8d17b04da1e6c9d0ec217fb5bda72faa09d9a21695128722dd1e2827870fcf" + }, + "paired-source/notices/research/gauge44-slots-t16/UPSTREAM-NOTICE.md": { + "bytes": 6406, + "sha256": "a75967ebc34e3bf2ff2c25c08e6c7f1a61b0c0d171cfd1b62196ae2caaf2c610" + }, + "paired-source/notices/research/gauge44-slots-t16/construction/NOTICE.md": { + "bytes": 950, + "sha256": "defe7e44af610e25a6c50c1c3b2efd0972d0690574995c0c872fc50eebf4c816" + }, + "paired-source/notices/research/gauge44-slots-t16/t16/NOTICE.md": { + "bytes": 2245, + "sha256": "902370e6bfcd39dbea2ece474f15fccbcce3b8e966b2b94066bd03e5174591b5" + } + }, + "fragile_workaround_introduced": false, + "fresh_check_receipt": { + "path": "SOURCE-AUDIT-REPLAY.json", + "sha256": "c1fdb7a9be92b4dbfb499559c183fa633576a38b38a8e3e1afdadfa0434fe341" + }, + "fresh_checks": { + "checks": 2, + "expected_status": "PASS_PRODUCTIVE_OWNER_VIEW_SOURCE_AUDIT", + "mathematical_replay_performed": false, + "normal_and_optimized_receipts_equal": true, + "normal_and_optimized_source_audits": true, + "written_operator_proof_review_performed": true + }, + "frozen_campaign_source_files_checked": 13, + "frozen_source_changed": false, + "initial_input_files_unchanged": 15, + "known_failure_retained": "The fixed original and repaired complete words fail the retained family 13005 -> family 112 = -1/4 witness under both mode-sign variants. No new global-defect replay was performed.", + "material_findings": [], + "new_research_performed": false, + "no_complete_kappa_improvement": true, + "omitted_checks": [ + "Native-phase replay", + "Matching replay", + "Owner-history replay", + "Global-defect replay", + "Global restoration", + "Complete finite invoice", + "Recursive supplier admission", + "Complete kappa calculation" + ], + "package": "/Users/aliromman/Projects/IntegerMultiplicationBounds/work/centre-encoding-campaign-20261014/publication-wrap-20261022/annexes/original-paired-gap-owner", + "payload_files": 28, + "proof_review": { + "path": "PROOF-REVIEW.md", + "sha256": "ee5182e143c5a61140311d02956301b7a66ac5e0944ce9e76b34222849c7239d" + }, + "publication_not_performed": true, + "published_source_identity": { + "commit": "f917bc1b4a769a241349eda7c0e22e374548cf58", + "exact_git_objects_checked": 8, + "receipt": "PUBLISHED-SOURCE-CHECK.json", + "receipt_sha256": "0d25bfe213137d106eee0b3ddbe4caa09b8e44f24c305a0b62a28d6fc79c99a6" + }, + "review_evidence_sha256": { + "BODY-CLAIM-CHECK.json": "17e94198f30711e67c9fcff563d4cc8d39ddcb1196847990ae95aff021074640", + "CAMPAIGN-SOURCE-CHECK.json": "bf88d0162510b2eac285c19e208fc7702ef856e3a3bca4dcf4aa45b3a2de177f", + "FINAL-ANNEX-INTEGRITY.json": "4f7e16ebd22e2a77e415369db6d59db02afa0e4a79f9d25733e10183764341f4", + "INITIAL-INPUT-HASHES.json": "ce8774493902e76b7fe67323244faee524ede94cfc0a612145b49f6747857c20", + "NORMAL-CHECKS.json": "d42a53fb571945019e29597137140a365da6437c8a8bff9676aba2ac38777585", + "OPTIMIZED-CHECKS.json": "d42a53fb571945019e29597137140a365da6437c8a8bff9676aba2ac38777585", + "PROOF-REVIEW.md": "ee5182e143c5a61140311d02956301b7a66ac5e0944ce9e76b34222849c7239d", + "PUBLISHED-SOURCE-CHECK.json": "0d25bfe213137d106eee0b3ddbe4caa09b8e44f24c305a0b62a28d6fc79c99a6", + "REVIEW.md": "e4150788b76747477c5bcf2d25b8e048ccfbc540a39e0dbb16ef820743892821", + "SOURCE-AUDIT-REPLAY.json": "c1fdb7a9be92b4dbfb499559c183fa633576a38b38a8e3e1afdadfa0434fe341", + "SOURCE-PROOF-PINS.json": "7f32ec99de96b3cd064887a3134523423621f0467c2a8011bc36c9987f065d66" + }, + "review_kind": "Bounded proof, scope, source, and publication-package review; not human review or formal proof", + "reviewer": "Separate OpenAI Codex agent reciprocal_package", + "status": "PASS_INDEPENDENT_ANNEX_REVIEW", + "summary": { + "path": "REVIEW.md", + "sha256": "e4150788b76747477c5bcf2d25b8e048ccfbc540a39e0dbb16ef820743892821" + }, + "total_bytes_including_manifest": 279665, + "total_files_including_manifest": 29 +} diff --git a/research/publication-reviews/original-paired-gap/productive-owner-review/REVIEW.md b/research/publication-reviews/original-paired-gap/productive-owner-review/REVIEW.md new file mode 100644 index 0000000000..96e185653e --- /dev/null +++ b/research/publication-reviews/original-paired-gap/productive-owner-review/REVIEW.md @@ -0,0 +1,62 @@ +# Productive-owner view annex review + +Status: `PASS_INDEPENDENT_ANNEX_REVIEW`. + +The final narrow annex passes this separate OpenAI Codex agent review. +No material proof, scope, source, or integrity defect was found. This is +not a human review or a formal proof. The [proof review](PROOF-REVIEW.md) +checks the ordered identity `B_old=D_out^-1 B D_in` for the unchanged +physical word under the declared old-owner frames. The calculation does +not execute Delta or its inverse. Delta can differ across modes and need +not be monomial. The same relative mode operator is valid at both local +cuts because it commutes with the local complete transform. + +The result gives a local content map. It does not restore the original +fresh coefficients or solve global owner drift. The known failure stays +explicit: input family 13005 equal to one gives output family 112 equal +to `-1/4` in the retained fixed-word test. The retained original-sign and +mode-negated variants both fail. That evidence is inherited; no new +global-defect replay ran. Shared-owner, matching, window, and complete +restored-job premises retain their stated scope and costs. + +There is no numerical checker for the general view theorem. Its +validation in this review is the ordered operator proof. The fresh +[source audit runs](SOURCE-AUDIT-REPLAY.json) check integrity only. They +ran from a relocated copy with one process in normal Python and with +`-O`: + +```sh +/opt/homebrew/opt/python@3.14/bin/python3.14 -I -B /tmp/productive-owner-view-independent-20261022/check_sources.py --out /tmp/productive-owner-view-independent-results-20261022/normal +/opt/homebrew/opt/python@3.14/bin/python3.14 -I -B -O /tmp/productive-owner-view-independent-20261022/check_sources.py --out /tmp/productive-owner-view-independent-results-20261022/optimized +``` + +Both runs returned `PASS_PRODUCTIVE_OWNER_VIEW_SOURCE_AUDIT`. Their +receipts are byte-identical and set `mathematical_replay_performed=false`. +The auditor checked 13 files and all four source pins of the historical +written review. A [direct source comparison](CAMPAIGN-SOURCE-CHECK.json) +also verified all 13 campaign originals. + +The [final integrity check](FINAL-ANNEX-INTEGRITY.json) binds manifest +`12cfbbfb8e2412cce6d8688a70aafaf6f1b4e77e93a3b443aac333fab28a28b7`: +28 payload files plus the manifest, 279,665 bytes in total. All 15 files +used in the fresh audits are unchanged. The final additions contain the +README, notices, and retained evidence. All local links in the final +README and notice resolve. + +The [published-source check](PUBLISHED-SOURCE-CHECK.json) independently +compared eight exact Git objects at +`f917bc1b4a769a241349eda7c0e22e374548cf58`. These include the inherited +native review, source manifest, root notice, license, and nested notices. +Their bytes, SHA-256 hashes, and Git blob IDs match the retained copies. +The new notice preserves this source credit and states the AI assistance. + +No native-phase, matching, owner-history, global-restoration, complete +invoice, recursive-supplier, or kappa replay ran for this annex. The +included older defect checkers are historical source evidence; the +annex does not claim to contain their full runtime closure. The result +gives no complete kappa improvement. + +The workspace PR description standard was read. The annex is staged +separately for the coordinator to add to the existing PR. Final commit +links, GitHub rendering, the PR edit, and published readback remain with +the coordinator. No source rewrite or fragile workaround was introduced. diff --git a/research/publication-reviews/original-paired-gap/productive-owner-review/SOURCE-AUDIT-REPLAY.json b/research/publication-reviews/original-paired-gap/productive-owner-review/SOURCE-AUDIT-REPLAY.json new file mode 100644 index 0000000000..609bae30fe --- /dev/null +++ b/research/publication-reviews/original-paired-gap/productive-owner-review/SOURCE-AUDIT-REPLAY.json @@ -0,0 +1,36 @@ +{ + "checks": [ + { + "command": [ + "/opt/homebrew/opt/python@3.14/bin/python3.14", + "-I", + "-B", + "/tmp/productive-owner-view-independent-20261022/check_sources.py", + "--out", + "/tmp/productive-owner-view-independent-results-20261022/normal" + ], + "mode": "normal", + "receipt_sha256": "d42a53fb571945019e29597137140a365da6437c8a8bff9676aba2ac38777585", + "status": "PASS_PRODUCTIVE_OWNER_VIEW_SOURCE_AUDIT", + "stdout": "PASS_PRODUCTIVE_OWNER_VIEW_SOURCE_AUDIT" + }, + { + "command": [ + "/opt/homebrew/opt/python@3.14/bin/python3.14", + "-I", + "-B", + "-O", + "/tmp/productive-owner-view-independent-20261022/check_sources.py", + "--out", + "/tmp/productive-owner-view-independent-results-20261022/optimized" + ], + "mode": "optimized", + "receipt_sha256": "d42a53fb571945019e29597137140a365da6437c8a8bff9676aba2ac38777585", + "status": "PASS_PRODUCTIVE_OWNER_VIEW_SOURCE_AUDIT", + "stdout": "PASS_PRODUCTIVE_OWNER_VIEW_SOURCE_AUDIT" + } + ], + "mathematical_replay_performed": false, + "normal_optimized_equal": true, + "status": "PASS_RELOCATED_PRODUCTIVE_OWNER_SOURCE_AUDITS" +} diff --git a/research/publication-reviews/original-paired-gap/productive-owner-review/SOURCE-PROOF-PINS.json b/research/publication-reviews/original-paired-gap/productive-owner-review/SOURCE-PROOF-PINS.json new file mode 100644 index 0000000000..80cc0d3bc3 --- /dev/null +++ b/research/publication-reviews/original-paired-gap/productive-owner-review/SOURCE-PROOF-PINS.json @@ -0,0 +1,12 @@ +{ + "files": { + "lanes/circuit-interface/productive-owner-review/REVIEW.md": "e11b224b6d0e46e14086188c4476bb0ff260374e02ff72626af3c32b986dec55", + "lanes/coherent-port/ORIGINAL-PAIRED-GAP-NATIVE-REVIEW.md": "1783100d3333c83828b47bb89f267db54b791f4c4fe952b5a62fbdb5087c902f", + "lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.json": "0a1c7fd42130f6078f011e32e6b2fcc6f2002eb9532d4d5d0de5b91e75fabe59", + "lanes/coherent-port/PRODUCTIVE-OWNER-VIEW-REVIEW.md": "3a113ede36815a85f1d15201d682959b0aa40f3fbaa5ce423600d595b707bc15", + "lanes/source-domain/productive-owner-drift/PROOF.md": "50f1af3b6614fd0a687b0557ff7b00539cfc23743ef747b576fad75fe72fdcab", + "lanes/source-domain/productive-owner-drift/REPAIR.json": "847c35e0709f115f57543d3cb6f5fca1d30b58ace17807d3b5c61398b21ddd40", + "lanes/source-domain/productive-owner-drift/REVIEW-STATUS.md": "b6993dd6ed819f8538a22c463988811308f838074ea33aeb2258753ae1fb2dfd" + }, + "scope": "Source proof and checker reads before publication-annex review. This is not a fresh execution receipt." +}