From 2a24b155acccfe47fc61aac75c3d51ab4e0b1d5f Mon Sep 17 00:00:00 2001 From: DreamingOfClouds Date: Tue, 13 Oct 2026 06:05:14 -0500 Subject: [PATCH 1/2] helper-minimality: minimality of the shipped #656/#799 helper layers for their op multiset (no kappa claim) Frame-side lower bounds with scope and hypotheses: S1 Hall lemma (11 eight-line blocks, given shipped end-of-A frames), Lawler minimality (value-forced, shipped-order partner frames) of the S3/S4 copies, bridges and holders, the cut needing 8 centres, and the pre-read minimum 66. Single verify.sh with step-0 provenance (blob ids / sha256); open gaps stated. Co-Authored-By: Claude Opus 5.5 --- research/helper-minimality/LICENSE | 201 +++++ research/helper-minimality/MANIFEST.sha256 | 69 ++ research/helper-minimality/NOTICE.md | 37 + research/helper-minimality/README.md | 144 ++++ research/helper-minimality/SOURCES.json | 193 +++++ .../helper-minimality/cards/B128/coord.py | 61 ++ .../helper-minimality/cards/B128/retest.py | 53 ++ .../helper-minimality/cards/B147/oracle799.py | 114 +++ research/helper-minimality/cards/B155/ex.py | 83 +++ research/helper-minimality/cards/B159/ilp.py | 69 ++ research/helper-minimality/cards/B159/mdl.py | 70 ++ .../helper-minimality/cards/B159/pairsio.py | 12 + .../helper-minimality/cards/B167/blockscan.py | 46 ++ .../helper-minimality/cards/B167/extract.py | 41 + .../helper-minimality/cards/B167/level.py | 150 ++++ .../helper-minimality/cards/B171/lawler799.py | 93 +++ .../helper-minimality/cards/B171/pair799.py | 17 + .../helper-minimality/cards/B171/scan01.py | 40 + .../helper-minimality/cards/B171/scan01b.py | 59 ++ .../helper-minimality/cards/B174/check.py | 61 ++ .../helper-minimality/cards/B174/clique.py | 24 + .../helper-minimality/cards/B176/common.py | 17 + research/helper-minimality/cards/B176/val.py | 40 + research/helper-minimality/cards/B179/gate.py | 25 + .../helper-minimality/cards/B179/gate2.py | 78 ++ research/helper-minimality/cards/B182/b182.py | 55 ++ research/helper-minimality/cards/B98b/dyad.py | 84 +++ .../helper-minimality/cards/B98b/iface.py | 39 + .../helper-minimality/cards/B98b/synth.py | 62 ++ .../helper-minimality/cards/B98c/work/gate.py | 32 + .../helper-minimality/cards/B99/work/fr.py | 27 + .../helper-minimality/cards/B99/work/lib.py | 27 + .../helper-minimality/cards/B99/work/rep.py | 11 + .../helper-minimality/cards/SYN-18/planes.py | 14 + research/helper-minimality/checks/anchors.py | 31 + .../helper-minimality/checks/b128_table.py | 8 + research/helper-minimality/checks/expect.py | 31 + .../helper-minimality/checks/lawler_check.py | 27 + research/helper-minimality/checks/make_toy.py | 6 + .../helper-minimality/checks/pairs_sample.py | 27 + .../helper-minimality/evidence/B128-NOTES.md | 11 + .../helper-minimality/evidence/B128-all.txt | 272 +++++++ .../helper-minimality/evidence/B155-NOTES.md | 10 + .../helper-minimality/evidence/B159-NOTES.md | 12 + .../helper-minimality/evidence/B167-NOTES.md | 14 + .../helper-minimality/evidence/B171-NOTES.md | 17 + .../helper-minimality/evidence/B172-NOTES.md | 10 + .../helper-minimality/evidence/B174-NOTES.md | 21 + .../helper-minimality/evidence/B175-NOTES.md | 13 + .../helper-minimality/evidence/B176-NOTES.md | 12 + .../evidence/B178-VERIFIER-GAP.md | 16 + .../helper-minimality/evidence/B179-NOTES.md | 9 + .../helper-minimality/evidence/B182-NOTES.md | 13 + .../helper-minimality/evidence/B185-NOTES.md | 5 + .../helper-minimality/evidence/B82-NOTES.md | 17 + .../inputs/derived/pairs.json.gz | Bin 0 -> 190822 bytes .../inputs/ledger_helpers.csv | 493 ++++++++++++ .../inputs/main/03-motifs.tex | 700 ++++++++++++++++++ .../inputs/pr635/hpe_emit_local.py | 163 ++++ .../inputs/pr799/code/audit_allcold.py | 254 +++++++ .../inputs/pr799/code/emit_allcold.py | 150 ++++ .../construction/construct_gauge_xcentre.py | 381 ++++++++++ .../inputs/pr799/independent/audit_local.py | 171 +++++ .../inputs/words/656-CANONICAL-WORD.json.gz | Bin 0 -> 86519 bytes .../inputs/words/656-layers-FULL-WORD.json.gz | Bin 0 -> 58383 bytes .../words/799-X4-CANONICAL-WORD.json.gz | Bin 0 -> 83939 bytes .../inputs/words/799-X4-FULL-WORD.json.gz | Bin 0 -> 58977 bytes research/helper-minimality/requirements.txt | 4 + .../helper-minimality/scripts/provenance.py | 52 ++ research/helper-minimality/verify.sh | 121 +++ 70 files changed, 5219 insertions(+) create mode 100644 research/helper-minimality/LICENSE create mode 100644 research/helper-minimality/MANIFEST.sha256 create mode 100644 research/helper-minimality/NOTICE.md create mode 100644 research/helper-minimality/README.md create mode 100644 research/helper-minimality/SOURCES.json create mode 100644 research/helper-minimality/cards/B128/coord.py create mode 100644 research/helper-minimality/cards/B128/retest.py create mode 100644 research/helper-minimality/cards/B147/oracle799.py create mode 100644 research/helper-minimality/cards/B155/ex.py create mode 100644 research/helper-minimality/cards/B159/ilp.py create mode 100644 research/helper-minimality/cards/B159/mdl.py create mode 100644 research/helper-minimality/cards/B159/pairsio.py create mode 100644 research/helper-minimality/cards/B167/blockscan.py create mode 100644 research/helper-minimality/cards/B167/extract.py create mode 100644 research/helper-minimality/cards/B167/level.py create mode 100644 research/helper-minimality/cards/B171/lawler799.py create mode 100644 research/helper-minimality/cards/B171/pair799.py create mode 100644 research/helper-minimality/cards/B171/scan01.py create mode 100644 research/helper-minimality/cards/B171/scan01b.py create mode 100644 research/helper-minimality/cards/B174/check.py create mode 100644 research/helper-minimality/cards/B174/clique.py create mode 100644 research/helper-minimality/cards/B176/common.py create mode 100644 research/helper-minimality/cards/B176/val.py create mode 100644 research/helper-minimality/cards/B179/gate.py create mode 100644 research/helper-minimality/cards/B179/gate2.py create mode 100644 research/helper-minimality/cards/B182/b182.py create mode 100644 research/helper-minimality/cards/B98b/dyad.py create mode 100644 research/helper-minimality/cards/B98b/iface.py create mode 100644 research/helper-minimality/cards/B98b/synth.py create mode 100644 research/helper-minimality/cards/B98c/work/gate.py create mode 100644 research/helper-minimality/cards/B99/work/fr.py create mode 100644 research/helper-minimality/cards/B99/work/lib.py create mode 100644 research/helper-minimality/cards/B99/work/rep.py create mode 100644 research/helper-minimality/cards/SYN-18/planes.py create mode 100644 research/helper-minimality/checks/anchors.py create mode 100644 research/helper-minimality/checks/b128_table.py create mode 100644 research/helper-minimality/checks/expect.py create mode 100644 research/helper-minimality/checks/lawler_check.py create mode 100644 research/helper-minimality/checks/make_toy.py create mode 100644 research/helper-minimality/checks/pairs_sample.py create mode 100644 research/helper-minimality/evidence/B128-NOTES.md create mode 100644 research/helper-minimality/evidence/B128-all.txt create mode 100644 research/helper-minimality/evidence/B155-NOTES.md create mode 100644 research/helper-minimality/evidence/B159-NOTES.md create mode 100644 research/helper-minimality/evidence/B167-NOTES.md create mode 100644 research/helper-minimality/evidence/B171-NOTES.md create mode 100644 research/helper-minimality/evidence/B172-NOTES.md create mode 100644 research/helper-minimality/evidence/B174-NOTES.md create mode 100644 research/helper-minimality/evidence/B175-NOTES.md create mode 100644 research/helper-minimality/evidence/B176-NOTES.md create mode 100644 research/helper-minimality/evidence/B178-VERIFIER-GAP.md create mode 100644 research/helper-minimality/evidence/B179-NOTES.md create mode 100644 research/helper-minimality/evidence/B182-NOTES.md create mode 100644 research/helper-minimality/evidence/B185-NOTES.md create mode 100644 research/helper-minimality/evidence/B82-NOTES.md create mode 100644 research/helper-minimality/inputs/derived/pairs.json.gz create mode 100644 research/helper-minimality/inputs/ledger_helpers.csv create mode 100644 research/helper-minimality/inputs/main/03-motifs.tex create mode 100644 research/helper-minimality/inputs/pr635/hpe_emit_local.py create mode 100644 research/helper-minimality/inputs/pr799/code/audit_allcold.py create mode 100644 research/helper-minimality/inputs/pr799/code/emit_allcold.py create mode 100644 research/helper-minimality/inputs/pr799/construction/construct_gauge_xcentre.py create mode 100644 research/helper-minimality/inputs/pr799/independent/audit_local.py create mode 100644 research/helper-minimality/inputs/words/656-CANONICAL-WORD.json.gz create mode 100644 research/helper-minimality/inputs/words/656-layers-FULL-WORD.json.gz create mode 100644 research/helper-minimality/inputs/words/799-X4-CANONICAL-WORD.json.gz create mode 100644 research/helper-minimality/inputs/words/799-X4-FULL-WORD.json.gz create mode 100644 research/helper-minimality/requirements.txt create mode 100644 research/helper-minimality/scripts/provenance.py create mode 100755 research/helper-minimality/verify.sh diff --git a/research/helper-minimality/LICENSE b/research/helper-minimality/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/helper-minimality/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/helper-minimality/MANIFEST.sha256 b/research/helper-minimality/MANIFEST.sha256 new file mode 100644 index 0000000000..e29c55ed9a --- /dev/null +++ b/research/helper-minimality/MANIFEST.sha256 @@ -0,0 +1,69 @@ +c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 LICENSE +b9aee8d523d7cf7c25d4548a044657bd01964107e7bed053d92e303b16653f07 NOTICE.md +292e4b76638a3cd82c8859756ee82c37226c7c099a64018bfcf87a930938e29b README.md +22ccac9703500587fa05b6284c57559fbe9659b9e941a088b6fda79316769482 SOURCES.json +7bd22be98f336f6e58c0bc1f38b948f102d3eba7dff3caf29b3fd3a2eb0469b0 cards/B128/coord.py +e750f48b8a152c838165d18dd8eca47e0fda8194ef5326471a7724e6817f8687 cards/B128/retest.py +56029079e362b109f83132f248eca3ce484c7a5af24493c18fab4a9fa647a1c8 cards/B147/oracle799.py +f552309f82e970a38e94aef9a981cd7d5beeb76529da4be5b35575ee2892c89d cards/B155/ex.py +93289645ae06578e38ae521d8728dfce95689cef9bcb762dfba721707a1a66c4 cards/B159/ilp.py +2dedc34977390e08333a9e053e10236ae5cbeac5b9027173cf573fa4772b90e6 cards/B159/mdl.py +0142c631c1a5c3c665e0f301ef107ac5b77b6968a8620ea061c7425a6953c35a cards/B159/pairsio.py +d3da4b285f9a5c3ef130bf1804f2fd28ce21ab3ea25f5910efeaa9d03855bd39 cards/B167/blockscan.py +c3a95a569b6f73dcf3b558c7413419cd5f43f7cbff8bca7f795664c88359fed3 cards/B167/extract.py +86b8cb622061125eb1c274132a7f8123e01f5116688b9100c98881684819f70e cards/B167/level.py +33ac32a805f64fce7bbcc11fe6b2db8f5efceb7f9dc8593021be2d10181ee20e cards/B171/lawler799.py +09a6a0d97c706739ee1835b97a8b235f3ac2bee9860cea38cf69d6a63c701076 cards/B171/pair799.py +541f2d45c128603c9646ba6037c5df8651aec10d93c16076ec4893de98d0ee89 cards/B171/scan01.py +7df7f1e42648692b158b2796c03649e66e6ec328b4e6f10fa10abd32d3c37704 cards/B171/scan01b.py +c39e5900db3b3a351dbd8fcf127fe3819a6134596ba3b7b2587ff54f0b3dadd8 cards/B174/check.py +b7ab02a5700c7ac12ae8380d54b1ca003037c4b3d965e3485275dfcd62d7deb7 cards/B174/clique.py +d5763ffa07b5ca7ff3cf54f887c8ccd43a91b83461b4e97a3cb6d315de804f17 cards/B176/common.py +3a6e5403e192e71b76d58eafe021bdefc25f7670058ae43f32e13e2ba6f84333 cards/B176/val.py +9055546f03c392be6e0b7a5d7f5eb8858492d1b2782a6c68b511a62096367331 cards/B179/gate.py +1f375bfafcb1ae7105d1b3424325760b19523a8627d02c73ce764073495d066b cards/B179/gate2.py +528b59311b0fe289c8cef3bd3d05f444fc3efa2ea8650ca61556f098d4fbb281 cards/B182/b182.py +462d6078257354db5f15cbed75892b1b6f7b7916a81053c3eadfeb6371ecfedc cards/B98b/dyad.py +e6b1416b1b7052a2954b328dc5c618d5d6b097ebedbd0ac6d4ad24eea8ebe051 cards/B98b/iface.py +796ed379bc8edb6f7d836714b8765f873fbdb9478904de3f81ef855181745c1c cards/B98b/synth.py +6b7248e9f282174fe6f0fdabd7d9eeba059500e8364eff5b1420cf12efd626f7 cards/B98c/work/gate.py +22e11f58aac15380322a4e1e589187ecb3f041e995fbf5becee0b52af02c0ce2 cards/B99/work/fr.py +819053900ff1d49528f8d78a662ab9ef54832acf7d2f9899e49f5381e9ff62a3 cards/B99/work/lib.py +9647ede25d85eb4ed3c05512d3a9d3baf62537e9b5ef0685c590bfe3d71e1d75 cards/B99/work/rep.py +a8a0436efeedc5c7c6e9fd4715fc00fdae03de5fa8f2b18ad792d24be1fa39e5 cards/SYN-18/planes.py +0252eb13c800d840fc20bd472a8c3a125b95ec656c4a85b097820360e8091e15 checks/anchors.py +7d926468671ec30a3ab2fa2f39eb706de683774e4ea37b3f068ac7383dabbff4 checks/b128_table.py +fb18332a3adb4842c3662346aa7f6b5115debc04f1a392b6e9cbb423b7b83c8d checks/expect.py +ca65d570e63db75a9cd1838247f93bfdd8340dcc9f5d6ebe964ec138e64244cb checks/lawler_check.py +71e9de3515535adb1060e4149b590e6f3ad3a72b31eb06db5ce8f27336fa4b1f checks/make_toy.py +039de8726d9019e2d70fe1f70e98f194fa90151bd5476362684e3a2c32e11e35 checks/pairs_sample.py +5921df2221a76bbafa733835c9a68ff5be984cf4ed99cc420ad742fceb391755 evidence/B128-NOTES.md +bdde724b3d8113f5b024e211566479073abfb5f3d4a96fdca169fa1eab17860b evidence/B128-all.txt +7dbd405b2dcc8eb370feef32b867d6b12b7dce7b5cd9ad524c4f37bcf1cdc028 evidence/B155-NOTES.md +729d07bb52352eaf441228be28352c5d0efdab8927440298b6308313eec66dc0 evidence/B159-NOTES.md +9e371abf5132377e95a8a79e2a046bdc8263d71ccc03905c91e5e48d0ccd2a37 evidence/B167-NOTES.md +b45756d3f9097c182986329b62346d0d136aabe020d549641642b998a538516d evidence/B171-NOTES.md +023a4b5ff6610351e101731ce99be6bada712fe2a5fad4eb1a8005c2e9c229ca evidence/B172-NOTES.md +9968a78b131d89e0d262745f07c67104613fbdc366307ac6310d79c4947ae43d evidence/B174-NOTES.md +e2ae6da673123f9a86ad72203c55a4f2a52c61b3e6c23b0b324d7e155389d5e1 evidence/B175-NOTES.md +8c37caeb2b3188c12708bb897ee7cefa7febe1f89ff71cba5600514fbcdebee5 evidence/B176-NOTES.md +6d18ed47c6036ae81db423b4c7dc91610505a4ccc0c5851a784af5951818eb27 evidence/B178-VERIFIER-GAP.md +1ecb165c212c3acd476eb68b83189292e0f763407f30cff0eb45c4c7fabdf259 evidence/B179-NOTES.md +2e1eccb47d6631103e18eed03c29d1d8d9c935fa4eecd7cd758e99fd5d06ff03 evidence/B182-NOTES.md +4fa578a6aafba5b429a864505caec1688a54e274223b4bf0a989bbfaff37f8db evidence/B185-NOTES.md +9cbf48e3c0932ce286826b3a5807432a193275a5f4a6830a52401cbdacde0d54 evidence/B82-NOTES.md +cc5716bea4a523255b96add72427910c6606c7f3654c8a63652aa7df674ac339 inputs/derived/pairs.json.gz +71469db91a3c5672312dde85a9e463d5a6c4527b7cb6f2e2a03594eb59add409 inputs/ledger_helpers.csv +ed76761194988a01af77ead0ea6469cb5dcd29690ab985a0b5a4006b0f2b69bb inputs/main/03-motifs.tex +7e4a6fbc38c8228157b6311457d1496bf460291393043932d2c365f004f77805 inputs/pr635/hpe_emit_local.py +a87d7f4844ca963516637d249b14a0654f67f8047b6b265ae25b0cf30963e503 inputs/pr799/code/audit_allcold.py +17c110c7c8d219e79e7dce36b19c4781e7effa800086cec03384387ad9acc7aa inputs/pr799/code/emit_allcold.py +d8d295566ef2399af2da0707a4adc83e07aa26d2344c01a66bd0ca7684cf9217 inputs/pr799/construction/construct_gauge_xcentre.py +03afcfc9da428b3f6edac81c1fee7f277ab81b64998efae78380b63498dec6cd inputs/pr799/independent/audit_local.py +72a4952751383e2a5e84b967f1e76fdfda003fe5592df357a599232e586817e3 inputs/words/656-CANONICAL-WORD.json.gz +e2434318d38e5ab7d04d236e67f0da5b77a0fe57dfed9d817a83081921756c64 inputs/words/656-layers-FULL-WORD.json.gz +f1c2ede9276d4447c5857d0e9d32adb52f987b8adb643b45bde2c172d88c6ee9 inputs/words/799-X4-CANONICAL-WORD.json.gz +fc96c6dfb3e03efc144c2d0d1abd605a1b1bc081d39a5de27f21675864ecc766 inputs/words/799-X4-FULL-WORD.json.gz +d9a1f72b43ce1a97d5e39e2a910f1e365fdc960bee98dbfc5c47b05cb0a9a953 requirements.txt +78362221d7cba70b6e751338971feed720f7deba5965eeafa55fc24bd45cd4ed scripts/provenance.py +931d551308db32c582ec86de9e52576f97d1f8ea5a9eaeefbcd18785e5b811b0 verify.sh diff --git a/research/helper-minimality/NOTICE.md b/research/helper-minimality/NOTICE.md new file mode 100644 index 0000000000..9f9f46ec73 --- /dev/null +++ b/research/helper-minimality/NOTICE.md @@ -0,0 +1,37 @@ +# Notice + +Prepared by DreamingOfClouds with Claude Opus 5.5 (Anthropic), via Claude Code; Apache-2.0 (`LICENSE`, copied from the repository root). + +## New in this package + +`README.md`, `verify.sh`, `scripts/provenance.py` (adapted from #717), `SOURCES.json`, `requirements.txt`, `MANIFEST.sha256`, everything under `checks/` and +`cards/` (the swarm's card scripts, path edits only as listed in the README), `evidence/` (card notes, local paths removed) and the stored +pre-read pair table `inputs/derived/pairs.json.gz`. + +## Vendored, unchanged (git blob ids in `SOURCES.json`, checked by `scripts/provenance.py`) + +- **#799** (jeremykothe2), commit in `SOURCES.json`: `independent/audit_local.py` (the verifier AL), `code/audit_allcold.py`, `code/emit_allcold.py`, `construction/construct_gauge_xcentre.py` (line anchors of the cut hypothesis). +- **#635** (jeremykothe2): `hpe_emit_local.py` of the cold14 st2 code, taken from the copy on main (`research/complex-sw4-frame8/local/`); its sha256 equals the pin in #799 `construction/INPUTS.json`. +- Main at the base commit: `upstream/build/sections/03-motifs.tex` (spec schedule lines 78-83). + +## Rebuilt words and derived inputs (not files of any PR) + +The #656 canonical and layered words and the #799 X4 canonical and full words are rebuilt locally from the PRs' construction code and pinned by +the hashes the PRs publish (`SOURCES.json`, `derived`). `inputs/ledger_helpers.csv` is the #656 helper ledger (byte-identical modulo CRLF to +`research/format-limits-2` #717, `s3-4-census-gauges/evidence/C1/ledger_helpers.csv`). + +## Results and constructions this package builds on (credit) + +- **#717** (DreamingOfClouds, open) and **#595** (DreamingOfClouds, merged): the census of the helper sites (S1, S3, S4), the invoice and the format lemmas; rows F3-F5 of #717 record the value-side facts that the frame bounds here complement. +- **#656, #659, #664, #799** (jeremykothe2): the gauge44 layered and no-triangle lineage, entrance promotions and the X4 joint exchange whose words are analysed; **#645** (icekylinx): Gauge44; **#622, #623** (jeremykothe2): the K-triangle skeleton and the ck/jp8 providers; **#635** (jeremykothe2): the emitter and cold14 pipeline. +- **#741, #685** (chafreaky): the eight B-frame coalescences and the entrance promotions in #799's lineage. +- **#869, #870** (jeremykothe2): the eight block-0 hybrid deliveries (B2 cites card B169, not #869, for "legal only for 450..457") and the U8 owner-controller word (not analysed here). +- Lawler, Management Science 19(5):544-546 (1973), for the backward rule; Boyar and Find 2013 for the cancellation-free contrast. + +## Overlap check with recent swarm PRs + +- **#698** (thakrarsagar): the selected CK supplier's B-phase frames are optimal at fixed boundaries. Related to the frame lattice used here, but a different object: fixed gate order with exact end-of-B frames (CK B frames), against the order-free L2/L3 bounds here on helper copies. +- **#719**: rank-two obstruction for the 78 CK cleanup pairs. Related to the pair conflicts (L4) and to the multiset-changing merges of open problem 2; a different object (CK cleanup pairs, not helper copies), no row duplicated. +- **#705** (littleBro): determinant obstruction for rank-homogeneous register paths. Related to the cut/centre count (K1) only loosely: a different model (Clifford words) and a different argument. +- **#687** (cbethin) and **#683** (Mister-Meeseeks): a K-triangle relocation neighbourhood and a four-carrier bound for partial K/M face bypass. Different objects, no row duplicated. +- **#716** (thakrarsagar): R420 target pairs save XORs; not the same objects (the register ids 716..727 in row B1 are bridge registers, not PR numbers). diff --git a/research/helper-minimality/README.md b/research/helper-minimality/README.md new file mode 100644 index 0000000000..dfde1f0b98 --- /dev/null +++ b/research/helper-minimality/README.md @@ -0,0 +1,144 @@ +# Helper minimality (no κ claim): the shipped helper layers of the #656 / #799 words are minimal for their op multiset + +This package states and checks lower bounds on the helper layers of the shipped frontier words: the 11 eight-line S1 blocks, +the S3/S4 packet copies, the 12 bridges and the entering/holder copies, the 8 cut centres, and the pre-read targets. It continues +`research/format-limits-2` (#717) and the merged #595 (rows F3-F5 of #717 record the same facts as value and exact-replay statements; the +rows here are the frame-side bounds with their scope). **It makes no κ claim and ships no word.** Each result comes with its scope and +hypotheses. Each is marked: + +- **CHECKED**: `verify.sh` recomputes it from the files listed below (exact arithmetic; solver results are solver statuses, no certificate file is shipped); +- **ARGUED**: a proof or file:line argument in this README; the quoted lines and every quantity the argument uses are themselves checked where stated; +- **RECORDED**: the result of an earlier run that `verify.sh` does not repeat. The card note is shipped under `evidence/`; the row says what is not reproduced. + +A row marked CHECKED for only part of its statement says which part. + +```sh +python3 -m pip install -r research/helper-minimality/requirements.txt +bash research/helper-minimality/verify.sh /fresh/output/dir # from a checkout or `git archive` of the whole repository +HM_FULL=1 bash research/helper-minimality/verify.sh /fresh/output/dir # also regenerates the 36,501-pair pre-read table (about 5 min) +``` + +Python ≥ 3.11; `requirements.txt` pins numpy and ortools (CP-SAT); set `PYTHON` to choose the interpreter. Step 0 checks the package +against `MANIFEST.sha256` (every file) and every vendored input against its pin in `SOURCES.json` (git blob ids of PR files, sha256 and +content hashes published by the PRs for the rebuilt words), and stops with exit 1 on any mismatch. Then four check groups run at once and +print one `PASS`/`FAIL` line per assertion. Nothing outside the package directory is read; scratch files go to the output directory. +Default: see "Tested" below. + +## Words and verifier + +- **#656 word**: the gauge44 layered word (`inputs/words/656-CANONICAL-WORD.json.gz`, `656-layers-FULL-WORD.json.gz`), 492 helpers, pinned by the hashes #656 publishes. +- **#799 word**: the X4 word (`799-X4-CANONICAL-WORD.json.gz`, `799-X4-FULL-WORD.json.gz`), 504 helpers, 5687 add ops, pinned by the hashes #799 publishes + (the PR ships the construction, not the X4 word; the words are rebuilt from it and compared with its pins). +- **AL** = `inputs/pr799/independent/audit_local.py` (git blob in #799), the verifier whose frame rules the rows use. + +## Model and hypotheses (shared by all rows) + +- Registers carry a GF(2)-subspace frame. Every A/B/tail op declares its own frame `e[-1]` (AL:31, :138); `climb(q, e[-1])` requires `contained(cur[q], U)` for **both** operands (AL:122, "frame not monotone"), so frames only grow and an op frame is a common frame (join) of both operands. Nothing about values is checked at an ADD. +- `cur[]` is assigned only at AL:117, :120 (start) and :125 (climb); the centre loop (:130-136) changes only the local billing set. End caps: `climb(q, end[q])` (AL:115, :142); target registers end in `perp(port)`, the rest at the full space. The ports are 112 odd-weight vectors of F₂⁹. +- The minimal legal declaration of an op is the join (span-sum); declaring more only adds climbs. All bounds below are bounds on this **frame** lattice. +- **FOM (fixed op multiset)**: the set of ADD/scale ops is unchanged; only order and register assignment may change. Unless a row says otherwise, theorems are for FOM. +- **Interface**: S1 rows are stated **given the shipped end-of-A frames as bounds** (the 24 own registers of each block: their shipped bounds and end-of-A rows) and the value targets (value-forced). The case where the later readers' true caps replace the shipped frames is **open** (as in #717); see open problem 3. +- **Lawler frames `g` (L2, L3, B1, N1)**: `g` is the partner's frame in the **shipped order**: the target-side replay over every add, value-zero frame-courier adds included. It is a lower bound for an arbitrary reordering only where the frame is value-forced (distinct-source independence, the B172 caveat). Shipped check: recomputing `g` while skipping the value-zero adds (1921 on #656, 2317 on #799; source row empty) still gives 268/268 FAIL on both words (`cards/B171/lawler799.py`, `S2.skipzero-*`). The hypothesis is still a hypothesis; the rerun shows the result does not depend on the courier adds. +- **H-CUT** (cut row only): every cut op is `add target<-q` with `q` a centre, and no centre is a target. AL does not enforce it (AL:132 reads only dest/src of cut ops; AL:88 covers A and B). It is enforced by the generator (`construct_gauge_xcentre.py:344, :360`), by `len(centers)==8` (`audit_allcold.py:75`, `emit_allcold.py:41`), and by the emitter, which keeps only centre-sourced cut terms (`hpe_emit_local.py:94`); the spec schedule fixes the scatter and gather as gates on targets/sources and the centre (`03-motifs.tex:78-83`). Row K3. +- **Cancellation**: the S1 and Lawler counts are support/frame bounds, not cancellation-free-delivery statements (contrast Boyar–Find 2013). A frame is the running join of everything a register ever received; cancellation changes values, not frames, and a correcting ADD is one more visit whose frame also joins. So, for the S1 bound (given the shipped end-of-A frames) and the Lawler bounds (under the `g` hypothesis above), cancelling programs with the same op multiset are covered. This is not claimed for the other rows. Adding undo/redo ADDs changes the multiset and is outside (open problem 2). Row N1, `evidence/B185-NOTES.md`. + +## Results at a glance + +22 rows by primary status: 13 CHECKED, 4 ARGUED, 5 RECORDED (rows partly CHECKED say so). + +| id | result | status | +|---|---|---| +| H1 | **S1 Hall lemma.** In each of the 11 S1 blocks with 8 lines, 15 registers (16 shipped) are infeasible: the number of whole-bound registers (8) is at least the number of plane stoppers (8, distinct planes), a perfect matching is forced, so every whole-bound register is indispensable, the "never read" ones included. Given the shipped end-of-A frames as bounds (true-cap case open). | counts CHECKED (candidate partners = wide registers, asserted in all 11 blocks); lemma ARGUED | +| H2 | Independent solver check on block (4,5,6,7): dropping register 433 makes the level model (F₃ relaxation of values, no lemma, any horizon) INFEASIBLE (sound for dyadic coefficients and the 4-level lemma, see H2-H4). | CHECKED (CP-SAT status) | +| H3 | The 38 "twin couriers" are whole-bound registers of H1 (38/38; drawn from base+1, +3, +5, +10 in the 11 blocks, a set that holds 44). They are long-lived A working registers (19-25 source reads each), not copies: 0 of 38 equals its partner P (value-forced, B176). This closes the twin-fusion route only, not the true-cap case of H1. | CHECKED | +| H4 | Borrowed-target plane jump: of the 88 stoppers, 0 have a holder of the l₂ piece and 0 have a point-holder escape. | CHECKED | +| H5 | Re-balancing the 12 demand planes of block (4,5,6,7): c_B = 2.0 per plane both ways, full move net 0, partial move −2 per plane (count level, not an op-count price). | RECORDED | +| H6 | **Blocks (0,1,2,3), (0,1,4,5), (0,1,6,7): the Hall bound is slack** (21 stoppers on 21 distinct planes match 21/21 using line registers alone; scratch alone matches 15/21). So scratch minimality there is **unproven, not refuted**. | CHECKED (negative scope) | +| L1 | The order-free Lawler oracle (`lawler`) agrees with exhaustive search over all orders on 3000 seeded random instances (80 feasible), returns a feasible order when it returns one, and separates a mergeable from a conflicting synthetic pair. | CHECKED | +| L2 | **S3/S4 on #656:** no copy pair can be merged by any reordering: 268/268 FAIL (S3 156, S4 112), each chain alone passes (caps not over-tight). | CHECKED; reading ARGUED | +| L3 | **S3/S4 on #799:** the same on the X4 word: 268/268 FAIL (5687 add ops, 156 + 112). | CHECKED; reading ARGUED | +| L4 | Every copy already has a two-visit conflict (one visit from each chain): 156 + 112 pair conflicts on each word. | CHECKED | +| L5 | Value classification of the 156 S3 copies on #656: 124 value-feasible with one packet, 32 both-mutated; all 112 S4 both-mutated, so 144 need extra undo/redo ADDs. | RECORDED (B82/B172) | +| B1 | **Bridges and holders on #799:** the 12 bridge registers 716..727: 12/12 FAIL (each chain alone passes); S3 holder/entering copies in 450..457 and 484..569: 94/94 FAIL; none removable at FOM; the 12 bridges have pairwise distinct 8-supports. | CHECKED | +| B2 | Merging a bridge into any other register is value-impossible without undo/redo ADDs (non-proportional 8-supports, overlapping lifetimes B1178..B1916); holder reuse is legal only for the 8 slots 450..457 (card B169; #869 is the eight block-0 hybrid deliveries). | RECORDED | +| K1 | **Cut ≥ 8 centres.** If W passes AL on the 112-port geometry and satisfies H-CUT, the number of centre registers read by the cut is ≥ μ ≥ ω = 8 (μ = minimum rank of a real 112×112 X with X[t,u] = δ_tu on the odd pairs, ω = the largest set of ports with pairwise odd inner product). | ARGUED (every quantity CHECKED, row K2) | +| K2 | On both shipped words: H-CUT holds, F = I, the cut-deleted map F₀ vanishes on odd positions (nnz(F₀) = 5824), rank(F−F₀) = 8 = |K| = ω, the clique {0,3,45,46,69,70,104,107} gives F−F₀ = I₈; AL accepts both words. | CHECKED | +| K3 | H-CUT is not enforced by AL, and this is not an issue for the executed program: a centre-free net-zero cut pair is accepted by AL (CHECKED) and flagged by the H-CUT check (CHECKED); the generator, `len(centers)==8` asserts, emitter line and spec lines quoted above are present at the quoted lines (CHECKED); that the emitter silently drops such terms and the full local chain accepts the toy with an identical emitted event count (24,411) is RECORDED. | ARGUED; anchors, toy CHECKED | +| R1 | **Pre-read layer:** the minimum number of touched pre-read targets on #799 within the move family is 66 (CP-SAT OPTIMAL, bound 66) against the threshold 62; no target can be cleared. | CHECKED on the stored pair table | +| R2 | The move family has 271 moves (84 h2r, 92 r2h, 95 deferrals); 0 of 271 singles and 0 of 36,501 pairs are legal (every |V| ≥ 2); all 271 singles and 150 seeded pairs are recomputed with the exact oracle; with `HM_FULL=1` the whole table is regenerated and compared; 38 of the 46 whole-copy-pair bundles are legal (their net ≤ 0 is RECORDED, B155). | CHECKED | +| R3 | Repair-pair triples (76 pairs × every third move, 20,368): 0 legal, min |V| = 2; target-sharing k ≤ 3 moves and k ≤ 4 pairs: 0 (B155). Ignoring legality the ILP ceiling of the family is 21 touched; the exact build of that move set touches 38 targets and has 104 violations. | RECORDED | +| M1 | **Verifier-model agreement:** the oracle frames equal the AL frames on all 5726 A/B ops of the #656 chain word (register bijection and GF(2) coordinate map), and AL accepts the word. | CHECKED | +| M2 | 272 twin-substitution edits (68 pure helpers × 4 policies) run through AL: all rejected; the number of "frame not monotone" failures equals the oracle `fin_raise` count in 272/272, 0 edits with 0 violations. The shipped table is checked structurally; the equality with the oracle count needs the card oracle, which is not shipped. | RECORDED (table CHECKED) | +| N1 | The S1 and Lawler counts are frame bounds, so they hold for cancelling programs of the same op multiset (see Cancellation above). | ARGUED | + +Relation to #717 (rows F3-F5): there, the S1 scratch, the twin reads and the meet-frame reads are recorded as exact value and replay statements for +the shipped order. Rows H1-H4, L2-L4 and B1 are the order-free frame counterparts with the hypotheses stated. They do not replace F3-F5. + +## 1. S1 blocks + +### H1. Hall/matching lemma (ARGUED; counts CHECKED) +**Statement.** In each of the 11 S1 blocks with 8 lines, k = 15 registers (16 shipped) is infeasible. #whole-bound registers ≥ #plane stoppers = 8; a perfect matching is forced, so every whole-bound register is indispensable. +**Scope.** #656, 11 of the 14 S1 blocks (blocks (0,2,4,6) … (4,5,6,7)), 8 lines, **given the shipped end-of-A frames as bounds** (own 24 registers: shipped bounds + end-of-A rows), any horizon, FOM. The true-cap case (later readers' true caps replace the shipped frames) is open, as in #717. +**Proof sketch.** The 8 line vectors are the points of AG(3,2); every frame is a flat of size 1, 2, 4 or 8. A plane-bound register z whose target row has support all 4 points of its plane Π must, at the meeting where its frame jumps from at most 2 points to Π, meet a partner whose bound contains Π (the join is ≤ both bounds); only whole-bound registers qualify. After serving Π₁ the partner's frame is ≥ Π₁, so it cannot serve Π₂ ≠ Π₁ (the join would be the whole space, above bound(z₂)). The 8 stoppers have distinct planes, so #whole ≥ 8. +**Check.** `cards/B167/blockscan.py` prints, per block, 8 scratch-16, 8 wide, 8 plane stoppers, distinct planes, matching 8, and `cand-eq-wide True`: the candidate partners of every stopper equal the wide registers (11 lines asserted for each). +### H2-H4 +H2: soundness conditions. The F₃ relaxation of the value layer is sound for **dyadic** coefficients; non-dyadic coefficients are outside the stated soundness; "any horizon" rests on the **4-level WLOG lemma** of B167, which is ARGUED in the card only and not re-proved here. `cards/B167/extract.py` builds the block (4,5,6,7) instance from the word and `level.py --drop 433` runs the level model (stable reordering by hull size, F₃ relaxation of the value layer, so UNSAT means infeasible for any horizon); the status INFEASIBLE is asserted (about 50 s). No blind discovery of the 16-register program was achieved by the solver (UNKNOWN in 100 s), so the run is a refutation check, not a replay of the shipped program. +H3: `cards/B176/val.py`; the 38 are whole-bound registers of H1 (38/38; not the same set as the never-read registers), so H3 shows none equals its partner P (the twin-fusion route is closed) but does not close the true-cap case. #717 F3's "16 equal twins" is word-wide (8 pairs in 8 blocks, card B92b), a different set from these 38; there is no contradiction. H4: `cards/B179/gate.py` (A-replay equals the end rows) and `gate2.py`. Scope as H1; H4 needs a second Π-frame l₂ holder to escape and finds none. +### H5-H6 +H5 RECORDED (`evidence/B175-NOTES.md`; its script overwrites a card pickle and is not shipped). H6: `cards/B171/scan01b.py` (stoppers, 21 distinct planes, matching 21 with line registers, 15 of 21 with scratch only, 5 of 7 per block). +**Stated limits.** An interface change (fewer plane-stopper rows, other hyperplanes, a plane register with support ≤ 2) is **not** excluded, and neither is the true-cap case (later readers' true caps instead of the shipped end-of-A frames). B177 (the (0,1,*) blocks) has no verdict at the time of writing. + +## 2. S3/S4 copies: order-free minimality + +**Statement (L2, L3).** No S3 or S4 copy pair can be merged into one register by any reordering: 268/268 FAIL on each word. +**Scope.** FOM; frames `g` in the **shipped order** (see the Lawler hypothesis above: a lower bound for arbitrary reorderings only where value-forced; the skip-zero rerun is also 268/268 FAIL): the partner's frame before an op (target-side replay from the start frames over every add, centre joins ignored: weaker, so sound for FAIL); caps = perp of the ports of the targets reached from the partner, with the two copies a, b treated as sinks; the precedence-free relaxation (no value precedence is imposed). Copies are identified without tags as the first op filling an empty helper row from a non-empty one, restricted to the ledger S3/S4 ids. #870 is not local and was not run. Non-S3/S4 helper pairs: only the B1 classes. +**Proof sketch.** Lawler 1973 (Management Science 19(5):544-546, 1|prec|f_max, least cost last; citation per the card, not re-fetched). A merged register's frame after a prefix is the join of the frames of the visits so far (a nondecreasing set function); an order is feasible iff the join of every prefix lies in the cap of its last visit. Lawler's backward rule decides this order-free: take any visit whose cap holds the join of all remaining visits as the last one; if none exists, no order exists. L1 checks the rule against exhaustive search. +**Checks.** `cards/B171/lawler799.py` (any word; `passing copies 0`), `pair799.py` (156 + 112 two-visit conflicts), `checks/lawler_check.py`. The same script reruns with value-zero adds skipped in the `g` replay (1921 / 2317 skipped): 268/268 FAIL on both words. +**Reuse.** `lawler(visits, base, prec)` is an order-free legality oracle for any "one register serves X and Y" claim. + +## 3. Bridges and holders on #799 (B1, B2) +**Statement.** The 12 bridge registers 716..727 (register ids): 12/12 FAIL; S3 holder/entering copies in 450..457 and 484..569: 94/94 FAIL; removable: 0. **Scope.** #799, FOM, value-forced lower-bound frames, caps = reached-target ports. The frames are the shipped-order frames of the Lawler hypothesis above. The phase-1 frame-courier role of the bridges is ignored (it only adds conflicts, so FAIL stays sound). `cards/B182/b182.py`. + +## 4. The cut needs at least 8 centres (K1-K3) +**Statement (K1).** Let W pass AL on the 112-port geometry and satisfy H-CUT; K = the centre registers read by the cut. Then |K| ≥ μ ≥ ω = 8. The shipped words have |K| = 8 = rank(F−F₀), so `len(centers)==8` is forced for this cut. **Scope.** #656 and #799 (identical numbers); AL has a single cut section at one instant (AL:82, :126-137). Without H-CUT the argument gives rank(F−F₀) ≤ the number of frame-free ops. +**Lemmas.** L0 endpoint identity (AL:106-112). L1 frames are monotone everywhere. L2 path lemma: a time-respecting path u → … → v+t gives cur_end(v+t) ∋ p_u, and the end cap perp(p_t) forces (t,u) even. L3 F₀ (cut deleted) is 0 on the odd positions. L4 the cut block is I+N, N = Σ_{q∈K} n_q e_qᵀ, N² = 0, so rank(F−F₀) ≤ |K|. L5 F−F₀ = F = I on the odd positions, so |K| ≥ rank ≥ μ ≥ ω. Side lemma: a centre frame contains p_u for u in the support of its A-row. +**Checks.** `cards/B174/check.py` on each word prints H-CUT, F = I, F₀ odd nnz 0, rank(F−F₀) = 8 ≤ |K| = 8, ω = 8, the clique submatrix I, the centre-frame lemma; `clique.py`; AL on both words. **Caveats.** μ ≥ ω only; μ = 8 uses the shipped words. The card's premise "the odd part of M has rank 8" is false as stated (rank(M∘Odd) = 112); the right object is the minimum-rank completion. Decoder terms (B14/B27) and all pricing are separate; this is a count. +**K3.** See the hypothesis H-CUT above; `checks/make_toy.py` builds the toy, `checks/anchors.py` checks the quoted lines. Full text: `evidence/B178-VERIFIER-GAP.md`. + +## 5. Pre-read layer (R1-R3) +**Move family.** 271 moves: 84 h2r (read r not h, delete the matching pre-read), 92 r2h (read h, insert a pre-read), 95 pre-read deferrals, plus 46 whole-copy-pair bundles (38 legal, all net ≤ 0). Exact-oracle legality, retained frames (`cards/B147/oracle799.py`, whose no-op evaluation is legal with κ = 0.001661634653669567, the κ #799 publishes). +**Proof status.** The minimum 66 is exact for the model "legal singles and legal bundles, each leaked final cap needs a pairwise repairer in the chosen set" and is proven only at the pairwise level (singles, all pairs) plus the recorded triple probes, **not** for arbitrary k-sets. Not tested: joint copy-gate retiming, re-gauge, the end-frame convention. + +## 6. Model fidelity (M1, M2) +**Scope.** The #656 chain word (the same AL file as #645/#656). `cards/B128/retest.py base` prints `frame map bad 0 5726` and the AL verdict; `checks/b128_table.py` checks the shipped 272-row table. + +## Open problems and gaps (stated plainly) + +1. **S1 blocks (0,1,2,3), (0,1,4,5), (0,1,6,7):** the Hall bound is slack (H6); 48 scratch registers, including the centres 224, 240, 256, have no minimality proof. B177 is running; no verdict yet. +2. **Multiset-changing merges** (undo/redo ADDs, B169-style holder merges) are outside every Lawler result; the S3/S4 and bridge theorems are FOM only. +3. **S1 true-cap case and interface change.** S1 minimality is proved given the shipped end-of-A frames as bounds. The case where later readers' true caps replace those frames is open (as in #717), and so are fewer plane-stopper rows and other hyperplanes. +4. The cut ops and centre frames are not examined beyond K1-K3; non-S3/S4 helper pairs have no generic sweep; #870 is not local. +5. **H-CUT** is not enforced by AL; several-epoch cuts in another verifier are outside the theorem. +6. **Decoder n ≥ 9** (mixed β ≤ 7 terms, #717 D1) is a separate question; the decoder terms are not covered. +7. **Pre-read** is proven only up to singles, all pairs and the recorded triple probes, not for arbitrary k-sets. +8. The Lawler layers and the S1 lemma have no independent second-reader audit; the Lawler citation was not re-fetched. + +## Tested + +Fresh `git archive` of the commit, every assertion PASS, exit 0: **53 PASS lines (2 in step 0), about 52 s wall** on 12 cores (the S1 solver run, about 50 s, is the longest single step; the four groups run at once). With `HM_FULL=1` there is one more PASS line (the regenerated pre-read table equals the stored one; about 13 min at background priority on a loaded machine, one run by the authors: that run's regeneration line and the other 50 lines passed, but its S1 solver step hit the then 150 s limit under load, so the limit is now 900 s; the default run above, from the final commit, passes all 53). The solver step takes about 50 s on an idle machine; `UNKNOWN` (limit reached) fails the assertion. + +| Python | numpy | ortools | how installed | +|---|---|---|---| +| 3.14.7 | 2.5.4 | 9.15.6755 | development venv (the pins of `requirements.txt`) | + +## Files + +- `verify.sh`, `scripts/provenance.py` (step 0; `--write-manifest` regenerates the manifest), `SOURCES.json`, `MANIFEST.sha256`, `requirements.txt`, `LICENSE`, `NOTICE.md`. +- `inputs/`: vendored files by PR (`pr799/`, `pr635/`, `main/`), rebuilt words (`words/`), the helper ledger and the pre-read pair table (`derived/`). +- `cards/`: the swarm's card scripts under their card ids (B167 S1 lemma and solver; B171 Lawler on any word; B176, B179 extensions; B182 bridges; B174 cut; B159 pre-read; B128 fidelity; B98b/B98c/B99/SYN-18 shared loaders; B147/B155 pre-read oracle). The only edits against the originals are the local path prefixes (replaced by `HM_ROOT`), `pair799.py` taking an optional word argument, `extract.py` writing its instance into its own card directory and the pre-read table read as JSON instead of a pickle. +- `checks/`: `expect.py` (assertion helper), `lawler_check.py`, `make_toy.py`, `anchors.py`, `pairs_sample.py`, `b128_table.py`. +- `evidence/`: card notes (local paths removed) and the 272-row table. + +## Credits + +Prepared by DreamingOfClouds with Claude Opus 5.5 (Anthropic), via Claude Code; Apache-2.0. See `NOTICE.md` for the PRs whose words, code and results are used and for the overlap check. diff --git a/research/helper-minimality/SOURCES.json b/research/helper-minimality/SOURCES.json new file mode 100644 index 0000000000..4f35bc4ed1 --- /dev/null +++ b/research/helper-minimality/SOURCES.json @@ -0,0 +1,193 @@ +{ + "description": "Pins for research/helper-minimality. files = byte copies of files of merged/open PRs of CrocSwap/integer-mult-bounds (or of main at base_commit): blob = git blob id of the source file at the cited commit, sha256 = of the file as stored here. derived = words rebuilt locally from the PRs' construction code (not files of any PR), pinned by hashes the PRs publish (gz_sha256 / content_sha256 of the decompressed JSON), and local card outputs (pinned by sha256). evidence = card notes and run records shipped (scrubbed of local paths), sha256 only. scripts/provenance.py checks every entry.", + "base_commit": "f567884aeb8851b6e794af1184119a3bfbe1e631", + "files": [ + { + "file": "inputs/pr799/independent/audit_local.py", + "pr": 799, + "commit": "80e6463157cfc80b85af09e7e2f14748fe2dac60", + "source_path": "research/gauge44-frames-x/independent/audit_local.py", + "blob": "4744d8783c25bf7bf5076886169077ca3808309a", + "sha256": "03afcfc9da428b3f6edac81c1fee7f277ab81b64998efae78380b63498dec6cd", + "stored": "verbatim", + "used_for": "the verifier AL (rows C, M, anchors)" + }, + { + "file": "inputs/pr799/code/audit_allcold.py", + "pr": 799, + "commit": "80e6463157cfc80b85af09e7e2f14748fe2dac60", + "source_path": "research/gauge44-frames-x/code/audit_allcold.py", + "blob": "c86f7b0235f738b4325c04c51abaf1aa5f015aaa", + "sha256": "a87d7f4844ca963516637d249b14a0654f67f8047b6b265ae25b0cf30963e503", + "stored": "verbatim", + "used_for": "anchor: 8 centres asserted" + }, + { + "file": "inputs/pr799/code/emit_allcold.py", + "pr": 799, + "commit": "80e6463157cfc80b85af09e7e2f14748fe2dac60", + "source_path": "research/gauge44-frames-x/code/emit_allcold.py", + "blob": "8e147f80a67a6095d33764117d761eeb1b799460", + "sha256": "17c110c7c8d219e79e7dce36b19c4781e7effa800086cec03384387ad9acc7aa", + "stored": "verbatim", + "used_for": "anchor: 8 centres asserted" + }, + { + "file": "inputs/pr799/construction/construct_gauge_xcentre.py", + "pr": 799, + "commit": "80e6463157cfc80b85af09e7e2f14748fe2dac60", + "source_path": "research/gauge44-frames-x/construction/construct_gauge_xcentre.py", + "blob": "1010d86746ed9d0ca2059d7fc81fb3282ec743b3", + "sha256": "d8d295566ef2399af2da0707a4adc83e07aa26d2344c01a66bd0ca7684cf9217", + "stored": "verbatim", + "used_for": "anchor: cut = add target<-centre, assert on cut ops" + }, + { + "file": "inputs/main/03-motifs.tex", + "pr": null, + "commit": "f567884aeb8851b6e794af1184119a3bfbe1e631", + "source_path": "upstream/build/sections/03-motifs.tex", + "blob": "cdb0ba527aa8df5d57c151183fd3893c1a7e21ab", + "sha256": "ed76761194988a01af77ead0ea6469cb5dcd29690ab985a0b5a4006b0f2b69bb", + "stored": "verbatim", + "used_for": "anchor: spec schedule lines 78-83" + }, + { + "file": "inputs/pr635/hpe_emit_local.py", + "pr": 635, + "commit": "f567884aeb8851b6e794af1184119a3bfbe1e631", + "source_path": "research/complex-sw4-frame8/local/hpe_emit_local.py", + "blob": "534fdc71f7641c704575efc038363d7eb206b2df", + "sha256": "7e4a6fbc38c8228157b6311457d1496bf460291393043932d2c365f004f77805", + "stored": "verbatim", + "used_for": "anchor: emitter keeps centre-sourced cut ops (its sha256 equals the pin of research/complex-571-cold14-st2/code/hpe_emit_local.py in PR #799 construction/INPUTS.json)" + } + ], + "derived": [ + { + "file": "inputs/words/656-CANONICAL-WORD.json.gz", + "sha256": "72a4952751383e2a5e84b967f1e76fdfda003fe5592df357a599232e586817e3", + "bytes_sha256": "94fc985d6ab90967bfe995de41581690bcdb6dbade69e594b0130ef3da0c6314", + "content_sha256": "94fc985d6ab90967bfe995de41581690bcdb6dbade69e594b0130ef3da0c6314", + "pinned_in": "PR 656 @0805e78f research/gauge44-layered-b/data/PLAN.json (artifact_sha256 = this file's sha256; artifact_semantic_sha256 = sha256 of json.dumps(sort_keys, compact separators))", + "rebuilt_by": "PR 656 construction/reproduce.py --until word, then construction/layers/reproduce_layers.py (same file as format-limits-2 g44-CANONICAL-WORD)", + "used_for": "S1, S3/S4 on #656, M" + }, + { + "file": "inputs/words/656-layers-FULL-WORD.json.gz", + "sha256": "e2434318d38e5ab7d04d236e67f0da5b77a0fe57dfed9d817a83081921756c64", + "bytes_sha256": "0be48b1d8a6105059addf3f0d5e420c27ae3398b3a1186b6b11e9c4aa9e3f3d4", + "content_sha256": "0be48b1d8a6105059addf3f0d5e420c27ae3398b3a1186b6b11e9c4aa9e3f3d4", + "pinned_in": "PR 656 @0805e78f research/gauge44-layered-b/evidence/layers/LOCAL-AUDIT-LAYERED.json (content 0be48b1d8a61...)", + "rebuilt_by": "PR 656 construction/layers/reproduce_layers.py", + "used_for": "cut row (B174), AL, B128" + }, + { + "file": "inputs/words/799-X4-CANONICAL-WORD.json.gz", + "sha256": "f1c2ede9276d4447c5857d0e9d32adb52f987b8adb643b45bde2c172d88c6ee9", + "bytes_sha256": "1c0e9da767d4418f70016af599e4a447a3f7777acabe930318459c0fbbd260aa", + "content_sha256": "1c0e9da767d4418f70016af599e4a447a3f7777acabe930318459c0fbbd260aa", + "pinned_in": "PR 799 @80e64631 data/PLAN.json (gz sha256 f1c2ede9...) and data/SPEC.json, construction/jx/LOCAL-PINS-jx-X4.json (content 1c0e9da7...)", + "rebuilt_by": "PR 799 construction/reproduce chain np -> p6n -> promo -> sw4 -> jx (X4 locals)", + "used_for": "S3/S4 on #799, bridges, pre-read oracle" + }, + { + "file": "inputs/words/799-X4-FULL-WORD.json.gz", + "sha256": "fc96c6dfb3e03efc144c2d0d1abd605a1b1bc081d39a5de27f21675864ecc766", + "bytes_sha256": "1e1d99ba7aab877d6b573c41f7030ee73de9a52fee51d0a822ddaae71251999f", + "content_sha256": "1e1d99ba7aab877d6b573c41f7030ee73de9a52fee51d0a822ddaae71251999f", + "pinned_in": "PR 799 @80e64631 evidence/layers/LOCAL-AUDIT-LAYERED.json and construction/jx/RECIPE-X4.json (content 1e1d99ba7aab...)", + "rebuilt_by": "PR 799 construction/jx/reproduce_jx.py", + "used_for": "cut row, AL, verifier-gap toy" + }, + { + "file": "inputs/ledger_helpers.csv", + "sha256": "71469db91a3c5672312dde85a9e463d5a6c4527b7cb6f2e2a03594eb59add409", + "origin": "ledger of the 492 helpers of #656 (site S1/S3/S4, block|slot); byte-identical (modulo CRLF) to format-limits-2 (#717) s3-4-census-gauges/evidence/C1/ledger_helpers.csv, sha256 71469db9...", + "used_for": "S3/S4 copy identification (site tags)" + }, + { + "file": "inputs/derived/pairs.json.gz", + "sha256": "cc5716bea4a523255b96add72427910c6606c7f3654c8a63652aa7df674ac339", + "origin": "pre-read pair table of the 271-move universe on #799 (stored as deterministic gzip JSON of the card pickle pairs.pkl, round trip checked equal); regenerated by cards/B159/mdl.py (HM_FULL=1)", + "used_for": "P rows" + } + ], + "evidence": [ + { + "file": "evidence/B128-NOTES.md", + "sha256": "5921df2221a76bbafa733835c9a68ff5be984cf4ed99cc420ad742fceb391755", + "what": "card note / record (local paths removed)" + }, + { + "file": "evidence/B128-all.txt", + "sha256": "bdde724b3d8113f5b024e211566479073abfb5f3d4a96fdca169fa1eab17860b", + "what": "card note / record (local paths removed)" + }, + { + "file": "evidence/B155-NOTES.md", + "sha256": "7dbd405b2dcc8eb370feef32b867d6b12b7dce7b5cd9ad524c4f37bcf1cdc028", + "what": "card note / record (local paths removed)" + }, + { + "file": "evidence/B159-NOTES.md", + "sha256": "729d07bb52352eaf441228be28352c5d0efdab8927440298b6308313eec66dc0", + "what": "card note / record (local paths removed)" + }, + { + "file": "evidence/B167-NOTES.md", + "sha256": "9e371abf5132377e95a8a79e2a046bdc8263d71ccc03905c91e5e48d0ccd2a37", + "what": "card note / record (local paths removed)" + }, + { + "file": "evidence/B171-NOTES.md", + "sha256": "b45756d3f9097c182986329b62346d0d136aabe020d549641642b998a538516d", + "what": "card note / record (local paths removed)" + }, + { + "file": "evidence/B172-NOTES.md", + "sha256": "023a4b5ff6610351e101731ce99be6bada712fe2a5fad4eb1a8005c2e9c229ca", + "what": "card note / record (local paths removed)" + }, + { + "file": "evidence/B174-NOTES.md", + "sha256": "9968a78b131d89e0d262745f07c67104613fbdc366307ac6310d79c4947ae43d", + "what": "card note / record (local paths removed)" + }, + { + "file": "evidence/B175-NOTES.md", + "sha256": "e2ae6da673123f9a86ad72203c55a4f2a52c61b3e6c23b0b324d7e155389d5e1", + "what": "card note / record (local paths removed)" + }, + { + "file": "evidence/B176-NOTES.md", + "sha256": "8c37caeb2b3188c12708bb897ee7cefa7febe1f89ff71cba5600514fbcdebee5", + "what": "card note / record (local paths removed)" + }, + { + "file": "evidence/B178-VERIFIER-GAP.md", + "sha256": "6d18ed47c6036ae81db423b4c7dc91610505a4ccc0c5851a784af5951818eb27", + "what": "card note / record (local paths removed)" + }, + { + "file": "evidence/B179-NOTES.md", + "sha256": "1ecb165c212c3acd476eb68b83189292e0f763407f30cff0eb45c4c7fabdf259", + "what": "card note / record (local paths removed)" + }, + { + "file": "evidence/B182-NOTES.md", + "sha256": "2e1eccb47d6631103e18eed03c29d1d8d9c935fa4eecd7cd758e99fd5d06ff03", + "what": "card note / record (local paths removed)" + }, + { + "file": "evidence/B185-NOTES.md", + "sha256": "4fa578a6aafba5b429a864505caec1688a54e274223b4bf0a989bbfaff37f8db", + "what": "card note / record (local paths removed)" + }, + { + "file": "evidence/B82-NOTES.md", + "sha256": "9cbf48e3c0932ce286826b3a5807432a193275a5f4a6830a52401cbdacde0d54", + "what": "card note / record (local paths removed)" + } + ] +} \ No newline at end of file diff --git a/research/helper-minimality/cards/B128/coord.py b/research/helper-minimality/cards/B128/coord.py new file mode 100644 index 0000000000..19098156bf --- /dev/null +++ b/research/helper-minimality/cards/B128/coord.py @@ -0,0 +1,61 @@ +import sys,gzip,json +sys.path.insert(0,(__import__('os').environ['HM_ROOT']+'/cards/B99/work')) +import lib +d=lib.load() +w=json.load(gzip.open((__import__('os').environ['HM_ROOT']+'/inputs/words/656-layers-FULL-WORD.json.gz'))) +def basis(vs): + piv={} + for a in vs: + while a: + bit=a.bit_length()-1 + if bit in piv:a^=piv[bit] + else:piv[bit]=a;break + for k in sorted(piv): + for j in piv: + if j>k and piv[j]>>k&1:piv[j]^=piv[k] + return tuple(piv[k] for k in sorted(piv,reverse=True)) +pi={} +for p in 'AB': + for a,b in zip(d[p],w[p]): + rs=[1,2] if a[0]=='add' else [1] + for j in rs: pi[b[j]]=a[j] +# solve T: columns. gaussian: find T with T(x_i)=y_i for pairs (full port -> canon port) +pairs=[(w['ports'][r],d['ports'][pi[r]]) for r in range(112)] +def solve(pairs): + # find 9x9 matrix M (as list of images of basis e_k) s.t. M(x)=y for all pairs; linear system over GF(2) + # unknown images of e_0..e_8; use elimination on (x,y) pairs + piv={} + for x,y in pairs: + for b,(px,py) in list(piv.items()): + pass + # reduce: maintain basis of x with tracked y + rows=[] + for x,y in pairs: + for (px,py) in rows: + if x&(px&-px) and False:pass + rows.append((x,y)) + B={} + for x,y in pairs: + while x: + bit=x.bit_length()-1 + if bit in B: x^=B[bit][0]; y^=B[bit][1] + else: B[bit]=(x,y);break + else: + if y: return None + return B +B=solve(pairs) +print('consistent' if B else 'inconsistent', len(B) if B else '') +def apply(B,x): + y=0 + while x: + bit=x.bit_length()-1 + if bit not in B:return None + x^=B[bit][0];y^=B[bit][1] + return y +if B and len(B)==9: + bad=0;tot=0 + for p in 'AB': + for a,b in zip(d[p],w[p]): + tot+=1 + if basis([apply(B,x) for x in b[-1]])!=basis(d['frames'][a[-1]]): bad+=1 + print('frame map bad',bad,tot) diff --git a/research/helper-minimality/cards/B128/retest.py b/research/helper-minimality/cards/B128/retest.py new file mode 100644 index 0000000000..2a2076722b --- /dev/null +++ b/research/helper-minimality/cards/B128/retest.py @@ -0,0 +1,53 @@ +import sys,gzip,json,time +sys.path.insert(0,(__import__('os').environ['HM_ROOT']+'/cards/B128')) +from pathlib import Path +import importlib.util +import coord # d (canonical), w (full), pi, solve/apply +t114=None +AUD=(__import__('os').environ['HM_ROOT']+'/inputs/pr799/independent/audit_local.py') +sp=importlib.util.spec_from_file_location('al',AUD);al=importlib.util.module_from_spec(sp);sp.loader.exec_module(al) +FW=(__import__('os').environ['HM_ROOT']+'/inputs/words/656-layers-FULL-WORD.json.gz') +OUT=(__import__('os').environ['HM_ROOT']+'/cards/B128/') +inv={c:f for f,c in coord.pi.items()} +Binv=coord.solve([(c,f) for f,c in coord.pairs[:0]] or [(y,x) for x,y in coord.pairs]) +def tofull(N,O): + cur=list(O.start);F=O.join;out={} + def run(part): + o=[] + for e in N[part]: + rs=[e[1]]+([e[2]] if e[0]=='add' else []) + f=e[-1] + for q in rs:f=F(f,cur[q]) + for q in rs:cur[q]=f + e2=list(e[:-1]) + for j in range(1,3 if e[0]=='add' else 2): e2[j]=inv[e[j]] + e2.append(sorted(coord.apply(Binv,x) for x in O.bas[f])) + o.append(e2) + return o + out['A']=run('A') + for k,c in enumerate(O.d['centers']): cur[c]=F(cur[c],O.d['center_frames'][k]) + out['B']=run('B') + return out +def verify(wd,label): + p=Path(OUT+label+'.json.gz');p.write_bytes(gzip.compress(json.dumps(wd).encode(),mtime=0)) + t=time.time() + try: + al.run(p,Path(OUT+'out_'+label+'.json'));print(label,'REAL VERIFIER: ACCEPT') + except Exception as ex: + print(label,'REAL VERIFIER: REJECT',repr(ex)[:300]) + print('secs',time.time()-t,flush=True) +if __name__=='__main__': + mode=sys.argv[1] + if mode=='base': + verify(json.load(gzip.open(FW)),'base') + else: + import t114 + O=t114.O;S0=t114.S0 + h=int(sys.argv[2]);pol=sys.argv[3] + reads=t114.scan(S0);N=t114.build(S0,h,reads,pol,False) + assert [e[:-1] for e in N['tail']]==[e[:-1] for e in S0['tail']],'tail edited' + r=O.evaluate(N);rows=O.replay_rows(N) + print('oracle',r['legal'],r['fin_raise'],r['kappa'],'values equal',all(rows[i]==t114.rows0[i] for i in range(716))) + out=tofull(N,O) + wd=json.load(gzip.open(FW));wd['A']=out['A'];wd['B']=out['B'] + verify(wd,'edit%d_%s'%(h,pol)) diff --git a/research/helper-minimality/cards/B147/oracle799.py b/research/helper-minimality/cards/B147/oracle799.py new file mode 100644 index 0000000000..0828c84961 --- /dev/null +++ b/research/helper-minimality/cards/B147/oracle799.py @@ -0,0 +1,114 @@ +"""B126: B102 oracle ported to #664 (promoted canonical word out664/promo/local; pricing 72*local+EXTRA, m=73, W=7168). +API (see NOTES.md): + O=Oracle() load word, frame lattice, tags, pricing + O.seq0() -> {'A':[..],'B':[..],'tail':[..]} op lists (op=[kind,t,s,num,den,frame_id]) + O.evaluate(seq) -> dict(cen_viol, fin_raise, profile, mass, b, kappa, legal) forward min-frame join cascade + (legal = no centre frame exceeded, no final cap raised; no-op pass = 0 violations) + O.price(profile) -> (b,kappa) exact root from 72*local profile + B76 extras (reproduces shipped 1.654108529511355e-3) + O.replay_rows(seq) -> exact Fraction row state (value check); O.same_values(seq) + O.region(block) -> set of register ids (S3/S4 packets + their tags) for a block key string + O.conflict(o1,o2): ops that do not commute (value order matters) +""" +import sys,gzip,json +sys.path.insert(0,(__import__('os').environ['HM_ROOT']+'/cards/B99/work')) +from collections import Counter +from fractions import Fraction as Q +import lib # only lib.climbs is used +from decimal import Decimal as D, localcontext +EXTRA={1:1,3:1,44:1,48:2396} # PLAN.json(#799) minus 72*local +CW664=(__import__('os').environ['HM_ROOT']+'/inputs/words/799-X4-CANONICAL-WORD.json.gz') +M=73;W=7168 +def root(H): + with localcontext() as c: + c.prec=40 + terms=[(D(r)*D(n)/D(M*W),(D(M)/D(r)).ln()) for r,n in H.items() if n] + lo=D(0);hi=D('0.01') + for _ in range(200): + a=(lo+hi)/2 + if sum(p*(a*l).exp() for p,l in terms)<1:lo=a + else:hi=a + return (lo+hi)/2 +def regs(e): return [e[1]]+([e[2]] if e[0]=='add' else []) +class Oracle: + def __init__(s): + d=json.load(gzip.open(CW664));s.d=d + s.fr=[tuple(f) for f in d['frames']] + s.bas=[lib_basis(f) for f in d['frames']] + s.id={b:i for i,b in enumerate(s.bas)} + s.jm={} + s.tag={} # no TAGS for #664 + s.start=list(d['start']);s.final=list(d['final']) + def dim(s,f): return len(s.bas[f]) + def join(s,a,b): + if a==b: return a + k=(a,b) if a>p&1:x^=b[p] + if x: + p=x.bit_length()-1 + for q in b: + if b[q]>>p&1:b[q]^=x + b[p]=x + return tuple(b[p] for p in sorted(b,reverse=True)) +if __name__=='__main__': + import time;t=time.time();O=Oracle();s=O.seq0();r=O.evaluate(s) + print({k:(v if k!='profile' else sorted(v.items())) for k,v in r.items()},time.time()-t) diff --git a/research/helper-minimality/cards/B155/ex.py b/research/helper-minimality/cards/B155/ex.py new file mode 100644 index 0000000000..f88beacc32 --- /dev/null +++ b/research/helper-minimality/cards/B155/ex.py @@ -0,0 +1,83 @@ +import sys,time,pickle,itertools +sys.path.insert(0,(__import__('os').environ['HM_ROOT']+'/cards/B147')) +from oracle799 import * +from collections import defaultdict,Counter +O=Oracle();s=O.seq0();B=s['B'];d=O.d +base=O.evaluate(s);K0=base['kappa'];R0=O.replay_rows(s) +EMPTY=O.id.get(()) +tgt=lambda q:112<=q<224 +PRE=lambda i,e:i<120 and e[0]=='add' and tgt(e[1]) and e[2]>=224 +firstw={} +for i,e in enumerate(B): + if e[1] not in firstw:firstw[e[1]]=i +pairs=[] +for h,ci in firstw.items(): + e=B[ci] + if h<224 or e[0]!='add' or (e[3],e[4])!=(1,1) or tgt(e[2]) or e[2]==h: continue + r=e[2] + pre=[i for i in range(ci) if B[i][0]=='add' and B[i][2]==h] + if any(not tgt(B[i][1]) for i in pre): continue + end=len(B) + for j in range(ci+1,len(B)): + if B[j][1] in (h,r): end=j;break + reads=[j for j in range(ci+1,end) if B[j][0]=='add' and tgt(B[j][1]) and B[j][2] in (h,r) and B[j][1]!=B[j][2]] + pairs.append(dict(h=h,r=r,ci=ci,pre=pre,end=end,reads=reads)) +def moves(p): + ms=[];used=set() + for j in p['reads']: + g=B[j];t=g[1];a,b=g[3],g[4] + if g[2]==p['h']: + pi=[i for i in p['pre'] if i not in used and B[i][1]==t and (B[i][3],B[i][4])==(-a,b)] + if not pi: continue + used.add(pi[0]);ms.append(('h2r',j,pi[0],t)) + else: + ms.append(('r2h',j,max(p['pre'])+1 if p['pre'] else p['ci'],t,p['h'])) + return ms +def build(mvs): + Bn=[list(e) for e in B];dele=set();ins=defaultdict(list) + for m in mvs: + if m[0]=='h2r': + Bn[m[1]][2]=B[m[1]][2] and [p for p in pairs if m[1] in p['reads']][0]['r'];dele.add(m[2]) + else: + Bn[m[1]][2]=[p for p in pairs if m[1] in p['reads']][0]['r'] if False else None + return Bn +# simpler explicit build +pr_of={} +for p in pairs: + for j in p['reads']: pr_of[j]=p +def build(mvs): + Bn=[list(e) for e in B];dele=set();ins=defaultdict(list) + for m in mvs: + p=pr_of[m[1]] + if m[0]=='h2r': Bn[m[1]][2]=p['r'];dele.add(m[2]) + else: + Bn[m[1]][2]=p['h'];g=B[m[1]] + ins[m[2]].append(['add',m[3],p['h'],-g[3],g[4],EMPTY]) + out=[] + for i,e in enumerate(Bn): + for x in ins.get(i,[]):out.append(x) + if i in dele:continue + out.append(e) + s2=dict(s);s2['B']=out;return s2 +def pre_targets(Bx): return {e[1] for i,e in enumerate(Bx[:130]) if e[0]=='add' and tgt(e[1]) and e[2]>=224} +T0=pre_targets(B) +def ev(mvs): + s2=build(mvs) + if O.replay_rows(s2)!=R0: return None + r=O.evaluate(s2) + T=pre_targets(s2['B']) + return dict(legal=r['legal'],dk=float(r['kappa']-K0),net=len(T0-T)-len(T-T0),nfin=len(r['fin_raise']),ncen=len(r['cen_viol'])) +if __name__=='__main__': + print(len(pairs),'pairs',sum(len(p['reads']) for p in pairs),'reads',sum(len(moves(p)) for p in pairs),'moves') + t0=time.time();res={} + for pi,p in enumerate(pairs): + ms=moves(p) + if not ms: continue + res[('pair',pi)]=ev(ms) + for m in ms: res[('single',pi,m)]=ev([m]) + print(time.time()-t0) + leg=[(k,v) for k,v in res.items() if v and v['legal']] + print('evaluated',len(res),'inexact',sum(1 for v in res.values() if v is None),'legal',len(leg)) + for k,v in leg[:20]:print(k,v) + print(Counter((k[0],v['legal'],v['net']) for k,v in res.items() if v)) + pickle.dump(res,open('ex1.pkl','wb')) diff --git a/research/helper-minimality/cards/B159/ilp.py b/research/helper-minimality/cards/B159/ilp.py new file mode 100644 index 0000000000..a74113f652 --- /dev/null +++ b/research/helper-minimality/cards/B159/ilp.py @@ -0,0 +1,69 @@ +import sys,pickle +sys.path.insert(0,'.') +from mdl import * +from ortools.sat.python import cp_model +from pairsio import load_pairs +M2,sg,pv=load_pairs(__import__('os').environ['HM_ROOT']+'/inputs/derived/pairs.json.gz');assert M2==M +n=len(M) +# bundles: full pair move sets (h2r+r2h) with exact V +bund=[] +for pi,p in enumerate(pairs): + ms=[m for m in moves(p)] + if len(ms)>=2 and valid(ms): + v,_=V(ms) + bund.append((ms,v)) +print('bundles',len(bund),'legal',sum(1 for _,v in bund if not v)) +npre=Counter(e[1] for e in B[:120] if e[0]=='add' and tgt(e[1]) and e[2]>=224) +print('touched targets',len(npre),'preads',sum(npre.values())) +def solve(mode,cuts=()): + m=cp_model.CpModel() + x=[m.NewBoolVar(f'x{i}') for i in range(n)] + bx=[m.NewBoolVar(f'b{i}') for i in range(len(bund))] + bad=lambda a,b:(a,b) not in pv + legalx=lambda i:True + for a in range(n): + for b in range(a+1,n): + if (a,b) not in pv: m.Add(x[a]+x[b]<=1) + if mode=='full': + for i in range(n): + for c in sg[i]: + R=[b for b in range(n) if b!=i and (min(i,b),max(i,b)) in pv and c not in pv[(min(i,b),max(i,b))]] + m.Add(x[i]<=sum(x[b] for b in R)) + elif mode=='single': # only violation-free moves + for i in range(n): + if sg[i]: m.Add(x[i]==0) + # bundles exclusive with members; only legal bundles allowed in 'full'/'single' + for k,(ms,v) in enumerate(bund): + if v: m.Add(bx[k]==0) + for mm in ms: + for i in range(n): + if M[i]==mm: m.Add(x[i]+bx[k]<=1) + # touched targets + ts=set(npre)|{mm[3] for mm in M} + z={} + def cnt(t,mv_x): # linear expr of preread count change + e=npre.get(t,0) + terms=[] + for i,mm in enumerate(M): + if mm[3]!=t:continue + if mm[0]=='h2r': terms.append(-x[i]) + elif mm[0]=='r2h': terms.append(x[i]) + for k,(ms,v) in enumerate(bund): + for mm in ms: + if mm[3]==t: terms.append((-1 if mm[0]=='h2r' else 1)*bx[k]) + return e+sum(terms) + for t in ts: + z[t]=m.NewBoolVar(f'z{t}');m.Add(cnt(t,0)<=200*z[t]) + for S in cuts: m.Add(sum(x[i] for i in S)<=len(S)-1) + m.Minimize(sum(z.values())) + sv=cp_model.CpSolver();sv.parameters.num_workers=2;sv.parameters.max_time_in_seconds=120 + st=sv.Solve(m) + S=[i for i in range(n) if sv.Value(x[i])];BS=[k for k in range(len(bund)) if sv.Value(bx[k])] + return sv.StatusName(st),int(sv.ObjectiveValue()),sv.BestObjectiveBound(),S,BS +if __name__=='__main__': + print('noop',len(npre)) + for mode in ('free','single','full'): + st,obj,bd,S,BS=solve(mode);print(mode,st,'min touched',obj,'bound',bd,'moves',len(S),'bundles',len(BS),flush=True) + mv=[M[i] for i in S]+[mm for k in BS for mm in bund[k][0]] + if mv and valid(mv): + v,r=V(mv);print(' exact: legal',r['legal'],'viol',len(v),'dk',float(r['kappa']-K0),'touched',len(pre_targets(build_all(mv)['B'])),'replay exact',O.replay_rows(build_all(mv))==R0,flush=True) diff --git a/research/helper-minimality/cards/B159/mdl.py b/research/helper-minimality/cards/B159/mdl.py new file mode 100644 index 0000000000..9bac064a1c --- /dev/null +++ b/research/helper-minimality/cards/B159/mdl.py @@ -0,0 +1,70 @@ +import os +import sys,time,pickle,itertools +sys.path.insert(0,(__import__('os').environ['HM_ROOT']+'/cards/B155')) +from ex import * # O,s,B,d,pairs,pr_of,moves,tgt,EMPTY,R0,K0,T0,pre_targets +from collections import defaultdict,Counter +# ---- move universe +M=[] +for p in pairs: + for m in moves(p): M.append(m) # ('h2r',j,pre_i,t) / ('r2h',j,ins_pos,t,h) +# deferral moves: pre-read i of target t moved to just after t's later climb j (frame contains h's) +cur=list(d['start']);F=O.join +for e in s['A']: + rs=regs(e);f=e[-1] + for q in rs:f=F(f,cur[q]) + for q in rs:cur[q]=f +for k,c in enumerate(d['centers']):cur[c]=F(cur[c],d['center_frames'][k]) +hist=defaultdict(list) +for i,e in enumerate(B): + rs=regs(e);f=e[-1] + for q in rs:f=F(f,cur[q]) + for q in rs: + if cur[q]!=f: hist[q].append((i,f)) + cur[q]=f +for i,e in enumerate(B[:120]): + if not(e[0]=='add' and tgt(e[1]) and e[2]>=224):continue + t,h=e[1],e[2] + cg=next(j for j in range(i+1,len(B)) if B[j][1]==h) + hfr=[f for (j,f) in hist[h] if j<=i][-1] if any(j<=i for j,_ in hist[h]) else d['start'][h] + nx=[(j,f) for j,f in hist[t] if j>i] + for j,f in nx: + if O.sub(hfr,f) and j= Pi1, so Pi1 <= Pi2). +# => #whole-bound registers >= #plane-stoppers. This is Hall/matching on (stopper -> candidate partners). +exec(open((__import__('os').environ['HM_ROOT']+'/cards/B98c/work/gate.py')).read().split("good=[")[0]) +import itertools +A=[list(e) for e in d['A']] +st=d['start'] +cur=list(d['start']) +for e in A: + f=e[-1] + for q in regs(e):f=F.join(f,cur[q]) + for q in regs(e):cur[q]=f +def spanset(basis): + s={0} + for b in basis: s|={x^b for x in s} + return s +rep=[] +for bn,rr in blocks.items(): + scr=list(rr); cols=sorted({j for r in scr for j in rows0[r]}) + if len(cols)!=8: rep.append((bn,'cols',len(cols))); continue + vec={l:F.fr[st[l]][0] for l in cols} + def hull(pts): + sp=spanset([vec[p] for p in pts]); return frozenset(l for l in cols if vec[l] in sp) + regsb=cols+scr + B={r:frozenset(l for l in cols if vec[l] in spanset(F.fr[cur[r]])) for r in regsb} + S={r:frozenset(rows0[r].keys()) for r in regsb} + H={r:hull(S[r]) if S[r] else frozenset() for r in regsb} + planes=[r for r in regsb if len(H[r])==4 and B[r]==H[r]] + wide=[r for r in regsb if len(B[r])==8] + pairs=[r for r in regsb if len(B[r])==2] + # partner candidates for stopper z: registers != z with bound >= H[z] + cand={z:[u for u in regsb if u!=z and H[z]<=B[u]] for z in planes} + # max bipartite matching + match={} + def aug(z,seen): + for u in cand[z]: + if u in seen: continue + seen.add(u) + if u not in match or aug(match[u],seen): match[u]=z; return True + return False + msize=sum(aug(z,set()) for z in planes) + distinct=len({H[z] for z in planes})==len(planes) + rep.append((bn,len(cols),'scratch',len(scr),'wide',len(wide),'plane-stoppers',len(planes),'distinct',distinct,'matching',msize,'wide-scratch',len([r for r in wide if r in scr]),'cand-eq-wide',all(set(cand[z])==set(wide) for z in planes))) +for r in rep: print(r) diff --git a/research/helper-minimality/cards/B167/extract.py b/research/helper-minimality/cards/B167/extract.py new file mode 100644 index 0000000000..00a9fc2fab --- /dev/null +++ b/research/helper-minimality/cards/B167/extract.py @@ -0,0 +1,41 @@ +# Extract block-4567 instance: registers, bounds (subspaces of the 4-dim label space W), targets, shipped macro program +exec(open((__import__('os').environ['HM_ROOT']+'/cards/B98c/work/gate.py')).read().split("good=[")[0]) +import json +A=[list(e) for e in d['A']] +cols=[20,21,36,37,46,47,110,111]; S=list(range(432,448)); st=d['start'] +vec={l:F.fr[st[l]][0] for l in cols} +B=[161,289,51,30] +def coords(v): + for m in range(16): + s=0 + for i in range(4): + if m>>i&1:s^=B[i] + if s==v:return m + return None +def span_set(basis): + s={0} + for b in basis: s|={x^b for x in s} + return s +# end-of-A frames (full A) = shipped bound +cur=list(d['start']) +for e in A: + f=e[-1] + for q in regs(e):f=F.join(f,cur[q]) + for q in regs(e):cur[q]=f +Wv={coords(vec[l]) for l in cols} +inst={'cols':cols,'lines_vec':{l:coords(vec[l]) for l in cols},'regs':[]} +for r in cols+S: + E=span_set(F.fr[cur[r]]) + bound=sorted({coords(x) for x in E if x and coords(x) is not None}) if True else None + # vectors of E that lie in W (coords not None) + inst['regs'].append({'id':r,'bound':bound,'row':{str(j):str(x) for j,x in rows0[r].items()}}) +# shipped program ops (stage1: 3608..3671, stage2 3672..3759) +ops=[] +for i in range(3608,3760): + e=A[i] + ops.append([i]+[ (str(x) if not isinstance(x,(int,)) else x) for x in e[:5]] if e[0]=='add' else [i,'scl',e[1],e[2],e[3]]) +inst['ops']=[ [o[0],o[1],o[2],o[3],o[4]] + ([o[5]] if len(o)>5 else []) for o in ops] +json.dump(inst,open(__import__('os').environ['HM_ROOT']+'/cards/B167/inst4567.json','w')) +print(len(inst['regs'])) +for r in inst['regs']: print(r['id'],len(r['bound']),sorted(r['row'].keys())) +print(inst['lines_vec']) diff --git a/research/helper-minimality/cards/B167/level.py b/research/helper-minimality/cards/B167/level.py new file mode 100644 index 0000000000..6a399fc6bc --- /dev/null +++ b/research/helper-minimality/cards/B167/level.py @@ -0,0 +1,150 @@ +# B167 LEVEL MODEL (exact frame schedule, F_3 value relaxation). +# Theorem used (WLOG): any legal program can be stably reordered so that meetings are sorted by hull size (1,2,4,8 points of the +# AG(3,2) label cube). Level l = meetings whose join is a flat of size 2^(l-1). At level l a register either does not move, or joins +# ONE flat class Psi (|Psi|=2^(l-1)); legal iff prev frame <= Psi <= bound(register). Within a class, any unimodular remix of the members' +# rows is realisable (Euclid; every op's join stays <= Psi). Value layer: out = U*in, U in GL_n <=> in,out generate the same module; +# relaxed to F_3 (spans equal): UNSAT => provably infeasible for ANY horizon (not only K steps). +import json,sys,itertools,argparse,time +from fractions import Fraction as Q +from ortools.sat.python import cp_model +D=(__import__('os').environ['HM_ROOT']+'/cards/B167/') +inst=json.load(open(D+'inst4567.json')) +cols=inst['cols']; LV={int(k):v for k,v in inst['lines_vec'].items()} +REG={r['id']:r for r in inst['regs']} +FREE=[433,435] +def span(vs): + s={0} + for v in vs: s|={x^v for x in s} + return s +def hull(pts): + sp=span([LV[p] for p in pts]); return frozenset(l for l in cols if LV[l] in sp) +def flats(): + fl={frozenset()} + cur={frozenset([p]) for p in cols}; fl|=cur + ch=True + while ch: + ch=False + for a in list(fl): + for b in list(fl): + h=hull(a|b) + if h not in fl: fl.add(h); ch=True + return sorted(fl,key=lambda f:(len(f),sorted(f))) +FL=flats(); FID={f:i for i,f in enumerate(FL)} +LEVEL={1:1,2:2,4:3,8:4} +def mod3(fr): + p,q=fr.numerator,fr.denominator; return (p*pow(q,-1,3))%3 +DEC=0 +LEMMA=0 +def build(drop=(),free=None,levels=4,tgt=None): + regs=[r for r in inst['regs'] if r['id'] not in drop]; R=len(regs); ids=[r['id'] for r in regs] + free=set(FREE)-set(drop) if free is None else set(free) + bset=[frozenset(l for l in cols if LV[l] in set(r['bound'])) for r in regs] + m=cp_model.CpModel() + nf=len(FL) + same_={} + # class var per reg per level (0 none, else flat id of size 2^(l-1)) + c=[[None]*(levels+1) for _ in range(R)]; phi=[[None]*(levels+1) for _ in range(R)] + for i,r in enumerate(regs): + init=FID[frozenset([r['id']])] if r['id'] in cols else 0 + phi[i][0]=m.NewConstant(init) + for l in range(1,levels+1): + ok=[0]+[FID[f] for f in FL if len(f) and LEVEL[len(f)]==l and f<=bset[i]] + c[i][l]=m.NewIntVarFromDomain(cp_model.Domain.FromValues(ok),f'c{i}_{l}') + phi[i][l]=m.NewIntVar(0,nf-1,f'phi{i}_{l}') + tab=[] + for pid in range(nf): + tab.append((pid,0,pid)) + for cid in ok[1:]: + if FL[pid]<=FL[cid]: tab.append((pid,cid,cid)) + m.AddAllowedAssignments([phi[i][l-1],c[i][l],phi[i][l]],tab) + # values over F3 + x=[[[None]*len(cols) for _ in range(R)] for _ in range(levels+1)] + for l in range(levels+1): + for i,r in enumerate(regs): + for jj,j in enumerate(cols): + if l==0: x[l][i][jj]=m.NewConstant(1 if r['id']==j else 0) + else: x[l][i][jj]=m.NewIntVar(0,2,f'x{l}_{i}_{jj}') + for l in range(1,levels+1): + inc=[m.NewBoolVar(f'in{l}_{i}') for i in range(R)] + for i in range(R): + m.Add(c[i][l]!=0).OnlyEnforceIf(inc[i]); m.Add(c[i][l]==0).OnlyEnforceIf(inc[i].Not()) + same={} + same_[l]=same + for i in range(R): + for k in range(i+1,R): + b=m.NewBoolVar(f's{l}_{i}_{k}') + m.Add(c[i][l]==c[k][l]).OnlyEnforceIf([b]); + # b <=> c_i==c_k and nonzero + e=m.NewBoolVar('') + m.Add(c[i][l]==c[k][l]).OnlyEnforceIf(e); m.Add(c[i][l]!=c[k][l]).OnlyEnforceIf(e.Not()) + m.AddBoolAnd([e,inc[i]]).OnlyEnforceIf(b); m.AddBoolOr([e.Not(),inc[i].Not()]).OnlyEnforceIf(b.Not()) + same[i,k]=b; same[k,i]=b + for name,(src,dst) in (('A',(x[l-1],x[l])),('B',(x[l],x[l-1]))): + M=[[None]*R for _ in range(R)] + for i in range(R): + for k in range(R): + if i==k: + M[i][k]=m.NewIntVar(0,2,'') + m.Add(M[i][k]==1).OnlyEnforceIf(inc[i].Not()) + else: + M[i][k]=m.NewIntVar(0,2,'') + m.Add(M[i][k]==0).OnlyEnforceIf(same[i,k].Not()) + for i in range(R): + for jj in range(len(cols)): + terms=[] + for k in range(R): + pr=m.NewIntVar(0,4,''); m.AddMultiplicationEquality(pr,[M[i][k],src[k][jj]]); terms.append(pr) + q=m.NewIntVar(0,2*R,''); m.Add(sum(terms)==3*q+dst[i][jj]) + # final frame must contain the hull of the target support (and sit inside the bound) + for i,r in enumerate(regs): + if r['id'] in free: continue + S=[int(j) for j in r['row'].keys()] + lo=hull(S); ok=[FID[f] for f in FL if lo<=f<=bset[i]] + m.AddAllowedAssignments([phi[i][levels]],[(v,) for v in ok]) + # final + for i,r in enumerate(regs): + if r['id'] in free: continue + sg=m.NewIntVar(1,2,'') + for jj,j in enumerate(cols): + t=mod3(Q(r['row'].get(str(j),'0'))) + # x == sg*t mod 3 + q=m.NewIntVar(0,4,''); m.Add(sg*t==3*q+x[levels][i][jj]) if False else None + pr=m.NewIntVar(0,4,''); m.AddMultiplicationEquality(pr,[sg,m.NewConstant(t)]) + qq=m.NewIntVar(0,2,''); m.Add(pr==3*qq+x[levels][i][jj]) + if LEMMA: + # implied by the frame argument: a tight register whose target support hull == its (non-whole) bound must join exactly that flat at + # that level, and a plane stopper needs a whole-bound partner in its plane class. + for i,r in enumerate(regs): + if r['id'] in free: continue + S=[int(j) for j in r['row'].keys()]; hu=hull(S) + if hu==bset[i] and len(hu) in (2,4): + l=LEVEL[len(hu)]; m.Add(c[i][l]==FID[hu]) + for l2 in range(l+1,levels+1): m.Add(c[i][l2]==0) + if len(hu)==4: + wl=[k for k in range(R) if len(bset[k])==8] + m.Add(sum(same_[l][i,k] for k in wl)>=1) + if DEC: + order=[c[i][l] for l in range(1,levels+1) for i in range(R)] + m.AddDecisionStrategy(order,cp_model.CHOOSE_FIRST,cp_model.SELECT_RANDOM_HALF if DEC==2 else cp_model.SELECT_MIN_VALUE) + return m,dict(c=c,phi=phi,x=x,ids=ids,regs=regs,R=R,levels=levels) +def show(s,h): + ids=h['ids'] + for l in range(1,h['levels']+1): + cls={} + for i in range(h['R']): + v=s.Value(h['c'][i][l]) + if v: cls.setdefault(v,[]).append(ids[i]) + print('LEVEL',l,{tuple(sorted(FL[v])):mem for v,mem in cls.items()}) + for i in range(h['R']): + print(ids[i],[s.Value(h['phi'][i][l]) and sorted(FL[s.Value(h['phi'][i][l])]) for l in range(0,h['levels']+1)]) +if __name__=='__main__': + ap=argparse.ArgumentParser();ap.add_argument('--drop',default='');ap.add_argument('--time',type=float,default=300) + ap.add_argument('--workers',type=int,default=1);ap.add_argument('--free',default=None);ap.add_argument('--seed',type=int,default=1);ap.add_argument('--dec',type=int,default=0);ap.add_argument('--lemma',type=int,default=0) + a=ap.parse_args() + drop=tuple(int(s) for s in a.drop.split(',') if s) + free=None if a.free is None else [int(s) for s in a.free.split(',') if s] + DEC=a.dec; LEMMA=a.lemma + m,h=build(drop,free) + s=cp_model.CpSolver(); s.parameters.num_workers=min(2,a.workers); s.parameters.max_time_in_seconds=a.time; s.parameters.random_seed=a.seed + t0=time.time(); st=s.Solve(m); print('STATUS',s.StatusName(st),'time %.1f'%(time.time()-t0),'drop',drop,'free',free) + if st in (cp_model.OPTIMAL,cp_model.FEASIBLE): show(s,h) diff --git a/research/helper-minimality/cards/B171/lawler799.py b/research/helper-minimality/cards/B171/lawler799.py new file mode 100644 index 0000000000..13cccfa98c --- /dev/null +++ b/research/helper-minimality/cards/B171/lawler799.py @@ -0,0 +1,93 @@ +# B171: B172 Lawler certificate generalised to an arbitrary word (#799 canonical). Single process. +import gzip,json,csv,collections,sys +from fractions import Fraction as Q +def basis(vs): + b={} + for x in vs: + for p in sorted(b,reverse=True): + if x>>p&1:x^=b[p] + if x: + p=x.bit_length()-1 + for q in b: + if b[q]>>p&1:b[q]^=x + b[p]=x + return tuple(b[p] for p in sorted(b,reverse=True)) +def ok(F,ports):return all(((f&p).bit_count()%2==0) for f in F for p in ports) +def load(path): + d=json.load(gzip.open(path));v=d['v'] + ops=[(e[1],e[2] if e[0]=='add' else None,e) for p in ('A','B','tail') for e in d[p]] + return d,v,ops +def run(path,withcenter=False,skipzero=False): + d,v,ops=load(path);n=len(d['start']);P=d['ports'] + fr=[basis(d['frames'][f]) for f in d['start']] + # exact rows to find copies + rows=[{i:Q(1)} if i1 else (__import__('os').environ['HM_ROOT']+'/inputs/words/799-X4-CANONICAL-WORD.json.gz') + d,v,SEQ,Lpre,copies,P=run(path) + print('ops',len(SEQ),'copies',collections.Counter(c[0] for c in copies)) + out,bad=certify(d,v,SEQ,Lpre,copies,P) + for k,c in sorted(out.items()):print(k,c) + print('passing copies',len(bad));print(bad[:10]) + # robustness to the g hypothesis: recompute the partner frames g skipping the value-zero adds (source row empty), re-run Lawler + d,v,SEQ,Lpre,copies,P=run(path,skipzero=True) + out,bad=certify(d,v,SEQ,Lpre,copies,P) + print('value-zero adds skipped',run.nzero) + print('skip-zero',dict(sorted(out.items()))) + print('skip-zero passing copies',len(bad)) diff --git a/research/helper-minimality/cards/B171/pair799.py b/research/helper-minimality/cards/B171/pair799.py new file mode 100644 index 0000000000..a0bddeb842 --- /dev/null +++ b/research/helper-minimality/cards/B171/pair799.py @@ -0,0 +1,17 @@ +from lawler799 import * +import sys +P0=sys.argv[1] if len(sys.argv)>1 else (__import__('os').environ['HM_ROOT']+'/inputs/words/799-X4-CANONICAL-WORD.json.gz') +d,v,SEQ,Lpre,copies,P=run(P0) +cnt=collections.Counter();sizes=[] +for kind,a,b,k in copies: + base=Lpre[k][1];sink={a,b};V=[];chain=[] + for x in (a,b): + for kk in range(k+1,len(SEQ)): + t,s=SEQ[kk] + if x not in (t,s):continue + qq=s if t==x else t + g=Lpre[kk][1] if t==x else Lpre[kk][0] + V.append((g,[P[w] for w in taint_from(SEQ,v,P,qq,kk,sink)]));chain.append(x) + conf=[(i,j) for i in range(len(V)) for j in range(i+1,len(V)) if chain[i]!=chain[j] and lawler([V[i],V[j]],base)[0] is None] + cnt[(kind,'pair-conflict' if conf else 'no-pair-conflict')]+=1 +print(cnt) diff --git a/research/helper-minimality/cards/B171/scan01.py b/research/helper-minimality/cards/B171/scan01.py new file mode 100644 index 0000000000..e8f1515bf2 --- /dev/null +++ b/research/helper-minimality/cards/B171/scan01.py @@ -0,0 +1,40 @@ +exec(open((__import__('os').environ['HM_ROOT']+'/cards/B98c/work/gate.py')).read().split("good=[")[0]) +import collections +A=[list(e) for e in d['A']]; st=d['start']; cur=list(d['start']) +for e in A: + f=e[-1] + for q in regs(e):f=F.join(f,cur[q]) + for q in regs(e):cur[q]=f +print(list(blocks)) +for bn in ['(0, 1, 2, 3)','(0, 1, 4, 5)','(0, 1, 6, 7)']: + scr=list(blocks[bn]); cols=sorted({j for r in scr for j in rows0[r]}) + print(bn,'nscr',len(scr),'ncols',len(cols),scr[:5],scr[-3:],cols[:6],cols[-3:]) + sup=collections.Counter(len(rows0[r]) for r in scr); print(' supp sizes',sorted(sup.items())) + bd=collections.Counter(len(F.fr[cur[r]]) for r in scr); print(' bound dim',sorted(bd.items())) + print(' row0 sample',{r:list(rows0[r].items())[:3] for r in scr[:2]}) +print('frame vec of cols sample', [F.fr[st[l]] for l in cols[:3]]) +print('=====') +def spanset(basis): + s={0} + for b in basis: s|={x^b for x in s} + return s +for bn in ['(0, 1, 2, 3)','(0, 2, 4, 6)']: + scr=list(blocks[bn]); cols=sorted({j for r in scr for j in rows0[r]}) + vec={l:F.fr[st[l]][0] for l in cols} + print(bn,len(cols),'distinct vec',len({vec[l] for l in cols})) + # rank of vecs + import itertools + def rank(vs): + b=[] + for x in vs: + for y in b: x=min(x,x^y) + if x:b.append(x) + return len(b) + print(' rank vecs',rank(list(vec.values()))) + for r in scr: + sp=spanset(F.fr[cur[r]]) if len(F.fr[cur[r]])<=12 else None + S=rows0[r] + hs=spanset([vec[p] for p in S]) if len(S)<=12 else None + B=[l for l in cols if sp and vec[l] in sp] + H=[l for l in cols if hs and vec[l] in hs] + print(' ',r,'|S|',len(S),'dimB',len(F.fr[cur[r]]),'|B|',len(B),'|H|',len(H),'rank S',rank([vec[p] for p in S])) diff --git a/research/helper-minimality/cards/B171/scan01b.py b/research/helper-minimality/cards/B171/scan01b.py new file mode 100644 index 0000000000..97ac72e6e4 --- /dev/null +++ b/research/helper-minimality/cards/B171/scan01b.py @@ -0,0 +1,59 @@ +exec(open((__import__('os').environ['HM_ROOT']+'/cards/B98c/work/gate.py')).read().split("good=[")[0]) +import collections +A=[list(e) for e in d['A']]; st=d['start']; cur=list(d['start']) +for e in A: + f=e[-1] + for q in regs(e):f=F.join(f,cur[q]) + for q in regs(e):cur[q]=f +def spanset(basis): + s={0} + for b in basis: s|={x^b for x in s} + return s +blk=['(0, 1, 2, 3)','(0, 1, 4, 5)','(0, 1, 6, 7)'] +allcols=sorted({j for bn in blk for r in blocks[bn] for j in rows0[r]}) +print('union cols',len(allcols)) +vec={l:F.fr[st[l]][0] for l in allcols} +spc={} +def B_of(r): + if r not in spc: + s=spanset(F.fr[cur[r]]); spc[r]=frozenset(l for l in allcols if vec[l] in s) + return spc[r] +def H_of(S): + s=spanset([vec[p] for p in S]); return frozenset(l for l in allcols if vec[l] in s) +# col registers: bounds and start frames +cb=collections.Counter(len(B_of(l)) for l in allcols); print('col reg |B| dist',sorted(cb.items())) +cs=collections.Counter(len(F.fr[st[l]]) for l in allcols); print('col start dim',cs) +print('cols appear in blocks:',collections.Counter(sum(1 for bn in blk if l in {j for r in blocks[bn] for j in rows0[r]}) for l in allcols)) +stoppers=[];regsall=[] +for bn in blk: + for r in blocks[bn]: + S=rows0[r]; regsall.append(r) + if not S: continue + H=H_of(S);B=B_of(r) + if len(S)>=3 and len(H)==4 and B==H and len(S)==4: stoppers.append((bn,r,H)) +print('stoppers',len(stoppers),'distinct planes',len({h for _,_,h in stoppers})) +# candidates: any register (scratch of any block or col) other than z with B>=H +pool=regsall+allcols +cand={} +for bn,z,H in stoppers: cand[z]=[u for u in pool if u!=z and H<=B_of(u)] +for z in cand: print(z,len(cand[z]),cand[z][:12]) +match={} +def aug(z,seen): + for u in cand[z]: + if u in seen: continue + seen.add(u) + if u not in match or aug(match[u],seen): match[u]=z; return True + return False +print('matching',sum(aug(z,set()) for z in cand)) +scr_set=set(regsall) +for name,filt in (('scratch-only partners',lambda u:u in scr_set),('col-only partners',lambda u:u not in scr_set)): + match={} + c2={z:[u for u in cand[z] if filt(u)] for z in cand} + cand_bak=cand;cand=c2 + print(name,'matching',sum(aug(z,set()) for z in cand),'of',len(cand)) + cand=cand_bak +# per block scratch-only +for bn in blk: + zs=[z for b,z,H in stoppers if b==bn] + match={};c2={z:[u for u in cand[z] if u in set(blocks[bn])] for z in zs};cand_bak=cand;cand=c2 + print(bn,'stoppers',len(zs),'scratch-only matching',sum(aug(z,set()) for z in zs));cand=cand_bak diff --git a/research/helper-minimality/cards/B174/check.py b/research/helper-minimality/cards/B174/check.py new file mode 100644 index 0000000000..a896e06d1c --- /dev/null +++ b/research/helper-minimality/cards/B174/check.py @@ -0,0 +1,61 @@ +"""B174 checks. usage: check.py FULL-WORD.json.gz +Verifies hypotheses H-CUT/H-PRE, the identity F=I, F0 (cut deleted) has zero odd entries, +Diff=F-F0 has rank |K|=8 and Diff o Odd = I o Odd; omega(odd graph)=8; centre-frame lemma.""" +import sys,gzip,json +sys.path.insert(0,(__import__('os').environ['HM_ROOT']+'/inputs/pr799/independent')) +from audit_local import apply,basis,contained,registers +from fractions import Fraction as F +import numpy as np +from clique import odd_graph,max_clique +w=json.load(gzip.open(sys.argv[1]));v,h,R=w['report']['v'],w['report']['h'],w['report']['R'];n=2*v+R +ports=w['ports'];cen=w['centers'];cut=w['cut'] +par=lambda a,b:bin(a&b).count('1')&1 +odd=np.array([[par(ports[t],ports[u]) for u in range(v)] for t in range(v)]) +# H-CUT +K=sorted({e[2] for e in cut}) +print('H-CUT: all cut ops add target<-centre:',all(e[0]=='add' and v<=e[1]<2*v and e[2] in cen for e in cut), + '| centres disjoint from targets:',not any(v<=c<2*v for c in cen),'| #centres',len(cen),'distinct',len(set(cen)),'| |K| read',len(K)) +# H-PRE +print('H-PRE: precondition touches only target registers:',all(all(v<=r<2*v for r in registers(e)) for e in w['precondition'])) +# build program as audit_local does (lines 81-105) +ident=lambda:[{k:F(1)} for k in range(n)] +main=w['A']+w['cut']+w['B'] +raw=ident() +for e in main:apply(e,raw) +dirt=[{} for _ in range(n)] +for y in range(v,2*v):dirt[y]={k:a for k,a in raw[y].items() if k>=2*v} +for e in w['precondition']:apply(e,dirt) +comp=[['add',y,k,-a.numerator,a.denominator,[]] for y in range(v,2*v) for k,a in sorted(dirt[y].items())] +print('H-PRE: compensation reads only helpers into targets:',all(v<=e[1]<2*v and e[2]>=2*v for e in comp)) +early=w.get('early_cleanup',[]);ids={i for i,U in early} +tail=[w['cleanup'][i][:-1]+[U] for i,U in early];cleanup=[e for i,e in enumerate(w['cleanup']) if i not in ids] +print('cleanup never touches a target:',all(not(v<=r<2*v) for e in cleanup for r in registers(e))) +def Fmat(skip_cut): + prog=w['precondition']+comp+w['A']+([] if skip_cut else w['cut'])+w['B']+tail+cleanup + rows=ident() + for e in prog:apply(e,rows) + M=np.zeros((v,v)) + for t in range(v): + for k,x in rows[v+t].items(): + if klen(best):best=R[:] + return + if len(R)+len(P)<=len(best):return + for x in sorted(P,key=lambda z:-len(nb[z]&P)): + expand(R+[x],P&nb[x]);P=P-{x} + if len(R)+len(P)<=len(best):return + expand([],set(range(v)));return best +if __name__=='__main__': + for p in sys.argv[1:]: + w=json.load(gzip.open(p));ports=w['ports'] + a=odd_graph(ports) + assert all(a[i][i]==1 for i in range(len(ports))) + c=max_clique(a) + print(p.split('cards/')[-1][:50],'v',len(ports),'distinct',len(set(ports)),'odd density',np.mean(a),'omega',len(c),sorted(c)) diff --git a/research/helper-minimality/cards/B176/common.py b/research/helper-minimality/cards/B176/common.py new file mode 100644 index 0000000000..9683a86b99 --- /dev/null +++ b/research/helper-minimality/cards/B176/common.py @@ -0,0 +1,17 @@ +import sys,os +sys.dont_write_bytecode=True +SY=(__import__('os').environ['HM_ROOT']+'/cards/SYN-18') +os.chdir(SY) +src=open('planes.py').read().split("from collections import Counter")[0] +exec(src) +from collections import Counter +def kn(dd): + if not dd: return None + it=sorted(dd.items()); s=it[0][1]; return tuple((a,b/s) for a,b in it) +phases=['A','cut','B','tail','compensation','cleanup'] +TW=[] +for bn,(cols,vec,planes,H,B,S,wide,pairs,scr) in INFO.items(): + for u in wide: + if u not in scr: continue + ku=kn(rows0[u]); tw=[r for r in cols+scr if r!=u and kn(rows0[r])==ku] + if len(tw)==1 and len(S[u])==2: TW.append((bn,u,tw[0],planes,H,B,cols,scr)) diff --git a/research/helper-minimality/cards/B176/val.py b/research/helper-minimality/cards/B176/val.py new file mode 100644 index 0000000000..53a51495fa --- /dev/null +++ b/research/helper-minimality/cards/B176/val.py @@ -0,0 +1,40 @@ +exec(open((__import__('os').environ['HM_ROOT']+'/cards/B176/common.py')).read()) +from fractions import Fraction as Q +import collections +rows=[dict(r) for r in rows0] if False else None +# fresh replay from initial rows +NREG=716 +R=[{i:Q(1)} if i<112 else {} for i in range(NREG)] +word=[] +for ph in phases: + for e in d[ph]: word.append((ph,e)) +need={} +for t in TW: need[t[1]]=t[2] +pairs=set(need.items()) +# record at each op: for reads of u (src), rows equality with P +rd=collections.defaultdict(list) +wr=collections.Counter() +for n,(ph,e) in enumerate(word): + if e[0]=='add': + _,t,s,a,b,*_=e + if s in need: rd[s].append((n,ph,R[s]==R[need[s]])) + if t in need: wr[t]+=1 + q=Q(a,b) + for j,x in list(R[s].items()): + z=R[t].get(j,Q(0))+q*x + if z:R[t][j]=z + else:R[t].pop(j,None) + else: + _,t,a,b,*_=e + if t in need: wr[t]+=1 + q=Q(a,b);R[t]={j:q*x for j,x in R[t].items()} +good=0 +res=[] +for bn,u,P,*_ in TW: + allr=rd[u]; bad=[x for x in allr if not x[2]] + badA=[x for x in bad if x[1]=='A'] + ok=not bad + good+=ok + res.append((bn,u,P,len(allr),len(bad),len(badA),wr[u])) + print(bn,u,P,'reads',len(allr),'unequal reads',len(bad),'(in A',len(badA),') writes to u',wr[u]) +print('value-exact twins',good,'of',len(TW)) diff --git a/research/helper-minimality/cards/B179/gate.py b/research/helper-minimality/cards/B179/gate.py new file mode 100644 index 0000000000..2bb8b3341c --- /dev/null +++ b/research/helper-minimality/cards/B179/gate.py @@ -0,0 +1,25 @@ +# B179 gate: replay A exactly; per S1 stopper find plane-jump op, courier u, other registers holding the l2 piece. +exec(open((__import__('os').environ['HM_ROOT']+'/cards/B98c/work/gate.py')).read().split("good=[")[0]) +import pickle +NR=716 +R=[({i:Q(1)} if i<112 else {}) for i in range(NR)] +C=list(d['start']) +ops=d['A'] +log=[] # (i, t, s, q, framebefore_t, frame_after_t) +rowsnap={} # op index -> row of source (copy) for add +for i,e in enumerate(ops): + if e[0]=='scale': + t=e[1];q=Q(e[2],e[3]);R[t]={j:q*x for j,x in R[t].items()} + log.append((i,t,None,q,C[t],e[4]));C[t]=e[4] + else: + t,s=e[1],e[2];q=Q(e[3],e[4]);f=e[5] + rowsnap[i]=dict(R[s]) + row=R[t] + for j,x in R[s].items(): + z=row.get(j,Q(0))+q*x + if z:row[j]=z + else:row.pop(j,None) + log.append((i,t,s,q,C[t],f,C[s]));C[t]=f;C[s]=f +bad=[r for r in range(NR) if R[r]!=rows0[r]] +print('end rows mismatch vs rows0:',len(bad),bad[:10]) +pickle.dump((log,rowsnap,C),open('replayA.pkl','wb')) diff --git a/research/helper-minimality/cards/B179/gate2.py b/research/helper-minimality/cards/B179/gate2.py new file mode 100644 index 0000000000..58259e461d --- /dev/null +++ b/research/helper-minimality/cards/B179/gate2.py @@ -0,0 +1,78 @@ +exec(open((__import__('os').environ['HM_ROOT']+'/cards/B179/gate.py')).read().split("bad=[")[0]) +def spanset(basis): + s={0} + for b in basis: s|={x^b for x in s} + return s +# need start-of-run state to find jumps: replay again with checks per op +R2=[({i:Q(1)} if i<112 else {}) for i in range(NR)] +C2=list(d['start']) +st=d['start'] +# stoppers per block via blockscan logic, using end-of-A cur +cur=C # end-of-A frames +info={} +for bn,rr in blocks.items(): + scr=list(rr); cols=sorted({j for r in scr for j in rows0[r]}) + if len(cols)!=8: continue + vec={l:F.fr[st[l]][0] for l in cols} + def hull(pts): + sp=spanset([vec[p] for p in pts]); return frozenset(l for l in cols if vec[l] in sp) + regsb=cols+scr + Bd={r:frozenset(l for l in cols if vec[l] in spanset(F.fr[cur[r]])) for r in regsb} + H={r:hull(rows0[r].keys()) if rows0[r] else frozenset() for r in regsb} + planes=[r for r in regsb if len(H[r])==4 and Bd[r]==H[r]] + info[bn]=(cols,scr,planes,vec,H,Bd) +stop={z:bn for bn,(c,s,p,vec,H,Bd) in info.items() for z in p} +seen={} +jumps={} # z -> (opidx, partner, frame_before_z, frame_after, rowpartner, role) +def pts(fid,cols,vec): + sp=spanset(F.fr[fid]);return frozenset(l for l in cols if vec[l] in sp) +snapshots={} +for i,e in enumerate(ops): + if e[0]=='scale': + t=e[1];q=Q(e[2],e[3]);R2[t]={j:q*x for j,x in R2[t].items()};C2[t]=e[4];continue + t,s,q,f=e[1],e[2],Q(e[3],e[4]),e[5] + for z,oth in ((t,s),(s,t)): + if z in stop and z not in jumps: + bn=stop[z];cols,scr,pl,vec,H,Bd=info[bn] + pa=pts(f,cols,vec) + if pa>=H[z] and len(pts(C2[z],cols,vec))<=2 and pts(C2[z],cols,vec)<=H[z] or (pa>=H[z] and len(pts(C2[z],cols,vec))<4 and z not in jumps and False): + jumps[z]=(i,oth,C2[z],f,dict(R2[oth]),'z=target' if z==t else 'z=source') + snapshots[z]=([dict(r) for r in R2],list(C2)) + row=R2[t] + for j,x in R2[s].items(): + zz=row.get(j,Q(0))+q*x + if zz:row[j]=zz + else:row.pop(j,None) + C2[t]=f;C2[s]=f +print('stoppers',len(stop),'with jump found',len(jumps)) +def prop(a,b): + if not a or not b or set(a)!=set(b):return False + k=next(iter(a));r=a[k]/b[k] + return all(a[j]==r*b[j] for j in a) +res=[] +from itertools import combinations +for z,(i,u,fz,fa,ru,role) in sorted(jumps.items()): + bn=stop[z];cols,scr,pl,vec,H,Bd=info[bn] + Rs,Cs=snapshots[z] + # holders of l2 piece (proportional to partner row, before op), other than z,u + holders=[r for r in range(NR) if r not in(z,u) and prop(Rs[r],ru)] + ok=[r for r in holders if F.sub(fz,Cs[r]) and F.sub(Cs[r],fa)] # frame within [frame z before, plane] + low=[r for r in holders if F.sub(Cs[r],fa)] + # does u hold a nonzero row? + res.append((bn,z,i,u,role,len(pts(fz,cols,vec)),len(ru),len(holders),len(low),len(ok),[(r,len(pts(Cs[r],cols,vec))) for r in holders][:6])) +for r in res: print(r) +print('count ok>0:',sum(1 for r in res if r[9]>0),'holders>0:',sum(1 for r in res if r[7]>0),'low>0:',sum(1 for r in res if r[8]>0),'of',len(res)) +print('--- escape 2: point holders') +n_any=n_all=0;n_noclimb=0 +for z,(i,u,fz,fa,ru,role) in sorted(jumps.items()): + Rs,Cs=snapshots[z] + per=[] + for j in ru: + h=[r for r in range(NR) if r not in(z,u) and set(Rs[r])=={j}] + per.append(h) + anyh=all(per) + lowh=all([r for r in h if F.sub(Cs[r],fa)] for h in per) + nocl=all([r for r in h if F.sub(Cs[r],fa) and F.sub(fz,Cs[r])] for h in per) + n_any+=anyh;n_all+=lowh;n_noclimb+=nocl + if anyh and z in list(jumps)[:6]: print(z,per) +print('all columns have a pure point holder:',n_any,'inside plane:',n_all,'no-climb (frame>=z frame):',n_noclimb,'of',len(jumps)) diff --git a/research/helper-minimality/cards/B182/b182.py b/research/helper-minimality/cards/B182/b182.py new file mode 100644 index 0000000000..4fc4c6698d --- /dev/null +++ b/research/helper-minimality/cards/B182/b182.py @@ -0,0 +1,55 @@ +import sys,collections +sys.path.insert(0,(__import__('os').environ['HM_ROOT']+'/cards/B171')) +import lawler799 as L +path=(__import__('os').environ['HM_ROOT']+'/inputs/words/799-X4-CANONICAL-WORD.json.gz') +# monkeypatch site classification: treat bridges as 'BR', all S3/S4 as before +import csv +orig=csv.DictReader +def run2(): + d,v,ops=L.load(path);n=len(d['start']);P=d['ports'] + from fractions import Fraction as Q + fr=[L.basis(d['frames'][f]) for f in d['start']] + rows=[{i:Q(1)} if i=716 else '?') + copies.append((c,s,t,len(SEQ))) + rt=rows[t] + for j,x in list(rows[s].items()): + z=rt.get(j,0)+q*x + if z: rt[j]=z + else: rt.pop(j,None) + SEQ.append((t,s));Lpre.append((fr[t],fr[s]));fr[t]=L.basis(list(fr[t])+list(fr[s])) + else: + q=Q(e[2],e[3]);rows[t]={j:q*x for j,x in rows[t].items()} + return d,v,SEQ,Lpre,copies,P +d,v,SEQ,Lpre,copies,P=run2() +print(collections.Counter(c[0] for c in copies)) +sel=[c for c in copies if c[0]=='BR' or c[0]=='S3' and (450<=c[2]<=457 or 484<=c[2]<=569)] +print(len(sel),[c for c in sel if c[0]=='BR']) +out,bad=L.certify(d,v,SEQ,Lpre,sel,P) +for k,c in sorted(out.items()):print(k,c) +print('passing',[(b[0],b[1],b[2]) for b in bad]) +# value check: bridge rows at fill time pairwise non-proportional +from fractions import Fraction as Q +d2,v2,ops=L.load(path);rows=[{i:Q(1)} if i=716 and t not in snap and not rows[t] and rows[s]: + q=Q(e[3],e[4]);snap[t]={j:q*x for j,x in rows[s].items()} + q=Q(e[3],e[4]) + for j,x in list(rows[s].items()): + z=rows[t].get(j,0)+q*x + if z: rows[t][j]=z + else: rows[t].pop(j,None) + else: + q=Q(e[2],e[3]);rows[t]={j:q*x for j,x in rows[t].items()} +def norm(r): + k=min(r);return tuple(sorted((j,x/r[k]) for j,x in r.items())) +print('distinct',len({norm(r) for r in snap.values()}),'of',len(snap),[len(r) for r in snap.values()]) diff --git a/research/helper-minimality/cards/B98b/dyad.py b/research/helper-minimality/cards/B98b/dyad.py new file mode 100644 index 0000000000..8464f29a0c --- /dev/null +++ b/research/helper-minimality/cards/B98b/dyad.py @@ -0,0 +1,84 @@ +"""Dyadic (Z[1/2]) exact synthesis of the end-of-A block state with fewer scratch registers.""" +import sys,random +exec(open('synth.py').read().split("tot_save=0")[0]) +def split(x): # Fraction dyadic -> (odd int signed, exp) + assert x.denominator&(x.denominator-1)==0,x + n,dn=x.numerator,x.denominator;e=-(dn.bit_length()-1) + while n and n%2==0:n//=2;e+=1 + return n,e +def synth_dy(rowsv,k,seed=0,maxops=100000): + rnd=random.Random(seed);n=len(rowsv);cols=sorted({j for r in rowsv for j in r}) + M=[[r.get(j,Q(0)) for j in cols] for r in rowsv];ops=[] + def addop(t,s,q): + ops.append(('add',t,s,q));M[t]=[a+q*b for a,b in zip(M[t],M[s])] + done=[] + for step in range(k): + rem=[c for c in range(k) if c not in done] + if seed: rnd.shuffle(rem) + best=None + for c in rem: + ent=[M[i][c] for i in range(n) if i not in done] + # row-Euclid on active rows (those whose index not a finished pivot) - lines finished are rows=done cols + pass + c=rem[0] if seed else None + order=rem + for c in order: + act=[i for i in range(n) if i not in done and M[i][c]!=0] + # gcd odd part check without mutating: integer gcd of odd parts + from math import gcd + g=0 + for i in act:g=gcd(g,abs(split(M[i][c])[0])) + if g==1:break + else: return None + while True: + act=[i for i in range(n) if i not in done and M[i][c]!=0] + if len(act)==1:break + p=min(act,key=lambda i:(abs(split(M[i][c])[0]),i)) + op,ep=split(M[p][c]) + for i in act: + if i==p:continue + oi,ei=split(M[i][c]);m=round(Q(oi,op)); + if m==0:m=1 if (oi>0)==(op>0) else -1 + addop(i,p,-Q(m)*Q(2)**(ei-ep)) + p=act[0] + if split(M[p][c])[0] not in(1,-1):return None + # bring into row c (line row c) + if p!=c: + if M[c][c]!=0 or c in done:raise Exception('line row not clear') + addop(c,p,Q(1));p=c + q=M[c][c] + if q!=1: + ops.append(('scale',c,1/q));M[c]=[x/q for x in M[c]] + for i in range(n): + if i!=c and M[i][c]!=0:addop(i,c,-M[i][c]) + done.append(c) + # after pivots, remaining nonpivot rows must be zero and line rows identity (up to cross terms removed) + for i in range(n): + for j in range(k):assert M[i][j]==(1 if i==j else 0),(i,j,M[i][j]) + fw=[('add',o[1],o[2],-o[3]) if o[0]=='add' else ('scale',o[1],1/o[2]) for o in reversed(ops)] + return fw,cols +def verify2(fw,cols,rowsv): + k=len(cols);n=len(rowsv);R=[[Q(1) if i==j else Q(0) for j in range(k)] if i=v or (e[0]=='add' and e[2] in S_ and e[1] list of (part,idx,tgt,frame dim,form) +seq=[('A',i,e) for i,e in enumerate(d['A'])]+[('B',i,e) for i,e in enumerate(d['B'])]+[('tail',i,e) for i,e in enumerate(d['tail'])] +allregs={r for b in blocks.values() for r in b} +for p,i,e in seq: + if e[0]=='add' and e[2] in allregs and p!='A': + reads[e[2]].append((p,i,e[1],L(e[-1]),norm(rows[e[2]]))) + ap(e) +import pickle;pickle.dump((dict(blocks),dict(reads)),open('iface.pkl','wb')) +b0=blocks['(0, 1, 2, 3)'] +for r in b0: + rs=reads[r] + print(r,[(p,i,fd) for p,i,t,fd,f in rs][:12], 'nforms',len({f for *_,f in rs})) diff --git a/research/helper-minimality/cards/B98b/synth.py b/research/helper-minimality/cards/B98b/synth.py new file mode 100644 index 0000000000..777d9fd71c --- /dev/null +++ b/research/helper-minimality/cards/B98b/synth.py @@ -0,0 +1,62 @@ +"""Re-synthesise a block's A program with fewer scratch registers. Exact Fractions. +Registers: lines (8, rows = cols identity) + kept scratch. Target = shipped end-of-A rows (rows of canonical replay). +Backward elimination from target to [I;0], invert.""" +import gzip,json,pickle,csv,math,sys +from fractions import Fraction as Q +exec(open('iface.py').read().split("reads=defaultdict")[0]) +for e in d['A']: ap(e) +blocks,_=pickle.load(open('iface.pkl','rb')) +def src(k,S_): return {e[2] for e in d[k] if e[0]=='add' and e[2] in S_} +H=list(csv.DictReader(open((__import__('os').environ['HM_ROOT']+'/inputs/ledger_helpers.csv')))) +psi={int(h['reg']):float(h['psi']) for h in H} +def synth(names,rowsv): + n=len(rowsv);cols=sorted({j for r in rowsv for j in r});M=[[r.get(j,Q(0)) for j in cols] for r in rowsv] + ops=[] # backward ops transforming M -> [I;0] + k=len(cols) + for c in range(k): + # pivot row among rows >=c ... target pivot row is line index c (rows 0..k-1 are lines) + cand=[i for i in range(n) if M[i][c]!=0 and (i>=c or iadd(t,s,-q), scale(c,s)->scale(c,1/s) + fw=[] + for o in reversed(ops): + fw.append(('add',o[1],o[2],-o[3]) if o[0]=='add' else ('scale',o[1],1/o[2])) + return fw,cols +def verify(fw,cols,rowsv): + n=len(rowsv);k=len(cols);R=[[Q(1) if i==j else Q(0) for j in range(k)] if i identity start index i<->col + names=lines+sorted(keep) + rv=[rows[r] for r in names] + out=synth(names,rv) + if out is None: res.append((bn,'rank-deficient',len(keep)));continue + fw,cc=out + ok=verify(fw,cc,rv) + dens=sorted({o[3].denominator if o[0]=='add' else o[2].denominator for o in fw}|{1}) + drop=sorted(S_-keep);sv=sum(psi[r] for r in drop) + res.append((bn,'ok' if ok else 'FAIL',len(keep),'ops',len(fw),'dens',dens[:8],'drop',len(drop),'psi_saved',round(sv,1))) + tot_save+=sv if ok else 0 +for r in res:print(r) +print('total psi of dropped regs (verified blocks)',round(tot_save,1)) diff --git a/research/helper-minimality/cards/B98c/work/gate.py b/research/helper-minimality/cards/B98c/work/gate.py new file mode 100644 index 0000000000..408885513e --- /dev/null +++ b/research/helper-minimality/cards/B98c/work/gate.py @@ -0,0 +1,32 @@ +import sys,os,pickle,csv,math,gzip,json +from collections import Counter,defaultdict +from fractions import Fraction as Q +sys.dont_write_bytecode=True +sys.path.insert(0,(__import__('os').environ['HM_ROOT']+'/cards/B99/work')) +os.chdir((__import__('os').environ['HM_ROOT']+'/cards/B98b')) +sys.path.insert(0,'.') +import lib +from fr import FL +src_dy=open('dyad.py').read() +ns={} +exec(src_dy.split("if __name__=='__main__':")[0],ns) +d=ns['d'];blocks=ns['blocks'];rows0=ns['rows'];src=ns['src'];psi=ns['psi'];v=ns['v'] +F=FL(d) +regs=lambda e:[e[1]]+([e[2]] if e[0]=='add' else []) +good=['(0, 2, 4, 6)','(0, 2, 5, 7)','(1, 2, 4, 7)','(1, 2, 5, 6)','(1, 3, 4, 6)','(1, 3, 5, 7)','(2, 3, 4, 5)','(2, 3, 6, 7)','(4, 5, 6, 7)'] +A=[list(e) for e in d['A']] +plans={} +for bn in good: + regsb=blocks[bn];S_=set(regsb) + keep=src('B',S_)|src('tail',S_)|src('cut',S_)|src('compensation',S_)|src('cleanup',S_)|{e[2] for e in d['A'] if e[0]=='add' and e[2] in S_ and e[1] not in S_ and e[1]>=v or (e[0]=='add' and e[2] in S_ and e[1]>p&1:x^=b[p] + if x: + p=x.bit_length()-1 + for q in b: + if b[q]>>p&1:b[q]^=x + b[p]=x + return tuple(b[p] for p in sorted(b,reverse=True)) +class FL: + def __init__(s,d): + s.fr=[basis(f) for f in d['frames']] + s.id={f:i for i,f in enumerate(s.fr)} + s.ss=[None]*len(s.fr) + def add(s,f): + f=basis(f) + if f not in s.id: s.id[f]=len(s.fr);s.fr.append(f) + return s.id[f] + def join(s,a,b): + if a==b: return a + return s.add(s.fr[a]+s.fr[b]) + def sub(s,a,b): # frame a subset of b + return basis(s.fr[a]+s.fr[b])==s.fr[b] + def dim(s,a): return len(s.fr[a]) diff --git a/research/helper-minimality/cards/B99/work/lib.py b/research/helper-minimality/cards/B99/work/lib.py new file mode 100644 index 0000000000..24c062daaa --- /dev/null +++ b/research/helper-minimality/cards/B99/work/lib.py @@ -0,0 +1,27 @@ +import gzip,json +from collections import Counter,defaultdict +from fractions import Fraction as Q +CW=(__import__('os').environ['HM_ROOT']+'/inputs/words/656-CANONICAL-WORD.json.gz') +def load(): return json.load(gzip.open(CW)) +def climbs(d,A=None,B=None,tail=None,start=None,final=None): + A=d['A'] if A is None else A; B=d['B'] if B is None else B; tail=d['tail'] if tail is None else tail + start=d['start'] if start is None else start; final=d['final'] if final is None else final + fr=d['frames'];cur=list(start);out=[] + L=lambda f:len(fr[f]) + def climb(r,f,tag): + if cur[r]==f:return + out.append((r,L(f)-L(cur[r]),tag));cur[r]=f + for part in ('A','centers','B','tail','final'): + if part in('A','B','tail'): + ops={'A':A,'B':B,'tail':tail}[part] + for i,e in enumerate(ops): + for r in [e[1]]+([e[2]] if e[0]=='add' else []):climb(r,e[-1],part) + elif part=='centers': + for k,r in enumerate(d['centers']): + cf=d['center_frames'][k] + terms=[e for e in d['cut'] if e[2]==r] + path=[cf]+sorted({0 for e in terms}-{cf},key=lambda x:-L(x)) + for a in range(1,len(path)):out.append((r,L(path[a-1])-L(path[a]),'cen')) + else: + for r,f in enumerate(final):climb(r,f,'final') + return out diff --git a/research/helper-minimality/cards/B99/work/rep.py b/research/helper-minimality/cards/B99/work/rep.py new file mode 100644 index 0000000000..74711205e7 --- /dev/null +++ b/research/helper-minimality/cards/B99/work/rep.py @@ -0,0 +1,11 @@ +from lib import * +def apply(rows,e): + if e[0]=='add': + _,t,s,a,b,*_=e;q=Q(a,b);rt=rows[t] + for j,x in list(rows[s].items()): + z=rt.get(j,0)+q*x + if z:rt[j]=z + else:rt.pop(j,None) + else: + _,t,a,b,*_=e;q=Q(a,b);rows[t]={j:q*x for j,x in rows[t].items()} +def init(): return [{i:Q(1)} if i<112 else {} for i in range(716)] diff --git a/research/helper-minimality/cards/SYN-18/planes.py b/research/helper-minimality/cards/SYN-18/planes.py new file mode 100644 index 0000000000..0b986ba69e --- /dev/null +++ b/research/helper-minimality/cards/SYN-18/planes.py @@ -0,0 +1,14 @@ +# SYN-18 probe: plane-stopper planes per S1 block: parallel classes, rows, pairing on a common plane. +exec(open((__import__('os').environ['HM_ROOT']+'/cards/B167/blockscan.py')).read().split("for r in rep: print(r)")[0].replace("rep.append((bn,len(cols)","INFO[bn]=(cols,vec,planes,H,B,S,wide,pairs,scr);rep.append((bn,len(cols)") .replace("rep=[]","rep=[];INFO={}")) +from collections import Counter +for bn,(cols,vec,planes,H,B,S,wide,pairs,scr) in INFO.items(): + # plane -> its direction (functional): plane through 4 points; parallel class = linear part + def lin(P): + ps=sorted(P); v0=vec[ps[0]]; return frozenset(vec[p]^v0 for p in ps) + cls=Counter(lin(H[z]) for z in planes) + hz=Counter(H[z] for z in planes) + print(bn,'stoppers',len(planes),'distinct planes',len(hz),'parallel classes used',len(cls),'class sizes',sorted(cls.values()), + '| B-bound sizes', Counter(len(B[r]) for r in cols+scr)) + if bn==list(INFO)[3]: + for z in planes: print(' z',z,'H',sorted(H[z]),'row',{k:str(v) for k,v in rows0[z].items()}) + for u in wide: print(' courier',u,'row',{k:str(v) for k,v in rows0[u].items()}) diff --git a/research/helper-minimality/checks/anchors.py b/research/helper-minimality/checks/anchors.py new file mode 100644 index 0000000000..dd1cfb0d57 --- /dev/null +++ b/research/helper-minimality/checks/anchors.py @@ -0,0 +1,31 @@ +"""File:line anchors quoted in the README: each quoted line must contain the quoted text in the vendored file.""" +import os, sys +HM = os.environ['HM_ROOT']; bad = 0 +def rd(p): return open(os.path.join(HM, p), encoding='utf-8').read().split('\n') +A = [ + ('inputs/pr799/independent/audit_local.py', 31, "def registers(e):return e[1:3] if e[0]=='add' else e[1:2]", 'AL:31 registers() of an op'), + ('inputs/pr799/independent/audit_local.py', 82, "main=w['A']+w['cut']+w['B']", 'AL:82 one cut section'), + ('inputs/pr799/independent/audit_local.py', 88, "non-target reads target", 'AL:88 covers A,B only'), + ('inputs/pr799/independent/audit_local.py', 115, "end=[full]*v+[basis([x for x in range(1,1< 0 and len(r[3]) == r[4] for r in rows)) +print('%s B128.table %d rows, %d helpers x %d policies, all rejected, every row has >= 1 frame violation' % ('PASS' if ok else 'FAIL', len(rows), len({r[0] for r in rows}), len(c))) +sys.exit(0 if ok else 1) diff --git a/research/helper-minimality/checks/expect.py b/research/helper-minimality/checks/expect.py new file mode 100644 index 0000000000..5b0b3118c7 --- /dev/null +++ b/research/helper-minimality/checks/expect.py @@ -0,0 +1,31 @@ +"""Assertion helper of verify.sh. usage: expect.py LABEL LOG [--has REGEX]... [--count REGEX N]... [--absent REGEX]... +Prints one 'PASS LABEL detail' or 'FAIL LABEL reason' line. Also FAILS if LOG.rc exists and is not 0 (the run itself failed).""" +import re, sys, os +label, log = sys.argv[1], sys.argv[2] +args = sys.argv[3:] +txt = open(log, encoding='utf-8', errors='replace').read() if os.path.isfile(log) else None +bad = [] +if txt is None: + bad.append('missing log ' + os.path.basename(log)) +else: + rc = log[:-4] + '.rc' if log.endswith('.log') else None + if rc and os.path.isfile(rc) and open(rc).read().strip() != '0': + bad.append('run exited %s' % open(rc).read().strip()) + i = 0 + while i < len(args): + a = args[i] + if a == '--has': + if not re.search(args[i + 1], txt, re.M): bad.append('missing: ' + args[i + 1]) + i += 2 + elif a == '--absent': + if re.search(args[i + 1], txt, re.M): bad.append('unexpected: ' + args[i + 1]) + i += 2 + elif a == '--count': + n = len(re.findall(args[i + 1], txt, re.M)) + if n != int(args[i + 2]): bad.append('count of %r is %d, want %s' % (args[i + 1], n, args[i + 2])) + i += 3 + else: + bad.append('bad option ' + a); i += 1 +if bad: + print('FAIL %s %s' % (label, '; '.join(bad))); sys.exit(1) +print('PASS %s' % label) diff --git a/research/helper-minimality/checks/lawler_check.py b/research/helper-minimality/checks/lawler_check.py new file mode 100644 index 0000000000..bf0a290a1b --- /dev/null +++ b/research/helper-minimality/checks/lawler_check.py @@ -0,0 +1,27 @@ +"""Soundness checks of the order-free Lawler oracle used by S3/S4/bridge rows (cards/B171/lawler799.py:lawler): + (a) synthetic mergeable / conflicting pairs; (b) 3000 seeded random small instances: lawler finds an order iff brute force over all + permutations does, and a returned order is feasible.""" +import os, sys, random, itertools +HM = os.environ['HM_ROOT']; sys.path.insert(0, HM + '/cards/B171') +import lawler799 as L +def feasible(order, visits, base): + J = list(base) + for k in order: + J = list(L.basis(J + list(visits[k][0]))) + if not L.ok(J, visits[k][1]): return False + return True +o, rem = L.lawler([((0b1000,), [0b110]), ((0b1,), [0b1100])], (), ()) +print('PASS lawler.mergeable' if o is not None else 'FAIL lawler.mergeable') +o2, rem2 = L.lawler([((0b10,), [0b10]), ((0b1,), [0b1])], (), ()) +print('PASS lawler.conflict' if o2 is None else 'FAIL lawler.conflict') +rnd = random.Random(20261013); agree = feas = 0; bad = 0 +for t in range(3000): + n = rnd.randint(1, 6); m = rnd.randint(2, 6) + vis = [(tuple(rnd.randrange(1, 1 << m) for _ in range(rnd.randint(1, 2))), [rnd.randrange(1, 1 << m) for _ in range(rnd.randint(1, 2))]) for _ in range(n)] + base = tuple(rnd.randrange(1, 1 << m) for _ in range(rnd.randint(0, 1))) + bf = any(feasible(p, vis, base) for p in itertools.permutations(range(n))) + order, _ = L.lawler(vis, base, ()) + if (order is not None) != bf or (order is not None and not feasible(order, vis, base)): bad += 1 + feas += bf; agree += 1 +print('%s lawler.bruteforce %d instances, %d feasible, %d disagreements' % ('PASS' if not bad and 0 < feas < agree else 'FAIL', agree, feas, bad)) +sys.exit(1 if bad else 0) diff --git a/research/helper-minimality/checks/make_toy.py b/research/helper-minimality/checks/make_toy.py new file mode 100644 index 0000000000..83038b8eaf --- /dev/null +++ b/research/helper-minimality/checks/make_toy.py @@ -0,0 +1,6 @@ +"""Build the verifier-gap toy: the #799 X4 FULL-WORD plus a centre-free net-zero cut pair add 112<-5 (+1) first, add 112<-5 (-1) last.""" +import gzip, json, sys +w = json.load(gzip.open(sys.argv[1])) +w['cut'] = [['add', 112, 5, 1, 1, None]] + w['cut'] + [['add', 112, 5, -1, 1, None]] +with gzip.GzipFile(sys.argv[2], 'wb', mtime=0) as f: f.write(json.dumps(w).encode()) +print('toy cut length', len(w['cut'])) diff --git a/research/helper-minimality/checks/pairs_sample.py b/research/helper-minimality/checks/pairs_sample.py new file mode 100644 index 0000000000..616f6c2ab5 --- /dev/null +++ b/research/helper-minimality/checks/pairs_sample.py @@ -0,0 +1,27 @@ +"""Pre-read table (inputs/derived/pairs.json.gz): statistics of the stored table, a recompute of all 271 singles and 150 seeded pairs +with the exact oracle, and the no-op legality / kappa of the oracle on the #799 X4 word.""" +import os, sys, random +HM = os.environ['HM_ROOT']; os.chdir(HM + '/cards/B159'); sys.path.insert(0, '.') +from pairsio import load_pairs +import mdl +from collections import Counter +M, sg, pv = load_pairs(HM + '/inputs/derived/pairs.json.gz') +assert M == mdl.M +kinds = Counter(m[0] for m in M) +st = (len(M), kinds['h2r'], kinds['r2h'], kinds['def'], sum(1 for v in sg if not v), min(len(v) for v in sg), len(pv), sum(1 for v in pv.values() if not v), min(len(v) for v in pv.values())) +print('stored table: moves %d (h2r %d, r2h %d, deferrals %d); singles legal %d, min |V| %d; pairs %d, legal %d, min |V| %d' % st) +print('%s preread.stats' % ('PASS' if st == (271, 84, 92, 95, 0, 2, 36501, 0, 2) else 'FAIL')) +bad = 0 +for i, m in enumerate(M): + if mdl.V([m])[0] != sg[i]: bad += 1 +print('%s preread.singles recomputed 271 singles, %d differ' % ('PASS' if not bad else 'FAIL', bad)) +rnd = random.Random(717); keys = sorted(pv); samp = rnd.sample(keys, 150); bad2 = 0 +for ab in samp: + if mdl._p(ab) != pv[ab]: bad2 += 1 +print('%s preread.pairs-sample recomputed 150 seeded pairs, %d differ' % ('PASS' if not bad2 else 'FAIL', bad2)) +from decimal import Decimal +r = mdl.O.evaluate(mdl.s) +k = str(r['kappa']) +print('no-op legal %s kappa %s' % (r['legal'], k[:24])) +print('%s oracle.noop legal and kappa starts 0.001661634653669567 (the kappa published by #799)' % ('PASS' if r['legal'] and k.startswith('0.001661634653669567') else 'FAIL')) +sys.exit(1 if (st != (271, 84, 92, 95, 0, 2, 36501, 0, 2) or bad or bad2 or not r['legal']) else 0) diff --git a/research/helper-minimality/evidence/B128-NOTES.md b/research/helper-minimality/evidence/B128-NOTES.md new file mode 100644 index 0000000000..29db6d8ca3 --- /dev/null +++ b/research/helper-minimality/evidence/B128-NOTES.md @@ -0,0 +1,11 @@ +# B128: real verifier frame rule vs our model. VERDICT: KILL (model fidelity confirmed; no slack). ship=false +Verifier: gauge44-notri-layered/independent/audit_local.py in cards/B99b/work/pr659/research (same file as #645/#656 chain; the shipped layered word passes it in 0.85 s). +(1) Declared PER OP: every add/scale carries its own frame e[-1] (literal GF(2) basis). Not derived. Registers have no separate frame; cur[q] is just the last declared frame touching q. (:121-141) +(2) At an op: climb(q,e[-1]) for each register of the op (:138,:141) requires contained(cur[q],U) ("frame not monotone", :122) for BOTH operands, so the op frame must contain the current frames of both = common frame, join-monotone. NOTHING about the register's value/support/cancellation is checked at an ADD (pure annotation lattice). Content enters only via: end caps climb(q,end[q]) (:115,:142; targets = even-parity-with-port subspace, others full), centre frames == (:131), start frames (ports) (:117), helper cone checks on nonzero rows/columns for low-end helpers (:152-153), and the all-column endpoint identity. +=> Frames are NOT support-based in the verifier; our model's support-style join (oracle.py:57-64 `join` = span-sum of declared-minimal frames, :69-77 cascade) is the minimal legal declaration, and the same lattice. The "support" effect in our model is exactly induced by monotone climbing toward the end caps (an ADD reads target t: t's frame joins a's frame, so a ends above/below caps) - that is a verifier rule, not a model artifact. +(3) Invoice prices DECLARED per-op transitions: paid[d] += 1 per register climb of d dims (:121-125,:142), pinned to report.local_profile (:144), and recounted in code/invoice_allcold.py:48-49,64-71. Declaring more than the join only adds climbs (no benefit); min join is optimal. +## Fidelity test +Unedited word: oracle frames (via register bijection + GF(2) coordinate map port_full->port_canon, coord.py) match the audited FULL-WORD frames on 5726/5726 A/B ops; shipped word ACCEPTED by real audit_local (retest.py base). +B114 twin substitutions run through real audit_local (soft mode, all checks recorded): 272 edits (68 pure helpers x 4 policies; 5 helpers skipped, tail edited): number of real "frame not monotone" failures == oracle fin_raise count in 272/272 (typically 6), 0 edits with 0 frame violations. => our cascade == real verifier on frames. (Other failures - entrance response/endpoint - are extra and from not rebuilding the compensation; irrelevant, frames already reject.) B113 uses the same oracle path (fin_raise 4), not re-run. +Real-verifier ACCEPT of any killed edit: 0. No exact kappa. Compute: no heavy job needed (heavy.sh was BUSY 3/3; all runs <=2 min single process, ~1 s each). +Files: retest.py, soft.py, coord.py, all.txt (272 result rows). diff --git a/research/helper-minimality/evidence/B128-all.txt b/research/helper-minimality/evidence/B128-all.txt new file mode 100644 index 0000000000..3917a940f1 --- /dev/null +++ b/research/helper-minimality/evidence/B128-all.txt @@ -0,0 +1,272 @@ +(451, 'first', False, [134, 135, 136, 219, 220, 221], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(451, 'last', False, [134, 135, 136, 219, 220, 221], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(451, 'common', False, [134, 135, 136, 219, 220, 221], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(451, 'commonlast', False, [134, 135, 136, 219, 220, 221], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(452, 'first', False, [144, 145, 146, 160, 161, 162], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(452, 'last', False, [144, 145, 146, 160, 161, 162], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(452, 'common', False, [144, 145, 146, 160, 161, 162], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(452, 'commonlast', False, [144, 145, 146, 160, 161, 162], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(453, 'first', False, [140, 141, 142, 170, 171, 172], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(453, 'last', False, [140, 141, 142, 170, 171, 172], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(453, 'common', False, [140, 141, 142, 170, 171, 172], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(453, 'commonlast', False, [140, 141, 142, 170, 171, 172], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(454, 'first', False, [185, 186, 187, 194, 195, 196], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(454, 'last', False, [185, 186, 187, 194, 195, 196], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(454, 'common', False, [185, 186, 187, 194, 195, 196], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(454, 'commonlast', False, [185, 186, 187, 194, 195, 196], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(455, 'first', False, [176, 177, 178, 207, 208, 209], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(455, 'last', False, [176, 177, 178, 207, 208, 209], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(455, 'common', False, [176, 177, 178, 207, 208, 209], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(455, 'commonlast', False, [176, 177, 178, 207, 208, 209], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(456, 'first', False, [115, 116, 117, 179, 180, 181], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(456, 'last', False, [115, 116, 117, 179, 180, 181], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(456, 'common', False, [115, 116, 117, 179, 180, 181], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(456, 'commonlast', False, [115, 116, 117, 179, 180, 181], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(457, 'first', False, [125, 126, 163, 164, 190, 211], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(457, 'last', False, [125, 126, 163, 164, 190, 211], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(457, 'common', False, [125, 126, 163, 164, 190, 211], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(457, 'commonlast', False, [125, 126, 163, 164, 190, 211], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(458, 'first', False, [114, 137, 184, 188, 199, 201], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(458, 'last', False, [114, 137, 184, 188, 199, 201], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(458, 'common', False, [114, 137, 184, 188, 199, 201], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(458, 'commonlast', False, [114, 137, 184, 188, 199, 201], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(467, 'first', False, [133, 148, 153, 159, 218, 223], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(467, 'last', False, [133, 148, 153, 159, 218, 223], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(467, 'common', False, [133, 148, 153, 159, 218, 223], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(467, 'commonlast', False, [133, 148, 153, 159, 218, 223], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(468, 'first', False, [112, 139, 182, 183, 202, 203], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(468, 'last', False, [112, 139, 182, 183, 202, 203], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(468, 'common', False, [112, 139, 182, 183, 202, 203], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(468, 'commonlast', False, [112, 139, 182, 183, 202, 203], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(477, 'first', False, [148, 149, 155, 216, 222, 223], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(477, 'last', False, [148, 149, 155, 216, 222, 223], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(477, 'common', False, [148, 149, 155, 216, 222, 223], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(477, 'commonlast', False, [148, 149, 155, 216, 222, 223], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(490, 'first', False, [189, 215], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(490, 'last', False, [189, 215], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(490, 'common', False, [189, 215], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(490, 'commonlast', False, [189, 215], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(491, 'first', False, [124, 143], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(491, 'last', False, [124, 143], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(491, 'common', False, [124, 143], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(491, 'commonlast', False, [124, 143], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(514, 'first', False, [147, 157], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(514, 'last', False, [147, 157], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(514, 'common', False, [147, 157], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(514, 'commonlast', False, [147, 157], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(515, 'first', False, [197, 210], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(515, 'last', False, [197, 210], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(515, 'common', False, [197, 210], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(515, 'commonlast', False, [197, 210], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(516, 'first', False, [131, 151, 167, 214], 4, ['all-column endpoint failure (False, [250', 'all-column endpoint failure (True, [516]', 'dirt-column cone 516', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(516, 'last', False, [131, 151, 167, 214], 4, ['all-column endpoint failure (False, [250', 'all-column endpoint failure (True, [516]', 'dirt-column cone 516', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(516, 'common', False, [131, 151, 167, 214], 4, ['all-column endpoint failure (False, [250', 'all-column endpoint failure (True, [516]', 'dirt-column cone 516', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(516, 'commonlast', False, [131, 151, 167, 214], 4, ['all-column endpoint failure (False, [250', 'all-column endpoint failure (True, [516]', 'dirt-column cone 516', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(518, 'first', False, [129, 143, 189, 212], 4, ['all-column endpoint failure (False, [263', 'all-column endpoint failure (True, [518]', 'dirt-column cone 518', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(518, 'last', False, [129, 143, 189, 212], 4, ['all-column endpoint failure (False, [263', 'all-column endpoint failure (True, [518]', 'dirt-column cone 518', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(518, 'common', False, [129, 143, 189, 212], 4, ['all-column endpoint failure (False, [263', 'all-column endpoint failure (True, [518]', 'dirt-column cone 518', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(518, 'commonlast', False, [129, 143, 189, 212], 4, ['all-column endpoint failure (False, [263', 'all-column endpoint failure (True, [518]', 'dirt-column cone 518', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(519, 'first', False, [124, 150, 168, 215], 4, ['all-column endpoint failure (False, [258', 'all-column endpoint failure (True, [519]', 'paid profile mismatch']) +(519, 'last', False, [124, 150, 168, 215], 4, ['all-column endpoint failure (False, [258', 'all-column endpoint failure (True, [519]', 'paid profile mismatch']) +(519, 'common', False, [124, 150, 168, 215], 4, ['all-column endpoint failure (False, [258', 'all-column endpoint failure (True, [519]', 'paid profile mismatch']) +(519, 'commonlast', False, [124, 150, 168, 215], 4, ['all-column endpoint failure (False, [258', 'all-column endpoint failure (True, [519]', 'paid profile mismatch']) +(536, 'first', False, [136, 219], 2, ['all-column endpoint failure (False, [512', 'all-column endpoint failure (True, [512,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(536, 'last', False, [136, 219], 2, ['all-column endpoint failure (False, [512', 'all-column endpoint failure (True, [512,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(536, 'common', False, [136, 219], 2, ['all-column endpoint failure (False, [512', 'all-column endpoint failure (True, [512,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(536, 'commonlast', False, [136, 219], 2, ['all-column endpoint failure (False, [512', 'all-column endpoint failure (True, [512,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(537, 'first', False, [147, 157], 2, ['all-column endpoint failure (False, [513', 'all-column endpoint failure (True, [537]', 'dirt-column cone 537', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(537, 'last', False, [147, 157], 2, ['all-column endpoint failure (False, [513', 'all-column endpoint failure (True, [537]', 'dirt-column cone 537', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(537, 'common', False, [147, 157], 2, ['all-column endpoint failure (False, [513', 'all-column endpoint failure (True, [537]', 'dirt-column cone 537', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(537, 'commonlast', False, [147, 157], 2, ['all-column endpoint failure (False, [513', 'all-column endpoint failure (True, [537]', 'dirt-column cone 537', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(538, 'first', False, [198, 205], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(538, 'last', False, [198, 205], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(538, 'common', False, [198, 205], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(538, 'commonlast', False, [198, 205], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(539, 'first', False, [113, 118], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(539, 'last', False, [113, 118], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(539, 'common', False, [113, 118], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(539, 'commonlast', False, [113, 118], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(548, 'first', False, [134, 221], 2, ['all-column endpoint failure (False, [524', 'all-column endpoint failure (True, [524,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(548, 'last', False, [134, 221], 2, ['all-column endpoint failure (False, [524', 'all-column endpoint failure (True, [524,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(548, 'common', False, [134, 221], 2, ['all-column endpoint failure (False, [524', 'all-column endpoint failure (True, [524,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(548, 'commonlast', False, [134, 221], 2, ['all-column endpoint failure (False, [524', 'all-column endpoint failure (True, [524,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(549, 'first', False, [135, 220], 2, ['all-column endpoint failure (False, [525', 'all-column endpoint failure (True, [549]', 'dirt-column cone 549', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(549, 'last', False, [135, 220], 2, ['all-column endpoint failure (False, [525', 'all-column endpoint failure (True, [549]', 'dirt-column cone 549', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(549, 'common', False, [135, 220], 2, ['all-column endpoint failure (False, [525', 'all-column endpoint failure (True, [549]', 'dirt-column cone 549', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(549, 'commonlast', False, [135, 220], 2, ['all-column endpoint failure (False, [525', 'all-column endpoint failure (True, [549]', 'dirt-column cone 549', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(552, 'first', False, [113, 140, 187, 198], 4, ['all-column endpoint failure (False, [245', 'all-column endpoint failure (True, [552,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(552, 'last', False, [113, 140, 187, 198], 4, ['all-column endpoint failure (False, [245', 'all-column endpoint failure (True, [552,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(552, 'common', False, [113, 140, 187, 198], 4, ['all-column endpoint failure (False, [245', 'all-column endpoint failure (True, [552,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(552, 'commonlast', False, [113, 140, 187, 198], 4, ['all-column endpoint failure (False, [245', 'all-column endpoint failure (True, [552,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(553, 'first', False, [118, 170, 194, 205], 4, ['all-column endpoint failure (False, [240', 'all-column endpoint failure (True, [553,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(553, 'last', False, [118, 170, 194, 205], 4, ['all-column endpoint failure (False, [240', 'all-column endpoint failure (True, [553,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(553, 'common', False, [118, 170, 194, 205], 4, ['all-column endpoint failure (False, [240', 'all-column endpoint failure (True, [553,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(553, 'commonlast', False, [118, 170, 194, 205], 4, ['all-column endpoint failure (False, [240', 'all-column endpoint failure (True, [553,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(554, 'first', False, [141, 142, 185, 186], 4, ['all-column endpoint failure (False, [261', 'all-column endpoint failure (True, [554,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(554, 'last', False, [141, 142, 185, 186], 4, ['all-column endpoint failure (False, [261', 'all-column endpoint failure (True, [554,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(554, 'common', False, [141, 142, 185, 186], 4, ['all-column endpoint failure (False, [261', 'all-column endpoint failure (True, [554,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(554, 'commonlast', False, [141, 142, 185, 186], 4, ['all-column endpoint failure (False, [261', 'all-column endpoint failure (True, [554,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(555, 'first', False, [171, 172, 195, 196], 4, ['all-column endpoint failure (False, [256', 'all-column endpoint failure (True, [555,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(555, 'last', False, [171, 172, 195, 196], 4, ['all-column endpoint failure (False, [256', 'all-column endpoint failure (True, [555,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(555, 'common', False, [171, 172, 195, 196], 4, ['all-column endpoint failure (False, [256', 'all-column endpoint failure (True, [555,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(555, 'commonlast', False, [171, 172, 195, 196], 4, ['all-column endpoint failure (False, [256', 'all-column endpoint failure (True, [555,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(560, 'first', False, [129, 150], 2, ['all-column endpoint failure (False, [488', 'all-column endpoint failure (True, [560]', 'dirt-column cone 560', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(560, 'last', False, [129, 150], 2, ['all-column endpoint failure (False, [488', 'all-column endpoint failure (True, [560]', 'dirt-column cone 560', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(560, 'common', False, [129, 150], 2, ['all-column endpoint failure (False, [488', 'all-column endpoint failure (True, [560]', 'dirt-column cone 560', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(560, 'commonlast', False, [129, 150], 2, ['all-column endpoint failure (False, [488', 'all-column endpoint failure (True, [560]', 'dirt-column cone 560', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(561, 'first', False, [189, 215], 2, ['all-column endpoint failure (False, [489', 'all-column endpoint failure (True, [561]', 'dirt-column cone 561', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(561, 'last', False, [189, 215], 2, ['all-column endpoint failure (False, [489', 'all-column endpoint failure (True, [561]', 'dirt-column cone 561', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(561, 'common', False, [189, 215], 2, ['all-column endpoint failure (False, [489', 'all-column endpoint failure (True, [561]', 'dirt-column cone 561', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(561, 'commonlast', False, [189, 215], 2, ['all-column endpoint failure (False, [489', 'all-column endpoint failure (True, [561]', 'dirt-column cone 561', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(562, 'first', False, [120, 138], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(562, 'last', False, [120, 138], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(562, 'common', False, [120, 138], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(562, 'commonlast', False, [120, 138], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(563, 'first', False, [192, 200], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(563, 'last', False, [192, 200], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(563, 'common', False, [192, 200], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(563, 'commonlast', False, [192, 200], 2, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(564, 'first', False, [141, 172, 186, 196], 4, ['all-column endpoint failure (False, [247', 'all-column endpoint failure (True, [564,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(564, 'last', False, [141, 172, 186, 196], 4, ['all-column endpoint failure (False, [247', 'all-column endpoint failure (True, [564,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(564, 'common', False, [141, 172, 186, 196], 4, ['all-column endpoint failure (False, [247', 'all-column endpoint failure (True, [564,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(564, 'commonlast', False, [141, 172, 186, 196], 4, ['all-column endpoint failure (False, [247', 'all-column endpoint failure (True, [564,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(565, 'first', False, [142, 171, 185, 195], 4, ['all-column endpoint failure (False, [246', 'all-column endpoint failure (True, [565]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(565, 'last', False, [142, 171, 185, 195], 4, ['all-column endpoint failure (False, [246', 'all-column endpoint failure (True, [565]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(565, 'common', False, [142, 171, 185, 195], 4, ['all-column endpoint failure (False, [246', 'all-column endpoint failure (True, [565]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(565, 'commonlast', False, [142, 171, 185, 195], 4, ['all-column endpoint failure (False, [246', 'all-column endpoint failure (True, [565]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(566, 'first', False, [113, 170, 194, 198], 4, ['all-column endpoint failure (False, [263', 'all-column endpoint failure (True, [566,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(566, 'last', False, [113, 170, 194, 198], 4, ['all-column endpoint failure (False, [263', 'all-column endpoint failure (True, [566,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(566, 'common', False, [113, 170, 194, 198], 4, ['all-column endpoint failure (False, [263', 'all-column endpoint failure (True, [566,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(566, 'commonlast', False, [113, 170, 194, 198], 4, ['all-column endpoint failure (False, [263', 'all-column endpoint failure (True, [566,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(567, 'first', False, [118, 140, 187, 205], 4, ['all-column endpoint failure (False, [262', 'all-column endpoint failure (True, [567]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(567, 'last', False, [118, 140, 187, 205], 4, ['all-column endpoint failure (False, [262', 'all-column endpoint failure (True, [567]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(567, 'common', False, [118, 140, 187, 205], 4, ['all-column endpoint failure (False, [262', 'all-column endpoint failure (True, [567]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(567, 'commonlast', False, [118, 140, 187, 205], 4, ['all-column endpoint failure (False, [262', 'all-column endpoint failure (True, [567]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(572, 'first', False, [131, 152], 2, ['all-column endpoint failure (False, [500', 'all-column endpoint failure (True, [572]', 'dirt-column cone 572', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(572, 'last', False, [131, 152], 2, ['all-column endpoint failure (False, [500', 'all-column endpoint failure (True, [572]', 'dirt-column cone 572', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(572, 'common', False, [131, 152], 2, ['all-column endpoint failure (False, [500', 'all-column endpoint failure (True, [572]', 'dirt-column cone 572', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(572, 'commonlast', False, [131, 152], 2, ['all-column endpoint failure (False, [500', 'all-column endpoint failure (True, [572]', 'dirt-column cone 572', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(573, 'first', False, [130, 151], 2, ['all-column endpoint failure (False, [501', 'all-column endpoint failure (True, [573]', 'dirt-column cone 573', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(573, 'last', False, [130, 151], 2, ['all-column endpoint failure (False, [501', 'all-column endpoint failure (True, [573]', 'dirt-column cone 573', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(573, 'common', False, [130, 151], 2, ['all-column endpoint failure (False, [501', 'all-column endpoint failure (True, [573]', 'dirt-column cone 573', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(573, 'commonlast', False, [130, 151], 2, ['all-column endpoint failure (False, [501', 'all-column endpoint failure (True, [573]', 'dirt-column cone 573', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(574, 'first', False, [125, 163, 190, 193, 204, 211], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(574, 'last', False, [125, 163, 190, 193, 204, 211], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(574, 'common', False, [125, 163, 190, 193, 204, 211], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(574, 'commonlast', False, [125, 163, 190, 193, 204, 211], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(575, 'first', False, [113, 170, 187, 205], 4, ['all-column endpoint failure (False, [274', 'all-column endpoint failure (True, [575,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(575, 'last', False, [113, 170, 187, 205], 4, ['all-column endpoint failure (False, [274', 'all-column endpoint failure (True, [575,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(575, 'common', False, [113, 170, 187, 205], 4, ['all-column endpoint failure (False, [274', 'all-column endpoint failure (True, [575,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(575, 'commonlast', False, [113, 170, 187, 205], 4, ['all-column endpoint failure (False, [274', 'all-column endpoint failure (True, [575,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(576, 'first', False, [118, 140, 194, 198], 4, ['all-column endpoint failure (False, [285', 'all-column endpoint failure (True, [576]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(576, 'last', False, [118, 140, 194, 198], 4, ['all-column endpoint failure (False, [285', 'all-column endpoint failure (True, [576]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(576, 'common', False, [118, 140, 194, 198], 4, ['all-column endpoint failure (False, [285', 'all-column endpoint failure (True, [576]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(576, 'commonlast', False, [118, 140, 194, 198], 4, ['all-column endpoint failure (False, [285', 'all-column endpoint failure (True, [576]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(577, 'first', False, [142, 171, 186, 196], 4, ['all-column endpoint failure (False, [290', 'all-column endpoint failure (True, [577,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(577, 'last', False, [142, 171, 186, 196], 4, ['all-column endpoint failure (False, [290', 'all-column endpoint failure (True, [577,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(577, 'common', False, [142, 171, 186, 196], 4, ['all-column endpoint failure (False, [290', 'all-column endpoint failure (True, [577,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(577, 'commonlast', False, [142, 171, 186, 196], 4, ['all-column endpoint failure (False, [290', 'all-column endpoint failure (True, [577,', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(578, 'first', False, [141, 172, 185, 195], 4, ['all-column endpoint failure (False, [301', 'all-column endpoint failure (True, [578]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(578, 'last', False, [141, 172, 185, 195], 4, ['all-column endpoint failure (False, [301', 'all-column endpoint failure (True, [578]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(578, 'common', False, [141, 172, 185, 195], 4, ['all-column endpoint failure (False, [301', 'all-column endpoint failure (True, [578]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(578, 'commonlast', False, [141, 172, 185, 195], 4, ['all-column endpoint failure (False, [301', 'all-column endpoint failure (True, [578]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(579, 'first', False, [115, 120, 200, 207], 4, ['all-column endpoint failure (False, [306', 'all-column endpoint failure (True, [579]', 'dirt-column cone 579', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(579, 'last', False, [115, 120, 200, 207], 4, ['all-column endpoint failure (False, [306', 'all-column endpoint failure (True, [579]', 'dirt-column cone 579', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(579, 'common', False, [115, 120, 200, 207], 4, ['all-column endpoint failure (False, [306', 'all-column endpoint failure (True, [579]', 'dirt-column cone 579', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(579, 'commonlast', False, [115, 120, 200, 207], 4, ['all-column endpoint failure (False, [306', 'all-column endpoint failure (True, [579]', 'dirt-column cone 579', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(580, 'first', False, [138, 178, 179, 192], 4, ['all-column endpoint failure (False, [317', 'all-column endpoint failure (True, [580]', 'paid profile mismatch']) +(580, 'last', False, [138, 178, 179, 192], 4, ['all-column endpoint failure (False, [317', 'all-column endpoint failure (True, [580]', 'paid profile mismatch']) +(580, 'common', False, [138, 178, 179, 192], 4, ['all-column endpoint failure (False, [317', 'all-column endpoint failure (True, [580]', 'paid profile mismatch']) +(580, 'commonlast', False, [138, 178, 179, 192], 4, ['all-column endpoint failure (False, [317', 'all-column endpoint failure (True, [580]', 'paid profile mismatch']) +(581, 'first', False, [116, 176, 181, 208], 4, ['all-column endpoint failure (False, [322', 'all-column endpoint failure (True, [581]', 'paid profile mismatch']) +(581, 'last', False, [116, 176, 181, 208], 4, ['all-column endpoint failure (False, [322', 'all-column endpoint failure (True, [581]', 'paid profile mismatch']) +(581, 'common', False, [116, 176, 181, 208], 4, ['all-column endpoint failure (False, [322', 'all-column endpoint failure (True, [581]', 'paid profile mismatch']) +(581, 'commonlast', False, [116, 176, 181, 208], 4, ['all-column endpoint failure (False, [322', 'all-column endpoint failure (True, [581]', 'paid profile mismatch']) +(582, 'first', False, [117, 177, 180, 209], 4, ['all-column endpoint failure (False, [333', 'all-column endpoint failure (True, [582]', 'paid profile mismatch']) +(582, 'last', False, [117, 177, 180, 209], 4, ['all-column endpoint failure (False, [333', 'all-column endpoint failure (True, [582]', 'paid profile mismatch']) +(582, 'common', False, [117, 177, 180, 209], 4, ['all-column endpoint failure (False, [333', 'all-column endpoint failure (True, [582]', 'paid profile mismatch']) +(582, 'commonlast', False, [117, 177, 180, 209], 4, ['all-column endpoint failure (False, [333', 'all-column endpoint failure (True, [582]', 'paid profile mismatch']) +(583, 'first', False, [123, 133, 148, 159, 175, 223], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(583, 'last', False, [123, 133, 148, 159, 175, 223], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(583, 'common', False, [123, 133, 148, 159, 175, 223], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(583, 'commonlast', False, [123, 133, 148, 159, 175, 223], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(584, 'first', False, [112, 126, 127, 139, 164, 165], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(584, 'last', False, [112, 126, 127, 139, 164, 165], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(584, 'common', False, [112, 126, 127, 139, 164, 165], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(584, 'commonlast', False, [112, 126, 127, 139, 164, 165], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(585, 'first', False, [171, 172, 185, 186], 4, ['all-column endpoint failure (False, [278', 'all-column endpoint failure (True, [585]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(585, 'last', False, [171, 172, 185, 186], 4, ['all-column endpoint failure (False, [278', 'all-column endpoint failure (True, [585]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(585, 'common', False, [171, 172, 185, 186], 4, ['all-column endpoint failure (False, [278', 'all-column endpoint failure (True, [585]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(585, 'commonlast', False, [171, 172, 185, 186], 4, ['all-column endpoint failure (False, [278', 'all-column endpoint failure (True, [585]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(586, 'first', False, [141, 142, 195, 196], 4, ['all-column endpoint failure (False, [276', 'all-column endpoint failure (True, [586]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(586, 'last', False, [141, 142, 195, 196], 4, ['all-column endpoint failure (False, [276', 'all-column endpoint failure (True, [586]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(586, 'common', False, [141, 142, 195, 196], 4, ['all-column endpoint failure (False, [276', 'all-column endpoint failure (True, [586]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(586, 'commonlast', False, [141, 142, 195, 196], 4, ['all-column endpoint failure (False, [276', 'all-column endpoint failure (True, [586]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(587, 'first', False, [113, 140, 194, 205], 4, ['all-column endpoint failure (False, [294', 'all-column endpoint failure (True, [587]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(587, 'last', False, [113, 140, 194, 205], 4, ['all-column endpoint failure (False, [294', 'all-column endpoint failure (True, [587]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(587, 'common', False, [113, 140, 194, 205], 4, ['all-column endpoint failure (False, [294', 'all-column endpoint failure (True, [587]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(587, 'commonlast', False, [113, 140, 194, 205], 4, ['all-column endpoint failure (False, [294', 'all-column endpoint failure (True, [587]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(588, 'first', False, [118, 170, 187, 198], 4, ['all-column endpoint failure (False, [292', 'all-column endpoint failure (True, [588]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(588, 'last', False, [118, 170, 187, 198], 4, ['all-column endpoint failure (False, [292', 'all-column endpoint failure (True, [588]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(588, 'common', False, [118, 170, 187, 198], 4, ['all-column endpoint failure (False, [292', 'all-column endpoint failure (True, [588]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(588, 'commonlast', False, [118, 170, 187, 198], 4, ['all-column endpoint failure (False, [292', 'all-column endpoint failure (True, [588]', 'nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(589, 'first', False, [120, 178, 179, 200], 4, ['all-column endpoint failure (False, [326', 'all-column endpoint failure (True, [589]', 'dirt-column cone 589', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(589, 'last', False, [120, 178, 179, 200], 4, ['all-column endpoint failure (False, [326', 'all-column endpoint failure (True, [589]', 'dirt-column cone 589', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(589, 'common', False, [120, 178, 179, 200], 4, ['all-column endpoint failure (False, [326', 'all-column endpoint failure (True, [589]', 'dirt-column cone 589', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(589, 'commonlast', False, [120, 178, 179, 200], 4, ['all-column endpoint failure (False, [326', 'all-column endpoint failure (True, [589]', 'dirt-column cone 589', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(590, 'first', False, [115, 138, 192, 207], 4, ['all-column endpoint failure (False, [324', 'all-column endpoint failure (True, [590]', 'paid profile mismatch']) +(590, 'last', False, [115, 138, 192, 207], 4, ['all-column endpoint failure (False, [324', 'all-column endpoint failure (True, [590]', 'paid profile mismatch']) +(590, 'common', False, [115, 138, 192, 207], 4, ['all-column endpoint failure (False, [324', 'all-column endpoint failure (True, [590]', 'paid profile mismatch']) +(590, 'commonlast', False, [115, 138, 192, 207], 4, ['all-column endpoint failure (False, [324', 'all-column endpoint failure (True, [590]', 'paid profile mismatch']) +(591, 'first', False, [116, 117, 208, 209], 4, ['all-column endpoint failure (False, [316', 'all-column endpoint failure (True, [591]', 'paid profile mismatch']) +(591, 'last', False, [116, 117, 208, 209], 4, ['all-column endpoint failure (False, [316', 'all-column endpoint failure (True, [591]', 'paid profile mismatch']) +(591, 'common', False, [116, 117, 208, 209], 4, ['all-column endpoint failure (False, [316', 'all-column endpoint failure (True, [591]', 'paid profile mismatch']) +(591, 'commonlast', False, [116, 117, 208, 209], 4, ['all-column endpoint failure (False, [316', 'all-column endpoint failure (True, [591]', 'paid profile mismatch']) +(592, 'first', False, [176, 177, 180, 181], 4, ['all-column endpoint failure (False, [308', 'all-column endpoint failure (True, [592]', 'dirt-column cone 592', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(592, 'last', False, [176, 177, 180, 181], 4, ['all-column endpoint failure (False, [308', 'all-column endpoint failure (True, [592]', 'dirt-column cone 592', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(592, 'common', False, [176, 177, 180, 181], 4, ['all-column endpoint failure (False, [308', 'all-column endpoint failure (True, [592]', 'dirt-column cone 592', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(592, 'commonlast', False, [176, 177, 180, 181], 4, ['all-column endpoint failure (False, [308', 'all-column endpoint failure (True, [592]', 'dirt-column cone 592', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(593, 'first', False, [121, 148, 149, 173, 222, 223], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(593, 'last', False, [121, 148, 149, 173, 222, 223], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(593, 'common', False, [121, 148, 149, 173, 222, 223], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(593, 'commonlast', False, [121, 148, 149, 173, 222, 223], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(594, 'first', False, [127, 153, 165, 182, 203, 218], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(594, 'last', False, [127, 153, 165, 182, 203, 218], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(594, 'common', False, [127, 153, 165, 182, 203, 218], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(594, 'commonlast', False, [127, 153, 165, 182, 203, 218], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(595, 'first', False, [115, 168, 178, 179, 207, 212], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(595, 'last', False, [115, 168, 178, 179, 207, 212], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(595, 'common', False, [115, 168, 178, 179, 207, 212], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(595, 'commonlast', False, [115, 168, 178, 179, 207, 212], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(596, 'first', False, [120, 124, 138, 143, 192, 200], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(596, 'last', False, [120, 124, 138, 143, 192, 200], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(596, 'common', False, [120, 124, 138, 143, 192, 200], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(596, 'commonlast', False, [120, 124, 138, 143, 192, 200], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(597, 'first', False, [140, 144, 160, 170, 187, 194], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(597, 'last', False, [140, 144, 160, 170, 187, 194], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(597, 'common', False, [140, 144, 160, 170, 187, 194], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(597, 'commonlast', False, [140, 144, 160, 170, 187, 194], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(598, 'first', False, [113, 118, 197, 198, 205, 210], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(598, 'last', False, [113, 118, 197, 198, 205, 210], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(598, 'common', False, [113, 118, 197, 198, 205, 210], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(598, 'commonlast', False, [113, 118, 197, 198, 205, 210], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(599, 'first', False, [142, 146, 162, 172, 185, 196], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(599, 'last', False, [142, 146, 162, 172, 185, 196], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(599, 'common', False, [142, 146, 162, 172, 185, 196], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(599, 'commonlast', False, [142, 146, 162, 172, 185, 196], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(600, 'first', False, [141, 145, 161, 171, 186, 195], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(600, 'last', False, [141, 145, 161, 171, 186, 195], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(600, 'common', False, [141, 145, 161, 171, 186, 195], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(600, 'commonlast', False, [141, 145, 161, 171, 186, 195], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(601, 'first', False, [117, 166, 176, 181, 209, 214], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(601, 'last', False, [117, 166, 176, 181, 209, 214], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(601, 'common', False, [117, 166, 176, 181, 209, 214], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(601, 'commonlast', False, [117, 166, 176, 181, 209, 214], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(602, 'first', False, [116, 167, 177, 180, 208, 213], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(602, 'last', False, [116, 167, 177, 180, 208, 213], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(602, 'common', False, [116, 167, 177, 180, 208, 213], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(602, 'commonlast', False, [116, 167, 177, 180, 208, 213], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(603, 'first', False, [125, 155, 163, 184, 201, 216], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(603, 'last', False, [125, 155, 163, 184, 201, 216], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(603, 'common', False, [125, 155, 163, 184, 201, 216], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) +(603, 'commonlast', False, [125, 155, 163, 184, 201, 216], 6, ['nonzero entrance response', 'paid profile mismatch', 'pre-wrapper touch of residual helper']) diff --git a/research/helper-minimality/evidence/B155-NOTES.md b/research/helper-minimality/evidence/B155-NOTES.md new file mode 100644 index 0000000000..075f79158d --- /dev/null +++ b/research/helper-minimality/evidence/B155-NOTES.md @@ -0,0 +1,10 @@ +# B155 NOTES: pre-read concentration on #799. KILL PROVEN (scoped). ship=false +Tools: gate0.py, ex.py (oracle799 + retained frames; inserted pre-reads get empty frame, moved reads keep stored frame), k.py. +Gate 0 (re-gauge): 118 pre-reads; value-equal register v (row = E_h, or h-r post-copy) existing inside t's window pre-read..next climb: count 0 / 118. Escape (1) of SYN-15 closed at fixed op order (needs a new construction, not an exchange). +Setup: 191 copy pairs on #799 (unit gate, pre-reads only on targets), 54 with movable reads, 176 single-read moves (h2r with matching pre-read delete, r2h with pre-read insert). All 230 exchanges value-exact (replay). +Results (exact oracle legality, net emptied = emptied - newly touched targets): +- singles: 0/176 legal. Full-pair exchanges: 38 legal, all net <= 0 (24 net 0 / dk<=0, rest net -1/-2, dk -1.1e-7..-2.2e-7); 8 net>0 are illegal. +- target-sharing full-pair sets k=2,3,4: 40/56/56 candidates (components cap at 2 pairs): 0 net>0 legal, 0 positive dk. +- move-level target-sharing sets: k=2 716 cands, k=3 2772 cands: 0 legal. (k=3 run inline ~100 s, queue was saturated.) +Verdict: KILL PROVEN for copy-pair joint exchanges on #799, retained frames, k<=3 move-level / k<=4 pair-level. Best exact kappa: none above #799 (1.661634653669567e-3 base; GO 1.66662e-3 not approached). Consistent with B151 (violations union-additive, no repair arcs). +Remaining escapes: op reordering of h's copy gate; end-frame convention change; new factory gauge delivering E_h inside a climb. Not tested here. diff --git a/research/helper-minimality/evidence/B159-NOTES.md b/research/helper-minimality/evidence/B159-NOTES.md new file mode 100644 index 0000000000..6d764abe6a --- /dev/null +++ b/research/helper-minimality/evidence/B159-NOTES.md @@ -0,0 +1,12 @@ +# B159 NOTES: minimum pre-read targets on #799 (exact-oracle conflict model + CP-SAT). CLOSED within the move family. ship=false +Files: mdl.py (271-move universe, exact oracle evaluate, pair table), ilp.py (CP-SAT, workers 2), tri.py (triple probe), pairs.pkl, tri.pkl. +Model (full #799 word, no 2-block shortcut needed: 14 ms/eval): moves = 84 h2r (read r not h, delete matching pre-read), 92 r2h (read h, insert pre-read), 95 pre-read deferrals +(to just after a later t climb whose frame holds h's), + 46 whole-copy-pair bundles. Leak set V(m) = exact set of raised final caps / centre violations from the forward join cascade. +Data: singles legal 0/271 (every |V| >= 2). Pairs 36,501: legal 0; creating NEW violations 0; 76 non-additive pairs (h2r+r2h, same pair) only SWAP violations (|V| 4->4). Min |V| over pairs = 2. +Triples: all 76 repair pairs x every 3rd move (20,368): legal 0, min |V| = 2. Bundles: 38/46 legal (exact), all net <= 0 (B155). +ILP: minimise touched targets, repair constraint "each leaked cap needs a pairwise repairer in the set", insert/delete pre-read counts per target. +- Ignore legality (ceiling of the move family): min touched 21 (45 cleared; exact check of that set: 104 violations). +- Legal moves only (singles V=0 + legal bundles) and the pairwise-repair model: min touched = 66, OPTIMAL, bound 66. Best legal set (9 bundles): touched 66, dk -3.2e-7. +Answer: minimum = 66 (full word) vs threshold 62: no target can be cleared. Pre-read lever CLOSED for this skeleton under exchange/deferral/h2r/r2h/copy-pair moves, retained frames. +Proof status: exact legality for every evaluated set; the bound is PROVEN only at the pairwise/triple-probe level (singles, all pairs, repair-pair triples), not for arbitrary k-sets (B155 adds target-sharing k<=3 move level, k<=4 pair level: 0). Not tested: copy-gate retiming jointly (B158 singles only), re-gauge, end-frame convention. +LEAD/SHIP: none. diff --git a/research/helper-minimality/evidence/B167-NOTES.md b/research/helper-minimality/evidence/B167-NOTES.md new file mode 100644 index 0000000000..7f19886fcc --- /dev/null +++ b/research/helper-minimality/evidence/B167-NOTES.md @@ -0,0 +1,14 @@ +# B167: frame-constrained S1 block re-synthesis. VERDICT: KILL PROVEN(scope: each of the 11 S1 blocks with 8 lines, interface = shipped bounds + end-of-A rows, own 24 registers, any horizon). ship=false, no splice/oracle (nothing feasible to splice). +Tools (all single-process, seconds): extract.py (block 4567 instance -> inst4567.json), level.py (LEVEL MODEL, CP-SAT), blockscan.py (counting certificate, all blocks), model.py (time-expanded macro-meeting CP-SAT, fallback), shipped.py/shipcls.py (shipped program as macro meetings / level classes), fixtest*.py. +## Structure found (new, exact) +- The 8 line vectors are the points of AG(3,2); every frame is a FLAT of size 1/2/4/8 (52 of the 67 subspaces occur). 4567: 8 pair-bound regs (Haar pairs along one direction), 8 PLANE-bound regs (line 46 + scratch 434,436,438,439,440,444,446; each target row has all 4 points of its plane), 8 whole-bound regs (20,37,110,432,433,435,437,442). +- WLOG theorem: sort meetings by join size => program = 4 levels; at level l a register joins one flat class Psi (prev frame <= Psi <= bound); any unimodular remix of a class is realisable (Euclid, joins stay <= Psi). So "frame schedule" = 4 class labels per register; values = module/linear algebra per class (level.py: out=U*in encoded as span equality over F_3, a sound relaxation). +## Sanity (shipped found?) +- Shipped program re-expressed in the model: 36 macro meetings (macro model, stage 1) and 4-level classes (level model): both OPTIMAL/feasible with the shipped structure fixed (0.6 s); fixing only level 1 (copy-outs) the solver completes levels 2-4 itself in 17 s, only level 2: 4 s. FREE discovery of the 16-register program (nothing fixed) not achieved in 100 s (UNKNOWN); a 1-h 2-worker job B167_free16 is queued (log_free16.txt). So: shipped verified + found with one level fixed; not found blind. +## Result: k=15 for block 4567 is INFEASIBLE (and k<=15 in all 11 blocks), proof by counting + solver +- LEMMA. A plane-bound register z whose target row has support = all 4 points of its plane Pi must, at the meeting where its frame jumps from <=2 points to Pi, meet a partner whose bound contains Pi (join must be <= BOTH bounds): only whole-bound registers qualify (all 8 plane stoppers have distinct planes). After serving Pi1 a whole-bound partner has frame >= Pi1, so it can never serve Pi2 != Pi1 (join would be whole > bound(z2)). => #whole-bound registers >= #plane stoppers. +- blockscan.py: all 11 blocks with 8 lines have 8 plane stoppers (distinct planes) and exactly 8 whole-bound registers (3 lines + scratch base+{0,1,3,5,10}); perfect matching forced => EVERY whole-bound register is indispensable, including all B98b "never-read" ones (433/435; base+1,+3,+5,+10), B115's 433/435 and B166's 437/442 (they are the plane couriers; their END rows are dead but their WORK is not). +- Independent solver confirmation (level.py, no lemma): drop 433 => INFEASIBLE in 49 s (F_3 relaxation, no horizon). With the lemma as implied constraints: drop 437, drop 435, drop {433,435} => INFEASIBLE in 3-5 s. +## Consequences / what would be needed to save a register +- No 14/15-register S1 program exists for these interfaces; the +2.0% b estimate of B98b (and B162's -3 w1 dup trick) is void. The only escape is an INTERFACE change: fewer plane-stopper rows (each plane row removed also frees its courier => saves 2 regs) or a plane register whose row supports <=2 points. Needs B/tail to stop reading that row; not a block-local synthesis. +- Reusable: level.py takes any block instance (rewrite extract.py) and --drop/--free; blockscan.py gives the Hall bound for all 14 blocks in 1 s. Blocks (0,1,*) (56 cols, shared lines) not scanned. diff --git a/research/helper-minimality/evidence/B171-NOTES.md b/research/helper-minimality/evidence/B171-NOTES.md new file mode 100644 index 0000000000..347b969d97 --- /dev/null +++ b/research/helper-minimality/evidence/B171-NOTES.md @@ -0,0 +1,17 @@ +# B171 (reduced): S1 lemma on blocks (0,1,*), Lawler on #799. VERDICT: Lawler PROVEN on #799 (268/268); S1 lemma does NOT extend to (0,1,*) (not tight). ship=false, no kappa claim. No heavy jobs used (all runs <2 min, single process). +Tools: scan01.py/scan01b.py (B167 plane-partner scan on blocks (0,1,*), reuse B98c gate.py loader), lawler799.py (B172 certificate on any word; copies found by first row-fill of S3/S4 ledger ids), pair799.py (two-visit conflicts). +## 1. B167 lemma on blocks (0,1,2,3),(0,1,4,5),(0,1,6,7) (16 scratch each; 104 distinct columns, 56 per block, rank-8 vectors, all 104 cols are start-dim-1 line registers) +- Same block anatomy as the 11 S1 blocks: per block 1 register with |support|=56 (whole bound), 7 PLANE stoppers (|S|=4, hull=bound=4 cols; 21 stoppers, 21 DISTINCT planes), 4 scratch with |B|=8, 4 pair-bound. +- BUT the lemma gives no register lower bound: line registers (cols) have end-of-A bounds |B| 48 (21 cols) / 56 (18 cols), so they can serve as plane couriers. Max matching stopper->partner = 21/21 with cols alone; scratch-only partners 15/21 (5 wide scratch per block vs 7 stoppers). Hall bound is slack, not tight => NO certificate that the 48 scratch registers are needed. (PROVEN: the counting bound is not binding here; the 16-scratch minimality for (0,1,*) is UNPROVEN, not refuted. Whether line registers can really courier (their own row/bound duties, the 3-block sharing) is not modelled.) +## 2. Lawler (B172) on #799 canonical word (cards/B147/.../x4/local/CANONICAL-WORD.json.gz; 5687 add ops) +- Copies identified WITHOUT tags: first op that fills an empty helper row from a nonempty one, restricted to ledger S3/S4 ids: 156 S3 + 112 S4 = 268 (all coefficient 1, all in B part). +- Visits = all later adds touching a or b; g = partner pre-frame lower bound (target-side replay from start frames, centre joins ignored = weaker, sound), cap = perp(ports of targets reached, a,b sinks), base = a's frame at copy. NO precedence (relaxation). +- RESULT: 268/268 FAIL (S3 156/156, S4 112/112); each chain alone passes 268/268 (caps not over-tight); every copy already has a TWO-visit conflict (pair799.py). So no copy can be merged by any reorder. PROVEN [scope: #799 op multiset fixed, value-forced monotone lower-bound frames, caps = reached-target ports]. Identical outcome to #656 (B172). +- Not done: #870 (not local), precedence-aware variant (unneeded), multiset-changing merges. +## 3. Helper classes NOT covered by either proof (the unproven slack) +- S1 scratch of blocks (0,1,*): 48 regs (incl. 3 centres 224,240,256). B167 lemma slack (above). +- S3/S4 (268) vs multiset-CHANGING merges (undo/redo ADD, B169-style holder merges: 16 holders 484..569, 8 entering slots 450..457): outside the Lawler scope. +- 12 non-helper bridge registers 716..727 (start frames 423-427, 8-support fill in B): no proof either way. +- cut ops (224 cut entries) and 8 centre copies/centre frames: not examined. +- The 11 S1 blocks (176 scratch) are covered only for fixed interface (shipped bounds + end-of-A rows), not under interface change. +- S1 B167 lemma, Lawler S3/S4 and the frame-lower-bound g are not independently audited by a second reader. diff --git a/research/helper-minimality/evidence/B172-NOTES.md b/research/helper-minimality/evidence/B172-NOTES.md new file mode 100644 index 0000000000..cbb0f65d94 --- /dev/null +++ b/research/helper-minimality/evidence/B172-NOTES.md @@ -0,0 +1,10 @@ +# B172 (LIT): Lawler backward rule as order-free merge test. VERDICT: KILL PROVEN [scope: #656 S3/S4 copy pairs, op multiset fixed, value-forced min-frame lower bounds; #799 and non-S3/S4 helper pairs NOT run]. ship=false +Paper: Lawler, Mgmt Sci 19(5):544-546 (1973), 1|prec|f_max, least-cost-last (citation per card; not re-fetched). Fit is exact: merged-register frame after a prefix = join of g_j (nondecreasing set fn); feasible iff join(prefix_k) in cap_k for all k (earlier caps are implied since prefixes grow), i.e. f_max=0. +Tools: lawler.py (lawler() ~15 lines + build/precs; single process, <5 s), sanity.py. Input B82 rec.pkl (268 copies = 156 S3 + 112 S4). +Model per copy (a,b): visits = every post-copy op touching a or b. g_k = partner's frame before the op, LOWER bound = target-side replay (fr[t]=join(fr[t],fr[s]) only; value-forced). Base = a's pre-copy min frame. cap_k = perp(ports of targets reached from partner after the op; a,b treated as sinks since their onward flow is later visits). Precedence: same-chain pairs with a mutation, plus unmutated chain before the other's first mutation. +Results: all 268/268 merged visit sets FAIL, even WITHOUT precedence (relaxation) -> order-free, precedence-free certificate. 0 passing, 0 removable copies. Certified: S3 156/156 (124 value-feasible + 32 both-mutated), S4 112/112. +Sanity: each chain alone passes (312/312 S3, 224/224 S4) so caps are not over-tight; synthetic mergeable pair returns an order, synthetic conflict returns None. Stronger: every one of the 268 already has a TWO-visit conflict (one visit from each chain) -> the certificate is a pair, easy to audit. +Note vs SYN-17 of.py (neither-order-blocked only 32 of 268 certified there, start-frame bound): the value-forced replay bound + per-visit caps closes the gap, so the 236 'unproven' copies are certified. Caveat: g uses only target-side value-forced frame growth; sound lower bound, assumes distinct-source independence (fixed op multiset); extra undo/redo ADDs that change the multiset are outside scope (B82 escape 2). +Not done: #799 (oracle799 uses a different word format, no copy-record pickle), B169 holder pairs, generic helper-pair sweep (needs lifetime/value-equivalence filter first). Given S3/S4 all fail with pair conflicts, expect same on #799 (same construction) but unmeasured. +Escapes: (1) multiset-changing merges (undo-ADD of partner); (2) re-timing that changes partner frames (our g is a bound so already covered); (3) new skeleton with shared port hyperplanes. +TRANSFER: lawler(visits,base,prec) in cards/B172/lawler.py is the order-free legality oracle for any "one register serves X and Y" claim: build visits (g=partner min frame, cap=perp of reached target ports), fail => certificate, pass => explicit order. diff --git a/research/helper-minimality/evidence/B174-NOTES.md b/research/helper-minimality/evidence/B174-NOTES.md new file mode 100644 index 0000000000..57df24e693 --- /dev/null +++ b/research/helper-minimality/evidence/B174-NOTES.md @@ -0,0 +1,21 @@ +# B174: the "8 centres" cut as a COUNT theorem. VERDICT: PROVEN in the audit_local model (+H-CUT); ship=false (knowledge, KPR3) +Files: check.py (all numerics, ~10 s/word), clique.py, audit_*.json (real audit_local receipts for #656, #799). Ran: single process, no heavy job. +Paths: AL = cards/B99b/work/pr659/research/gauge44-notri-layered/independent/audit_local.py. Words: #656 = cards/B76/work/out_local/cold44, #799 = cards/B147/work/out799/promo/local, #623 = r40/base/work/k492b/ck-step7-cold_end (FULL-WORD.json.gz). +## Theorem (cut count) +Let W pass AL (run(), no --main) on the 112-port geometry (odd weight ports p_t in F2^9, h=9), and assume H-CUT: every op of W['cut'] is `add target<-q` with q in W['centers'], and no centre is a target register. Let K = the centre registers read in the cut. Then |K| >= mu, the minimum rank of a real 112x112 X with X[t,u]=delta_tu on Odd={(t,u): p_t.p_u odd}. mu >= omega = max set of ports with pairwise ODD inner product. For the 112 ports omega = 8 (exhaustive, clique.py), so |K| >= 8: at least 8 registers sit at their locked centre frames at one instant (start of B, AL:131). Tight: shipped words have |K|=8, rank(F-F0)=8. Corollary: the assert len(centers)==8 (code/audit_allcold.py:75, emit_allcold.py:41) is forced, not a choice. +## Proof (lemmas) +L0 (what AL requires): rows v+t of the whole program on source columns = I (endpoint identity :106-112, forward). Cleanup ops cannot touch targets (:143: end[target]=perp(p_t), dim 8 != full). Precondition ops act on targets only; compensation is helper->target (:92-94): neither carries source content (checked). +L1 (monotone everywhere): cur[] is assigned only at :117,:120 (start) and :125 (climb, which needs contained(cur,U), :122). The centre loop :130-136 changes only the local U (billing); cur[q] stays the centre frame. So frames never fall, even at centres (this corrects "descent" wording of B134/B164: it is a pricing step, not a frame fall). +L2 (path lemma): every A/B/tail op climbs BOTH registers to its e[-1] (:31,:138,:141). So a time-respecting directed path u=r0->...->v+t through framed ops gives cur_end(v+t) contains (start :117). End cap :115,:142 forces cur_end(v+t) inside perp(p_t). Hence in perp(p_t), i.e. (t,u) even. +L3 (F0 odd-free): let F0 = rows v+t, source cols of the program with W['cut'] deleted. F0[t,u] != 0 needs such a framed path (matrix-product expansion). So F0 = 0 on Odd. +L4 (rank): cut ops only add centre values into targets, never read targets, so the cut block is I+N, N = sum_{q in K} n_q e_q^T (N^2=0). Then F - F0 = X_post N X_pre = sum_q (X_post n_q)(e_q^T X_pre): rank <= |K|. +L5 (count): X := F-F0 equals F=I on Odd (L0, L3), so |K| >= rank X >= mu. A set I of pairwise-odd ports gives X[I,I] = Id, so rank X >= |I|; omega = 8. +Side lemma (checked): frame of centre q contains p_u for every u in the support of q's A-row (L2), so a centre's frame >= span of its sources' ports. +## Numerical checks (check.py; #656, #799, #623 all identical) +H-CUT true (224 cut ops, 8 distinct centres, none a target); precondition on targets only; F==I exact (Fractions); F0 odd nnz = 0 (F0 has 5824 nnz); rank(F-F0)=8; (F-F0) o Odd == I o Odd; clique {0,3,45,46,69,70,104,107}: F-F0 on it = I_8; centre frames dim 8 all; rank of the 8 A-rows = 8, rowspace(Diff) = rowspace(Lambda). AL itself PASSes #656 and #799 (forward+dual, audit_*.json). +## Scope, caveats, corrections +1. H-CUT is NOT enforced by AL: cut ops get no frame check (AL:82 concatenates them, :132 only reads dest/src for `served`). A cut op `add target<-nonCentre` is frame-free. H-CUT comes from the emitters (B101: c82 assert) and the 8-centre asserts above. Any verifier that let a cut read other registers would still need >= 8 frame-free read sources: the proof gives rank(F-F0) <= #frame-free ops in general (telescoping, one rank-1 term per op). +2. One cut section/one time: AL has a single 'cut' (:82,:126-137); "every time cut" of the card reduces to that instant. A different verifier with several descent epochs is outside the theorem (bound becomes #free ops >= 8, grouped by register version only in a slab). +3. The card's premise is imprecise: rank(M o Odd) = 112 (M = B3R/M.npy, rank 112; M != I-RR^T/2 exactly), so "odd part of M has rank 8" is false as stated; also M is the A,B,cut-order replay (B3 replay.py), while in AL order A,cut,B the target-source map is I. The right rank object is the minimum-rank COMPLETION of the odd-position constraints (clique bound), not a Hadamard-masked rank. Also G_ut odd <-> port pair EVEN (diag G=2, diag ports odd). +4. mu >= omega only; mu = 8 follows from omega=8 plus the shipped words (|K|=8). Valid for these ports (all three words have the same port set up to the same labels). +5. Does not price anything: B106 (cst per functional) and R40-C/B134/B164 pricing stay as is; this gives the count, which they used as ARGUED. B14/B27 (decoder terms) are separate (decoder n>=9 via B109). diff --git a/research/helper-minimality/evidence/B175-NOTES.md b/research/helper-minimality/evidence/B175-NOTES.md new file mode 100644 index 0000000000..7815bd79b3 --- /dev/null +++ b/research/helper-minimality/evidence/B175-NOTES.md @@ -0,0 +1,13 @@ +# B175: re-balance 12 demand planes S1 stoppers vs B delivery. VERDICT: KILL PROVEN (scope: #656 skeleton, block 4567, shipped frames/values; register-count c_B). ship=false, no oracle/cpuq. +Tools (single process, seconds): gate.py/gate2.py/gate3.py (replay A,cut,B,tail,comp with exact rows; reads of any source whose row support lies inside a non-stopper plane). Block cols here are 20,21,36,37,46,47,110,111 (= card's 22,23,...; relabelled). +## Measured (4567) +- Non-stopper planes (2 classes, 4 planes): P1{20,21,46,47} P2{36,37,110,111} P3{20,37,46,110} P4{21,36,47,111}; stoppers = other 8 demand planes (8/8 confirmed). +- B delivers them through exactly the 8 PAIR-bound registers (lines 21,36,47,111 + scratch 441,443,445,447): 4 pair forms (20,46),(21,47),(36,111),(37,110), each held by 2 registers (original + twin), each pair used by exactly 2 of the 4 planes and by NO stopper plane (checked: no stopper contains both points of any pair). Plus couriers 437/442 (already whole-bound, counted in S1's 8). +- Readers (comp-phase targets 113.. ) get them as 1-4 reads of 441/443/445/447 (+437/442): extra ops, but NO extra registers; 447 additionally accumulates plane P2 in B for free (B170/173 accumulators 594/603 hold P4/P2 once). +## c_B (registers attributable to B-delivering one non-stopper plane) +- All 4 planes moved to S1 (k 8->12): S1 +2 regs/plane = +8; frees all 8 pair-bound regs (pairs no longer read) => c_B = 8/4 = 2.0 per plane => net (c_B-2) = 0.0. Total regs 12 stoppers+12 whole = 24 = same budget (B167 matching tight). +- Moving ONE class (2 planes) or one plane: pairs still needed by the remaining planes (each pair serves 2 planes, in both classes) => frees 0 => c_B = 0, net -2 per plane (worse). +- Opposite direction (k 8->6, deliver a stoppered class via B): needs new pair forms in another direction (4 pairs per class, twins forced by 2 crossing reader blocks B110) => c_B_added 4-8 regs vs 4 freed: net <= 0. +=> c_B = 2 within +-0.5 in both directions (partial moves strictly worse). Shipped trade is balanced; KILL PROVEN. Net helpers per moved plane: 0 (full) / -2 (partial). Word-wide gain 0 (<5 needed). +## Not covered +Op/read count (not registers) differs (stopper = 1 read vs 2-4); no register price. Blocks (0,1,*) not scanned (escape 2 for B171). Interface rewrite (lines holding plane rows) untested but is register-neutral by count. diff --git a/research/helper-minimality/evidence/B176-NOTES.md b/research/helper-minimality/evidence/B176-NOTES.md new file mode 100644 index 0000000000..63a2e2281b --- /dev/null +++ b/research/helper-minimality/evidence/B176-NOTES.md @@ -0,0 +1,12 @@ +# B176: in-place line couriers (delete 38 twin couriers). VERDICT: KILL PROVEN [scope: shipped #656, all 38 twin couriers (11 blocks), exact Fraction replay of the whole word]. ship=false, no oracle/kappa. +Tools (single process, seconds): common.py (twin list from SYN-18 planes.py/fuse.py logic), val.py (value check through ALL of A+post-A), val2.py (stopper reads only), law.py (Lawler attempt; not instantiable, see below). +## Premise is false +- The 38 "twins" are NOT copies built by one op. Each u is a long-lived A working register: 20-27 writes and 19-25 source reads in A (stage/Walsh/Haar forms). Its end-of-A row equals P's only by coincidence (the B92b situation, all 38 not 16). Post-A, u is touched once or twice, only in the tail: `u -= P` (it is zeroed there), never read by a stopper z. The stopper z's courier read of u happens INSIDE A (plane-build), at u's stage value. +## Value check (through all of A) +- Replay every op of A/cut/B/tail/comp/cleanup; at each op that reads u compare row(u) with row(P): 0 of 38 twins value-exact. Unequal reads per twin: 11-25, all in A (post-A reads are equal, they are the zeroing ops). Restricting to the stopper-z reads of u: the only equal reads are 0==0 (both still empty); every nonzero courier read has row(u) != row(P) (P holds a single line/pair form, u a 2-4 term stage form). So rewiring z's ADD to read P changes VALUES; B176's "same value" assumption fails. +- Deleting u's writes would also delete its A-time role (it feeds 22 other ops), not just a copy. +## Lawler gate +- Not instantiable on the card's model: there is no single courier visit with value P to test. The value check precedes it (CHECK ORDER values -> frames) and eliminates all 38, so the Lawler result is moot: 0 pass / 38 (reason: value-forced, not frame-forced). law.py as written finds no post-A stopper read of u (its 'no stopper read' output = confirms premise failure). +## Price / escapes +- Prize 0: 0 deletable helpers. No splice, no kappa. +- Escapes (not run): (1) re-timed A in which P is built to the plane-courier role (a different S1 program, = B167 interface change); (2) B175 fewer planes; (3) non-twin couriers out of scope. diff --git a/research/helper-minimality/evidence/B178-VERIFIER-GAP.md b/research/helper-minimality/evidence/B178-VERIFIER-GAP.md new file mode 100644 index 0000000000..69a7447d75 --- /dev/null +++ b/research/helper-minimality/evidence/B178-VERIFIER-GAP.md @@ -0,0 +1,16 @@ +# B178 / B174: do any checks frame-check or restrict the CUT ops? (quiet; local only, nothing pushed/posted) +Checkouts: PR=B147/work/pr (gauge44-frames-x), P35=B76/work/pr635 (upstream hpe_* scripts used by reproduce.py:170-180 / promo:84-87). +## Evidence (file:line) +- audit_local (PR/research/gauge44-frames-x/independent/audit_local.py): :82 main=A+cut+B only used for the matrix; frame loop :126-138 climbs only A/B (:137-138); cut touched only at :132 (reads e[1],e[2] to build `served`, no check on e[2] being a centre); :88 "non-target reads target" covers A,B only, not cut. +- Transport (P35/research/complex-571-cold14-st2/code/hpe_audit_and_transport.py): :114 same A+cut+B matrix; :243 same `served` set; no frame/centre check on cut sources. +- Emitter hpe_emit_local.py:94 `terms=[e for e in c['cut'] if e[2]==r]` for r in c['centers']: cut ops whose source is NOT a centre are SILENTLY DROPPED from the emitted local program (never executed, never frame-checked). +- hpe_audit_local.py (replays only the emitted events): every scalar needs cur[r]==f (:~75) and ends with identity check on rows (:~104+); sees no cut op outside the centre loop. Rest of global chain (gauge44-frames-x/code/audit_allcold.py, assemble.py, invoice_allcold.py, verify_global.py) works on provider receipts/canonical fields (centers, center_frames, frames) and never reads word['cut'] (grep: no 'cut' hit; only assemble.py:210 unrelated "cutoff"). +- Only enforcement of H-CUT: generator side, construction/construct_gauge_xcentre.py:344 (cut built as centre->target adds) and :360 (assert on dropped ops); plus len(centers)==8 (audit_allcold.py:75, audit_local.py:68 with --main). +## Spec +03-motifs.tex:78-83 (schedule): "subtract scatter / scatter = one gate on targets and center"; "gather = one gate on sources and center". 03-motifs.tex:415: centre 3->4 is the only dimension-decreasing edge. The cut is the scatter from the copied centre register C_k (hpe_emit_local.py:97 copy L_r->C_k at frame cf, :100-102 add L_t<-C_k): sources are always the private centre copy, at a legal common frame. Nothing in 03/04 allows a scatter to read an arbitrary register. +## Toy (cards/B178/work: toy-FULL-WORD.json.gz = out799 promo word + `add 112<-5 (+1)` first and `add 112<-5 (-1)` last in cut; reg 5 is a non-centre source, no frame given) +- (a) audit_local: ACCEPTS (same PASS receipt as unedited, 0.74 s). +- (b) full local chain (transport -> emit -> hpe_audit_local, jobs/B178chain.log): ACCEPTS, "PASS_INDEPENDENT_LOCAL_SCALAR_FRAME_AND_WRAPPER_REPLAY 25 controls rejected"; emitted event count 24411 identical to the unedited word, because the emitter dropped the two ops (hpe_emit_local.py:94). Global assembly never sees the cut. +- Not run: a net-nonzero non-centre cut read. Inference: emitter drops it, so the emitted program no longer matches the identity map and hpe_audit_local rejects (by the matrix check, not by a frame/centre message). Untested. +## Conclusion +No later check frame-checks cut ops or restricts their sources; H-CUT is enforced only by the generator and, indirectly, by the emitter dropping non-centre terms. The soundness-relevant object (the EMITTED program, whose centre phase is frame-audited) is always centre-sourced, so a non-centre cut read cannot be priced as a real operation: net-zero ones are inert (accepted but dropped), needed ones should fail the emitted identity check. Verdict: NON-ISSUE for soundness/pricing of the executed program; cosmetic gap = audit_local alone (and its receipt) would accept a word whose `cut` has non-centre reads. Do not build on non-centre cut reads. The authors may mention at most that audit_local's scope is word-level while the emitter defines the executed cut. diff --git a/research/helper-minimality/evidence/B179-NOTES.md b/research/helper-minimality/evidence/B179-NOTES.md new file mode 100644 index 0000000000..f7944dc4ad --- /dev/null +++ b/research/helper-minimality/evidence/B179-NOTES.md @@ -0,0 +1,9 @@ +# B179 borrowed-target plane jump. VERDICT: KILL PROVEN [scope: shipped #656, all 88 plane stoppers (11 S1 blocks), early-A/B jump, 5-op gadget and its point-holder variant]. ship=false, no oracle/kappa. +Tools (single process, seconds): gate.py (exact Fraction replay of A, validated: end rows == rows0, 0 mismatches), gate2.py (jump op of each stopper, holder search). +## Gate (main risk checked first) - risk is real, total +- All 88 stoppers: jump op found (z is target; z frame before = 2 points, partner row = 2 columns). The partner u is the courier (lines 20/37/110.. or scratch). +- Holders of the l2 piece (row proportional to u's row, any register != z,u, any frame, at the jump moment): 0 of 88. Escape 2 (each l2 column held by a pure point register): 0 of 88 (inside plane 0, no-climb 0). (i)&(ii) = 0 in every block. +## Second, independent frame objection (SPEC, audit_local 'scalar': both operands at common frame f) +- Card step (2) t += a*y happens with t already at z's frame P1 (step 1). y holds l2 (support in Pi\P1), so f(y) does not contain P1: y climbs to join = Pi. So "y is only read, frame stays l2" is false; y would need bound >= Pi = be a courier. Reordering (t += a*y first, t at ()) keeps y low but then z += k*t puts pollution a*l2 into t at Pi; removing it needs an l2 holder at frame >= Pi (again a courier). Lemma B167 extends to borrowed partners: every route needs a second Pi-frame l2 holder besides z,t. +## Price / escapes +- Prize 0 (no fusable stoppers); no splice. Remaining escape only: interface change (B175 fewer planes / B180 other hyperplanes). diff --git a/research/helper-minimality/evidence/B182-NOTES.md b/research/helper-minimality/evidence/B182-NOTES.md new file mode 100644 index 0000000000..f3e9483ec5 --- /dev/null +++ b/research/helper-minimality/evidence/B182-NOTES.md @@ -0,0 +1,13 @@ +# B182: Lawler certificates on the "uncovered" helper classes of #799. VERDICT: 0 removable, all certified (scope below). ship=false, no kappa claim, no oracle run needed. No heavy jobs (single process, <1 min). +Tool: b182.py (reuses B171 lawler799 + B172 lawler; generalises copy detection: first op filling an empty row t>=v from a nonempty source; bridges = class 'BR'). +## Bridge registers 716..727 (12) +- Role: 4 groups (716-719 around 712-715; 720-727 around 133/149/159/222). Start frames 423-427. Phase 1 (B 311-378) is VALUE-ZERO: empty rows used purely as frame couriers (e.g. 190,211,155,216 += +-1/2*716; 716 += 717/718/719). Phase 2 (B ~1178-1189) each becomes an 8-support copy of one S3 helper (716<-528, 717<-529, 718<-516, 719<-517, 720<-494, 721<-495, 722<-518, 723<-519, 724<-530, 725<-531, 726<-506, 727<-507). Phase 3 (B 1878-1916): swap with 714/715-type registers (X+=bridge, bridge+=-1/2 X) then flushed into 155/216/159/... with coeff -2/+1. +- Lawler (post-copy visits of source+bridge, no precedence, as B171): 12/12 FAIL (each chain alone passes) => no bridge merges into its source helper under any reorder. +- Merge into any OTHER register: the 12 fill rows are pairwise non-proportional 8-supports with overlapping lifetimes (B1178..B1916) => value-impossible without extra undo/redo ADDs. +- Phase-1 frame-courier role is ignored in the test (pre-copy visits only add conflicts), sound for a FAIL certificate. +## Entering helpers 450..457 and 6-frame/24-30-frame holders 484..569 +- These are S3 packet copies; the 94 copies in these ranges (ledger S3) all FAIL Lawler too (94/94, chains-alone ok); consistent with B171 268/268. B169 already showed holder reuse is legal only for 450..457 (8 slots, #869) and illegal elsewhere (final caps). +## Proven minimal (KPR3 material), scope: #799 op multiset fixed, value-forced lower-bound frames, caps = reached-target ports +- bridge 12/12, S3 holders/entering 94/94. Removable: 0. +## Not covered (unchanged) +- Multiset-changing merges (undo-ADD of a source then reuse); precedence-aware variants unneeded; no independent second-reader audit of g/caps; S1 (0,1,*) blocks (B177). diff --git a/research/helper-minimality/evidence/B185-NOTES.md b/research/helper-minimality/evidence/B185-NOTES.md new file mode 100644 index 0000000000..6437191405 --- /dev/null +++ b/research/helper-minimality/evidence/B185-NOTES.md @@ -0,0 +1,5 @@ +# B185 NOTES: KILL (scope: reading/argument only, no compute; #656 S3/S4 B172, S1 B167, KPR3 THEOREM). Counts are NOT cancellation-free-dependent in the Boyar-Find sense; they are multiset-fixed (FOM). ship=false +- B172 (NOTES "Caveat", "Escapes (1)") and KPR3/THEOREM.md:38,84 state the scope explicitly: op multiset fixed; undo/redo ADDs are outside "every Lawler result". So a cancelling delivery IS outside the stated theorem (as the card suspected), but the scope was already known, not new. +- Mechanism (lawler.py:16-21, 31-40): the unit is the FRAME = running join (basis of span union) of everything a register ever received (fr[t]=basis(fr[t]+fr[s])); frames are monotone and never shrink. Cancellation changes VALUES, not frames (SYN-7 Lemma 1: an ADD equalises frames). Boyar-Find's gap lives in the value/support semiring (a term added then removed is still "seen"); here the cost is already measured in the history-join semiring, which is cancellation-blind. A shared over-covering intermediate carries the partner's frame g into both readers' caps; the later correcting ADD is one more visit (its g also joins) and cannot lower J. Lawler fail certificate (join of visits not in cap_k) is value-independent => the 2-visit pair conflicts persist for any cancelling variant of a given pair. B167 allows unimodular remix (cancellation) within a class; its Hall lemma is a frame bound (join <= both bounds), so also covered. +- Not run: step 3 (smallest cancelling face on #799) and the reality gate: the frame argument says the cancelling face cannot save the copy (still >= the visits), so nothing to count. No count/price numbers. +- Transferable ingredient (lit rule): the paper's separating examples (Sierpinski-type, depth tradeoff) exploit cancellation of VALUES; only a mechanism that cancels in FRAMES (e.g. a descent / frame-dropping op, SYN-7 (c)) could transfer. Gauge44 re-threading at equal values is the closest analogue; nothing new here. diff --git a/research/helper-minimality/evidence/B82-NOTES.md b/research/helper-minimality/evidence/B82-NOTES.md new file mode 100644 index 0000000000..f229f6ac26 --- /dev/null +++ b/research/helper-minimality/evidence/B82-NOTES.md @@ -0,0 +1,17 @@ +# B82: why a SECOND copy per block output face (S3 156) and per M slot (S4 112)? VERDICT: KILL, PROVEN [scope: shipped #656 word, fixed op ORDER, min-frame (monotone, ADD common frame = sum) replay]; order-free = B80's loose bound. ship=false +Tools (single process, <1 s): work/c82.py = B76 construct_tagged.py + op/copy recorder (output FULL-WORD.json.gz byte-IDENTICAL to B76 out_raw); work/an.py = taint + min-frame replay + tests. Raw: work/out/rec.pkl. Gate 10 min: passed on the classification, overran slightly on the replay. +## What the code does (construct_gauge_xcentre.py:244-295) +S3: b = alloc; b += a (copy of block c's output face; consumers = the 2 other blocks containing the pair, one gets a, one b). Each packet is consumed once: either READ-ONLY into a selected target (v+t += r at frame inside hyper(P[t])), or MUTATED in place by the M merge (a += (beta/alpha) b). S4: M is read by two pair consumers that each apply a 2x2 in place to (slot_a, slot_b), then read the slots into targets at F = hyper(P[t]) (dim 8). The 2nd consumer gets a copy. +## Classification (156 S3 + 112 S4 = 268) +- h2 (dirt return / restore): 0. The cleanup phase is the mirror inverse of A+B, so no copy exists for restoration. (S3+S4 = 268 = B22's dirt-only count only because copies are born as dirt-borrowing carriers; this is not a reason for them.) +- Value use after the copy (writes to a, b after the copy op): S3 76 both read-only; 48 exactly one side mutated; 32 both mutated; S4 112 both mutated. So 124 S3 are VALUE-feasible with one packet (serve the read-only/non-mutated side first); 32 S3 + 112 S4 = 144 need extra undo/redo ADDs (value-forced, not a convenience). +- h1 (reader-frame incompatibility): the copy-time frame is fine (S3 dim 3, S4 dim 5 each lie in perp of the union of both chains' downstream target ports: 268/268), but at the shipped order NO read is compatible: for each pair, the minimal-frame (lower bound for any frame choice) state of a register at the end of chain 1 is never inside perp(ports of chain 2's targets): 268/268 fail both orders; for the 124 value-feasible S3, 0 of all read ops pass (first read included). The reads occur after the target has accumulated its frame (target frame ~ perp(port), dim 5-8), so one packet that has served target t1 sits in hyper(P[t1]) and cannot serve t2 (hyper(P[t1]) is not inside hyper(P[t2])). S4 reads are at F = hyper(P[t]) outright. +- h3 (pure convenience): 0 at fixed order. +Counts: h1 (frame-forced at fixed order, value-feasible) 124; value-forced (mutation, also frame-blocked) 144; h2 0; h3 0. By the gate text (>= 20 h1 copies) this is nominally a LEAD, but every h1 copy is blocked by the TARGET-READ ORDER, which is exactly B80's question. +## Link to B80 / SYN-4 +B80: at the fixed order, targets sit at the transitive ceiling (87% exact), net -5.6 psi; the only open route is reordering target reads (loose order-free bound 614 psi/call, ~10% odds). B82 confirms the same mechanism as the reason for the copies: fan-out is forced by when targets are read, not by value or restoration. A single-packet variant would require (i) reading the packet into BOTH targets while their frames are still inside hyper(P[t1]) ∩ hyper(P[t2]) (dim <= 7; a block with k readers: <= 8 - ceil(log2 k)), (ii) for the 144 mutated cases, undo/redo ADDs whose common frame also grows partners. Not built: step 2 not run (fixed-order necessary condition fails; one block's variant needs a DAG-level reorder, > 2 h and B80's order-free bound unproven). No kappa claim. +## Escapes (>= 3) +1. Order-free necessary test per pair: min frame of the packet when each target is read FIRST (empty target frame) vs perp of the other chain; if it passes for the 124, price one block via B66 (needs B80's DAG bound >= 400 psi first). +2. Mutated 144: replace copy by undo-ADD of the merge partner (extra ops are free, only frames cost); price frame growth of the partner with B11 upper(). +3. Choose reader pairs (t1,t2) of a packet to share ports hyperplanes (cap geometry: SYN-4) in a new skeleton (B81), not the shipped one. +Rescue check: replaced "end of chain" by FIRST read op with min frame: still 0/124 pass. Fixed-order verdict holds. diff --git a/research/helper-minimality/inputs/derived/pairs.json.gz b/research/helper-minimality/inputs/derived/pairs.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..fe4b78a0d21ba3216edd25da2c4a0b2f28ed5633 GIT binary patch literal 190822 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 GqW=Rp_vF|B literal 0 HcmV?d00001 diff --git a/research/helper-minimality/inputs/ledger_helpers.csv b/research/helper-minimality/inputs/ledger_helpers.csv new file mode 100644 index 0000000000..fca828d2b8 --- /dev/null +++ b/research/helper-minimality/inputs/ledger_helpers.csv @@ -0,0 +1,493 @@ +reg,site,detail,centre,nclimb,climb_mass,psi,resid_width,widths +224,S1_block_scratch,"(0, 1, 2, 3)|8",1,7,17,50.7571007216044,9,8 4 1 1 1 1 1 +225,S1_block_scratch,"(0, 1, 2, 3)|9",0,4,4,17.161837764593564,4,1 1 1 1 +226,S1_block_scratch,"(0, 1, 2, 3)|10",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +227,S1_block_scratch,"(0, 1, 2, 3)|11",0,4,4,17.161837764593564,4,1 1 1 1 +228,S1_block_scratch,"(0, 1, 2, 3)|12",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +229,S1_block_scratch,"(0, 1, 2, 3)|13",0,5,9,30.56694540816502,9,5 1 1 1 1 +230,S1_block_scratch,"(0, 1, 2, 3)|14",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +231,S1_block_scratch,"(0, 1, 2, 3)|15",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +232,S1_block_scratch,"(0, 1, 2, 3)|16",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +233,S1_block_scratch,"(0, 1, 2, 3)|17",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +234,S1_block_scratch,"(0, 1, 2, 3)|18",0,5,9,30.56694540816502,9,5 1 1 1 1 +235,S1_block_scratch,"(0, 1, 2, 3)|19",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +236,S1_block_scratch,"(0, 1, 2, 3)|20",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +237,S1_block_scratch,"(0, 1, 2, 3)|21",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +238,S1_block_scratch,"(0, 1, 2, 3)|22",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +239,S1_block_scratch,"(0, 1, 2, 3)|23",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +240,S1_block_scratch,"(0, 1, 4, 5)|8",1,7,17,50.7571007216044,9,8 4 1 1 1 1 1 +241,S1_block_scratch,"(0, 1, 4, 5)|9",0,4,4,17.161837764593564,4,1 1 1 1 +242,S1_block_scratch,"(0, 1, 4, 5)|10",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +243,S1_block_scratch,"(0, 1, 4, 5)|11",0,4,4,17.161837764593564,4,1 1 1 1 +244,S1_block_scratch,"(0, 1, 4, 5)|12",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +245,S1_block_scratch,"(0, 1, 4, 5)|13",0,5,9,30.56694540816502,9,5 1 1 1 1 +246,S1_block_scratch,"(0, 1, 4, 5)|14",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +247,S1_block_scratch,"(0, 1, 4, 5)|15",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +248,S1_block_scratch,"(0, 1, 4, 5)|16",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +249,S1_block_scratch,"(0, 1, 4, 5)|17",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +250,S1_block_scratch,"(0, 1, 4, 5)|18",0,5,9,30.56694540816502,9,5 1 1 1 1 +251,S1_block_scratch,"(0, 1, 4, 5)|19",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +252,S1_block_scratch,"(0, 1, 4, 5)|20",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +253,S1_block_scratch,"(0, 1, 4, 5)|21",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +254,S1_block_scratch,"(0, 1, 4, 5)|22",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +255,S1_block_scratch,"(0, 1, 4, 5)|23",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +256,S1_block_scratch,"(0, 1, 6, 7)|8",1,7,17,50.7571007216044,9,8 4 1 1 1 1 1 +257,S1_block_scratch,"(0, 1, 6, 7)|9",0,4,4,17.161837764593564,4,1 1 1 1 +258,S1_block_scratch,"(0, 1, 6, 7)|10",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +259,S1_block_scratch,"(0, 1, 6, 7)|11",0,4,4,17.161837764593564,4,1 1 1 1 +260,S1_block_scratch,"(0, 1, 6, 7)|12",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +261,S1_block_scratch,"(0, 1, 6, 7)|13",0,5,9,30.56694540816502,9,5 1 1 1 1 +262,S1_block_scratch,"(0, 1, 6, 7)|14",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +263,S1_block_scratch,"(0, 1, 6, 7)|15",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +264,S1_block_scratch,"(0, 1, 6, 7)|16",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +265,S1_block_scratch,"(0, 1, 6, 7)|17",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +266,S1_block_scratch,"(0, 1, 6, 7)|18",0,5,9,30.56694540816502,9,5 1 1 1 1 +267,S1_block_scratch,"(0, 1, 6, 7)|19",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +268,S1_block_scratch,"(0, 1, 6, 7)|20",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +269,S1_block_scratch,"(0, 1, 6, 7)|21",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +270,S1_block_scratch,"(0, 1, 6, 7)|22",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +271,S1_block_scratch,"(0, 1, 6, 7)|23",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +272,S1_block_scratch,"(0, 2, 4, 6)|8",0,6,9,33.06895752585596,9,4 1 1 1 1 1 +273,S1_block_scratch,"(0, 2, 4, 6)|9",0,4,4,17.161837764593564,4,1 1 1 1 +274,S1_block_scratch,"(0, 2, 4, 6)|10",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +275,S1_block_scratch,"(0, 2, 4, 6)|11",0,4,4,17.161837764593564,4,1 1 1 1 +276,S1_block_scratch,"(0, 2, 4, 6)|12",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +277,S1_block_scratch,"(0, 2, 4, 6)|13",0,4,4,17.161837764593564,4,1 1 1 1 +278,S1_block_scratch,"(0, 2, 4, 6)|14",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +279,S1_block_scratch,"(0, 2, 4, 6)|15",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +280,S1_block_scratch,"(0, 2, 4, 6)|16",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +281,S1_block_scratch,"(0, 2, 4, 6)|17",0,5,9,30.56694540816502,9,5 1 1 1 1 +282,S1_block_scratch,"(0, 2, 4, 6)|18",0,4,4,17.161837764593564,4,1 1 1 1 +283,S1_block_scratch,"(0, 2, 4, 6)|19",0,8,9,37.227840609215626,9,2 1 1 1 1 1 1 1 +284,S1_block_scratch,"(0, 2, 4, 6)|20",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +285,S1_block_scratch,"(0, 2, 4, 6)|21",0,5,9,30.56694540816502,9,5 1 1 1 1 +286,S1_block_scratch,"(0, 2, 4, 6)|22",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +287,S1_block_scratch,"(0, 2, 4, 6)|23",0,5,9,31.682663164736066,9,4 2 1 1 1 +288,S1_block_scratch,"(0, 2, 5, 7)|8",0,6,9,33.06895752585596,9,4 1 1 1 1 1 +289,S1_block_scratch,"(0, 2, 5, 7)|9",0,4,4,17.161837764593564,4,1 1 1 1 +290,S1_block_scratch,"(0, 2, 5, 7)|10",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +291,S1_block_scratch,"(0, 2, 5, 7)|11",0,4,4,17.161837764593564,4,1 1 1 1 +292,S1_block_scratch,"(0, 2, 5, 7)|12",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +293,S1_block_scratch,"(0, 2, 5, 7)|13",0,4,4,17.161837764593564,4,1 1 1 1 +294,S1_block_scratch,"(0, 2, 5, 7)|14",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +295,S1_block_scratch,"(0, 2, 5, 7)|15",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +296,S1_block_scratch,"(0, 2, 5, 7)|16",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +297,S1_block_scratch,"(0, 2, 5, 7)|17",0,5,9,30.56694540816502,9,5 1 1 1 1 +298,S1_block_scratch,"(0, 2, 5, 7)|18",0,4,4,17.161837764593564,4,1 1 1 1 +299,S1_block_scratch,"(0, 2, 5, 7)|19",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +300,S1_block_scratch,"(0, 2, 5, 7)|20",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +301,S1_block_scratch,"(0, 2, 5, 7)|21",0,5,9,30.56694540816502,9,5 1 1 1 1 +302,S1_block_scratch,"(0, 2, 5, 7)|22",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +303,S1_block_scratch,"(0, 2, 5, 7)|23",0,5,9,31.682663164736066,9,4 2 1 1 1 +304,S1_block_scratch,"(0, 3, 4, 7)|8",0,6,9,33.06895752585596,9,4 1 1 1 1 1 +305,S1_block_scratch,"(0, 3, 4, 7)|9",0,4,4,17.161837764593564,4,1 1 1 1 +306,S1_block_scratch,"(0, 3, 4, 7)|10",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +307,S1_block_scratch,"(0, 3, 4, 7)|11",0,4,4,17.161837764593564,4,1 1 1 1 +308,S1_block_scratch,"(0, 3, 4, 7)|12",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +309,S1_block_scratch,"(0, 3, 4, 7)|13",0,4,4,17.161837764593564,4,1 1 1 1 +310,S1_block_scratch,"(0, 3, 4, 7)|14",0,5,8,29.641544302062908,8,3 2 1 1 1 +311,S1_block_scratch,"(0, 3, 4, 7)|15",0,5,8,29.641544302062908,8,3 2 1 1 1 +312,S1_block_scratch,"(0, 3, 4, 7)|16",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +313,S1_block_scratch,"(0, 3, 4, 7)|17",0,5,9,30.56694540816502,9,5 1 1 1 1 +314,S1_block_scratch,"(0, 3, 4, 7)|18",0,4,4,17.161837764593564,4,1 1 1 1 +315,S1_block_scratch,"(0, 3, 4, 7)|19",0,8,9,37.227840609215626,9,2 1 1 1 1 1 1 1 +316,S1_block_scratch,"(0, 3, 4, 7)|20",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +317,S1_block_scratch,"(0, 3, 4, 7)|21",0,5,9,30.56694540816502,9,5 1 1 1 1 +318,S1_block_scratch,"(0, 3, 4, 7)|22",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +319,S1_block_scratch,"(0, 3, 4, 7)|23",0,5,9,31.682663164736066,9,4 2 1 1 1 +320,S1_block_scratch,"(0, 3, 5, 6)|8",0,6,9,33.06895752585596,9,4 1 1 1 1 1 +321,S1_block_scratch,"(0, 3, 5, 6)|9",0,4,4,17.161837764593564,4,1 1 1 1 +322,S1_block_scratch,"(0, 3, 5, 6)|10",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +323,S1_block_scratch,"(0, 3, 5, 6)|11",0,4,4,17.161837764593564,4,1 1 1 1 +324,S1_block_scratch,"(0, 3, 5, 6)|12",0,5,9,32.02246123832686,9,3 3 1 1 1 +325,S1_block_scratch,"(0, 3, 5, 6)|13",0,4,4,17.161837764593564,4,1 1 1 1 +326,S1_block_scratch,"(0, 3, 5, 6)|14",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +327,S1_block_scratch,"(0, 3, 5, 6)|15",0,5,8,29.641544302062908,8,3 2 1 1 1 +328,S1_block_scratch,"(0, 3, 5, 6)|16",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +329,S1_block_scratch,"(0, 3, 5, 6)|17",0,5,9,30.56694540816502,9,5 1 1 1 1 +330,S1_block_scratch,"(0, 3, 5, 6)|18",0,4,4,17.161837764593564,4,1 1 1 1 +331,S1_block_scratch,"(0, 3, 5, 6)|19",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +332,S1_block_scratch,"(0, 3, 5, 6)|20",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +333,S1_block_scratch,"(0, 3, 5, 6)|21",0,5,9,30.56694540816502,9,5 1 1 1 1 +334,S1_block_scratch,"(0, 3, 5, 6)|22",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +335,S1_block_scratch,"(0, 3, 5, 6)|23",0,5,9,31.682663164736066,9,4 2 1 1 1 +336,S1_block_scratch,"(1, 2, 4, 7)|8",0,6,9,33.06895752585596,9,4 1 1 1 1 1 +337,S1_block_scratch,"(1, 2, 4, 7)|9",0,4,4,17.161837764593564,4,1 1 1 1 +338,S1_block_scratch,"(1, 2, 4, 7)|10",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +339,S1_block_scratch,"(1, 2, 4, 7)|11",0,4,4,17.161837764593564,4,1 1 1 1 +340,S1_block_scratch,"(1, 2, 4, 7)|12",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +341,S1_block_scratch,"(1, 2, 4, 7)|13",0,4,4,17.161837764593564,4,1 1 1 1 +342,S1_block_scratch,"(1, 2, 4, 7)|14",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +343,S1_block_scratch,"(1, 2, 4, 7)|15",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +344,S1_block_scratch,"(1, 2, 4, 7)|16",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +345,S1_block_scratch,"(1, 2, 4, 7)|17",0,5,9,30.56694540816502,9,5 1 1 1 1 +346,S1_block_scratch,"(1, 2, 4, 7)|18",0,4,4,17.161837764593564,4,1 1 1 1 +347,S1_block_scratch,"(1, 2, 4, 7)|19",0,8,9,37.227840609215626,9,2 1 1 1 1 1 1 1 +348,S1_block_scratch,"(1, 2, 4, 7)|20",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +349,S1_block_scratch,"(1, 2, 4, 7)|21",0,5,9,30.56694540816502,9,5 1 1 1 1 +350,S1_block_scratch,"(1, 2, 4, 7)|22",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +351,S1_block_scratch,"(1, 2, 4, 7)|23",0,6,9,33.06895752585596,9,4 1 1 1 1 1 +352,S1_block_scratch,"(1, 2, 5, 6)|8",0,6,9,33.06895752585596,9,4 1 1 1 1 1 +353,S1_block_scratch,"(1, 2, 5, 6)|9",0,4,4,17.161837764593564,4,1 1 1 1 +354,S1_block_scratch,"(1, 2, 5, 6)|10",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +355,S1_block_scratch,"(1, 2, 5, 6)|11",0,4,4,17.161837764593564,4,1 1 1 1 +356,S1_block_scratch,"(1, 2, 5, 6)|12",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +357,S1_block_scratch,"(1, 2, 5, 6)|13",0,4,4,17.161837764593564,4,1 1 1 1 +358,S1_block_scratch,"(1, 2, 5, 6)|14",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +359,S1_block_scratch,"(1, 2, 5, 6)|15",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +360,S1_block_scratch,"(1, 2, 5, 6)|16",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +361,S1_block_scratch,"(1, 2, 5, 6)|17",0,5,9,30.56694540816502,9,5 1 1 1 1 +362,S1_block_scratch,"(1, 2, 5, 6)|18",0,4,4,17.161837764593564,4,1 1 1 1 +363,S1_block_scratch,"(1, 2, 5, 6)|19",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +364,S1_block_scratch,"(1, 2, 5, 6)|20",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +365,S1_block_scratch,"(1, 2, 5, 6)|21",0,5,9,30.56694540816502,9,5 1 1 1 1 +366,S1_block_scratch,"(1, 2, 5, 6)|22",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +367,S1_block_scratch,"(1, 2, 5, 6)|23",0,6,9,33.06895752585596,9,4 1 1 1 1 1 +368,S1_block_scratch,"(1, 3, 4, 6)|8",0,6,9,33.06895752585596,9,4 1 1 1 1 1 +369,S1_block_scratch,"(1, 3, 4, 6)|9",0,4,4,17.161837764593564,4,1 1 1 1 +370,S1_block_scratch,"(1, 3, 4, 6)|10",0,5,9,32.02246123832686,9,3 3 1 1 1 +371,S1_block_scratch,"(1, 3, 4, 6)|11",0,4,4,17.161837764593564,4,1 1 1 1 +372,S1_block_scratch,"(1, 3, 4, 6)|12",0,5,9,32.02246123832686,9,3 3 1 1 1 +373,S1_block_scratch,"(1, 3, 4, 6)|13",0,4,4,17.161837764593564,4,1 1 1 1 +374,S1_block_scratch,"(1, 3, 4, 6)|14",0,5,9,32.02246123832686,9,3 3 1 1 1 +375,S1_block_scratch,"(1, 3, 4, 6)|15",0,5,9,32.02246123832686,9,3 3 1 1 1 +376,S1_block_scratch,"(1, 3, 4, 6)|16",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +377,S1_block_scratch,"(1, 3, 4, 6)|17",0,5,9,30.56694540816502,9,5 1 1 1 1 +378,S1_block_scratch,"(1, 3, 4, 6)|18",0,4,4,17.161837764593564,4,1 1 1 1 +379,S1_block_scratch,"(1, 3, 4, 6)|19",0,8,9,37.227840609215626,9,2 1 1 1 1 1 1 1 +380,S1_block_scratch,"(1, 3, 4, 6)|20",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +381,S1_block_scratch,"(1, 3, 4, 6)|21",0,5,9,30.56694540816502,9,5 1 1 1 1 +382,S1_block_scratch,"(1, 3, 4, 6)|22",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +383,S1_block_scratch,"(1, 3, 4, 6)|23",0,6,9,33.06895752585596,9,4 1 1 1 1 1 +384,S1_block_scratch,"(1, 3, 5, 7)|8",0,6,9,33.06895752585596,9,4 1 1 1 1 1 +385,S1_block_scratch,"(1, 3, 5, 7)|9",0,4,4,17.161837764593564,4,1 1 1 1 +386,S1_block_scratch,"(1, 3, 5, 7)|10",0,5,9,32.02246123832686,9,3 3 1 1 1 +387,S1_block_scratch,"(1, 3, 5, 7)|11",0,4,4,17.161837764593564,4,1 1 1 1 +388,S1_block_scratch,"(1, 3, 5, 7)|12",0,5,9,32.02246123832686,9,3 3 1 1 1 +389,S1_block_scratch,"(1, 3, 5, 7)|13",0,4,4,17.161837764593564,4,1 1 1 1 +390,S1_block_scratch,"(1, 3, 5, 7)|14",0,5,9,32.02246123832686,9,3 3 1 1 1 +391,S1_block_scratch,"(1, 3, 5, 7)|15",0,5,9,32.02246123832686,9,3 3 1 1 1 +392,S1_block_scratch,"(1, 3, 5, 7)|16",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +393,S1_block_scratch,"(1, 3, 5, 7)|17",0,5,9,30.56694540816502,9,5 1 1 1 1 +394,S1_block_scratch,"(1, 3, 5, 7)|18",0,4,4,17.161837764593564,4,1 1 1 1 +395,S1_block_scratch,"(1, 3, 5, 7)|19",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +396,S1_block_scratch,"(1, 3, 5, 7)|20",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +397,S1_block_scratch,"(1, 3, 5, 7)|21",0,5,9,30.56694540816502,9,5 1 1 1 1 +398,S1_block_scratch,"(1, 3, 5, 7)|22",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +399,S1_block_scratch,"(1, 3, 5, 7)|23",0,6,9,33.06895752585596,9,4 1 1 1 1 1 +400,S1_block_scratch,"(2, 3, 4, 5)|8",0,6,9,33.06895752585596,9,4 1 1 1 1 1 +401,S1_block_scratch,"(2, 3, 4, 5)|9",0,4,4,17.161837764593564,4,1 1 1 1 +402,S1_block_scratch,"(2, 3, 4, 5)|10",0,5,9,32.02246123832686,9,3 3 1 1 1 +403,S1_block_scratch,"(2, 3, 4, 5)|11",0,4,4,17.161837764593564,4,1 1 1 1 +404,S1_block_scratch,"(2, 3, 4, 5)|12",0,5,9,32.02246123832686,9,3 3 1 1 1 +405,S1_block_scratch,"(2, 3, 4, 5)|13",0,5,9,30.56694540816502,9,5 1 1 1 1 +406,S1_block_scratch,"(2, 3, 4, 5)|14",0,5,9,32.02246123832686,9,3 3 1 1 1 +407,S1_block_scratch,"(2, 3, 4, 5)|15",0,5,9,32.02246123832686,9,3 3 1 1 1 +408,S1_block_scratch,"(2, 3, 4, 5)|16",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +409,S1_block_scratch,"(2, 3, 4, 5)|17",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +410,S1_block_scratch,"(2, 3, 4, 5)|18",0,5,9,30.56694540816502,9,5 1 1 1 1 +411,S1_block_scratch,"(2, 3, 4, 5)|19",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +412,S1_block_scratch,"(2, 3, 4, 5)|20",0,5,9,32.02246123832686,9,3 3 1 1 1 +413,S1_block_scratch,"(2, 3, 4, 5)|21",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +414,S1_block_scratch,"(2, 3, 4, 5)|22",0,5,9,32.02246123832686,9,3 3 1 1 1 +415,S1_block_scratch,"(2, 3, 4, 5)|23",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +416,S1_block_scratch,"(2, 3, 6, 7)|8",0,6,9,33.06895752585596,9,4 1 1 1 1 1 +417,S1_block_scratch,"(2, 3, 6, 7)|9",0,4,4,17.161837764593564,4,1 1 1 1 +418,S1_block_scratch,"(2, 3, 6, 7)|10",0,5,9,32.02246123832686,9,3 3 1 1 1 +419,S1_block_scratch,"(2, 3, 6, 7)|11",0,4,4,17.161837764593564,4,1 1 1 1 +420,S1_block_scratch,"(2, 3, 6, 7)|12",0,5,9,32.02246123832686,9,3 3 1 1 1 +421,S1_block_scratch,"(2, 3, 6, 7)|13",0,5,9,30.56694540816502,9,5 1 1 1 1 +422,S1_block_scratch,"(2, 3, 6, 7)|14",0,5,9,32.02246123832686,9,3 3 1 1 1 +423,S1_block_scratch,"(2, 3, 6, 7)|15",0,5,9,32.02246123832686,9,3 3 1 1 1 +424,S1_block_scratch,"(2, 3, 6, 7)|16",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +425,S1_block_scratch,"(2, 3, 6, 7)|17",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +426,S1_block_scratch,"(2, 3, 6, 7)|18",0,5,9,30.56694540816502,9,5 1 1 1 1 +427,S1_block_scratch,"(2, 3, 6, 7)|19",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +428,S1_block_scratch,"(2, 3, 6, 7)|20",0,5,9,32.02246123832686,9,3 3 1 1 1 +429,S1_block_scratch,"(2, 3, 6, 7)|21",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +430,S1_block_scratch,"(2, 3, 6, 7)|22",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +431,S1_block_scratch,"(2, 3, 6, 7)|23",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +432,S1_block_scratch,"(4, 5, 6, 7)|8",0,6,9,33.06895752585596,9,4 1 1 1 1 1 +433,S1_block_scratch,"(4, 5, 6, 7)|9",0,4,4,17.161837764593564,4,1 1 1 1 +434,S1_block_scratch,"(4, 5, 6, 7)|10",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +435,S1_block_scratch,"(4, 5, 6, 7)|11",0,4,4,17.161837764593564,4,1 1 1 1 +436,S1_block_scratch,"(4, 5, 6, 7)|12",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +437,S1_block_scratch,"(4, 5, 6, 7)|13",0,5,9,30.56694540816502,9,5 1 1 1 1 +438,S1_block_scratch,"(4, 5, 6, 7)|14",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +439,S1_block_scratch,"(4, 5, 6, 7)|15",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +440,S1_block_scratch,"(4, 5, 6, 7)|16",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +441,S1_block_scratch,"(4, 5, 6, 7)|17",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +442,S1_block_scratch,"(4, 5, 6, 7)|18",0,5,9,30.56694540816502,9,5 1 1 1 1 +443,S1_block_scratch,"(4, 5, 6, 7)|19",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +444,S1_block_scratch,"(4, 5, 6, 7)|20",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +445,S1_block_scratch,"(4, 5, 6, 7)|21",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +446,S1_block_scratch,"(4, 5, 6, 7)|22",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +447,S1_block_scratch,"(4, 5, 6, 7)|23",0,7,9,35.31829810433119,9,3 1 1 1 1 1 1 +448,S3_packet_copy,"(0, 1, 2, 3)|((0, 1), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +449,S3_packet_copy,"(0, 1, 2, 3)|((0, 2), -1)",0,4,7,25.35108486091452,7,3 2 1 1 +450,S3_packet_copy,"(0, 1, 2, 3)|((0, 2), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +451,S3_packet_copy,"(0, 1, 2, 3)|((0, 3), -1)",0,4,7,25.35108486091452,7,3 2 1 1 +452,S3_packet_copy,"(0, 1, 2, 3)|((0, 3), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +453,S3_packet_copy,"(0, 1, 2, 3)|((1, 2), -1)",0,4,7,25.35108486091452,7,3 2 1 1 +454,S3_packet_copy,"(0, 1, 2, 3)|((1, 2), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +455,S3_packet_copy,"(0, 1, 2, 3)|((1, 3), -1)",0,4,7,25.35108486091452,7,3 2 1 1 +456,S3_packet_copy,"(0, 1, 2, 3)|((1, 3), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +457,S3_packet_copy,"(0, 1, 2, 3)|((2, 3), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +458,S3_packet_copy,"(0, 1, 4, 5)|((0, 1), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +459,S3_packet_copy,"(0, 1, 4, 5)|((0, 4), -1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +460,S3_packet_copy,"(0, 1, 4, 5)|((0, 4), 1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +461,S3_packet_copy,"(0, 1, 4, 5)|((0, 5), -1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +462,S3_packet_copy,"(0, 1, 4, 5)|((0, 5), 1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +463,S3_packet_copy,"(0, 1, 4, 5)|((1, 4), -1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +464,S3_packet_copy,"(0, 1, 4, 5)|((1, 4), 1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +465,S3_packet_copy,"(0, 1, 4, 5)|((1, 5), -1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +466,S3_packet_copy,"(0, 1, 4, 5)|((1, 5), 1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +467,S3_packet_copy,"(0, 1, 4, 5)|((4, 5), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +468,S3_packet_copy,"(0, 1, 6, 7)|((0, 1), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +469,S3_packet_copy,"(0, 1, 6, 7)|((0, 6), -1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +470,S3_packet_copy,"(0, 1, 6, 7)|((0, 6), 1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +471,S3_packet_copy,"(0, 1, 6, 7)|((0, 7), -1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +472,S3_packet_copy,"(0, 1, 6, 7)|((0, 7), 1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +473,S3_packet_copy,"(0, 1, 6, 7)|((1, 6), -1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +474,S3_packet_copy,"(0, 1, 6, 7)|((1, 6), 1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +475,S3_packet_copy,"(0, 1, 6, 7)|((1, 7), -1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +476,S3_packet_copy,"(0, 1, 6, 7)|((1, 7), 1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +477,S3_packet_copy,"(0, 1, 6, 7)|((6, 7), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +478,S3_packet_copy,"(0, 2, 4, 6)|((0, 2), -1)",0,3,8,26.005909362467786,8,4 2 2 +479,S3_packet_copy,"(0, 2, 4, 6)|((0, 2), 1)",0,3,8,26.005909362467786,8,4 2 2 +480,S3_packet_copy,"(0, 2, 4, 6)|((0, 4), -1)",0,3,8,26.34570743605858,8,3 3 2 +481,S3_packet_copy,"(0, 2, 4, 6)|((0, 4), 1)",0,3,8,26.34570743605858,8,3 3 2 +482,S3_packet_copy,"(0, 2, 4, 6)|((0, 6), -1)",0,3,8,26.34570743605858,8,3 3 2 +483,S3_packet_copy,"(0, 2, 4, 6)|((0, 6), 1)",0,3,8,26.34570743605858,8,3 3 2 +484,S3_packet_copy,"(0, 2, 4, 6)|((2, 4), -1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +485,S3_packet_copy,"(0, 2, 4, 6)|((2, 4), 1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +486,S3_packet_copy,"(0, 2, 4, 6)|((2, 6), -1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +487,S3_packet_copy,"(0, 2, 4, 6)|((2, 6), 1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +488,S3_packet_copy,"(0, 2, 4, 6)|((4, 6), -1)",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +489,S3_packet_copy,"(0, 2, 4, 6)|((4, 6), 1)",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +490,S3_packet_copy,"(0, 2, 5, 7)|((0, 2), -1)",0,3,7,23.101744282439284,7,4 2 1 +491,S3_packet_copy,"(0, 2, 5, 7)|((0, 2), 1)",0,3,7,23.101744282439284,7,4 2 1 +492,S3_packet_copy,"(0, 2, 5, 7)|((0, 5), -1)",0,3,8,26.34570743605858,8,3 3 2 +493,S3_packet_copy,"(0, 2, 5, 7)|((0, 5), 1)",0,3,8,26.34570743605858,8,3 3 2 +494,S3_packet_copy,"(0, 2, 5, 7)|((0, 7), -1)",0,3,8,26.34570743605858,8,3 3 2 +495,S3_packet_copy,"(0, 2, 5, 7)|((0, 7), 1)",0,3,8,26.34570743605858,8,3 3 2 +496,S3_packet_copy,"(0, 2, 5, 7)|((2, 5), -1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +497,S3_packet_copy,"(0, 2, 5, 7)|((2, 5), 1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +498,S3_packet_copy,"(0, 2, 5, 7)|((2, 7), -1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +499,S3_packet_copy,"(0, 2, 5, 7)|((2, 7), 1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +500,S3_packet_copy,"(0, 2, 5, 7)|((5, 7), -1)",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +501,S3_packet_copy,"(0, 2, 5, 7)|((5, 7), 1)",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +502,S3_packet_copy,"(0, 3, 4, 7)|((0, 3), -1)",0,3,8,26.005909362467786,8,4 2 2 +503,S3_packet_copy,"(0, 3, 4, 7)|((0, 3), 1)",0,3,8,26.005909362467786,8,4 2 2 +504,S3_packet_copy,"(0, 3, 4, 7)|((0, 4), -1)",0,3,8,26.34570743605858,8,3 3 2 +505,S3_packet_copy,"(0, 3, 4, 7)|((0, 4), 1)",0,4,9,30.63616687720697,9,3 3 2 1 +506,S3_packet_copy,"(0, 3, 4, 7)|((0, 7), -1)",0,3,8,26.34570743605858,8,3 3 2 +507,S3_packet_copy,"(0, 3, 4, 7)|((0, 7), 1)",0,4,9,30.63616687720697,9,3 3 2 1 +508,S3_packet_copy,"(0, 3, 4, 7)|((3, 4), -1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +509,S3_packet_copy,"(0, 3, 4, 7)|((3, 4), 1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +510,S3_packet_copy,"(0, 3, 4, 7)|((3, 7), -1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +511,S3_packet_copy,"(0, 3, 4, 7)|((3, 7), 1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +512,S3_packet_copy,"(0, 3, 4, 7)|((4, 7), -1)",0,6,8,31.551086806947346,8,2 2 1 1 1 1 +513,S3_packet_copy,"(0, 3, 4, 7)|((4, 7), 1)",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +514,S3_packet_copy,"(0, 3, 5, 6)|((0, 3), -1)",0,3,7,23.101744282439284,7,4 2 1 +515,S3_packet_copy,"(0, 3, 5, 6)|((0, 3), 1)",0,3,7,23.101744282439284,7,4 2 1 +516,S3_packet_copy,"(0, 3, 5, 6)|((0, 5), -1)",0,3,8,26.34570743605858,8,3 3 2 +517,S3_packet_copy,"(0, 3, 5, 6)|((0, 5), 1)",0,4,9,30.63616687720697,9,3 3 2 1 +518,S3_packet_copy,"(0, 3, 5, 6)|((0, 6), -1)",0,3,8,26.34570743605858,8,3 3 2 +519,S3_packet_copy,"(0, 3, 5, 6)|((0, 6), 1)",0,3,9,28.726624372322533,9,3 3 3 +520,S3_packet_copy,"(0, 3, 5, 6)|((3, 5), -1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +521,S3_packet_copy,"(0, 3, 5, 6)|((3, 5), 1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +522,S3_packet_copy,"(0, 3, 5, 6)|((3, 6), -1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +523,S3_packet_copy,"(0, 3, 5, 6)|((3, 6), 1)",0,6,9,33.9320037432113,9,3 2 1 1 1 1 +524,S3_packet_copy,"(0, 3, 5, 6)|((5, 6), -1)",0,6,8,31.551086806947346,8,2 2 1 1 1 1 +525,S3_packet_copy,"(0, 3, 5, 6)|((5, 6), 1)",0,7,9,35.84154624809574,9,2 2 1 1 1 1 1 +526,S3_packet_copy,"(1, 2, 4, 7)|((1, 2), -1)",0,3,8,26.005909362467786,8,4 2 2 +527,S3_packet_copy,"(1, 2, 4, 7)|((1, 2), 1)",0,3,8,26.005909362467786,8,4 2 2 +528,S3_packet_copy,"(1, 2, 4, 7)|((1, 4), -1)",0,3,8,26.34570743605858,8,3 3 2 +529,S3_packet_copy,"(1, 2, 4, 7)|((1, 4), 1)",0,3,8,26.34570743605858,8,3 3 2 +530,S3_packet_copy,"(1, 2, 4, 7)|((1, 7), -1)",0,3,8,26.34570743605858,8,3 3 2 +531,S3_packet_copy,"(1, 2, 4, 7)|((1, 7), 1)",0,3,8,26.34570743605858,8,3 3 2 +532,S3_packet_copy,"(1, 2, 4, 7)|((2, 4), -1)",0,3,8,26.34570743605858,8,3 3 2 +533,S3_packet_copy,"(1, 2, 4, 7)|((2, 4), 1)",0,3,8,26.34570743605858,8,3 3 2 +534,S3_packet_copy,"(1, 2, 4, 7)|((2, 7), -1)",0,3,8,26.34570743605858,8,3 3 2 +535,S3_packet_copy,"(1, 2, 4, 7)|((2, 7), 1)",0,3,8,26.34570743605858,8,3 3 2 +536,S3_packet_copy,"(1, 2, 4, 7)|((4, 7), -1)",0,5,9,31.682663164736066,9,4 2 1 1 1 +537,S3_packet_copy,"(1, 2, 4, 7)|((4, 7), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +538,S3_packet_copy,"(1, 2, 5, 6)|((1, 2), -1)",0,3,7,23.101744282439284,7,4 2 1 +539,S3_packet_copy,"(1, 2, 5, 6)|((1, 2), 1)",0,3,7,23.101744282439284,7,4 2 1 +540,S3_packet_copy,"(1, 2, 5, 6)|((1, 5), -1)",0,3,8,26.34570743605858,8,3 3 2 +541,S3_packet_copy,"(1, 2, 5, 6)|((1, 5), 1)",0,3,8,26.34570743605858,8,3 3 2 +542,S3_packet_copy,"(1, 2, 5, 6)|((1, 6), -1)",0,3,8,26.34570743605858,8,3 3 2 +543,S3_packet_copy,"(1, 2, 5, 6)|((1, 6), 1)",0,3,8,26.34570743605858,8,3 3 2 +544,S3_packet_copy,"(1, 2, 5, 6)|((2, 5), -1)",0,3,8,26.34570743605858,8,3 3 2 +545,S3_packet_copy,"(1, 2, 5, 6)|((2, 5), 1)",0,3,8,26.34570743605858,8,3 3 2 +546,S3_packet_copy,"(1, 2, 5, 6)|((2, 6), -1)",0,3,8,26.34570743605858,8,3 3 2 +547,S3_packet_copy,"(1, 2, 5, 6)|((2, 6), 1)",0,3,8,26.34570743605858,8,3 3 2 +548,S3_packet_copy,"(1, 2, 5, 6)|((5, 6), -1)",0,5,9,31.682663164736066,9,4 2 1 1 1 +549,S3_packet_copy,"(1, 2, 5, 6)|((5, 6), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +550,S3_packet_copy,"(1, 3, 4, 6)|((1, 3), -1)",0,3,8,26.005909362467786,8,4 2 2 +551,S3_packet_copy,"(1, 3, 4, 6)|((1, 3), 1)",0,3,8,26.005909362467786,8,4 2 2 +552,S3_packet_copy,"(1, 3, 4, 6)|((1, 4), -1)",0,4,9,30.63616687720697,9,3 3 2 1 +553,S3_packet_copy,"(1, 3, 4, 6)|((1, 4), 1)",0,4,9,30.63616687720697,9,3 3 2 1 +554,S3_packet_copy,"(1, 3, 4, 6)|((1, 6), -1)",0,4,9,30.63616687720697,9,3 3 2 1 +555,S3_packet_copy,"(1, 3, 4, 6)|((1, 6), 1)",0,4,9,30.63616687720697,9,3 3 2 1 +556,S3_packet_copy,"(1, 3, 4, 6)|((3, 4), -1)",0,3,8,26.34570743605858,8,3 3 2 +557,S3_packet_copy,"(1, 3, 4, 6)|((3, 4), 1)",0,3,8,26.34570743605858,8,3 3 2 +558,S3_packet_copy,"(1, 3, 4, 6)|((3, 6), -1)",0,3,8,26.34570743605858,8,3 3 2 +559,S3_packet_copy,"(1, 3, 4, 6)|((3, 6), 1)",0,3,8,26.34570743605858,8,3 3 2 +560,S3_packet_copy,"(1, 3, 4, 6)|((4, 6), -1)",0,4,7,25.35108486091452,7,3 2 1 1 +561,S3_packet_copy,"(1, 3, 4, 6)|((4, 6), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +562,S3_packet_copy,"(1, 3, 5, 7)|((1, 3), -1)",0,3,7,23.101744282439284,7,4 2 1 +563,S3_packet_copy,"(1, 3, 5, 7)|((1, 3), 1)",0,3,7,23.101744282439284,7,4 2 1 +564,S3_packet_copy,"(1, 3, 5, 7)|((1, 5), -1)",0,4,9,30.63616687720697,9,3 3 2 1 +565,S3_packet_copy,"(1, 3, 5, 7)|((1, 5), 1)",0,3,8,26.34570743605858,8,3 3 2 +566,S3_packet_copy,"(1, 3, 5, 7)|((1, 7), -1)",0,4,9,30.63616687720697,9,3 3 2 1 +567,S3_packet_copy,"(1, 3, 5, 7)|((1, 7), 1)",0,3,8,26.34570743605858,8,3 3 2 +568,S3_packet_copy,"(1, 3, 5, 7)|((3, 5), -1)",0,3,8,26.34570743605858,8,3 3 2 +569,S3_packet_copy,"(1, 3, 5, 7)|((3, 5), 1)",0,3,8,26.34570743605858,8,3 3 2 +570,S3_packet_copy,"(1, 3, 5, 7)|((3, 7), -1)",0,3,8,26.34570743605858,8,3 3 2 +571,S3_packet_copy,"(1, 3, 5, 7)|((3, 7), 1)",0,3,8,26.34570743605858,8,3 3 2 +572,S3_packet_copy,"(1, 3, 5, 7)|((5, 7), -1)",0,4,7,25.35108486091452,7,3 2 1 1 +573,S3_packet_copy,"(1, 3, 5, 7)|((5, 7), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +574,S3_packet_copy,"(2, 3, 4, 5)|((2, 3), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +575,S3_packet_copy,"(2, 3, 4, 5)|((2, 4), -1)",0,4,9,30.63616687720697,9,3 3 2 1 +576,S3_packet_copy,"(2, 3, 4, 5)|((2, 4), 1)",0,3,8,26.34570743605858,8,3 3 2 +577,S3_packet_copy,"(2, 3, 4, 5)|((2, 5), -1)",0,4,9,30.63616687720697,9,3 3 2 1 +578,S3_packet_copy,"(2, 3, 4, 5)|((2, 5), 1)",0,3,8,26.34570743605858,8,3 3 2 +579,S3_packet_copy,"(2, 3, 4, 5)|((3, 4), -1)",0,3,8,26.34570743605858,8,3 3 2 +580,S3_packet_copy,"(2, 3, 4, 5)|((3, 4), 1)",0,3,9,28.726624372322533,9,3 3 3 +581,S3_packet_copy,"(2, 3, 4, 5)|((3, 5), -1)",0,3,9,28.726624372322533,9,3 3 3 +582,S3_packet_copy,"(2, 3, 4, 5)|((3, 5), 1)",0,3,9,28.726624372322533,9,3 3 3 +583,S3_packet_copy,"(2, 3, 4, 5)|((4, 5), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +584,S3_packet_copy,"(2, 3, 6, 7)|((2, 3), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +585,S3_packet_copy,"(2, 3, 6, 7)|((2, 6), -1)",0,3,8,26.34570743605858,8,3 3 2 +586,S3_packet_copy,"(2, 3, 6, 7)|((2, 6), 1)",0,3,8,26.34570743605858,8,3 3 2 +587,S3_packet_copy,"(2, 3, 6, 7)|((2, 7), -1)",0,3,8,26.34570743605858,8,3 3 2 +588,S3_packet_copy,"(2, 3, 6, 7)|((2, 7), 1)",0,3,8,26.34570743605858,8,3 3 2 +589,S3_packet_copy,"(2, 3, 6, 7)|((3, 6), -1)",0,3,8,26.34570743605858,8,3 3 2 +590,S3_packet_copy,"(2, 3, 6, 7)|((3, 6), 1)",0,3,9,28.726624372322533,9,3 3 3 +591,S3_packet_copy,"(2, 3, 6, 7)|((3, 7), -1)",0,3,9,28.726624372322533,9,3 3 3 +592,S3_packet_copy,"(2, 3, 6, 7)|((3, 7), 1)",0,3,8,26.34570743605858,8,3 3 2 +593,S3_packet_copy,"(2, 3, 6, 7)|((6, 7), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +594,S3_packet_copy,"(4, 5, 6, 7)|((4, 5), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +595,S3_packet_copy,"(4, 5, 6, 7)|((4, 6), -1)",0,4,7,25.35108486091452,7,3 2 1 1 +596,S3_packet_copy,"(4, 5, 6, 7)|((4, 6), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +597,S3_packet_copy,"(4, 5, 6, 7)|((4, 7), -1)",0,4,7,25.35108486091452,7,3 2 1 1 +598,S3_packet_copy,"(4, 5, 6, 7)|((4, 7), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +599,S3_packet_copy,"(4, 5, 6, 7)|((5, 6), -1)",0,4,7,25.35108486091452,7,3 2 1 1 +600,S3_packet_copy,"(4, 5, 6, 7)|((5, 6), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +601,S3_packet_copy,"(4, 5, 6, 7)|((5, 7), -1)",0,4,7,25.35108486091452,7,3 2 1 1 +602,S3_packet_copy,"(4, 5, 6, 7)|((5, 7), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +603,S3_packet_copy,"(4, 5, 6, 7)|((6, 7), 1)",0,4,7,25.35108486091452,7,3 2 1 1 +604,S4_slot_copy,"((0, 1, 2, 3), (0, 2), -1)|8",0,5,8,29.641544302062908,8,3 2 1 1 1 +605,S4_slot_copy,"((0, 1, 2, 3), (0, 2), 1)|9",0,5,8,29.641544302062908,8,3 2 1 1 1 +606,S4_slot_copy,"((0, 1, 2, 3), (0, 3), -1)|10",0,5,8,29.641544302062908,8,3 2 1 1 1 +607,S4_slot_copy,"((0, 1, 2, 3), (0, 3), 1)|11",0,4,5,20.066002844622066,5,2 1 1 1 +608,S4_slot_copy,"((0, 1, 2, 3), (1, 2), -1)|11",0,5,8,29.641544302062908,8,3 2 1 1 1 +609,S4_slot_copy,"((0, 1, 2, 3), (1, 2), 1)|10",0,4,5,20.066002844622066,5,2 1 1 1 +610,S4_slot_copy,"((0, 1, 2, 3), (1, 3), -1)|9",0,4,5,20.066002844622066,5,2 1 1 1 +611,S4_slot_copy,"((0, 1, 2, 3), (1, 3), 1)|8",0,4,5,20.066002844622066,5,2 1 1 1 +612,S4_slot_copy,"((0, 1, 4, 5), (0, 4), -1)|20",0,5,8,29.641544302062908,8,3 2 1 1 1 +613,S4_slot_copy,"((0, 1, 4, 5), (0, 4), 1)|21",0,5,8,29.641544302062908,8,3 2 1 1 1 +614,S4_slot_copy,"((0, 1, 4, 5), (0, 5), -1)|22",0,5,8,29.641544302062908,8,3 2 1 1 1 +615,S4_slot_copy,"((0, 1, 4, 5), (0, 5), 1)|23",0,4,5,20.066002844622066,5,2 1 1 1 +616,S4_slot_copy,"((0, 1, 4, 5), (1, 4), -1)|23",0,5,8,29.641544302062908,8,3 2 1 1 1 +617,S4_slot_copy,"((0, 1, 4, 5), (1, 4), 1)|22",0,4,5,20.066002844622066,5,2 1 1 1 +618,S4_slot_copy,"((0, 1, 4, 5), (1, 5), -1)|21",0,4,5,20.066002844622066,5,2 1 1 1 +619,S4_slot_copy,"((0, 1, 4, 5), (1, 5), 1)|20",0,4,5,20.066002844622066,5,2 1 1 1 +620,S4_slot_copy,"((0, 1, 6, 7), (0, 6), -1)|32",0,5,8,29.641544302062908,8,3 2 1 1 1 +621,S4_slot_copy,"((0, 1, 6, 7), (0, 6), 1)|33",0,5,8,29.641544302062908,8,3 2 1 1 1 +622,S4_slot_copy,"((0, 1, 6, 7), (0, 7), -1)|34",0,5,8,29.641544302062908,8,3 2 1 1 1 +623,S4_slot_copy,"((0, 1, 6, 7), (0, 7), 1)|35",0,4,5,20.066002844622066,5,2 1 1 1 +624,S4_slot_copy,"((0, 1, 6, 7), (1, 6), -1)|35",0,5,8,29.641544302062908,8,3 2 1 1 1 +625,S4_slot_copy,"((0, 1, 6, 7), (1, 6), 1)|34",0,4,5,20.066002844622066,5,2 1 1 1 +626,S4_slot_copy,"((0, 1, 6, 7), (1, 7), -1)|33",0,4,5,20.066002844622066,5,2 1 1 1 +627,S4_slot_copy,"((0, 1, 6, 7), (1, 7), 1)|32",0,4,5,20.066002844622066,5,2 1 1 1 +628,S4_slot_copy,"((0, 2, 4, 6), (0, 4), -1)|44",0,5,8,28.778498084707564,8,4 1 1 1 1 +629,S4_slot_copy,"((0, 2, 4, 6), (0, 4), 1)|45",0,5,8,28.778498084707564,8,4 1 1 1 1 +630,S4_slot_copy,"((0, 2, 4, 6), (0, 6), -1)|46",0,5,8,28.778498084707564,8,4 1 1 1 1 +631,S4_slot_copy,"((0, 2, 4, 6), (0, 6), 1)|47",0,4,4,17.161837764593564,4,1 1 1 1 +632,S4_slot_copy,"((0, 2, 4, 6), (2, 4), -1)|47",0,5,8,28.778498084707564,8,4 1 1 1 1 +633,S4_slot_copy,"((0, 2, 4, 6), (2, 4), 1)|46",0,4,4,17.161837764593564,4,1 1 1 1 +634,S4_slot_copy,"((0, 2, 4, 6), (2, 6), -1)|45",0,4,4,17.161837764593564,4,1 1 1 1 +635,S4_slot_copy,"((0, 2, 4, 6), (2, 6), 1)|44",0,4,4,17.161837764593564,4,1 1 1 1 +636,S4_slot_copy,"((0, 2, 5, 7), (0, 5), -1)|56",0,5,8,29.641544302062908,8,3 2 1 1 1 +637,S4_slot_copy,"((0, 2, 5, 7), (0, 5), 1)|57",0,5,8,29.641544302062908,8,3 2 1 1 1 +638,S4_slot_copy,"((0, 2, 5, 7), (0, 7), -1)|58",0,5,8,29.641544302062908,8,3 2 1 1 1 +639,S4_slot_copy,"((0, 2, 5, 7), (0, 7), 1)|59",0,4,5,20.066002844622066,5,2 1 1 1 +640,S4_slot_copy,"((0, 2, 5, 7), (2, 5), -1)|59",0,5,8,29.641544302062908,8,3 2 1 1 1 +641,S4_slot_copy,"((0, 2, 5, 7), (2, 5), 1)|58",0,4,5,20.066002844622066,5,2 1 1 1 +642,S4_slot_copy,"((0, 2, 5, 7), (2, 7), -1)|57",0,4,5,20.066002844622066,5,2 1 1 1 +643,S4_slot_copy,"((0, 2, 5, 7), (2, 7), 1)|56",0,4,5,20.066002844622066,5,2 1 1 1 +644,S4_slot_copy,"((0, 3, 4, 7), (0, 4), -1)|68",0,5,8,29.641544302062908,8,3 2 1 1 1 +645,S4_slot_copy,"((0, 3, 4, 7), (0, 4), 1)|69",0,5,8,29.641544302062908,8,3 2 1 1 1 +646,S4_slot_copy,"((0, 3, 4, 7), (0, 7), -1)|70",0,5,8,29.641544302062908,8,3 2 1 1 1 +647,S4_slot_copy,"((0, 3, 4, 7), (0, 7), 1)|71",0,4,5,20.066002844622066,5,2 1 1 1 +648,S4_slot_copy,"((0, 3, 4, 7), (3, 4), -1)|71",0,5,8,29.641544302062908,8,3 2 1 1 1 +649,S4_slot_copy,"((0, 3, 4, 7), (3, 4), 1)|70",0,4,5,20.066002844622066,5,2 1 1 1 +650,S4_slot_copy,"((0, 3, 4, 7), (3, 7), -1)|69",0,4,5,20.066002844622066,5,2 1 1 1 +651,S4_slot_copy,"((0, 3, 4, 7), (3, 7), 1)|68",0,4,5,20.066002844622066,5,2 1 1 1 +652,S4_slot_copy,"((0, 3, 5, 6), (0, 5), -1)|80",0,5,8,29.641544302062908,8,3 2 1 1 1 +653,S4_slot_copy,"((0, 3, 5, 6), (0, 5), 1)|81",0,5,8,29.641544302062908,8,3 2 1 1 1 +654,S4_slot_copy,"((0, 3, 5, 6), (0, 6), -1)|82",0,5,8,29.641544302062908,8,3 2 1 1 1 +655,S4_slot_copy,"((0, 3, 5, 6), (0, 6), 1)|83",0,4,5,20.066002844622066,5,2 1 1 1 +656,S4_slot_copy,"((0, 3, 5, 6), (3, 5), -1)|83",0,5,8,29.641544302062908,8,3 2 1 1 1 +657,S4_slot_copy,"((0, 3, 5, 6), (3, 5), 1)|82",0,4,5,20.066002844622066,5,2 1 1 1 +658,S4_slot_copy,"((0, 3, 5, 6), (3, 6), -1)|81",0,4,5,20.066002844622066,5,2 1 1 1 +659,S4_slot_copy,"((0, 3, 5, 6), (3, 6), 1)|80",0,4,5,20.066002844622066,5,2 1 1 1 +660,S4_slot_copy,"((1, 2, 4, 7), (1, 4), -1)|92",0,5,8,28.778498084707564,8,4 1 1 1 1 +661,S4_slot_copy,"((1, 2, 4, 7), (1, 4), 1)|93",0,5,8,28.778498084707564,8,4 1 1 1 1 +662,S4_slot_copy,"((1, 2, 4, 7), (1, 7), -1)|94",0,5,8,28.778498084707564,8,4 1 1 1 1 +663,S4_slot_copy,"((1, 2, 4, 7), (1, 7), 1)|95",0,4,4,17.161837764593564,4,1 1 1 1 +664,S4_slot_copy,"((1, 2, 4, 7), (2, 4), -1)|95",0,5,8,28.778498084707564,8,4 1 1 1 1 +665,S4_slot_copy,"((1, 2, 4, 7), (2, 4), 1)|94",0,4,4,17.161837764593564,4,1 1 1 1 +666,S4_slot_copy,"((1, 2, 4, 7), (2, 7), -1)|93",0,4,4,17.161837764593564,4,1 1 1 1 +667,S4_slot_copy,"((1, 2, 4, 7), (2, 7), 1)|92",0,4,4,17.161837764593564,4,1 1 1 1 +668,S4_slot_copy,"((1, 2, 5, 6), (1, 5), -1)|104",0,5,8,29.641544302062908,8,3 2 1 1 1 +669,S4_slot_copy,"((1, 2, 5, 6), (1, 5), 1)|105",0,5,8,29.641544302062908,8,3 2 1 1 1 +670,S4_slot_copy,"((1, 2, 5, 6), (1, 6), -1)|106",0,5,8,29.641544302062908,8,3 2 1 1 1 +671,S4_slot_copy,"((1, 2, 5, 6), (1, 6), 1)|107",0,4,5,20.066002844622066,5,2 1 1 1 +672,S4_slot_copy,"((1, 2, 5, 6), (2, 5), -1)|107",0,5,8,29.641544302062908,8,3 2 1 1 1 +673,S4_slot_copy,"((1, 2, 5, 6), (2, 5), 1)|106",0,4,5,20.066002844622066,5,2 1 1 1 +674,S4_slot_copy,"((1, 2, 5, 6), (2, 6), -1)|105",0,4,5,20.066002844622066,5,2 1 1 1 +675,S4_slot_copy,"((1, 2, 5, 6), (2, 6), 1)|104",0,4,5,20.066002844622066,5,2 1 1 1 +676,S4_slot_copy,"((1, 3, 4, 6), (1, 4), -1)|116",0,5,8,29.641544302062908,8,3 2 1 1 1 +677,S4_slot_copy,"((1, 3, 4, 6), (1, 4), 1)|117",0,5,8,29.641544302062908,8,3 2 1 1 1 +678,S4_slot_copy,"((1, 3, 4, 6), (1, 6), -1)|118",0,5,8,29.641544302062908,8,3 2 1 1 1 +679,S4_slot_copy,"((1, 3, 4, 6), (1, 6), 1)|119",0,4,5,20.066002844622066,5,2 1 1 1 +680,S4_slot_copy,"((1, 3, 4, 6), (3, 4), -1)|119",0,5,8,29.641544302062908,8,3 2 1 1 1 +681,S4_slot_copy,"((1, 3, 4, 6), (3, 4), 1)|118",0,4,5,20.066002844622066,5,2 1 1 1 +682,S4_slot_copy,"((1, 3, 4, 6), (3, 6), -1)|117",0,4,5,20.066002844622066,5,2 1 1 1 +683,S4_slot_copy,"((1, 3, 4, 6), (3, 6), 1)|116",0,4,5,20.066002844622066,5,2 1 1 1 +684,S4_slot_copy,"((1, 3, 5, 7), (1, 5), -1)|128",0,5,8,29.641544302062908,8,3 2 1 1 1 +685,S4_slot_copy,"((1, 3, 5, 7), (1, 5), 1)|129",0,5,8,29.641544302062908,8,3 2 1 1 1 +686,S4_slot_copy,"((1, 3, 5, 7), (1, 7), -1)|130",0,5,8,29.641544302062908,8,3 2 1 1 1 +687,S4_slot_copy,"((1, 3, 5, 7), (1, 7), 1)|131",0,4,5,20.066002844622066,5,2 1 1 1 +688,S4_slot_copy,"((1, 3, 5, 7), (3, 5), -1)|131",0,5,8,29.641544302062908,8,3 2 1 1 1 +689,S4_slot_copy,"((1, 3, 5, 7), (3, 5), 1)|130",0,4,5,20.066002844622066,5,2 1 1 1 +690,S4_slot_copy,"((1, 3, 5, 7), (3, 7), -1)|129",0,4,5,20.066002844622066,5,2 1 1 1 +691,S4_slot_copy,"((1, 3, 5, 7), (3, 7), 1)|128",0,4,5,20.066002844622066,5,2 1 1 1 +692,S4_slot_copy,"((2, 3, 4, 5), (2, 4), -1)|140",0,5,8,29.641544302062908,8,3 2 1 1 1 +693,S4_slot_copy,"((2, 3, 4, 5), (2, 4), 1)|141",0,5,8,29.641544302062908,8,3 2 1 1 1 +694,S4_slot_copy,"((2, 3, 4, 5), (2, 5), -1)|142",0,5,8,29.641544302062908,8,3 2 1 1 1 +695,S4_slot_copy,"((2, 3, 4, 5), (2, 5), 1)|143",0,4,5,20.066002844622066,5,2 1 1 1 +696,S4_slot_copy,"((2, 3, 4, 5), (3, 4), -1)|143",0,5,8,29.641544302062908,8,3 2 1 1 1 +697,S4_slot_copy,"((2, 3, 4, 5), (3, 4), 1)|142",0,4,5,20.066002844622066,5,2 1 1 1 +698,S4_slot_copy,"((2, 3, 4, 5), (3, 5), -1)|141",0,4,5,20.066002844622066,5,2 1 1 1 +699,S4_slot_copy,"((2, 3, 4, 5), (3, 5), 1)|140",0,4,5,20.066002844622066,5,2 1 1 1 +700,S4_slot_copy,"((2, 3, 6, 7), (2, 6), -1)|152",0,5,8,29.641544302062908,8,3 2 1 1 1 +701,S4_slot_copy,"((2, 3, 6, 7), (2, 6), 1)|153",0,5,8,29.641544302062908,8,3 2 1 1 1 +702,S4_slot_copy,"((2, 3, 6, 7), (2, 7), -1)|154",0,5,8,29.641544302062908,8,3 2 1 1 1 +703,S4_slot_copy,"((2, 3, 6, 7), (2, 7), 1)|155",0,4,5,20.066002844622066,5,2 1 1 1 +704,S4_slot_copy,"((2, 3, 6, 7), (3, 6), -1)|155",0,5,8,29.641544302062908,8,3 2 1 1 1 +705,S4_slot_copy,"((2, 3, 6, 7), (3, 6), 1)|154",0,4,5,20.066002844622066,5,2 1 1 1 +706,S4_slot_copy,"((2, 3, 6, 7), (3, 7), -1)|153",0,4,5,20.066002844622066,5,2 1 1 1 +707,S4_slot_copy,"((2, 3, 6, 7), (3, 7), 1)|152",0,4,5,20.066002844622066,5,2 1 1 1 +708,S4_slot_copy,"((4, 5, 6, 7), (4, 6), -1)|164",0,5,8,29.641544302062908,8,3 2 1 1 1 +709,S4_slot_copy,"((4, 5, 6, 7), (4, 6), 1)|165",0,5,8,29.641544302062908,8,3 2 1 1 1 +710,S4_slot_copy,"((4, 5, 6, 7), (4, 7), -1)|166",0,5,8,29.641544302062908,8,3 2 1 1 1 +711,S4_slot_copy,"((4, 5, 6, 7), (4, 7), 1)|167",0,4,5,20.066002844622066,5,2 1 1 1 +712,S4_slot_copy,"((4, 5, 6, 7), (5, 6), -1)|167",0,5,8,29.641544302062908,8,3 2 1 1 1 +713,S4_slot_copy,"((4, 5, 6, 7), (5, 6), 1)|166",0,4,5,20.066002844622066,5,2 1 1 1 +714,S4_slot_copy,"((4, 5, 6, 7), (5, 7), -1)|165",0,4,5,20.066002844622066,5,2 1 1 1 +715,S4_slot_copy,"((4, 5, 6, 7), (5, 7), 1)|164",0,4,5,20.066002844622066,5,2 1 1 1 diff --git a/research/helper-minimality/inputs/main/03-motifs.tex b/research/helper-minimality/inputs/main/03-motifs.tex new file mode 100644 index 0000000000..cdb0ba527a --- /dev/null +++ b/research/helper-minimality/inputs/main/03-motifs.tex @@ -0,0 +1,700 @@ +\section{Two finite networks with a rank saving} +\label{sec:finite-networks} + +We construct two fixed linear networks that exchange two banks of values +while restoring every auxiliary value. When the values are replaced by +arrays, a common representation on all wires at a gate lets that gate act +pointwise without disturbing the representation. We explain this invariant +before constructing the subspace labels that make changes of representation +cheap. The first network uses bit values and rational subspaces; the second +uses Gaussian dyadic values and binary subspaces. The scalar domain specifies +the values combined at a gate, while the subspace labels are used to construct operators +on each wire's address-indexed array. + +Put +\[ + h=100,\qquad v=\binom h3=161700,\qquad + N=v^3=4227952113000000,\qquad m=h^3=1000000. +\] +Let $\mathcal T$ be the set of three-element subsets of $[h]$. +There are two data banks $X_a,Y_a$, indexed by +$a=(a_1,a_2,a_3)\in\mathcal T^3$. +A wire carries one scalar. A gate is a fixed linear map on a specified +set of wires; untouched wires retain their values. The vertices on a +wire are its source, the gates that touch it in time order, and its sink; +its edges join consecutive vertices. We call the name of a wire its +\emph{role}, so that we can distinguish a fixed place in the network +from the value currently carried there. + +\subsection{Scalar operations and restored auxiliary values} + +There are three stages. At stage $j$, fix the other two coordinates and +operate on the $v$ values in each bank obtained by varying coordinate $j$. Thus +there are $v^2$ separate invocations at each stage. +Each such invocation has its own auxiliary wires, distinct from all +other invocations, including those in other stages. There are +\[ + I=3v^2=78440670000 +\] +invocations. In a forward invocation, write $x_T$ for the data used as +controls and $y_S$ for the data to be updated; $S,T\in\mathcal T$ are +their varying $j$th coordinates. These are the logical source and +target banks of the invocation. For each ordered pair $(S,T)$ that is +neighboring under the rule below, there is an auxiliary wire $A_{ST}$. +There are also central wires $C_i$, $i\in[h]$, and in the second +construction a wire $C_\ast$. We call all these auxiliary wires +\emph{scratch wires}; their initial values may be arbitrary. + +The following maps specify the construction. +\begin{itemize} +\item In the bit construction, scalars lie in $\mathbb F_2$, and +$S,T$ are neighbors when $|S\cap T|=1$. +The copy map adds $x_T$ to $A_{ST}$ for each neighbor pair. +The side injection adds $\sum_{T:\,|S\cap T|=1}A_{ST}$ to $y_S$. +The gather adds $\sum_{T\ni i}x_T$ to $C_i$, and the scatter adds +$\sum_{i\in S}C_i$ to $y_S$. +\item In the complex construction, scalars lie in +$\mathbb Z[i,1/2]$, and neighbors are distinct triples with even +intersection. Copy is unchanged. Side injection adds +\[ + -\sum_{T\text{ neighboring }S}\frac{|S\cap T|-1}{2}A_{ST} +\] +to $y_S$. Gather adds $\sum_{T\ni i}x_T$ to $C_i$ and +$\sum_Tx_T$ to $C_\ast$. Scatter adds +$(\sum_{i\in S}C_i-C_\ast)/2$ to $y_S$. +\end{itemize} +Each update leaves its control wires unchanged. The first two rows of +the following schedule remove the effect of the old scratch values; +the next four introduce the source values and add their effect to the +target; the last two restore the scratch values. +This cancellation of arbitrary initial scratch values is a linear +instance of the restoration construction for transparent computation in +Buhrman, Cleve, Kouck\'y, Loff and Speelman~\cite[Section~3]{BuhrmanCleveKouckyLoffSpeelman2014}. +The forward schedule is +\begin{equation} +\begin{array}{c|l|l} +\text{row}&\text{operation}&\text{gate grouping}\\ \hline +0&\text{subtract side injection}&\text{one gate per target}\\ +1&\text{subtract scatter}&\text{one gate on targets and center}\\ +2&\text{copy}&\text{one gate per source}\\ +3&\text{gather}&\text{one gate on sources and center}\\ +4&\text{scatter}&\text{one gate on targets and center}\\ +5&\text{side injection}&\text{one gate per target}\\ +6&\text{undo gather}&\text{one gate on sources and center}\\ +7&\text{undo copy}&\text{one gate per source}. +\end{array} +\label{eq:motif-schedule} +\end{equation} + +\begin{lemma}\label{lem:scalar-motifs} +For arbitrary initial values of its auxiliary wires, a forward +invocation changes $y_S$ to $y_S+x_S$ and leaves every other value +unchanged. Performing a forward invocation from $X$ to $Y$ at stage 1, +the inverse forward schedule from $Y$ to $X$ at stage 2, and a forward +invocation from $X$ to $Y$ at stage 3 sends +\[ + (X_a,Y_a)\longmapsto(-Y_a,X_a) +\] +and restores every auxiliary value. In the bit construction this is the +permutation exchanging $X_a$ and $Y_a$. +\end{lemma} + +\begin{proof} +Write $\mathcal V$ for copy, $\mathcal G$ for gather, +$\mathcal J$ for side injection and $\mathcal R$ for scatter. +If the initial side and central vectors are $a,c$, the first two rows +subtract $\mathcal J a+\mathcal R c$ from $y$. Rows 2 and 3 change +them to $a+\mathcal Vx,c+\mathcal Gx$. Rows 4 and 5 therefore add +$\mathcal R(c+\mathcal Gx)+\mathcal J(a+\mathcal Vx)$. +Rows 6 and 7 restore $c,a$. The net target change is +$(\mathcal J\mathcal V+\mathcal R\mathcal G)x$, independently of +$a,c$. + +In the bit case, the central coefficient from $x_T$ to $y_S$ is +$|S\cap T|\bmod2$. The side contribution cancels exactly the +intersection-one cases; distinct triples with intersection zero or two +already have coefficient zero, and the self coefficient is one. +In the complex case, the central coefficient is $(|S\cap T|-1)/2$. +The side cancels it for distinct triples with intersection zero or two; +intersection one contributes zero, and the self coefficient is one. +Thus both net maps are $y\gets y+x$. + +The inverse schedule with logical source $Y$ and target $X$ effects +$X\gets X-Y$. Starting from $(x,y)$, the three stages give +$(x,y+x)$, then $(-y,y+x)$, then $(-y,x)$. +Each invocation restores its own auxiliary wires. +\end{proof} + +A fixed triple has +\[ + z_{\rm b}=3\binom{97}{2}=13968,\qquad + z_{\rm c}=\binom{97}{3}+3\cdot97=147731 +\] +neighbors in the two constructions, respectively. The second count +separates intersection zero and intersection two. Ordered pairs must +be counted: there are $vz$ side wires in each invocation, not $vz/2$. +With $c_{\rm b}=100$ and $c_{\rm c}=101$ central wires per invocation, +the total wire counts are +\begin{align} + W_{\rm b}&=2N+I(vz_{\rm b}+c_{\rm b}) + =177176569091445000000,\label{eq:bit-wire-count}\\ + W_{\rm c}&=2N+I(vz_{\rm c}+c_{\rm c}) + =1873807244643542670000.\label{eq:complex-wire-count} +\end{align} +All these numbers are fixed, independently of any eventual input length. + +\subsection{From scalar values to arrays} + +We record the representation principle before choosing the labels. Let +$R$ be the scalar ring of either network and let $\Omega$ be a finite address +set common to all wires. Replace each scalar by an array in $R^\Omega$, and +apply each scalar gate pointwise at every address. Write $\mathsf S_\Omega$ +for the resulting network on the vector of wire arrays. + +At each source, gate and sink $v$, assign an invertible $R$-linear operator +$D_v$ on $R^\Omega$, called its \emph{frame}. A frame acts on the values +indexed by addresses within one wire's array and may mix them; a gate instead +combines wire values at each fixed address. All incoming and outgoing +incidences of one gate use the same $D_v$. On an edge from $u$ to $v$, apply +$D_vD_u^{-1}$ to that wire's array. Define the operators on all input and +output roles by +\[ + D_{\rm in}=\bigoplus_w D_{\mathrm{source}(w)},\qquad + D_{\rm out}=\bigoplus_w D_{\mathrm{sink}(w)}. +\] +For a supplied physical input $f$, define its logical interpretation to be +$g=D_{\rm in}^{-1}f$; this definition requires no physical preprocessing. +At a vertex $v$, the invariant is that the stored array equals $D_v$ applied +to the logical array there. It holds at the sources by definition. On an +edge whose logical array is $\varphi$, the edge operator changes $D_u\varphi$ +to $D_v\varphi$. At a gate with logical input arrays $\varphi_j$, +$R$-linearity gives +$\sum_j c_jD_v\varphi_j=D_v(\sum_j c_j\varphi_j)$ for each output combination, with +$c_j\in R$. Thus the common frame commutes with the pointwise gate, and +the invariant continues to the sinks. The implemented operator is therefore +\begin{equation} + D_{\rm out}\,\mathsf S_\Omega\,D_{\rm in}^{-1}. + \label{eq:common-frame-identity} +\end{equation} +In particular, if the scalar network is a signed role permutation that +sends input role $w$ to output role $\rho(w)$ with scalar sign +$\varepsilon_w$, that route applies +$\varepsilon_wD_{\mathrm{sink}(\rho(w))} +D_{\mathrm{source}(w)}^{-1}$ to its input array. All roles, including +the auxiliary roles, enter this identity. Once the scalar routing is fixed, +the endpoint frames determine the array operator on each route; the +intermediate frames can then be chosen to make each edge change inexpensive. + +Figure~\ref{fig:frame-compatibility} summarizes this invariant. +\begin{figure}[ht] +\centering +\input{figures/proof-map.tex} +\caption{An edge changes the representation of one role's logical array +$g_w$. At the next gate $G$, all $t$ input arrays have the common frame +$D_v$, so the pointwise linear gate commutes with that frame. The same +$D_v$ acts on each output component.} +\label{fig:frame-compatibility} +\end{figure} + +\subsection{Subspaces attached to the gates} + +The scalar network already has the required signed exchange. We now +choose its intermediate labels to make the changes of frame inexpensive. +A label is a nondegenerate subspace of a fixed bilinear space. On every +edge one label will contain the other. For such an edge, the +\emph{orthogonal residual} is the orthogonal complement of the smaller label inside +the larger one; its dimension is the absolute change in label dimension. +The saving will come from keeping the total dimension lost on decreasing +edges small relative to $N$. + +For the bit network, let $F=\mathbb Q^h$ with bilinear form +\[ + \langle x,y\rangle=x^{\mathsf T}(I-J/9)y, +\] +where $J$ is the all-one matrix. This form has eigenvalues $1$ and +$1-h/9=-91/9$, so it is nondegenerate. For a triple $T$ let $t_T$ be +its indicator vector. Then +\[ + \langle t_S,t_T\rangle=|S\cap T|-1, + \qquad \langle t_T,t_T\rangle=2. +\] +For the complex network, take instead $F=\mathbb F_2^h$ with the +ordinary dot product; here $t_T\cdot t_T=1$. +Thus every triple line is nondegenerate, and neighboring triple lines +are orthogonal, in the label field belonging to either construction. +The scalar domain need not equal the label field. +These degree-one intersection formulas specialize the construction +described by Alon~\cite[Section~3, remark after Theorem~1.1]{Alon1998} +to the prime $2$, with the ground-set size changed to $h=100$. + +The ambient label space is $\mathcal F=F^{\otimes3}$ with its tensor +bilinear form. It has dimension $m$ and is nondegenerate. Write +\[ + u_a=t_{a_1}\otimes t_{a_2}\otimes t_{a_3},\qquad U_a=\langle u_a\rangle. +\] +The prescribed terminal labels are +\[ +\begin{array}{c|cc} +\text{role}&\text{source label}&\text{sink label}\\ \hline +X_a&U_a&\mathcal F\\ +Y_a&0&U_a^\perp\\ +\text{each scratch role}&0&\mathcal F. +\end{array} +\] +Write $W$ for the wire count in the construction under consideration. +The source dimensions sum to $N$ and the sink dimensions to $Wm-N$. +Thus the signed dimension changes will sum to $Wm-2N$, because the +contributions at gates cancel. If decreasing edges lose a total +dimension $L$, the sum of absolute changes is $Wm-2N+2L$. +We will obtain $L1$. +The same argument gives a unit vector in $Q^\perp$ when it is nonzero. +A triple complement, and the complement of two neighboring triple +lines, contain coordinate units outside supports of sizes at most +three and six, respectively. Full tensor spaces contain coordinate +units as well. In each nonzero tensor summand, tensoring these chosen +norm-one vectors gives a norm-one vector; placing it in that orthogonal +summand gives one in the whole residual. Each residual is nondegenerate +by the decompositions above. Thus every nonzero residual is nonalternating. + +For completeness, every nondegenerate nonalternating binary symmetric +space has an orthonormal basis. Split off unit lines until the +remaining space is alternating. A nonzero nondegenerate alternating +space splits into planes with bases $a,b$ satisfying +$a\cdot a=b\cdot b=0$, $a\cdot b=1$; this follows by choosing a +nonzero $a$, choosing $b$ with $a\cdot b=1$, and taking the orthogonal +complement of their nondegenerate plane. Retain one unit vector $w$ +from the lines already split off. A plane orthogonal to $w$ can be +absorbed into that line: the three vectors +\[ + w+a,\qquad w+b,\qquad w+a+b +\] +are independent, pairwise orthogonal, and have norm one. +Use one of these new unit vectors in place of $w$ for the next plane; +the remaining planes are still orthogonal to it. Repeating this +operation absorbs every alternating plane. +\end{proof} + +The loss ratios have the exact values +\[ + \frac{L_{\rm b}}{N}=\frac{100}{539},\qquad + \frac{L_{\rm c}}{N}=\frac{101}{539}. +\] +In particular, both are smaller than $1/2$. We now turn the dimension +count into the two interfaces needed later. + +\subsection{The rational matrix interface} + +For a nondegenerate rational subspace $U\subset\mathcal F$, write +$P_U$ for the projection onto $U$ along $U^\perp$. Assign $P_U$ to +each gate or sink with label $U$. Assign the source matrix $-P_{U_a}$ +to $X_a$ and zero to every other source. +These are fixed rational $m\times m$ matrices; write $M_v$ for the matrix +at vertex $v$. Define +$\rho(X_a)=Y_a$, $\rho(Y_a)=X_a$, and let $\rho$ fix every auxiliary +wire. + +In the tape application, two address chunks are written as vectors $H,D$ +of $m$ fields. For a matrix $M$, the frame $\Phi_M$ moves the array entry +at $(H,D)$ to $(H+MD,D)$, leaving the other address fields unchanged. +The fields use a radix coprime to the fixed denominators, and addition is +modulo their common range. Hence $\Phi_M$ is an invertible +$\mathbb F_2$-linear permutation of array entries, and +$\Phi_{M'}\Phi_M=\Phi_{M'+M}$. Using $D_v=\Phi_{M_v}$ +in \eqref{eq:common-frame-identity}, the endpoint matrix difference on each +routed role is exactly the shear applied to that role. The following identity +makes it the same shear $H\gets H+D$ on every role; +Section~\ref{sec:tape-interchange} turns that shear into a field interchange +and implements an edge change with one smaller interchange per unit of its +rational rank. + +\begin{proposition}\label{prop:bit-motif-interface} +The bit network has $W_{\rm b}$ wires, uses only pointwise XOR gates, +and sends its input vector to the permutation $\rho$ of that vector. +Its rational matrices are common to all incidences of a gate and obey +\[ + M_{\mathrm{sink}(\rho(w))}-M_{\mathrm{source}(w)}=I_m + \quad\text{for every input role }w. +\] +The sum of the rational ranks of all edge differences is +\begin{align} + s_{\rm b} + &=\sum_{e}\operatorname{rank}_{\mathbb Q} + (M_{\mathrm{head}(e)}-M_{\mathrm{tail}(e)})\\ + &=W_{\rm b}m-N+2L_{\rm b} + =1771765690887858612870000000$. + +For an input $X_a$ the endpoint difference is +$P_{U_a^\perp}-(-P_{U_a})=I_m$. Every other role has zero source +matrix and identity sink matrix. This proves the interface. +\end{proof} + +\subsection{The binary phase interface} + +Use the complex scalar network and binary labels. For a binary vector +$x$, let $\operatorname{wt}(x)$ denote its integer Hamming weight, and +write $[b]\in\{0,1\}$ for the integer representative of $b\in\mathbb F_2$. +For a label $U$, let +\[ + q_U(x)=\operatorname{wt}(P_Ux)\pmod4. +\] +The projection here is over $\mathbb F_2$. +Let +\[ + H=\frac1{\sqrt2}\begin{pmatrix}1&1\\1&-1\end{pmatrix},\quad + C=H\begin{pmatrix}1&0\\0&i\end{pmatrix}H + =aI+bX,\qquad a=\frac{1+i}{2},\quad b=\frac{1-i}{2}, +\] +where $X$ interchanges the two coordinates. On functions of +$x\in\mathbb F_2^m$ define +\[ + \mathcal C_U=H^{\otimes m}\operatorname{diag}_x(i^{q_U(x)})H^{\otimes m}. +\] +The use of $H$ in this definition is an identity of matrices. Each entry +of $\mathcal C_U$ and its inverse is a Gaussian integer divided by $2^m$, +so both preserve arrays over $\mathbb Z[i,1/2]$. The kernels implemented +below have Gaussian dyadic coefficients. + +To apply the scalar network to these functions, replace the scalar on +each wire $w$ by an array +$f_w:\mathbb F_2^m\to\mathbb Z[i,1/2]$. At each address, a gate +applies its scalar linear map to the values on the wires it touches. +The frame in \eqref{eq:common-frame-identity} is $D_v=\mathcal C_U$ at a +vertex with label $U$. On an edge from label $U$ to label $V$, apply +$\mathcal C_V\mathcal C_U^{-1}$ to that wire's array. +All frames are diagonalized by the same matrix $H^{\otimes m}$. +For an integer $k\ge1$, an address for $k$ columns is +$(x^{(1)},\ldots,x^{(k)})\in(\mathbb F_2^m)^k$; every frame and edge +operator is then the tensor product of its one-column version over +these $k$ coordinates. Each scalar gate is still applied once at each +joint address, to the vector of values on the roles it touches. + +\begin{proposition}\label{prop:complex-motif-interface} +For each edge of the complex network, write $U,V$ for its tail and +head labels. Its phase-frame difference +$\mathcal C_V\mathcal C_U^{-1}$ is a product of one translation +kernel $aI+bX_v$, or its inverse, per vector in an orthonormal basis +of the edge residual. Here $(X_vf)(x)=f(x+v)$. +The sum of these basis lengths is +\[ + s_{\rm c}=W_{\rm c}m-2N+2L_{\rm c} + =18738072446366712673080000000$. + +For an edge $e$, write $\mathcal B_e$ for its residual basis and +$K_{e,v}$ for the forward or inverse translation kernel associated +with $v\in\mathcal B_e$. Taking tensor products preserves their +product, so on $k$ columns +\[ + \bigl(\mathcal C_V\mathcal C_U^{-1}\bigr)^{\otimes k} + =\prod_{v\in\mathcal B_e}K_{e,v}^{\otimes k}. +\] +Thus each residual vector contributes one factor acting on all $k$ +columns, and there are $s_{\rm c}$ such factors over the network. + +Let $\rho$ denote the underlying permutation of the complex roles: it +exchanges $X_a,Y_a$ and fixes each scratch role. +By Lemma~\ref{lem:scalar-motifs}, the pointwise scalar network sends an input array at +$X_a$ to $Y_a$ with sign $+1$, an input at $Y_a$ to $X_a$ with sign +$-1$, and each scratch input to its own output with sign $+1$. +Applying \eqref{eq:common-frame-identity} with $D_v=\mathcal C_{U_v}$, +where $U_v$ is the label at vertex $v$, shows that an input role $w$ reaches +output role $\rho(w)$ with that sign and with operator +$\mathcal C_{U_{\mathrm{sink}(\rho(w))}} + \mathcal C_{U_{\mathrm{source}(w)}}^{-1}$. +For $k$ columns, use $D_v=\mathcal C_{U_v}^{\otimes k}$ on the joint +address set in the same identity. The route operator is then the $k$th +tensor power of the displayed address operator, multiplied by its scalar +route sign once. +The zero label has frame $I$, while the full label has frame +$C^{\otimes m}$ because $q_{\mathcal F}(x)=\operatorname{wt}(x)$. +Every pair except $X_a\to Y_a$ has these zero and full labels. +For the remaining pair, write $u=u_a$. Its binary norm is one and +its weight is $3^3=27$. Orthogonal weight additivity yields +\begin{align*} + q_{U_a^\perp}(x)-q_{U_a}(x) + &=\operatorname{wt}(x)-2\operatorname{wt}(u)[u\cdot x]\\ + &=\operatorname{wt}(x)+2[u\cdot x]\pmod4. +\end{align*} +Since $2[u\cdot x]\equiv2\sum_{j\in\operatorname{supp}(u)}x_j +\pmod4$, the operator on $X_a\to Y_a$ is the tensor of $C^{-1}$ on the +27 coordinates of $\operatorname{supp}(u)$ and $C$ elsewhere. +Put $Z=\operatorname{diag}(1,-1)$. Direct multiplication gives +\[ + C=iZC^{-1}Z,\qquad C^{-1}=-iZCZ. +\] +For $k$ columns, let $Z_{a,k}$ be the tensor product of $Z$ on +those 27 coordinates in every column and the identity elsewhere. +Apply $Z_{a,k}$ before the network at $X_a$, and apply +$i^{27k}Z_{a,k}$ after the network at $Y_a$; the latter scalar is +applied once to the whole role. There are $27k$ inverse factors, so +the identity $C=iZC^{-1}Z$ turns each of them into $C$. The operator +on this pair is therefore $C^{\otimes mk}$ as well. +Only the physical $X$ outputs still carry the minus sign of the +scalar exchange. Negate those outputs and send output role $\rho(w)$ +back to role $w$. Every role, including every scratch role, now has +the required forward tensor product. +\end{proof} + +\subsection{Explicit rational bounds for the two recurrences} + +The relative rank deficits are +\[ + \eta_{\rm b}=\frac{W_{\rm b}m-s_{\rm b}}{W_{\rm b}m} + =\frac{339}{22587335000000},\qquad + \eta_{\rm c}=\frac{W_{\rm c}m-s_{\rm c}}{W_{\rm c}m} + =\frac{73}{19906842167500}. +\] +For both recurrences we may use the fixed rational exponent +\begin{equation} + \tau=\sigma=1-2^{-50}. + \label{eq:explicit-motif-exponents} +\end{equation} +Both exact deficits displayed above are greater than $20\cdot2^{-50}$. +Since $m<2^{20}$ and $\log 2<1$, we have $\log m<20$, whence +\[ + m^{1-2^{-50}} + =m\exp(-2^{-50}\log m) + >m(1-20\cdot2^{-50})>m(1-\eta) +\] +for either $\eta=\eta_{\rm b}$ or $\eta=\eta_{\rm c}$. +Consequently +\[ + \frac{s_{\rm b}}{W_{\rm b}}>p&1:x^=b[p] + if x: + p=x.bit_length()-1 + for q in b: + if b[q]>>p&1:b[q]^=x + b[p]=x + return tuple(b[p] for p in sorted(b,reverse=True)) +def dual(e): + e=list(e) + if e[0]=='add':e[1],e[2]=e[2],e[1];e[3]*=-1 + else:e[2],e[3]=e[3],e[2] + return e +def scalar(e,back): + e=dual(e) if back else list(e) + if e[0]=='add':return ['add',['L',e[1]],['L',e[2]],e[3],e[4]] + return ['scale',['L',e[1]],e[2],e[3]] +def primitive_bound(e): + if e[0] in ('clear','copy'):return 1 + q=Q(e[3],e[4]) if e[0]=='add' else Q(e[2],e[3]) + a,b=abs(q.numerator),q.denominator + assert b&(b-1)==0 + if e[0]=='scale': + assert a&(a-1)==0 + return abs(a.bit_length()-b.bit_length())+int(q<0) + # Exact binary Horner multiplication on a cleared private stream, repeated + # halving, signed accumulation into the target, then clear the private stream. + return 3+(a.bit_length()-1)+a.bit_count()+(b.bit_length()-1) + +def emit(back): + out=[];cur=c['start'].copy() + def event(e):out.append(e) + def scal(e,f):event(['scalar',e,f]) + event(['phase','zero_frame_precondition']) + for e in c['precondition']+c['compensation']: + regs=[e[1]]+([e[2]] if e[0]=='add' else []) + assert all(c['start'][r]==0 for r in regs) + scal(scalar(e,back),0) + event(['phase','entry_adapters']) + # GK: a helper that starts at a nonzero entrance frame has NO entry adapter; its paid wrapper R_E^-1 (Lemma A) precedes every gate + # that touches it and L_E^-1 follows the full-frame cleanup. Words without entrances emit PR #433's events. + entering=[r for r,f in enumerate(c['start']) if r>=2*v and f!=0] + hpe={r for r in range(2*v,n) if c['final'][r]!=1} # HPE: hyperplane-ended helpers (terminal frame != FULL) + # COLD-HPE: a cold helper (start frame 0) ending at U also carries the paid wrappers R_{0,U}^-1 / L_{0,U}^-1 (the + # E = bottom instance of #593); without cold ends wrapped == entering and the event stream is the inherited one. + wrapped=sorted(set(entering)|hpe) + for r,f in enumerate(c['start']): + if r in wrapped:event(['residual_adapter','pre',r,f]+([c['final'][r]] if c['final'][r]!=1 else [])) # HPE: R_{E,U}^-1 names U + else:event(['adapter','old_to_new',r,f]) + def climb(r,f,part): + old=cur[r] + if old==f:return + assert basis(frames[old]+frames[f])==tuple(frames[f]) + rank=len(frames[f])-len(frames[old]);assert rank>0 + event(['climb',part,r,old,f,rank]);cur[r]=f + # HPE: 'cleanup_tail' = early cleanup gates at their own frames; emitted only when the word has them, so a word + # without hyperplane-ended helpers yields exactly the inherited event stream. + for part in ('A','centers','B')+(('cleanup_tail',) if c.get('tail') else ())+('final',): + event(['phase',part]) + if part in ('A','B','cleanup_tail'): + for e in (c['tail'] if part=='cleanup_tail' else c[part]): + regs=[e[1]]+([e[2]] if e[0]=='add' else []) + for r in regs:climb(r,e[-1],part) + scal(scalar(e,back),e[-1]) + elif part=='centers': + # GK: targets sit at their nonzero-frame-compensation level (0 at the defaults); a centre copy descends + # cf -> served levels (descending chain) -> lowest served level and scatters into each target at its level + lv=lambda r:c.get('target_levels',{}).get(str(r-v),0) + assert all(cur[r]==lv(r) for r in range(v,2*v)) + for k,r in enumerate(c['centers']): + cf=c['center_frames'][k];assert cur[r]==cf + terms=[e for e in c['cut'] if e[2]==r] + path=[cf]+sorted({lv(e[1]) for e in terms}-{cf},key=lambda x:-len(frames[x])) + C=['C',k] + if not back: + scal(['clear',C],cf);scal(['copy',C,['L',r]],cf) + for a in range(len(path)): + if a>0:event(['center',k,path[a-1],path[a],len(frames[path[a-1]])-len(frames[path[a]])]) + for e in terms: + if lv(e[1])==path[a]:scal(['add',['L',e[1]],C,e[3],e[4]],path[a]) + scal(['clear',C],path[-1]) + else: + scal(['clear',C],path[-1]) + for a in range(len(path)-1,-1,-1): + for e in terms: + if lv(e[1])==path[a]:scal(['add',C,['L',e[1]],e[3],e[4]],path[a]) + if a>0:event(['center',k,path[a],path[a-1],len(frames[path[a-1]])-len(frames[path[a]])]) + scal(['add',['L',r],C,-1,1],cf);scal(['clear',C],cf) + else: + for r,f in enumerate(c['final']):climb(r,f,part) + event(['phase','exit_adapters']) + for r,f in enumerate(c['final']): + if r not in hpe:event(['adapter','new_to_old',r,f]) # HPE: no old-convention exit for a helper that ends at U; its post wrapper is L_{E,U}^-1 + event(['phase','full_frame_cleanup']) + for e in c['cleanup']: + regs=[e[1]]+([e[2]] if e[0]=='add' else []) + assert all(c['final'][r]==1 for r in regs) + scal(scalar(e,back),1) + for r in wrapped:event(['residual_adapter','post',r,c['start'][r]]+([c['final'][r]] if r in hpe else [])) # HPE: 5th field = terminal frame U # GK: L_E^-1 after the full-frame cleanup + event(['phase','done']) + return out + +def check_local(events,back): + # Literal scalar replay of the emitted stream, including center lifetimes. + state={('L',r):{r:Q(1)} for r in range(n)};live=[];paid=Counter();prims=0;macros=0 + for e in events: + if e[0]=='climb':assert not live;paid[e[5]]+=1 + elif e[0]=='center':assert live==[e[1]];paid[e[4]]+=1 + elif e[0]=='scalar': + op=e[1];tag=op[0];t=tuple(op[1]);macros+=1;prims+=2*primitive_bound(op) + if tag=='clear': + state[t]={} + if t[0]=='C' and t[1] in live:live.remove(t[1]) + elif tag=='copy':state[t]=dict(state.get(tuple(op[2]),{}));live.append(t[1]) + elif tag=='scale':state[t]={j:Q(op[2],op[3])*x for j,x in state[t].items()} + else: + s=tuple(op[2]);q=Q(op[3],op[4]);row=state.setdefault(t,{}) + if t[0]=='C' and t[1] not in live:live.append(t[1]) + for j,x in list(state.get(s,{}).items()): + z=row.get(j,Q(0))+q*x + if z:row[j]=z + else:row.pop(j,None) + assert not live and all(not row for r,row in state.items() if r[0]=='C') + for r in range(n): + expected={r:Q(1)} + if back and r>i)&1==0);a=q^(1<>i&1 else 0)for i in order]+[1<2*max(paid)**2 + return dict(profile=dict(sorted(paid.items())),mass=mass,hosted=HOSTED,entering=entering,cross_replica=cross,sigma_digest=digest.hexdigest(),sigmas=sigmas,idle_remainders=len(wanted),busy_family_checks=len(roles),invocations=72) + +r=audit(ct);raw=gzip.decompress((OUT/'GLOBAL-TEMPLATE.json.gz').read_bytes());assert hashlib.sha256(raw).hexdigest()==summary['template_sha256'];assert r['profile']=={int(k):v for k,v in summary['global_profile'].items()};assert r['sigmas']==read(OUT/'ACTUAL-SIGMAS.json.gz');assert r['sigma_digest']==summary['sigma_stream_sha256'] +assert all(hashlib.sha256((BASE/name).read_bytes()).hexdigest()==value for name,value in summary['source_artifacts'].items()) +controls=[] +def reject(name,mut): + if '--mutation-controls' not in sys.argv[4:]:return + q=copy.deepcopy(ct);mut(q) + try:audit(q) + except(AssertionError,KeyError,IndexError,ValueError,TypeError):controls.append(name) + else:raise AssertionError('ACCEPTED '+name) +enter=lambda q:next(o for c in q['calls']for o in c['owners'][(2*V):]if o[1][0]==4) +reject('alias two whole owners',lambda q:q['calls'][0]['owners'].__setitem__((2*V+1),q['calls'][0]['owners'][(2*V)])) +reject('helper on active data family',lambda q:q['calls'][0]['owners'][(2*V)].__setitem__(0,q['calls'][0]['owners'][0][0])) +reject('owner in private namespace',lambda q:q['calls'][0]['owners'][(2*V)].__setitem__(0,DATA)) +reject('wrong residual width',lambda q:enter(q)[1].__setitem__(3,enter(q)[1][3]-1)) +reject('wrong spectator coordinate',lambda q:enter(q)[1][4].__setitem__(0,72)) +reject('omit idle remainder',lambda q:q['idle_children'].pop()) +reject('understate physical reserve',lambda q:q.__setitem__('physical',PHYSICAL-1)) +# Single-provider dispatch still has all source/program/width binding controls. +if len(provider_ids)==1: + P=provider_ids[0] + at_p=lambda q:next(c for c in q['calls']if c['provider_id']==P) + narrow=next(h for h in range(R)if providers[P]['widths'][h]<9) + reject(P+': wrong provider at its invocation',lambda q:at_p(q).__setitem__('provider_id','__unregistered__')) + reject(P+': stale per-call local program hash',lambda q:at_p(q).__setitem__('local_program_sha256','0'*64)) + reject(P+': stale serialized provider program',lambda q:q['local_providers'][P]['local_programs']['forward'].pop()) + reject(P+': unbound residual adapter hash',lambda q:q['local_providers'][P].__setitem__('residual_adapter_sha256','0'*64)) + reject(P+': wrong provider width registry',lambda q:q['local_providers'][P]['widths'].__setitem__(narrow,providers[P]['widths'][narrow]-1)) + reject(P+': wrong per-call residual width',lambda q:at_p(q)['owners'][2*V+narrow][1].__setitem__(3,at_p(q)['owners'][2*V+narrow][1][3]-1)) + reject(P+': wrong sweep provider',lambda q:next(e for e in q['execution_schedule']if e['kind']=='local_cover_sweep').__setitem__('provider_id','__unregistered__')) + reject(P+': entering helper width silently restored to nine',lambda q:q['local_providers'][P]['widths'].__setitem__(narrow,9)) +else: + # Per-provider substitution controls: every provider is swapped against a partner provider. + for P in provider_ids: + Qp=partner(P) + at_p=lambda q,P=P:next(c for c in q['calls']if c['provider_id']==P) + diff=[h for h in range(R)if providers[P]['widths'][h]!=providers[Qp]['widths'][h]] + narrow=next(h for h in range(R)if providers[P]['widths'][h]<9) + reject(P+': wrong provider at its invocation',lambda q,P=P,Qp=Qp,at_p=at_p:at_p(q).__setitem__('provider_id',Qp)) + reject(P+': stale per-call local program hash',lambda q,Qp=Qp,at_p=at_p:at_p(q).__setitem__('local_program_sha256',registry[Qp]['local_program_checks'][at_p(q)['orientation']]['sha256'])) + reject(P+': stale serialized provider program',lambda q,P=P,Qp=Qp:q['local_providers'][P].__setitem__('local_programs',registry[Qp]['local_programs'])) + reject(P+': unbound residual adapter hash',lambda q,P=P:q['local_providers'][P].__setitem__('residual_adapter_sha256','0'*64)) + if diff:reject(P+': partner width in provider width registry',lambda q,P=P,Qp=Qp,h=diff[0]:q['local_providers'][P]['widths'].__setitem__(h,providers[Qp]['widths'][h])) + reject(P+': wrong per-call residual width',lambda q,at_p=at_p,h=narrow:at_p(q)['owners'][2*V+h][1].__setitem__(3,at_p(q)['owners'][2*V+h][1][3]-1)) + reject(P+': wrong sweep provider',lambda q,P=P,Qp=Qp:next(e for e in q['execution_schedule']if e['kind']=='local_cover_sweep'and DISPATCH[e['stage'],e['replica']]==P).__setitem__('provider_id',Qp)) + reject(P+': entering helper width silently restored to nine',lambda q,P=P,h=narrow:q['local_providers'][P]['widths'].__setitem__(h,9)) + +report=dict(status='PASS_INDEPENDENT_ASYNC_WHOLE_OWNER_CONTROLLER_PHASES_AND_SPECTATORS',template_sha256=summary['template_sha256'],complex_template_sha256=summary['template_sha256'],complex_live=DATA,complex_profile=r['profile'],complex_hosted_residuals=HOSTED,physical=PHYSICAL,rank_mass=r['mass'],deficit=2560,entering_helper_roles=r['entering'],cross_replica_helper_roles=r['cross_replica'],one_owner_per_complete_invocation=True,helper_busy_family_window_checks=r['busy_family_checks'],complete_invocations=r['invocations'],actual_orthogonal_73column_maps=len(r['sigmas']),actual_sigma_stream_sha256=r['sigma_digest'],all_actual_residual_and_spectator_charts=True,idle_remainders=r['idle_remainders'],mutations_rejected=controls,mutation_controls_run='--mutation-controls' in sys.argv[4:],provider_phase_semantic_sha256=phase_semantic_hashes,provider_artifact_semantic_sha256=artifact_semantic_hashes,widths_by_provider={pid:dict(sorted(Counter(providers[pid]['widths']).items()))for pid in provider_ids},provider_counts=dict(Counter(c['provider_id']for c in ct['calls'])),all_provider_program_phase_and_wrapper_bindings=True,scope='Independent exact asynchronous chronology, per-replica phase projection, owner/chart/paid-profile audit. Uses per-invocation local providers bound by exact scalar, phase and residual-wrapper receipts; all-size compilation and complete coefficient invoice are separate inherited obligations.') +REPORT.parent.mkdir(parents=True,exist_ok=True) +REPORT.write_text(json.dumps(report,indent=2)+'\n');print(json.dumps(report,indent=2)) + +owners=dict(status='PASS_INDEPENDENT_ASYNC_OWNERS_AND_PROFILE',template_sha256=summary['template_sha256'],paid_profile=r['profile'],live=DATA,physical=PHYSICAL,rank_mass=r['mass'],deficit=2560,hosted_residuals=HOSTED,banked_residuals=0,all_live_owners_per_call_distinct=True,owners_per_call=N,actual_helper_owner_charts=HOSTED,actual_73column_sigmas=len(r['sigmas']),cross_replica_helper_roles=r['cross_replica'],explicit_idle_remainder_children=r['idle_remainders'],source_idle_children_charged=sum(x['replicas']for x in parent['idle_children']),source_artifacts=summary['source_artifacts'],provider_phase_semantic_sha256=phase_semantic_hashes,provider_artifact_semantic_sha256=artifact_semantic_hashes,controller_audit_sha256=hashlib.sha256(REPORT.read_bytes()).hexdigest()) +(REPORT.parent/'OWNERS-AND-PROFILE.json').write_text(json.dumps(owners,indent=2)+'\n') + +# Literal residual frames are a compact export of the already checked offsets, +# not another global replay. Every row names its actual inherited axes. +frames=[] +for z in ct['idle_children']: + axes=list(map(int,ph['recipes'][z['port']]['idle_children'][z['child']]['orthogonal_axes'])) + tail=axes[z['pending_offset']:] + assert len(tail)==z['rank'] + frames.append(dict(z,orthogonal_axes=tail)) +frame_raw=json.dumps(frames,sort_keys=True,separators=(',',':')).encode() +portable=bytearray(gzip.compress(frame_raw,mtime=0));portable[9]=255 +(OUT/'IDLE-REMAINDER-FRAMES.json.gz').write_bytes(bytes(portable)) +frame_receipt=dict(status='PASS_LITERAL_IDLE_REMAINDER_FRAMES',template_sha256=summary['template_sha256'], + uncompressed_frames_sha256=hashlib.sha256(frame_raw).hexdigest(),children=len(frames), + rank_profile=dict(sorted(Counter(z['rank']for z in frames).items())), + source_data_phase_sha256=hashlib.sha256((BASE/'work/complex-nine-native/DATA-PHASES.json').read_bytes()).hexdigest(), + scope='Actual orthogonal axes after the independently checked whole-owner prefix in each inherited pending child.') +(REPORT.parent/'IDLE-REMAINDER-FRAMES.json').write_text(json.dumps(frame_receipt,indent=2)+'\n') diff --git a/research/helper-minimality/inputs/pr799/code/emit_allcold.py b/research/helper-minimality/inputs/pr799/code/emit_allcold.py new file mode 100644 index 0000000000..8e147f80a6 --- /dev/null +++ b/research/helper-minimality/inputs/pr799/code/emit_allcold.py @@ -0,0 +1,150 @@ +"""Two-provider width-seven whole-owner derivative, adapted with OpenAI Codex assistance. +Based on PR514 and its credited PR484/507 lineage. +CLI: --base VERIFIED_VARIANT --owners ASYNC-OWNERS.json.gz --plan ASYNC-PLAN.json --out OUT +No optimizer or unpublished word builder runs. The frozen map explicitly names +one whole helper per family per complete invocation, plus borrowed spectators. +""" +import sys,json,gzip,hashlib,copy,argparse +from pathlib import Path +from collections import Counter,defaultdict +import sys as _s,pathlib as _p;_s.path.insert(0,str(_p.Path(__file__).resolve().parent)) +from witness import * +parser=argparse.ArgumentParser(description=__doc__) +parser.add_argument('--base',type=Path,required=True);parser.add_argument('--owners',type=Path,required=True);parser.add_argument('--plan',type=Path,required=True);parser.add_argument('--out',type=Path,required=True) +a=parser.parse_args();BASE,MAP,PLAN,OUT=(p.resolve()for p in(a.base,a.owners,a.plan,a.out));assert not OUT.exists();OUT.mkdir(parents=True) +class OH: + @staticmethod + def idle_basis(q): + z=next(i for i in range(9)if not(q>>i)&1);u=q^(1<>i&1 else 0)for i in order]+[1<0 and all(x['R']==R for x in registry.values()),'providers disagree on helper count R' + assert replay['status']=='PASS_INDEPENDENT_LOCAL_SCALAR_FRAME_AND_WRAPPER_REPLAY' + assert replay['canonical_word_sha256']==sha(directory/'CANONICAL-WORD.json.gz')and replay['local_programs_sha256']==sha(directory/'LOCAL-PROGRAMS.json.gz') + widths=[len(pc['frames'][pc['final'][2*V+h]])-len(pc['frames'][pc['start'][2*V+h]])for h in range(R)] # HPE: residual width |final|-|start| + assert widths==plan['provider_registry'][provider_id]['widths'] + for name in provider_files: + value=sha(directory/name);assert value==plan['provider_registry'][provider_id]['artifact_sha256'][name] + source_artifacts[f'providers/{provider_id}/{name}']=value + registry[provider_id]=dict(local_programs=programs,canonical_word_sha256=sha(directory/'CANONICAL-WORD.json.gz'),local_programs_sha256=sha(directory/'LOCAL-PROGRAMS.json.gz'),local_program_checks=checks,exact_local_clifford_recipe_sha256=sha(directory/'CLIFFORD-RECIPES.json'),residual_adapter_sha256=sha(directory/'RESIDUAL-ADAPTERS.json'),v=V,h=9,R=R,ports=pc['ports'],centers=pc['centers'],widths=widths) +assert len(roles)==72*R # one whole-owner role per (call, provider helper) +selected={(c['stage'],c['replica']):c for c in plan['provider_calls']} +assert len(selected)==72 and set(selected)==set(call_order) +assert Counter(c['provider']for c in selected.values())==COUNTS +per_call_widths={(c['stage'],c['replica']):c['widths']for c in plan['per_call_widths']} +for key,c in selected.items(): + assert c['time']==at[key] and c['provider']in registry + assert per_call_widths[key]==registry[c['provider']]['widths'] +for key in('local_programs','exact_local_clifford_recipe_sha256','residual_adapter_sha256'):t.pop(key) +t['local_providers']=registry +rank={z['child']:z['rank']for z in parent['idle_children']};side={};pairs={} +for e in parent['execution_schedule']: + if e['kind']=='idle_cover_sweep': + for sd,ch in enumerate(e['child_indices']):side[ch]=sd;pairs[ch]=e['pair'] +bycall=defaultdict(dict);used=defaultdict(set);sigmas={};digest=hashlib.sha256();entering=0 +for z in roles: + s,rep,h=z['stage'],z['replica'],z['helper'];i,cp,off,w,f=z['child'],z['copy'],z['offset'],z['width'],z['family'];orp,port=divmod(cp,V) + assert 0<=s<9 and 0<=rep=0 and off+w<=rank[i] + assert z['time']==at[s,rep] and z['time'] in plan['windows'][f'{orp},{i}'][1] + B=OH.idle_basis(canon['ports'][port]);pending=list(map(int,ph['recipes'][port]['idle_children'][i]['orthogonal_axes']));assert len(pending)==rank[i] + occ=[B.index(v)for v in pending[off:off+w]];sp=OH.spectators(canon['ports'][port],pending,off,w)if w<9 else[] + order=occ+sp+[j for j in range(M)if j not in occ and j not in sp];assert len(order)==len(set(order))==M + sigma=[B[j]for j in order];sigmahash=hashlib.sha256(json.dumps(sigma,separators=(',',':')).encode()).hexdigest();sigmas[sigmahash]=sigma + route=[4,i,off,w,sp]if w<9 else[3,i,off];bycall[s,rep][h]=[f,route];entering+=w<9 + cells=set(range(off,off+w));assert not used[i,orp,port]&cells;used[i,orp,port]|=cells + digest.update(json.dumps([s,rep,h,f,sigmahash],separators=(',',':')).encode()+b'\n') +for c in t['calls']: + k=(c['stage'],c['replica']);assert set(bycall[k])==set(range(R)) + c['owners']=c['owners'][:(2*V)]+[bycall[k][h]for h in range(R)];assert len({f for f,r in c['owners']})==2*V+R and all(f2*max(paid)**2 + +assert all(c['local_program_sha256']==registry[c['provider_id']]['local_program_checks'][c['orientation']]['sha256']for c in t['calls']) +t['provider_dispatch']='For each indivisible local_cover_sweep, execute local_providers[call.provider_id].local_programs[call.orientation] with that provider residual adapters and Clifford recipes. The sweep provider_id must equal its call provider_id.' +raw=json.dumps(t,sort_keys=True,separators=(',',':')).encode();(OUT/'GLOBAL-TEMPLATE.json.gz').write_bytes(gzip.compress(raw,mtime=0)) +res=dict(status='EMITTED_MIXED_PROVIDER_ASYNCHRONOUS_WHOLE_OWNER_COMPLEX_TEMPLATE', + template_sha256=hashlib.sha256(raw).hexdigest(), + parent_template_sha256=hashlib.sha256(gzip.decompress((BASE/'split-centres/GLOBAL-TEMPLATE.json.gz').read_bytes())).hexdigest(), + live=DATA,physical=physical,global_profile=dict(sorted(paid.items())), + rank_mass=sum(r*n for r,n in paid.items()),deficit=2560,maxchild=max(paid), + hosted_residuals=len(roles),banks_per_stage=[0]*9,entering_helper_roles=entering, + unique_actual_73column_sigmas=len(sigmas),sigma_stream_sha256=digest.hexdigest(), + cross_replica_helper_roles=sum(z['replica']!=z['owner_replica']for z in roles), + asynchronous_order_sha256=hashlib.sha256(json.dumps(call_order,separators=(',',':')).encode()).hexdigest(), + source_artifacts=source_artifacts,provider_counts=dict(Counter(c['provider_id']for c in t['calls'])), + scope='Two actual verified plain/width-seven providers dispatched per complete invocation; independent controller/spectator/normalization and complete finite invoice admission required.') +(OUT/'HOSTED.json').write_text(json.dumps(res,indent=2)+'\n');(OUT/'ACTUAL-SIGMAS.json.gz').write_bytes(gzip.compress(json.dumps(sigmas,separators=(',',':')).encode(),mtime=0));print(json.dumps(res,indent=2)) diff --git a/research/helper-minimality/inputs/pr799/construction/construct_gauge_xcentre.py b/research/helper-minimality/inputs/pr799/construction/construct_gauge_xcentre.py new file mode 100644 index 0000000000..1010d86746 --- /dev/null +++ b/research/helper-minimality/inputs/pr799/construction/construct_gauge_xcentre.py @@ -0,0 +1,381 @@ +# Round20 early-coordinate-center / own-Y variant, prepared for icekylinx +# with OpenAI Codex assistance. Apache-2.0. Scalar elementary-operation +# helpers below are retained from the attributed PR514 construct_partial.py. +# Adapted by OpenAI Codex for isolated structural research. +# Modified from PR425 by icekylinx with Codex assistance. +"""Full discovery word for Hamming packets with borrowed X and Y registers. + +This changes the scalar architecture. It is not accepted by the old restricted +gx interface: source bases may change until full-frame cleanup, and targets use +an explicitly inverted output basis. No supplier admission is asserted. +""" +import copy,gzip,json,math,time +import itertools as it +from collections import Counter,defaultdict +from fractions import Fraction as Q +from pathlib import Path + +import sys +INPUT=Path(sys.argv[1]);OUT=Path(sys.argv[2]);OUT.mkdir(parents=True,exist_ok=False);D=json.loads((INPUT/'PROTOTYPE.json').read_text()) +P=D['binary_ports'];R=D['root_lines'];v=120;h=9 +modules=json.load(gzip.open(INPUT/'PACKET-PROGRAMS.json.gz')) +# AtomScout: leaver-read K-triangles (schedule from atom1.py / rog.py CP-SAT) +TRI=json.loads(Path(sys.argv[3]).read_text()) +FULLT={(tuple(tr['p']),tr['e']) for tr in TRI['triangles']} +TRI_COORDS={t+8 for tr in TRI['triangles'] for t,_,_ in tr['reads']} +COPYL=[] +NH=504-3*len(FULLT)+len(COPYL) + +def basis(vectors): + b={} + for x in vectors: + for p in sorted(b,reverse=True): + if x>>p&1:x^=b[p] + if x: + p=x.bit_length()-1 + for q in b: + if b[q]>>p&1:b[q]^=x + b[p]=x + return tuple(b[p] for p in sorted(b,reverse=True)) +def inside(a,b):return basis(a+b)==b +def hyper(p):return basis([x for x in range(1,512) if (x&p).bit_count()%2==0]) +FULL=basis([1<=v,r)) + for col,s in enumerate(ids): + k=next(i for i in range(col,len(regs)) if rows[regs[i]].get(s,Q(0))) + swap(regs[k],regs[col],F) + scale(regs[col],1/rows[regs[col]][s],F) + for i in range(len(regs)): + if i!=col and rows[regs[i]].get(s,Q(0)):add(regs[i],regs[col],-rows[regs[i]][s],F) + assert all(rows[regs[i]]=={s:Q(1)} for i,s in enumerate(ids)) + M=[[Q(R[s][i]) for s in ids] for i in c] + def qr_rank(rs): + bs={} + for r in rs: + r=r.copy() + for i,b in sorted(bs.items()): + if r[i]:q=r[i];r=[x-q*y for x,y in zip(r,b)] + i=next((i for i,x in enumerate(r) if x),None) + if i is not None:q=r[i];bs[i]=[x/q for x in r] + return len(bs) + assert qr_rank(M)==4 + for rr0 in PRIORITY[",".join(map(str,c))]["rows"]: + rr=list(map(Q,rr0)) + if qr_rank(M+[rr])>len(M):M.append(rr) + if len(M)==8:break + for i in range(8): + if len(M)==8:break + rr=[Q(i==j) for j in range(8)] + if qr_rank(M+[rr])>len(M):M.append(rr) + if len(M)==8:break + assert len(M)==8 + linear(regs,M,F) + for i,r in zip(c,regs): + assert rows[r]=={s:Q(R[s][i]) for s in ids} + block_totals[c,i]=r + +# All centers are complete while Y is still at zero. This is the crucial +# difference from an illegal early-own-Y prefix using the old center order. +centers=[] +for i in range(8): + regs=[block_totals[c,i] for c in sorted(blocks) if i in c] + F=hyper(P[frame[i]]);a=regs[0] + for b in regs[1:]:add(a,b,1,F) + centers.append(a) +centers += [frame[i] for i in range(8)] +center_frames=[cur[r] for r in centers] +assert list(map(len,center_frames))==[8]*8+[1]*8 +assert all(cur[v+t]==() for t in range(v)) + +phase=B +for t,(r,coef,F) in sorted(own_rows.items()): + if t in TRI_COORDS:continue + assert cur[r]==F + add(v+t,r,coef,F) +# requests are needed for TRI coefficients +requests=defaultdict(list) +for pid,pair in enumerate(pairs): + if not pair['selected']:continue + (t,u),(key1,key2),mat=pair['targets'],pair['keys'],pair['matrix'] + requests[key1].append((t,-Q(mat[0][0],2))) + requests[key2].append((u,-Q(mat[0][1],2))) +reqcoef={t:(key,coef) for key,reqs in requests.items() for t,coef in reqs} +def face_info(c,p,eps): + z=blocks[c];keys=[(pp,ee) for pp in it.combinations(c,2) for ee in (-1,1)] + r_local,alpha=z['outputs'][keys.index((p,eps))] + j=[j for j in range(40,len(z['events'])) if z['events'][j][0]==r_local];assert len(j)==1 + return j[0],Q(alpha) +tri_join_counts=Counter() +lcopy={} +for s8 in COPYL: + r=s8+8;c=alloc();add(c,r,1,cur[r]);lcopy[r]=c +for tr in TRI['triangles']: + p,eps=tuple(tr['p']),tr['e'] + for t8,blk,loc in tr['reads']: + t=t8+8;blk=tuple(blk);r=maps[blk][loc];r0=r;r=lcopy.get(r,r) + key,coef=reqcoef[t];assert key[1]==p and key[2]==eps,(key,p,eps) + if blk==key[0]: + rr,c0,F0=own_rows[t];assert rr==r0;q=c0 + else: + j,alpha=face_info(blk,p,eps);ev=blocks[blk]['events'][j];assert loc in ev[:2] + q=coef*alpha + F=basis(cur[v+t]+cur[r]);assert inside(F,hyper(P[t])),('TRI frame',t) + tri_join_counts[len(F)]+=1;add(v+t,r,q,F) + +packets={} +for c,z in sorted(blocks.items()): + mp=maps[c] + keys=[(p,eps) for p in it.combinations(c,2) for eps in (-1,1)] + skipev={face_info(c,p,eps)[0] for p,eps in keys if (p,eps) in FULLT} + for j,(e,F) in enumerate(list(zip(z['events'],z['event_frames']))[40:]): + if j not in early[c] and 40+j not in skipev: + t,s,a,b=e;add(mp[t],mp[s],Q(a,b),tuple(F)) + for key,(r,alpha) in zip(keys,z['outputs']): + if tuple(key) in FULLT:skip();continue + a=mp[r];b=alloc();add(b,a,1,cur[a]) + consumers=sorted(d for d in blocks if d!=c and set(key[0])<=set(d)) + assert len(consumers)==2 + for target,r in zip(consumers,(a,b)):packets[c,key[0],key[1],target]=(r,Q(alpha)) + +# Both tetrahedra use the same partition. A selected key has exactly two +# selected Y loads and no ordinary M consumer. Supply its two raw halves in +# opposite orders and never form that M. Other keys retain the old M path. +second=[];first_join_counts=Counter() +for key,reqs in sorted(requests.items()): + assert len(reqs)==2 + c,p,eps=key + if (p,eps) in FULLT:continue + ds=sorted(d for d in blocks if d!=c and set(p)<=set(d));a,b=ds + for j,(target,coef) in enumerate(sorted(reqs)): + first_source,second_source=(a,b) if j==0 else (b,a) + r,alpha=packets[first_source,p,eps,second_source] + F=basis(cur[v+target]+cur[r]);assert inside(F,hyper(P[target])) + first_join_counts[len(F)]+=1;add(v+target,r,coef*alpha,F) + r,alpha=packets[second_source,p,eps,c] + second.append((target,r,coef*alpha)) + +Ms={} +for c in sorted(blocks): + for p in it.combinations(c,2): + ds=sorted(d for d in blocks if d!=c and set(p)<=set(d)) + for eps in (-1,1): + if (c,p,eps) in requests:continue + (a,alpha),(b,beta)=[packets[d,p,eps,c] for d in ds] + F=basis(cur[a]+cur[b]);add(a,b,beta/alpha,F) + Ms[c,p,eps]=(a,alpha) + +consumers=defaultdict(list) +for pid,pair in enumerate(pairs): + for key in pair['keys']:consumers[key].append(pid) +slots={} +for key,uses in sorted(consumers.items()): + assert len(uses)==2 + if key in requests: + assert all(pairs[i]['selected'] for i in uses) + continue + assert all(not pairs[i]['selected'] for i in uses) + a,alpha=Ms[key] + for j,pid in enumerate(uses): + if j==0:r=a + else:r=alloc();add(r,a,1,cur[a]) + slots[pid,key]=(r,alpha) +assert len(cur)-240==NH,len(cur)-240 + +selected_join_counts=Counter() +for target,r,coef in second: + F=basis(cur[v+target]+cur[r]);assert inside(F,hyper(P[target])) + selected_join_counts[len(F)]+=1;add(v+target,r,coef,F) +output_basis=[] +for pair in pairs: + if not pair['selected']:continue + (t,u),mat=pair['targets'],pair['matrix'] + F=basis(cur[v+t]+cur[v+u]);assert inside(F,hyper(P[t])) and inside(F,hyper(P[u])) + add(v+t,v+u,1,F);add(v+u,v+t,-Q(1,2),F) + z=-Q(2*mat[1][0],mat[0][0]);scale(v+u,z,F);output_basis.append((t,u,z)) + +for pid,pair in enumerate(pairs): + if pair['selected']:continue + (t,u),(key1,key2),mat=pair['targets'],pair['keys'],pair['matrix'] + (a,alpha),(b,beta)=slots[pid,key1],slots[pid,key2] + F=basis(cur[a]+cur[b]);aa,ab=Q(mat[0][0])*alpha,Q(mat[0][1])*beta + ba,bb=Q(mat[1][0])*alpha,Q(mat[1][1])*beta + add(a,b,ab/aa,F);q=ba/(bb-ba*ab/aa);add(b,a,q,F) + add(v+t,a,-aa/2,hyper(P[t]));add(v+u,b,-(bb-ba*ab/aa)/2,hyper(P[u])) + +for t in range(v): + expected={s:-Q(G[t][s],2) for s in range(v) if s!=t and G[t][s] and s not in frame.values()} if t not in frame.values() else {} + assert rows[v+t]==expected,('side identity',t) + +scatter=[[Q(r[i],4) if t not in frame.values() else Q(0) for i in range(8)]+[Q(t==frame[i]) for i in range(8)] for t,r in enumerate(R)] +precondition=[] +for t,u,z in output_basis: + a,b=scatter[t].copy(),scatter[u].copy() + scatter[t]=[x/2-y/z for x,y in zip(a,b)] + scatter[u]=[x/2+y/z for x,y in zip(a,b)] + precondition.extend([['scale',v+u,(1/z).numerator,(1/z).denominator,[]], + ['add',v+u,v+t,1,2,[]],['add',v+t,v+u,-1,1,[]]]) +for r in range(len(cur)):climb(r,hyper(P[r-v]) if v<=r<2*v else FULL) +H[8]+=8;H[1]+=8 +assert sum(r*z for r,z in H.items())==9*NH+240*8+72,sum(r*z for r,z in H.items()) + +def apply(e,matrix): + if e[0]=='add': + _,t,s,a,b,*_=e;q=Q(a,b) + for j,x in list(matrix[s].items()): + z=matrix[t].get(j,Q(0))+q*x + if z:matrix[t][j]=z + else:matrix[t].pop(j,None) + else: + _,t,a,b,*_=e;q=Q(a,b);matrix[t]={j:q*x for j,x in matrix[t].items()} +def inverse(e): + e=copy.deepcopy(e) + if e[0]=='add':e[3]*=-1 + else:e[2],e[3]=e[3],e[2] + e[-1]=list(FULL);return e +cut=[['add',v+t,centers[i],q.numerator,q.denominator,None] for t,row in enumerate(scatter) for i,q in enumerate(row) if q] +cleanup=[inverse(e) for e in reversed(A+B) if not v<=e[1]<2*v] +matrix=[{r:Q(1)} if rk and piv[j]>>k&1:piv[j]^=piv[k] + return tuple(piv[k] for k in sorted(piv,reverse=True)) + +def contained(a,b):return basis(a+b)==b + +def registers(e):return e[1:3] if e[0]=='add' else e[1:2] + +def apply(e,rows,dual=False): + if e[0]=='add': + t,s=e[1:3];q=F(e[3],e[4]);require(t!=s,'self add') + if dual:t,s,q=s,t,-q + dst=rows[t] + for k,x in list(rows[s].items()): + a=dst.get(k,F(0))+q*x + if a:dst[k]=a + else:dst.pop(k,None) + elif e[0]=='scale': + t=e[1];q=F(e[2],e[3]);require(q!=0,'zero scale') + if dual:q=1/q + rows[t]={k:q*x for k,x in rows[t].items()} + else:raise RuntimeError('unknown scalar primitive') + +def invert(e): + r=list(e) + if r[0]=='add':r[3]=-r[3] + else:r[2],r[3]=r[3],r[2] + return r + +def check_parent_interface(word,main): + # Read only the retained boundary data. No builder or local checker is imported. + relative="research/community-k492-audit/pr622/replay/baseline558/complex-global/base/split-centres/CANONICAL-WORD.json.gz" + path=main/relative;raw=path.read_bytes() + require(hashlib.sha256(raw).hexdigest()=="66d3c3c70983224650643a0a05a21ac6c6959f84d0f4528650601016f5a76844",'parent canonical input pin') + parent=json.loads(gzip.decompress(raw)) + tau=lambda x:x^(43 if (x&43).bit_count()%2 else 0) + ports=parent['ports'];v=word['report']['v'] + require(len(ports)==len(set(ports))==v,'parent port count') + require(set(map(tau,word['ports']))==set(ports),'transported source/target ports') + moved={i:ports.index(tau(p)) for i,p in enumerate(word['ports'])} + centers=[moved.get(r,r) for r in word['centers']] + actual=[list(basis([tau(x) for x in frame])) for frame in word['center_frames']] + expected=[parent['frames'][f] for f in parent['center_frames']] + require(len(centers)==len(set(centers))==len(actual)==8,'eight distinct centre carriers') + require(actual==expected and all(len(f)==8 for f in actual),'ordered centre frame interface') + return dict(parent_path=relative,parent_file_sha256=hashlib.sha256(raw).hexdigest(), + transport_tau=43,ordered_frame_bases_match=True,all_ports_match=True, + transported_centers=centers,source_centers=[r for r in centers if r=2*v} + for e in w['precondition']:apply(e,dirt) + compensation=[['add',y,k,-a.numerator,a.denominator,[]] for y in range(v,2*v) for k,a in sorted(dirt[y].items())] + entering=set(map(int,w.get('start_extra',{})));lowends=set(map(int,w.get('helper_final',{}))) + coldends=lowends-entering + require(not any(e[2] in entering for e in compensation),'nonzero entrance response') + require(not any(r in entering|coldends for e in w['precondition']+compensation for r in registers(e)), 'pre-wrapper touch of residual helper') + require(all(e[-1]==[] for e in w['precondition']+compensation),'nonzero frame precondition') + early=w.get('early_cleanup',[]);earlyids={i for i,U in early} + require(len(earlyids)==len(early),'duplicate early cleanup gate') + tail=[w['cleanup'][i][:-1]+[U] for i,U in early] + cleanup=[e for i,e in enumerate(w['cleanup']) if i not in earlyids] + prefix=w['precondition']+compensation+main + program=prefix+tail+cleanup + for dual in (False,True): + actual=ident() + for e in program:apply(e,actual,dual) + expected=ident() + for t in range(v):expected[t if dual else v+t][v+t if dual else t]=F(-1 if dual else 1) + bad=[i for i in range(n) if actual[i]!=expected[i]] + require(not bad,'all-column endpoint failure '+str((dual,bad[:8]))) + print('endpoint', 'dual' if dual else 'forward','PASS',flush=True) + full=basis([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 Z@ebcj+Xb-XNq`?IG1vv`ySK0b{|A4p=N13} literal 0 HcmV?d00001 diff --git a/research/helper-minimality/inputs/words/799-X4-CANONICAL-WORD.json.gz b/research/helper-minimality/inputs/words/799-X4-CANONICAL-WORD.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..416757e153fc8095f3827b4ef7dc5ac80986878f GIT binary patch literal 83939 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 E04oD}?f?J) literal 0 HcmV?d00001 diff --git a/research/helper-minimality/inputs/words/799-X4-FULL-WORD.json.gz b/research/helper-minimality/inputs/words/799-X4-FULL-WORD.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..3aa9b68658f5b17fd08c6f88e3603f2dc5c7dade GIT binary patch literal 58977 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\c|P?QoMwBvHu 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 fi>2f38= 3.11 with numpy and ortools (requirements.txt); set PYTHON to choose the interpreter. +# HM_FULL=1 also regenerates the 36,501-pair pre-read table (about 5 min on 2 cores) and compares it with the stored one. +# About 52 s wall on 12 cores (the S1 solver run takes about 50 s). +set -uo pipefail +HERE=$(cd "$(dirname "$0")" && pwd) +OUT=${1:-$(mktemp -d "${TMPDIR:-/tmp}/helper-minimality.XXXXXX")} +mkdir -p "$OUT"; OUT=$(cd "$OUT" && pwd) +case "$OUT/" in "$HERE"/*) echo "output dir must be outside the package"; exit 2;; esac +PY="${PYTHON:-python3}"; export PYTHONDONTWRITEBYTECODE=1 +T0=$SECONDS +echo "== 0. manifest and provenance" +if ! "$PY" -B "$HERE/scripts/provenance.py" | tee "$OUT/provenance.log" | sed 's/^/ /' || grep -q '^FAIL' "$OUT/provenance.log" \ + || [ "$(grep -c '^PASS' "$OUT/provenance.log")" != 2 ]; then + echo "step 0 FAILED"; exit 1 +fi +# work tree: scripts write their scratch files (iface.pkl, inst4567.json, ...) here, never into the package +export HM_ROOT="$OUT/tree"; mkdir -p "$HM_ROOT" "$OUT/logs" +cp -R "$HERE/cards" "$HERE/inputs" "$HERE/checks" "$HERE/evidence" "$HM_ROOT/" +E_="$PY -B $HM_ROOT/checks/expect.py" +# run NAME CARDDIR cmd... (stdout+stderr -> logs/NAME.log, exit code -> logs/NAME.rc) +run() { local n=$1 d=$2; shift 2; ( cd "$HM_ROOT/cards/$d" && "$@" > "$OUT/logs/$n.log" 2>&1; echo $? > "$OUT/logs/$n.rc" ); } +chk() { local l=$1 n=$2; shift 2; $E_ "$l" "$OUT/logs/$n.log" "$@"; } +W656=$HM_ROOT/inputs/words/656-layers-FULL-WORD.json.gz +W799=$HM_ROOT/inputs/words/799-X4-FULL-WORD.json.gz +AL=$HM_ROOT/inputs/pr799/independent/audit_local.py + +g1() { # S1 Hall lemma and extensions (#656 canonical word) + run iface B98b $PY -B iface.py + run blockscan B167 $PY -B blockscan.py + run scan01b B171 $PY -B scan01b.py + run extract B167 $PY -B extract.py + run level B167 $PY -B level.py --drop 433 --time 900 + run val B176 $PY -B val.py + run gate B179 $PY -B gate.py + run gate2 B179 $PY -B gate2.py + chk S1.hall blockscan --count "'scratch', 16, 'wide', 8, 'plane-stoppers', 8, 'distinct', True, 'matching', 8" 11 --count "'cols', 56\)" 3 --count "'cand-eq-wide', True\)" 11 + chk S1.solver-drop433 level --has "^STATUS INFEASIBLE" --has "drop \(433,\)" + chk S1.slack-01x scan01b --has "^matching 21$" --has "scratch-only partners matching 15 of 21" --has "col-only partners matching 21 of 21" --count "stoppers 7 scratch-only matching 5" 3 + chk S1.twins val --has "value-exact twins 0 of 38" + chk S1.replayA gate --has "end rows mismatch vs rows0: 0 \[\]" + chk S1.stoppers88 gate2 --has "stoppers 88 with jump found 88" --has "count ok>0: 0 holders>0: 0 low>0: 0 of 88" --has "all columns have a pure point holder: 0 inside plane: 0 no-climb \(frame>=z frame\): 0 of 88" +} +g2() { # Lawler S3/S4, bridges and holders + run law656 B171 $PY -B lawler799.py $HM_ROOT/inputs/words/656-CANONICAL-WORD.json.gz + run law799 B171 $PY -B lawler799.py + run pair656 B171 $PY -B pair799.py $HM_ROOT/inputs/words/656-CANONICAL-WORD.json.gz + run pair799 B171 $PY -B pair799.py + run lawcheck B171 $PY -B $HM_ROOT/checks/lawler_check.py + run b182 B182 $PY -B b182.py + chk S2.lawler-656 law656 --has "^ops 5287 copies Counter\(\{'S3': 156, 'S4': 112\}\)" --has "\('S3', 'FAIL', 'chains-alone-ok'\) 156" --has "\('S4', 'FAIL', 'chains-alone-ok'\) 112" --has "^passing copies 0$" + chk S2.lawler-799 law799 --has "^ops 5687 copies Counter\(\{'S3': 156, 'S4': 112\}\)" --has "\('S3', 'FAIL', 'chains-alone-ok'\) 156" --has "\('S4', 'FAIL', 'chains-alone-ok'\) 112" --has "^passing copies 0$" + chk S2.skipzero-656 law656 --has "^value-zero adds skipped 1921$" --has "^skip-zero \{\('S3', 'FAIL', 'chains-alone-ok'\): 156, \('S4', 'FAIL', 'chains-alone-ok'\): 112\}$" --has "^skip-zero passing copies 0$" + chk S2.skipzero-799 law799 --has "^value-zero adds skipped 2317$" --has "^skip-zero \{\('S3', 'FAIL', 'chains-alone-ok'\): 156, \('S4', 'FAIL', 'chains-alone-ok'\): 112\}$" --has "^skip-zero passing copies 0$" + chk S2.pair-656 pair656 --has "Counter\(\{\('S3', 'pair-conflict'\): 156, \('S4', 'pair-conflict'\): 112\}\)" + chk S2.pair-799 pair799 --has "Counter\(\{\('S3', 'pair-conflict'\): 156, \('S4', 'pair-conflict'\): 112\}\)" + sed 's/^\(PASS\|FAIL\) /\1 S2.oracle-/' "$OUT/logs/lawcheck.log" + [ "$(cat "$OUT/logs/lawcheck.rc")" = 0 ] || echo "FAIL S2.oracle run exited nonzero" + chk S3.bridges-holders b182 --has "\('BR', 'FAIL', 'chains-alone-ok'\) 12" --has "\('S3', 'FAIL', 'chains-alone-ok'\) 94" --has "^passing \[\]" --has "distinct 12 of 12 \[8(, 8){11}\]" +} +g3() { # cut >= 8 centres, verifier model + run cut656 B174 $PY -B check.py $W656 + run cut799 B174 $PY -B check.py $W799 + run clique B174 $PY -B clique.py $W656 $W799 + run al656 B174 $PY -B $AL --word $W656 --output $OUT/logs/al656.json + run al799 B174 $PY -B $AL --word $W799 --output $OUT/logs/al799.json + run toymake B174 $PY -B $HM_ROOT/checks/make_toy.py $W799 $OUT/logs/toy-FULL-WORD.json.gz + run altoy B174 $PY -B $AL --word $OUT/logs/toy-FULL-WORD.json.gz --output $OUT/logs/altoy.json + run cuttoy B174 $PY -B check.py $OUT/logs/toy-FULL-WORD.json.gz + run anchors B174 $PY -B $HM_ROOT/checks/anchors.py + for w in 656 799; do + chk C.cut-$w cut$w --has "H-CUT: all cut ops add target<-centre: True \| centres disjoint from targets: True \| #centres 8 distinct 8 \| \|K\| read 8" \ + --has "^F == I: True" --has "odd nnz in F0 0" --has "rank\(F-F0\) = 8 <= \|K\| = 8" --has "omega\(odd graph\) = 8" --has "principal submatrix of F-F0 on clique is I: True" \ + --has "centre-frame lemma .*: True" --absent ": False" + chk C.audit-$w al$w --has '"status": "PASS_INDEPENDENT_EXACT_FORWARD_AND_DUAL_ENDPOINT_FRAMES_ENTRANCES_CONES"' --has '"R": '$([ $w = 656 ] && echo 492 || echo 504) + done + chk C.clique clique --count "omega 8 \[0, 3, 45, 46, 69, 70, 104, 107\]" 2 --count "distinct 112" 2 + chk C.gap-AL-accepts-toy altoy --has '"status": "PASS_INDEPENDENT_EXACT_FORWARD' + chk C.gap-H-CUT-detected cuttoy --has "H-CUT: all cut ops add target<-centre: False" + cat "$OUT/logs/anchors.log"; [ "$(cat "$OUT/logs/anchors.rc")" = 0 ] || echo "FAIL C.anchors run exited nonzero" +} +g4() { # pre-read layer, model fidelity + run ilp B159 $PY -B ilp.py + run pairs B159 $PY -B $HM_ROOT/checks/pairs_sample.py + run b128 B128 $PY -B retest.py base + run b128tab B128 $PY -B $HM_ROOT/checks/b128_table.py + chk P.min66 ilp --has "^bundles 46 legal 38" --has "^touched targets 66 preads 118" --absent "Traceback" + ( cd "$HM_ROOT/cards/B159" && $PY -B -c " +import ilp +r=ilp.solve('full'); print('RESULT',r[0],r[1],r[2])" > "$OUT/logs/ilp2.log" 2>&1; echo $? > "$OUT/logs/ilp2.rc" ) + chk P.cpsat-optimal ilp2 --has "RESULT OPTIMAL 66 66.0" + sed 's/^\(PASS\|FAIL\) /\1 /' "$OUT/logs/pairs.log" | grep -E '^(PASS|FAIL)' + [ "$(cat "$OUT/logs/pairs.rc")" = 0 ] || echo "FAIL P.pairs run exited nonzero" + chk M.fidelity b128 --has "^frame map bad 0 5726$" --has "^endpoint forward PASS" --has "^endpoint dual PASS" --has '"status": "PASS_INDEPENDENT_EXACT_FORWARD' --has "REAL VERIFIER: ACCEPT" + cat "$OUT/logs/b128tab.log"; [ "$(cat "$OUT/logs/b128tab.rc")" = 0 ] || echo "FAIL M.table run exited nonzero" + if [ "${HM_FULL:-0}" = 1 ]; then + run regen B159 env PAIRS_OUT=$OUT/logs/pairs-regen.json.gz $PY -B mdl.py + ( cd "$HM_ROOT/cards/B159" && $PY -B -c " +import os +from pairsio import load_pairs +a=load_pairs(os.environ['HM_ROOT']+'/inputs/derived/pairs.json.gz'); b=load_pairs('$OUT/logs/pairs-regen.json.gz') +print('REGEN-EQUAL', a==b)" > "$OUT/logs/regen2.log" 2>&1; echo $? > "$OUT/logs/regen2.rc" ) + chk P.table-regenerated regen2 --has "REGEN-EQUAL True" + fi +} +for g in g1 g2 g3 g4; do ( $g > "$OUT/$g.out" 2>&1; echo $? > "$OUT/$g.rc" ) & done +wait +status=0; npass=0; nfail=0 +for g in g1 g2 g3 g4; do + echo "== $g"; sed 's/^/ /' "$OUT/$g.out" + p=$(grep -c '^PASS' "$OUT/$g.out"); f=$(grep -c '^FAIL' "$OUT/$g.out") + npass=$((npass + p)); nfail=$((nfail + f)) + if [ "$(cat "$OUT/$g.rc")" != 0 ] || [ "$f" != 0 ] || [ "$p" = 0 ]; then echo " FAILED: $g (exit $(cat "$OUT/$g.rc"), $f FAIL lines)"; status=1; fi +done +echo "== done in $((SECONDS - T0))s: $((npass + 2)) PASS (2 in step 0), $nfail FAIL; logs in $OUT" +exit $status From 75e7699a691f321861ab8fe303f8bd8e6a6fc393 Mon Sep 17 00:00:00 2001 From: DreamingOfClouds Date: Tue, 13 Oct 2026 06:38:01 -0500 Subject: [PATCH 2/2] helper-minimality: post-submission note on gap 3 (all 7 S1 stage-basis directions cost 24 registers per block) Co-Authored-By: Claude Opus 5.5 --- research/helper-minimality/MANIFEST.sha256 | 2 +- research/helper-minimality/README.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/research/helper-minimality/MANIFEST.sha256 b/research/helper-minimality/MANIFEST.sha256 index e29c55ed9a..75c5bb333f 100644 --- a/research/helper-minimality/MANIFEST.sha256 +++ b/research/helper-minimality/MANIFEST.sha256 @@ -1,6 +1,6 @@ c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 LICENSE b9aee8d523d7cf7c25d4548a044657bd01964107e7bed053d92e303b16653f07 NOTICE.md -292e4b76638a3cd82c8859756ee82c37226c7c099a64018bfcf87a930938e29b README.md +cbcf1bc5d35c247a42439669e449a592fb52e5094869a232213bf588d7ff00b4 README.md 22ccac9703500587fa05b6284c57559fbe9659b9e941a088b6fda79316769482 SOURCES.json 7bd22be98f336f6e58c0bc1f38b948f102d3eba7dff3caf29b3fd3a2eb0469b0 cards/B128/coord.py e750f48b8a152c838165d18dd8eca47e0fda8194ef5326471a7724e6817f8687 cards/B128/retest.py diff --git a/research/helper-minimality/README.md b/research/helper-minimality/README.md index dfde1f0b98..fdc19e2ac8 100644 --- a/research/helper-minimality/README.md +++ b/research/helper-minimality/README.md @@ -117,6 +117,7 @@ H5 RECORDED (`evidence/B175-NOTES.md`; its script overwrites a card pickle and i 1. **S1 blocks (0,1,2,3), (0,1,4,5), (0,1,6,7):** the Hall bound is slack (H6); 48 scratch registers, including the centres 224, 240, 256, have no minimality proof. B177 is running; no verdict yet. 2. **Multiset-changing merges** (undo/redo ADDs, B169-style holder merges) are outside every Lawler result; the S3/S4 and bridge theorems are FOM only. 3. **S1 true-cap case and interface change.** S1 minimality is proved given the shipped end-of-A frames as bounds. The case where later readers' true caps replace those frames is open (as in #717), and so are fewer plane-stopper rows and other hyperplanes. + - *Update (post-submission, unverified here; card B188):* on the 11 eight-line blocks of #656, all 7 pair directions for the S1 stage basis cost exactly 2 registers per demanded plane (2 × 12 = 24 per block, the shipped cost). Directions with fewer stoppers need more pair registers, because a pair register serves only one plane. So a change of stage basis alone cannot lower the S1 count. What remains open is fewer demanded planes (an op-multiset change) or a frame descent. 4. The cut ops and centre frames are not examined beyond K1-K3; non-S3/S4 helper pairs have no generic sweep; #870 is not local. 5. **H-CUT** is not enforced by AL; several-epoch cuts in another verifier are outside the theorem. 6. **Decoder n ≥ 9** (mixed β ≤ 7 terms, #717 D1) is a separate question; the decoder terms are not covered.