diff --git a/research/format-limits-2/LICENSE b/research/format-limits-2/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/format-limits-2/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/format-limits-2/MANIFEST.sha256 b/research/format-limits-2/MANIFEST.sha256 new file mode 100644 index 0000000000..a8ce23c14a --- /dev/null +++ b/research/format-limits-2/MANIFEST.sha256 @@ -0,0 +1,170 @@ +c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 LICENSE +7809c20cd037dcc29edb5207cbc333bed7b2bd1026cb4f1137f150de90d6866d NOTICE.md +fa69ebcade9150675a540150e1200045394dcb45abbe8ab9669934b0be53fadd README.md +ef0e8e00a8398920fcc8d2fc64a1a6dccebfaecdcb5436afd7859bb0ef85cec3 SOURCES.json +ee3b062cc8f7a5eb8063580fb5fb4333f681552f85f61f4d82643f2684ef628f requirements.txt +760ae16e90740595edffd986ae204c7f3561c83e0fdb123ff97fe5bce9118ec2 s1-2-erratum-invoice/SOURCES.part.json +2dc839aa3f46121c2e67444435731a16388341289bded1abc21ade7f38a7138d s1-2-erratum-invoice/checks/e1_scope_multipliers.py +777db0d2140722c09cf8f7938d155127259df8dee1bcc7dcaccc80435fba26cf s1-2-erratum-invoice/checks/e2_rho.py +d0b4f210ea5f6b5148ff92ffd964c450e92e995810d91cd43421f197ccc04290 s1-2-erratum-invoice/checks/invoice.py +a33e1f6bfec40aec982a71f39ef579101410a4f6a2805c56a794fcb2a7548a5f s1-2-erratum-invoice/checks/p1_knobs.py +319a33fc6b09c7609f0601cfebdf74b38c06036a6fec64d106c37b52ecdad982 s1-2-erratum-invoice/checks/p2_bit.py +85c28ba729e6010c7915d665ab896b904451e0e1da7ab831fcf05893964c631f s1-2-erratum-invoice/checks/p3_rate.py +6097bb96b6cda21c2c0bae8d940100cdef391d44f0367e4b66e87a0abe9b95d7 s1-2-erratum-invoice/checks/p4_s7.py +4d6b3fb7dd0ec009d0664f5a5838afb4f12ee1cd973b60770b60a4b6704bade8 s1-2-erratum-invoice/checks/p5_cover.py +3f3200cccd72d16795175c79b8edbade34e21a07935cab732253b43b6d9a83a5 s1-2-erratum-invoice/evidence/E2/R39-S-NOTES.md +507f8ce06658c64a8c2013a9017849bbccb11b85f48ded217b8c0e0485b88ff8 s1-2-erratum-invoice/evidence/E2/rho01_P2.txt +38c5267c8f558adcf0bfeaf253c15b0fa5c38bbc05686c2f4542771472f9060a s1-2-erratum-invoice/evidence/E2/rho01_P3.txt +4ef341812bdf47cc66b803c40b5b04f03d50bb5f374424086f78ce3c82dc416a s1-2-erratum-invoice/evidence/E2/rho_bfs_P2.txt +350ea8a44a147f9cdcb8ac6ae323b7d8b10a969d3a889247ec79e7fb4e451e77 s1-2-erratum-invoice/evidence/P1/B15-NOTES.md +88c7651b092292d27a071bb22ff850258c2fb97c4efa592bf304e620f16fa240 s1-2-erratum-invoice/evidence/P2/B26-NOTES.md +dc5016c8407eeeb5fae073eace2fcd718a5bef486f53d290c8819f8e7834381c s1-2-erratum-invoice/evidence/P3/B66-NOTES.md +9c37ae11c3ab6273c66e18e8da3ca0adf61d26c53ae28be0fa71ccab70d3703c s1-2-erratum-invoice/evidence/P4/B54-NOTES.md +f79344262d5748660e41d5f0bcf0d47ba2d5116d36423197eeeff97be94a4415 s1-2-erratum-invoice/evidence/P5/B11-NOTES.md +ae42a7642a0e550b7bb8837fa71dd1c6c0d34a5438d584807e606e403d7ff625 s1-2-erratum-invoice/evidence/P5/B3R-NOTES.md +e67e9158ae8bcf485c499b2e5e744016938605aff9848ca9e6106a685f5df2ee s1-2-erratum-invoice/inputs/derived/k492_registers.json +0465a38c683c9a8cfcc11ebdf5bb48013c50982629d43911be792c1011afad50 s1-2-erratum-invoice/inputs/pr555/EXPECTED.json.gz +6479c189696f53cc505febb2c81c4b69a5bf54f211ee4ae64ff841041244b060 s1-2-erratum-invoice/inputs/pr595/a5_scope_multipliers.py +cab1c055cf4dbad6a89b4527e2ef3d138131b6742eaf21bd8b4338a9ee2febf4 s1-2-erratum-invoice/inputs/pr595/cert.py +96fbb236eb58bd471be33ccafbd128cd0590e5dc6f160ad9b9e85bcc2680b437 s1-2-erratum-invoice/inputs/pr595/report.py +9cfbc1316389a46922765cdae85fdde2042f7681986d1c97a19174c4922ea29c s1-2-erratum-invoice/inputs/pr595/skel.py +57dc869171300e4a7600fc82f8ff5063644c59423731890d2a391f2dc6402972 s1-2-erratum-invoice/inputs/pr626/PLAN.json.gz +6b8b4ca567ad0bc88e59eaef98373fb86da2368c57cf5fd16abf66be77fb0279 s1-2-erratum-invoice/inputs/pr626/README.md.gz +81b4a28573e75b93ddda542cf4cc6d5fda42ba6698c2ad2e7d3fcf6bda803125 s1-2-erratum-invoice/inputs/pr635/PLAN.json.gz +67af127042dffb51aff75dc0e905a17cc48dcc1156f7f3e42920543c13c653ea s1-2-erratum-invoice/inputs/pr645/PLAN.json.gz +2912579e14d72946244afa82cc8fec3bc2460a6fb6e0534bf1bed6ca2b50d60e s1-2-erratum-invoice/inputs/pr646/PLAN.json.gz +30fea10ec468f0b280d2e19815ee97e8d3f6faf065467c9a91321cf8372a7430 s1-2-erratum-invoice/inputs/pr649/PLAN.json.gz +238de79583ebe03625e6c4074a212acf4fb3087ebc78771afa0b33562753e552 s1-2-erratum-invoice/inputs/r39s/rho01.cpp +cbe468c4718f20cb1b2b05b980ea23309b65a7699617a4847245a7a1713eacbd s1-2-erratum-invoice/inputs/r39s/rho_bfs.py +a0be2ff4d70e7658d801921af79e4813127d4326085bc271941fee76960bade0 s1-2-erratum-invoice/tools/derive_registers.py +fa9e8c15a1c4fc03da7e6bd209b0fc0eaf5c405bd99cb62f2d8ad13ab91ce300 s1-2-erratum-invoice/tools/mksources.py +6af5b84e952b3f9a98ba9fbc529225d321936358dcfcdf404d0c2d06781097af s1-2-erratum-invoice/tools/vendor.out.json +44cfabecded3e5c7aae0067b033dea586206c1d17b44c68a11c1df5412af60cc s1-2-erratum-invoice/tools/vendor.py +097c752c6203e8b7e2dc8827e3f38c6ca33f17e001e4b79c750170ecfc60b612 s1-2-erratum-invoice/verify.part.sh +8946ca7980cf3dd0bbb6e120407844ebb6b81f08582d39df06987f099e77b8c6 s3-4-census-gauges/SOURCES.part.json +0f2b0972760cb75fddda360787e4def940039c29217ab45610e35732ff16f68e s3-4-census-gauges/checks/b_pins.py +70572de4cb5f954f3da1814a72405a08e98edcfb8ccbeeead4050eb56db2f14f s3-4-census-gauges/checks/c1_census_656.py +442da1c69a5aebd6f68327e9d284cd27699705dfcbffb348aedeb35602fcb851 s3-4-census-gauges/checks/c2_dirty_borrow.py +ff4602ed9d4bfa52911ada6a438bb10052998800e141aca75cb2d548334eef4b s3-4-census-gauges/checks/c3_cap_f2_9.py +49b0ee0db2ca2491cfc6af39bcbb163cebbeaf5214702d1134aa253c351c2074 s3-4-census-gauges/checks/common.py +be72bdb7ba4732b37d4da5c1e486b5902997272490dd508ede78926966d59111 s3-4-census-gauges/checks/g1_gauge_bound.py +e2a8a53212979de70e0f9e9fbd457736d167819e97d455ea3ccc2f1b6356fb0d s3-4-census-gauges/evidence/C1/STEPS.json +4916e77c90696678cc3cb4e320a1fbec622e9d6bd4ca4b3e2a84ad1844ce5518 s3-4-census-gauges/evidence/C1/ledger_by_step.csv +71469db91a3c5672312dde85a9e463d5a6c4527b7cb6f2e2a03594eb59add409 s3-4-census-gauges/evidence/C1/ledger_helpers.csv +171c61ffe5eb12bb2704ba6a1b576c587e0068da750d5cc33e47e7abe9924a85 s3-4-census-gauges/evidence/C1/ledgers.log +7839c5dc45631b9e6012b138ed62cf3d2a1c2e0f900a3872bfb19c214545205b s3-4-census-gauges/evidence/G2/rep1.log +ae3018c0646be06f47d345bb8baf0e6ea9220096a949fa30a8f7656aa4ad6f45 s3-4-census-gauges/inputs/derived/ck-CANONICAL-WORD.json.gz +72a4952751383e2a5e84b967f1e76fdfda003fe5592df357a599232e586817e3 s3-4-census-gauges/inputs/derived/g44-CANONICAL-WORD.json.gz +0977be8f1226d678c941cd61597621c47f4ed1193bfc1f15456c53fe75dd37f2 s3-4-census-gauges/inputs/derived/g44-TAGS.json +d833ae0390d165d7da0c639a3c7aeb77156c2ddb52447087cb49b9d03b19e9b9 s3-4-census-gauges/inputs/pr531/PACKET-PROGRAMS.json.gz +ca11de0e8f9291e93e9434c47c8ef6993a364b865b2550f9618d68c19cd60ee0 s3-4-census-gauges/inputs/pr531/PROTOTYPE.json.gz +afe02dd6e947847f7d8cd44d1b730702269a68c3adb30fc858c3816b1ac084e5 s3-4-census-gauges/inputs/pr626/GENERATED-IDENTITY-CONTROLS.json +0ad202612f010df4ab66432a628247b37ad8b497dd6b27595b1685cbd7eb119e s3-4-census-gauges/inputs/pr645/FULL-WORD.json.gz +f0297cd10da2ee01facf2192f26b3ea699b17ea60c0caf214a8aac19643679fd s3-4-census-gauges/inputs/pr656/PLAN.json.gz +8c6799e9f81167d5f10eec275075bae905864f9072e056f5b1ffb9e43426e248 s3-4-census-gauges/verify.part.sh +5437538a63bc5f375d23ebcc321dbeac18648bc2b02af24520707d79d370d228 s5-6-decoders-spec/SOURCES.part.json +bf483581a8a94f968dcdbad9552190d44b4d4672948026ee42dd85d0f4478a23 s5-6-decoders-spec/checks/anchors.py +ef4b7aa039f9c259b94f92e1e2519f00256e1574556980c2490127954608db6e s5-6-decoders-spec/checks/d1_decoder_floor.py +fd969b3c010a1cab2b5e0cdc79f1b04dfceefd85de4fc680a19a4a207a6ae067 s5-6-decoders-spec/checks/d1_frames.py +cf56ec835b3ff6bdada7c1fad135e102dffcd07aa3ed12e9ca9edecf0cde8592 s5-6-decoders-spec/checks/d3_punctures.py +ab40641530ab624741e7a3060bd7b4c0d4e4b69bedf73c3fbb989ef172f792b3 s5-6-decoders-spec/checks/d4_structured.py +7255d13ef349e7a549c0f26addf35ef72d28c72343f3abfcbab2f5eba74834a5 s5-6-decoders-spec/checks/e8model.py +2cf72bdd4182a4bbff11737eea2a9e5b08f32e996d9e84af6fd622b44a77a747 s5-6-decoders-spec/checks/log_checks.py +9f0bdd9626ce1ca7e82873dcfa5f8d0146ddf0fc63dc90c87bc84dd3fcf2a920 s5-6-decoders-spec/checks/s1_inplace.py +326791fa36113e2f765de33d2e008b0d70437796a43843a763c933e17cd06b83 s5-6-decoders-spec/checks/s3_r2_toy.py +9d9b18720961e9b4689fd763b85e7b6f36160ccd3a8a1c9ddc5103bb0f66c396 s5-6-decoders-spec/evidence/D1/B14_satlift.exit +e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 s5-6-decoders-spec/evidence/D1/B14_satlift.log +3ba038c2a2a2d766f6a2687e132d6eecbd1efa120cb423b30e8b992f49df6113 s5-6-decoders-spec/evidence/D1/B14_satlift.py +2254f42c0a2b025cb345baf7b22af15c400b0a6fb6abd49d41a5881365845414 s5-6-decoders-spec/evidence/D1/B72_sat.py +9d9b18720961e9b4689fd763b85e7b6f36160ccd3a8a1c9ddc5103bb0f66c396 s5-6-decoders-spec/evidence/D1/B72_sat_n9_o3.exit +8d3091ee1f4d11a1a3efbfcf5f89d10d7e4db4220f23a6ae009c15673eddcc22 s5-6-decoders-spec/evidence/D1/B72_sat_n9_o3.log +dcf96c239888a7eb3d6b5354a97bb557308e8e94d3a75b828e23969e1777215b s5-6-decoders-spec/evidence/D1/satlift46.py +46d763a1e87c309d82765070df94c51e36de45e64a27d47f40606946a62cbcf6 s5-6-decoders-spec/evidence/D2/cen1.out +71314b4f28079348527f8ee9efb24309ad72fd5ea6934c927457722fb2751ef8 s5-6-decoders-spec/evidence/D2/cen2.out +48ac142440860e6ed5fccd96f5a6aa31538e555f17f878501b537e444c31984e s5-6-decoders-spec/evidence/D2/cen3.out +56dd5e20ecb02fbbf1dfee37f2c019bc160a7d136dd8ae8a7bb16688d042ce00 s5-6-decoders-spec/evidence/D2/d1.out +0e19ae1ec5e7d86a9eed9621571af9eaa00abfe165fc8dcd146b5085b520f77c s5-6-decoders-spec/evidence/D2/d2.out +5414c014b669ab8475eb1c39fbf297c2dce9f539242d0320fd8b9cd4267b0a61 s5-6-decoders-spec/evidence/D2/d3.out +cf41e3e53127c5229014618b55fefa0f262d1f250b9f9fbb2963bea558de795b s5-6-decoders-spec/evidence/D2/w1.out +07330ddc5d4f0793df4231d28dae3e8ccc96473a1cfe83be0b84e4b6c97665cd s5-6-decoders-spec/evidence/D2/w2.out +ca31495070ef57979df4effad8c93d3836ac16d3c9a19fb4abe2d9e7c2e3df42 s5-6-decoders-spec/evidence/D3/B14_flip_3.log +e29f3165c0e6b855b0079301a04b15b8a066906c9b0e9df7030cd90572944ae4 s5-6-decoders-spec/evidence/D3/B14_flip_3a.out +17f1bcc4b4bfd5ec0ca20d3b89c68e441d78b3befd68663d475108aaa1c98874 s5-6-decoders-spec/evidence/D3/B14_flip_3b.out +e9ef041b1a76dc94d1f661bf383ac89f285faaff6f17f6a8896e73e660712975 s5-6-decoders-spec/evidence/D3/B14_flip_3c.out +21c0953a5592dea290c4dfa0aceb425cbf7d06e2456c45101c6b5e6db6ab2606 s5-6-decoders-spec/evidence/D3/c1_0.out +7768e0fb8bf8386886b348ede4b8d1090dfd9231d1727c340fad0c7ded4e4156 s5-6-decoders-spec/evidence/D3/c1_111.out +f80e4becb4ffd0dbd9f32a3950698d668125450ed43e3f0f0579e2663a5edc72 s5-6-decoders-spec/evidence/D3/c2_0.out +5518d576d091ead48e6ff96dbcf33e4096e6108e289957c26ac8b69a5e496b35 s5-6-decoders-spec/evidence/D3/c2_111.out +136aeac659db958a4008b54c24d3921efc149741b8ff065b4ea2b3f1514e3337 s5-6-decoders-spec/evidence/D3/g0.out +a3624c2da333fc8e4123a9ed3b2e9ace654895d54c623d258b9eb2a3def81289 s5-6-decoders-spec/evidence/D3/g1.out +0442032f2c0d932ac798e494b385e7987199ae37db27278f117f3b3d04bda026 s5-6-decoders-spec/evidence/D3/g111.out +b2e69115fa90a5b9a9691c403aeba26b871a15be4a92cf923cee11aa26f21150 s5-6-decoders-spec/evidence/D3/g30.out +035d6ddc47f510f4b4fe3eed8c634a1447a0d5ffd4a2b635f32f2acfb52c37c6 s5-6-decoders-spec/evidence/D3/g48.out +9458e545c91b0ff346235473ae192651f29723400a2b81f77522772467acafae s5-6-decoders-spec/evidence/D3/g70.out +8e0178db02c14e1b29058cdbdbd50aac22f2b55a1ba21dc82f417610c9932526 s5-6-decoders-spec/inputs/local-hits/P104/HIT_flip_3a.txt +d27a8e2d14a2dcbb574995aa9ab82b3b107355faf48ad56f45c6dd5e051d252c s5-6-decoders-spec/inputs/local-hits/P104/HIT_flip_3b.txt +f3edfb771a76fc57d034b1cddba9de7b97a7d13409817879579eadb03381092e s5-6-decoders-spec/inputs/local-hits/P104/HIT_flip_3c.txt +0af2b4b42cac05f21794013623f9955bd05cf48374a7e0a1badc29e441a027b7 s5-6-decoders-spec/inputs/local-hits/P111/HIT_c2_0.txt +816768175d2b47ebabfd0f09180d95862bc7e84685f78dc616d9746ebf762a63 s5-6-decoders-spec/inputs/local-hits/P111/HIT_c2_111.txt +c06d83ede44258b7250fe1df62a82011687f704c7f879ce4c91040ebbe2ef6b4 s5-6-decoders-spec/inputs/local-hits/P111/HIT_g0.txt +9a8e8ee205cf3e69e2872c461844232df764a016a8c7e2741a02aeae9cdfc323 s5-6-decoders-spec/inputs/local-hits/P111/HIT_g1.txt +8d5528362385dfc0c19cda625e5b2894d777d9405fc167c4c6723e99baa8db56 s5-6-decoders-spec/inputs/local-hits/P111/HIT_g111.txt +a667c3f13d28828cb0a41b681e08fa6e4c07a1f3270f77555d3a1be29308a1d0 s5-6-decoders-spec/inputs/local-hits/P111/HIT_g30.txt +521a618922d426573a1e808a6f7562eec5cd6ab09538d43b13c4dd79b1597aa7 s5-6-decoders-spec/inputs/local-hits/P111/HIT_g48.txt +b803b2c2621061b9d2b4b31f4137e02c1342d288282a4ee92b7e2f50b2bd9fb3 s5-6-decoders-spec/inputs/local-hits/P111/HIT_g70.txt +c9bb9655b594583c6b4bab8cb485233f1d1e588f83858cf1e4c3530cee8fed54 s5-6-decoders-spec/inputs/main/notes/general-clifford-frames.tex +ed76761194988a01af77ead0ea6469cb5dcd29690ab985a0b5a4006b0f2b69bb s5-6-decoders-spec/inputs/main/upstream/build/sections/03-motifs.tex +412b170ccaab38dba96e95e3cbfae09f4876a9818f8d278776a746b0f8044906 s5-6-decoders-spec/inputs/main/upstream/build/sections/04-swap.tex +b6033cd2959297a624b557f3d04665c8fbb680a4c0987daf0704ef93711700bd s5-6-decoders-spec/inputs/pr622/coupled_frames_base.py +ae3018c0646be06f47d345bb8baf0e6ea9220096a949fa30a8f7656aa4ad6f45 s5-6-decoders-spec/inputs/pr626/ck-CANONICAL-WORD.json.gz +6bd9a1e279c9c9e4f3767d9f82e537b559292906feb2ddab02f380fb6523a810 s5-6-decoders-spec/inputs/pr626/hpe_audit_local.py +3678aa0a15236f05cceeded680b099b857372f002ee5fade25d8ed2931b70b57 s5-6-decoders-spec/verify.part.sh +4eff6db626517ef1b600ea1f2d7daaeb9d3b7c26b86b78e35780da0305c7cb7b s7-9-centre-fragmentation/SOURCES.part.json +dca23950a66bfa38ff8df71099c134e66c48c984bf0f0b471ddd26b76ff9cf10 s7-9-centre-fragmentation/checks/common.py +8ddeff2008980a1b1126a86641cac30d0d0b90c9c6234e191adc13e13db79fdd s7-9-centre-fragmentation/checks/f1_carriers.py +31bf16d7b75732de0eca22ae1b019ee7758179a34eec25c0ea1c107082200ef3 s7-9-centre-fragmentation/checks/f1_frag.py +cdc1ede574305ddf6c52d4fc513b09435b8cca8af2b515bf7b3a88370976a85f s7-9-centre-fragmentation/checks/f1_pack.py +36efdc752151a4f723e7e9089955a47f16eda87316a279fd375b2e919c96e06b s7-9-centre-fragmentation/checks/f1_s3s4.py +7514cab0f52c3fa1a31cbe9e4aa43d38b43e2188b305516f18be53f9160853be s7-9-centre-fragmentation/checks/f6_log.py +f7176b77e2daffdf6d7440a83283a174abdc12b893cccb868d9cb6f4ad697d59 s7-9-centre-fragmentation/checks/o1_faces.py +69f804a21e2ecf7fc82edc3e0c7bab4efe93815aa47d82045b8111a3d7ae7da7 s7-9-centre-fragmentation/checks/y1_centre_cut.py +c95c492b9b94cf16fd0eaa68b7e1a41c0082de78f33c6059cc2c9a00761184a3 s7-9-centre-fragmentation/evidence/F1/B80-NOTES.md +e3c1e6aa548c6af09c6cdde68d7b1aeb44e874ff8cc8499d8153483bd6287f62 s7-9-centre-fragmentation/evidence/F1/B81-NOTES.md +ba6767bc74e7e91330d27026fa81875d2b116f7a34b818a037d94f1bd519b778 s7-9-centre-fragmentation/evidence/F1/B82-DISCOVERY.json +9cbf48e3c0932ce286826b3a5807432a193275a5f4a6830a52401cbdacde0d54 s7-9-centre-fragmentation/evidence/F1/B82-NOTES.md +ba6767bc74e7e91330d27026fa81875d2b116f7a34b818a037d94f1bd519b778 s7-9-centre-fragmentation/evidence/F1/B82-run.log +c131f3bc7dd229cfc67fc53bd9b79b6a5266f667d9c65c8b335f9df48ca35e70 s7-9-centre-fragmentation/evidence/F1/B85-NOTES.md +85b10b7d8adfcbad634b2e219e2336563324dfd02647282b512d5235e1dcf170 s7-9-centre-fragmentation/evidence/F1/B89-NOTES.md +44d900dd87450634eeb81f7d87bdd67cbd918a80e92ae091c66b57dbcf0c6b98 s7-9-centre-fragmentation/evidence/F2/B103-NOTES.md +b41ddcb848a7f3ecbb75f93e281627cc112b85175b937f4c275f6d3f89242ce9 s7-9-centre-fragmentation/evidence/F2/B105-NOTES.md +357bcdf2dc6f27518a2b9dc14337fd86f00a8d8d3f3b0a1e61de1cae4893fddf s7-9-centre-fragmentation/evidence/F2/B107-NOTES.md +42bc59cc85492f96abed7c0cb75048b418eb4d2730077db827ebb71e88dcd31f s7-9-centre-fragmentation/evidence/F2/B108-NOTES.md +d9a258b3e70ecc982395869018bd7b27872ea83c3273f1ee3c50e53fc127c2d2 s7-9-centre-fragmentation/evidence/F2/B98c-NOTES.md +72917a21ab58fbd99012dc65410a32b27d5966a9e3ee7a3e01289d4bb01f4404 s7-9-centre-fragmentation/evidence/F2/B99b-NOTES.md +96adc6297ab3c0a5406b46c49ce828f596eab28c6d421a72b3e5bb349ea206ab s7-9-centre-fragmentation/evidence/F3/B90-NOTES.md +dbccb5c0d44b1ba04b52f26083adbec1fdd40cbbdcc57dbd5f119496ed5ed8b5 s7-9-centre-fragmentation/evidence/F3/B92-NOTES.md +adb7cefda46501d2769718ef2374554b68722d759eacce1e37030859d3ecbdea s7-9-centre-fragmentation/evidence/F3/B92b-NOTES.md +3dc9d03ab314eb047e90b1d4b94e5245f0769c7eeebd4a939a26c643339422d8 s7-9-centre-fragmentation/evidence/F3/B93-NOTES.md +a08b06c423e298313be7b7a5101d3b37ce98ab1dae91627a4b77d877bd641659 s7-9-centre-fragmentation/evidence/F3/B94-NOTES.md +1c7d4c83ed133b698169ca2be7708ea50d0ab4506e80e58e1a97bb330d9025b7 s7-9-centre-fragmentation/evidence/F3/B97-NOTES.md +3ac09349702214e0ac6db0a6fddb327a83d99e7246d504cd4fb3c4f824268df3 s7-9-centre-fragmentation/evidence/F6/B105_miner664.log +5eb9295206f270b9d61c0b9af5de6a58438e12a0cb727b2b7e9ce6e756cc32fe s7-9-centre-fragmentation/evidence/F6/miner664_run1.out +390e5ea80e1da33988c17532dab42b74ac1ffd2262f07c03e04021c7f529f29c s7-9-centre-fragmentation/evidence/O1/B68-NOTES.md +6c230a05a0dbac13188068dad42dcd0ace52a1c7c11a90ad60c53b2c54b92a84 s7-9-centre-fragmentation/evidence/O1/B68-faces.c +a13c0cf567e7cbac3d5a1d59ad041e7ce0d13fb2518171badcbd4425d4a0a213 s7-9-centre-fragmentation/evidence/O1/B7-NOTES.md +1be2fafbefc53ac40d63497fbf4af8b1549bd10a3fc83c55f4d49254e38c9afe s7-9-centre-fragmentation/evidence/O1/B73-NOTES.md +8491770d60e8234c289ffc9c3342bf2dec4274d6f6658c9c163ad621e19f3aa5 s7-9-centre-fragmentation/evidence/O1/B74-NOTES.md +6e52b14e8f0c352dee5d54e84c4fcbd52399a9d15e27d0375249a7b6ab4d0a34 s7-9-centre-fragmentation/evidence/O1/B74-dump.c +a7b37cc232f220aedcb586e45312232e44347e619e985fd509978a9ec455571e s7-9-centre-fragmentation/evidence/O2/B2-NOTES.md +21c3838e9bfa4b451facc9fe2c6063b1cd3f497e6ad0a2576c42a91b090c1f97 s7-9-centre-fragmentation/evidence/Y1/B10-NOTES.md +3d6c34d60c9fe1d5a3d1af36c7aa9bcaa75dbe56814f1accfea4c546c890dc42 s7-9-centre-fragmentation/evidence/Y1/B16-NOTES.md +8491770d60e8234c289ffc9c3342bf2dec4274d6f6658c9c163ad621e19f3aa5 s7-9-centre-fragmentation/evidence/Y1/B74-NOTES.md +6070ff15252c51783e289a66c389c06da0ca1dd480a7218f151e70b4220cb7e1 s7-9-centre-fragmentation/evidence/Y2/B101-NOTES.md +049906ed7bb49c66205f643638a99393905525e8008b23617b060dc05eeabb4a s7-9-centre-fragmentation/evidence/Y2/B106-NOTES.md +5aaa5bc98240b6b346fe046f1993d68bc4a9abd63acb4c65cac98c34a3a2b55f s7-9-centre-fragmentation/inputs/b82-rec.json +0ad202612f010df4ab66432a628247b37ad8b497dd6b27595b1685cbd7eb119e s7-9-centre-fragmentation/inputs/pr656-FULL-WORD.json.gz +ae3018c0646be06f47d345bb8baf0e6ea9220096a949fa30a8f7656aa4ad6f45 s7-9-centre-fragmentation/inputs/pr656-k492audit-pr622-ck-CANONICAL-WORD.json.gz +7a3fec1022d3b2b1bd986302a327735ec521d17b043f4a5acb96253a56f6193c s7-9-centre-fragmentation/inputs/pr656-k492audit-pr622-jp8-CANONICAL-WORD.json.gz +35f9462f773a426db74b2c3257fbd19127bdecad2ece393398283953e0a0a9e2 s7-9-centre-fragmentation/verify.part.sh +006c5eceb7fce14b8a9a3af65c183c002f1b528aa7bec777bc14da85578e42f9 scripts/provenance.py +efe690814922109e775439fd4107dfb8a80ce36f67877d5dd2422a7dd4b561f3 verify.sh diff --git a/research/format-limits-2/NOTICE.md b/research/format-limits-2/NOTICE.md new file mode 100644 index 0000000000..481f6bf99b --- /dev/null +++ b/research/format-limits-2/NOTICE.md @@ -0,0 +1,51 @@ +# 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 + +Everything under the four section directories except `inputs/` and the existing logs and notes under `evidence/` +(which are shipped unchanged apart from the path removal named in `SOURCES.json`), plus `README.md`, `verify.sh`, +`scripts/provenance.py`, `SOURCES.json`, `requirements.txt` and `MANIFEST.sha256`. + +## Vendored, unchanged (git blob ids in `SOURCES.json`, checked by `scripts/provenance.py`) + +Files of these PRs (commit in `SOURCES.json`), stored verbatim or gzip-compressed: + +- **#531** (icekylinx): `PROTOTYPE.json` and `PACKET-PROGRAMS.json` (the direct-delivery geometry and packet programs). +- **#555** (eumemic): `research/e8-bit-p111/EXPECTED.json` (the bit invoice, row P2). +- **#595** (DreamingOfClouds): `a5_scope_multipliers.py`, `skel.py`, `cert.py`, `report.py` (E1 re-runs them unchanged). +- **#622** (jeremykothe2): the verifier `coupled_frames_base.py` (S4); the #622 / #623 ck and jp8 provider words are vendored from their audit copies inside #656. +- **#626** (chafreaky): `PLAN.json`, README literal, `hpe_audit_local.py`, `GENERATED-IDENTITY-CONTROLS.json`. +- **#635** (jeremykothe2), **#646** (jeremydiviney), **#649** (jeremykothe2): `PLAN.json` profiles (row P3). +- **#645** (icekylinx): `PLAN.json` and `FULL-WORD.json.gz` of the gauge44 word (G1, G2). +- **#656** (jeremykothe2): `PLAN.json`, `FULL-WORD.json.gz`, the audit copies of the ck and jp8 words (C1-C3, Y, F, O rows). +- Three files of main at the base commit: `upstream/build/sections/03-motifs.tex`, `04-swap.tex`, `notes/general-clifford-frames.tex` + (the upstream paper and the frame notes; line anchors of S2-S4). + +## Rebuilt, not files of any PR + +Canonical words rebuilt locally (the gauge44 word of #656 and the ck word of #626); each is pinned by the hashes the PR itself +publishes (`SOURCES.json`, `derived`). + +## Results and constructions this package builds on (credit) + +- **#595** (DreamingOfClouds): the format ceiling, census and lemmas that rows E1, E2, P1 and S1-S4 correct or extend; **#446** (DreamingOfClouds, open): Theorem C. +- **#593, #591, #617, #622, #623** (jeremykothe2): hyperplane-ended helpers and the K-triangle skeleton (G3, O2). +- **#604** (DreamingOfClouds): cold factory-scratch helpers (G1, G3). +- **#626** (chafreaky): the owner repair whose profile the invoice calculus prices. +- **#645** (icekylinx): Gauge44 (G1, G2); **#646** (jeremydiviney): signed-root K480 (G1, O2); **#649, #656, #659, #664, #676** (jeremykothe2): the gauge44 lineage and the frontier words. +- **#531** (icekylinx), **#555** (eumemic): the 504-helper direct delivery and the punctured bit unit. +- **#620** (GamingPuzzled): the E8 decoder floors (the complex P112 decoder of cost 64 is theirs, D1; bit P111 63 is theirs, D3); **#631**: the star-ratio puncture bound 63/111 (D3); **#661** (yuj1r0): R420 phase-B frames at fixed order (F1); + **#665** (Mister-Meeseeks): the rehosting boundary (F2); **#589** (DreamingOfClouds): the bit transport cited by #649. + +## Overlap check with recent swarm PRs + +- **#698** (thakrarsagar): exact certificate that the selected CK supplier's B-phase frames minimise the paid moment over all reassignments preserving circuit, gate order and end-of-B frames. Cited in P5, F1 and F2; it covers the CK B-phase part of their fixed-order frame statements (not jp8, not the A phase); the rest of those rows is distinct. + +- **#703** (Mister-Meeseeks): asymmetric Hurwitz E8 copy cost exactly 10 (scoped negative on #620's quaternionic lines). Related to D1/D3, not a duplicate of any row. +- **#705** (littleBro): determinant obstruction for rank-homogeneous register paths. Related to S2 and F2, not a duplicate. +- **#711** (thakrarsagar): R420 adjacent A swaps force both frames (bit side). Related to F2 (time shifts) and #661, not a duplicate. +- **#683** (Mister-Meeseeks): partial K/M face bypass needs four carriers. Related to appendix item 2 (packet reads), not a duplicate of any row. +- **#687** (cbethin): certifies a single-read relocation neighbourhood in one K-triangle of the #622 word. Related to O2, not a duplicate. diff --git a/research/format-limits-2/README.md b/research/format-limits-2/README.md new file mode 100644 index 0000000000..4e78bd5c50 --- /dev/null +++ b/research/format-limits-2/README.md @@ -0,0 +1,454 @@ +# Format limits, part 2 (no κ claim): erratum to #595, invoice prices, censuses of the frontier word, decoder floors, spec requirements, centre and fragmentation walls + +This package continues the merged #595 (`research/format-limits/`). It states results about the limits of the current +construction format and of the shipped #656 word, and checks the ones that can be checked. **It makes no κ claim and ships +no word.** Each result comes with its scope and assumptions. Each is marked: + +- **CHECKED**: `verify.sh` recomputes it from the files listed below (exact arithmetic unless stated). *CHECKED (log)*: read off a shipped, + sha256-pinned log that `verify.sh` compares but does not regenerate; +- **ARGUED**: a proof or a file:line argument in this README (the quoted lines are themselves checked where stated); +- **RECORDED**: the result of an earlier run that `verify.sh` does not repeat. Where a note or output is shipped under `evidence/` the row names it; otherwise the notes are not shipped (the row says so, or lists the record as "not shipped"). + +A row marked CHECKED for only part of its statement says which part; the rest carries its own status in the row's text. + +```sh +python3 -m pip install -r research/format-limits-2/requirements.txt # sections 5-9 only; sections 1-4 use the standard library +bash research/format-limits-2/verify.sh /fresh/output/dir # from a checkout or `git archive` of the whole repository +``` + +Python ≥ 3.11; `requirements.txt` pins numpy, scipy and sympy; 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 the PR files, sha256 of the +rest), and stops with exit 1 on any mismatch. Then the four section groups run at once and print one `PASS`/`FAIL` line per assertion. +Nothing outside the package directory is read. Default: 233 PASS lines (2 in step 0), about 22 s wall on 12 cores (the four groups run at once). `E1_FULL=1 bash verify.sh ...` also re-runs #595's `a5_scope_multipliers.py` unchanged for E1: 228 PASS lines (a single PASS line, which summarises the 14 a5 claim lines, replaces the 6 fast E1 lines), about 62 s. + +**Tested environments** (fresh `git archive`, every claim PASS, 233 PASS lines, exit 0): + +| Python | numpy | scipy | sympy | how installed | +|---|---|---|---|---| +| 3.11.17 | 2.4.6 | 1.17.1 | 1.14.0 | fresh venv from `requirements.txt` | +| 3.14.7 | 2.4.6 | 1.17.1 | 1.14.0 | fresh venv from `requirements.txt` | +| 3.14.7 | 2.5.4 | 1.18.1 | 1.14.0 | development venv, latest releases | + +Floating-point results (the F1 HiGHS MILP, the P1/P3 roots) are compared with explicit tolerances or exact decimals. + +## Results at a glance + +Sections: 1 erratum and scope, 2 invoice calculus and prices, 3 censuses of the frontier word, 4 cold ends and gauges, 5 decoder floors, +6 what the spec and verifier require, 7 centre barrier, 8 fragmentation and rigidity, 9 ledgers for skeleton changes. 31 rows by primary status: 21 CHECKED, 6 ARGUED, 4 RECORDED (rows partly CHECKED say so). + +| id | result | status | +|---|---|---| +| E1 | **ERRATUM to #595.** The ×1.15–2.15 "schedule/ρ family" multipliers (#595 census item 8 and open problem 3; its A.7 table labels the rows "rule dropped") come from dropping idle-frame rules, not from a ρ family: idle changes free ×2.15, one-child batching ×1.55, no split pre-stretch ×1.18 at s = 9 (×1.15 best, s = 5), both sides. | numbers CHECKED; reading ARGUED | +| E2 | ρ is not a verifier input (it is the hard-coded final bank swap). Over all pair-preserving ρ at P ≤ 3 (reachable set exactly Sp(4,2) = 720 and Sp(6,2) = 1,451,520) none beats B_K: multiplier 1.000. | (b) CHECKED (log, re-run and compared); (a) ARGUED | +| P1 | Complex invoice calculus on #626 (reproduced to 16+ digits): centre −1 = +22.6% b; one cst unit +2.81%; one port +2.15%; one w9 helper +0.068% (+0.137% if its width merges). | CHECKED | +| P2 | Bit invoice calculus on #555: c reproduced to 24 digits; cst unit ±2.80% c, port 2.15%. Word-level helper knobs (0.06–0.11% c) not re-run. | root, mass, cst rows CHECKED; rest RECORDED | +| P3 | Helper exchange rate by width on #649: w9 0.070% (no merge) / 0.140% (merged), down to w4 0.026 / 0.072; explains the old 0.027–0.143 spread. | CHECKED | +| P4 | Stage count s = 9 → 7 is worse at every R: hosting overflows 8.7%, b₇ only +0.21% over b₉ at equal R. | CHECKED (model) | +| P5 | The climb mass is a forced cover (mass = mW − deficit): mass padding is illegal, frame annealing on the #626 ck/jp8 words gains 0.0% b (fixed op order; jump-merging frame raises as in #741 were not in the move set), "fewer helpers" is not a gain. | identity CHECKED; SA outcome RECORDED | +| C1 | Provenance census of #656: 492 helpers born at 4 allocation sites: S1 scratch 224, S3 packet copy 156, S4 slot copy 112; κ identity exact. | CHECKED (tags from a recorded rebuild) | +| C2 | The shipped word is a dirty-borrow program, not a clean SLP: 2056 distinct read rows (minimum chain cover 2056), 268 of 422 B-phase helpers are pure dirt, equal to the S3 + S4 sites. | CHECKED | +| C3 | The 112 ports form a cap in F₂⁹ (no three XOR to 0, every hyperplane misses ≥ 48); 8-port blocks sit at dimension ≤ 5. | cap CHECKED; corollary ARGUED | +| G1 | Gauge-free cold-end bound N_cold ≤ Σ_b(\|Q_b\| − rank C[Q_b]); #645 attains 44. | CHECKED on #645; 504 / K480 values RECORDED | +| G2 | Gauge44 is gauge-optimal at 44 for its frame schedule; read-order ceiling 48 (+0.13–0.16% b), home-first legal ceiling 46. | 44 = bound CHECKED; ceilings RECORDED | +| G3 | **Theorem.** A helper can end at a hyperplane U only if the supports of its row of M⁻¹ and its column of M lie in Q_U; covers every reordering and relay strategy. | ARGUED (Lean on #593's package RECORDED) | +| D1 | Complex decoder floor on P112: exactly 8 costly terms give cst ≥ 64 (9 label spans over 440,880 supports); all costly terms β ≥ 8 and n ≥ 9 give cst ≥ 72; n = 8 is infinitesimally rigid up to gauge. Open: mixed β ≤ 7 terms with n ≥ 9. | counts, spans, rigidity CHECKED; step (b), (c) ARGUED; flip-walk logs CHECKED (log) | +| D2 | Any n = 8 exact P112 decoder is D = XA, T = XA⁻ᵀ; absorbing one frame line costs exactly +1 cst, a pair +2 (≈ 272k and 951k sampled cases). | ARGUED; census CHECKED (log) | +| D3 | Non-star complex decoders exist: exact cst 63 on all six single-line P111 punctures, cst 56 on P104. Their buildability price is negative (net −0.1 to −10% b). | hits CHECKED (exact); walks CHECKED (log); price RECORDED | +| D4 | Structured classical decoders cost more than coordinate (64): rotations, WHT, halves 72; coset 4-split 192. | CHECKED | +| S1 | In-place elimination is dead under the shipped frame rules: 0 of 12,432 cross-port in-place pairs legal; 33 illegal reads in every row of M (41.2% of the off-diagonal support). | CHECKED | +| S2 | Spec dependencies of the sink wall: the endpoint operator holds on every role, so target sinks cannot be shared; a full sink forces M_in(X) = 0 only for idempotent labels (non-projection labels open). | ARGUED (citations CHECKED) | +| S3 | R2 (one identical exact representative per gate) is specification; relaxing it to a fixed finite set is unsound as a drop-in (h = 3 toy: 4 of 8 addresses moved). | CHECKED (toy) | +| S4 | Centre descents exist only for the 8 barrier centres of the shipped verifier; the "once per word" premise is false (centre −1 = +22.6% b). | ARGUED (file:line CHECKED) | +| Y1 | Centre/cut facts for M = I − G/2 on 112 D₈-root ports: rank G = 8, cut ranks 6/7/7/8, no weight-4 total in the span of the centres; rank 7 occurs at 8 coordinate splits. | CHECKED | +| Y2 | Full centre delivery is frame-illegal (448 of 456 reads); a 7+1 time-split barrier saves 0%. | rank part CHECKED (8 splits); rest ARGUED / RECORDED | +| F1 | Target fragmentation at the shipped op order: legal ceiling 950 of 1096 ops, loose format bound 229 psi/call (HiGHS-proved maximum 36), S3/S4 reader sets admit no modular chain (0/156, 0/112). | CHECKED for the stated parts; rest RECORDED | +| F2 | Tight-frames wall: legal iff G ⊆ U; slack arises only by deleting ops, time shifts, descents or equal-value re-threading; +1 dimension on any helper pushes 2–8 target frames 8 → 9. | ARGUED; instances RECORDED | +| F3 | S1 block scratch cannot be shared or shortened inside the format: 16 distinct sparse forms per block, 0 of 16 equal twins retireable. | RECORDED | +| F4 | Twin substitution for the 73 frame-insulator helpers fails on #656: all 111 twin reads are value-exact, 0 of 111 are legal one at a time (each raises 2–6 final caps), 0 of 73 helpers deletable. | RECORDED (exact oracle, not shipped) | +| F5 | Re-ordering reads of read-only S3 faces fails on #656: for 27 of the 32 structurally clean faces every B slot from the last write to the copy slot (window ≈ 740–860 ops), in given and reversed reader order, gives 0 legal reads. | RECORDED (exact oracle, not shipped) | +| F6 | The opening miner on the rebuilt #664 word finds 2534 disjoint-lifetime helper pairs; all 2534 need frame growth and none is frame-nested, so 0 register-reuse openings: the same rigidity as #656. | CHECKED (log) | +| O1 | Cross-block totals ("X4" faces): 2688 reach-10 quads all span 4 blocks; ledger 12.21% b (hypothetical design) does not close. | faces CHECKED; ledger RECORDED | +| O2 | #617 → #622 K-triangle ledger on the moment engine: ideal gross +0.52% b for 12 helpers, net +0.0146% after 6 lost cold ends and rewired climbs. | RECORDED | +| App. | **Appendix: conditional candidates** (5 items, each with one blocking condition; none is a result). | unverified | + +Earlier statements this package relies on: sections A–F of #595 (cited as premises) and the words and pipelines of #622, #623, #626, +#635, #645, #646, #649, #656 and #659 read by the checks (see `NOTICE.md`). + + +## 1. Erratum and scope + +*Sections 1-2: commands run from `s1-2-erratum-invoice/`.* + +### E1. Erratum to #595: the ×1.15–2.15 "schedule/ρ family" is a set of dropped idle-frame rules + +**Statement.** #595 (census item 8, open problem 3, B.2 rows 5, 12, 13) describes the multipliers ×1.15 to ×2.15 as the value of "the schedule/ρ +freedom". They are not. Each A.7 variant is `skel.profile` with one rule of the scope dropped (its docstring: "Each variant +… drops one rule"). The three that make up the range, recomputed with #595's own `skel.X`: + +| variant (rule dropped) | complex 112/64, best s / s = 9 | bit 111/63, best s / s = 9 | +|---|---|---| +| idle frame changes free | ×1.68 (s = 7) / ×2.15 | ×1.67 / ×2.14 | +| all idle changes of one copy batched into one child | ×1.20 (s = 7) / ×1.55 | ×1.19 / ×1.55 | +| bridges moved off the idle stretches (no split pre-stretch) | ×1.15 (s = 5) / ×1.18 | ×1.15 / ×1.18 | + +No ρ enters these numbers. The remaining A.7 variants (copy-free, loc_h, window−1) are reproduced by the full mode. + +**Scope.** #595 `a5_scope_multipliers.py` at `b_K` with s ∈ {3,…,13}; complex 112/64 and bit 111/63. It says nothing about +whether a real word could drop an idle rule. +**Status.** CHECKED (numbers); the reading "not a ρ family" is ARGUED from the script's variant definitions (and E2). +**Depends on.** #595. **Check.** `python3 -I -B checks/e1_scope_multipliers.py` (16 s on two processes); +`E1_FULL=1` runs the vendored `a5_scope_multipliers.py` unchanged (all 14 claim lines PASS, 56 s). +**Consequence.** Open problem 3 of #595 should read: the schedule freedom is untested; the idle terms are not evidence for it. + +### E2. ρ is not a verifier input, and no pair-preserving ρ beats B_K at the scalar layer + +**Statement.** (a) ρ is hard-coded as the final bank swap (`columns_k.cpp:56`, `bit_global.py:49-55`), so a ρ sweep +cannot be run as a parameter. (b) Enumerating every pair-preserving monomial target ρ over F₂ with the moves of the format +(pair-local shears Y += X / X += Y at cost 1 local; bridges X_d += X_s, Y_s += Y_d), the reachable set is exactly +Sp(4,2) = 720 (P = 2) and Sp(6,2) = 1,451,520 (P = 3). For every target the minimum number of locals is 0 if no pair is +exchanged and 2k + 1 if k pairs are exchanged (k = number of exchanged pairs); the cheapest cost per exchanged pair is +(2P + 1)/P, attained by the full exchange (5 locals, 3 bridges at P = 2; 7 locals, 6 bridges at P = 3), which is B_K. +So no ρ beats B_K per served pair: multiplier 1.000. + +**Scope.** P ≤ 3 bank pairs, the same ρ on every port, one pair per local. F₂ reduction is a necessary condition, so these +are lower bounds on cost. **Escapes (not enumerated):** non-symplectic or multi-bank locals (P ≥ 4), port-dependent ρ, +K ≥ 4 cyclic bridge graphs. +**Status.** (b) CHECKED (log): `rho01` is compiled and re-run and its output compared byte-for-byte with the shipped +`evidence/E2/rho01_P{2,3}.txt`; an independent Python search reproduces P = 2. (a) ARGUED: file:line from `evidence/E2/R39-S-NOTES.md` +(source files not vendored). +**Depends on.** #595, #622, #623. **Check.** `python3 -I -B checks/e2_rho.py` (2 s). + +## 2. Invoice calculus and prices + +All prices are exact finite differences of the pressure root b, the root a of Σ_r (r n_r / mW)(m/r)^a = 1, over the local +width profile {r: n_r} (Decimal, 50 digits). For #626: m = 73, W = 7168, deficit 2560 (mass = mW − 2560). + +**Provenance of the #626 word data.** The register-level inputs (`inputs/derived/k492_registers.json`) are the climb widths +of every register of the ck and jp8 local words, derived by `tools/derive_registers.py` from the rebuilt `CANONICAL-WORD.json.gz` +files (the rebuild of the words from the #626 code, about 9 min, is RECORDED and not repeated). They are bound to the PR by +check: the word climbs plus the idle remainder {1: 123, 37: 1, 48: 2215} equal the PLAN profile of #626 exactly (`P1.gate-profile`), +and kappa = b/(1 + b) = 0.00163552738037539223… reproduces the README literal 0.001635527380375392 (`P1.gate-kappa`). + +### P1. Complex invoice calculus: the knob table + +| knob (all 72 calls) | change of b | +|---|---| +| remove one centre (local −17, host −9, deficit +576) | **+22.60%** (add one: −22.56%) | +| one cst unit: centre cut climb 8 → 7 / one unit climb dropped | **+2.81%** / +2.82% | +| source end FULL → 8 (one source) / target end 8 → 7 (one target) | +2.81% / +2.81% per unit | +| one port: v → v − 1 (deficit 2496, W − 64) | −2.15%, i.e. a port is worth **+2.15%** | +| one w9 helper removed (ck mean + jp8 mean) | +0.068% (freed width stays one narrow child) / +0.137% (merged into 48-bins) | + +Reading: helper changes are mass-neutral (climb mass = hosted width); only the end frames of non-hosted registers (sources, +targets, centres) move the deficit, and one mass unit per call is worth about 2.8% of b, i.e. 20–40 helpers. The "once per +word" cost of a centre descent is false: a centre is +22.6%. +**Scope.** The #626 invoice at its shipped word: knobs are priced on the invoice, the word is not rebuilt for each. Source, +target and centre knobs use the modal shapes (sources (1,1,1,5) in 140 of 224, targets (1,1,4,1,1) in 104 of 224, all of mass 8; +all 8 centres (1,1,1,1,4,8,1)). **Status.** CHECKED. **Depends on.** #626, #649. +**Check.** `python3 -I -B checks/p1_knobs.py` (1 s). Notes: `evidence/P1/B15-NOTES.md`. + +### P2. Bit invoice calculus (#555 R439) + +**Statement.** The shipped c = 0.001733052823330162099157 is the root of the nine-stage profile with its bad term, reproduced to +24 digits (relative difference 1.2·10⁻²²); mass 1,808,352, deficit 10,272 = 256·111 − 288·63. One cst unit (a child r → r − 1 on +all 288 calls) is +2.8017% c (r = 7) to +2.816% (r = 1); the second unit +5.603% cumulatively. +**RECORDED (word-level, not re-run):** one port +2.15% c (cst-neutral), one helper +0.06–0.11% c (by climb pattern and idle +repack), sources and targets with near-identical knob values (`evidence/P2/B26-NOTES.md`; the script needs the per-register +climbs and takes more than 120 s). +**Scope.** #555 nine-stage word. **Status.** CHECKED (root, mass, cst-unit rows); the rest RECORDED. **Depends on.** #555. +**Check.** `python3 -I -B checks/p2_bit.py` (<1 s). + +### P3. Helper exchange rate + +**Statement.** Removing one helper of width w in all 72 calls (its climbs leave, w returns to the idle cover) changes b of +#649 by, in % (exact mean over all helper registers of that width in the ck and jp8 words): + +| w | shapes | no merge | merged into 48-bins | +|---|---|---|---| +| 9 | 504 | 0.070 | 0.140 | +| 8 | 204 | 0.051 | 0.118 | +| 7 | 104 | 0.038 | 0.101 | +| 5 | 96 | 0.031 | 0.084 | +| 4 | 60 | 0.026 | 0.072 | + +This explains the earlier spread 0.027 / 0.043 / 0.068 / 0.143: it is width (4–9) times the merge rule. The 48-merge column is +an upper bound that needs a re-pack the shipped words do not realise; #646 realises about the no-merge hosting. The profile roots +reproduce kappa of #649, #645, #646, #635 and #626 to 16 digits. (An earlier random-draw table gave 0.0725 / 0.141 for w9; it is withdrawn, and the check now asserts the table above.) +**Scope.** Climb-neutral removal at the #626 shapes on the #649 base profile. **Status.** CHECKED. **Depends on.** #649, #645, +#646, #635, #626. **Check.** `python3 -I -B checks/p3_rate.py` (2 s). Notes: `evidence/P3/B66-NOTES.md`. + +### P4. Stage count s = 9 → 7 gains nothing + +**Statement.** With the geometry m = 1 + 8(2P + 1), W = 2PTv, D = T[2Pv − (2P + 1)cst] and the P = 4 local profile unchanged: +at s = 7 (56 calls) the idle cover is 200,704 against 218,248 of hosted helper residual, an overflow of 17,544 (8.7% of the cover); +fitting needs k = 34.6 w9 helpers cut per call (R 492 → about 457). With the cut, b₇ is only +0.21% / +0.20% / +0.13% above b₉ +at the same R for k = 35 / 40 / 60, while the same cut at s = 9 is worth +5.04% / +5.80% / +8.96%; at k = 234, 300, 480 the order is +s = 9 > 7 > 5 (b·10³: 2.412 / 2.395 / 2.303; 2.783 / 2.749 / 2.611; 4.793 / 4.611 / 4.108). +**Scope.** Model on the #626 per-call profile (P = 4 reproduced exactly); the P = 3 local program was not built, so a lighter +unit-climb profile there is not excluded. **Status.** CHECKED (model). **Depends on.** #626. +**Check.** `python3 -I -B checks/p4_s7.py` (<1 s). Notes: `evidence/P4/B54-NOTES.md`. + +### P5. The climb mass is a forced cover + +**Statement.** The invoice asserts mass = mW − deficit with the deficit 2560 an asserted constant (= 64v − 4608); mass padding +is therefore illegal and moving mass only reshapes it (moving 1% of the unit-climb mass into width-9 climbs would be +0.26% b if +it were legal). Frame simulated annealing over legal frame assignments (fixed op order, 6M moves per run) gains 0.0% b on the #626 ck/jp8 words (scope note: the move set did not include raising a gate frame inside an existing paid chain to merge two jumps; #741, on #699's SW4 word, gains that way, so this row does not bound such merges); (#698 proves the same fixed-order frame optimality exactly for the selected CK supplier's B-phase frames, over all reassignments preserving the scalar circuit, gate order and end-of-B frames; the annealing here is the weaker, sampled statement and is kept only for the climb-mass reading.) about 96% of +the unit mid-chain climbs are blocked by one rule family (common frame at ADD, monotone chains, target end frame perp(port)); +the SSS hourglass word has climb mass 1976 against 6186 shipped, yet "fewer helpers" is not a gain. +**Scope.** Shipped ck/jp8, fixed op order, frame choice only. **Status.** CHECKED (mass identity, local mass per call, the ++0.26% arithmetic); the SA outcome, the blocking histogram and the hourglass comparison are RECORDED (`evidence/P5/B11-NOTES.md`, +`evidence/P5/B3R-NOTES.md`). **Depends on.** #626, #656. **Check.** `python3 -I -B checks/p5_cover.py` (<1 s). + +## 3. Censuses of the frontier word (#656) + +*Sections 3-4: commands run from `s3-4-census-gauges/`.* + +All commands run from this directory; `verify.sh` runs everything below in about 3 s. The words used are +rebuilt artifacts that no PR commits as files; each is vendored with the hash its PR pins (`SOURCES.json`, step 0). + +### C1. Provenance census of #656 (status: CHECKED; allocation tags: CHECKED given `g44-TAGS.json`, whose regeneration is RECORDED) +**Statement.** All 492 helpers of the shipped gauge44 word are born at 3 allocation classes (4 `alloc()` sites): S1 block scratch 224 +(221 + 3 centres), S3 packet copy 156, S4 slot copy 112. Local profile {1:2542, 2:414, 3:434, 4:154, 5:56, 8:8}; the PLAN profile is exactly +72 x local profile + extras {2:4, 3:4, 5:1, 7:1, 16:2, 32:1, 48:2398}; mass 520704 = 73*7168 - 2560; root b = 0.0016568491378023079809..., +kappa = b/(1+b) = 1.654108529511355e-3 (the published value). Narrow mass per call (sum r ln(73/r) over climbs): S1 6902, S3 4430, S4 2754; +helpers 14085 = 68% of register narrow mass (X/Y registers 6637). Shares depend on the metric: 32.3 / 20.7 / 12.9 % of the global narrow +mass (which also holds 31.0% X/Y climbs and 3.1% idle windows), 47.9 / 31.4 / 19.5 % of the helper narrow mass (S1 without centres). +**Scope.** #656 head 0805e78f, shipped layered gauge44 word; the narrow-mass measure is a proxy for price, not a design claim. +**Depends on.** #656, #635. **Check.** `python3 -B checks/c1_census_656.py`. Existing run records: `evidence/C1/` (rebuild step exit codes, ledger tables). +The kappa identity and the local profile use only PR files and the hash-pinned word; the site split uses the tag file from the 9-minute tagged rebuild (not rerun here). + +### C2. The shipped word is a dirty-borrow program, not a clean SLP (status: CHECKED) +**Statement.** On the #626 ck provider word (v = 112, 492 helpers): the 2056 distinct row values that are ever read each have readers forming a +single chain (frame inclusion, time order), so the minimum chain cover is 2056 (2483 value-holder pairs; 259 values held by two registers at different times, never redundantly +live: peak simultaneous redundant live helpers 0, sampled every 20 ops). 268 of the 422 helpers read in B have an all-zero row on the 112 source columns +(pure dirt scratch); the zero-ancilla map is t_p = s_p, while the real target rows have 36-97 terms over the 716 coordinates, so clean-SLP/count models +(BP synthesis, Dilworth, fill) do not describe it. On the #656 gauge44 word the same 268 helpers are, as a set, exactly the S3 + S4 allocation sites of C1 +(previously only the counts 156 + 112 = 268 were known to agree). +**Scope.** fixed op order and values (exact rationals); frames by subspace inclusion; the jp8 provider and the dirt-register model of the B-phase legality rule are RECORDED only (not vendored). +**Depends on.** #626, #656. **Check.** `python3 -B checks/c2_dirty_borrow.py`. + +### C3. The 112 ports form a cap in F2^9 (status: CHECKED for the cap; the dimension corollary ARGUED) +**Statement.** No three ports XOR to 0 and every hyperplane misses at least 48 of them (equality attained). Corollary: k readers' ports span rank r with k <= 2^(r-1) +(a cap of F2^r has at most 2^(r-1) points), so a frame inside their common perp has dim <= 9 - r <= 8 - ceil(log2 k); eight-port blocks sit at dim <= 5 +(sampled: 8-subsets of ports always have rank >= 4). +**Scope.** ck ports of #626. **Depends on.** #626. **Check.** `python3 -B checks/c3_cap_f2_9.py`. + +## 4. Cold ends and gauges + +### G1. Gauge-free cold-end bound (status: CHECKED on #645; the 504 / K480 values RECORDED) +**Statement.** The gauge permutes which registers end low, never how many: N_cold <= sum_b(|Q_b| - rank C[Q_b]) with rank C >= 4 (the 4 pinned totals), +a rank-nullity bound. #645 attains 44: six blocks with |I| = 6 and eight with |I| = 8 (sum |I| = 100), rank Clean = rank M[I, protected] = 4 in every block, +attained pairing rank 2 (short blocks) / 4 (the others). The 504 factory gives 56 (sum |I| = 112) and K480 gives 32 (sum |I| = 88): RECORDED (x646 rebuild, not rerun). +**Scope.** #645 FULL-WORD, exact rationals, frames of dim <= 7, home-first legality unchecked. **Depends on.** #645, #646, #604, #531 (Hamming inputs). +**Check.** `python3 -B checks/g1_gauge_bound.py` (0.4 s). + +### G2. Gauge44 is gauge-optimal for its frame schedule (status: CHECKED for the 44 = bound part; the ceilings RECORDED) +**Statement.** Rank is 4 in all 14 blocks and the attained 44 equals the bound, so more ends need a larger |I| (a different frame schedule). RECORDED from +cards B58/B60/B61/B56: the real read-order ceiling is 48 (+0.13-0.16% b), the 88 of the gauge count is unreachable, six short blocks cannot reach 56 (K-reads lift +locations), the home-first legal ceiling is 46. **Check.** the G1 script (G2 line); `evidence/G2/rep1.log` is the existing log of the #645 rebuild (all steps PASS). + +### G3. Necessary condition for a cold hyperplane end (status: ARGUED; Lean on #593's package RECORDED, none added) +**Theorem.** In the monotone-frame model (no descents), fixed forward word with state map M, cleanup any gate sequence with G M = I: a helper h can end at a +hyperplane U only if supp(row_h M^-1) and supp(col_h M) both lie in Q_U = {registers whose end-of-B frame is inside U}. +**Proof sketch.** Every gate touching h has frame inside U; a gate whose frame is not inside U shares no register with a later h-gate, so it commutes after it. Hence +G = R_h P_h with P_h acting only on Q_U and R_h fixing h; row_h(G) = row_h(P_h) and M e_h = P_h^-1 e_h. This covers every reordering, toggling and relay strategy +(only the factorisation of M^-1 is free). Conversely a biorthogonal family supported in Q_{U_i} is realised by block elimination followed by a FULL-frame cleanup. +The column (dirt) condition corrects all earlier row-only counts. Multi-gate cold wrappers are covered by `HyperplaneEnd/Multi.lean` on #593's package (existing, not rerun). +**Scope.** monotone frames and a fixed forward word; the "14 at d <= 5" cap of the fixed-content premix analysis is superseded by G1 and must not be quoted. +**Depends on.** #593, #591, #604, #617. **Check.** none (argument); no solver evidence exists for this row. + +Evidence note: rows C1-C3 and G1-G3 used no SAT, CP-SAT or DRAT; the only shipped logs are the rebuild records under `evidence/`, pinned by sha256 in `SOURCES.json`. + +## 5. Decoder floors + +*Sections 5-6: commands run from `s5-6-decoders-spec/`.* + +Model for D1-D4 (checks/e8model.py): P112 = the 120 E8 root lines minus the 8 frame lines e_{2a} +- e_{2a+1}; each line has a label in F2^9; a decoder is a set of terms (d_k, t_k) with sum_k d_k t_k^T = M4 = 2G on the kept lines (G the integer E8 inner products); the cost of a term with row support R and column support A is the F2 rank of the label pairing U(R) x U(A) (the Theorem C pairing rank of #595 C.3), and cst is the sum over terms. The coordinate decoder (8 stars) has cst 64. + +### D1. Complex decoder floor on P112 +- **Statement.** (a) Reduction: a term with R x A inside the label-orthogonal pairs (N = 0) costs 0, and all 5824 such entries of M4 are nonzero, so they are fixed for free; exactness only constrains the E-graph (N = 1, 60 per row, diagonal included): x_i . y_j = 0 on even-inner-product pairs, x_i . y_i = 4. (b) With exactly 8 costly terms (rank_Q K = 8) every term is supported on the complement of a hyperplane flat; the 440,880 distinct such supports have only 9 distinct label spans (eight of dimension 8, one of dimension 9), every pair has pairing rank >= 8, so cst >= 64, attained by the coordinate decoder. (c) THEOREM (trivial): if every costly term has beta >= 8 and n >= 9 then cst >= 72. (d) The n = 8 system is infinitesimally rigid at the coordinate point up to gauge (tangent nullity 175 = 64 + 112 - 1). (e) The frame-substitution bound cannot prune mixed-beta decoders: the E-graph has exactly 1260 cliques of size 8 (none of size 9); the best (fraction of frames hit)/beta over the searched label-span pairs is 1/8 at beta 8 but 0.1825 at beta 4, 1/6 at beta 6 (a beta-6 pair hits all 1260 frames) and 1/7 at beta 7, so the covering bound is only 8/0.1825 = 43.8 < 64. +- **Prior work.** #620 (GamingPuzzled) already states a complex P112 frame decoder of cost 64 (`cxp.py`) and that deeper punctures were worse in a search (not exhaustive). New here: the 8-term hyperplane-flat census, the rigidity (d), and the beta >= 8 bound (c). +- **Scope.** P112, linear pairing-rank model, real coefficients. (b)-(c) cover exactly the decoders all of whose costly terms are hyperplane-flat supports. Open: decoders with n >= 9 mixing beta <= 7 terms (a cost < 64 would have to live there); the rigidity in (d) is the tangent space at one point (global rigidity was only sampled: 10 of 12 random-start solves converge, all to gauge-equivalent solutions; RECORDED, not shipped); the maximum in (e) is over hyperplane and random codim <= 3 pairs (sampled, not exhaustive over subspace pairs, and the bound only falls if a larger ratio exists). +- **Status.** CHECKED for (a), (b) support/span counts and minimum rank, (d), (e); (b)'s step "supports of an 8-term decoder are hyperplane flats = W(E8) orbits of the fundamental weights" is ARGUED (rigidity (d) plus the orbit census); (c) is ARGUED (one line). CHECKED (log): the shipped flip-walk logs on P112 (three walkers, ~1.5e8 iterations) found no state below cost 64 and no state with n > 8 at cost <= 64 (evidence/D2/d1-d3.out). No SAT/CP-SAT proof exists for the n >= 9 hole: both attempted runs (B14 CP-SAT symmetric ternary lift; B72 CaDiCaL support relaxation, 23,904 variables, 1,540,851 clauses) were killed without a result (exit 143; evidence/D1/); no UNSAT claim and no DRAT file are made. +- **Depends on.** #595 (C.3, Theorem C), #446. +- **Check.** `cd checks && python3 -B d1_decoder_floor.py` (15 s), `python3 -B d1_frames.py` (20 s), `python3 -B log_checks.py` (<1 s). + +### D2. An n = 8 exact P112 decoder extends uniquely, at +1 per absorbed line +- **Statement.** Any exact n = 8 decoder of P112 is D = XA, T = X A^{-T} with X the coordinate decoder and A in GL8 (rank-8 factorisation rigidity, D1(d)); hence its extension to a frame line j is unique (new entries d_k[j] = 2A[j,k], t_k[j] = 2(A^{-T})[j,k]), so absorbing a line is a pure cost question. Over 33,981 sampled cost-64 plateau states of three walks: absorbing one frame line costs exactly +1 (271,848 cases) and absorbing a pair costs exactly +2 (951,468 cases), always integer-valued and exact. So P113 = 65 and P114 = 66 at n = 8; the walk on P113 (two walkers, ~2e8 iterations each) never went below 65. +- **Scope.** n = 8 states; census sampled on the walk's plateau (not a proof of gauge invariance of the +1); P115/P116 not run. +- **Status.** ARGUED (uniqueness) + CHECKED (log) for the census and the P113 walks (evidence/D2/cen1-3.out, w1-2.out). The state dumps and the census script are not shipped. +- **Depends on.** D1. +- **Check.** `python3 -B checks/log_checks.py`. + +### D3. Non-star complex decoders exist on P111 and P104 +- **Statement.** (a) For each of six single-line punctures of P112 (lines 0, 1, 30 of D8 type; 48, 70, 111 of half-spin type) there is an exact 8-term decoder of cost 63: seven terms of cost 8 and one of cost 7, coefficients up to 3; for punctures 0 and 111 also with coefficients in {-2..2}. With coefficients in {-1,0,1} the same walk stays at 64 (60 s, may be walker-limited). (b) For P104 = P112 minus the 8-clique drawn by `numpy.random.default_rng(1)` (lines 9, 15, 24, 46, 52, 66, 94, 104; pairwise label-nonorthogonal) there are exact 8-term decoders of cost 56 (eight terms of cost 7), found by three independent walkers. (c) Flip-walk logs: on P111 the walks also visit states with n up to 11 at cost <= 64, unlike P112 where none exists (D1). +- **Scope.** The decoder model above; no word is built from these decoders. Their buildability price is RECORDED, not shipped: the parity cost of unpaired centre reads (>= 78), 96 pair-split conflicts and net -0.1..-10% b, and the emitter hard-wires the coordinate decoder. +- **Status.** CHECKED (exactness, n, per-term costs of 8 + 3 hit files); CHECKED (log) for the walks (evidence/D3/); price RECORDED. Bit-side P111 63 is #620's result and is not repeated. Relation to prior work: #620's sampled search found deeper complex punctures worse; the exact cst 56 on P104 (56/104 < 64/112) here contradicts that sampled statement on the complex side. #631 proves that no puncture of up to 35 lines improves the star ratio 63/111; the P104 decoder is non-star, so the two do not conflict. +- **Depends on.** D1, #595 (C.3), #531. +- **Check.** `cd checks && python3 -B d3_punctures.py` (<1 s). + +### D4. Structured classical decoders cost more than the coordinate decoder +- **Statement.** In the copy-cost model on P112: coordinate 64; D2-butterfly pairs (2a,2a+1), halves (j,j+4), D4 Hadamard, permuted pairs and the full Walsh-Hadamard transform all 72; the D8 / half-spin coset 4-split is n = 32 terms of beta 6 each, cst 192. On all 112 single-puncture P111s the values are constantly 64, 72, 72 and 192. +- **Scope.** These linear front ends only (Conway-Sloane / Forney / trellis decoders are non-quadratic; the model sees only which functionals feed the quadratic form). No bit-unit run. +- **Status.** CHECKED. +- **Depends on.** D1. +- **Check.** `cd checks && python3 -B d4_structured.py` (3 s). + +## 6. What the spec and verifier actually require + +### S1. In-place elimination is dead under the shipped frame rules +- **Statement.** In the ck word of #622/#626 the end frame of target t is perp(port_t) and no port lies in its own end frame (0/112). Hence a cross-port in-place operation t_a += l t_b (common frame span{port_a, port_b, port_a ^ port_b} inside both end frames) is legal for 0 of the 12,432 ordered pairs; the legal target-from-source reads are exactly 5824 (port_b in perp(port_a)), none diagonal. The content map M (112 x 112, rank 112, 9072 nonzeros) recomputed by exact replay of the A, B and cut phases has 5264 of its 8960 off-diagonal entries inside the legal read mask; every row needs exactly 33 illegal reads (3696 = 41.2% of the off-diagonal support). So PMH/Gauss/lifting/Steiner/Tellegen-type eliminations, which need in-place or direct reads of the whole support of M, reduce to this wall. +- **Scope.** The ck canonical word, frames as F2^9 subspaces, monotone nested per register, one common frame per ADD. **Erratum to the candidate note:** an earlier figure, 4164 of 8960 legal (54% illegal, 35-52 illegal reads per row), came from a port-indexing mismatch: the content map of the #656 FULL-WORD was read through the ck word's port mask. With its own ports that FULL-WORD also gives 5264 legal and 33 illegal reads per row, the same as ck. The figure is not a property of any word and is withdrawn. The qualitative statement (0 in-place edges, every row needs illegal reads, M of full rank on both sides) is unchanged. +- **Status.** CHECKED. +- **Depends on.** #626, #595 (Lemma N). +- **Check.** `cd checks && python3 -B s1_inplace.py` (<1 s). Input inputs/pr626/ck-CANONICAL-WORD.json.gz (blob 58cd1be8 of #656 head 0805e78f). + +### S2. The spec dependencies of the sink wall +- **Statement.** (i) The shear contract M_out(rho(w)) - M_in(w) = I_m must hold on every role including scratch roles (04-swap.tex:117-121, 183-187), with rho a permutation (105-109); so a target sink is determined by its partner's source and sinks cannot be shared among targets. (ii) For the projection motif the source is -P_{U_a} and the sink P_{U_a^perp} (03-motifs.tex:469-473, 519-525), so a FULL sink forces M_in(X_a) = 0 for idempotent labels; for general rational labels the saving per pair is still <= m (floor rank(I+T-S)+rank(I+S-T) >= m), a pair that saves pays its whole saving on a direct self-read, and excess is integer per wire, but the sink charge >= 1 is NOT proved for non-projection labels (toy over F_3, m <= 3: only a two-class design reads cheaper, <= ~25% of pairs, priced 0.0% for the two-class design). (iii) Nesting is essential only for the premise of Theorem A; other uses (edge ranks, deficit identity, Lean exactness) are replaceable by a non-nested step priced d(f,g) = dim f + dim g - 2 dim(f cap g); the cheapest non-nested step is a rank-1 descent plus re-climb = 2 mass per call (-5.6% b at the 2.81% per unit invoice). (iv) Calls equal the sum of edge ranks, each on one role stream (04-swap.tex:197-199), so corrections on different roles do not share a call. +- **Scope.** Motifs with projection or subspace labels; non-projection rational labels are neither excluded nor realised. Open problem: a lower bound for arbitrary contract-satisfying circuits. +- **Status.** ARGUED; the quoted lines are CHECKED by checks/anchors.py (spec files of main at 66849e1, vendored under inputs/main/ and pinned by blob id). The charge arithmetic (2.81% per unit) is row P1. +- **Depends on.** #595 (B, C.1, C.7). +- **Check.** `python3 -B checks/anchors.py`. + +### S3. Rule R2 is specification, and a relaxed R2 is not a drop-in +- **Statement.** R2 (one identical exact representative on all registers incident to a scalar gate; notes/general-clifford-frames.tex:61-65) is what makes the word compute M tensor I; the verifier mirrors it at label level (hpe_audit_local.py:75, `assert cur[r[1]]==f`) and the Lean tree does not encode it. Relaxing it to representatives differing by a right logical permutation from a fixed finite set is unsound as a drop-in: in the h = 3 exact-Clifford toy the gate's logical effect is a permutation with 4 of 8 addresses moved instead of the identity; a sideways label gives a non-monomial map moving 8 of 8; the group-ring span of S3 on 3 qubits has dimension 5 of 64, so cancellations are not available. +- **Scope.** The toy is h = 3, a single physical add; the general soundness failure (non-uniform twists) is ARGUED in the cited paper rule, not exhibited for a full word. +- **Status.** CHECKED (toy); citations CHECKED by anchors.py. +- **Depends on.** #595 (B, C.6). +- **Check.** `cd checks && python3 -B s3_r2_toy.py` (<1 s). + +### S4. Centre descents exist only for the 8 barrier centres +- **Statement.** The shipped verifier (inputs/pr622/coupled_frames_base.py) accepts a frame descent only for the registers declared `centers`: they are barrier nodes at the A/B cut (lines 95-99), each descends through a strictly nested chain of the frames of its cut readers (:144-148, error `center descent not nested`), billed one counter entry per rank step; every other register chain must be monotone (:163, `nonmonotone`) and a change at a barrier node is refused (:164-165, `unbilled cut transition`); end-of-B finals are FULL (non-port) or the fixed hyperplane perp(port) (ports) (:100-108). Consequences: hubs/helpers cannot use descents (they are dirty and read in phase B); the premise "a descent is paid once per word, 72x cheaper" is false, since the local program runs in every call (centre -1 = +22.6% b in the invoice calculus, section 2, P1); promoting hubs to centres fails on the role (clean private scratch, no B events). The count 8 is a convention; the role is the obstacle. +- **Scope.** The shipped verifier and the #622/#623 words; a Lean statement for a hoisted descent does not exist. +- **Status.** ARGUED; file:line citations CHECKED by anchors.py. +- **Depends on.** #622, #623, #595 (C.7). +- **Check.** `python3 -B checks/anchors.py`. + +## 7. Centre barrier + +*Sections 7-9: commands run from `s7-9-centre-fragmentation/`.* + +Object: the 112 D8-root lines of the complex unit (blocks = 8 consecutive lines on one octad), `R` = `root_lines` and `M` = exact replay of the A, B and cut phases of the #656 word (`inputs/pr656-FULL-WORD.json.gz`); `M` is equal up to port relabelling to the content map of the #623 `ck` provider (eigenvalues and row multisets agree; only 52 port labels are shared, so it is not elementwise equal). + +### Y1. Cut ranks, centre supports, totals (CHECKED, with one caveat) +- rank G = rank RᵀR = 8; matched-order cut ranks of M at sizes 14/28/56/84 are 6/7/7/8 (prefixes, not a smaller state). +- Random 56|56 bipartitions (2000, seeded): off-diagonal rank at most 8 (a sample). Of the 1716 splits of the 14 blocks into 7|7, **1708 have off-diagonal rank 8 and 8 have rank 7**; the 8 exceptions are the coordinate splits (lines with R[:,j]=0 versus not). So "rank 8 at every cut" is false as stated: rank 7 occurs at those 8 splits, and the argument that no centre is saved rests on Y2's price argument, not on rank. +- The centre code R mod 2 has nonzero F2 weights exactly {56 (128 vectors), 64 (112 vectors)} and a 4-dimensional kernel (15 of the 255 nonzero coefficient vectors map to 0, so there are 16 distinct codewords: 8 of weight 56 and 7 of weight 64 plus 0; the counts 128 and 112 count coefficient vectors). Over Q the minimum support of a centre combination is 53 among 20000 seeded hyperplane normals (an upper bound on the true minimum); ARGUED lower bound: the 120 lines (112 rows plus the 8 lines 2e_i, a reflection-closed set; closure is checked here only partly, with the first 60 of the 240 roots as reflectors) have at most 63 lines in any hyperplane (the largest proper root subsystem of E8 is E7, 126 roots), so every nonzero centre combination has support at least 49 > 4. Hence no weight-4 cross-block total lies in the span of the centres; each such total adds exactly +1 rank (300 seeded totals). +- Scope: M on these 112 lines with the coordinate decoder. Totals defined target-side or in another basis are not covered (the span of the centres and a block's 8 target rows does contain the block's local forms: RECORDED, `evidence/Y1/B10-NOTES.md`). +- Depends on: #656 (word), #626, #595. Check: `y1_centre_cut.py`. Records: `evidence/Y1/`. + +### Y2. Full centre delivery and a 7+1 time-split barrier (partly CHECKED, mostly RECORDED/ARGUED) +- CHECKED: for the 8 coordinate 56|56 splits, rank (G_AB, G_AA, G_BB) = (7, 7, 8). The recorded claim "on all 56|56 splits" was only run on these 8 splits and is stated as such. +- ARGUED (`evidence/Y2/B106-NOTES.md`): a time-shared 7+1 schedule is algebraically fine but keeps 8 decoder terms (cst 64 = 8 x beta 8), so the invoice saving is 0 unless the extra term has beta < 8; a second descent epoch is a new skeleton role (descents are legal only at the barrier node before B, row S4), against the price of at least 5.6% b per rank-1 descent (#595 C.7). +- RECORDED, NOT reproduced: frame-illegality of full centre delivery (448 of 456 (target, centre) reads violate; a centre read is legal only for t = f_i, the shipped cut). The script (`B101 gate.py`) needs PROTOTYPE.json of the #656 rebuild, which was not found; the record is `evidence/Y2/B101-NOTES.md`. +- Depends on: Y1, S4. Check: `y1_centre_cut.py` (the y2 line). + +## 8. Fragmentation and rigidity of the shipped word + +### F1. Target fragmentation is forced at the shipped op order (CHECKED for the stated parts) +Overlap: #698 (thakrarsagar) certifies exactly that the selected CK supplier's B-phase frames minimise the paid moment over all frame reassignments preserving the scalar circuit, gate order and end-of-B frames (474 of 1930 B gates have freedom). The fixed-order frame-ceiling statements below are cited to #698; what is distinct here is the target end-frame cascade, the S3/S4 reader-chain and carrier counts, and the format-level bound. +Provenance correction: the frame-level checks use the `ck` (8 calls) and `jp8` (64 calls) K-triangle provider words of #622/#623 (copies inside #656 at `research/community-k492-audit/pr622/replay/*-local/CANONICAL-WORD.json.gz`), not #656's own layered word (their local profiles differ). The S3/S4 packet checks use a record of the rebuilt #656 word. +- CHECKED (`f1_frag.py`, both providers): 1096 target-touching ops, 950 already at the legal reverse-closure ceiling U, 146 with one dimension of slack. Setting every op to U is legal and costs +520 (ck) / +700 (jp8) psi per call. Setting only the target ops to U is **not** a legal assignment (50 non-monotone climbs); its model value is -5.6 psi per call (T +2.7, helpers -5.5, sources -2.8), far below the 65 psi GO line, and is indicative only. The earlier phrase "legal ceiling, net -5.6" should be read this way. +- CHECKED (ck): target fragmentation 1342 psi/call; the port-cap ceiling (direct ports of an operand's unserved readers, shipped reader order) would allow 614 psi/call, a loose bound that ignores all other constraints on the operand ("70 percent of target ops are held below the port cap by helper and source partners" is a recorded figure, not checked here). +- CHECKED (`f1_pack.py`): the format-level bound. Each target that reads some operand as a non-last reader has a stop at dimension d < 8 and pays at least 3.014 psi. The largest set of targets that can be last readers of all their operands is an independent set of 112 vertices; HiGHS proves the maximum is **36**, so the bound is 3.014 x 76 = 229.08 psi/call (the earlier time-capped search found the same 36 without proof). Loose: it uses only SPEC plus cap geometry. +- CHECKED (`f1_s3s4.py`, from the derived record `inputs/b82-rec.json`; the derivation is RECORDED, not re-run): the 156 S3 packets (8 readers, rank 5) and 112 S4 slots (4 readers, rank 3) are all dependent reader sets; none admits a maximal chain of modular flats (0/156, 0/112; S4 is U(3,4)). At copy time the copy frame is orthogonal to all reader ports (268/268), so the obstruction is the later reads (0/124 legal at first read: RECORDED, `evidence/F1/B82-NOTES.md`). +- CHECKED (`f1_carriers.py`): the 112 ports form a cap in F2^9; each source has 52 readers; cap-aware greedy coverings by port quads need 14.29 carriers per source (14 to 15; lower bound 13), 1601 in all. The comparison with the saving (carriers cost about 12.5 psi hosting each, at most 905 psi/call to gain) uses booked rates: RECORDED. +- RECORDED: format-level loose bound gap at least 1004 psi/call (at most about +5.5% b); order-free loose bound 2478 psi/call (uncalibrated); no skeleton-free bound. +- Scope: fixed op order and DAG, A+B+tail ops; other orders open. Depends on: #622, #623, #656, #659. #661 treats a different object (bit R420), cited. Records: `evidence/F1/`. + +### F2. Tight-frames wall (ARGUED; instances RECORDED) +Fixed-order frame optimality of a single supplier is #698's exact certificate (cited); the wall below is the word-level statement across ops, and the instances are about deleting or moving ops, which #698's domain excludes. +The minimal frame G(r,t) is the join of start frames over time-respecting undirected journeys and the cap U is the meet of locked frames forward; a frame assignment is legal iff G is inside U. Adding ops only grows G and shrinks U, so slack arises only by deleting ops, time shifts, descents (8 barrier centres) or re-threading at equal value. Instances (RECORDED, `evidence/F2/`): one extra dimension on any helper frame pushes 2 to 8 target end frames from 8 to 9 (#656, #659, #646 words); early uncompute or reuse of A-only S1 scratch is blocked by the single common frame of the uncompute ADD (0/67 legal, #656; 0/67 on #659); dyadic S1 programs, rematerialisation, equal-value re-threading and scaled swap-back windows (up to 58,961) lower no frame. Lesson recorded in B107: a frames-only deletion price (-176 mass/call) was not value-exact, so every deletion card must replay values first. Scope: shipped #656/#659 at fixed order and DAG. Depends on: #656, #659, #664. #665 (rehosting boundary) is a different instance. + +### F3. S1 block scratch is not shareable or shortenable inside the format (RECORDED) +The 16 scratch per block are distinct sparse forms (rank 8 to 9 of an overcomplete 24-form Haar/Walsh frame); gauge-exchangeable copies g2 = 0; the 16 equal twins are value-forced (0 of 16 retireable); block frames meet pairwise in dimension 2 (91/91) but 80 of 132 registers have frame dimension 3 to 4, so no cross-block mix has a common frame; the 154 required forms are distinct and none is a 2-term combination. Scope: #656 S1, exact value replay (cards B90-B97; no scripts are kept for B92/B94/B97). Not re-run. Depends on: #656. Records: `evidence/F3/`. + +### F4. Twin substitution does not remove the frame-insulator helpers (RECORDED negative) +**Statement.** On #656, at every read of 73 helpers (62 S3 copies and 11 S1 scratch) another register holds a multiple of the helper's value. Replacing each read by a read of that twin gives 111 twin reads, all value-exact; 0 of 111 are frame-legal one at a time, and each substitution raises 2–6 final caps. So 0 of 73 helpers can be deleted this way. +**Scope.** #656 at its shipped op order, one substitution at a time; the exact whole-word oracle (values, frames, κ; 0.04 s per evaluation). Joint or reordered substitutions are not covered (F2). +**Status.** RECORDED: the oracle and its run are not shipped in this package. **Depends on.** #656. + +### F5. Meet-frame reads of read-only S3 copies are not legal (RECORDED negative) +**Statement.** 116 of the 156 S3 copies are read-only after the copy; each face's frame lies inside the orthogonal of exactly its 8 readers (meet of dimension 5). For about 27 of the 32 structurally clean faces, every B slot from the face's last write to its copy slot (window about 740–860 ops) was tried, in the given and in reversed reader order: 0 legal reads. +**Scope.** #656 shipped word, the 27 faces tried, the stated orders. **Status.** RECORDED (exact oracle, not shipped). **Depends on.** #656, row F1. + +### F6. The opening miner finds no register-reuse opening on #664 (CHECKED (log) negative) +**Statement.** On the rebuilt #664 word the miner (the #656 miner of F2) lists 2534 disjoint-lifetime helper pairs. All 2534 need frame growth (`grow` 2534) and none is frame-nested, so there are 0 register-reuse openings. This is the same rigidity as on #656, although #664 spends entrance G < U slack on three promotion groups. +**Scope.** Disjoint-lifetime helper pairs of #664 only; the other miner categories (one-dimension-growth renames, idle-gap hosting, equal-content pairs) are not part of the shipped log. +**Status.** CHECKED (log): `evidence/F6/miner664_run1.out` and the job summary `evidence/F6/B105_miner664.log` are sha256-pinned; the miner and the rebuilt #664 word are not shipped, so the run is not repeated. **Depends on.** #664, #656, F2. + +## 9. Ledgers for skeleton changes + +### O1. Cross-block totals ("X4" faces) (faces CHECKED; ledger RECORDED) +- CHECKED (`o1_faces.py`): over all 1001 x 4096 quads of lines in four distinct blocks, exactly 2688 faces have effective reach 10 (own-block readers excluded, sign-consistent) and none exceeds 10; all span 4 blocks. Their 2688 forms span Q^112, and 56 random faces have rank 56 beyond the 8 centres. A greedy pair-sharing supply of 56 random faces needs 103 to 112 distinct pair registers (seeded; recorded 105 to 112); a clustered choice of 56 faces needs 30 but is not available for a real cover. +- RECORDED (`evidence/O1/`, quads with fewer than 4 blocks and raw reach): raw reach at least 10 gives 24192 faces, all spanning 4 blocks; the legal block partition is unique (14 extended-Hamming octads for the 8-frame deleted); a best unconstrained partition leaves 20681 of 24192 faces spanning 3 or more blocks; overlapping cells confine at most 32 percent at the extra-copy budget. +- RECORDED ledger (J21-K model, hypothetical design, no shipped word): charge 12.21 percent b = S-type 4.2 + totals/cut timing 8.01 (56 totals x 0.143; arithmetic checked, rates booked); best-case net below 0; the 0.143 rate is about 1 times the merged w9 rate of row P3 (0.140) and 2 times its no-merge rate (0.070); it is 3 times only O2's 0.043. +- Depends on: #531, #626. + +### O2. #617 to #622 K-triangle ledger (RECORDED) +Priced with the package's moment engine (b617 reproduced): ideal gross +0.52 percent b for 12 helpers (0.043 percent each), climbs of 48 rewired reads -0.2, 6 lost second cold ends -0.19, net +0.0146 percent; atom-family ceiling about +0.4 percent; per incidence a triangle trades 3 helpers for 3 cold ends. Consistent with #646's own measurement. Not re-run (`evidence/O2/B2-NOTES.md`). Depends on: #617, #622, #646. + +## Open problems + +1. **Mixed-β decoders with n ≥ 9** (D1): a cst below 64 on P112 would have to mix terms with β ≤ 7; no proof and no counterexample. +2. **An order-free fragmentation ceiling** (F1, F2): the order-free loose bound (2478 psi/call) is uncalibrated; no skeleton-free bound exists. +3. **Non-projection rational labels** (S2): the sink charge ≥ 1 is not proved for them. +4. **A frame schedule with |I| > 8 per block** (G1, G2): more cold ends need a larger |I|, i.e. a different schedule. +5. **Value-exact re-threading beyond the fixed order and DAG** (F2): a frames-only deletion price is not value-exact; every deletion must be replayed on values first. + +## Appendix: Conditional candidates (unverified: could work IF…) + +None of these is a result. Each item has a measured fact behind it and exactly one blocking condition. If the condition holds, the gain follows from numbers already measured. Every number is from an exact replay of #656 unless noted otherwise. Prices use the settled helper rate of row P3 (+0.070% b per width-9 helper removed, or +0.140% if its width is merged; the earlier 0.0725 / 0.141 is withdrawn). We are not pursuing these. Two earlier candidates (twin substitution, meet-frame reads) were tested and failed; they are rows F4 and F5. + +1. **Drop the never-read S1 scratch (≈ +2% b, est.).** + - Measured: in 9 of 14 blocks, 2–4 S1 scratch registers are never read after phase A. Dyadic A-programs with 12–14 scratch reproduce the end-of-A rows exactly. + - This works IF there is such a program whose 8 lines end phase A at frame dim ≤ 2–3, their shipped frames. The current dyadic programs leave the lines at frame 4, which forces all 112 target end frames from 8 to 9. + - Check: frames range over only 67 subspaces of a 4-dim label space per block, so a frame-bounded search per block (one value solve per frame schedule) settles it. + - Update (post-submission, unverified here): mostly answered negatively. For the 11 eight-line S1 blocks, given the shipped end-of-A frames, a frame-constrained re-synthesis shows the block needs all 16 of its registers (a forced-matching argument). Still open: blocks (0,1,*), where lines can act as couriers, and the case where later readers' true caps replace the shipped end-of-A frames as the bounds. + +2. **Single-packet S4 via coefficient reads (≤ 112 helpers, net ≤ +1.96% b).** + - Measured: all 28 S4 four-cycles admit one-packet coefficient reads if the targets are still empty. Coefficient ADDs into targets are SPEC-legal. (Related: #683 prices a mixed K/M face bypass and finds four carriers are forced; a different object.) + - This works IF the ~252 target adds can be deferred past M-ready while polluting only sources whose caps already contain the key frames. Deferring them all naively gives 619 illegal ops. + - Check: choose deferrals per source, interleaved, and run the oracle. + - Update (post-submission, unverified here): answered negatively. 18 of the 28 deferred S4 adds are illegal even when deferred alone, checked exactly on cycles 0–1. So this item is closed as stated. + +3. **Order-free frame slack on #656 (reordering of commuting ops; up to a few % b, nominal bound ≈ 8% is an over-report).** + - Measured: the order-free dimension relaxation allows 2478 psi/call against shipped fragmentation 20,337. At the fixed shipped order the exact legal gain is 0 (supported by #698 for the CK B phase and by row F1: 950 of 1096 target ops at ceiling and an all-at-U assignment costing +520, not gaining). The relaxation could not be calibrated (its fixed-order value is 568 psi where the exact one is 0). Random topological re-creations of three blocks' S3/S4 threading (19 runs) all landed on exactly the shipped cost, so the open part is the S1 / phase-A order. + - This works IF the exact frame-level model over the word's 1041 frames (row F2: G(r,t) = join of start frames over time-respecting journeys, legal iff G ⊆ U) gives nonzero slack for some topological order. + - Check: the exact per-op minimal-frame bound over the dependency DAG with earliest-possible-time order, compared with the fixed-order ceiling 0; report the first order-free increment in psi per block. + +4. **Radix-4 / wide first climb for S1 scratch (≤ +3.4% b gross; net likely 0 to +1.5%).** + - Measured: a register owed to k targets sits at dim ≤ 8 − ⌈log₂ k⌉ (row C3). A w1 → w2 climb is worth about 745 psi and w1 → w3 about 1180 psi gross, against a cap of about 980 psi (≈ +4.72% b). Unit pieces are 34.8% of D on #649. Break-even is about 47 extra width-9-equivalent births. + - This works IF a radix-4 step for S1 scratch costs fewer births than it saves. On the face ladder, fused rungs lost sharing (+168 births, −12 to −24% b); S1 scratch is not shared across keys, so that loss may not apply. + - Check: take one S1 block, replace one binary pair of unit climbs by a single w1 → w3 jump with the extra registers the geometry needs, price with the exact root on #649's profile, count births. + +5. **Partner-merge of pure-dirt helpers into idle hosts, under op reordering (≈ +0.2 to +1.1% b, loose).** + - Measured: of the 268 pure-dirt helpers (row C2), 216 pass semantic exactness under a host swap and 96 have a source idle for their whole life. A static parity census passes 495 of 1668 pairs (near chance: 417 expected), covering 71 of the 96 helpers. At the fixed order all 96 violate G ⊆ U. + - This works IF some op order (the same reordering as item 3) makes the host swap frame-legal. + - Check: run item 3's order-free G / U computation restricted to the 71 candidate pairs and count the legal ones exactly. + +## Notes + +- **Base:** this branch is cut from main (`66849e14`) and touches only `research/format-limits-2/`. +- **Inputs:** vendored inputs are pinned by PR blob id (and sha256) in `SOURCES.json`: byte copies from PRs #531, #555, #595, #622, #626, #635, #645, #646, #649 and #656, three spec files of main, and rebuilt words pinned by the hashes their PRs publish. Existing run logs and card records are shipped unchanged under `evidence/` (sha256-pinned), except that absolute local paths, a personal name or CRLF line endings were removed from six of them (listed in `SOURCES.json`, `scrubbed`). Requirements are pinned. No SAT, CP-SAT or DRAT artefact exists for these rows (two CP-SAT / CaDiCaL attempts on the D1 hole were killed without a result; no UNSAT claim is made); the one solver run (HiGHS MILP, F1) is re-run in `verify.sh`. No Lean was added. +- **Errata found in our own earlier claims:** + - E1: #595's "schedule/ρ family" reading (census item 8, open problem 3; the A.7 table itself already says "rule dropped") is withdrawn. + - S1: the earlier figure "4164 of 8960 off-diagonal entries legal, 35–52 illegal reads per row" came from a port-indexing mismatch (the #656 FULL-WORD content map read through the ck word's port mask) and is withdrawn; with its own ports that word also gives 5264 legal and exactly 33 illegal reads per row, as the ck word does. + - Y1: "rank 8 at every cut" is false as stated; rank 7 occurs at the 8 coordinate splits. + - Y2: "on all 56|56 splits" was run only on the 8 coordinate splits. + - F1: the frame-level checks use the ck / jp8 provider words of #622 / #623, not #656's own layered word; "legal ceiling, net −5.6" is a model value of an illegal assignment and is indicative only. + - P3: an earlier random-draw rate table (0.0725 / 0.141 for w9) is replaced by exact means (0.070 / 0.140). + - G3: the "14 at d ≤ 5" cap of an earlier fixed-content premix analysis is superseded by G1 and must not be quoted. + - C1/C2: allocation classes are 3 (4 `alloc()` sites); the 268 pure-dirt helpers are now shown equal, as a set, to the S3 + S4 sites. +- **Not reproduced here (RECORDED only):** word-level knob tables (P2), the Y2 frame-illegality gate (needs a rebuilt prototype file), the 9-minute tagged rebuild of the #656 word (C1), the S1 scratch notes of F3, and the oracle runs of F4 / F5. +- **Overlap check:** #698 (thakrarsagar) certifies fixed-order, fixed-end-frame optimality of the selected CK supplier's B-phase frames; P5 (frame annealing), F1 and F2 cite it and keep only what is distinct (target end-frame cascade, word-level rigidity under +1 dimension, the #664 miner F6, insulators F4). #697 is a RAM-model construction and does not overlap. #683 (partial K/M face bypass needs four carriers) and #687 (a K-triangle single-read relocation neighbourhood) study different objects from every row here (O2 is a pricing ledger of #617 → #622; appendix item 2 is only related to #683); they are credited in `NOTICE.md` and no row was dropped. #620 and #631 are cited in D1 and D3, #661 and #665 where related (F1, F2). Newer PRs checked for overlap, none duplicates a row: #703 (Mister-Meeseeks; asymmetric Hurwitz E8 copy cost exactly 10) is a scoped negative on #620's quaternionic copy geometry, related to D1/D3 (decoder floors) but a different object; #705 (littleBro; determinant obstruction for rank-homogeneous register paths) is related to S2 and F2 (what the format forces on register paths), proved by a different argument; #711 (thakrarsagar; R420 adjacent A swaps force both frames) is on the bit side and an order change in phase A, related to F2's "time shifts" and to #661. + +## Files + +- `s1-2-erratum-invoice/`, `s3-4-census-gauges/`, `s5-6-decoders-spec/`, `s7-9-centre-fragmentation/`: per section group: `checks/` (one script per claim group), `inputs/` (vendored files), `evidence/` (existing logs and notes), `verify.part.sh`. Commands in the sections run from the group directory. +- `scripts/provenance.py`: step 0 (`--write-manifest` regenerates the manifest). +- `SOURCES.json`: pins of every vendored input and evidence file. `MANIFEST.sha256`: every file of the package. `requirements.txt`, `LICENSE`, `NOTICE.md`. + +## Credits + +Prepared by DreamingOfClouds with Claude Opus 5.5 (Anthropic), via Claude Code; Apache-2.0. See `NOTICE.md` for the PRs whose words, pipelines and results are used. diff --git a/research/format-limits-2/SOURCES.json b/research/format-limits-2/SOURCES.json new file mode 100644 index 0000000000..e732d03b2f --- /dev/null +++ b/research/format-limits-2/SOURCES.json @@ -0,0 +1,808 @@ +{ + "description": "Pins for research/format-limits-2. files = byte copies of files of open/merged PRs of CrocSwap/integer-mult-bounds (or of main at base_commit): blob = git blob id of the source file at the cited commit (of the decompressed content for a gzip copy of a non-gz source), sha256 = of the file as stored here. derived = rebuilt words that are not files of any PR (pinned by the hashes their PRs publish; content_sha256 = sha256 of the canonical JSON). evidence = existing run logs and outputs shipped unchanged, except that absolute local paths, a personal name or CRLF line endings were removed from the 6 files listed in scrubbed (sha256 is of the scrubbed file). scripts/provenance.py checks every entry.", + "base_commit": "66849e1475c930fd7732b1a0067ffee7e1e95f60", + "scrubbed": [ + "s3-4-census-gauges/evidence/C1/ledger_helpers.csv", + "s3-4-census-gauges/evidence/G2/rep1.log", + "s5-6-decoders-spec/evidence/D3/B14_flip_3.log", + "s7-9-centre-fragmentation/evidence/F3/B90-NOTES.md", + "s7-9-centre-fragmentation/evidence/O1/B74-NOTES.md", + "s7-9-centre-fragmentation/evidence/Y1/B74-NOTES.md" + ], + "files": [ + { + "file": "s1-2-erratum-invoice/inputs/pr555/EXPECTED.json.gz", + "pr": 555, + "commit": "65a6bc19f820c8b1873f65a517bcf70cd6887223", + "source_path": "research/e8-bit-p111/EXPECTED.json", + "blob": "c8ad4439e83f07bcda437598d6a4c31f4e65f2a9", + "used_for": "P2: nine-stage bit profile, live, shipped c", + "sha256": "0465a38c683c9a8cfcc11ebdf5bb48013c50982629d43911be792c1011afad50", + "stored": "gzip of the source file (blob id is of the decompressed content)" + }, + { + "file": "s1-2-erratum-invoice/inputs/pr595/a5_scope_multipliers.py", + "pr": 595, + "commit": "39112c2577452fa278489fb9fd77a9aecb2cdc24", + "source_path": "research/format-limits/scripts/a5_scope_multipliers.py", + "blob": "e45f8882ec6793868c75088810c47e041eb7e4e2", + "used_for": "E1: scope-multiplier script re-run unchanged", + "sha256": "6479c189696f53cc505febb2c81c4b69a5bf54f211ee4ae64ff841041244b060", + "stored": "verbatim" + }, + { + "file": "s1-2-erratum-invoice/inputs/pr595/cert.py", + "pr": 595, + "commit": "39112c2577452fa278489fb9fd77a9aecb2cdc24", + "source_path": "research/format-limits/scripts/cert.py", + "blob": "351fbd107c86a233a91eb915f88612c9f9ad6c26", + "used_for": "E1: imported by skel", + "sha256": "cab1c055cf4dbad6a89b4527e2ef3d138131b6742eaf21bd8b4338a9ee2febf4", + "stored": "verbatim" + }, + { + "file": "s1-2-erratum-invoice/inputs/pr595/report.py", + "pr": 595, + "commit": "39112c2577452fa278489fb9fd77a9aecb2cdc24", + "source_path": "research/format-limits/scripts/report.py", + "blob": "5593062527d6dbba99c7b1992390a3bf4f330a54", + "used_for": "E1: imported by a5", + "sha256": "96fbb236eb58bd471be33ccafbd128cd0590e5dc6f160ad9b9e85bcc2680b437", + "stored": "verbatim" + }, + { + "file": "s1-2-erratum-invoice/inputs/pr595/skel.py", + "pr": 595, + "commit": "39112c2577452fa278489fb9fd77a9aecb2cdc24", + "source_path": "research/format-limits/scripts/skel.py", + "blob": "e3c6c815b604dd41d3807c78917806ae4a5c08a7", + "used_for": "E1: imported by a5", + "sha256": "9cfbc1316389a46922765cdae85fdde2042f7681986d1c97a19174c4922ea29c", + "stored": "verbatim" + }, + { + "file": "s1-2-erratum-invoice/inputs/pr626/PLAN.json.gz", + "pr": 626, + "commit": "660de893d27bb7abd1d5b01b1640207528a5c851", + "source_path": "research/complex-k492-owner-repair/data/PLAN.json", + "blob": "434a431937757def4e496301e3d33106f0026fa3", + "used_for": "P1,P3,P4: profile {width: count}, m = 73, live 7168, deficit 2560", + "sha256": "57dc869171300e4a7600fc82f8ff5063644c59423731890d2a391f2dc6402972", + "stored": "gzip of the source file (blob id is of the decompressed content)" + }, + { + "file": "s1-2-erratum-invoice/inputs/pr626/README.md.gz", + "pr": 626, + "commit": "660de893d27bb7abd1d5b01b1640207528a5c851", + "source_path": "research/complex-k492-owner-repair/README.md", + "blob": "58722c1a496f0c806e77c9d762eb00b0c53254f0", + "used_for": "P1: conditional kappa literal 0.001635527380375392", + "sha256": "6b8b4ca567ad0bc88e59eaef98373fb86da2368c57cf5fd16abf66be77fb0279", + "stored": "gzip of the source file (blob id is of the decompressed content)" + }, + { + "file": "s1-2-erratum-invoice/inputs/pr635/PLAN.json.gz", + "pr": 635, + "commit": "a6895a69f8ad98ab45777b03e9e6f48888c39f6f", + "source_path": "research/complex-571-cold14-st2/data/PLAN.json", + "blob": "d7794713ddf9c1325d4a2142ad130b2395d27ae7", + "used_for": "P3: profile reproduced", + "sha256": "81b4a28573e75b93ddda542cf4cc6d5fda42ba6698c2ad2e7d3fcf6bda803125", + "stored": "gzip of the source file (blob id is of the decompressed content)" + }, + { + "file": "s1-2-erratum-invoice/inputs/pr645/PLAN.json.gz", + "pr": 645, + "commit": "638a5171dd1aca89ff50d07dcbe288b567769804", + "source_path": "research/gauge44-global/data/PLAN.json", + "blob": "d561080e0f5f1570e095405b9e8a243150823896", + "used_for": "P3: profile reproduced", + "sha256": "67af127042dffb51aff75dc0e905a17cc48dcc1156f7f3e42920543c13c653ea", + "stored": "gzip of the source file (blob id is of the decompressed content)" + }, + { + "file": "s1-2-erratum-invoice/inputs/pr646/PLAN.json.gz", + "pr": 646, + "commit": "cdfe8273bb5054e0a837a3594309c6262e995b1f", + "source_path": "research/signed-root-k480/data/PLAN.json", + "blob": "28355d12849ced4c36c4d4534cabca47d92fa831", + "used_for": "P3: profile reproduced", + "sha256": "2912579e14d72946244afa82cc8fec3bc2460a6fb6e0534bf1bed6ca2b50d60e", + "stored": "gzip of the source file (blob id is of the decompressed content)" + }, + { + "file": "s1-2-erratum-invoice/inputs/pr649/PLAN.json.gz", + "pr": 649, + "commit": "1b931ee055d738753778e1051300140c16ae219d", + "source_path": "research/gauge44-bit589/data/PLAN.json", + "blob": "9d5be193ad6a74a83d494e37ca2c43c43598ab84", + "used_for": "P3: base profile of the rate table", + "sha256": "30fea10ec468f0b280d2e19815ee97e8d3f6faf065467c9a91321cf8372a7430", + "stored": "gzip of the source file (blob id is of the decompressed content)" + }, + { + "file": "s3-4-census-gauges/inputs/pr531/PACKET-PROGRAMS.json.gz", + "pr": 531, + "commit": "e07a8a3f9f79c22113398a0c5dbbc7601f489b3e", + "source_path": "research/direct-delivery504-global/inputs/hamming/PACKET-PROGRAMS.json.gz", + "blob": "e98ce5d879e99427347acd725efc3b0c96fe5c13", + "stored": "verbatim", + "used_for": "G1, G2: Hamming block source lines", + "sha256": "d833ae0390d165d7da0c639a3c7aeb77156c2ddb52447087cb49b9d03b19e9b9" + }, + { + "file": "s3-4-census-gauges/inputs/pr531/PROTOTYPE.json.gz", + "pr": 531, + "commit": "e07a8a3f9f79c22113398a0c5dbbc7601f489b3e", + "source_path": "research/direct-delivery504-global/inputs/hamming/PROTOTYPE.json", + "blob": "9efe30ee107b9c67f15f1c726e1a1cb5cef03929", + "stored": "gzip of the source file (blob id is of the decompressed content)", + "used_for": "G1, G2: binary_ports", + "sha256": "ca11de0e8f9291e93e9434c47c8ef6993a364b865b2550f9618d68c19cd60ee0" + }, + { + "file": "s3-4-census-gauges/inputs/pr626/GENERATED-IDENTITY-CONTROLS.json", + "pr": 626, + "commit": "660de893d27bb7abd1d5b01b1640207528a5c851", + "source_path": "research/complex-k492-owner-repair-validation/linux/GENERATED-IDENTITY-CONTROLS.json", + "blob": "901387218f1b2251016cbb5f2d487c923a29a1a3", + "stored": "verbatim", + "used_for": "C2, C3: pins (raw and canonical-content sha256) of the ck provider word", + "sha256": "afe02dd6e947847f7d8cd44d1b730702269a68c3adb30fc858c3816b1ac084e5" + }, + { + "file": "s3-4-census-gauges/inputs/pr645/FULL-WORD.json.gz", + "pr": 645, + "commit": "638a5171dd1aca89ff50d07dcbe288b567769804", + "source_path": "research/gauge44-global/evidence/local/FULL-WORD.json.gz", + "blob": "447d45d08bf4b054d2fa76a0dc00a3b0f168fe91", + "stored": "verbatim", + "used_for": "G1, G2: the #645 Gauge44 forward word", + "sha256": "0ad202612f010df4ab66432a628247b37ad8b497dd6b27595b1685cbd7eb119e" + }, + { + "file": "s3-4-census-gauges/inputs/pr656/PLAN.json.gz", + "pr": 656, + "commit": "0805e78f5fecc700804d4766d7e3e1d7d7e6a2ba", + "source_path": "research/gauge44-layered-b/data/PLAN.json", + "blob": "b7d894d3fe98606587a72eee97f2dbb25a0072d3", + "stored": "gzip of the source file (blob id is of the decompressed content)", + "used_for": "C1: profile, M=73, W=7168, deficit 2560; provider pins of the shipped gauge44 word", + "sha256": "f0297cd10da2ee01facf2192f26b3ea699b17ea60c0caf214a8aac19643679fd" + }, + { + "file": "s5-6-decoders-spec/inputs/main/notes/general-clifford-frames.tex", + "pr": null, + "origin": "main", + "commit": "66849e1475c930fd7732b1a0067ffee7e1e95f60", + "source_path": "notes/general-clifford-frames.tex", + "blob": "0367eeb005298601f28a673861d6f71bf1d0ebbb", + "sha256": "c9bb9655b594583c6b4bab8cb485233f1d1e588f83858cf1e4c3530cee8fed54", + "stored": "verbatim", + "used_for": "S3: rule R2 (line anchors)" + }, + { + "file": "s5-6-decoders-spec/inputs/main/upstream/build/sections/03-motifs.tex", + "pr": null, + "origin": "main", + "commit": "66849e1475c930fd7732b1a0067ffee7e1e95f60", + "source_path": "upstream/build/sections/03-motifs.tex", + "blob": "cdb0ba527aa8df5d57c151183fd3893c1a7e21ab", + "sha256": "ed76761194988a01af77ead0ea6469cb5dcd29690ab985a0b5a4006b0f2b69bb", + "stored": "verbatim", + "used_for": "S2: frame identity, motif sources, interface proof (line anchors)" + }, + { + "file": "s5-6-decoders-spec/inputs/main/upstream/build/sections/04-swap.tex", + "pr": null, + "origin": "main", + "commit": "66849e1475c930fd7732b1a0067ffee7e1e95f60", + "source_path": "upstream/build/sections/04-swap.tex", + "blob": "951e792b1768e6509561380b8bbfb1d1ccb64c08", + "sha256": "412b170ccaab38dba96e95e3cbfae09f4876a9818f8d278776a746b0f8044906", + "stored": "verbatim", + "used_for": "S2: shear contract, endpoint operator on every role, call count (line anchors)" + }, + { + "file": "s5-6-decoders-spec/inputs/pr622/coupled_frames_base.py", + "pr": 622, + "commit": "f69477f4f6d3c7eb1f740b166881bffed4ffa9f6", + "source_path": "research/complex-joint-prefix/code/coupled_frames_base.py", + "used_for": "S4 anchors (identical blob in #622, #623, #626, #656)", + "blob": "90a01f0641c9929515d7fcd9b004a99164bdff50", + "sha256": "b6033cd2959297a624b557f3d04665c8fbb680a4c0987daf0704ef93711700bd", + "stored": "verbatim" + }, + { + "file": "s5-6-decoders-spec/inputs/pr626/ck-CANONICAL-WORD.json.gz", + "pr": 656, + "commit": "0805e78f5fecc700804d4766d7e3e1d7d7e6a2ba", + "source_path": "research/community-k492-audit/pr626/replay/mixed-global/base/providers/ck/CANONICAL-WORD.json.gz", + "used_for": "S1 (ck word of #622/#626; the same blob is vendored in #622/#623/#626 audit trees of the #656 head)", + "blob": "58cd1be8f28b74bea83c435eee1f52b36a274281", + "sha256": "ae3018c0646be06f47d345bb8baf0e6ea9220096a949fa30a8f7656aa4ad6f45", + "stored": "verbatim" + }, + { + "file": "s5-6-decoders-spec/inputs/pr626/hpe_audit_local.py", + "pr": 626, + "commit": "660de893d27bb7abd1d5b01b1640207528a5c851", + "source_path": "research/complex-571-cold14-b3/code/hpe_audit_local.py", + "used_for": "S3 anchor (:75 common-frame assert)", + "blob": "17bccb64fdca54f329a3ce16e369449cb76c2802", + "sha256": "6bd9a1e279c9c9e4f3767d9f82e537b559292906feb2ddab02f380fb6523a810", + "stored": "verbatim" + }, + { + "file": "s7-9-centre-fragmentation/inputs/pr656-FULL-WORD.json.gz", + "pr": 656, + "commit": "0805e78f5fecc700804d4766d7e3e1d7d7e6a2ba", + "source_path": "research/gauge44-layered-b/evidence/local/FULL-WORD.json.gz", + "blob": "447d45d08bf4b054d2fa76a0dc00a3b0f168fe91", + "sha256": "0ad202612f010df4ab66432a628247b37ad8b497dd6b27595b1685cbd7eb119e", + "used_for": "root_lines R and exact replay of A+B+cut (M) : Y1, Y2, O1, F1 carriers", + "stored": "verbatim" + }, + { + "file": "s7-9-centre-fragmentation/inputs/pr656-k492audit-pr622-ck-CANONICAL-WORD.json.gz", + "pr": 656, + "commit": "0805e78f5fecc700804d4766d7e3e1d7d7e6a2ba", + "source_path": "research/community-k492-audit/pr622/replay/ck-local/CANONICAL-WORD.json.gz", + "blob": "58cd1be8f28b74bea83c435eee1f52b36a274281", + "sha256": "ae3018c0646be06f47d345bb8baf0e6ea9220096a949fa30a8f7656aa4ad6f45", + "used_for": "ck/jp8 K-triangle provider words of #622/#623 (audit copy inside #656): F1 frames, ports", + "stored": "verbatim" + }, + { + "file": "s7-9-centre-fragmentation/inputs/pr656-k492audit-pr622-jp8-CANONICAL-WORD.json.gz", + "pr": 656, + "commit": "0805e78f5fecc700804d4766d7e3e1d7d7e6a2ba", + "source_path": "research/community-k492-audit/pr622/replay/jp8-local/CANONICAL-WORD.json.gz", + "blob": "7fd7cd1fefbb8b0e12397b355d9f6e227813bd58", + "sha256": "7a3fec1022d3b2b1bd986302a327735ec521d17b043f4a5acb96253a56f6193c", + "used_for": "ck/jp8 K-triangle provider words of #622/#623 (audit copy inside #656): F1 frames, ports", + "stored": "verbatim" + } + ], + "derived": [ + { + "file": "s1-2-erratum-invoice/inputs/derived/k492_registers.json", + "kind": "derived", + "sha256": "e67e9158ae8bcf485c499b2e5e744016938605aff9848ca9e6106a685f5df2ee", + "used_for": "P1-P5: per-register climb widths of the ck / jp8 local words of #626, from tools/derive_registers.py applied to the CANONICAL-WORD.json.gz files of the k492b rebuild (r40/base/work/k492b/{ck,jp8}-local; rebuild from research/complex-k492-owner-repair code of #626 is RECORDED, not repeated). Binding: the invoice built from it reproduces the PLAN profile of #626 exactly (P1.gate-profile) and kappa to 18 digits" + }, + { + "file": "s3-4-census-gauges/inputs/derived/ck-CANONICAL-WORD.json.gz", + "kind": "derived (rebuilt, not a file of any PR)", + "sha256": "ae3018c0646be06f47d345bb8baf0e6ea9220096a949fa30a8f7656aa4ad6f45", + "content_sha256": "9bbc75dede090cfd7a0a0252424ea9d9f6211e2350d2a801d4e4f2f0784167c7", + "pinned_in": "PR 626 @660de893 research/complex-k492-owner-repair-validation/linux/GENERATED-IDENTITY-CONTROLS.json source_providers.ck.raw / .semantic", + "rebuilt_by": "the k492b ck provider chain of PR 626 (research/complex-k492-owner-repair-validation)", + "used_for": "C2, C3: the ck provider word of #626 (8 calls)" + }, + { + "file": "s3-4-census-gauges/inputs/derived/g44-CANONICAL-WORD.json.gz", + "kind": "derived (rebuilt, not a file of any PR)", + "sha256": "72a4952751383e2a5e84b967f1e76fdfda003fe5592df357a599232e586817e3", + "content_sha256": "94fc985d6ab90967bfe995de41581690bcdb6dbade69e594b0130ef3da0c6314", + "pinned_in": "PR 656 @0805e78f data/PLAN.json provider_registry.gauge44.artifact_sha256 (bytes) and artifact_semantic_sha256 (content: sha256 of json.dumps(sort_keys, compact separators))", + "rebuilt_by": "PR 656 construction/reproduce.py --until word, then construction/layers/reproduce_layers.py (about 9 min; pinned #635 a6895a69 checkout)", + "used_for": "C1: shipped #656 gauge44 canonical word" + }, + { + "file": "s3-4-census-gauges/inputs/derived/g44-TAGS.json", + "kind": "derived (annotation, NOT pinned by any PR)", + "sha256": "0977be8f1226d678c941cd61597621c47f4ed1193bfc1f15456c53fe75dd37f2", + "rebuilt_by": "copy of construction/construct_gauge_xcentre.py with a tag argument at each of its 4 alloc() sites; its raw FULL-WORD output was compared by hash with the pinned one (card B76); register id = key - 16; the tagged rebuild's raw FULL-WORD (decompressed bytes) has sha256 0ac47f92fc2e..., equal to word_content_sha256.raw in #656 construction/INPUTS.json (re-verified at packaging)", + "used_for": "C1: allocation site of each of the 492 helpers" + } + ], + "evidence": [ + { + "file": "s1-2-erratum-invoice/evidence/E2/R39-S-NOTES.md", + "kind": "evidence", + "sha256": "3f3200cccd72d16795175c79b8edbade34e21a07935cab732253b43b6d9a83a5", + "used_for": "R39-S card notes: gate, measurement, scope" + }, + { + "file": "s1-2-erratum-invoice/evidence/E2/rho01_P2.txt", + "kind": "evidence", + "sha256": "507f8ce06658c64a8c2013a9017849bbccb11b85f48ded217b8c0e0485b88ff8", + "used_for": "output of rho01 2 (also regenerated by verify)" + }, + { + "file": "s1-2-erratum-invoice/evidence/E2/rho01_P3.txt", + "kind": "evidence", + "sha256": "38c5267c8f558adcf0bfeaf253c15b0fa5c38bbc05686c2f4542771472f9060a", + "used_for": "output of rho01 3 (also regenerated by verify)" + }, + { + "file": "s1-2-erratum-invoice/evidence/E2/rho_bfs_P2.txt", + "kind": "evidence", + "sha256": "4ef341812bdf47cc66b803c40b5b04f03d50bb5f374424086f78ce3c82dc416a", + "used_for": "output of rho_bfs.py 2" + }, + { + "file": "s1-2-erratum-invoice/evidence/P1/B15-NOTES.md", + "kind": "evidence", + "sha256": "350ea8a44a147f9cdcb8ac6ae323b7d8b10a969d3a889247ec79e7fb4e451e77", + "used_for": "B15 card notes: invoice chain and knob table" + }, + { + "file": "s1-2-erratum-invoice/evidence/P2/B26-NOTES.md", + "kind": "evidence", + "sha256": "88c7651b092292d27a071bb22ff850258c2fb97c4efa592bf304e620f16fa240", + "used_for": "B26 card notes: bit knob table (word-level rows RECORDED)" + }, + { + "file": "s1-2-erratum-invoice/evidence/P3/B66-NOTES.md", + "kind": "evidence", + "sha256": "dc5016c8407eeeb5fae073eace2fcd718a5bef486f53d290c8819f8e7834381c", + "used_for": "B66 card notes: rate table and #646 decomposition" + }, + { + "file": "s1-2-erratum-invoice/evidence/P4/B54-NOTES.md", + "kind": "evidence", + "sha256": "9c37ae11c3ab6273c66e18e8da3ca0adf61d26c53ae28be0fa71ccab70d3703c", + "used_for": "B54 card notes: s = 7 invoice and economics" + }, + { + "file": "s1-2-erratum-invoice/evidence/P5/B11-NOTES.md", + "kind": "evidence", + "sha256": "f79344262d5748660e41d5f0bcf0d47ba2d5116d36423197eeeff97be94a4415", + "used_for": "B11 card notes: frame-SA outcome, blocking histogram" + }, + { + "file": "s1-2-erratum-invoice/evidence/P5/B3R-NOTES.md", + "kind": "evidence", + "sha256": "ae42a7642a0e550b7bb8837fa71dd1c6c0d34a5438d584807e606e403d7ff625", + "used_for": "B3R card notes: SSS hourglass climb mass" + }, + { + "file": "s1-2-erratum-invoice/inputs/r39s/rho01.cpp", + "kind": "tool", + "sha256": "238de79583ebe03625e6c4074a212acf4fb3087ebc78771afa0b33562753e552", + "used_for": "E2: 0-1 BFS over F2 bank matrices (R39-S), run by checks/e2_rho.py" + }, + { + "file": "s1-2-erratum-invoice/inputs/r39s/rho_bfs.py", + "kind": "tool", + "sha256": "cbe468c4718f20cb1b2b05b980ea23309b65a7699617a4847245a7a1713eacbd", + "used_for": "E2: independent Python Dijkstra at P = 2" + }, + { + "file": "s3-4-census-gauges/evidence/C1/STEPS.json", + "sha256": "e2a8a53212979de70e0f9e9fbd457736d167819e97d455ea3ccc2f1b6356fb0d", + "what": "card B76 rebuild of the #656 word: step exit codes (pivot-swap ... wrappers), all 0", + "kind": "existing run log/output, shipped unchanged; no solver (SAT/CP-SAT/DRAT) was used by rows C1-C3, G1-G3" + }, + { + "file": "s3-4-census-gauges/evidence/C1/ledger_by_step.csv", + "sha256": "4916e77c90696678cc3cb4e320a1fbec622e9d6bd4ca4b3e2a84ad1844ce5518", + "what": "card B76 output of the C1 ledger (per allocation site)", + "kind": "existing run log/output, shipped unchanged; no solver (SAT/CP-SAT/DRAT) was used by rows C1-C3, G1-G3" + }, + { + "file": "s3-4-census-gauges/evidence/C1/ledger_helpers.csv", + "sha256": "71469db91a3c5672312dde85a9e463d5a6c4527b7cb6f2e2a03594eb59add409", + "what": "card B76 output of the C1 ledger (492 helpers: site, block|slot, climbs, mass)", + "kind": "existing run log/output, shipped unchanged; no solver (SAT/CP-SAT/DRAT) was used by rows C1-C3, G1-G3" + }, + { + "file": "s3-4-census-gauges/evidence/C1/ledgers.log", + "sha256": "171c61ffe5eb12bb2704ba6a1b576c587e0068da750d5cc33e47e7abe9924a85", + "what": "card B76 rebuild: ledgers step log", + "kind": "existing run log/output, shipped unchanged; no solver (SAT/CP-SAT/DRAT) was used by rows C1-C3, G1-G3" + }, + { + "file": "s3-4-census-gauges/evidence/G2/rep1.log", + "sha256": "7839c5dc45631b9e6012b138ed62cf3d2a1c2e0f900a3872bfb19c214545205b", + "what": "card B58 rebuild of the #645 cold44 word (shadow-early ... cold44-exact all PASS; 5.9 s); command: nice -n19 timeout 1500 python3 construction/reproduce.py", + "kind": "existing run log/output, shipped unchanged; no solver (SAT/CP-SAT/DRAT) was used by rows C1-C3, G1-G3" + }, + { + "file": "s5-6-decoders-spec/evidence/D1/B14_satlift.exit", + "sha256": "9d9b18720961e9b4689fd763b85e7b6f36160ccd3a8a1c9ddc5103bb0f66c396", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D1/B14_satlift.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D1/B14_satlift.py", + "sha256": "3ba038c2a2a2d766f6a2687e132d6eecbd1efa120cb423b30e8b992f49df6113", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D1/B72_sat.py", + "sha256": "2254f42c0a2b025cb345baf7b22af15c400b0a6fb6abd49d41a5881365845414", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D1/B72_sat_n9_o3.exit", + "sha256": "9d9b18720961e9b4689fd763b85e7b6f36160ccd3a8a1c9ddc5103bb0f66c396", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D1/B72_sat_n9_o3.log", + "sha256": "8d3091ee1f4d11a1a3efbfcf5f89d10d7e4db4220f23a6ae009c15673eddcc22", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D1/satlift46.py", + "sha256": "dcf96c239888a7eb3d6b5354a97bb557308e8e94d3a75b828e23969e1777215b", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D2/cen1.out", + "sha256": "46d763a1e87c309d82765070df94c51e36de45e64a27d47f40606946a62cbcf6", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D2/cen2.out", + "sha256": "71314b4f28079348527f8ee9efb24309ad72fd5ea6934c927457722fb2751ef8", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D2/cen3.out", + "sha256": "48ac142440860e6ed5fccd96f5a6aa31538e555f17f878501b537e444c31984e", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D2/d1.out", + "sha256": "56dd5e20ecb02fbbf1dfee37f2c019bc160a7d136dd8ae8a7bb16688d042ce00", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D2/d2.out", + "sha256": "0e19ae1ec5e7d86a9eed9621571af9eaa00abfe165fc8dcd146b5085b520f77c", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D2/d3.out", + "sha256": "5414c014b669ab8475eb1c39fbf297c2dce9f539242d0320fd8b9cd4267b0a61", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D2/w1.out", + "sha256": "cf41e3e53127c5229014618b55fefa0f262d1f250b9f9fbb2963bea558de795b", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D2/w2.out", + "sha256": "07330ddc5d4f0793df4231d28dae3e8ccc96473a1cfe83be0b84e4b6c97665cd", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D3/B14_flip_3.log", + "sha256": "ca31495070ef57979df4effad8c93d3836ac16d3c9a19fb4abe2d9e7c2e3df42", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D3/B14_flip_3a.out", + "sha256": "e29f3165c0e6b855b0079301a04b15b8a066906c9b0e9df7030cd90572944ae4", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D3/B14_flip_3b.out", + "sha256": "17f1bcc4b4bfd5ec0ca20d3b89c68e441d78b3befd68663d475108aaa1c98874", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D3/B14_flip_3c.out", + "sha256": "e9ef041b1a76dc94d1f661bf383ac89f285faaff6f17f6a8896e73e660712975", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D3/c1_0.out", + "sha256": "21c0953a5592dea290c4dfa0aceb425cbf7d06e2456c45101c6b5e6db6ab2606", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D3/c1_111.out", + "sha256": "7768e0fb8bf8386886b348ede4b8d1090dfd9231d1727c340fad0c7ded4e4156", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D3/c2_0.out", + "sha256": "f80e4becb4ffd0dbd9f32a3950698d668125450ed43e3f0f0579e2663a5edc72", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D3/c2_111.out", + "sha256": "5518d576d091ead48e6ff96dbcf33e4096e6108e289957c26ac8b69a5e496b35", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D3/g0.out", + "sha256": "136aeac659db958a4008b54c24d3921efc149741b8ff065b4ea2b3f1514e3337", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D3/g1.out", + "sha256": "a3624c2da333fc8e4123a9ed3b2e9ace654895d54c623d258b9eb2a3def81289", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D3/g111.out", + "sha256": "0442032f2c0d932ac798e494b385e7987199ae37db27278f117f3b3d04bda026", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D3/g30.out", + "sha256": "b2e69115fa90a5b9a9691c403aeba26b871a15be4a92cf923cee11aa26f21150", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D3/g48.out", + "sha256": "035d6ddc47f510f4b4fe3eed8c634a1447a0d5ffd4a2b635f32f2acfb52c37c6", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/evidence/D3/g70.out", + "sha256": "9458e545c91b0ff346235473ae192651f29723400a2b81f77522772467acafae", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "s5-6-decoders-spec/inputs/local-hits/P104/HIT_flip_3a.txt", + "sha256": "8e0178db02c14e1b29058cdbdbd50aac22f2b55a1ba21dc82f417610c9932526", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "s5-6-decoders-spec/inputs/local-hits/P104/HIT_flip_3b.txt", + "sha256": "d27a8e2d14a2dcbb574995aa9ab82b3b107355faf48ad56f45c6dd5e051d252c", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "s5-6-decoders-spec/inputs/local-hits/P104/HIT_flip_3c.txt", + "sha256": "f3edfb771a76fc57d034b1cddba9de7b97a7d13409817879579eadb03381092e", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "s5-6-decoders-spec/inputs/local-hits/P111/HIT_c2_0.txt", + "sha256": "0af2b4b42cac05f21794013623f9955bd05cf48374a7e0a1badc29e441a027b7", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "s5-6-decoders-spec/inputs/local-hits/P111/HIT_c2_111.txt", + "sha256": "816768175d2b47ebabfd0f09180d95862bc7e84685f78dc616d9746ebf762a63", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "s5-6-decoders-spec/inputs/local-hits/P111/HIT_g0.txt", + "sha256": "c06d83ede44258b7250fe1df62a82011687f704c7f879ce4c91040ebbe2ef6b4", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "s5-6-decoders-spec/inputs/local-hits/P111/HIT_g1.txt", + "sha256": "9a8e8ee205cf3e69e2872c461844232df764a016a8c7e2741a02aeae9cdfc323", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "s5-6-decoders-spec/inputs/local-hits/P111/HIT_g111.txt", + "sha256": "8d5528362385dfc0c19cda625e5b2894d777d9405fc167c4c6723e99baa8db56", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "s5-6-decoders-spec/inputs/local-hits/P111/HIT_g30.txt", + "sha256": "a667c3f13d28828cb0a41b681e08fa6e4c07a1f3270f77555d3a1be29308a1d0", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "s5-6-decoders-spec/inputs/local-hits/P111/HIT_g48.txt", + "sha256": "521a618922d426573a1e808a6f7562eec5cd6ab09538d43b13c4dd79b1597aa7", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "s5-6-decoders-spec/inputs/local-hits/P111/HIT_g70.txt", + "sha256": "b803b2c2621061b9d2b4b31f4137e02c1342d288282a4ee92b7e2f50b2bd9fb3", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F1/B80-NOTES.md", + "sha256": "c95c492b9b94cf16fd0eaa68b7e1a41c0082de78f33c6059cc2c9a00761184a3", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B80/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F1/B81-NOTES.md", + "sha256": "e3c1e6aa548c6af09c6cdde68d7b1aeb44e874ff8cc8499d8153483bd6287f62", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B81/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F1/B82-DISCOVERY.json", + "sha256": "ba6767bc74e7e91330d27026fa81875d2b116f7a34b818a037d94f1bd519b778", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B82/DISCOVERY.json (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F1/B82-NOTES.md", + "sha256": "9cbf48e3c0932ce286826b3a5807432a193275a5f4a6830a52401cbdacde0d54", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B82/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F1/B82-run.log", + "sha256": "ba6767bc74e7e91330d27026fa81875d2b116f7a34b818a037d94f1bd519b778", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B82/run.log (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F1/B85-NOTES.md", + "sha256": "c131f3bc7dd229cfc67fc53bd9b79b6a5266f667d9c65c8b335f9df48ca35e70", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B85/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F1/B89-NOTES.md", + "sha256": "85b10b7d8adfcbad634b2e219e2336563324dfd02647282b512d5235e1dcf170", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B89/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F2/B103-NOTES.md", + "sha256": "44d900dd87450634eeb81f7d87bdd67cbd918a80e92ae091c66b57dbcf0c6b98", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B103/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F2/B105-NOTES.md", + "sha256": "b41ddcb848a7f3ecbb75f93e281627cc112b85175b937f4c275f6d3f89242ce9", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B105/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F2/B107-NOTES.md", + "sha256": "357bcdf2dc6f27518a2b9dc14337fd86f00a8d8d3f3b0a1e61de1cae4893fddf", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B107/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F2/B108-NOTES.md", + "sha256": "42bc59cc85492f96abed7c0cb75048b418eb4d2730077db827ebb71e88dcd31f", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B108/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F2/B98c-NOTES.md", + "sha256": "d9a258b3e70ecc982395869018bd7b27872ea83c3273f1ee3c50e53fc127c2d2", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B98c/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F2/B99b-NOTES.md", + "sha256": "72917a21ab58fbd99012dc65410a32b27d5966a9e3ee7a3e01289d4bb01f4404", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B99b/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F3/B90-NOTES.md", + "sha256": "96adc6297ab3c0a5406b46c49ce828f596eab28c6d421a72b3e5bb349ea206ab", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B90/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F3/B92-NOTES.md", + "sha256": "dbccb5c0d44b1ba04b52f26083adbec1fdd40cbbdcc57dbd5f119496ed5ed8b5", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B92/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F3/B92b-NOTES.md", + "sha256": "adb7cefda46501d2769718ef2374554b68722d759eacce1e37030859d3ecbdea", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B92b/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F3/B93-NOTES.md", + "sha256": "3dc9d03ab314eb047e90b1d4b94e5245f0769c7eeebd4a939a26c643339422d8", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B93/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F3/B94-NOTES.md", + "sha256": "a08b06c423e298313be7b7a5101d3b37ce98ab1dae91627a4b77d877bd641659", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B94/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F3/B97-NOTES.md", + "sha256": "1c7d4c83ed133b698169ca2be7708ea50d0ab4506e80e58e1a97bb330d9025b7", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B97/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F6/B105_miner664.log", + "sha256": "3ac09349702214e0ac6db0a6fddb327a83d99e7246d504cd4fb3c4f824268df3", + "origin": "local run output (not in any PR)", + "what": "F6: job summary of the miner run (rc=0; empty frame-nested category)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/F6/miner664_run1.out", + "sha256": "5eb9295206f270b9d61c0b9af5de6a58438e12a0cb727b2b7e9ce6e756cc32fe", + "origin": "local run output (not in any PR)", + "what": "F6: output of the opening miner on the rebuilt #664 word (cards/B105/work664/run1_664.out)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/O1/B68-NOTES.md", + "sha256": "390e5ea80e1da33988c17532dab42b74ac1ffd2262f07c03e04021c7f529f29c", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B68/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/O1/B68-faces.c", + "sha256": "6c230a05a0dbac13188068dad42dcd0ace52a1c7c11a90ad60c53b2c54b92a84", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B68/faces.c (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/O1/B7-NOTES.md", + "sha256": "a13c0cf567e7cbac3d5a1d59ad041e7ce0d13fb2518171badcbd4425d4a0a213", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B7/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/O1/B73-NOTES.md", + "sha256": "1be2fafbefc53ac40d63497fbf4af8b1549bd10a3fc83c55f4d49254e38c9afe", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B73/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/O1/B74-NOTES.md", + "sha256": "8491770d60e8234c289ffc9c3342bf2dec4274d6f6658c9c163ad621e19f3aa5", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B74/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/O1/B74-dump.c", + "sha256": "6e52b14e8f0c352dee5d54e84c4fcbd52399a9d15e27d0375249a7b6ab4d0a34", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B74/dump.c (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/O2/B2-NOTES.md", + "sha256": "a7b37cc232f220aedcb586e45312232e44347e619e985fd509978a9ec455571e", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B2/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/Y1/B10-NOTES.md", + "sha256": "21c3838e9bfa4b451facc9fe2c6063b1cd3f497e6ad0a2576c42a91b090c1f97", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B10/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/Y1/B16-NOTES.md", + "sha256": "3d6c34d60c9fe1d5a3d1af36c7aa9bcaa75dbe56814f1accfea4c546c890dc42", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B16/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/Y1/B74-NOTES.md", + "sha256": "8491770d60e8234c289ffc9c3342bf2dec4274d6f6658c9c163ad621e19f3aa5", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B74/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/Y2/B101-NOTES.md", + "sha256": "6070ff15252c51783e289a66c389c06da0ca1dd480a7218f151e70b4220cb7e1", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B101/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/evidence/Y2/B106-NOTES.md", + "sha256": "049906ed7bb49c66205f643638a99393905525e8008b23617b060dc05eeabb4a", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)", + "origin": "local card record cards/B106/NOTES.md (not in any PR)" + }, + { + "file": "s7-9-centre-fragmentation/inputs/b82-rec.json", + "sha256": "5aaa5bc98240b6b346fe046f1993d68bc4a9abd63acb4c65cac98c34a3a2b55f", + "used_for": "F1 S3/S4 packet records (RECORDED derivation, CHECKED consumer)", + "origin": "local card record DERIVED (not a PR file): cards/B82/work/out/rec.pkl converted to JSON; producer cards/B82/work/c82.py run on the rebuilt #656 word (inputs PROTOTYPE.json etc. not re-run here) (not in any PR)" + } + ] +} diff --git a/research/format-limits-2/requirements.txt b/research/format-limits-2/requirements.txt new file mode 100644 index 0000000000..afa7ae5542 --- /dev/null +++ b/research/format-limits-2/requirements.txt @@ -0,0 +1,5 @@ +# Tested set: sections 5-9 need only these three (sections 1-4 and step 0 use the standard library). +# Same pins as research/format-limits (#595); also passing on numpy 2.5.4 / scipy 1.18.1 / sympy 1.14.0 with Python 3.14.7. +numpy==2.4.6 +scipy==1.17.1 +sympy==1.14.0 diff --git a/research/format-limits-2/s1-2-erratum-invoice/SOURCES.part.json b/research/format-limits-2/s1-2-erratum-invoice/SOURCES.part.json new file mode 100644 index 0000000000..b67bafbf0e --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/SOURCES.part.json @@ -0,0 +1,171 @@ +{ + "description": "PR files are copied unchanged (or gzip-compressed with mtime 0): blob = git blob id of the file at the cited commit (for a .gz copy: of the decompressed content). kind=derived/tool/evidence files are local and pinned by sha256.", + "files": [ + { + "file": "inputs/pr595/a5_scope_multipliers.py", + "pr": 595, + "commit": "39112c2577452fa278489fb9fd77a9aecb2cdc24", + "source_path": "research/format-limits/scripts/a5_scope_multipliers.py", + "blob": "e45f8882ec6793868c75088810c47e041eb7e4e2", + "used_for": "E1: scope-multiplier script re-run unchanged" + }, + { + "file": "inputs/pr595/skel.py", + "pr": 595, + "commit": "39112c2577452fa278489fb9fd77a9aecb2cdc24", + "source_path": "research/format-limits/scripts/skel.py", + "blob": "e3c6c815b604dd41d3807c78917806ae4a5c08a7", + "used_for": "E1: imported by a5" + }, + { + "file": "inputs/pr595/cert.py", + "pr": 595, + "commit": "39112c2577452fa278489fb9fd77a9aecb2cdc24", + "source_path": "research/format-limits/scripts/cert.py", + "blob": "351fbd107c86a233a91eb915f88612c9f9ad6c26", + "used_for": "E1: imported by skel" + }, + { + "file": "inputs/pr595/report.py", + "pr": 595, + "commit": "39112c2577452fa278489fb9fd77a9aecb2cdc24", + "source_path": "research/format-limits/scripts/report.py", + "blob": "5593062527d6dbba99c7b1992390a3bf4f330a54", + "used_for": "E1: imported by a5" + }, + { + "file": "inputs/pr626/PLAN.json.gz", + "pr": 626, + "commit": "660de893d27bb7abd1d5b01b1640207528a5c851", + "source_path": "research/complex-k492-owner-repair/data/PLAN.json", + "blob": "434a431937757def4e496301e3d33106f0026fa3", + "used_for": "P1,P3,P4: profile {width: count}, m = 73, live 7168, deficit 2560" + }, + { + "file": "inputs/pr626/README.md.gz", + "pr": 626, + "commit": "660de893d27bb7abd1d5b01b1640207528a5c851", + "source_path": "research/complex-k492-owner-repair/README.md", + "blob": "58722c1a496f0c806e77c9d762eb00b0c53254f0", + "used_for": "P1: conditional kappa literal 0.001635527380375392" + }, + { + "file": "inputs/pr649/PLAN.json.gz", + "pr": 649, + "commit": "1b931ee055d738753778e1051300140c16ae219d", + "source_path": "research/gauge44-bit589/data/PLAN.json", + "blob": "9d5be193ad6a74a83d494e37ca2c43c43598ab84", + "used_for": "P3: base profile of the rate table" + }, + { + "file": "inputs/pr645/PLAN.json.gz", + "pr": 645, + "commit": "638a5171dd1aca89ff50d07dcbe288b567769804", + "source_path": "research/gauge44-global/data/PLAN.json", + "blob": "d561080e0f5f1570e095405b9e8a243150823896", + "used_for": "P3: profile reproduced" + }, + { + "file": "inputs/pr646/PLAN.json.gz", + "pr": 646, + "commit": "cdfe8273bb5054e0a837a3594309c6262e995b1f", + "source_path": "research/signed-root-k480/data/PLAN.json", + "blob": "28355d12849ced4c36c4d4534cabca47d92fa831", + "used_for": "P3: profile reproduced" + }, + { + "file": "inputs/pr635/PLAN.json.gz", + "pr": 635, + "commit": "a6895a69f8ad98ab45777b03e9e6f48888c39f6f", + "source_path": "research/complex-571-cold14-st2/data/PLAN.json", + "blob": "d7794713ddf9c1325d4a2142ad130b2395d27ae7", + "used_for": "P3: profile reproduced" + }, + { + "file": "inputs/pr555/EXPECTED.json.gz", + "pr": 555, + "commit": "65a6bc19f820c8b1873f65a517bcf70cd6887223", + "source_path": "research/e8-bit-p111/EXPECTED.json", + "blob": "c8ad4439e83f07bcda437598d6a4c31f4e65f2a9", + "used_for": "P2: nine-stage bit profile, live, shipped c" + }, + { + "file": "inputs/derived/k492_registers.json", + "kind": "derived", + "sha256": "e67e9158ae8bcf485c499b2e5e744016938605aff9848ca9e6106a685f5df2ee", + "used_for": "P1-P5: per-register climb widths of the ck / jp8 local words of #626, from tools/derive_registers.py applied to the CANONICAL-WORD.json.gz files of the k492b rebuild (r40/base/work/k492b/{ck,jp8}-local; rebuild from research/complex-k492-owner-repair code of #626 is RECORDED, not repeated). Binding: the invoice built from it reproduces the PLAN profile of #626 exactly (P1.gate-profile) and kappa to 18 digits" + }, + { + "file": "inputs/r39s/rho01.cpp", + "kind": "tool", + "sha256": "238de79583ebe03625e6c4074a212acf4fb3087ebc78771afa0b33562753e552", + "used_for": "E2: 0-1 BFS over F2 bank matrices (R39-S), run by checks/e2_rho.py" + }, + { + "file": "inputs/r39s/rho_bfs.py", + "kind": "tool", + "sha256": "cbe468c4718f20cb1b2b05b980ea23309b65a7699617a4847245a7a1713eacbd", + "used_for": "E2: independent Python Dijkstra at P = 2" + }, + { + "file": "evidence/E2/R39-S-NOTES.md", + "kind": "evidence", + "sha256": "3f3200cccd72d16795175c79b8edbade34e21a07935cab732253b43b6d9a83a5", + "used_for": "R39-S card notes: gate, measurement, scope" + }, + { + "file": "evidence/E2/rho01_P2.txt", + "kind": "evidence", + "sha256": "507f8ce06658c64a8c2013a9017849bbccb11b85f48ded217b8c0e0485b88ff8", + "used_for": "output of rho01 2 (also regenerated by verify)" + }, + { + "file": "evidence/E2/rho01_P3.txt", + "kind": "evidence", + "sha256": "38c5267c8f558adcf0bfeaf253c15b0fa5c38bbc05686c2f4542771472f9060a", + "used_for": "output of rho01 3 (also regenerated by verify)" + }, + { + "file": "evidence/E2/rho_bfs_P2.txt", + "kind": "evidence", + "sha256": "4ef341812bdf47cc66b803c40b5b04f03d50bb5f374424086f78ce3c82dc416a", + "used_for": "output of rho_bfs.py 2" + }, + { + "file": "evidence/P1/B15-NOTES.md", + "kind": "evidence", + "sha256": "350ea8a44a147f9cdcb8ac6ae323b7d8b10a969d3a889247ec79e7fb4e451e77", + "used_for": "B15 card notes: invoice chain and knob table" + }, + { + "file": "evidence/P2/B26-NOTES.md", + "kind": "evidence", + "sha256": "88c7651b092292d27a071bb22ff850258c2fb97c4efa592bf304e620f16fa240", + "used_for": "B26 card notes: bit knob table (word-level rows RECORDED)" + }, + { + "file": "evidence/P3/B66-NOTES.md", + "kind": "evidence", + "sha256": "dc5016c8407eeeb5fae073eace2fcd718a5bef486f53d290c8819f8e7834381c", + "used_for": "B66 card notes: rate table and #646 decomposition" + }, + { + "file": "evidence/P4/B54-NOTES.md", + "kind": "evidence", + "sha256": "9c37ae11c3ab6273c66e18e8da3ca0adf61d26c53ae28be0fa71ccab70d3703c", + "used_for": "B54 card notes: s = 7 invoice and economics" + }, + { + "file": "evidence/P5/B11-NOTES.md", + "kind": "evidence", + "sha256": "f79344262d5748660e41d5f0bcf0d47ba2d5116d36423197eeeff97be94a4415", + "used_for": "B11 card notes: frame-SA outcome, blocking histogram" + }, + { + "file": "evidence/P5/B3R-NOTES.md", + "kind": "evidence", + "sha256": "ae42a7642a0e550b7bb8837fa71dd1c6c0d34a5438d584807e606e403d7ff625", + "used_for": "B3R card notes: SSS hourglass climb mass" + } + ] +} \ No newline at end of file diff --git a/research/format-limits-2/s1-2-erratum-invoice/checks/e1_scope_multipliers.py b/research/format-limits-2/s1-2-erratum-invoice/checks/e1_scope_multipliers.py new file mode 100644 index 0000000000..a913b701b4 --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/checks/e1_scope_multipliers.py @@ -0,0 +1,73 @@ +"""E1 (erratum to #595): the x1.15-2.15 "schedule/rho family" multipliers of #595 A.7 are the effect of DROPPING idle-frame +rules from the scope, not a rho family. Default (fast, two processes): recompute idlefree, idle_onechild and nosplit for +the two units with #595's own skel.X (vendored, inputs/pr595) and compare with the multipliers a5 prints. +E1_FULL=1: run #595's a5_scope_multipliers.py unchanged (all 7 variants, about 56 s).""" +import contextlib +import io +import os +import re +import runpy +import sys +from fractions import Fraction as Fr +from multiprocessing import Pool + +HERE = os.path.dirname(os.path.abspath(__file__)) +SRC = os.path.join(os.path.dirname(HERE), 'inputs', 'pr595') +sys.path.insert(0, SRC) +S_LIST = (3, 5, 7, 9, 11, 13) +UNITS = {'cx-112/64': (9, 64, 112), 'bit-111/63': (8, 63, 111)} +EXP = {'cx-112/64': {'idlefree': (1.68, 2.15), 'idle_onechild': (1.20, 1.55), 'nosplit': (1.15, 1.18)}, + 'bit-111/63': {'idlefree': (1.67, 2.14), 'idle_onechild': (1.19, 1.55), 'nosplit': (1.15, 1.18)}} + + +def roots(h, x, var): + from skel import X + out = {} + for s in S_LIST: + r = X(s, h, 1, x, var) + out[s] = r['hi'] if r else Fr(0) + return out + + +def unit(name): + h, cst, v = UNITS[name] + x = Fr(cst, v) + base = roots(h, x, 'thm') + res = {} + for var in EXP[name]: + rr = roots(h, x, var) + res[var] = (float(max(rr.values()) / max(base.values())), float(rr[9] / base[9]), max(rr, key=rr.get)) + return name, res + + +def fast(): + with Pool(2) as p: + out = dict(p.map(unit, list(UNITS))) + fail = False + for name in UNITS: + for var, (best, at9, sb) in out[name].items(): + e = EXP[name][var] + ok = abs(best - e[0]) <= 0.006 and abs(at9 - e[1]) <= 0.006 + fail |= not ok + print('%s E1.%s.%s best s=%d: x%.2f; s = 9: x%.2f (#595 A.7: x%.2f / x%.2f)' + % ('PASS' if ok else 'FAIL', name, var, sb, best, at9, e[0], e[1]), flush=True) + return fail + + +def full(): + buf = io.StringIO() + code = 0 + with contextlib.redirect_stdout(buf): + try: + runpy.run_path(os.path.join(SRC, 'a5_scope_multipliers.py'), run_name='__main__') + except SystemExit as e: + code = e.code or 0 + lines = [l for l in buf.getvalue().splitlines() if l.startswith(('PASS', 'FAIL'))] + bad = [l for l in lines if l.startswith('FAIL')] + print('%s E1.a5-rerun %d claim lines from #595 a5_scope_multipliers.py (all 7 variants, both units), %d FAIL' + % ('PASS' if lines and not bad and not code else 'FAIL', len(lines), len(bad))) + return bool(bad or code or not lines) + + +if __name__ == '__main__': + sys.exit(1 if (full() if os.environ.get('E1_FULL') else fast()) else 0) diff --git a/research/format-limits-2/s1-2-erratum-invoice/checks/e2_rho.py b/research/format-limits-2/s1-2-erratum-invoice/checks/e2_rho.py new file mode 100644 index 0000000000..28205b6bfd --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/checks/e2_rho.py @@ -0,0 +1,44 @@ +"""E2: scalar-layer enumeration of ALL pair-preserving monomial rho (P = 2, 3 pairs) over F2. +Builds inputs/r39s/rho01.cpp (0-1 BFS over bank matrices; generators: pair-local shears Y+=X / X+=Y, bridges +X_d+=X_s, Y_s+=Y_d) with the system C++ compiler, runs it, compares the output byte-for-byte with the shipped +evidence/E2/rho01_P{2,3}.txt, and checks the claims. Without a compiler only the shipped evidence is parsed.""" +import hashlib, os, re, shutil, subprocess, sys, tempfile +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +ok_all = True +def check(cid, ok, detail=''): + global ok_all + ok_all &= bool(ok) + print(('PASS ' if ok else 'FAIL ') + cid + (' ' + detail if detail else ''), flush=True) +cxx = shutil.which('c++') or shutil.which('g++') or shutil.which('clang++') +exe = None +if cxx: + tmp = tempfile.mkdtemp() + exe = os.path.join(tmp, 'rho01') + subprocess.run([cxx, '-O2', '-std=c++17', '-o', exe, os.path.join(ROOT, 'inputs', 'r39s', 'rho01.cpp')], check=True) +for P, states in ((2, 720), (3, 1451520)): + ev = open(os.path.join(ROOT, 'evidence', 'E2', 'rho01_P%d.txt' % P)).read() + if exe: + out = subprocess.run([exe, str(P)], capture_output=True, text=True, check=True).stdout + check('E2.rerun-P%d' % P, out == ev, 'fresh run identical to shipped evidence (sha256 %s)' % hashlib.sha256(ev.encode()).hexdigest()[:16]) + else: + out = ev + m = re.search(r'^states (\d+)$', out, re.M) + check('E2.reachable-P%d' % P, m and int(m.group(1)) == states, 'reachable set %s = |Sp(%d,2)|' % (m.group(1), 2 * P)) + rows = re.findall(r'perm=(\d+) swapmask=(\d+) : locals=(\d+) bridges=(\d+)', out) + import math + check('E2.targets-P%d' % P, len(rows) == math.factorial(P) * 2 ** P, '%d pair-preserving targets, none unreached' % len(rows)) + good = True; ratios = [] + for perm, mask, loc, br in rows: + k = bin(int(mask)).count('1'); loc = int(loc); br = int(br) + good &= (loc == (0 if k == 0 else 2 * k + 1)) + if k: ratios.append((loc / k, perm, mask)) + check('E2.locals=2k+1-P%d' % P, good, 'locals = 0 if k=0 else 2k+1, k = number of exchanged pairs, every target') + full = [(l, b) for p, mk, l, b in rows if p == ''.join(map(str, range(P))) and int(mk) == 2 ** P - 1][0] + check('E2.B_K-P%d' % P, full == {2: ('5', '3'), 3: ('7', '6')}[P], 'full exchange (identity perm) = %s locals, %s bridges' % (full[0], full[1])) + best = min(r[0] for r in ratios) + check('E2.no-rho-beats-B_K-P%d' % P, abs(best - (2 * P + 1) / P) < 1e-12, 'min locals per exchanged pair %.4f = (2P+1)/P = B_K; multiplier 1.000' % best) +# python BFS cross-check at P = 2 (independent implementation) +ev = open(os.path.join(ROOT, 'evidence', 'E2', 'rho_bfs_P2.txt')).read() +py = subprocess.run([sys.executable, '-I', '-B', os.path.join(ROOT, 'inputs', 'r39s', 'rho_bfs.py'), '2'], capture_output=True, text=True, check=True).stdout +check('E2.python-P2', py == ev and len(ev.splitlines()) == 8, 'rho_bfs.py 2 reproduces the shipped output (8 targets)') +sys.exit(0 if ok_all else 1) diff --git a/research/format-limits-2/s1-2-erratum-invoice/checks/invoice.py b/research/format-limits-2/s1-2-erratum-invoice/checks/invoice.py new file mode 100644 index 0000000000..48b04e1f7a --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/checks/invoice.py @@ -0,0 +1,75 @@ +"""Shared invoice-calculus code for the complex (#626-type) and bit (#555-type) moment roots. +root(): b is the root a of sum_r (r n_r / (m W)) (m / r)^a = 1 (Decimal, Newton from the left: the function is convex and +increasing, so the iteration is monotone). Inputs are read from ../inputs relative to the package root.""" +import gzip, json, os, sys +from collections import Counter, defaultdict +from decimal import Decimal as D, localcontext + +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +INP = os.path.join(ROOT, 'inputs') +_failed = [] + + +def check(cid, ok, detail=''): + print(('PASS ' if ok else 'FAIL ') + cid + (' ' + str(detail) if detail != '' else ''), flush=True) + if not ok: + _failed.append(cid) + return ok + + +def finish(): + sys.exit(1 if _failed else 0) + + +def load(rel): + p = os.path.join(INP, rel) + return json.load(gzip.open(p, 'rt') if p.endswith('.gz') else open(p)) + + +def root(H, m, W, prec=50, start=None): + with localcontext() as c: + c.prec = prec + terms = [(D(r) * D(n) / D(m * W), (D(m) / D(r)).ln()) for r, n in H.items() if n] + a = D(0) if start is None else start + for _ in range(100): + f = sum(p * (a * l).exp() for p, l in terms) - 1 + df = sum(p * l * (a * l).exp() for p, l in terms) + na = a - f / df + if abs(na - a) < D(10) ** (-(prec - 5)): + return na + a = na + raise RuntimeError('no convergence') + + +def profile(plan): + return {int(k): v for k, v in plan['profile'].items()} + + +def hmass(H): + return sum(r * n for r, n in H.items()) + + +M, W0, CALLS = 73, 7168, {'ck': 8, 'jp8': 64} + + +class Word626: + """Per-register climb widths of the ck / jp8 local words of #626 (inputs/derived/k492_registers.json).""" + def __init__(self): + d = load('derived/k492_registers.json') + self.d = d + self.H = Counter() + for p, c in CALLS.items(): + for r in d[p]['regs']: + for w in r: + self.H[w] += c + self.plan = load('pr626/PLAN.json.gz') + self.prof = profile(self.plan) + self.idle = Counter(self.prof) + for w, n in self.H.items(): + self.idle[w] -= n + self.idle = Counter({w: n for w, n in self.idle.items() if n}) + self.B0 = Counter(self.H) + Counter(self.idle) + + def helpers(self, prov, width): + d = self.d[prov]; v, R = d['v'], d['R'] + return [d['regs'][r] for r in range(2 * v, 2 * v + R) if r not in d['centers'] and sum(d['regs'][r]) == width] diff --git a/research/format-limits-2/s1-2-erratum-invoice/checks/p1_knobs.py b/research/format-limits-2/s1-2-erratum-invoice/checks/p1_knobs.py new file mode 100644 index 0000000000..c98a2ddbc8 --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/checks/p1_knobs.py @@ -0,0 +1,90 @@ +"""P1 (complex invoice calculus, exact knobs on #626) and P3 w9 row. Also P4 gate lives in p4_s7.py. +Gate: b of the word-built invoice = b of the PLAN profile of #626, and kappa = b/(1+b) equals the README literal to +16+ digits. Knobs are finite differences of the exact (Decimal, 50 digits) root.""" +from decimal import Decimal as D +from fractions import Fraction +import gzip, re, statistics as S +from collections import Counter +import os, sys +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from invoice import * + +w = Word626() +b0 = root(w.B0, M, W0) +check('P1.gate-profile', dict(w.B0) == w.prof and hmass(w.B0) == M * W0 - 2560 and w.plan['deficit'] == 2560 and w.plan['live'] == W0, + 'word climbs + idle remainder {1:123, 37:1, 48:2215} = PLAN profile of #626; mass %d = mW - 2560' % hmass(w.B0)) +check('P1.gate-idle', dict(w.idle) == {1: 123, 37: 1, 48: 2215}, 'idle remainder = I - Hz = 387072 - 280592 = 106480 = 2215*48 + 123 + 37') +kappa = b0 / (1 + b0) +txt = gzip.decompress(open(os.path.join(INP, 'pr626/README.md.gz'), 'rb').read()).decode() +lit = re.search(r'Conditional kappa = \*\*([0-9.]+)\*\*', txt).group(1) +exact = Fraction(51110230636731, 31250000000000000) +check('P1.gate-kappa', str(kappa)[:20] == lit and 0 <= kappa - D(exact.numerator) / D(exact.denominator) < D('1e-18'), + 'kappa = b/(1+b) = %s... vs README %s (exact 51110230636731/31250000000000000), b = %s' % (str(kappa)[:22], lit, str(b0)[:22])) + + +def pct(H, W=W0, m=M): + return float((root(H, m, W, start=b0 * D('0.9')) / b0 - 1) * 100) + + +def mass_ok(H, dM): + return hmass(H) - (M * W0 - 2560) == dM + + +# centre: remove (climbs [1,1,1,1,4,8,1] = 17, host -9 -> idle child 9), per call +ctr = Counter() +for p in CALLS: + d = w.d[p] + for c in d['centers']: + ctr[tuple(d['regs'][c])] += 1 +check('P1.centre-shape', set(ctr) == {(1, 1, 1, 1, 4, 8, 1)} and sum(ctr.values()) == 16, 'all 8 centres of both words have climbs (1,1,1,1,4,8,1), mass 17') +H = Counter(w.B0) +for p, c in CALLS.items(): + for x in (1, 1, 1, 1, 4, 8, 1): + H[x] -= c + H[9] += c +check('P1.centre', mass_ok(H, -576) and abs(pct(H) - 22.598) < 0.0006, 'remove 1 centre: %+.3f%% b (local -17, host -9, deficit +576)' % pct(H)) +# cst unit: centre cut climb 8 -> 7 in every call (and: one unit climb dropped) +H = Counter(w.B0); H[8] -= 72; H[7] += 72 +c1 = pct(H) +H2 = Counter(w.B0); H2[1] -= 72 +check('P1.cst-unit', mass_ok(H, -72) and abs(c1 - 2.8099) < 0.0006 and abs(pct(H2) - 2.8242) < 0.0006, + '1 cst unit per call: cut climb 8->7 %+.4f%%, one unit climb dropped %+.4f%%' % (c1, pct(H2))) +# source end FULL->8 (shape 1,1,1,5 -> 1,1,1,4) and target end 8->7 (4 -> 3), one register, all calls +srcs = Counter(tuple(r) for p in CALLS for r in w.d[p]['regs'][:w.d[p]['v']]) +tgts = Counter(tuple(r) for p in CALLS for r in w.d[p]['regs'][w.d[p]['v']:2 * w.d[p]['v']]) +check('P1.src-tgt-shape', all(sum(k) == 8 for k in list(srcs) + list(tgts)) and srcs[(1, 1, 1, 5)] == 140 and tgts[(1, 1, 4, 1, 1)] == 104, + 'every source and target register has climb mass 8; modal shapes (1,1,1,5) x140 of 224 sources and (1,1,4,1,1) x104 of 224 targets are the ones priced') +Hs = Counter(w.B0); Ht = Counter(w.B0) +for p, c in CALLS.items(): + Hs[5] -= c; Hs[4] += c; Ht[4] -= c; Ht[3] += c +check('P1.src-tgt-end', abs(pct(Hs) - 2.8123) < 0.0006 and abs(pct(Ht) - 2.8135) < 0.0006, + 'source end FULL->8: %+.4f%% /unit; target end 8->7: %+.4f%% /unit' % (pct(Hs), pct(Ht))) +# port: v -> v-1 (one source + one target gone per call; idle 48-bins -72; live W -64) +Hp = Counter(w.B0) +for p, c in CALLS.items(): + for x in (1, 1, 1, 5, 1, 1, 4, 1, 1): + Hp[x] -= c +Hp[48] -= 72 +Wn = W0 - 64 +check('P1.port', hmass(Hp) == M * Wn - 2496 and abs(pct(Hp, Wn) + 2.153998) < 0.0006, + 'v-1: %+.4f%% b (deficit 2496, mass residual 0), so one port = +2.15%%' % pct(Hp, Wn)) +# w9 helper removed in all 72 calls: mean over the helper registers of each word, ck + jp8 +tot = {'narrow': 0.0, 'merge48': 0.0} +for p, c in CALLS.items(): + regs = w.helpers(p, 9) + for rule in tot: + vals = [] + for cl in regs: + H = Counter(w.B0) + for x in cl: + H[x] -= c + if rule == 'narrow': + H[9] += c + else: + H[48] += D(9 * c) / 48 + assert abs(hmass(H) - (M * W0 - 2560)) < 1e-6 + vals.append(pct(H)) + tot[rule] += S.mean(vals) +check('P1.w9-helper', abs(tot['narrow'] - 0.0676) < 0.0006 and abs(tot['merge48'] - 0.1371) < 0.0006, + 'one w9 helper removed in all 72 calls (ck mean + jp8 mean): %+.4f%% narrow, %+.4f%% with 48-merge' % (tot['narrow'], tot['merge48'])) +finish() diff --git a/research/format-limits-2/s1-2-erratum-invoice/checks/p2_bit.py b/research/format-limits-2/s1-2-erratum-invoice/checks/p2_bit.py new file mode 100644 index 0000000000..fd66b3fb96 --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/checks/p2_bit.py @@ -0,0 +1,49 @@ +"""P2: bit invoice of the #555 R439 word (nine stages, m = 64, L = 9, K = 4, T = 32, live 28416). +c is the root a of sum_r (r n_r / (m W)) (m/r)^a + 32 m (sum n) / (1e16 W) m^a = 1 (the moment root with its bad term). +CHECKED here: c to 24 digits, the mass identity, and the profile-level cst-unit knobs (a child r -> r-1 on all 288 calls). +The word-level knobs (port with idle repack, helper by pattern) need the per-register climbs and the idle-packing model of +the unpublished card B26/knobs.py (> 120 s) and are RECORDED in the README, not checked.""" +import os, sys +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from invoice import * + +E = load('pr555/EXPECTED.json.gz')['nine'] +P = {int(r): n for r, n in E['profile'].items()} +m, W = 64, E['bit']['live'] +N = 288 + + +def c_of(P, W_=W, prec=60): + with localcontext() as ctx: + ctx.prec = prec + terms = [(D(r * n) / D(m * W_), (D(m) / D(r)).ln()) for r, n in P.items() if n] + terms.append((D(32 * m * sum(P.values())) / D(10 ** 16 * W_), D(m).ln())) + a = D(0) + for _ in range(100): + f = sum(p * (a * l).exp() for p, l in terms) - 1 + df = sum(p * l * (a * l).exp() for p, l in terms) + na = a - f / df + if abs(na - a) < D(10) ** -(prec - 5): + return na + a = na + raise RuntimeError + + +c0 = c_of(P) +lit = D(E['bit_lower_decimal']) +check('P2.root', abs(c0 / lit - 1) < D('2e-22'), 'c = %s vs shipped %s (rel %.1e, 24-digit grid)' % (str(c0)[:28], lit, float(c0 / lit - 1))) +check('P2.mass', hmass(P) == 1808352 == E['bit']['rank_mass'] and m * W - hmass(P) == 10272 == 256 * 111 - 288 * 63, + 'mass %d = rank_mass; deficit mW - mass = 10272 = 256 v - 288 cst (v = 111, cst = 63)' % hmass(P)) +d = lambda Q: float((c_of(Q) / c0 - 1) * 100) +def edit(*ch): + Q = Counter(P) + for r, n in ch: + Q[r] += n * N + return Q +unit = {r: d(edit((r, -1), (r - 1, 1))) for r in range(2, 8)} +unit[1] = d(edit((1, -1))) +check('P2.cst-unit', abs(unit[7] - 2.8017) < 0.0006 and abs(d(edit((7, -2), (6, 2))) - 5.603) < 0.003, + '1 cst unit (copy 7->6, all 288 calls): %+.4f%% c; 2nd unit: %+.3f%% cumulative' % (unit[7], d(edit((7, -2), (6, 2))))) +check('P2.unit-any-rank', all(2.80 <= unit[r] <= 2.817 for r in range(1, 8)) and abs(unit[1] - 2.816) < 0.001, + 'a child r->r-1 on any rank costs %s%% c (width irrelevant)' % ' '.join('r%d %.4f' % (r, unit[r]) for r in range(1, 8))) +finish() diff --git a/research/format-limits-2/s1-2-erratum-invoice/checks/p3_rate.py b/research/format-limits-2/s1-2-erratum-invoice/checks/p3_rate.py new file mode 100644 index 0000000000..a6712ca849 --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/checks/p3_rate.py @@ -0,0 +1,42 @@ +"""P3: helper exchange rate on #649 (% of b per helper removed in all 72 calls: its climbs leave the local profile and its +width w returns to the idle cover, either as one narrow w-child or merged into 48-wide idle children). +Shapes = the climb lists of the helper registers of width w in the #626 ck and jp8 words (exact mean over all of them). +Gate: b (hence kappa = b/(1+b)) reproduced from the PLAN profile of #649, #645, #646, #635 and #626.""" +import os, sys +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from invoice import * +import statistics as S + +KAPPA = {649: '0.001652528731617094', 645: '0.001649483702558979', 646: '0.001627103256702062', + 635: '0.001636241501576388', 626: '0.001635527380375392'} +PLAN = {649: 'pr649/PLAN.json.gz', 645: 'pr645/PLAN.json.gz', 646: 'pr646/PLAN.json.gz', 635: 'pr635/PLAN.json.gz', 626: 'pr626/PLAN.json.gz'} +prof = {} +for n, rel in PLAN.items(): + pl = load(rel); H = profile(pl); prof[n] = H + live, dfc, m = pl['live'], pl['deficit'], pl['M'] + b = root(H, m, live); k = b / (1 + b) + lit = D(KAPPA[n]) + ok = hmass(H) == m * live - dfc and abs(k - lit) <= D('1e-18') + check('P3.gate-%d' % n, ok, 'kappa = b/(1+b) = %s vs published %s (m=%d, live=%d, deficit=%d)' % (str(k)[:20], KAPPA[n], m, live, dfc)) +w = Word626() +BASE = Counter(prof[649]); b649 = root(BASE, M, W0) +def price(width, rule): + pool = [cl for p in CALLS for cl in w.helpers(p, width)] + vals = [] + for cl in pool: + H = Counter(BASE) + for x in cl: + H[x] -= 72 + if rule == 'narrow': + H[width] += 72 + else: + H[48] += D(width * 72) / 48 + assert abs(hmass(H) - hmass(BASE)) < 1e-6 + vals.append(float((root(H, M, W0, start=b649 * D('0.9')) / b649 - 1) * 100)) + return S.mean(vals), len(pool) +TABLE = {9: (0.070, 0.140), 8: (0.051, 0.118), 7: (0.038, 0.101), 5: (0.031, 0.084), 4: (0.026, 0.072)} # README P3 table (3 decimals) +for wd, (tn, tm) in TABLE.items(): + (n, cnt), (g, _) = price(wd, 'narrow'), price(wd, 'merge48') + check('P3.rate-w%d' % wd, abs(n - tn) <= 0.0005 and abs(g - tm) <= 0.0005, + 'w%d helper (%d shapes): %.4f%% b narrow, %.4f%% merged into 48-bins (table %.4g / %.4g)' % (wd, cnt, n, g, tn, tm)) +finish() diff --git a/research/format-limits-2/s1-2-erratum-invoice/checks/p4_s7.py b/research/format-limits-2/s1-2-erratum-invoice/checks/p4_s7.py new file mode 100644 index 0000000000..017747a728 --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/checks/p4_s7.py @@ -0,0 +1,58 @@ +"""P4: stage count s = 9 -> 7 (P = 4 -> 3 bank pairs) on the #626 invoice. Geometry by P: m = 1 + 8(2P+1), W = 2 P T v, +deficit D = T[2Pv - (2P+1) cst], calls = T(2P+1), idle cover I = calls * 8 (s-3) v, v = 112, cst = 64, T = 8. The per-call +local profile (ck 3858 / jp8 3902 + 1856) is the P = 4 one: the P = 3 local program was NOT built, so s = 7 is a model. +A cut of k w9 helpers per call (all calls) returns the average w9 climb profile of the provider; the freed width is +hosted idle mass. Scope: the #626 local words only.""" +import os, sys +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from invoice import * + +w = Word626() +V, CST, T = 112, 64, 8 +def geom(P): + return dict(m=1 + 8 * (2 * P + 1), W=2 * P * T * V, D=T * (2 * P * V - (2 * P + 1) * CST), calls=T * (2 * P + 1)) +Pk = {p: Counter(x for r in w.d[p]['regs'] for x in r) for p in CALLS} +sumw = {p: sum(a * n for a, n in Pk[p].items()) - 1856 for p in CALLS} +w9 = {} +for p in CALLS: + regs = w.helpers(p, 9); c = Counter(x for r in regs for x in r) + w9[p] = {a: D(n) / len(regs) for a, n in c.items()} +g9 = geom(4) +check('P4.gate-geometry', (g9['m'], g9['W'], g9['D'], g9['calls']) == (73, 7168, 2560, 72), 'P=4 reproduces m=73, W=7168, D=2560, 72 calls') +def build(s, k): + P = (s - 1) // 2; g = geom(P); ck = g['calls'] // 9; cnt = {'ck': ck, 'jp8': g['calls'] - ck} + H = Counter(); hz = D(0) + for p, c in cnt.items(): + for a, n in Pk[p].items(): H[a] += n * c + for a, n in w9[p].items(): H[a] -= n * D(str(k)) * c + hz += c * (sumw[p] - 9 * D(str(k))) + I = g['calls'] * (s - 3) * 8 * V; left = I - hz; cw = (s - 3) * 8 + H[cw] += left / cw + return g, H, left, hz, I, sum(a * n for a, n in H.items()) - (g['m'] * g['W'] - g['D']) +for s in (9, 7): + g, H, left, hz, I, res = build(s, 0) + check('P4.mass-identity-s%d' % s, abs(res) < D('1e-9'), 's=%d: mass = mW - D (residual %s), idle I=%d, hosted Hz=%d, leftover %s' % (s, res, I, hz, left)) +g7, H7, l7, hz7, I7, _ = build(7, 0) +check('P4.overflow-s7', I7 == 200704 and hz7 == 218248 and l7 == -17544, + 's=7 (56 calls, 8 ck + 48 jp8): I=%d, Hz=%d, hosting overflow %d = %.1f%% of the idle cover I' % (I7, hz7, -l7, float(-l7 / I7) * 100)) +for p in CALLS: + print('INFO k needed (%s alone) = %.1f' % (p, float((sumw[p] - 3584) / 9))) +kneed = (sumw['jp8'] * 48 + sumw['ck'] * 8 - 3584 * 56) / D(9) / 56 +check('P4.k-fit', 34 < kneed < 36, 'fit at s=7 needs k = %.1f w9 helpers cut per call (R 492 -> %.0f)' % (kneed, 492 - kneed)) +ref = root(build(9, 0)[1], 73, 7168) +rows = [] +for k in (35, 40, 60): + g9_, H9, l9, *_ = build(9, k); g7_, H7_, l7_, *_ = build(7, k) + b9 = root(H9, g9_['m'], g9_['W']); b7 = root(H7_, g7_['m'], g7_['W']) + rows.append((k, float((b9 / ref - 1) * 100), float(b7 * 1000), float((b7 / b9 - 1) * 100), float(l7_))) + check('P4.worse-k%d' % k, l7_ >= 0 and b7 > b9 and 0.1 < rows[-1][3] < 0.3, + 'k=%d: b9 %+.2f%% vs k=0 (same cut at s=9); b7 = %.4e; b7/b9 at the same R = %+.2f%% (the cut buys s=7 admission only)' % (k, rows[-1][1], b7, rows[-1][3])) +deep = [] +for k in (234, 300, 480): + row = [] + for s in (9, 7, 5): + g, H, l, *_ = build(s, k) + row.append(float(root(H, g['m'], g['W']) * 1000) if l >= 0 else None) + deep.append(row) + check('P4.deep-k%d' % k, row[0] > row[1] > row[2] if None not in row else False, 'b x1e3 at s=9/7/5: %s (s=9 largest at every k)' % ['%.3f' % x for x in row]) +finish() diff --git a/research/format-limits-2/s1-2-erratum-invoice/checks/p5_cover.py b/research/format-limits-2/s1-2-erratum-invoice/checks/p5_cover.py new file mode 100644 index 0000000000..a2a75ade8f --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/checks/p5_cover.py @@ -0,0 +1,21 @@ +"""P5 (profile-level part): the climb mass of the #626 invoice is a forced cover: mass = mW - deficit exactly, so padding +mass is not an option, and reshaping mass is priced by the shape alone. Checked: the mass identity from the word and the PLAN, +and the arithmetic bound 'moving 1% of the unit-climb mass into width-9 climbs gives +0.26% b'. The frame-SA outcome (0.0% b over +legal assignments), the ~96% blocking histogram and the SSS-hourglass comparison are RECORDED (evidence/P5).""" +import os, sys +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) +from invoice import * + +w = Word626(); b0 = root(w.B0, M, W0) +check('P5.cover', hmass(w.B0) == M * W0 - w.plan['deficit'] == 520704 and w.plan['deficit'] == 2560 == 64 * 112 - 4608, + 'mass %d = 73 * 7168 - 2560 (deficit 2560 = 64 v - 4608 at v = 112, an asserted constant of the invoice)' % hmass(w.B0)) +local = sum(a * n for a, n in w.H.items()) - 0 +per_call = {p: sum(a * n for a, n in Counter(x for r in w.d[p]['regs'] for x in r).items()) for p in CALLS} +check('P5.local-mass', per_call == {'ck': 5714, 'jp8': 5758}, 'local mass per call: ck 5714, jp8 5758 (= sum of helper widths + 1856)') +H = Counter(w.B0); u = H[1] - w.idle.get(1, 0) # unit climbs of the 72 local words +mv = D(u) / 100 +H[1] -= mv; H[9] += mv / 9 +assert abs(hmass(H) - hmass(w.B0)) < D('1e-9') +g = float((root(H, M, W0) / b0 - 1) * 100) +check('P5.padding-bound', abs(g - 0.26) < 0.01, 'moving 1%% of the unit-climb mass into width-9 climbs (mass conserved): %+.3f%% b' % g) +finish() diff --git a/research/format-limits-2/s1-2-erratum-invoice/evidence/E2/R39-S-NOTES.md b/research/format-limits-2/s1-2-erratum-invoice/evidence/E2/R39-S-NOTES.md new file mode 100644 index 0000000000..f439397069 --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/evidence/E2/R39-S-NOTES.md @@ -0,0 +1,17 @@ +# R39-S notes (coordinator: Sonnet; no swarm used, nothing parallelisable) +Plan: (1) gate: quote the schedule/rho item, map to spec, legality; (2) if rho is a real input, sweep verify; (3) else bound rho at the scalar layer; (4) re-price the six LOCAL-PRICE kills under the measured multiplier. +Repo: repo/ (branches pr595, pr622, pr623). Tools: tools/rho_bfs.py (small), tools/rho01.cpp (+ binary rho01). + +## Gate result (stage 1): rho is NOT a verify input -> a 5-7 point kappa(rho) sweep is impossible as posed +- Item: #595 research/format-limits/README.md B.2 row 5 ("rho = signed exchange of X_a and Y_a, pairwise: C, any permutation rho is legal; never varied") and "schedule/rho family (rows 5,12,13)" (B.3 item 8, L349; open-problem 3, L783). Spec side: U/04-swap.tex:105-123 (gates induce a permutation rho; M_out(rho(w)) - M_in(w) = I_m). +- Legal in the paper's spec; but #623's verifier chain (witness-spec-tools spec.py/verify.py; k492b code/) has no rho/schedule parameter. rho is hard-coded in the scalar checks (columns_k.cpp:56 final bank swap; bit_global.py:49-55; Lean Work__Bridge__Net). A non-exchange rho needs new provider words and checker edits, not a parameter. +- Hypothesis check: the multipliers x1.15..2.15 in #595 A.7 are idle-frame-change terms (B_K idle free x2.14, one idle child x1.55, no split x1.18 at s=9), obtained by DROPPING rules. They are not a rho family. The cold/HPE ends (hyperplane_end, cold_end steps) are post-skeleton helper-end frames and do not depend on rho. So "rho scales the cold/HPE family" has no support. +## Measurement (stage 2 substitute): scalar-layer enumeration over ALL pair-preserving monomial rho +Tool: rho01 (0-1 BFS over F2 bank matrices; generators = pair-local shears Y+=X / X+=Y, elementary bridges X_d+=X_s,Y_s+=Y_d). Reachable set = Sp(2P,2) exactly (720 at P=2, 1,451,520 at P=3). Recipe replayed: full exchange P=2 -> (5 locals, 3 bridges), P=3 -> (7, 6): equals B_K. +Result, P=2 and P=3, every target: locals = 2k+1 where k = number of exchanged pairs (0 locals if k=0), bridges >= 3(k-1) and strictly more once pairs are permuted (e.g. P=3 cyclic perms 6-8). Unexchanged pairs are idle wires (no deficit). No rho beats B_K per served pair: multiplier = 1.000, same as J1-E's 1.000 (J1-E fixed rho = exchange; this removes that fixing). F2 reduction is a necessary condition, so this is a lower bound on cost, not a model artefact. Scope: P<=3, one pair per local, port-uniform rho; port-dependent rho = multi-bank locals (J22-B kill). +## Verdict: PROVEN (scope above) NO-GO for the rho half; kappa(rho) at best legal rho = #623's 1.635490664920455e-3 (no change; I did not re-run the 500 s verify since no rho input exists). +## Re-pricing (stage 3): multiplier 1.000 -> no LOCAL-PRICE kill crosses zero. Factor each would need: J23-F ~x40 (-5.5% per use vs +0.14%/copy), J24-C1 ~x15, J38-U x4-8 (gross +1.0% vs net -3..-7%), J36-B/J32-U/J37-D: negative at unit scale, no scope term to scale. No stack. Owner run not triggered (< +0.2%). +Escapes (>=3): (E1) non-symplectic/multi-bank locals (J22-B, P>=4 hybrids unenumerated); (E2) port-dependent rho (wire-level, needs a local that mixes ports); (E3) K>=4 bridge-graph search with cycles; (E4) signed-Z target when F2 target is not reachable is irrelevant (F2 necessary). Rescue lemma: a local whose emit changes bank pairing (X_a with Y_b) at equal window cost, or a bridge commuting with advances. + +## Coordinator synthesis (wave 1 empty, no wave 2) +Core work was done in-card: rho is not a verify input; scalar-layer enumeration over all pair-preserving rho (P<=3) shows no rho beats B_K (multiplier 1.000). Verdict NO-GO for rho; kappa stays at #623's 1.635490664920455e-3 (below GO bar 1.64040e-3). No LOCAL-PRICE kill (J23-F, J24-C1, J38-U, J36-B, J32-U, J37-D) crosses zero; no stack; owner run not triggered. Escapes E1-E3 remain. No parallelization needed. diff --git a/research/format-limits-2/s1-2-erratum-invoice/evidence/E2/rho01_P2.txt b/research/format-limits-2/s1-2-erratum-invoice/evidence/E2/rho01_P2.txt new file mode 100644 index 0000000000..7b26af8d5d --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/evidence/E2/rho01_P2.txt @@ -0,0 +1,9 @@ +perm=01 swapmask=0 : locals=0 bridges=0 +perm=01 swapmask=1 : locals=3 bridges=0 +perm=01 swapmask=2 : locals=3 bridges=0 +perm=01 swapmask=3 : locals=5 bridges=3 +perm=10 swapmask=0 : locals=0 bridges=3 +perm=10 swapmask=1 : locals=3 bridges=3 +perm=10 swapmask=2 : locals=3 bridges=3 +perm=10 swapmask=3 : locals=5 bridges=4 +states 720 diff --git a/research/format-limits-2/s1-2-erratum-invoice/evidence/E2/rho01_P3.txt b/research/format-limits-2/s1-2-erratum-invoice/evidence/E2/rho01_P3.txt new file mode 100644 index 0000000000..89331c84f0 --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/evidence/E2/rho01_P3.txt @@ -0,0 +1,49 @@ +perm=012 swapmask=0 : locals=0 bridges=0 +perm=012 swapmask=1 : locals=3 bridges=0 +perm=012 swapmask=2 : locals=3 bridges=0 +perm=012 swapmask=3 : locals=5 bridges=3 +perm=012 swapmask=4 : locals=3 bridges=0 +perm=012 swapmask=5 : locals=5 bridges=3 +perm=012 swapmask=6 : locals=5 bridges=3 +perm=012 swapmask=7 : locals=7 bridges=6 +perm=021 swapmask=0 : locals=0 bridges=3 +perm=021 swapmask=1 : locals=3 bridges=3 +perm=021 swapmask=2 : locals=3 bridges=3 +perm=021 swapmask=3 : locals=5 bridges=6 +perm=021 swapmask=4 : locals=3 bridges=3 +perm=021 swapmask=5 : locals=5 bridges=6 +perm=021 swapmask=6 : locals=5 bridges=4 +perm=021 swapmask=7 : locals=7 bridges=7 +perm=102 swapmask=0 : locals=0 bridges=3 +perm=102 swapmask=1 : locals=3 bridges=3 +perm=102 swapmask=2 : locals=3 bridges=3 +perm=102 swapmask=3 : locals=5 bridges=4 +perm=102 swapmask=4 : locals=3 bridges=3 +perm=102 swapmask=5 : locals=5 bridges=6 +perm=102 swapmask=6 : locals=5 bridges=6 +perm=102 swapmask=7 : locals=7 bridges=7 +perm=120 swapmask=0 : locals=0 bridges=6 +perm=120 swapmask=1 : locals=3 bridges=6 +perm=120 swapmask=2 : locals=3 bridges=6 +perm=120 swapmask=3 : locals=5 bridges=7 +perm=120 swapmask=4 : locals=3 bridges=6 +perm=120 swapmask=5 : locals=5 bridges=7 +perm=120 swapmask=6 : locals=5 bridges=7 +perm=120 swapmask=7 : locals=7 bridges=8 +perm=201 swapmask=0 : locals=0 bridges=6 +perm=201 swapmask=1 : locals=3 bridges=6 +perm=201 swapmask=2 : locals=3 bridges=6 +perm=201 swapmask=3 : locals=5 bridges=7 +perm=201 swapmask=4 : locals=3 bridges=6 +perm=201 swapmask=5 : locals=5 bridges=7 +perm=201 swapmask=6 : locals=5 bridges=7 +perm=201 swapmask=7 : locals=7 bridges=8 +perm=210 swapmask=0 : locals=0 bridges=3 +perm=210 swapmask=1 : locals=3 bridges=3 +perm=210 swapmask=2 : locals=3 bridges=3 +perm=210 swapmask=3 : locals=5 bridges=6 +perm=210 swapmask=4 : locals=3 bridges=3 +perm=210 swapmask=5 : locals=5 bridges=4 +perm=210 swapmask=6 : locals=5 bridges=6 +perm=210 swapmask=7 : locals=7 bridges=7 +states 1451520 diff --git a/research/format-limits-2/s1-2-erratum-invoice/evidence/E2/rho_bfs_P2.txt b/research/format-limits-2/s1-2-erratum-invoice/evidence/E2/rho_bfs_P2.txt new file mode 100644 index 0000000000..b098c235e4 --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/evidence/E2/rho_bfs_P2.txt @@ -0,0 +1,8 @@ +((0, 1), (0, 0)) (0, 0) +((1, 0), (0, 0)) (0, 3) +((0, 1), (0, 1)) (3, 0) +((0, 1), (1, 0)) (3, 0) +((1, 0), (0, 1)) (3, 3) +((1, 0), (1, 0)) (3, 3) +((0, 1), (1, 1)) (5, 3) +((1, 0), (1, 1)) (5, 4) diff --git a/research/format-limits-2/s1-2-erratum-invoice/evidence/P1/B15-NOTES.md b/research/format-limits-2/s1-2-erratum-invoice/evidence/P1/B15-NOTES.md new file mode 100644 index 0000000000..b196a00c51 --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/evidence/P1/B15-NOTES.md @@ -0,0 +1,37 @@ +# B15: invoice calculus (exact word -> b map). VERDICT: PROVEN-MAP (gate passed). ship=false +Scope: #626 (pr626 extracted to ./pr626), providers ck(8 calls)/jp8(64) CANONICAL-WORD replay (B11 coarse.py + reg.py), profile model of check_moment. Tools: reg.py (per-register climbs), calc.py (gate), knobs.py (all derivatives). Run: ../../venv/bin/python3 knobs.py (~2 min). + +## Gate (PASSED, exact) +b(#626) = 0.00163820671230808686 -> kappa=b/(1+b)=0.001635527380375392 = PR626 README to all 16 digits. #623 profile (12:1,21:1) gives kappa 0.001635490664920455 (exact). Built from the words alone, no PLAN profile. + +## Chain: word -> b (all verified numerically) +1. v=112, h=9, m=73=8h+1, DATA=live=W=8*T*v=7168 (K=4 blocks x T=8 replicas x 2v). W is PER WORD-SET (all 72 calls, one cover), NOT 4v+R: R never enters W in the complex invoice (physical=W+R+8+2 only enters finite inequalities). B12's "W=4v+R" is the five-stage moment.py price(), not this engine. +2. Per-register paid mass (climb widths of the monotone frame replay): source 8 (1,1,1,5), target 8 (end perp(port) dim 8), helper = EXACTLY its residual width w=|U|-|E| (4/5/7/8/9), centre = 9 + 8 (cut climb 8) = 17 (centres are 8 of the R=492 helper columns). +3. Local mass per call L = sum(w_helpers) + 1856, 1856 = 2v*8 + 64 (64 = 8 centres x cut 8; =16v+64). ck: 5714 = 3858+1856; jp8: 5758 = 3902+1856 (checked). +4. Idle cover: fixed geometry I = 72*48*v = 387072 (48-wide idle children). Hosted helper residuals Hz = sum_w*calls (280592) occupy windows, leftover = I - Hz (2215 x 48 + 123 x 1 + 1 x 37 in #626) is paid as children. +5. Total mass = L + I - Hz = 72*(16v+64) + 72*48v = ... = m*W - deficit; deficit = 64v - 4608 = 2560 (derived, linear in v; NOT a free literal: it is the constant L-Hz=1856 per call). So deficit is fixed by 3, and total mass 520704 is invariant under helper changes. +6. b = root of F(a)=sum_r (r n_r/(mW)) (m/r)^a = 1 over H = 64*jp8 + 8*ck local children + idle leftovers; kappa = b/(1+b). b ~ (deficit/(mW))/mean ln(m/r): MORE deficit = bigger b; wider climbs cheaper. + +## Knob map (exact finite differences, Decimal root; % of b) +| knob | exact dB | structural move | register status | +|---|---|---|---| +| remove 1 centre (cut rank 7) | +22.60% (add one: -22.56%) | local -17, host -9, deficit +576 | rank-8 cut forced (B3/B10); "more centres" closed | +| 1 cst unit (L-Hz 1856->1855: -1 mass/call) | +2.81% (+2.82% as one unit climb/call) | e.g. cut climb 8->7, source end FULL->8, target end 8->7, one register 1 unit lower | decoder cst 72->71 registered (+2.7%); register-level END-FRAME form NOT registered (below) | +| v-1 (112->111 columns, geometry) | -2.15% (deficit 2496) | not a move: v is the problem size | n/a | +| remove 1 w9 helper, ALL 72 calls (jp8 +ck) | +0.068% narrow idle (freed w returns as one w-child); +0.137% if freed w merges into 48-chunks | mass-conserving: its climbs leave, w freed in host window | count ledger 0.143% = best case; B2 0.043% gross is BELOW even narrow exact (B2 probably includes read-climb loss) | +| remove 1 helper by width, jp8 only (64 calls), narrow / 48-merge | w9 0.060/0.122; w8 0.043/0.102; w7 0.035/0.090; w5 0.027/0.074; w4 (cold unit) 0.023/0.064 | same | ck adds ~13% on top (8 calls) | +| merge 2 unit climbs -> 1 width-2 (72 calls) | +0.0064% (jp8-only 0.0057) | frame coarsening | B11: blocked 96% | +| merge r unit -> width r, per unit absorbed | r=3 .0051, 4 .0064, 5 .0074, 9 .0102 % | | | +| all jp8 unit pairs merged (bound) | +8.8% | | B11 SA: 0% legal | +| mass unit moved width r->48, per 1000 units | r=1 .249%, 2 .204, 3 .178, 4 .159, 5 .145, 8 .115 | | price of any reshaping | +| helper end FULL->d (w9, jp8): d=8/7/6/5/4 | narrow -.003/-.001/+.004/+.007/+.014; 48-merge +.013/+.025/+.038/+.048/+.060 | trailing climbs dropped, hosted width freed equally (deficit unchanged) | cold/hyperplane ends already in word (22+34) | + +## Reading +- Helpers are cheap per unit, the CONSTANT is expensive: one mass unit/call in the 1856 is worth 2.8% b = 20-40 helpers. The 1856 is src 8 x 112 + tgt 8 x 112 + 64 centre-cut mass. Helper changes are mass-neutral (climb mass = hosted width); only END FRAMES of non-hosted registers (sources, targets, centres) change the deficit. +- Count-ledger 0.143%/helper is the optimistic 48-merge bound; realistic narrow = 0.068% (w9, all calls); w4-5 helpers 0.02-0.03%. B2's 0.043% is within a factor 1.6 of narrow: consistent, not contradicted. +- Sources/targets/centres are 224*8+136 = 1928 mass per call and carry no hosting counterpart: each unit saved is +2.8% b. + +## Unregistered >=1% path (knowledge, UNVERIFIED legality) +Source END frame below FULL (or target below perp(port) dim 8): each saved unit on ONE register (all 72 calls) = +2.81% exactly, 112 sources/targets available. Not in BLOCKED-IDEAS (grep: sources end at FULL appears only as assumption (f) in archive/r13/G_walls, and as taint W4 at r13/Y_synergy). Likely blocker: sources/targets must be restored to the exact frame the next stage reads (taint W4); helpers escape via hyperplane/cold ends because they carry no data. Rescue check (~30 min): for ONE source register, test whether the final climb 4->9 can stop at a hyperplane U that contains the next role's first frame (Y_synergy rule: end(role1) inside U(first event role2)). +## Escapes/limits +1. Freed-w merge fraction (narrow vs 48) is owner-MIP dependent; reported both. 2. face/key/host helper classes of J21-K ledger not separable from register roles here; classes given by width. 3. v and centre knobs are priced on the invoice only (word not rebuilt). ship=false. diff --git a/research/format-limits-2/s1-2-erratum-invoice/evidence/P2/B26-NOTES.md b/research/format-limits-2/s1-2-erratum-invoice/evidence/P2/B26-NOTES.md new file mode 100644 index 0000000000..ccceecf980 --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/evidence/P2/B26-NOTES.md @@ -0,0 +1,36 @@ +# B26: bit invoice calculus (exact word -> c map). VERDICT: PROVEN-MAP (gate passed). ship=false +Scope: #555 R439 word (pr head 65a6bc1, work/pr; research/e8-bit-p111), nine-stage chain (m=64, L=9, K=4, T=32). Files: gate.py (c from profile), reg.py (per-register climbs of the word via export_records), knobs.py/k2.py (all derivatives). Run: ../../venv/bin/python3 knobs.py (~1 min). Full verify.sh NOT run (heavy slots busy; not needed: EXPECTED.json carries the profile). + +## Gate (PASSED) +c = root a of sum_r (r n_r/(m W)) (m/r)^a + 32 m (sum n)/(1e16 W) m^a = 1 (moment.certify, bad=True), P = EXPECTED nine.profile {1:380448,2:400416,3:23040,4:27744,5:29376,6:17088,7:26496,42:288}, m=64, W=28416. +Result 0.001733052823330162099157209 = shipped 1733052823330162099157/1e24 (agrees to the 24-digit grid, rel 1.2e-22). Mass 1808352, deficit 10272. + +## Chain: word -> c +1. W = 2 K v T = 256 v = 28416 (live data), PER WORD-SET; R never enters W (R<=4v only gates hosting). m = 1+7L = 64. +2. Local children per invocation = the forward replay's climbs (op 0 ranks) + 9 centre copies of rank 7 (cst 63). 288 = L*T invocations, each the same: H = {1:1321,2:1342,3:80,4:47,5:102,6:10,7:18}; local mass 8R+cst+14v = 5129. Registers: 111 sources (mass 7 each, patterns (1,2,2,1,1)x98,(3,2,1,1)x10,(1,2,4)x3), 111 targets (7 each: (2,5)x92,(1,6)x10,(7,)x9 = the 9 totals), 439 helpers (8 each, ALL width 8, 10 climb patterns). +3. Idle cover (fixed geometry, 2vT windows per type): ranks 14,28,42 (128v windows each) and 7 (192v). Whole helper residuals (width 8) are hosted: 14-window 1 slot, 28 -> 3, 42 -> 5; slots 4v=444 per (stage,replica). Leftovers: 14->6, 28->4, 42->2, plus the 5 free slots per stage-replica = ONE empty rank-42 window (288 r42 children, tight at R=439). Rebuilt P = 288*H + {2:13920,4:14208,6:14208,7:21312,42:288} EXACTLY. +4. Total mass = 288(cst+14v) + I(v) is independent of R; deficit = T(2KV - L cst) = 256v - 288 cst (=10272). Helpers are mass-neutral (8 local + 8 hosted cancel); only sources/targets/copies (cst) move mass. c rises with deficit, falls with mean ln(m/r). + +## Knob table (exact, Decimal root, % of c; ALL 288 calls unless noted; one call = 1/288 of it) +| knob | exact dc | notes | +|---|---|---| +| 1 cst unit (copy 7->6; deficit +288) | +2.8017% (2nd unit +5.603%) | any child r->r-1 on a source/target/copy: 2.8017 (r7) .. 2.816 (r1); width irrelevant | +| lose 1 cst unit | -2.8011% | 2 units = -5.63% (the descent price) | +| whole source / target register (7 units) | +19.7% / +19.7% | just 7 units; not a move | +| one retained total (target (7,) + its copy, 14 units) | +39.3% | cst 63->56 | +| 1 port (v-1; src+tgt gone, W-256, idle -128 windows each) | -2.13..-2.16% (so +1 port at same cst = +2.15%) | break-even: +0.77 cst unit per added port; +1 cst/port = -0.65% | +| 1 helper removed (R-1), best idle repack | +0.085..0.114% | pattern (1,1,2,2,1,1) .114, (2,2,2,2) .101, (1,3,4) .085; free slot goes to a 14-window | +| same, narrow (slot stays in its original window) | +0.062..0.092% | | +| remove 2 / 5 / 10 helpers (best) | +0.238 / +0.694 / +1.398% | 5 free slots make a 2nd empty 42-window: superlinear | +| add 1 helper (R+1) | -0.166% | breaks the empty 42-window (r42 -> r8) | +| merge 2 unit climbs -> width 2 (all calls) | +0.0068% | 1+2->3 .0093, 2+2->4 .0135, 1+5->6 .0132 | +Largest per structural change: (1) cst unit +2.80%; (2) port +2.15% (cst-neutral); (3) one helper +0.06..0.11% (merge 0.007%). cst/descent are the only >=1% bit levers; ~25-45 helpers = 1 cst unit. + +## Misprice check vs registered bit mechanisms +- Oct 11 rmdec "+2.70% c per cst unit": exact 2.80% (1.04x). OK. +- J24-C1 / ledger "descent = 2 cst units = -5.8..-6.3% c": exact -5.63% (1.03-1.12x). OK. +- Count ledger "0.047-0.125% c per register": exact 0.062-0.114% (narrow .062-.092). Within 1.3x. OK. +- B16 "ports -1% at cst 65": exact is -3.45% at cst +2/port (+2.15 -5.60) and -0.65% at +1; the "-1%" does not match either; the 63->65 reading is a ~3.5x gap (or the ledger meant +1 cst: 1.5x). Re-read B16 before reuse. +- NO >=2x misprice of a registered bit mechanism on the helper/cst/descent lines. Bit B8/B17 proxies stand. +## Escapes/limits +1. Hosting repack (best vs narrow) is a bound: stage-level window availability and the owner MIP are not rebuilt; the 5-free-slot structure at R439 is exact. 2. Per-register classes by climb pattern only (line/cell/keeper provenance not separated). 3. Port/helper knobs priced on the invoice, word not rebuilt. 4. #589 tuned word (c +0.0216%) not used; same chain, shifts knobs <0.1%. ship=false. diff --git a/research/format-limits-2/s1-2-erratum-invoice/evidence/P3/B66-NOTES.md b/research/format-limits-2/s1-2-erratum-invoice/evidence/P3/B66-NOTES.md new file mode 100644 index 0000000000..0202f76e8f --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/evidence/P3/B66-NOTES.md @@ -0,0 +1,28 @@ +# B66 NOTES: exchange rate of a helper (SETTLED). ship=false. Tools: work/b66prof.py, rate.py, dec.py, dec2.py (short single-process runs, no heavy job) +Scope: PLAN.json profiles of PR heads (#649, #645, #646, #635, #626) + B15 invoice root + B15 per-register climb shapes (#626 canonical word, same helper skeleton as #649). Base = #649. +## Gate (PASSED, exact) +b(#649)=0.00165526410310589141 (=README to 21 digits), #645 kappa 1.649483702558979e-3, #646 kappa 1.627103256702062e-3, #635 1.636241501576388e-3: all reproduced from PLAN profile {r:n} via root of sum r n_r/(mW) (m/r)^a = 1. +## Rate table: % b per helper removed (all 72 calls, climbs leave, width w returns to idle), on #649; linear in k (k=1,5,12,35 within 3%) +| w | no merge (narrow w-child) | merge into 48-bins | k=35 w9 (narrow / merge48) | +| 9 | 0.0725 | 0.141 | +2.48% / +5.11% | +| 8 | 0.050 | 0.119 | | +| 7 | 0.038 | 0.101 | | +| 5 | 0.031 | 0.084 | | +| 4 | 0.026 | 0.072 | | +(re-pack with own packer = the merge48 column is its upper bound; see #646 below: realised ~ narrow.) +## #646 decomposition (vs #635, its true parent; #645 is NOT its parent: #646 has 22 ends, no gauge) +Realised db = -0.559% (kappa 1.636242 -> 1.627103e-3). Per-call width inventory change: w4 -6, w7 -14, w8 +6, w9 +2 (net -12 helpers; sum width -55.7/call). +- Pure helper-count/width effect, priced at B15 shapes: +0.31% (narrow) / +1.00% (merge48). POSITIVE. +- Realised minus predicted profile: +4100 unit, +4973 width-2 children, -1458 w5, -796 w4, -930 w7 (mass pushed into 1/2-wide climbs: surviving helpers' transported residuals climb more) => residual -0.87% (narrow) / -1.54% (merge48). +- Packing: realised 48-window count +9 vs +97 needed for full merge: #646 realised ~ NO-MERGE (narrow) hosting. +So helper-removal is not negative; -0.9% is the climb/shape cost of the #646 transport, an unpriced side effect (loses cheap early endings), not a negative rate. +## Why the register disagreed +B15 0.068 = w9 narrow; 0.137-0.143 = w9 merge48 (best case, needs re-packing that #646 did not realise); B2 0.043 gross/0.027 net = mostly width-7 helpers (narrow w7 = 0.038) minus lost cold ends and read climbs; #646 negative = a different package-wide climb change, not the rate. All consistent once width and merge rule are stated. +## Settled rate +Per w9 helper: 0.072% b (realised/no-merge), 0.14% only with perfect 48-merge. Realised rates incl. side costs of triangle-style removals: ~0.0 to 0.03% (B2 net, #646 -0.56%/12). Use 0.07% as the GO-bar rate for a clean (climb-neutral) removal; 0.027% for triangle-type removals. +## Re-priced GO helper counts (cap +4.72% b, GO ~ +0.3% kappa) +- 35 w9 helpers: +2.5% b (clean, narrow), +5.1% only with merge (B54's +5% is the merge case). Cap reached at ~65 w9 (narrow), ~33 (merge48). +- GO (+0.3%): ~4-5 w9 clean; ~11 at triangle-type net 0.027%. +- 56 cross-block totals (B7/X4 are a hypothetical skeleton per judge, not a shipped word; width unknown): at w9 = +4.1% (narrow) / +7.9% (merge); at w7 = +2.1% / +5.7%; i.e. about half the register's 8% figure when no-merge. +- Un-triangled 504 Gauge56 (SYN-2 vs B56): helper axis alone is +0.31% .. +1.0% for the 12 helpers back or forth; sign hinges on the climb residual (-0.9% for 8 triangles); SYN-2's + side needs the climb cost to be avoided. Not resolved by rate alone; the rate is positive, B56's "net negative" is the transport residual. +Not done: #656 profile; true re-pack with a package packer (merge-vs-narrow bracketed, #646 shows near-narrow). diff --git a/research/format-limits-2/s1-2-erratum-invoice/evidence/P4/B54-NOTES.md b/research/format-limits-2/s1-2-erratum-invoice/evidence/P4/B54-NOTES.md new file mode 100644 index 0000000000..3246edb4b1 --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/evidence/P4/B54-NOTES.md @@ -0,0 +1,27 @@ +# B54: complex s=9 -> 7 joint with R. VERDICT: KILLED at the gate. ship=false +Tools: work/s7.py (+ B15 calc.py/reg.py copies; B15 files untouched). Model: #626 words (ck/jp8 canonical replay), geometry parametrised by P: +m=1+8(2P+1), W=2PTv, D=T[2Pv-(2P+1)cst], calls=T(2P+1), idle I=calls*8(s-3)*v, per-call local = 1856 + sum w (unchanged by P). +## Gate (tooling): PASSED +P=4 gives 73/7168/2560/72; B15 calc.py reproduces b(#626)=0.0016382067123080868626 (mass identity residual 0.0 at s=9 and s=7). +Own fractional-idle s9 baseline is 1.63872e-3 (+0.03% vs exact B0, idle shape only); all ratios below use the same convention at both s. +## s=7 invoice (56 calls, 8 ck + 48 jp8, m=57, W=5376, D=1792) +- I(7)=200,704. Hz(7)=8*3858+48*3902=218,248. Overflow 17,544 (8.7% of Hz). Per call: ck 3858 / jp8 3902 vs 3584 allowed. +- Cheapest legal treatment = minimal helper cut (mass-neutral). The v4 "unhosted slots" convention is the same b with R unchanged, so it is not a separate price. +- Fit needs k=34.6 w9 helpers cut per call (all calls), R 492 -> ~457 (-7.1%). R* = 0.93 R(#626/#643), so inside the 0.85 line. +- ck alone needs 30.4, jp8 alone 35.3 (ck is the lighter provider; the gain is the 4 helpers, ~0.5% b; #643 moved the other way). +## Gate (economics): KILL +| k cut (R) | b9 vs b9(k=0) | b7 | b7 / b9 same R | +| 35 (457) | +5.04% | 1.7249e-3 | +0.21% | +| 40 (452) | +5.80% | 1.7371e-3 | +0.20% | +| 60 (432) | +8.96% | 1.7877e-3 | +0.13% | +Required b7 >= +3% over b9 at R*: got +0.21%. The decay with k continues: helper-free s7 loses. +Deep k (b x1e3, ovf = hosting overflow impossible, all feasible): k=234 s9 2.412 / s7 2.395 / s5 2.303; k=300 2.783/2.749/2.611; k=480 4.793/4.611/4.108. +So in this model the descent is worse than s9 at every R: D/(mW) +19.5% is eaten by mean ln(m/r) (m 73 -> 57, unit climbs dominate), net -0.7..-3.8%. The "+11.7% helper-free ceiling" is not realised with the #626 local profile; it would need the P=3 local program to have a different (fewer-unit) profile, which is the unpriced template risk. +## Joint table (per w9 helper cut, all calls) +s=9 alone: ~0.14%/helper (+5.0% for 35, matches B15 48-merge 0.137%). s=7: the same 35 cut only buys admission (hosting fits), final b7 = b9 + 0.21%. The switch adds ~nothing beyond the cut; the 35 helpers are worth the same +5% at s=9 with no descent. There is no 3x multiplier. +## s=5 line +I(5)=40*16*v=71,680, Sum w <= 1792 per call, i.e. ~234 w9 helpers cut (R ~258); b5/b9 = 0.955 there, 0.857 at k=480. Dead on this model; B20 skeleton prize does NOT gain from the s descent. +## Caps and credit +Capped at +5.72% (B53, #555): b7 tight (1.7249e-3 vs frontier b 1.6392e-3) is +5.2% only because of the 35 helper cut, which is delivered by nothing; the same cut at s9 gives +5.0%. Without the cut: s=7 infeasible (overflow). Uncapped marginal of s=7 over s=9: +0.2%. Credit from the descent itself: 0. +## Not done +Bank legality in the complex verifier (moot after the gate; verifier pins m=73/D=2560/72 calls). P=3 local program not built; the sign could change only if its local profile is far lighter in unit climbs (rescue: build a P=3 template, owner MIP; not worth it at a 0.2% margin vs a -3.8% model slope). diff --git a/research/format-limits-2/s1-2-erratum-invoice/evidence/P5/B11-NOTES.md b/research/format-limits-2/s1-2-erratum-invoice/evidence/P5/B11-NOTES.md new file mode 100644 index 0000000000..8554b8c560 --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/evidence/P5/B11-NOTES.md @@ -0,0 +1,29 @@ +# B11: climb-width economics, legal frame coarsening. VERDICT: LOCAL-PRICE (fast kill gate hit; gain 0.0%). ship=false + +Scope: the shipped #623 providers ck (8 calls) and jp8 (64 calls), CANONICAL-WORD.json.gz of r40/base/work/k492b/{ck,jp8}-local, A+B+tail op frames, fixed scalar word, fixed op ORDER, fixed start/final/centre frames. Tools in work/ (coarse.py opt.py opt3.py upper.py hist*.py lower.py). + +## Model (all from the checkers, hpe_emit_local.py / gk_word.profile / hpe_audit_local.py) +A climb is paid only when a register's frame changes between touches. Legal frame assignment = per-register monotone nested chain, ONE common frame per ADD, start <= first, last <= final (targets end at perp(port), dim 8; U-ended helpers at U), centre frame == cf at the A/B boundary, tail/cleanup as given. Profile reproduced exactly: ck {1:2596,2:552,3:304,4:160,5:70,6:8,8:8} (3698 climbs, mass 5714), jp8 {1:2512,2:400,3:448,4:160,5:70,6:8,8:8}. Frame choice does not change mass, only shape (b ~ 1/mass-weighted ln(m/r); S=sum r ln r is the objective). + +## Gate +(a) Bounds per op: lazy lower bound G (join of start frames along chains) and eager upper bound U (caps, reverse closure). F0(shipped) == G on 4201/4507 (ck) and 3837/4471 (jp8) ops; G==U (zero freedom) on 3581/4507 and 3133/4471. Only ~926 / 1338 ops have any slack. + - All-eager (U) assignment: ck climbs 3972, jp8 3972; global b ratio 0.9695 (WORSE, -3.0%). All-lazy (G): 3860 climbs, worse. + - Hill-climb with raise-cascades (opt.py): 28 of 43k candidate merges even feasible, 0 improving. + - SA with bidirectional cascade moves inside [G,U] (opt3.py), ck and jp8, T0 0.3 and 1.0, 6M moves each: best dS = 0 for all four runs. Shipped frames are a local optimum for this neighbourhood: 0.0% b (<0.3% gate). +(b) Blocking histogram for the 2081 (ck) / 1993 (jp8) unit mid-chain climbs (no cheaper merge): transitive cap via partner chain 77.5%, direct target perp(port) cap 17.7-18.5%, lowerable 3.2-3.5% (SA shows still no gain), raisable 0.7%, U-end helper 0.5%, centre cf 0.2%. One SPEC rule family (common frame at ADD + monotone chain + target-end frame perp(port) + support from source start frames) blocks >= 96%. => KILL criteria met (gain < 0.3% and rule share >= 90%). Cold-end widths / FULL-lock / owner charts are NOT the binding rules; the audit_allcold owner/dirt layer is never reached. +(c) Deficit: emit_allcold.py asserts M*DATA - sum(paid) == 2560 literal (also assemble.py, invoice_allcold.py, audit_allcold.py). paid = per-call local profiles (64 jp8 + 8 ck) + idle remainders (rank-hosted). It is a literal re-pinned constant: invariant under mass-conserving coarsening, but any change of local mass changes it by 72 per unit per call (and breaks the pins). Not free to scale. + +## Escape 2, mass padding +Dummy wide climbs would ADD mass; the engine needs mass = mW - deficit exactly (assertion), so dummy mass must displace real mass, which is a forced cover. Arithmetic upper bound if it could: moving 1% of unit-climb mass into width-9 climbs gives only +0.26% b (so +1% needs about 4% of unit mass). Adding mass beyond the cover lowers the deficit and the bound. Not legal and not useful. + +## Verdict: LOCAL-PRICE. Not proven globally; scope above (fixed op order). +Escapes (>=3): +1. Reorder gates: commuting adds (dst1!=src2, dst2!=src1) in A/B change the chains; gate_move_coalesce used only 2 moves. Search op ORDER jointly with frames (per order the optimal F needs a DP/ILP). Largest untested lever. +2. Change target end frame (perp(port), dim 8) or the ports/geometry: targets' cap is the root cap (about 96% of blocks); a geometry with looser target ends would unlock coarsening. +3. Pre-climb sources (1->9 at start, 112 width-8 climbs, same mass) needs source ops to avoid target-touching ops (cap perp(p_t)); would need a K-triangle schedule where source reads precede target caps. +4. Re-derive the owner/idle layer so deficit grows with geometry (not done). +Rescue check (not run): SA over adjacent commuting swaps in A/B/tail with the opt3 frame SA as inner loop; if S gain >= ~170/word-equivalent (+1% b) reopen escape 1. +Queued CPU jobs: none (gate killed). Shape bounds +22%/+40% from B3R are unreachable by frame choice at fixed order. + +## Rescue-check job (queued) +Jobs B11_reorder_ck, B11_reorder_jp8 (cpuq/pending; logs jobs/B11_reorder_*.log). work/reorder.py: SA over adjacent commuting swaps within A/B/tail (adds commute iff dst1!=src2 and dst2!=src1; B_K-legality NOT separately modelled; cleanup would need regeneration) plus local frame moves; objective S, price = float root b. Log lines: "HH:MM:SS NEWBEST b ratio S .. swaps .. it .." and final "END b .. ratio ..". Best (order, frames, profile, b) pickled to work/reorder_{ck,jp8}.pkl. 90 s test: ratio 1.0 (no gain yet). Only a ratio >1 reopens escape 1 (then audit and exact-replay required). diff --git a/research/format-limits-2/s1-2-erratum-invoice/evidence/P5/B3R-NOTES.md b/research/format-limits-2/s1-2-erratum-invoice/evidence/P5/B3R-NOTES.md new file mode 100644 index 0000000000..a97ea917bf --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/evidence/P5/B3R-NOTES.md @@ -0,0 +1,28 @@ +# B3R: rank-8 SSS (hourglass) word, priced. VERDICT: LOCAL-PRICE (word built + exact; engine pricing ill-posed at fixed cover). ship=false + +Scope: #623 ck provider word content map M (112x112, exact replay of ck-step7-cold_end A+B+cut), moment engine complex-allcold/engines/moment.py, m=73, W=7168. Files here: m.py hr.py fit.py sss.py build.py price.py price2.py clmb.py (B3 tools copied, not edited). + +## Gate (passed, not killed) +Shipped word climb mass (monotone frame replay, clmb.py): A+B+cut 4932 (3364 climbs, widths 1:2420 2:536 3:200 4:200 5:8); with cleanup to FULL 6186. 716 registers. +SSS word: 8 helpers, mass 1976 (0.32x of 6186). Gate ratio << 1.15 -> proceed. + +## Structure found (key fact) +- M has Hankel rank <=8 at every cut, and EXACTLY: for every row i, M[i,ji] = P_i . R_j with R_j the integer D8 root vectors (root_lines), O_i,P_i 8-vectors with ~3 nonzeros, entries in {0,+-1/8,+-1/4,+-3/8,+-1/2} (a few early-row pinv artifacts, rationalised to /64 with exact check), D = diag(+-1/2). So SSS order 8 with A_k = I, B_j = R_j (entries 0,+-1): no mixing generators, no LR basis change needed (state basis already integer, minimal-span LR form irrelevant). +- Word (sss.py/build.py): 8 centre helpers c; sweep i: y_i += (O_i-P_i).c, then c += R_i u_i; second pass y_i += P_i.c (c=total) and y_i += (D_i - P_i.R_i) u_i; uncompute c. 1372 adds. EXACT replay: max err 0.0, centres return to 0, sources untouched. +- Frames (ports from word, minimal union frames, all regs end FULL=9): climbs 414, mass 1976, widths {1:152 2:20 3:19 4:6 5:12 6:18 7:42 8:64 9:81}. Centres all FULL immediately (ports of any 9 sources span F2^9). Frame is NOT the wall: mass is just the mandatory end-climb floor (sources 8, targets 9, helpers 9). +- Not done: transposed orientation (Tellegen transpose of the op list gives M^T, itself SSS-8; trivial but not emitted), local-program events (wrappers/centre events), cleanup-phase refactor, owner-map MIP. + +## Pricing (engine facts, the real finding) +- check_moment/invoice assert m*W - sum(r*n) == deficit (2560): paid climb mass is a FORCED COVER of the live families, not a cost to minimise. Helpers are the rank SUPPLIERS (4428 of 6186 mass/call). b solves sum_r p_r (m/r)^a = 1 with p_r = r n_r/(mW): b ~ (deficit fraction)/(mass-weighted mean ln(m/r)). Wider climbs are cheaper per unit mass. +- SSS x72 at W=7168: mass 142,272 vs 520,704 required (27%): deficit 380,992 != 2560; certify() fails its bracket (root a>0.003; a=0.51 unbracketed) -> the word cannot occupy the shipped cover; price undefined/invalid. Thus 'fewer helpers' is not a gain on this metric by itself. +- Shape-only bounds (same total mass 520,704, counts rescaled, NOT realizable as stated): shipped profile b=0.0016382 (reproduced); SSS-shaped profile b=0.0020048 (+22%); shipped word with every register climbing once (max coalescing) b=0.0022888 (+40%). Mean ln(m/r): shipped 2.99, SSS 2.44. + Caveat: these require supplying the same mass in wide climbs; legality of coarse frames (PR583 frame_coalesce / frame_regroup already exploit it) and of padding mass is unverified. Treat as an upper-bound lens, not a result. No incremental verified gain found. + +## Verdict: LOCAL-PRICE +Scope: fixed-W (7168), fixed-deficit cover, word-level profile; SSS-8 word is valid/exact but supplies 27% of required cover mass, so it prices as infeasible on the shipped cover. Not proven that no SSS-based cover exists. +Escapes (>=3): +1. Re-solve the cover: shrink W (live) so m*W - mass = deficit with the SSS profile (new geometry, fewer data families per call or more calls per word); needs owner/window MIP, ~hours. +2. Mass padding: supply the missing ~5256 mass/call in few WIDE climbs (cold dummy/idle children climbing 0->9, or hosted-residual banks) -> engine says wide mass is cheaper (shape bound b up to 0.0020). Needs legality check of idle/dummy climbs vs owner charts. +3. Hybrid: keep shipped K-triangle helpers for mass/ownership but replace pair/quad helper network by SSS centres in the A/B body; or merge width-1 climbs in the shipped word toward the max-coalescing profile (shape bound +40%): check what frame legality forbids beyond PR583. +4. Different cover interpretation of deficit (2560 fixed constant in emit_allcold.py): derive it; if deficit can scale with geometry, fewer climbs is a gain. +Rescue check (not run, ~40 min): take shipped ck word, compute the max legal coarsening of frames per register (union frames at first touch subject to the owner/dirt audit in audit_allcold.py) and rerun price2.py on the real resulting profile; if b rises >=1% with audits passing, reopen escape 3; also determine in emit_allcold.py/audit_allcold.py why deficit==2560. diff --git a/research/format-limits-2/s1-2-erratum-invoice/inputs/derived/k492_registers.json b/research/format-limits-2/s1-2-erratum-invoice/inputs/derived/k492_registers.json new file mode 100644 index 0000000000..d5ca0fc75b --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/inputs/derived/k492_registers.json @@ -0,0 +1 @@ +{"ck":{"word_sha256_decompressed":"9bbc75dede090cfd7a0a0252424ea9d9f6211e2350d2a801d4e4f2f0784167c7","v":112,"R":492,"centers":[229,224,227,225,243,241,259,257],"local_profile":{"1":2596,"2":552,"3":304,"4":160,"5":70,"6":8,"8":8},"regs":[[1,1,1,5],[1,1,1,5],[1,1,3,1,1,1],[1,1,4,2],[1,1,1,5],[1,1,1,1,3,1],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,5],[1,1,1,5],[1,1,1,2,1,1,1],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,2,1,1,1],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,5],[1,1,1,5],[1,1,1,2,1,1,1],[1,1,1,1,2,2],[1,1,1,5],[1,1,1,5],[1,1,1,2,1,1,1],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,4,2],[1,1,1,5],[1,1,1,1,3,1],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,2,1,1,1],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,3,3],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,1,2,2],[1,1,1,1,2,1,1],[1,1,1,5],[1,1,4,2],[1,1,1,5],[1,1,1,1,2,2],[1,1,1,5],[1,1,1,1,3,1],[1,1,1,5],[1,1,4,2],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,2,1,1,1],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,2,1,1,1],[1,1,1,1,2,1,1],[1,1,1,5],[1,1,4,2],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,5],[1,1,1,1,3,1],[1,1,1,5],[1,1,4,2],[1,1,3,1,1,1],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,2,1,1,1],[1,1,1,5],[1,1,1,5],[1,1,1,1,2,1,1],[1,1,1,5],[1,1,4,2],[1,1,1,5],[1,1,1,5],[1,1,1,1,2,2],[1,1,1,5],[1,1,1,5],[1,1,1,1,2,2],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,2,1,1,1],[1,1,1,5],[1,1,1,1,2,2],[1,1,1,1,2,1,1],[1,1,1,5],[1,1,4,2],[1,1,1,5],[1,1,1,5],[1,1,3,3],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,2,1,1,1],[1,1,1,5],[1,1,1,5],[1,1,4,1,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,4,1,1],[2,1,1,1,2,1],[1,1,4,1,1],[1,1,4,1,1],[2,1,1,1,2,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,4,1,1],[2,1,1,1,2,1],[2,2,3,1],[1,1,4,1,1],[1,1,4,1,1],[2,1,1,1,2,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,1,1,1,2,1],[1,1,4,1,1],[1,1,4,1,1],[2,4,1,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,1,1,1,2,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,1,1,1,2,1],[2,1,1,1,2,1],[1,1,1,1,1,2,1],[2,1,1,1,2,1],[1,1,4,1,1],[2,1,1,1,2,1],[1,1,1,1,1,2,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,1,1,1,2,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,2,3,1],[2,1,1,1,2,1],[2,2,3,1],[1,1,4,1,1],[2,4,1,1],[1,1,1,1,1,2,1],[2,1,1,1,2,1],[1,1,1,1,1,2,1],[1,1,2,3,1],[1,1,4,1,1],[2,4,1,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,4,1,1],[2,1,1,1,2,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,1,1,1,2,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,1,1,1,2,1],[1,1,4,1,1],[1,1,1,1,1,2,1],[1,1,4,1,1],[2,1,1,1,2,1],[2,2,3,1],[1,1,4,1,1],[2,4,1,1],[1,1,4,1,1],[1,1,1,1,1,2,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,4,1,1],[2,1,1,1,2,1],[1,1,4,1,1],[2,2,3,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,1,1,4,8,1],[1,1,1,1,4,8,1],[1,1,1,3,1,1,1],[1,1,1,1,4,8,1],[1,1,1,3,1,1,1],[1,1,1,1,4,8,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,1,1,2,2],[1,1,1,1],[1,1,1,1,1,2,2],[1,1,1,3,1,1,1],[1,1,1,1,1,2,2],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,1,4,8,1],[1,1,1,1,2,1,1,1],[1,1,1,1,4,8,1],[1,1,1,1,2,1,1,1],[1,1,1,1,4,1],[1,1,1,1,2,1,1,1],[1,1,1,1,2,1,1,1],[1,1,1,1,2,1,1,1],[1,1,1,1,1,2,2],[1,1,1,1],[1,1,1,1,1,2,2],[1,1,1,1,2,1,1,1],[1,1,1,1,1,2,2],[1,1,1,1,2,1,1,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,1,4,8,1],[1,1,1,1,2,1,1,1],[1,1,1,1,4,8,1],[1,1,1,1,2,1,1,1],[1,1,1,1,4,1],[1,1,1,1,2,1,1,1],[1,1,1,1,2,1,1,1],[1,1,1,1,2,1,1,1],[1,1,1,1,1,2,2],[1,1,1,1],[1,1,1,1,1,2,2],[1,1,1,1,2,1,1,1],[1,1,1,1,1,2,2],[1,1,1,1,2,1,1,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,1,2,1,1,1],[1,1,1,1,4,1],[1,1,1,1,2,1,1,1],[1,1,1,1,4,1],[1,1,1,1,2,1,1,1],[1,1,1,1,2,1,1,1],[1,1,1,1,2,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1,1,2,1,1],[1,1,1,1,2,1,1,1],[1,1,1,6],[1,1,1,1,2,1,1,1],[1,1,1,4,2],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,1,2,1,1,1],[1,1,1,1,4,1],[1,1,1,1,2,1,1,1],[1,1,1,1,4,1],[1,1,1,1,2,1,1,1],[1,1,1,1,2,1,1,1],[1,1,1,1,2,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1,1,3,1],[1,1,1,1,2,1,1,1],[1,1,1,6],[1,1,1,1,2,1,1,1],[1,1,1,4,2],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,3,3],[1,1,1,1,2,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1,1,2,1,1],[1,1,1,1,2,1,1,1],[1,1,1,6],[1,1,1,1,2,1,1,1],[1,1,1,4,2],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,3,3],[1,1,1,1,2,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1,1,3,1],[1,1,1,1,2,1,1,1],[1,1,1,6],[1,1,1,1,2,1,1,1],[1,1,1,4,2],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,1,2,1,1,1],[1,1,1,1,4,1],[1,1,1,1,2,1,1,1],[1,1,1,1,4,1],[1,1,1,1,2,1,1,1],[1,1,1,1,2,1,1,1],[1,1,1,1,2,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1,1,2,1,1],[1,1,1,1,2,1,1,1],[1,1,1,6],[1,1,1,1,2,1,1,1],[1,1,1,4,2],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,1,2,1,1,1],[1,1,1,1,4,1],[1,1,1,1,2,1,1,1],[1,1,1,1,4,1],[1,1,1,1,2,1,1,1],[1,1,1,1,2,1,1,1],[1,1,1,1,2,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1,1,3,1],[1,1,1,1,2,1,1,1],[1,1,1,6],[1,1,1,1,2,1,1,1],[1,1,1,4,2],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,3,3],[1,1,1,1,2,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1,1,2,1,1],[1,1,1,1,2,1,1,1],[1,1,1,6],[1,1,1,1,2,1,1,1],[1,1,1,4,2],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,3,3],[1,1,1,1,2,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1,1,3,1],[1,1,1,1,2,1,1,1],[1,1,1,6],[1,1,1,1,2,1,1,1],[1,1,1,4,2],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,3,3],[1,1,1,3,3],[1,1,1,1,1,2,2],[1,1,1,1],[1,1,1,1,1,2,2],[1,1,1,3,3],[1,1,1,1,1,2,2],[1,1,1,3,3],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,3,3],[1,1,1,3,3],[1,1,1,1,1,2,2],[1,1,1,1],[1,1,1,1,1,2,2],[1,1,1,3,3],[1,1,1,1,1,2,2],[1,1,1,3,3],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,1,1,2,2],[1,1,1,1],[1,1,1,1,1,2,2],[1,1,1,3,1,1,1],[1,1,1,1,1,2,2],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[1,2,2,1,1,1],[2,2,2,1,1,1],[1,2,2,1,1,1],[2,2,2,1,1,1],[1,2,2,1,1,1],[2,2,2,1,1,1],[1,2,2,1,1,1],[2,2,2,1,1,1],[2,3,1,1],[2,3,1,1],[1,1,2,2,1,1,1],[1,1,2,2,1,1,1],[1,1,2,2,1,1,1],[1,1,2,2,1,1,1],[1,1,2,2,1,1,1],[1,1,2,2,1,1,1],[1,1,2,2,1,1,1],[1,1,2,2,1,1,1],[2,3,1,1],[2,4,2],[2,4,2],[2,2,3],[2,2,3],[2,2,3],[2,2,3],[1,2,2,1,1,1],[2,2,2,1,1,1],[1,2,2,1,1,1],[2,2,2,1,1,1],[2,1,1,2,1,1],[2,1,1,2,1,1],[2,4,1],[2,4,1],[2,2,3],[2,2,3],[2,2,3],[2,2,3],[1,1,2,2,1,1,1],[1,1,2,2,1,1,1],[1,1,2,2,1,1,1],[1,1,2,2,1,1,1],[2,1,1,2,1,1],[2,1,1,2,1,1],[2,4,2],[2,4,2],[2,3,3],[1,2,3,3],[2,3,3],[1,2,3,3],[1,2,2,1,1,1],[2,2,2,1,1,1],[1,2,2,1,1,1],[2,2,2,1,1,1],[2,1,1,2,1,1],[2,1,1,2,1,1],[2,4,1],[2,4,1],[1,2,3,3],[1,2,3,3],[1,2,3,3],[1,2,3,3],[1,1,2,2,1,1,1],[1,1,2,2,1,1,1],[1,1,2,2,1,1,1],[1,1,2,2,1,1,1],[2,1,1,2,1,1],[2,1,1,2,1,1],[2,4,2],[2,4,2],[2,2,3],[2,2,3],[2,2,3],[2,2,3],[2,2,3],[2,2,3],[2,2,3],[2,2,3],[1,2,1,1,4],[1,2,1,1,4],[2,4,1],[2,4,1],[2,2,3],[2,2,3],[2,2,3],[2,2,3],[2,2,3],[2,2,3],[2,2,3],[2,2,3],[1,2,1,1,4],[1,2,1,1,4],[2,4,2],[2,4,2],[1,2,3,3],[1,2,3,3],[1,2,3,3],[1,2,3,3],[2,2,3],[2,2,3],[2,2,3],[2,2,3],[1,2,1,1,4],[1,2,1,1,4],[2,4,1],[2,4,1],[1,2,3,3],[2,3,3],[1,2,3,3],[2,3,3],[2,2,3],[2,2,3],[2,2,3],[2,2,3],[1,2,1,1,4],[1,2,1,1,4],[2,3,1,1],[1,2,3,3],[2,3,3],[1,2,3,3],[2,3,3],[2,3,3],[1,2,3,3],[2,3,3],[1,2,3,3],[2,3,1,1],[2,3,1,1],[2,3,3],[2,3,3],[2,3,3],[2,3,3],[1,2,3,3],[1,2,3,3],[1,2,3,3],[1,2,3,3],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[3,1,1,2,1],[3,1,1,2,1],[3,1,1,2,1],[1,1,2,1],[3,1,1,2,1],[1,1,2,1],[1,1,2,1],[1,1,2,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[4,1,1,1,1],[4,1,1,1,1],[4,1,1,1,1],[1,1,1,1],[4,1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[4,1,1,1,1],[4,1,1,1,1],[4,1,1,1,1],[1,1,1,1],[4,1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[3,1,1,2,1],[3,1,1,2,1],[3,1,1,2,1],[1,1,2,1],[3,1,1,2,1],[1,1,2,1],[1,1,2,1],[1,1,2,1]]},"jp8":{"word_sha256_decompressed":"fb4a8d14ed2a8048698bea6ae16f86163a1aa6c80f2eb622222eee5cdbce9b3b","v":112,"R":492,"centers":[229,224,227,225,243,241,259,257],"local_profile":{"1":2512,"2":400,"3":448,"4":160,"5":70,"6":8,"8":8},"regs":[[1,1,1,5],[1,1,1,5],[1,1,3,1,1,1],[1,1,4,2],[1,1,1,5],[1,1,1,1,3,1],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,5],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,5],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,1,2,2],[1,1,1,5],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,4,2],[1,1,1,5],[1,1,1,1,3,1],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,3,3],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,1,2,2],[1,1,1,1,2,1,1],[1,1,1,5],[1,1,4,2],[1,1,1,5],[1,1,1,1,2,2],[1,1,1,5],[1,1,1,1,3,1],[1,1,1,5],[1,1,4,2],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,1,2,1,1],[1,1,1,5],[1,1,4,2],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,5],[1,1,1,1,3,1],[1,1,1,5],[1,1,4,2],[1,1,3,1,1,1],[1,1,1,5],[1,1,3,1,1,1],[1,1,3,1,1,1],[1,1,1,5],[1,1,1,5],[1,1,1,1,2,1,1],[1,1,1,5],[1,1,4,2],[1,1,1,5],[1,1,1,5],[1,1,1,1,2,2],[1,1,1,5],[1,1,1,5],[1,1,1,1,2,2],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,5],[1,1,1,1,2,2],[1,1,1,1,2,1,1],[1,1,1,5],[1,1,4,2],[1,1,1,5],[1,1,1,5],[1,1,3,3],[1,1,1,5],[1,1,1,5],[1,1,1,5],[1,1,3,1,1,1],[1,1,1,5],[1,1,1,5],[1,1,4,1,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,4,1,1],[2,1,1,1,2,1],[1,1,4,1,1],[1,1,4,1,1],[2,1,1,1,2,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,4,1,1],[2,1,1,1,2,1],[2,2,3,1],[1,1,4,1,1],[1,1,4,1,1],[2,1,1,1,2,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,1,1,1,2,1],[1,1,4,1,1],[1,1,4,1,1],[2,4,1,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,1,1,1,2,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,1,1,1,2,1],[2,1,1,1,2,1],[1,1,1,1,1,2,1],[2,1,1,1,2,1],[1,1,4,1,1],[2,1,1,1,2,1],[1,1,1,1,1,2,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,1,1,1,2,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,2,3,1],[2,1,1,1,2,1],[2,2,3,1],[1,1,4,1,1],[2,4,1,1],[1,1,1,1,1,2,1],[2,1,1,1,2,1],[1,1,1,1,1,2,1],[1,1,2,3,1],[1,1,4,1,1],[2,4,1,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,4,1,1],[2,1,1,1,2,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,1,1,1,2,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,1,1,1,2,1],[1,1,4,1,1],[1,1,1,1,1,2,1],[1,1,4,1,1],[2,1,1,1,2,1],[2,2,3,1],[1,1,4,1,1],[2,4,1,1],[1,1,4,1,1],[1,1,1,1,1,2,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,2,3,1],[1,1,4,1,1],[1,1,4,1,1],[2,1,1,1,2,1],[1,1,4,1,1],[2,2,3,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,4,1,1],[1,1,1,1,4,8,1],[1,1,1,1,4,8,1],[1,1,1,3,1,1,1],[1,1,1,1,4,8,1],[1,1,1,3,1,1,1],[1,1,1,1,4,8,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,1,1,2,2],[1,1,1,1],[1,1,1,1,1,2,2],[1,1,1,3,1,1,1],[1,1,1,1,1,2,2],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,1,4,8,1],[1,1,1,3,1,1,1],[1,1,1,1,4,8,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,1,1,2,2],[1,1,1,1],[1,1,1,1,1,2,2],[1,1,1,3,1,1,1],[1,1,1,1,1,2,2],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,1,4,8,1],[1,1,1,3,1,1,1],[1,1,1,1,4,8,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,1,1,2,2],[1,1,1,1],[1,1,1,1,1,2,2],[1,1,1,3,1,1,1],[1,1,1,1,1,2,2],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1,1,2,1,1],[1,1,1,3,1,1,1],[1,1,1,6],[1,1,1,3,1,1,1],[1,1,1,4,2],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1,1,3,1],[1,1,1,3,1,1,1],[1,1,1,6],[1,1,1,3,1,1,1],[1,1,1,4,2],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,3,3],[1,1,1,3,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1,1,2,1,1],[1,1,1,3,1,1,1],[1,1,1,6],[1,1,1,3,1,1,1],[1,1,1,4,2],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,3,3],[1,1,1,3,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1,1,3,1],[1,1,1,3,1,1,1],[1,1,1,6],[1,1,1,3,1,1,1],[1,1,1,4,2],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1,1,2,1,1],[1,1,1,3,1,1,1],[1,1,1,6],[1,1,1,3,1,1,1],[1,1,1,4,2],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1,1,3,1],[1,1,1,3,1,1,1],[1,1,1,6],[1,1,1,3,1,1,1],[1,1,1,4,2],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,3,3],[1,1,1,3,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1,1,2,1,1],[1,1,1,3,1,1,1],[1,1,1,6],[1,1,1,3,1,1,1],[1,1,1,4,2],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,3,3],[1,1,1,3,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1,1,3,1],[1,1,1,3,1,1,1],[1,1,1,6],[1,1,1,3,1,1,1],[1,1,1,4,2],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,3,3],[1,1,1,3,3],[1,1,1,1,1,2,2],[1,1,1,1],[1,1,1,1,1,2,2],[1,1,1,3,3],[1,1,1,1,1,2,2],[1,1,1,3,3],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,1,4,1],[1,1,1,3,3],[1,1,1,3,3],[1,1,1,3,3],[1,1,1,1,1,2,2],[1,1,1,1],[1,1,1,1,1,2,2],[1,1,1,3,3],[1,1,1,1,1,2,2],[1,1,1,3,3],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,1,4,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[1,1,1,1,1,2,2],[1,1,1,1],[1,1,1,1,1,2,2],[1,1,1,3,1,1,1],[1,1,1,1,1,2,2],[1,1,1,3,1,1,1],[1,1,1,3,1,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[2,3,1,1],[2,3,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[2,3,1,1],[2,4,2],[2,4,2],[2,3,3],[2,3,3],[2,3,3],[2,3,3],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[2,1,1,2,1,1],[2,1,1,2,1,1],[2,4,1],[2,4,1],[2,3,3],[2,3,3],[2,3,3],[2,3,3],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[2,1,1,2,1,1],[2,1,1,2,1,1],[2,4,2],[2,4,2],[3,3,3],[3,3,3],[3,3,3],[3,3,3],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[2,1,1,2,1,1],[2,1,1,2,1,1],[2,4,1],[2,4,1],[3,3,3],[3,3,3],[3,3,3],[3,3,3],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[1,2,3,1,1,1],[2,1,1,2,1,1],[2,1,1,2,1,1],[2,4,2],[2,4,2],[2,3,3],[2,3,3],[2,3,3],[2,3,3],[2,3,3],[2,3,3],[2,3,3],[2,3,3],[1,2,1,1,4],[1,2,1,1,4],[2,4,1],[2,4,1],[2,3,3],[2,3,3],[2,3,3],[2,3,3],[2,3,3],[2,3,3],[2,3,3],[2,3,3],[1,2,1,1,4],[1,2,1,1,4],[2,4,2],[2,4,2],[1,2,3,3],[1,2,3,3],[1,2,3,3],[1,2,3,3],[2,3,3],[2,3,3],[2,3,3],[2,3,3],[1,2,1,1,4],[1,2,1,1,4],[2,4,1],[2,4,1],[1,2,3,3],[2,3,3],[1,2,3,3],[2,3,3],[2,3,3],[2,3,3],[2,3,3],[2,3,3],[1,2,1,1,4],[1,2,1,1,4],[2,3,1,1],[1,2,3,3],[2,3,3],[1,2,3,3],[2,3,3],[3,3,3],[3,3,3],[3,3,3],[3,3,3],[2,3,1,1],[2,3,1,1],[2,3,3],[2,3,3],[2,3,3],[2,3,3],[3,3,3],[3,3,3],[3,3,3],[3,3,3],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[2,3,1,1],[3,1,1,2,1],[3,1,1,2,1],[3,1,1,2,1],[1,1,2,1],[3,1,1,2,1],[1,1,2,1],[1,1,2,1],[1,1,2,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[4,1,1,1,1],[4,1,1,1,1],[4,1,1,1,1],[1,1,1,1],[4,1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[4,1,1,1,1],[4,1,1,1,1],[4,1,1,1,1],[1,1,1,1],[4,1,1,1,1],[1,1,1,1],[1,1,1,1],[1,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[3,2,1,1,1],[2,1,1,1],[3,2,1,1,1],[2,1,1,1],[2,1,1,1],[2,1,1,1],[3,1,1,2,1],[3,1,1,2,1],[3,1,1,2,1],[1,1,2,1],[3,1,1,2,1],[1,1,2,1],[1,1,2,1],[1,1,2,1]]}} \ No newline at end of file diff --git a/research/format-limits-2/s1-2-erratum-invoice/inputs/pr555/EXPECTED.json.gz b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr555/EXPECTED.json.gz new file mode 100644 index 0000000000..dedbf29ea0 Binary files /dev/null and b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr555/EXPECTED.json.gz differ diff --git a/research/format-limits-2/s1-2-erratum-invoice/inputs/pr595/a5_scope_multipliers.py b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr595/a5_scope_multipliers.py new file mode 100644 index 0000000000..e45f8882ec --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr595/a5_scope_multipliers.py @@ -0,0 +1,53 @@ +"""A. Format ceiling, rev. 2: how much each scope assumption is worth (ceiling multipliers if it is relaxed). + +Each variant of skel.profile drops one rule of the scope and recomputes the certified root at s = 3, 5, ..., 13: + copyfree copy charge x -> 0 (non-star totals with no pairing-rank floor; star scope broken); + idlefree the B_K idle frame changes cost nothing; + idle_onechild all idle frame changes of one copy batched into one child (cross-stretch batching); + nosplit bridges moved off the idle stretches (no split pre-stretch); + loc_h data local climbs batched up to the window h (cross-register batching inside a stage); + idlefree_loch idle free and local batching to h at once; + window w-1 a family whose stage window is one smaller at the same copy ratio x. +Multiplier = (best-s root of the variant) / (best-s root of the theorem), and the same at s = 9. +These are the multipliers quoted in the rule table of README section B. +""" +from fractions import Fraction as Fr + +from report import check, finish, near +from skel import X + +S_LIST = (3, 5, 7, 9, 11, 13) +UNITS = {'bit-111/63': (8, 63, 111), 'cx-112/64': (9, 64, 112)} +VARIANTS = ('copyfree', 'idlefree', 'idle_onechild', 'nosplit', 'loc_h', 'idlefree_loch', 'window-1') +# (best-s multiplier, s = 9 multiplier), two decimals +EXPECTED = { + 'bit-111/63': {'copyfree': (6.77, 2.79), 'idlefree': (1.67, 2.14), 'idle_onechild': (1.19, 1.55), + 'nosplit': (1.15, 1.18), 'loc_h': (1.12, 1.03), 'idlefree_loch': (1.79, 2.28), + 'window-1': (1.16, 1.16)}, + 'cx-112/64': {'copyfree': (6.91, 2.83), 'idlefree': (1.68, 2.15), 'idle_onechild': (1.20, 1.55), + 'nosplit': (1.15, 1.18), 'loc_h': (1.08, 1.02), 'idlefree_loch': (1.79, 2.27), + 'window-1': (1.14, 1.14)}, +} + + +def roots(h, x, variant): + out = {} + for s in S_LIST: + r = X(s, h, 1, x, variant) + out[s] = r['hi'] if r else Fr(0) + return out + + +for name, (h, cst, v) in UNITS.items(): + x = Fr(cst, v) + base = roots(h, x, 'thm') + b_best = max(base.values()) + for var in VARIANTS: + rr = roots(h - 1, x, 'thm') if var == 'window-1' else roots(h, x, var) + best = max(rr.values()) + sb = max(rr, key=rr.get) + mult = (float(best / b_best), float(rr[9] / base[9])) + exp = EXPECTED[name][var] + check('A5.%s.%s' % (name, var), near(mult[0], exp[0], 2) and near(mult[1], exp[1], 2), + 'best %.4e (s = %d): x%.2f; s = 9: x%.2f' % (best, sb, mult[0], mult[1])) +finish() diff --git a/research/format-limits-2/s1-2-erratum-invoice/inputs/pr595/cert.py b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr595/cert.py new file mode 100644 index 0000000000..351fbd107c --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr595/cert.py @@ -0,0 +1,133 @@ +"""Certified (rational interval) pressure-root tools. +g_q(r) = r*((m/r)^q - 1). Root of sum_i z_i g_q(r_i) = D (increasing in q). +All transcendental values are enclosed by rational intervals (Fraction endpoints, outward rounding).""" +from fractions import Fraction as Fr +import math + +DEN = 10**45 # outward rounding grid + + +def rd(x): # round down to grid + return Fr(math.floor(x * DEN), DEN) + + +def ru(x): + return Fr(math.ceil(x * DEN), DEN) + + +def ln_iv(x): + """enclosure of ln(x), x = Fraction > 0, via ln x = 2 atanh(z), z=(x-1)/(x+1); reduce by powers of 2.""" + x = Fr(x) + assert x > 0 + if x == 1: + return (Fr(0), Fr(0)) + # reduce: x = 2^e * y, y in [1/sqrt2, sqrt2] (use [2/3, 4/3]-ish via loop) + e = 0 + while x > Fr(4, 3): + x /= 2; e += 1 + while x < Fr(2, 3): + x *= 2; e -= 1 + lo2, hi2 = LN2 + lo, hi = _atanh2(x) + return (rd(lo + e * (lo2 if e >= 0 else hi2)), ru(hi + e * (hi2 if e >= 0 else lo2))) + + +def _atanh2(x): + z = (x - 1) / (x + 1) + az = abs(z) + s = Fr(0); t = z; k = 0 + N = 40 + for k in range(N): + s += t / (2 * k + 1) + t *= z * z + # tail bound: |sum_{k>=N} z^(2k+1)/(2k+1)| <= |z|^(2N+1)/((2N+1)(1-z^2)) + tail = az ** (2 * N + 1) / ((2 * N + 1) * (1 - z * z)) + s = 2 * s; tail = 2 * tail + return (rd(s - tail), ru(s + tail)) + + +def _ln2(): + # ln 2 = 2 atanh(1/3) + z = Fr(1, 3); s = Fr(0); t = z + N = 60 + for k in range(N): + s += t / (2 * k + 1); t *= z * z + tail = z ** (2 * N + 1) / ((2 * N + 1) * (1 - z * z)) + return (rd(2 * s - 2 * tail), ru(2 * s + 2 * tail)) + + +LN2 = _ln2() + + +def expm1_iv(lo, hi): + """enclosure of e^y - 1 for y in [lo,hi], 0 <= lo <= hi <= 1.""" + assert 0 <= lo <= hi <= 2 + N = 30 + + def ser(y): + s = Fr(0); t = Fr(1) + for i in range(1, N + 1): + t = t * y / i; s += t + return s + slo = ser(lo) # all terms >= 0 -> lower bound + shi = ser(hi) + 8 * hi ** (N + 1) / math.factorial(N + 1) # tail <= y^(N+1)/(N+1)! * e^y, e^y<=8 (y<=2) + return (rd(slo), ru(shi)) + + +def g_iv(r, m, q): + """enclosure of r*((m/r)^q - 1), q Fraction >= 0.""" + if r >= m: + return (Fr(0), Fr(0)) if r == m else None + l_lo, l_hi = ln_iv(Fr(m) / r) + lo, hi = expm1_iv(q * l_lo, q * l_hi) + return (r * lo, r * hi) + + +def F_iv(prof, m, q): + """prof: dict rank -> count (Fractions/ints allowed), returns enclosure of sum z g_q(r).""" + lo = Fr(0); hi = Fr(0) + for r, z in prof.items(): + if z == 0: + continue + a, b = g_iv(Fr(r), Fr(m), Fr(q)) + lo += z * a; hi += z * b + return (rd(lo), ru(hi)) + + +def root_bracket(prof, m, D, lo=Fr(0), hi=Fr(1, 10), iters=60): + """returns (qlo, qhi) with F(qlo) < D (certified via upper enclosure) and F(qhi) >= D (via lower enclosure): + the true root lies in [qlo, qhi]. qhi is a certified UPPER bound of the root.""" + D = Fr(D) + assert F_iv(prof, m, hi)[0] >= D, 'hi too small' + for _ in range(iters): + mid = rd((lo + hi) / 2) + flo, fhi = F_iv(prof, m, mid) + if flo >= D: + hi = mid + elif fhi < D: + lo = mid + else: + break + return lo, hi + + +def cost_iv(prof, m): + """enclosure of Cost = sum z r ln(m/r).""" + lo = Fr(0); hi = Fr(0) + for r, z in prof.items(): + if z == 0 or r >= m: + continue + a, b = ln_iv(Fr(m) / r) + lo += z * r * a; hi += z * r * b + return lo, hi + + +if __name__ == '__main__': + # self-test against floats + for x in (Fr(64, 7), Fr(73, 8), Fr(100, 3), Fr(3, 2), Fr(1, 5)): + lo, hi = ln_iv(x) + assert lo <= Fr(math.log(x)) + Fr(1, 10**12) and hi >= Fr(math.log(x)) - Fr(1, 10**12), x + assert hi - lo < Fr(1, 10**40), (x, float(hi - lo)) + print('ln ok', float(LN2[1] - LN2[0])) + lo, hi = expm1_iv(Fr(1, 100), Fr(1, 100)) + print('expm1(0.01)', float(lo), math.expm1(0.01), float(hi - lo)) diff --git a/research/format-limits-2/s1-2-erratum-invoice/inputs/pr595/report.py b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr595/report.py new file mode 100644 index 0000000000..5593062527 --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr595/report.py @@ -0,0 +1,60 @@ +"""Shared paths and PASS/FAIL reporting for the checks of research/format-limits. + +Every check prints one line per claim: 'PASS ' or 'FAIL ', and finish() exits +with status 1 if any claim failed. Paths: PKG is this package, DATA its data/ directory, REPO the repository root +(the package lives at REPO/research/format-limits; files of main are read from REPO and pinned in DEPENDS.json). +""" +import gzip +import json +import os +import pathlib +import sys + +HERE = pathlib.Path(__file__).resolve().parent +PKG = HERE.parent +DATA = PKG / 'data' +VENDOR = DATA / 'vendor' +REPO = pathlib.Path(os.environ.get('FORMAT_LIMITS_REPO', PKG.parent.parent)).resolve() + +_failed = [] + + +def check(cid, ok, detail=''): + print(('PASS ' if ok else 'FAIL ') + cid + (' ' + str(detail) if detail != '' else ''), flush=True) + if not ok: + _failed.append(cid) + return ok + + +def near(x, expected, places): + """x agrees with a value printed to `places` decimals: |x - expected| <= 0.6 * 10^-places (half a unit of the last + printed digit plus slack, so a float computed with a different library build cannot flip a rounding boundary).""" + return abs(float(x) - float(expected)) <= 0.6 * 10.0 ** (-places) + + +def near_all(xs, expected, places): + xs, expected = list(xs), list(expected) + return len(xs) == len(expected) and all( + (x == e) if isinstance(e, int) and not isinstance(e, bool) and p is None else near(x, e, p) + for x, e, p in zip(xs, expected, places)) + + +def finish(): + if _failed: + print('FAILED CLAIMS: ' + ' '.join(_failed), flush=True) + sys.exit(1) + + +def load_json(path): + path = pathlib.Path(path) + if path.suffix == '.gz': + return json.loads(gzip.decompress(path.read_bytes())) + return json.loads(path.read_text()) + + +def main_file(rel): + """a file of the repository's main branch (pinned by sha256 in DEPENDS.json).""" + p = REPO / rel + if not p.exists(): + sys.exit('missing file of main: %s (run from a checkout of the whole repository)' % rel) + return p diff --git a/research/format-limits-2/s1-2-erratum-invoice/inputs/pr595/skel.py b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr595/skel.py new file mode 100644 index 0000000000..e3c6c815b6 --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr595/skel.py @@ -0,0 +1,85 @@ +"""R-free skeleton bound for the B_K compressed-window format (per port, v=1; v cancels). +Slots (per replica / v): + active : s stages x 2 wires (X,Y banks of the active pair) x one climb of a = h-k, child cap a + copies : s stages x cst/v = x (mass), child cap beta_max <= h (use h; E8: beta = 8 = h exactly) + idle : 2 copies-per-port x idle stretches of the B_K schedule, slot rank r, child cap max(r, h) +D/v = (s-1) k - s x ; m = k + s (h-k). +Variants switch individual scope assumptions off (see NOTES).""" +from fractions import Fraction as Fr +from cert import root_bracket, cost_iv, F_iv +import sys + + +def idle_slots(K, a, split=True): + sl = [] + if K >= 1 and 2 * K - 2 > 0: + sl.append(a * (2 * K - 2)) # pair 0 tail + for p in range(1, K): + if split: + sl += [2 * p * a, a] # pre-stretch split by the bridge + else: + sl += [(2 * p + 1) * a] + if 2 * K - 2 * p - 2 > 0: + sl.append(a * (2 * K - 2 * p - 2)) + return sl + + +def profile(s, h, k, x, variant='thm'): + """returns (prof, m, D) per port. prof: rank -> (fractional) count; mass at cap c entered as count mass/c at rank c.""" + assert s % 2 == 1 and s >= 3 + K = (s - 1) // 2 + a = h - k + m = k + s * a + x = Fr(x) + prof = {} + + def add(cap, mass): + if mass == 0: + return + cap = Fr(cap) + if cap >= m: # child of rank m costs nothing + return + prof[cap] = prof.get(cap, 0) + Fr(mass) / cap + loc_cap = h if variant in ('loc_h', 'idlefree_loch') else a + add(loc_cap, 2 * s * a) # active data climbs + xx = Fr(0) if variant == 'copyfree' else x + add(h, s * xx) # copies + if variant not in ('idlefree', 'idlefree_loch'): + for r in idle_slots(K, a, split=(variant != 'nosplit')): + if variant == 'idle_onechild': + continue + cap = r if variant == 'nohostcap' else max(r, h) + add(cap, 2 * r) + if variant == 'idle_onechild': # all idle of a copy in one child (cross-stretch batching) + for tot in idle_per_pair(K, a): + add(max(tot, h), 2 * tot) + D = (s - 1) * k - s * xx + return prof, m, D + + +def idle_per_pair(K, a): + out = [] + if 2 * K - 2 > 0: + out.append(a * (2 * K - 2)) + for p in range(1, K): + out.append(a * (2 * K - 1)) + return out + + +def X(s, h, k, x, variant='thm'): + prof, m, D = profile(s, h, k, x, variant) + if D <= 0: + return None + lo, hi = root_bracket(prof, m, D, hi=Fr(1, 2)) + clo, chi = cost_iv(prof, m) + return dict(s=s, m=m, D=D, lo=lo, hi=hi, DoverCost=D / clo, cost=clo) + + +if __name__ == '__main__': + h, k, x = int(sys.argv[1]), int(sys.argv[2]), Fr(sys.argv[3]) + variant = sys.argv[4] if len(sys.argv) > 4 else 'thm' + for s in range(3, 32, 2): + r = X(s, h, k, x, variant) + if r is None: + print(s, 'D<=0'); continue + print('s=%2d m=%3d D/v=%6.3f root in [%.9e, %.9e] D/Cost=%.9e' % (s, r['m'], float(r['D']), r['lo'], r['hi'], float(r['DoverCost'])), flush=True) diff --git a/research/format-limits-2/s1-2-erratum-invoice/inputs/pr626/PLAN.json.gz b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr626/PLAN.json.gz new file mode 100644 index 0000000000..946f686425 Binary files /dev/null and b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr626/PLAN.json.gz differ diff --git a/research/format-limits-2/s1-2-erratum-invoice/inputs/pr626/README.md.gz b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr626/README.md.gz new file mode 100644 index 0000000000..d4ea25a8c3 Binary files /dev/null and b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr626/README.md.gz differ diff --git a/research/format-limits-2/s1-2-erratum-invoice/inputs/pr635/PLAN.json.gz b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr635/PLAN.json.gz new file mode 100644 index 0000000000..3c9c938b24 Binary files /dev/null and b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr635/PLAN.json.gz differ diff --git a/research/format-limits-2/s1-2-erratum-invoice/inputs/pr645/PLAN.json.gz b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr645/PLAN.json.gz new file mode 100644 index 0000000000..90d4d84572 Binary files /dev/null and b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr645/PLAN.json.gz differ diff --git a/research/format-limits-2/s1-2-erratum-invoice/inputs/pr646/PLAN.json.gz b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr646/PLAN.json.gz new file mode 100644 index 0000000000..3d0575b615 Binary files /dev/null and b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr646/PLAN.json.gz differ diff --git a/research/format-limits-2/s1-2-erratum-invoice/inputs/pr649/PLAN.json.gz b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr649/PLAN.json.gz new file mode 100644 index 0000000000..fe5e0212da Binary files /dev/null and b/research/format-limits-2/s1-2-erratum-invoice/inputs/pr649/PLAN.json.gz differ diff --git a/research/format-limits-2/s1-2-erratum-invoice/inputs/r39s/rho01.cpp b/research/format-limits-2/s1-2-erratum-invoice/inputs/r39s/rho01.cpp new file mode 100644 index 0000000000..f051ce74aa --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/inputs/r39s/rho01.cpp @@ -0,0 +1,31 @@ +// 0-1 BFS: min #locals to reach each pair-preserving monomial target rho over F2. bridges cost 0 (counted separately: second value = min bridges among min-local words via lexicographic cost nl*1000+nb). +#include +#include +#include +#include +#include +#include +#include +#include +using namespace std; +typedef unsigned long long u64; +int P,NB; +u64 pack(const vector&r){u64 x=0;for(int i=0;i unpack(u64 x){vectorr(NB);for(int i=0;i>(i*NB))&((1<2?atoi(argv[2]):2*P+2; + vector> loc; for(int p=0;p> br; for(int d=0;d id(NB);for(int i=0;i dist; dist.reserve(4000000); + priority_queue,vector>,greater<>> pq; // cost=nl*1000+nb + u64 s0=pack(id);dist[s0]=0;pq.push({0,s0}); + while(!pq.empty()){auto [c,x]=pq.top();pq.pop();if(dist[x]!=c)continue; if(c/1000>maxnl)break; + auto r=unpack(x); + for(auto&l:loc){auto q=r;q[l.first]^=q[l.second];int nc=c+1000;u64 y=pack(q);auto it=dist.find(y);if(it==dist.end()||it->second>nc){dist[y]=nc;pq.push({nc,y});}} + for(auto&b:br){auto q=r;q[b[0]]^=q[b[1]];q[b[2]]^=q[b[3]];int nc=c+1;u64 y=pack(q);auto it=dist.find(y);if(it==dist.end()||it->second>nc){dist[y]=nc;pq.push({nc,y});}} + } + vector perm(P);iota(perm.begin(),perm.end(),0); + do{for(int m=0;m<(1<t(NB);for(int p=0;p>p)&1))); + auto it=dist.find(pack(t));printf("perm=");for(int p:perm)printf("%d",p);printf(" swapmask=%d : ",m);if(it==dist.end())printf("unreached<=%d locals\n",maxnl);else printf("locals=%d bridges=%d\n",it->second/1000,it->second%1000);} + }while(next_permutation(perm.begin(),perm.end())); + printf("states %zu\n",dist.size());} diff --git a/research/format-limits-2/s1-2-erratum-invoice/inputs/r39s/rho_bfs.py b/research/format-limits-2/s1-2-erratum-invoice/inputs/r39s/rho_bfs.py new file mode 100644 index 0000000000..4cda99695c --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/inputs/r39s/rho_bfs.py @@ -0,0 +1,49 @@ +# Scalar-layer (F2) search: min #locals (then #bridges) for each pair-preserving monomial target rho. +# banks: X_p=2p, Y_p=2p+1 ; state = tuple of row bitmasks (bank i = XOR of inputs). Chain: locals alternate with bridge groups. +import sys, itertools +from collections import deque +P=int(sys.argv[1]); NB=2*P +def apply_add(st,d,s): + l=list(st); l[d]^=l[s]; return tuple(l) +ident=tuple(1< bank + t[2*p+e]=1<<(2*q+(e^sw[p])) + targets[(perm,sw)]=tuple(t) +locals_=[] # (d,s): forward Y_p+=X_p ; backward X_p+=Y_p +for p in range(P): + locals_.append((2*p+1,2*p)); locals_.append((2*p,2*p+1)) +bridges=[] +for d in range(P): + for s in range(P): + if d!=s: bridges.append(((2*d,2*s),(2*s+1,2*d+1))) # X_d+=X_s ; Y_s+=Y_d +# Dijkstra-ish lexicographic over (nlocals, nbridges): BFS by nlocals layers w/ bridge closure (bridges free-cost count) +import heapq +best={} +start=(ident,-1) +pq=[(0,0,ident,-1)] +seen={} +res={} +while pq: + nl,nb,st,last=heapq.heappop(pq) + if (st,last) in seen: continue + seen[(st,last)]=(nl,nb) + for k,t in targets.items(): + if st==t and k not in res: res[k]=(nl,nb) + if nl>=2*P+2 and len(res)==len(targets): break + if nl>2*P+2: continue + for (d,s) in locals_: + p=d//2 + heapq.heappush(pq,(nl+1,nb,apply_add(st,d,s),p)) + for (a,b) in bridges: + st2=apply_add(apply_add(st,*a),*b) + heapq.heappush(pq,(nl,nb+1,st2,-1)) + if nb>6*(P-1)+2: pass +for k,v in sorted(res.items(),key=lambda x:x[1]): + print(k,v) diff --git a/research/format-limits-2/s1-2-erratum-invoice/tools/derive_registers.py b/research/format-limits-2/s1-2-erratum-invoice/tools/derive_registers.py new file mode 100644 index 0000000000..3fd48e85e9 --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/tools/derive_registers.py @@ -0,0 +1,39 @@ +"""Derivation of inputs/derived/k492_registers.json (NOT run by verify.part.sh; it needs the rebuilt CANONICAL-WORD files). +usage: derive_registers.py + +Replays the monotone frame climbs of a CANONICAL-WORD (parts A, centers, B, tail, final) exactly as the hub's emit() does +(same logic as cards/B15/reg.py) and writes, per provider, the list of climb widths of every register, the class sizes +and the word's own local_profile. Widths are |frame after| - |frame before| (centre cut climbs are the descents to +level 0). The input words are the ck / jp8 local words rebuilt from the research/complex-k492-owner-repair code of #626.""" +import gzip, hashlib, json, sys + +def climbs(d): + F = {(p, i): e[-1] for p in ('A', 'B', 'tail') for i, e in enumerate(d[p])} + fr = d['frames']; cur = list(d['start']); out = [] + L = lambda f: len(fr[f]) + def climb(r, f): + if cur[r] == f: return + out.append((r, L(f) - L(cur[r]))); cur[r] = f + for part in ('A', 'centers', 'B', 'tail', 'final'): + if part in ('A', 'B', 'tail'): + for i, e in enumerate(d[part]): + for r in [e[1]] + ([e[2]] if e[0] == 'add' else []): climb(r, F[part, i]) + 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]))) + else: + for r, f in enumerate(d['final']): climb(r, f) + return out + +res = {} +for prov in ('ck', 'jp8'): + path = '%s/%s-local/CANONICAL-WORD.json.gz' % (sys.argv[1], prov) + raw = gzip.open(path).read(); d = json.loads(raw) + n = 2 * d['v'] + d['R']; regs = [[] for _ in range(n)] + for r, w in climbs(d): regs[r].append(w) + res[prov] = {'word_sha256_decompressed': hashlib.sha256(raw).hexdigest(), 'v': d['v'], 'R': d['R'], + 'centers': d['centers'], 'local_profile': d['local_profile'], 'regs': regs} +json.dump(res, open(sys.argv[2], 'w'), separators=(',', ':')) diff --git a/research/format-limits-2/s1-2-erratum-invoice/tools/mksources.py b/research/format-limits-2/s1-2-erratum-invoice/tools/mksources.py new file mode 100644 index 0000000000..31a4444d39 --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/tools/mksources.py @@ -0,0 +1,20 @@ +"""Writes SOURCES.part.json: vendored PR files (from tools/vendor.out.json) plus local (non-PR) files with sha256 pins.""" +import hashlib, json, os, sys +pkg = sys.argv[1] +files = json.load(open(os.path.join(pkg, 'tools', 'vendor.out.json'))) +local = [ + ('inputs/derived/k492_registers.json', 'derived', 'P1-P5: per-register climb widths of the ck / jp8 local words of #626, from tools/derive_registers.py applied to the CANONICAL-WORD.json.gz files of the k492b rebuild (r40/base/work/k492b/{ck,jp8}-local; rebuild from research/complex-k492-owner-repair code of #626 is RECORDED, not repeated). Binding: the invoice built from it reproduces the PLAN profile of #626 exactly (P1.gate-profile) and kappa to 18 digits'), + ('inputs/r39s/rho01.cpp', 'tool', 'E2: 0-1 BFS over F2 bank matrices (R39-S), run by checks/e2_rho.py'), + ('inputs/r39s/rho_bfs.py', 'tool', 'E2: independent Python Dijkstra at P = 2'), +] +ev = [(os.path.join('evidence', r, f), 'evidence') for r in sorted(os.listdir(os.path.join(pkg, 'evidence'))) for f in sorted(os.listdir(os.path.join(pkg, 'evidence', r)))] +desc = {'E2/rho01_P2.txt': 'output of rho01 2 (also regenerated by verify)', 'E2/rho01_P3.txt': 'output of rho01 3 (also regenerated by verify)', + 'E2/rho_bfs_P2.txt': 'output of rho_bfs.py 2', 'E2/R39-S-NOTES.md': 'R39-S card notes: gate, measurement, scope', + 'P1/B15-NOTES.md': 'B15 card notes: invoice chain and knob table', 'P2/B26-NOTES.md': 'B26 card notes: bit knob table (word-level rows RECORDED)', + 'P3/B66-NOTES.md': 'B66 card notes: rate table and #646 decomposition', 'P4/B54-NOTES.md': 'B54 card notes: s = 7 invoice and economics', + 'P5/B11-NOTES.md': 'B11 card notes: frame-SA outcome, blocking histogram', 'P5/B3R-NOTES.md': 'B3R card notes: SSS hourglass climb mass'} +out = list(files) +for rel, kind, used in [(a, b, c) for a, b, c in local] + [(p, k, desc.get(p[len('evidence/'):], '')) for p, k in ev]: + data = open(os.path.join(pkg, rel), 'rb').read() + out.append({'file': rel, 'kind': kind, 'sha256': hashlib.sha256(data).hexdigest(), 'used_for': used}) +json.dump({'description': 'PR files are copied unchanged (or gzip-compressed with mtime 0): blob = git blob id of the file at the cited commit (for a .gz copy: of the decompressed content). kind=derived/tool/evidence files are local and pinned by sha256.', 'files': out}, open(os.path.join(pkg, 'SOURCES.part.json'), 'w'), indent=1) diff --git a/research/format-limits-2/s1-2-erratum-invoice/tools/vendor.out.json b/research/format-limits-2/s1-2-erratum-invoice/tools/vendor.out.json new file mode 100644 index 0000000000..4bfe10f7c5 --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/tools/vendor.out.json @@ -0,0 +1,90 @@ +[ + { + "file": "inputs/pr595/a5_scope_multipliers.py", + "pr": 595, + "commit": "39112c2577452fa278489fb9fd77a9aecb2cdc24", + "source_path": "research/format-limits/scripts/a5_scope_multipliers.py", + "blob": "e45f8882ec6793868c75088810c47e041eb7e4e2", + "used_for": "E1: scope-multiplier script re-run unchanged" + }, + { + "file": "inputs/pr595/skel.py", + "pr": 595, + "commit": "39112c2577452fa278489fb9fd77a9aecb2cdc24", + "source_path": "research/format-limits/scripts/skel.py", + "blob": "e3c6c815b604dd41d3807c78917806ae4a5c08a7", + "used_for": "E1: imported by a5" + }, + { + "file": "inputs/pr595/cert.py", + "pr": 595, + "commit": "39112c2577452fa278489fb9fd77a9aecb2cdc24", + "source_path": "research/format-limits/scripts/cert.py", + "blob": "351fbd107c86a233a91eb915f88612c9f9ad6c26", + "used_for": "E1: imported by skel" + }, + { + "file": "inputs/pr595/report.py", + "pr": 595, + "commit": "39112c2577452fa278489fb9fd77a9aecb2cdc24", + "source_path": "research/format-limits/scripts/report.py", + "blob": "5593062527d6dbba99c7b1992390a3bf4f330a54", + "used_for": "E1: imported by a5" + }, + { + "file": "inputs/pr626/PLAN.json.gz", + "pr": 626, + "commit": "660de893d27bb7abd1d5b01b1640207528a5c851", + "source_path": "research/complex-k492-owner-repair/data/PLAN.json", + "blob": "434a431937757def4e496301e3d33106f0026fa3", + "used_for": "P1,P3,P4: profile {width: count}, m = 73, live 7168, deficit 2560" + }, + { + "file": "inputs/pr626/README.md.gz", + "pr": 626, + "commit": "660de893d27bb7abd1d5b01b1640207528a5c851", + "source_path": "research/complex-k492-owner-repair/README.md", + "blob": "58722c1a496f0c806e77c9d762eb00b0c53254f0", + "used_for": "P1: conditional kappa literal 0.001635527380375392" + }, + { + "file": "inputs/pr649/PLAN.json.gz", + "pr": 649, + "commit": "1b931ee055d738753778e1051300140c16ae219d", + "source_path": "research/gauge44-bit589/data/PLAN.json", + "blob": "9d5be193ad6a74a83d494e37ca2c43c43598ab84", + "used_for": "P3: base profile of the rate table" + }, + { + "file": "inputs/pr645/PLAN.json.gz", + "pr": 645, + "commit": "638a5171dd1aca89ff50d07dcbe288b567769804", + "source_path": "research/gauge44-global/data/PLAN.json", + "blob": "d561080e0f5f1570e095405b9e8a243150823896", + "used_for": "P3: profile reproduced" + }, + { + "file": "inputs/pr646/PLAN.json.gz", + "pr": 646, + "commit": "cdfe8273bb5054e0a837a3594309c6262e995b1f", + "source_path": "research/signed-root-k480/data/PLAN.json", + "blob": "28355d12849ced4c36c4d4534cabca47d92fa831", + "used_for": "P3: profile reproduced" + }, + { + "file": "inputs/pr635/PLAN.json.gz", + "pr": 635, + "commit": "a6895a69f8ad98ab45777b03e9e6f48888c39f6f", + "source_path": "research/complex-571-cold14-st2/data/PLAN.json", + "blob": "d7794713ddf9c1325d4a2142ad130b2395d27ae7", + "used_for": "P3: profile reproduced" + }, + { + "file": "inputs/pr555/EXPECTED.json.gz", + "pr": 555, + "commit": "65a6bc19f820c8b1873f65a517bcf70cd6887223", + "source_path": "research/e8-bit-p111/EXPECTED.json", + "blob": "c8ad4439e83f07bcda437598d6a4c31f4e65f2a9", + "used_for": "P2: nine-stage bit profile, live, shipped c" + } +] \ No newline at end of file diff --git a/research/format-limits-2/s1-2-erratum-invoice/tools/vendor.py b/research/format-limits-2/s1-2-erratum-invoice/tools/vendor.py new file mode 100644 index 0000000000..35298b6d77 --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/tools/vendor.py @@ -0,0 +1,32 @@ +"""Builds inputs/ (gz copies of PR files) and SOURCES.part.json from a clone of CrocSwap/integer-mult-bounds. +usage: vendor.py . Needs the PR heads fetched as refs/kpr2/pr (git fetch origin pull/N/head:refs/kpr2/prN). +For a .gz copy of a non-.gz source the blob id is that of the decompressed content (as in #595 SOURCES.json).""" +import gzip, hashlib, json, os, subprocess, sys +clone, pkg = sys.argv[1:3] +def git(*a): return subprocess.check_output(('git', '-C', clone) + a) +PRS = [ + (595, 'research/format-limits/scripts/a5_scope_multipliers.py', 'inputs/pr595/a5_scope_multipliers.py', 0, 'E1: scope-multiplier script re-run unchanged'), + (595, 'research/format-limits/scripts/skel.py', 'inputs/pr595/skel.py', 0, 'E1: imported by a5'), + (595, 'research/format-limits/scripts/cert.py', 'inputs/pr595/cert.py', 0, 'E1: imported by skel'), + (595, 'research/format-limits/scripts/report.py', 'inputs/pr595/report.py', 0, 'E1: imported by a5'), + (626, 'research/complex-k492-owner-repair/data/PLAN.json', 'inputs/pr626/PLAN.json.gz', 1, 'P1,P3,P4: profile {width: count}, m = 73, live 7168, deficit 2560'), + (626, 'research/complex-k492-owner-repair/README.md', 'inputs/pr626/README.md.gz', 1, 'P1: conditional kappa literal 0.001635527380375392'), + (649, 'research/gauge44-bit589/data/PLAN.json', 'inputs/pr649/PLAN.json.gz', 1, 'P3: base profile of the rate table'), + (645, 'research/gauge44-global/data/PLAN.json', 'inputs/pr645/PLAN.json.gz', 1, 'P3: profile reproduced'), + (646, 'research/signed-root-k480/data/PLAN.json', 'inputs/pr646/PLAN.json.gz', 1, 'P3: profile reproduced'), + (635, 'research/complex-571-cold14-st2/data/PLAN.json', 'inputs/pr635/PLAN.json.gz', 1, 'P3: profile reproduced'), + (555, 'research/e8-bit-p111/EXPECTED.json', 'inputs/pr555/EXPECTED.json.gz', 1, 'P2: nine-stage bit profile, live, shipped c'), +] +files = [] +for pr, src, dst, gz, used in PRS: + commit = git('rev-parse', 'refs/kpr2/pr%d' % pr).decode().strip() + data = git('show', '%s:%s' % (commit, src)) + blob = git('rev-parse', '%s:%s' % (commit, src)).decode().strip() + out = os.path.join(pkg, dst); os.makedirs(os.path.dirname(out), exist_ok=True) + if gz: + with open(out, 'wb') as f: + with gzip.GzipFile(fileobj=f, mode='wb', mtime=0) as g: g.write(data) + else: + open(out, 'wb').write(data) + files.append({'file': dst, 'pr': pr, 'commit': commit, 'source_path': src, 'blob': blob, 'used_for': used}) +json.dump(files, open(os.path.join(pkg, 'tools', 'vendor.out.json'), 'w'), indent=1) diff --git a/research/format-limits-2/s1-2-erratum-invoice/verify.part.sh b/research/format-limits-2/s1-2-erratum-invoice/verify.part.sh new file mode 100644 index 0000000000..d4025e7299 --- /dev/null +++ b/research/format-limits-2/s1-2-erratum-invoice/verify.part.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +# Bundle A (sections 1-2: Erratum and scope E1-E2; Invoice calculus and prices P1-P5). Prints one PASS/FAIL line per +# assertion; exit status 0 only if all pass. Standard library only (python >= 3.11); a C++ compiler is used by E2 if present +# (otherwise E2 parses the shipped evidence). About 20 s. usage: bash verify.part.sh (PYTHON=... to choose python) +# E1_FULL=1 bash verify.part.sh also runs #595's a5_scope_multipliers.py unchanged (all 7 variants, +56 s). +set -uo pipefail +HERE=$(cd "$(dirname "$0")" && pwd) +PY="${PYTHON:-python3}" +export PYTHONDONTWRITEBYTECODE=1 +status=0 +run() { "$PY" -I -B "$HERE/checks/$1" || status=1; } +echo "== A.1 erratum and scope"; run e1_scope_multipliers.py; run e2_rho.py +echo "== A.2 invoice calculus and prices"; run p1_knobs.py; run p2_bit.py; run p3_rate.py; run p4_s7.py; run p5_cover.py +if [ $status -eq 0 ]; then echo "== bundle A: all PASS"; else echo "== bundle A: FAILURES"; fi +exit $status diff --git a/research/format-limits-2/s3-4-census-gauges/SOURCES.part.json b/research/format-limits-2/s3-4-census-gauges/SOURCES.part.json new file mode 100644 index 0000000000..8bd76fb8dc --- /dev/null +++ b/research/format-limits-2/s3-4-census-gauges/SOURCES.part.json @@ -0,0 +1,109 @@ +{ + "description": "Vendored inputs of bundle B. files = copied from open PRs of CrocSwap/integer-mult-bounds (blob = git blob id of the source file at the cited commit; verified by checks/b_provenance.py). derived = rebuilt words that are not files of any PR; they are checked against the hashes their PR pins.", + "files": [ + { + "file": "inputs/pr656/PLAN.json.gz", + "pr": 656, + "commit": "0805e78f5fecc700804d4766d7e3e1d7d7e6a2ba", + "source_path": "research/gauge44-layered-b/data/PLAN.json", + "blob": "b7d894d3fe98606587a72eee97f2dbb25a0072d3", + "stored": "gzip of the source file (blob id is of the decompressed content)", + "used_for": "C1: profile, M=73, W=7168, deficit 2560; provider pins of the shipped gauge44 word" + }, + { + "file": "inputs/pr626/GENERATED-IDENTITY-CONTROLS.json", + "pr": 626, + "commit": "660de893d27bb7abd1d5b01b1640207528a5c851", + "source_path": "research/complex-k492-owner-repair-validation/linux/GENERATED-IDENTITY-CONTROLS.json", + "blob": "901387218f1b2251016cbb5f2d487c923a29a1a3", + "stored": "unchanged copy", + "used_for": "C2, C3: pins (raw and canonical-content sha256) of the ck provider word" + }, + { + "file": "inputs/pr645/FULL-WORD.json.gz", + "pr": 645, + "commit": "638a5171dd1aca89ff50d07dcbe288b567769804", + "source_path": "research/gauge44-global/evidence/local/FULL-WORD.json.gz", + "blob": "447d45d08bf4b054d2fa76a0dc00a3b0f168fe91", + "stored": "unchanged copy", + "used_for": "G1, G2: the #645 Gauge44 forward word" + }, + { + "file": "inputs/pr531/PACKET-PROGRAMS.json.gz", + "pr": 531, + "commit": "e07a8a3f9f79c22113398a0c5dbbc7601f489b3e", + "source_path": "research/direct-delivery504-global/inputs/hamming/PACKET-PROGRAMS.json.gz", + "blob": "e98ce5d879e99427347acd725efc3b0c96fe5c13", + "stored": "unchanged copy", + "used_for": "G1, G2: Hamming block source lines" + }, + { + "file": "inputs/pr531/PROTOTYPE.json.gz", + "pr": 531, + "commit": "e07a8a3f9f79c22113398a0c5dbbc7601f489b3e", + "source_path": "research/direct-delivery504-global/inputs/hamming/PROTOTYPE.json", + "blob": "9efe30ee107b9c67f15f1c726e1a1cb5cef03929", + "stored": "gzip of the source file (blob id is of the decompressed content)", + "used_for": "G1, G2: binary_ports" + } + ], + "derived": [ + { + "file": "inputs/derived/g44-CANONICAL-WORD.json.gz", + "kind": "derived (rebuilt, not a file of any PR)", + "sha256": "72a4952751383e2a5e84b967f1e76fdfda003fe5592df357a599232e586817e3", + "content_sha256": "94fc985d6ab90967bfe995de41581690bcdb6dbade69e594b0130ef3da0c6314", + "pinned_in": "PR 656 @0805e78f data/PLAN.json provider_registry.gauge44.artifact_sha256 (bytes) and artifact_semantic_sha256 (content: sha256 of json.dumps(sort_keys, compact separators))", + "rebuilt_by": "PR 656 construction/reproduce.py --until word, then construction/layers/reproduce_layers.py (about 9 min; pinned #635 a6895a69 checkout)", + "used_for": "C1: shipped #656 gauge44 canonical word" + }, + { + "file": "inputs/derived/g44-TAGS.json", + "kind": "derived (annotation, NOT pinned by any PR)", + "sha256": "0977be8f1226d678c941cd61597621c47f4ed1193bfc1f15456c53fe75dd37f2", + "rebuilt_by": "copy of construction/construct_gauge_xcentre.py with a tag argument at each of its 4 alloc() sites; its raw FULL-WORD output was compared by hash with the pinned one (card B76); register id = key - 16; the tagged rebuild's raw FULL-WORD (decompressed bytes) has sha256 0ac47f92fc2e..., equal to word_content_sha256.raw in #656 construction/INPUTS.json (re-verified at packaging)", + "used_for": "C1: allocation site of each of the 492 helpers" + }, + { + "file": "inputs/derived/ck-CANONICAL-WORD.json.gz", + "kind": "derived (rebuilt, not a file of any PR)", + "sha256": "ae3018c0646be06f47d345bb8baf0e6ea9220096a949fa30a8f7656aa4ad6f45", + "content_sha256": "9bbc75dede090cfd7a0a0252424ea9d9f6211e2350d2a801d4e4f2f0784167c7", + "pinned_in": "PR 626 @660de893 research/complex-k492-owner-repair-validation/linux/GENERATED-IDENTITY-CONTROLS.json source_providers.ck.raw / .semantic", + "rebuilt_by": "the k492b ck provider chain of PR 626 (research/complex-k492-owner-repair-validation)", + "used_for": "C2, C3: the ck provider word of #626 (8 calls)" + } + ], + "evidence": [ + { + "file": "evidence/C1/STEPS.json", + "sha256": "e2a8a53212979de70e0f9e9fbd457736d167819e97d455ea3ccc2f1b6356fb0d", + "what": "card B76 rebuild of the #656 word: step exit codes (pivot-swap ... wrappers), all 0", + "kind": "existing run log/output, shipped unchanged; no solver (SAT/CP-SAT/DRAT) was used by rows C1-C3, G1-G3" + }, + { + "file": "evidence/C1/ledger_by_step.csv", + "sha256": "4916e77c90696678cc3cb4e320a1fbec622e9d6bd4ca4b3e2a84ad1844ce5518", + "what": "card B76 output of the C1 ledger (per allocation site)", + "kind": "existing run log/output, shipped unchanged; no solver (SAT/CP-SAT/DRAT) was used by rows C1-C3, G1-G3" + }, + { + "file": "evidence/C1/ledger_helpers.csv", + "sha256": "16ce8ff00f35e5b88bf82aebf56ad1ddeded5fdb7897829b6e1ab3595786c16b", + "what": "card B76 output of the C1 ledger (492 helpers: site, block|slot, climbs, mass)", + "kind": "existing run log/output, shipped unchanged; no solver (SAT/CP-SAT/DRAT) was used by rows C1-C3, G1-G3" + }, + { + "file": "evidence/C1/ledgers.log", + "sha256": "171c61ffe5eb12bb2704ba6a1b576c587e0068da750d5cc33e47e7abe9924a85", + "what": "card B76 rebuild: ledgers step log", + "kind": "existing run log/output, shipped unchanged; no solver (SAT/CP-SAT/DRAT) was used by rows C1-C3, G1-G3" + }, + { + "file": "evidence/G2/rep1.log", + "sha256": "109af7d78dd5fc77b75b77ee9b575d72b1d2a4835bc0168be59525f88db7d228", + "what": "card B58 rebuild of the #645 cold44 word (shadow-early ... cold44-exact all PASS; 5.9 s); command: nice -n19 timeout 1500 python3 construction/reproduce.py", + "kind": "existing run log/output, shipped unchanged; no solver (SAT/CP-SAT/DRAT) was used by rows C1-C3, G1-G3" + } + ] +} \ No newline at end of file diff --git a/research/format-limits-2/s3-4-census-gauges/checks/b_pins.py b/research/format-limits-2/s3-4-census-gauges/checks/b_pins.py new file mode 100644 index 0000000000..e1b440d990 --- /dev/null +++ b/research/format-limits-2/s3-4-census-gauges/checks/b_pins.py @@ -0,0 +1,16 @@ +"""Cross-pins of bundle B: the rebuilt (derived) words against the hashes their PRs publish. (The vendored files themselves are checked +by scripts/provenance.py, step 0 of verify.sh.)""" +import json, os +from common import * +S = json.load(open(os.path.join(ROOT, '..', 'SOURCES.json'))) +PFX = os.path.basename(ROOT) + '/' +D = {e['file'][len(PFX):]: e for e in S['derived'] if e['file'].startswith(PFX)} +plan = load_json('pr656', 'PLAN.json.gz'); g = plan['provider_registry']['gauge44'] +d = D['inputs/derived/g44-CANONICAL-WORD.json.gz'] +check('B.0 pin: #656 PLAN.json gauge44 CANONICAL-WORD bytes', g['artifact_sha256']['CANONICAL-WORD.json.gz'] == d['sha256']) +check('B.0 pin: #656 PLAN.json gauge44 CANONICAL-WORD content', g['artifact_semantic_sha256']['CANONICAL-WORD.json.gz'] == d['content_sha256']) +gi = load_json('pr626', 'GENERATED-IDENTITY-CONTROLS.json')['source_providers']['ck'] +d = D['inputs/derived/ck-CANONICAL-WORD.json.gz'] +check('B.0 pin: #626 identity controls ck CANONICAL-WORD bytes', gi['raw']['CANONICAL-WORD.json.gz'] == d['sha256']) +check('B.0 pin: #626 identity controls ck CANONICAL-WORD content', gi['semantic']['CANONICAL-WORD.json.gz'] == d['content_sha256']) +finish() diff --git a/research/format-limits-2/s3-4-census-gauges/checks/c1_census_656.py b/research/format-limits-2/s3-4-census-gauges/checks/c1_census_656.py new file mode 100644 index 0000000000..9d7f69032c --- /dev/null +++ b/research/format-limits-2/s3-4-census-gauges/checks/c1_census_656.py @@ -0,0 +1,83 @@ +"""C1: provenance census of the shipped #656 gauge44 word (492 helpers, 4 allocation sites) and the exact kappa identity. +Inputs: PR 656 data/PLAN.json (blob-checked), the rebuilt canonical word (hash-pinned by that PLAN), TAGS.json (rebuilt annotation, NOT pinned).""" +import math +from collections import Counter, defaultdict +from decimal import Decimal as D, localcontext +from common import * + +plan = load_json('pr656', 'PLAN.json.gz'); d = load_json('derived', 'g44-CANONICAL-WORD.json.gz') +M, W, deficit = plan['M'], plan['live'], plan['deficit'] +H = {int(k): v for k, v in plan['profile'].items()} + +def root(H): + with localcontext() as c: + c.prec = 50 + terms = [(D(r) * D(n) / D(M * W), (D(M) / D(r)).ln()) for r, n in H.items() if n] + lo, hi = D(0), D('0.01') + for _ in range(300): + 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 + +# ---- kappa identity (needs only the PR file) +check('C1 PLAN mass = M*W - deficit', sum(r * n for r, n in H.items()) == M * W - deficit, '%d = 73*7168-2560' % (M * W - deficit)) +b = root(H); kappa = b / (1 + b) +check('C1 root(PLAN profile): b = 0.00165684913780230798', str(b).startswith('0.00165684913780230798'), str(b)[:26]) +check('C1 kappa = b/(1+b) = 1.654108529511355e-3', str(kappa).startswith('0.001654108529511355'), str(kappa)[:24]) + +# ---- per-register climbs of the word (port of the replay used by the cards; climb = frame-dimension increase on first use or at the end) +def climbs(d): + F = {(p, i): e[-1] for p in ('A', 'B', 'tail') for i, e in enumerate(d[p])} + fr = d['frames']; cur = list(d['start']); out = [] + L = lambda f: len(fr[f]) + def climb(r, f): + if cur[r] == f: return + out.append((r, L(f) - L(cur[r]))); cur[r] = f + for part in ('A', 'centers', 'B', 'tail', 'final'): + if part in ('A', 'B', 'tail'): + for i, e in enumerate(d[part]): + for r in [e[1]] + ([e[2]] if e[0] == 'add' else []): climb(r, F[part, i]) + 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]))) + else: + for r, f in enumerate(d['final']): climb(r, f) + return out +out = climbs(d); v, R = d['v'], d['R'] +prof = Counter(w for r, w in out) +lp = {int(k): n for k, n in d['local_profile'].items()} +check('C1 word local_profile {1:2542,2:414,3:434,4:154,5:56,8:8}', lp == {1: 2542, 2: 414, 3: 434, 4: 154, 5: 56, 8: 8}, lp) +check('C1 replayed climb profile == local_profile (3608 climbs)', dict(prof) == lp and sum(prof.values()) == 3608, sum(prof.values())) +ex = Counter(H) +for r, n in lp.items(): ex[r] -= 72 * n +ex = {r: n for r, n in ex.items() if n} +check('C1 PLAN profile = 72 x local profile + non-register extras {2:4,3:4,5:1,7:1,16:2,32:1,48:2398}', ex == {2: 4, 3: 4, 5: 1, 7: 1, 16: 2, 32: 1, 48: 2398}, ex) + +# ---- allocation sites (TAGS.json: rebuilt annotation, not pinned by the PR) +T = load_json('derived', 'g44-TAGS.json'); tag = {int(k) - 16: x for k, x in T.items()} +check('C1 TAGS cover exactly the 492 helper ids', R == 492 and set(tag) == set(range(2 * v, 2 * v + R)) and v == 112, (v, R)) +cen = set(d['centers']); phi = lambda r: r * math.log(73 / r) +per = defaultdict(list) +for r, w in out: per[r].append(w) +site = {r: tag[r][0][0] for r in tag} +cnt = Counter(site.values()) +check('C1 helpers born at 4 sites: S1 block scratch 224, S3 packet copy 156, S4 slot copy 112 (sum 492)', + len(cnt) == 3 and sum(cnt.values()) == 492 and sorted(cnt.values()) == [112, 156, 224], dict(cnt)) +s1c = sorted(r for r in cen if r in tag) +check('C1 S1 = 221 + 3 centres (the 3 centres among helper ids are S1 slots 224, 240, 256)', s1c == [224, 240, 256] and all(site[r].startswith('S1') for r in s1c) and sum(1 for r in tag if site[r].startswith('S1') and r not in cen) == 221, s1c) +mass = {s: sum(phi(w) for r in tag if site[r] == s for w in per[r]) for s in cnt} +S1, S3, S4 = [next(s for s in cnt if s.startswith(p)) for p in ('S1', 'S3', 'S4')] +hel = sum(mass.values()); xy = sum(phi(w) for r, w in out if r < 2 * v) +glob = sum(phi(r) * n for r, n in H.items()) / 72 +check('C1 narrow mass per call (sum r ln(73/r) over climbs): S1 6902, S3 4430, S4 2754', all(abs(mass[s] - x) < 0.6 for s, x in zip((S1, S3, S4), (6902, 4430, 2754))), [round(mass[s], 1) for s in (S1, S3, S4)]) +check('C1 helpers 14085, X/Y registers 6637; helpers = 68% of register narrow mass', round(hel) == 14085 and round(xy) == 6637 and round(100 * hel / (hel + xy)) == 68, (round(hel), round(xy))) +check('C1 share of global narrow mass 32.3 / 20.7 / 12.9 % (global incl. 3.1% idle windows, 31.0% X/Y)', [round(100 * mass[s] / glob, 1) for s in (S1, S3, S4)] == [32.3, 20.7, 12.9] and round(100 * xy / glob, 1) == 31.0 and round(100 * (glob - hel - xy) / glob, 1) == 3.1, round(glob)) +sh = [100 * mass[s] / hel for s in (S1, S3, S4)] +c3 = sum(phi(w) for r in tag if r in cen for w in per[r]) +check('C1 share of helper narrow mass (S1 without centres) 47.9 / 31.4 / 19.5 %', [round(100 * (mass[S1] - c3) / hel, 1), round(sh[1], 1), round(sh[2], 1)] == [47.9, 31.4, 19.5], [round(100 * (mass[S1] - c3) / hel, 1), round(sh[1], 1), round(sh[2], 1)]) +check('C1 S3 + S4 = 268 helpers (numerical equality with the pure-dirt count of C2)', cnt[S3] + cnt[S4] == 268) +finish() diff --git a/research/format-limits-2/s3-4-census-gauges/checks/c2_dirty_borrow.py b/research/format-limits-2/s3-4-census-gauges/checks/c2_dirty_borrow.py new file mode 100644 index 0000000000..8714b9da16 --- /dev/null +++ b/research/format-limits-2/s3-4-census-gauges/checks/c2_dirty_borrow.py @@ -0,0 +1,110 @@ +"""C2: the shipped complex word is a dirty-borrow program, not a clean SLP. Exact rational replay of the ck provider word of #626 +(A + cut + B events; value = a register's exact row up to scale, frames by subspace inclusion), and the same dirt count on the #656 gauge44 word.""" +import sys +from fractions import Fraction as Q +from collections import Counter, defaultdict +from common import * + +def ap(e, rows): + if e[0] == 'scale': + _, t, a, b = e[:4]; q = Q(a, b); rows[t] = {j: q * x for j, x in rows[t].items()} + else: + _, t, s, a, b = e[:5]; q = Q(a, b) + for j, x in list(rows[s].items()): + z = rows[t].get(j, Q(0)) + q * x + if z: rows[t][j] = z + else: rows[t].pop(j, None) +def norm(r): + if not r: return None + k = min(r); c = r[k]; return tuple(sorted((j, x / c) for j, x in r.items())) + +def cover_census(d): + V = d['v']; n = len(d['start']); fr = d['frames'] + ss = [] + for f in fr: + s = {0} + for b in f: s |= {x ^ b for x in s} + ss.append(frozenset(s)) + FULL = frozenset(range(1024)) + S = lambda f: FULL if f is None else ss[f] + rows = [{r: Q(1)} for r in range(n)] + cur = [norm(rows[r]) for r in range(n)] + holders = defaultdict(set); readers = defaultdict(list) + for r in range(n): holders[cur[r]].add(r) + seq = d['A'] + d['cut'] + d['B'] + for T, e in enumerate(seq): + if e[0] == 'add': readers[cur[e[2]]].append((T, e[-1])) + ap(e, rows); t = e[1]; cur[t] = norm(rows[t]); holders[cur[t]].add(t) + nvals = totH = totC = over = 0 + for val, hs in holders.items(): + rd = readers.get(val, []) + if not rd or val is None: continue + nvals += 1 + # min chain cover of the readers (order: time, then frame inclusion) = #readers - max bipartite matching (Dilworth/Fulkerson) + adj = [[b for b in range(len(rd)) if b != a and (rd[a][0], a) < (rd[b][0], b) and S(rd[a][1]) <= S(rd[b][1])] for a in range(len(rd))] + match = {} + def aug(a, seen): + for b in adj[a]: + if b in seen: continue + seen.add(b) + if b not in match or aug(match[b], seen): match[b] = a; return True + return False + m = sum(1 for a in range(len(rd)) if aug(a, set())) + totH += len(hs); totC += len(rd) - m + if len(hs) > len(rd) - m: over += 1 + return nvals, totH, totC, over + +def peak_redundant(d): + V = d['v']; n = len(d['start']) + rows = [{r: Q(1)} for r in range(n)] + seq = d['A'] + d['cut'] + d['B'] + lastread = [-1] * n + for T, e in enumerate(seq): + if e[0] == 'add': lastread[e[2]] = T + cur = [norm(rows[r]) for r in range(n)]; peak = 0 + for T, e in enumerate(seq): + ap(e, rows); cur[e[1]] = norm(rows[e[1]]) + if T % 20 == 0: + live = set(r for r in range(2 * V, n) if lastread[r] > T and cur[r] is not None) + vals = {} + for r in range(n): + if r in live or r < V: vals.setdefault(cur[r], []).append(r) + red = 0 + for v, rs in vals.items(): + hs = [r for r in rs if r >= 2 * V] + if hs: red += len(hs) - (0 if [r for r in rs if r < V] else 1) + peak = max(peak, red) + return peak + +def dirt(d): + V = d['v']; n = len(d['start']) + rows = [{r: Q(1)} for r in range(n)] + for e in d['A'] + d['cut']: ap(e, rows) + pre = [dict(r) for r in rows] + readers = {e[2] for e in d['B'] if e[0] == 'add' and e[2] >= 2 * V} + zero = {s for s in readers if not any(j < V for j in pre[s])} # clean row = columns of the 112 source registers + for e in d['B']: ap(e, rows) + cl = lambda r: {j: x for j, x in r.items() if j < V} + tclean = all(cl(rows[V + p]) == {p: Q(1)} for p in range(V)) + lens = [len(rows[t]) for t in range(V, 2 * V)] + return readers, zero, tclean, min(lens), max(lens) + +ck = load_json('derived', 'ck-CANONICAL-WORD.json.gz'); V = ck['v'] +check('C2 ck word: v = 112, R = 492 helpers, 716 registers', V == 112 and ck['R'] == 492 and len(ck['start']) == 716) +nv, th, tc, ov = cover_census(ck) +check('C2 ck: 2056 distinct read values; every value\'s readers form ONE chain (min chain cover 2056)', nv == 2056 and tc == 2056, (nv, tc)) +check('C2 ck: 2483 (value, holder) pairs, 259 values held by >1 register at some time (sequential reuse)', th == 2483 and ov == 259, (th, ov)) +pk = peak_redundant(ck) +check('C2 ck: peak simultaneous redundant live helpers = 0 (sampled every 20 ops)', pk == 0, pk) +rd, zero, tclean, lo, hi = dirt(ck) +check('C2 ck: 422 helpers are read in B; 268 of them have an all-zero clean (source-column) row: pure dirt scratch', len(rd) == 422 and len(zero) == 268, (len(rd), len(zero))) +check('C2 ck: clean (zero-ancilla) map is t_p = s_p for all 112 targets; the real target rows have 36-97 terms over the 716 coordinates', tclean and lo == 36 and hi == 97, (lo, hi)) + +# the same dirt count on the #656 gauge44 word, and the join with C1's allocation sites +g = load_json('derived', 'g44-CANONICAL-WORD.json.gz') +rd, zero, tclean, lo, hi = dirt(g) +T = load_json('derived', 'g44-TAGS.json'); site = {int(k) - 16: x[0][0][:2] for k, x in T.items()} +s34 = {r for r, s in site.items() if s in ('S3', 'S4')} +check('C2 #656 gauge44 word: B-read helpers with an all-zero clean row (count, and equal as a SET to the S3 + S4 allocation sites of C1)', + zero == s34 and len(s34) == 268, (len(rd), len(zero), len(zero & s34))) +finish() diff --git a/research/format-limits-2/s3-4-census-gauges/checks/c3_cap_f2_9.py b/research/format-limits-2/s3-4-census-gauges/checks/c3_cap_f2_9.py new file mode 100644 index 0000000000..a5444f1d84 --- /dev/null +++ b/research/format-limits-2/s3-4-census-gauges/checks/c3_cap_f2_9.py @@ -0,0 +1,23 @@ +"""C3: the 112 ports of the ck provider word form a cap in F2^9 (no three XOR to 0) and every hyperplane misses at least 48 of them.""" +import math +from common import * +P = load_json('derived', 'ck-CANONICAL-WORD.json.gz')['ports']; S = set(P) +check('C3 112 distinct nonzero ports in F2^9', len(P) == 112 and len(S) == 112 and 0 not in S and max(P) < 512) +trip = sum(1 for i in range(112) for j in range(i + 1, 112) if (P[i] ^ P[j]) in S) +check('C3 cap: no three ports XOR to 0', trip == 0, trip) +miss = min(sum(1 for p in P if bin(p & h).count('1') & 1) for h in range(1, 512)) +check('C3 every hyperplane (511) misses at least 48 ports, and some hyperplane misses exactly 48', miss == 48, miss) +# consequence used in the notes (ARGUED, short proof in README): k readers' ports have rank r with k <= 2^(r-1) (a cap of F2^r has <= 2^(r-1) points), +# so an operand frame inside the common perp has dim <= 9 - r <= 8 - ceil(log2 k). Numerical instance: rank of 8 ports of a cap is >= 4. +def rank(vs): + b = {} + for x in vs: + for p in sorted(b, reverse=True): + if x >> p & 1: x ^= b[p] + if x: b[x.bit_length() - 1] = x + return len(b) +import random +random.seed(1) +mn = min(rank(random.sample(P, 8)) for _ in range(20000)) +check('C3 sampled 8-subsets of ports (20000): rank >= 4, so dim of the common perp <= 5', mn >= 4, mn) +finish() diff --git a/research/format-limits-2/s3-4-census-gauges/checks/common.py b/research/format-limits-2/s3-4-census-gauges/checks/common.py new file mode 100644 index 0000000000..d713fcc863 --- /dev/null +++ b/research/format-limits-2/s3-4-census-gauges/checks/common.py @@ -0,0 +1,21 @@ +"""Shared helpers of bundle B checks (standard library only). Inputs are read from ../inputs relative to the package root.""" +import gzip, hashlib, json, os, sys +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +INP = os.path.join(ROOT, 'inputs') +FAILS = [] +def path(*p): return os.path.join(INP, *p) +def load_json(*p): + f = path(*p) + with (gzip.open(f) if f.endswith('.gz') else open(f, 'rb')) as h: return json.load(h) +def raw(*p): + f = path(*p) + with open(f, 'rb') as h: b = h.read() + return gzip.decompress(b) if f.endswith('.gz') else b +def blob_id(b): return hashlib.sha1(b'blob %d\0' % len(b) + b).hexdigest() +def content_sha(obj): return hashlib.sha256(json.dumps(obj, sort_keys=True, separators=(',', ':')).encode()).hexdigest() +def check(name, ok, detail=''): + print(('PASS ' if ok else 'FAIL ') + name + (' | ' + str(detail) if detail != '' else ''), flush=True) + if not ok: FAILS.append(name) +def finish(): + if FAILS: + print('FAILED: %d' % len(FAILS)); sys.exit(1) diff --git a/research/format-limits-2/s3-4-census-gauges/checks/g1_gauge_bound.py b/research/format-limits-2/s3-4-census-gauges/checks/g1_gauge_bound.py new file mode 100644 index 0000000000..6759cb1c03 --- /dev/null +++ b/research/format-limits-2/s3-4-census-gauges/checks/g1_gauge_bound.py @@ -0,0 +1,129 @@ +"""G1/G2: gauge-free cold-end bound per block on the frozen #645 Gauge44 word (SYN-2 tool, adapted: inputs from ../inputs, no output file). +bound_b = |Q_b| - rank Clean[Q_b] (clean = source columns); Lfix = |Q_b| - rank M[Q_b, protected]; LK = rank of the attained cold-unit pairing (exact rationals).""" +import sys, json, gzip +from common import * +from fractions import Fraction as Q +w = load_json('pr645', 'FULL-WORD.json.gz'); v = w['report']['v']; n = 2*v + w['report']['R'] +N = list(range(v)) + list(range(2*v, n)); ix = {x: i for i, x in enumerate(N)} +def basis(vs): + d = {} + for a in vs: + for k in sorted(d, reverse=True): + if a >> k & 1: a ^= d[k] + if a: + k = a.bit_length()-1 + for j in d: + if d[j] >> k & 1: d[j] ^= a + d[k] = a + return tuple(d[k] for k in sorted(d, reverse=True)) +inside = lambda a, b: basis(list(a)+list(b)) == b +regs = lambda e: e[1:3] if e[0] == 'add' else e[1:2] +def apply(e, M): + t = ix[e[1]] + if e[0] == 'add': + s = ix[e[2]]; q = Q(e[3], e[4]) + for j, a in list(M[s].items()): + x = M[t].get(j, Q(0)) + q*a + if x: M[t][j] = x + else: M[t].pop(j, None) + else: + q = Q(e[2], e[3]); M[t] = {j: q*a for j, a in M[t].items()} +def rank(rows): + rows = [dict(r) for r in rows if r]; r = 0; piv = {} + for row in rows: + row = {k: x for k, x in row.items() if x} + for c, prow in piv.items(): + if c in row: + q = row[c] + for k, x in prow.items(): + y = row.get(k, Q(0)) - q*x + if y: row[k] = y + else: row.pop(k, None) + if row: + c = min(row); q = row[c]; row = {k: x/q for k, x in row.items()} + for c2, prow in piv.items(): + if c in prow: + q2 = prow[c] + for k, x in row.items(): + y = prow.get(k, Q(0)) - q2*x + if y: prow[k] = y + else: prow.pop(k, None) + piv[c] = row; r += 1 + return r +ntail = 34 +tail = [w['cleanup'][i][:-1]+[list(f)] for i, f in w.get('early_cleanup', [])][:ntail] +mainN = [e for e in w['A']+w['B'] if not v <= e[1] < 2*v] +M = [{i: Q(1)} for i in range(len(N))] +for e in mainN+tail: apply(e, M) +cur = {x: (w['ports'][x],) if x < v else basis(w.get('start_extra', {}).get(str(x), [])) for x in N} +for e in w['A']+w['B']+tail: + for x in regs(e): + if x in cur: cur[x] = basis(e[-1]) +enter = set(map(int, w.get('start_extra', {}))) +src = set(range(v)); prot = set(ix[x] for x in N if x < v or x in enter); srci = set(ix[x] for x in src) +mods = load_json('pr531', 'PACKET-PROGRAMS.json.gz'); proto = load_json('pr531', 'PROTOTYPE.json.gz') +def inverse(e): + e=list(e) + if e[0]=='add': e[3]=-e[3] + else: e[2],e[3]=e[3],e[2] + return e +MI = [{i: Q(1)} for i in range(len(N))] +for e in reversed(mainN+tail): apply(inverse(e), MI) +def nullsp(A, nc): + # A: list of dict rows over 0..nc-1 ; return basis of right kernel as list of dict columns + piv = {} + for row in A: + row = {k: x for k, x in row.items() if x} + for c, prow in piv.items(): + if c in row: + q = row[c] + for k, x in prow.items(): + y = row.get(k, Q(0)) - q*x + if y: row[k] = y + else: row.pop(k, None) + if row: + c = min(row); q = row[c]; row = {k: x/q for k, x in row.items()} + for c2, prow in piv.items(): + if c in prow: + q2 = prow[c] + for k, x in row.items(): + y = prow.get(k, Q(0)) - q2*x + if y: prow[k] = y + else: prow.pop(k, None) + piv[c] = row + free = [j for j in range(nc) if j not in piv] + out = [] + for f in free: + col = {f: Q(1)} + for c, prow in piv.items(): + if prow.get(f): col[c] = -prow[f] + out.append(col) + return out +tot = dict(Q=0, Lfix=0, Lgauge=0, LK=0) +out = [] +for b, mod in enumerate(mods): + ss = mod['receipt']['source_lines']; F = basis([proto['binary_ports'][s] for s in ss]) + I = [ix[x] for x in N if inside(cur[x], F)] + rp = rank([{j: a for j, a in M[i].items() if j in prot} for i in I]) + rs = rank([{j: a for j, a in M[i].items() if j in srci} for i in I]) + regsI = sorted(N[i] for i in I) + pl = sorted(prot) + Ct = [{k: M[I[k]][j] for k in range(len(I)) if M[I[k]].get(j)} for j in pl] # C^T rows -> left kernel of C + Lb = nullsp(Ct, len(I)) + Ab = [{k: MI[j].get(I[k]) for k in range(len(I)) if MI[j].get(I[k])} for j in pl] + Kb = nullsp([r for r in Ab if r], len(I)) + LK = rank([{c: sum((l.get(k, Q(0))*kc.get(k, Q(0)) for k in range(len(I))), Q(0)) for c, kc in enumerate(Kb)} for l in Lb]) if Lb and Kb else 0 + tot['LK'] += LK + LKb = LK + # near-miss registers: end frame inside F + one extra dim + near = sorted(x for x in N if not inside(cur[x], F) and len(basis(list(cur[x])+list(F))) == len(F)+1) + tot['Q'] += len(I); tot['Lfix'] += len(I)-rp; tot['Lgauge'] += len(I)-rs + out.append(dict(LK=LKb, block=b, rankF=len(F), Q=len(I), rank_prot=rp, rank_src=rs, Lfix=len(I)-rp, Lgauge=len(I)-rs, regs=regsI, near=near)) + if 0: print(b, 'dimL', len(Lb), 'dimK', len(Kb), 'rankLK', LK, 'rkF', len(F), '|Q|', len(I), 'rk prot', rp, 'rk src', rs, 'Q:', regsI, 'near(+1 dim):', near, flush=True) + +sI = sorted(o['Q'] for o in out) +check('G1 14 blocks: 6 with |I| = 6, 8 with |I| = 8; sum |I| = 100 (K492 factory)', sI == [6]*6 + [8]*8 and tot['Q'] == 100, sI) +check('G1 rank of the 4 pinned totals: rank Clean[I_b] = rank M[I_b, protected] = 4 in all 14 blocks', all(o['rank_src'] == 4 and o['rank_prot'] == 4 and o['rankF'] == 4 for o in out)) +check('G1 gauge-free bound N_cold <= sum_b(|I_b| - 4) = 44 (fixed-content value Lfix = gauge value = 44)', tot['Lgauge'] == 44 and tot['Lfix'] == 44 and sum(o['Q'] - 4 for o in out) == 44, tot) +check('G2 attained cold units (rank LK) = 44 = the bound: 2 in each short block, 4 in each |I| = 8 block', tot['LK'] == 44 and sorted(o['LK'] for o in out) == [2]*6 + [4]*8, [o['LK'] for o in out]) +finish() diff --git a/research/format-limits-2/s3-4-census-gauges/evidence/C1/STEPS.json b/research/format-limits-2/s3-4-census-gauges/evidence/C1/STEPS.json new file mode 100644 index 0000000000..9ce1efc0a1 --- /dev/null +++ b/research/format-limits-2/s3-4-census-gauges/evidence/C1/STEPS.json @@ -0,0 +1,37 @@ +[ + { + "step": "pivot-swap", + "exit_code": 0, + "seconds": 7.934 + }, + { + "step": "cold44-exact", + "exit_code": 0, + "seconds": 1.709 + }, + { + "step": "layer-end-controls", + "exit_code": 0, + "seconds": 45.082 + }, + { + "step": "native", + "exit_code": 0, + "seconds": 1.139 + }, + { + "step": "ledgers", + "exit_code": 0, + "seconds": 0.772 + }, + { + "step": "local-replay", + "exit_code": 0, + "seconds": 4.834 + }, + { + "step": "wrappers", + "exit_code": 0, + "seconds": 2.201 + } +] diff --git a/research/format-limits-2/s3-4-census-gauges/evidence/C1/ledger_by_step.csv b/research/format-limits-2/s3-4-census-gauges/evidence/C1/ledger_by_step.csv new file mode 100644 index 0000000000..bf20ff2051 --- /dev/null +++ b/research/format-limits-2/s3-4-census-gauges/evidence/C1/ledger_by_step.csv @@ -0,0 +1,6 @@ +step,helpers,climb_mass_per_call,narrow_mass_per_call,share_of_global_narrow_mass,narrow_mass_per_helper +S1_block_scratch,221,1766,6749.5,0.3155,30.54 +S3_packet_copy,156,1263,4429.7,0.2071,28.40 +S4_slot_copy,112,720,2753.5,0.1287,24.58 +S1_block_scratch_centre,3,51,152.3,0.0071,50.76 +XY_registers,0,,6636.8,0.3102, diff --git a/research/format-limits-2/s3-4-census-gauges/evidence/C1/ledger_helpers.csv b/research/format-limits-2/s3-4-census-gauges/evidence/C1/ledger_helpers.csv new file mode 100644 index 0000000000..fca828d2b8 --- /dev/null +++ b/research/format-limits-2/s3-4-census-gauges/evidence/C1/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/format-limits-2/s3-4-census-gauges/evidence/C1/ledgers.log b/research/format-limits-2/s3-4-census-gauges/evidence/C1/ledgers.log new file mode 100644 index 0000000000..934a7fb78c --- /dev/null +++ b/research/format-limits-2/s3-4-census-gauges/evidence/C1/ledgers.log @@ -0,0 +1,2 @@ +PASS emitted forward 25250 events +PASS emitted backward 25250 events diff --git a/research/format-limits-2/s3-4-census-gauges/evidence/G2/rep1.log b/research/format-limits-2/s3-4-census-gauges/evidence/G2/rep1.log new file mode 100644 index 0000000000..fd0242bdb4 --- /dev/null +++ b/research/format-limits-2/s3-4-census-gauges/evidence/G2/rep1.log @@ -0,0 +1,18 @@ +RUN shadow-early +PASS shadow-early +RUN shadow-prefix +PASS shadow-prefix +RUN gauge-forward +PASS gauge-forward +RUN port0 +PASS port0 +RUN port1 +PASS port1 +RUN port2 +PASS port2 +RUN port3 +PASS port3 +RUN cold44-exact +PASS cold44-exact +PASS exact frozen scalar word cards/B58/work/rep1/cold44/FULL-WORD.json.gz +nice -n19 timeout 1500 venv/bin/python3 4.62s user 0.22s system 81% cpu 5.901 total diff --git a/research/format-limits-2/s3-4-census-gauges/inputs/derived/ck-CANONICAL-WORD.json.gz b/research/format-limits-2/s3-4-census-gauges/inputs/derived/ck-CANONICAL-WORD.json.gz new file mode 100644 index 0000000000..58cd1be8f2 Binary files /dev/null and b/research/format-limits-2/s3-4-census-gauges/inputs/derived/ck-CANONICAL-WORD.json.gz differ diff --git a/research/format-limits-2/s3-4-census-gauges/inputs/derived/g44-CANONICAL-WORD.json.gz b/research/format-limits-2/s3-4-census-gauges/inputs/derived/g44-CANONICAL-WORD.json.gz new file mode 100644 index 0000000000..45246b3638 Binary files /dev/null and b/research/format-limits-2/s3-4-census-gauges/inputs/derived/g44-CANONICAL-WORD.json.gz differ diff --git a/research/format-limits-2/s3-4-census-gauges/inputs/derived/g44-TAGS.json b/research/format-limits-2/s3-4-census-gauges/inputs/derived/g44-TAGS.json new file mode 100644 index 0000000000..00f7757e2f --- /dev/null +++ b/research/format-limits-2/s3-4-census-gauges/inputs/derived/g44-TAGS.json @@ -0,0 +1 @@ +{"240": [["S1_block_scratch", "(0, 1, 2, 3)", "8"], 0, 240], "241": [["S1_block_scratch", "(0, 1, 2, 3)", "9"], 1, 241], "242": [["S1_block_scratch", "(0, 1, 2, 3)", "10"], 2, 242], "243": [["S1_block_scratch", "(0, 1, 2, 3)", "11"], 3, 243], "244": [["S1_block_scratch", "(0, 1, 2, 3)", "12"], 4, 244], "245": [["S1_block_scratch", "(0, 1, 2, 3)", "13"], 5, 245], "246": [["S1_block_scratch", "(0, 1, 2, 3)", "14"], 6, 246], "247": [["S1_block_scratch", "(0, 1, 2, 3)", "15"], 7, 247], "248": [["S1_block_scratch", "(0, 1, 2, 3)", "16"], 8, 248], "249": [["S1_block_scratch", "(0, 1, 2, 3)", "17"], 9, 249], "250": [["S1_block_scratch", "(0, 1, 2, 3)", "18"], 10, 250], "251": [["S1_block_scratch", "(0, 1, 2, 3)", "19"], 11, 251], "252": [["S1_block_scratch", "(0, 1, 2, 3)", "20"], 12, 252], "253": [["S1_block_scratch", "(0, 1, 2, 3)", "21"], 13, 253], "254": [["S1_block_scratch", "(0, 1, 2, 3)", "22"], 14, 254], "255": [["S1_block_scratch", "(0, 1, 2, 3)", "23"], 15, 255], "256": [["S1_block_scratch", "(0, 1, 4, 5)", "8"], 16, 256], "257": [["S1_block_scratch", "(0, 1, 4, 5)", "9"], 17, 257], "258": [["S1_block_scratch", "(0, 1, 4, 5)", "10"], 18, 258], "259": [["S1_block_scratch", "(0, 1, 4, 5)", "11"], 19, 259], "260": [["S1_block_scratch", "(0, 1, 4, 5)", "12"], 20, 260], "261": [["S1_block_scratch", "(0, 1, 4, 5)", "13"], 21, 261], "262": [["S1_block_scratch", "(0, 1, 4, 5)", "14"], 22, 262], "263": [["S1_block_scratch", "(0, 1, 4, 5)", "15"], 23, 263], "264": [["S1_block_scratch", "(0, 1, 4, 5)", "16"], 24, 264], "265": [["S1_block_scratch", "(0, 1, 4, 5)", "17"], 25, 265], "266": [["S1_block_scratch", "(0, 1, 4, 5)", "18"], 26, 266], "267": [["S1_block_scratch", "(0, 1, 4, 5)", "19"], 27, 267], "268": [["S1_block_scratch", "(0, 1, 4, 5)", "20"], 28, 268], "269": [["S1_block_scratch", "(0, 1, 4, 5)", "21"], 29, 269], "270": [["S1_block_scratch", "(0, 1, 4, 5)", "22"], 30, 270], "271": [["S1_block_scratch", "(0, 1, 4, 5)", "23"], 31, 271], "272": [["S1_block_scratch", "(0, 1, 6, 7)", "8"], 32, 272], "273": [["S1_block_scratch", "(0, 1, 6, 7)", "9"], 33, 273], "274": [["S1_block_scratch", "(0, 1, 6, 7)", "10"], 34, 274], "275": [["S1_block_scratch", "(0, 1, 6, 7)", "11"], 35, 275], "276": [["S1_block_scratch", "(0, 1, 6, 7)", "12"], 36, 276], "277": [["S1_block_scratch", "(0, 1, 6, 7)", "13"], 37, 277], "278": [["S1_block_scratch", "(0, 1, 6, 7)", "14"], 38, 278], "279": [["S1_block_scratch", "(0, 1, 6, 7)", "15"], 39, 279], "280": [["S1_block_scratch", "(0, 1, 6, 7)", "16"], 40, 280], "281": [["S1_block_scratch", "(0, 1, 6, 7)", "17"], 41, 281], "282": [["S1_block_scratch", "(0, 1, 6, 7)", "18"], 42, 282], "283": [["S1_block_scratch", "(0, 1, 6, 7)", "19"], 43, 283], "284": [["S1_block_scratch", "(0, 1, 6, 7)", "20"], 44, 284], "285": [["S1_block_scratch", "(0, 1, 6, 7)", "21"], 45, 285], "286": [["S1_block_scratch", "(0, 1, 6, 7)", "22"], 46, 286], "287": [["S1_block_scratch", "(0, 1, 6, 7)", "23"], 47, 287], "288": [["S1_block_scratch", "(0, 2, 4, 6)", "8"], 48, 288], "289": [["S1_block_scratch", "(0, 2, 4, 6)", "9"], 49, 289], "290": [["S1_block_scratch", "(0, 2, 4, 6)", "10"], 50, 290], "291": [["S1_block_scratch", "(0, 2, 4, 6)", "11"], 51, 291], "292": [["S1_block_scratch", "(0, 2, 4, 6)", "12"], 52, 292], "293": [["S1_block_scratch", "(0, 2, 4, 6)", "13"], 53, 293], "294": [["S1_block_scratch", "(0, 2, 4, 6)", "14"], 54, 294], "295": [["S1_block_scratch", "(0, 2, 4, 6)", "15"], 55, 295], "296": [["S1_block_scratch", "(0, 2, 4, 6)", "16"], 56, 296], "297": [["S1_block_scratch", "(0, 2, 4, 6)", "17"], 57, 297], "298": [["S1_block_scratch", "(0, 2, 4, 6)", "18"], 58, 298], "299": [["S1_block_scratch", "(0, 2, 4, 6)", "19"], 59, 299], "300": [["S1_block_scratch", "(0, 2, 4, 6)", "20"], 60, 300], "301": [["S1_block_scratch", "(0, 2, 4, 6)", "21"], 61, 301], "302": [["S1_block_scratch", "(0, 2, 4, 6)", "22"], 62, 302], "303": [["S1_block_scratch", "(0, 2, 4, 6)", "23"], 63, 303], "304": [["S1_block_scratch", "(0, 2, 5, 7)", "8"], 64, 304], "305": [["S1_block_scratch", "(0, 2, 5, 7)", "9"], 65, 305], "306": [["S1_block_scratch", "(0, 2, 5, 7)", "10"], 66, 306], "307": [["S1_block_scratch", "(0, 2, 5, 7)", "11"], 67, 307], "308": [["S1_block_scratch", "(0, 2, 5, 7)", "12"], 68, 308], "309": [["S1_block_scratch", "(0, 2, 5, 7)", "13"], 69, 309], "310": [["S1_block_scratch", "(0, 2, 5, 7)", "14"], 70, 310], "311": [["S1_block_scratch", "(0, 2, 5, 7)", "15"], 71, 311], "312": [["S1_block_scratch", "(0, 2, 5, 7)", "16"], 72, 312], "313": [["S1_block_scratch", "(0, 2, 5, 7)", "17"], 73, 313], "314": [["S1_block_scratch", "(0, 2, 5, 7)", "18"], 74, 314], "315": [["S1_block_scratch", "(0, 2, 5, 7)", "19"], 75, 315], "316": [["S1_block_scratch", "(0, 2, 5, 7)", "20"], 76, 316], "317": [["S1_block_scratch", "(0, 2, 5, 7)", "21"], 77, 317], "318": [["S1_block_scratch", "(0, 2, 5, 7)", "22"], 78, 318], "319": [["S1_block_scratch", "(0, 2, 5, 7)", "23"], 79, 319], "320": [["S1_block_scratch", "(0, 3, 4, 7)", "8"], 80, 320], "321": [["S1_block_scratch", "(0, 3, 4, 7)", "9"], 81, 321], "322": [["S1_block_scratch", "(0, 3, 4, 7)", "10"], 82, 322], "323": [["S1_block_scratch", "(0, 3, 4, 7)", "11"], 83, 323], "324": [["S1_block_scratch", "(0, 3, 4, 7)", "12"], 84, 324], "325": [["S1_block_scratch", "(0, 3, 4, 7)", "13"], 85, 325], "326": [["S1_block_scratch", "(0, 3, 4, 7)", "14"], 86, 326], "327": [["S1_block_scratch", "(0, 3, 4, 7)", "15"], 87, 327], "328": [["S1_block_scratch", "(0, 3, 4, 7)", "16"], 88, 328], "329": [["S1_block_scratch", "(0, 3, 4, 7)", "17"], 89, 329], "330": [["S1_block_scratch", "(0, 3, 4, 7)", "18"], 90, 330], "331": [["S1_block_scratch", "(0, 3, 4, 7)", "19"], 91, 331], "332": [["S1_block_scratch", "(0, 3, 4, 7)", "20"], 92, 332], "333": [["S1_block_scratch", "(0, 3, 4, 7)", "21"], 93, 333], "334": [["S1_block_scratch", "(0, 3, 4, 7)", "22"], 94, 334], "335": [["S1_block_scratch", "(0, 3, 4, 7)", "23"], 95, 335], "336": [["S1_block_scratch", "(0, 3, 5, 6)", "8"], 96, 336], "337": [["S1_block_scratch", "(0, 3, 5, 6)", "9"], 97, 337], "338": [["S1_block_scratch", "(0, 3, 5, 6)", "10"], 98, 338], "339": [["S1_block_scratch", "(0, 3, 5, 6)", "11"], 99, 339], "340": [["S1_block_scratch", "(0, 3, 5, 6)", "12"], 100, 340], "341": [["S1_block_scratch", "(0, 3, 5, 6)", "13"], 101, 341], "342": [["S1_block_scratch", "(0, 3, 5, 6)", "14"], 102, 342], "343": [["S1_block_scratch", "(0, 3, 5, 6)", "15"], 103, 343], "344": [["S1_block_scratch", "(0, 3, 5, 6)", "16"], 104, 344], "345": [["S1_block_scratch", "(0, 3, 5, 6)", "17"], 105, 345], "346": [["S1_block_scratch", "(0, 3, 5, 6)", "18"], 106, 346], "347": [["S1_block_scratch", "(0, 3, 5, 6)", "19"], 107, 347], "348": [["S1_block_scratch", "(0, 3, 5, 6)", "20"], 108, 348], "349": [["S1_block_scratch", "(0, 3, 5, 6)", "21"], 109, 349], "350": [["S1_block_scratch", "(0, 3, 5, 6)", "22"], 110, 350], "351": [["S1_block_scratch", "(0, 3, 5, 6)", "23"], 111, 351], "352": [["S1_block_scratch", "(1, 2, 4, 7)", "8"], 112, 352], "353": [["S1_block_scratch", "(1, 2, 4, 7)", "9"], 113, 353], "354": [["S1_block_scratch", "(1, 2, 4, 7)", "10"], 114, 354], "355": [["S1_block_scratch", "(1, 2, 4, 7)", "11"], 115, 355], "356": [["S1_block_scratch", "(1, 2, 4, 7)", "12"], 116, 356], "357": [["S1_block_scratch", "(1, 2, 4, 7)", "13"], 117, 357], "358": [["S1_block_scratch", "(1, 2, 4, 7)", "14"], 118, 358], "359": [["S1_block_scratch", "(1, 2, 4, 7)", "15"], 119, 359], "360": [["S1_block_scratch", "(1, 2, 4, 7)", "16"], 120, 360], "361": [["S1_block_scratch", "(1, 2, 4, 7)", "17"], 121, 361], "362": [["S1_block_scratch", "(1, 2, 4, 7)", "18"], 122, 362], "363": [["S1_block_scratch", "(1, 2, 4, 7)", "19"], 123, 363], "364": [["S1_block_scratch", "(1, 2, 4, 7)", "20"], 124, 364], "365": [["S1_block_scratch", "(1, 2, 4, 7)", "21"], 125, 365], "366": [["S1_block_scratch", "(1, 2, 4, 7)", "22"], 126, 366], "367": [["S1_block_scratch", "(1, 2, 4, 7)", "23"], 127, 367], "368": [["S1_block_scratch", "(1, 2, 5, 6)", "8"], 128, 368], "369": [["S1_block_scratch", "(1, 2, 5, 6)", "9"], 129, 369], "370": [["S1_block_scratch", "(1, 2, 5, 6)", "10"], 130, 370], "371": [["S1_block_scratch", "(1, 2, 5, 6)", "11"], 131, 371], "372": [["S1_block_scratch", "(1, 2, 5, 6)", "12"], 132, 372], "373": [["S1_block_scratch", "(1, 2, 5, 6)", "13"], 133, 373], "374": [["S1_block_scratch", "(1, 2, 5, 6)", "14"], 134, 374], "375": [["S1_block_scratch", "(1, 2, 5, 6)", "15"], 135, 375], "376": [["S1_block_scratch", "(1, 2, 5, 6)", "16"], 136, 376], "377": [["S1_block_scratch", "(1, 2, 5, 6)", "17"], 137, 377], "378": [["S1_block_scratch", "(1, 2, 5, 6)", "18"], 138, 378], "379": [["S1_block_scratch", "(1, 2, 5, 6)", "19"], 139, 379], "380": [["S1_block_scratch", "(1, 2, 5, 6)", "20"], 140, 380], "381": [["S1_block_scratch", "(1, 2, 5, 6)", "21"], 141, 381], "382": [["S1_block_scratch", "(1, 2, 5, 6)", "22"], 142, 382], "383": [["S1_block_scratch", "(1, 2, 5, 6)", "23"], 143, 383], "384": [["S1_block_scratch", "(1, 3, 4, 6)", "8"], 144, 384], "385": [["S1_block_scratch", "(1, 3, 4, 6)", "9"], 145, 385], "386": [["S1_block_scratch", "(1, 3, 4, 6)", "10"], 146, 386], "387": [["S1_block_scratch", "(1, 3, 4, 6)", "11"], 147, 387], "388": [["S1_block_scratch", "(1, 3, 4, 6)", "12"], 148, 388], "389": [["S1_block_scratch", "(1, 3, 4, 6)", "13"], 149, 389], "390": [["S1_block_scratch", "(1, 3, 4, 6)", "14"], 150, 390], "391": [["S1_block_scratch", "(1, 3, 4, 6)", "15"], 151, 391], "392": [["S1_block_scratch", "(1, 3, 4, 6)", "16"], 152, 392], "393": [["S1_block_scratch", "(1, 3, 4, 6)", "17"], 153, 393], "394": [["S1_block_scratch", "(1, 3, 4, 6)", "18"], 154, 394], "395": [["S1_block_scratch", "(1, 3, 4, 6)", "19"], 155, 395], "396": [["S1_block_scratch", "(1, 3, 4, 6)", "20"], 156, 396], "397": [["S1_block_scratch", "(1, 3, 4, 6)", "21"], 157, 397], "398": [["S1_block_scratch", "(1, 3, 4, 6)", "22"], 158, 398], "399": [["S1_block_scratch", "(1, 3, 4, 6)", "23"], 159, 399], "400": [["S1_block_scratch", "(1, 3, 5, 7)", "8"], 160, 400], "401": [["S1_block_scratch", "(1, 3, 5, 7)", "9"], 161, 401], "402": [["S1_block_scratch", "(1, 3, 5, 7)", "10"], 162, 402], "403": [["S1_block_scratch", "(1, 3, 5, 7)", "11"], 163, 403], "404": [["S1_block_scratch", "(1, 3, 5, 7)", "12"], 164, 404], "405": [["S1_block_scratch", "(1, 3, 5, 7)", "13"], 165, 405], "406": [["S1_block_scratch", "(1, 3, 5, 7)", "14"], 166, 406], "407": [["S1_block_scratch", "(1, 3, 5, 7)", "15"], 167, 407], "408": [["S1_block_scratch", "(1, 3, 5, 7)", "16"], 168, 408], "409": [["S1_block_scratch", "(1, 3, 5, 7)", "17"], 169, 409], "410": [["S1_block_scratch", "(1, 3, 5, 7)", "18"], 170, 410], "411": [["S1_block_scratch", "(1, 3, 5, 7)", "19"], 171, 411], "412": [["S1_block_scratch", "(1, 3, 5, 7)", "20"], 172, 412], "413": [["S1_block_scratch", "(1, 3, 5, 7)", "21"], 173, 413], "414": [["S1_block_scratch", "(1, 3, 5, 7)", "22"], 174, 414], "415": [["S1_block_scratch", "(1, 3, 5, 7)", "23"], 175, 415], "416": [["S1_block_scratch", "(2, 3, 4, 5)", "8"], 176, 416], "417": [["S1_block_scratch", "(2, 3, 4, 5)", "9"], 177, 417], "418": [["S1_block_scratch", "(2, 3, 4, 5)", "10"], 178, 418], "419": [["S1_block_scratch", "(2, 3, 4, 5)", "11"], 179, 419], "420": [["S1_block_scratch", "(2, 3, 4, 5)", "12"], 180, 420], "421": [["S1_block_scratch", "(2, 3, 4, 5)", "13"], 181, 421], "422": [["S1_block_scratch", "(2, 3, 4, 5)", "14"], 182, 422], "423": [["S1_block_scratch", "(2, 3, 4, 5)", "15"], 183, 423], "424": [["S1_block_scratch", "(2, 3, 4, 5)", "16"], 184, 424], "425": [["S1_block_scratch", "(2, 3, 4, 5)", "17"], 185, 425], "426": [["S1_block_scratch", "(2, 3, 4, 5)", "18"], 186, 426], "427": [["S1_block_scratch", "(2, 3, 4, 5)", "19"], 187, 427], "428": [["S1_block_scratch", "(2, 3, 4, 5)", "20"], 188, 428], "429": [["S1_block_scratch", "(2, 3, 4, 5)", "21"], 189, 429], "430": [["S1_block_scratch", "(2, 3, 4, 5)", "22"], 190, 430], "431": [["S1_block_scratch", "(2, 3, 4, 5)", "23"], 191, 431], "432": [["S1_block_scratch", "(2, 3, 6, 7)", "8"], 192, 432], "433": [["S1_block_scratch", "(2, 3, 6, 7)", "9"], 193, 433], "434": [["S1_block_scratch", "(2, 3, 6, 7)", "10"], 194, 434], "435": [["S1_block_scratch", "(2, 3, 6, 7)", "11"], 195, 435], "436": [["S1_block_scratch", "(2, 3, 6, 7)", "12"], 196, 436], "437": [["S1_block_scratch", "(2, 3, 6, 7)", "13"], 197, 437], "438": [["S1_block_scratch", "(2, 3, 6, 7)", "14"], 198, 438], "439": [["S1_block_scratch", "(2, 3, 6, 7)", "15"], 199, 439], "440": [["S1_block_scratch", "(2, 3, 6, 7)", "16"], 200, 440], "441": [["S1_block_scratch", "(2, 3, 6, 7)", "17"], 201, 441], "442": [["S1_block_scratch", "(2, 3, 6, 7)", "18"], 202, 442], "443": [["S1_block_scratch", "(2, 3, 6, 7)", "19"], 203, 443], "444": [["S1_block_scratch", "(2, 3, 6, 7)", "20"], 204, 444], "445": [["S1_block_scratch", "(2, 3, 6, 7)", "21"], 205, 445], "446": [["S1_block_scratch", "(2, 3, 6, 7)", "22"], 206, 446], "447": [["S1_block_scratch", "(2, 3, 6, 7)", "23"], 207, 447], "448": [["S1_block_scratch", "(4, 5, 6, 7)", "8"], 208, 448], "449": [["S1_block_scratch", "(4, 5, 6, 7)", "9"], 209, 449], "450": [["S1_block_scratch", "(4, 5, 6, 7)", "10"], 210, 450], "451": [["S1_block_scratch", "(4, 5, 6, 7)", "11"], 211, 451], "452": [["S1_block_scratch", "(4, 5, 6, 7)", "12"], 212, 452], "453": [["S1_block_scratch", "(4, 5, 6, 7)", "13"], 213, 453], "454": [["S1_block_scratch", "(4, 5, 6, 7)", "14"], 214, 454], "455": [["S1_block_scratch", "(4, 5, 6, 7)", "15"], 215, 455], "456": [["S1_block_scratch", "(4, 5, 6, 7)", "16"], 216, 456], "457": [["S1_block_scratch", "(4, 5, 6, 7)", "17"], 217, 457], "458": [["S1_block_scratch", "(4, 5, 6, 7)", "18"], 218, 458], "459": [["S1_block_scratch", "(4, 5, 6, 7)", "19"], 219, 459], "460": [["S1_block_scratch", "(4, 5, 6, 7)", "20"], 220, 460], "461": [["S1_block_scratch", "(4, 5, 6, 7)", "21"], 221, 461], "462": [["S1_block_scratch", "(4, 5, 6, 7)", "22"], 222, 462], "463": [["S1_block_scratch", "(4, 5, 6, 7)", "23"], 223, 463], "464": [["S3_packet_copy", "(0, 1, 2, 3)", "((0, 1), 1)"], 224, 465], "465": [["S3_packet_copy", "(0, 1, 2, 3)", "((0, 2), -1)"], 225, 466], "466": [["S3_packet_copy", "(0, 1, 2, 3)", "((0, 2), 1)"], 226, 467], "467": [["S3_packet_copy", "(0, 1, 2, 3)", "((0, 3), -1)"], 227, 468], "468": [["S3_packet_copy", "(0, 1, 2, 3)", "((0, 3), 1)"], 228, 469], "469": [["S3_packet_copy", "(0, 1, 2, 3)", "((1, 2), -1)"], 229, 470], "470": [["S3_packet_copy", "(0, 1, 2, 3)", "((1, 2), 1)"], 230, 471], "471": [["S3_packet_copy", "(0, 1, 2, 3)", "((1, 3), -1)"], 231, 472], "472": [["S3_packet_copy", "(0, 1, 2, 3)", "((1, 3), 1)"], 232, 473], "473": [["S3_packet_copy", "(0, 1, 2, 3)", "((2, 3), 1)"], 233, 475], "474": [["S3_packet_copy", "(0, 1, 4, 5)", "((0, 1), 1)"], 234, 477], "475": [["S3_packet_copy", "(0, 1, 4, 5)", "((0, 4), -1)"], 235, 478], "476": [["S3_packet_copy", "(0, 1, 4, 5)", "((0, 4), 1)"], 236, 479], "477": [["S3_packet_copy", "(0, 1, 4, 5)", "((0, 5), -1)"], 237, 480], "478": [["S3_packet_copy", "(0, 1, 4, 5)", "((0, 5), 1)"], 238, 481], "479": [["S3_packet_copy", "(0, 1, 4, 5)", "((1, 4), -1)"], 239, 482], "480": [["S3_packet_copy", "(0, 1, 4, 5)", "((1, 4), 1)"], 240, 483], "481": [["S3_packet_copy", "(0, 1, 4, 5)", "((1, 5), -1)"], 241, 484], "482": [["S3_packet_copy", "(0, 1, 4, 5)", "((1, 5), 1)"], 242, 485], "483": [["S3_packet_copy", "(0, 1, 4, 5)", "((4, 5), 1)"], 243, 487], "484": [["S3_packet_copy", "(0, 1, 6, 7)", "((0, 1), 1)"], 244, 489], "485": [["S3_packet_copy", "(0, 1, 6, 7)", "((0, 6), -1)"], 245, 490], "486": [["S3_packet_copy", "(0, 1, 6, 7)", "((0, 6), 1)"], 246, 491], "487": [["S3_packet_copy", "(0, 1, 6, 7)", "((0, 7), -1)"], 247, 492], "488": [["S3_packet_copy", "(0, 1, 6, 7)", "((0, 7), 1)"], 248, 493], "489": [["S3_packet_copy", "(0, 1, 6, 7)", "((1, 6), -1)"], 249, 494], "490": [["S3_packet_copy", "(0, 1, 6, 7)", "((1, 6), 1)"], 250, 495], "491": [["S3_packet_copy", "(0, 1, 6, 7)", "((1, 7), -1)"], 251, 496], "492": [["S3_packet_copy", "(0, 1, 6, 7)", "((1, 7), 1)"], 252, 497], "493": [["S3_packet_copy", "(0, 1, 6, 7)", "((6, 7), 1)"], 253, 499], "494": [["S3_packet_copy", "(0, 2, 4, 6)", "((0, 2), -1)"], 254, 500], "495": [["S3_packet_copy", "(0, 2, 4, 6)", "((0, 2), 1)"], 255, 501], "496": [["S3_packet_copy", "(0, 2, 4, 6)", "((0, 4), -1)"], 256, 502], "497": [["S3_packet_copy", "(0, 2, 4, 6)", "((0, 4), 1)"], 257, 503], "498": [["S3_packet_copy", "(0, 2, 4, 6)", "((0, 6), -1)"], 258, 504], "499": [["S3_packet_copy", "(0, 2, 4, 6)", "((0, 6), 1)"], 259, 505], "500": [["S3_packet_copy", "(0, 2, 4, 6)", "((2, 4), -1)"], 260, 506], "501": [["S3_packet_copy", "(0, 2, 4, 6)", "((2, 4), 1)"], 261, 507], "502": [["S3_packet_copy", "(0, 2, 4, 6)", "((2, 6), -1)"], 262, 508], "503": [["S3_packet_copy", "(0, 2, 4, 6)", "((2, 6), 1)"], 263, 509], "504": [["S3_packet_copy", "(0, 2, 4, 6)", "((4, 6), -1)"], 264, 510], "505": [["S3_packet_copy", "(0, 2, 4, 6)", "((4, 6), 1)"], 265, 511], "506": [["S3_packet_copy", "(0, 2, 5, 7)", "((0, 2), -1)"], 266, 512], "507": [["S3_packet_copy", "(0, 2, 5, 7)", "((0, 2), 1)"], 267, 513], "508": [["S3_packet_copy", "(0, 2, 5, 7)", "((0, 5), -1)"], 268, 514], "509": [["S3_packet_copy", "(0, 2, 5, 7)", "((0, 5), 1)"], 269, 515], "510": [["S3_packet_copy", "(0, 2, 5, 7)", "((0, 7), -1)"], 270, 516], "511": [["S3_packet_copy", "(0, 2, 5, 7)", "((0, 7), 1)"], 271, 517], "512": [["S3_packet_copy", "(0, 2, 5, 7)", "((2, 5), -1)"], 272, 518], "513": [["S3_packet_copy", "(0, 2, 5, 7)", "((2, 5), 1)"], 273, 519], "514": [["S3_packet_copy", "(0, 2, 5, 7)", "((2, 7), -1)"], 274, 520], "515": [["S3_packet_copy", "(0, 2, 5, 7)", "((2, 7), 1)"], 275, 521], "516": [["S3_packet_copy", "(0, 2, 5, 7)", "((5, 7), -1)"], 276, 522], "517": [["S3_packet_copy", "(0, 2, 5, 7)", "((5, 7), 1)"], 277, 523], "518": [["S3_packet_copy", "(0, 3, 4, 7)", "((0, 3), -1)"], 278, 524], "519": [["S3_packet_copy", "(0, 3, 4, 7)", "((0, 3), 1)"], 279, 525], "520": [["S3_packet_copy", "(0, 3, 4, 7)", "((0, 4), -1)"], 280, 526], "521": [["S3_packet_copy", "(0, 3, 4, 7)", "((0, 4), 1)"], 281, 527], "522": [["S3_packet_copy", "(0, 3, 4, 7)", "((0, 7), -1)"], 282, 528], "523": [["S3_packet_copy", "(0, 3, 4, 7)", "((0, 7), 1)"], 283, 529], "524": [["S3_packet_copy", "(0, 3, 4, 7)", "((3, 4), -1)"], 284, 530], "525": [["S3_packet_copy", "(0, 3, 4, 7)", "((3, 4), 1)"], 285, 531], "526": [["S3_packet_copy", "(0, 3, 4, 7)", "((3, 7), -1)"], 286, 532], "527": [["S3_packet_copy", "(0, 3, 4, 7)", "((3, 7), 1)"], 287, 533], "528": [["S3_packet_copy", "(0, 3, 4, 7)", "((4, 7), -1)"], 288, 534], "529": [["S3_packet_copy", "(0, 3, 4, 7)", "((4, 7), 1)"], 289, 535], "530": [["S3_packet_copy", "(0, 3, 5, 6)", "((0, 3), -1)"], 290, 536], "531": [["S3_packet_copy", "(0, 3, 5, 6)", "((0, 3), 1)"], 291, 537], "532": [["S3_packet_copy", "(0, 3, 5, 6)", "((0, 5), -1)"], 292, 538], "533": [["S3_packet_copy", "(0, 3, 5, 6)", "((0, 5), 1)"], 293, 539], "534": [["S3_packet_copy", "(0, 3, 5, 6)", "((0, 6), -1)"], 294, 540], "535": [["S3_packet_copy", "(0, 3, 5, 6)", "((0, 6), 1)"], 295, 541], "536": [["S3_packet_copy", "(0, 3, 5, 6)", "((3, 5), -1)"], 296, 542], "537": [["S3_packet_copy", "(0, 3, 5, 6)", "((3, 5), 1)"], 297, 543], "538": [["S3_packet_copy", "(0, 3, 5, 6)", "((3, 6), -1)"], 298, 544], "539": [["S3_packet_copy", "(0, 3, 5, 6)", "((3, 6), 1)"], 299, 545], "540": [["S3_packet_copy", "(0, 3, 5, 6)", "((5, 6), -1)"], 300, 546], "541": [["S3_packet_copy", "(0, 3, 5, 6)", "((5, 6), 1)"], 301, 547], "542": [["S3_packet_copy", "(1, 2, 4, 7)", "((1, 2), -1)"], 302, 548], "543": [["S3_packet_copy", "(1, 2, 4, 7)", "((1, 2), 1)"], 303, 549], "544": [["S3_packet_copy", "(1, 2, 4, 7)", "((1, 4), -1)"], 304, 550], "545": [["S3_packet_copy", "(1, 2, 4, 7)", "((1, 4), 1)"], 305, 551], "546": [["S3_packet_copy", "(1, 2, 4, 7)", "((1, 7), -1)"], 306, 552], "547": [["S3_packet_copy", "(1, 2, 4, 7)", "((1, 7), 1)"], 307, 553], "548": [["S3_packet_copy", "(1, 2, 4, 7)", "((2, 4), -1)"], 308, 554], "549": [["S3_packet_copy", "(1, 2, 4, 7)", "((2, 4), 1)"], 309, 555], "550": [["S3_packet_copy", "(1, 2, 4, 7)", "((2, 7), -1)"], 310, 556], "551": [["S3_packet_copy", "(1, 2, 4, 7)", "((2, 7), 1)"], 311, 557], "552": [["S3_packet_copy", "(1, 2, 4, 7)", "((4, 7), -1)"], 312, 558], "553": [["S3_packet_copy", "(1, 2, 4, 7)", "((4, 7), 1)"], 313, 559], "554": [["S3_packet_copy", "(1, 2, 5, 6)", "((1, 2), -1)"], 314, 560], "555": [["S3_packet_copy", "(1, 2, 5, 6)", "((1, 2), 1)"], 315, 561], "556": [["S3_packet_copy", "(1, 2, 5, 6)", "((1, 5), -1)"], 316, 562], "557": [["S3_packet_copy", "(1, 2, 5, 6)", "((1, 5), 1)"], 317, 563], "558": [["S3_packet_copy", "(1, 2, 5, 6)", "((1, 6), -1)"], 318, 564], "559": [["S3_packet_copy", "(1, 2, 5, 6)", "((1, 6), 1)"], 319, 565], "560": [["S3_packet_copy", "(1, 2, 5, 6)", "((2, 5), -1)"], 320, 566], "561": [["S3_packet_copy", "(1, 2, 5, 6)", "((2, 5), 1)"], 321, 567], "562": [["S3_packet_copy", "(1, 2, 5, 6)", "((2, 6), -1)"], 322, 568], "563": [["S3_packet_copy", "(1, 2, 5, 6)", "((2, 6), 1)"], 323, 569], "564": [["S3_packet_copy", "(1, 2, 5, 6)", "((5, 6), -1)"], 324, 570], "565": [["S3_packet_copy", "(1, 2, 5, 6)", "((5, 6), 1)"], 325, 571], "566": [["S3_packet_copy", "(1, 3, 4, 6)", "((1, 3), -1)"], 326, 572], "567": [["S3_packet_copy", "(1, 3, 4, 6)", "((1, 3), 1)"], 327, 573], "568": [["S3_packet_copy", "(1, 3, 4, 6)", "((1, 4), -1)"], 328, 574], "569": [["S3_packet_copy", "(1, 3, 4, 6)", "((1, 4), 1)"], 329, 575], "570": [["S3_packet_copy", "(1, 3, 4, 6)", "((1, 6), -1)"], 330, 576], "571": [["S3_packet_copy", "(1, 3, 4, 6)", "((1, 6), 1)"], 331, 577], "572": [["S3_packet_copy", "(1, 3, 4, 6)", "((3, 4), -1)"], 332, 578], "573": [["S3_packet_copy", "(1, 3, 4, 6)", "((3, 4), 1)"], 333, 579], "574": [["S3_packet_copy", "(1, 3, 4, 6)", "((3, 6), -1)"], 334, 580], "575": [["S3_packet_copy", "(1, 3, 4, 6)", "((3, 6), 1)"], 335, 581], "576": [["S3_packet_copy", "(1, 3, 4, 6)", "((4, 6), -1)"], 336, 582], "577": [["S3_packet_copy", "(1, 3, 4, 6)", "((4, 6), 1)"], 337, 583], "578": [["S3_packet_copy", "(1, 3, 5, 7)", "((1, 3), -1)"], 338, 584], "579": [["S3_packet_copy", "(1, 3, 5, 7)", "((1, 3), 1)"], 339, 585], "580": [["S3_packet_copy", "(1, 3, 5, 7)", "((1, 5), -1)"], 340, 586], "581": [["S3_packet_copy", "(1, 3, 5, 7)", "((1, 5), 1)"], 341, 587], "582": [["S3_packet_copy", "(1, 3, 5, 7)", "((1, 7), -1)"], 342, 588], "583": [["S3_packet_copy", "(1, 3, 5, 7)", "((1, 7), 1)"], 343, 589], "584": [["S3_packet_copy", "(1, 3, 5, 7)", "((3, 5), -1)"], 344, 590], "585": [["S3_packet_copy", "(1, 3, 5, 7)", "((3, 5), 1)"], 345, 591], "586": [["S3_packet_copy", "(1, 3, 5, 7)", "((3, 7), -1)"], 346, 592], "587": [["S3_packet_copy", "(1, 3, 5, 7)", "((3, 7), 1)"], 347, 593], "588": [["S3_packet_copy", "(1, 3, 5, 7)", "((5, 7), -1)"], 348, 594], "589": [["S3_packet_copy", "(1, 3, 5, 7)", "((5, 7), 1)"], 349, 595], "590": [["S3_packet_copy", "(2, 3, 4, 5)", "((2, 3), 1)"], 350, 597], "591": [["S3_packet_copy", "(2, 3, 4, 5)", "((2, 4), -1)"], 351, 598], "592": [["S3_packet_copy", "(2, 3, 4, 5)", "((2, 4), 1)"], 352, 599], "593": [["S3_packet_copy", "(2, 3, 4, 5)", "((2, 5), -1)"], 353, 600], "594": [["S3_packet_copy", "(2, 3, 4, 5)", "((2, 5), 1)"], 354, 601], "595": [["S3_packet_copy", "(2, 3, 4, 5)", "((3, 4), -1)"], 355, 602], "596": [["S3_packet_copy", "(2, 3, 4, 5)", "((3, 4), 1)"], 356, 603], "597": [["S3_packet_copy", "(2, 3, 4, 5)", "((3, 5), -1)"], 357, 604], "598": [["S3_packet_copy", "(2, 3, 4, 5)", "((3, 5), 1)"], 358, 605], "599": [["S3_packet_copy", "(2, 3, 4, 5)", "((4, 5), 1)"], 359, 607], "600": [["S3_packet_copy", "(2, 3, 6, 7)", "((2, 3), 1)"], 360, 609], "601": [["S3_packet_copy", "(2, 3, 6, 7)", "((2, 6), -1)"], 361, 610], "602": [["S3_packet_copy", "(2, 3, 6, 7)", "((2, 6), 1)"], 362, 611], "603": [["S3_packet_copy", "(2, 3, 6, 7)", "((2, 7), -1)"], 363, 612], "604": [["S3_packet_copy", "(2, 3, 6, 7)", "((2, 7), 1)"], 364, 613], "605": [["S3_packet_copy", "(2, 3, 6, 7)", "((3, 6), -1)"], 365, 614], "606": [["S3_packet_copy", "(2, 3, 6, 7)", "((3, 6), 1)"], 366, 615], "607": [["S3_packet_copy", "(2, 3, 6, 7)", "((3, 7), -1)"], 367, 616], "608": [["S3_packet_copy", "(2, 3, 6, 7)", "((3, 7), 1)"], 368, 617], "609": [["S3_packet_copy", "(2, 3, 6, 7)", "((6, 7), 1)"], 369, 619], "610": [["S3_packet_copy", "(4, 5, 6, 7)", "((4, 5), 1)"], 370, 621], "611": [["S3_packet_copy", "(4, 5, 6, 7)", "((4, 6), -1)"], 371, 622], "612": [["S3_packet_copy", "(4, 5, 6, 7)", "((4, 6), 1)"], 372, 623], "613": [["S3_packet_copy", "(4, 5, 6, 7)", "((4, 7), -1)"], 373, 624], "614": [["S3_packet_copy", "(4, 5, 6, 7)", "((4, 7), 1)"], 374, 625], "615": [["S3_packet_copy", "(4, 5, 6, 7)", "((5, 6), -1)"], 375, 626], "616": [["S3_packet_copy", "(4, 5, 6, 7)", "((5, 6), 1)"], 376, 627], "617": [["S3_packet_copy", "(4, 5, 6, 7)", "((5, 7), -1)"], 377, 628], "618": [["S3_packet_copy", "(4, 5, 6, 7)", "((5, 7), 1)"], 378, 629], "619": [["S3_packet_copy", "(4, 5, 6, 7)", "((6, 7), 1)"], 379, 631], "620": [["S4_slot_copy", "((0, 1, 2, 3), (0, 2), -1)", "8"], 380, 632], "621": [["S4_slot_copy", "((0, 1, 2, 3), (0, 2), 1)", "9"], 381, 633], "622": [["S4_slot_copy", "((0, 1, 2, 3), (0, 3), -1)", "10"], 382, 634], "623": [["S4_slot_copy", "((0, 1, 2, 3), (0, 3), 1)", "11"], 383, 635], "624": [["S4_slot_copy", "((0, 1, 2, 3), (1, 2), -1)", "11"], 384, 636], "625": [["S4_slot_copy", "((0, 1, 2, 3), (1, 2), 1)", "10"], 385, 637], "626": [["S4_slot_copy", "((0, 1, 2, 3), (1, 3), -1)", "9"], 386, 638], "627": [["S4_slot_copy", "((0, 1, 2, 3), (1, 3), 1)", "8"], 387, 639], "628": [["S4_slot_copy", "((0, 1, 4, 5), (0, 4), -1)", "20"], 388, 640], "629": [["S4_slot_copy", "((0, 1, 4, 5), (0, 4), 1)", "21"], 389, 641], "630": [["S4_slot_copy", "((0, 1, 4, 5), (0, 5), -1)", "22"], 390, 642], "631": [["S4_slot_copy", "((0, 1, 4, 5), (0, 5), 1)", "23"], 391, 643], "632": [["S4_slot_copy", "((0, 1, 4, 5), (1, 4), -1)", "23"], 392, 644], "633": [["S4_slot_copy", "((0, 1, 4, 5), (1, 4), 1)", "22"], 393, 645], "634": [["S4_slot_copy", "((0, 1, 4, 5), (1, 5), -1)", "21"], 394, 646], "635": [["S4_slot_copy", "((0, 1, 4, 5), (1, 5), 1)", "20"], 395, 647], "636": [["S4_slot_copy", "((0, 1, 6, 7), (0, 6), -1)", "32"], 396, 648], "637": [["S4_slot_copy", "((0, 1, 6, 7), (0, 6), 1)", "33"], 397, 649], "638": [["S4_slot_copy", "((0, 1, 6, 7), (0, 7), -1)", "34"], 398, 650], "639": [["S4_slot_copy", "((0, 1, 6, 7), (0, 7), 1)", "35"], 399, 651], "640": [["S4_slot_copy", "((0, 1, 6, 7), (1, 6), -1)", "35"], 400, 652], "641": [["S4_slot_copy", "((0, 1, 6, 7), (1, 6), 1)", "34"], 401, 653], "642": [["S4_slot_copy", "((0, 1, 6, 7), (1, 7), -1)", "33"], 402, 654], "643": [["S4_slot_copy", "((0, 1, 6, 7), (1, 7), 1)", "32"], 403, 655], "644": [["S4_slot_copy", "((0, 2, 4, 6), (0, 4), -1)", "44"], 404, 656], "645": [["S4_slot_copy", "((0, 2, 4, 6), (0, 4), 1)", "45"], 405, 657], "646": [["S4_slot_copy", "((0, 2, 4, 6), (0, 6), -1)", "46"], 406, 658], "647": [["S4_slot_copy", "((0, 2, 4, 6), (0, 6), 1)", "47"], 407, 659], "648": [["S4_slot_copy", "((0, 2, 4, 6), (2, 4), -1)", "47"], 408, 660], "649": [["S4_slot_copy", "((0, 2, 4, 6), (2, 4), 1)", "46"], 409, 661], "650": [["S4_slot_copy", "((0, 2, 4, 6), (2, 6), -1)", "45"], 410, 662], "651": [["S4_slot_copy", "((0, 2, 4, 6), (2, 6), 1)", "44"], 411, 663], "652": [["S4_slot_copy", "((0, 2, 5, 7), (0, 5), -1)", "56"], 412, 664], "653": [["S4_slot_copy", "((0, 2, 5, 7), (0, 5), 1)", "57"], 413, 665], "654": [["S4_slot_copy", "((0, 2, 5, 7), (0, 7), -1)", "58"], 414, 666], "655": [["S4_slot_copy", "((0, 2, 5, 7), (0, 7), 1)", "59"], 415, 667], "656": [["S4_slot_copy", "((0, 2, 5, 7), (2, 5), -1)", "59"], 416, 668], "657": [["S4_slot_copy", "((0, 2, 5, 7), (2, 5), 1)", "58"], 417, 669], "658": [["S4_slot_copy", "((0, 2, 5, 7), (2, 7), -1)", "57"], 418, 670], "659": [["S4_slot_copy", "((0, 2, 5, 7), (2, 7), 1)", "56"], 419, 671], "660": [["S4_slot_copy", "((0, 3, 4, 7), (0, 4), -1)", "68"], 420, 672], "661": [["S4_slot_copy", "((0, 3, 4, 7), (0, 4), 1)", "69"], 421, 673], "662": [["S4_slot_copy", "((0, 3, 4, 7), (0, 7), -1)", "70"], 422, 674], "663": [["S4_slot_copy", "((0, 3, 4, 7), (0, 7), 1)", "71"], 423, 675], "664": [["S4_slot_copy", "((0, 3, 4, 7), (3, 4), -1)", "71"], 424, 676], "665": [["S4_slot_copy", "((0, 3, 4, 7), (3, 4), 1)", "70"], 425, 677], "666": [["S4_slot_copy", "((0, 3, 4, 7), (3, 7), -1)", "69"], 426, 678], "667": [["S4_slot_copy", "((0, 3, 4, 7), (3, 7), 1)", "68"], 427, 679], "668": [["S4_slot_copy", "((0, 3, 5, 6), (0, 5), -1)", "80"], 428, 680], "669": [["S4_slot_copy", "((0, 3, 5, 6), (0, 5), 1)", "81"], 429, 681], "670": [["S4_slot_copy", "((0, 3, 5, 6), (0, 6), -1)", "82"], 430, 682], "671": [["S4_slot_copy", "((0, 3, 5, 6), (0, 6), 1)", "83"], 431, 683], "672": [["S4_slot_copy", "((0, 3, 5, 6), (3, 5), -1)", "83"], 432, 684], "673": [["S4_slot_copy", "((0, 3, 5, 6), (3, 5), 1)", "82"], 433, 685], "674": [["S4_slot_copy", "((0, 3, 5, 6), (3, 6), -1)", "81"], 434, 686], "675": [["S4_slot_copy", "((0, 3, 5, 6), (3, 6), 1)", "80"], 435, 687], "676": [["S4_slot_copy", "((1, 2, 4, 7), (1, 4), -1)", "92"], 436, 688], "677": [["S4_slot_copy", "((1, 2, 4, 7), (1, 4), 1)", "93"], 437, 689], "678": [["S4_slot_copy", "((1, 2, 4, 7), (1, 7), -1)", "94"], 438, 690], "679": [["S4_slot_copy", "((1, 2, 4, 7), (1, 7), 1)", "95"], 439, 691], "680": [["S4_slot_copy", "((1, 2, 4, 7), (2, 4), -1)", "95"], 440, 692], "681": [["S4_slot_copy", "((1, 2, 4, 7), (2, 4), 1)", "94"], 441, 693], "682": [["S4_slot_copy", "((1, 2, 4, 7), (2, 7), -1)", "93"], 442, 694], "683": [["S4_slot_copy", "((1, 2, 4, 7), (2, 7), 1)", "92"], 443, 695], "684": [["S4_slot_copy", "((1, 2, 5, 6), (1, 5), -1)", "104"], 444, 696], "685": [["S4_slot_copy", "((1, 2, 5, 6), (1, 5), 1)", "105"], 445, 697], "686": [["S4_slot_copy", "((1, 2, 5, 6), (1, 6), -1)", "106"], 446, 698], "687": [["S4_slot_copy", "((1, 2, 5, 6), (1, 6), 1)", "107"], 447, 699], "688": [["S4_slot_copy", "((1, 2, 5, 6), (2, 5), -1)", "107"], 448, 700], "689": [["S4_slot_copy", "((1, 2, 5, 6), (2, 5), 1)", "106"], 449, 701], "690": [["S4_slot_copy", "((1, 2, 5, 6), (2, 6), -1)", "105"], 450, 702], "691": [["S4_slot_copy", "((1, 2, 5, 6), (2, 6), 1)", "104"], 451, 703], "692": [["S4_slot_copy", "((1, 3, 4, 6), (1, 4), -1)", "116"], 452, 704], "693": [["S4_slot_copy", "((1, 3, 4, 6), (1, 4), 1)", "117"], 453, 705], "694": [["S4_slot_copy", "((1, 3, 4, 6), (1, 6), -1)", "118"], 454, 706], "695": [["S4_slot_copy", "((1, 3, 4, 6), (1, 6), 1)", "119"], 455, 707], "696": [["S4_slot_copy", "((1, 3, 4, 6), (3, 4), -1)", "119"], 456, 708], "697": [["S4_slot_copy", "((1, 3, 4, 6), (3, 4), 1)", "118"], 457, 709], "698": [["S4_slot_copy", "((1, 3, 4, 6), (3, 6), -1)", "117"], 458, 710], "699": [["S4_slot_copy", "((1, 3, 4, 6), (3, 6), 1)", "116"], 459, 711], "700": [["S4_slot_copy", "((1, 3, 5, 7), (1, 5), -1)", "128"], 460, 712], "701": [["S4_slot_copy", "((1, 3, 5, 7), (1, 5), 1)", "129"], 461, 713], "702": [["S4_slot_copy", "((1, 3, 5, 7), (1, 7), -1)", "130"], 462, 714], "703": [["S4_slot_copy", "((1, 3, 5, 7), (1, 7), 1)", "131"], 463, 715], "704": [["S4_slot_copy", "((1, 3, 5, 7), (3, 5), -1)", "131"], 464, 716], "705": [["S4_slot_copy", "((1, 3, 5, 7), (3, 5), 1)", "130"], 465, 717], "706": [["S4_slot_copy", "((1, 3, 5, 7), (3, 7), -1)", "129"], 466, 718], "707": [["S4_slot_copy", "((1, 3, 5, 7), (3, 7), 1)", "128"], 467, 719], "708": [["S4_slot_copy", "((2, 3, 4, 5), (2, 4), -1)", "140"], 468, 720], "709": [["S4_slot_copy", "((2, 3, 4, 5), (2, 4), 1)", "141"], 469, 721], "710": [["S4_slot_copy", "((2, 3, 4, 5), (2, 5), -1)", "142"], 470, 722], "711": [["S4_slot_copy", "((2, 3, 4, 5), (2, 5), 1)", "143"], 471, 723], "712": [["S4_slot_copy", "((2, 3, 4, 5), (3, 4), -1)", "143"], 472, 724], "713": [["S4_slot_copy", "((2, 3, 4, 5), (3, 4), 1)", "142"], 473, 725], "714": [["S4_slot_copy", "((2, 3, 4, 5), (3, 5), -1)", "141"], 474, 726], "715": [["S4_slot_copy", "((2, 3, 4, 5), (3, 5), 1)", "140"], 475, 727], "716": [["S4_slot_copy", "((2, 3, 6, 7), (2, 6), -1)", "152"], 476, 728], "717": [["S4_slot_copy", "((2, 3, 6, 7), (2, 6), 1)", "153"], 477, 729], "718": [["S4_slot_copy", "((2, 3, 6, 7), (2, 7), -1)", "154"], 478, 730], "719": [["S4_slot_copy", "((2, 3, 6, 7), (2, 7), 1)", "155"], 479, 731], "720": [["S4_slot_copy", "((2, 3, 6, 7), (3, 6), -1)", "155"], 480, 732], "721": [["S4_slot_copy", "((2, 3, 6, 7), (3, 6), 1)", "154"], 481, 733], "722": [["S4_slot_copy", "((2, 3, 6, 7), (3, 7), -1)", "153"], 482, 734], "723": [["S4_slot_copy", "((2, 3, 6, 7), (3, 7), 1)", "152"], 483, 735], "724": [["S4_slot_copy", "((4, 5, 6, 7), (4, 6), -1)", "164"], 484, 736], "725": [["S4_slot_copy", "((4, 5, 6, 7), (4, 6), 1)", "165"], 485, 737], "726": [["S4_slot_copy", "((4, 5, 6, 7), (4, 7), -1)", "166"], 486, 738], "727": [["S4_slot_copy", "((4, 5, 6, 7), (4, 7), 1)", "167"], 487, 739], "728": [["S4_slot_copy", "((4, 5, 6, 7), (5, 6), -1)", "167"], 488, 740], "729": [["S4_slot_copy", "((4, 5, 6, 7), (5, 6), 1)", "166"], 489, 741], "730": [["S4_slot_copy", "((4, 5, 6, 7), (5, 7), -1)", "165"], 490, 742], "731": [["S4_slot_copy", "((4, 5, 6, 7), (5, 7), 1)", "164"], 491, 743]} \ No newline at end of file diff --git a/research/format-limits-2/s3-4-census-gauges/inputs/pr531/PACKET-PROGRAMS.json.gz b/research/format-limits-2/s3-4-census-gauges/inputs/pr531/PACKET-PROGRAMS.json.gz new file mode 100644 index 0000000000..e98ce5d879 Binary files /dev/null and b/research/format-limits-2/s3-4-census-gauges/inputs/pr531/PACKET-PROGRAMS.json.gz differ diff --git a/research/format-limits-2/s3-4-census-gauges/inputs/pr531/PROTOTYPE.json.gz b/research/format-limits-2/s3-4-census-gauges/inputs/pr531/PROTOTYPE.json.gz new file mode 100644 index 0000000000..70cc5eb7b7 Binary files /dev/null and b/research/format-limits-2/s3-4-census-gauges/inputs/pr531/PROTOTYPE.json.gz differ diff --git a/research/format-limits-2/s3-4-census-gauges/inputs/pr626/GENERATED-IDENTITY-CONTROLS.json b/research/format-limits-2/s3-4-census-gauges/inputs/pr626/GENERATED-IDENTITY-CONTROLS.json new file mode 100644 index 0000000000..901387218f --- /dev/null +++ b/research/format-limits-2/s3-4-census-gauges/inputs/pr626/GENERATED-IDENTITY-CONTROLS.json @@ -0,0 +1,300 @@ +{ + "status": "PASS_GENERATED_ARTIFACT_RECOMPRESSION_AND_REBOUND_MUTATIONS", + "kappa": "51110230636731/31250000000000000", + "source_owner_sha256": "f4238b68cd31b8fc45e09b0fbde129e9f463fc0abab2f38121247cc5ef63f961", + "source_invoice_sha256": "feadbb688d8788c7e90f3852b0d3faaea3d5dd702896cea5eff7d19550b5acf9", + "source_providers": { + "ck": { + "raw": { + "CANONICAL-WORD.json.gz": "ae3018c0646be06f47d345bb8baf0e6ea9220096a949fa30a8f7656aa4ad6f45", + "LOCAL-PROGRAMS.json.gz": "b5da54e049cc127a1065190a647cb71cac0c6ba03d9ccdb71719f4fcbfa886f3", + "LOCAL-CHECKS.json": "059c4e59142bdf5c19dc7c0afebcddfec28e6e60cbc7299b8bdcc624afbc0cbe", + "INDEPENDENT-LOCAL-REPLAY.json": "ecefb9e661301d8081522be68bbe6640e175c011eb1177f643383d193c6fb2f0", + "CLIFFORD-RECIPES.json": "dfb64e71409a395f9375d9cc2258365d462bab2d28b707dcfba38994dd5aa0b9", + "CLIFFORD-REVIEW.json": "b232f53aebf777f55e713c327378ebcd9618f3b2297340aff8ed26ad584a2d3b", + "RESIDUAL-ADAPTERS.json": "4697965c1b466fd3eaf37fa1fbbd45bb06c78cb0fe0b3a253744efb4013581b9" + }, + "semantic": { + "CANONICAL-WORD.json.gz": "9bbc75dede090cfd7a0a0252424ea9d9f6211e2350d2a801d4e4f2f0784167c7", + "LOCAL-PROGRAMS.json.gz": "854f17274092263dc25e60367f4cd0d29f60a8446becd17cc1883ebed7a97900", + "LOCAL-CHECKS.json": "9e7be4f5eb567ffe886871b3fa434cc71f352e91cc9da07cb4e72c5742f24db4", + "INDEPENDENT-LOCAL-REPLAY.json": "ad854d9d15515cbcf7a2bee221d9c3cf0c7215770521866b12ce98aa777e310b", + "CLIFFORD-RECIPES.json": "dfb64e71409a395f9375d9cc2258365d462bab2d28b707dcfba38994dd5aa0b9", + "CLIFFORD-REVIEW.json": "dceebd0983fdfe94922323ae6499fc2d9bfbb7886c6843af5673b0266ec5b609", + "RESIDUAL-ADAPTERS.json": "8283dfa442fc7e7626f3356385bda8607b8d15eecfdc9515a6271c29da6caa7a" + } + }, + "jp8": { + "raw": { + "CANONICAL-WORD.json.gz": "7a3fec1022d3b2b1bd986302a327735ec521d17b043f4a5acb96253a56f6193c", + "LOCAL-PROGRAMS.json.gz": "fa0c196f65bd6ec1424fdf7d789f6972075c7bb02bf43f573ea85eafab31be98", + "LOCAL-CHECKS.json": "0fad744aa863eedb288a9f87b1c23225a36b316b6275cc3b1bcedd42afe28a67", + "INDEPENDENT-LOCAL-REPLAY.json": "cb2f99ed351925dd35434b73de16f4085884fe81a35a69e1c7ce2d5e96cb975b", + "CLIFFORD-RECIPES.json": "2799d73dd08c4435e5900ff2ae6ebc7f34535c153e173ab88d66d1f0b5e6dcde", + "CLIFFORD-REVIEW.json": "8024d96e5d7ed278066d8f7678fe483692d34f8f7038a59c5be99cb53c2fe136", + "RESIDUAL-ADAPTERS.json": "bdb44cf523636f307ebb3617da548f2e3a8af74321eabe24aef40186e280a917" + }, + "semantic": { + "CANONICAL-WORD.json.gz": "fb4a8d14ed2a8048698bea6ae16f86163a1aa6c80f2eb622222eee5cdbce9b3b", + "LOCAL-PROGRAMS.json.gz": "efe45ce7fb025a6f53cc9eb54e951ac2211a5ed927e689a049e4f68ca680654b", + "LOCAL-CHECKS.json": "e29bdcebdc2966979a9f5911f56b68c6f4942f6fdbeb6737e9db44e147d0193a", + "INDEPENDENT-LOCAL-REPLAY.json": "f31a73829f5de91fe98c3986bb2ad9b31e7b33881720029347051ab2b686af3c", + "CLIFFORD-RECIPES.json": "2799d73dd08c4435e5900ff2ae6ebc7f34535c153e173ab88d66d1f0b5e6dcde", + "CLIFFORD-REVIEW.json": "4231236ccc3bf45c469e4c98e3071a01ebf75f6366fb73b733e969fed65338b9", + "RESIDUAL-ADAPTERS.json": "99e1873464e8e718ea25fd80df5aaed0e5508b83e9bf2bdd094ea5c95fdf87c9" + } + } + }, + "recompression_changed_raw_hashes": { + "ck": { + "CANONICAL-WORD.json.gz": [ + "ae3018c0646be06f47d345bb8baf0e6ea9220096a949fa30a8f7656aa4ad6f45", + "596294d68a0f4bc1b6ec661f733fde4159a024014bf7ff2e708aa8f4c2374a2f" + ], + "LOCAL-PROGRAMS.json.gz": [ + "b5da54e049cc127a1065190a647cb71cac0c6ba03d9ccdb71719f4fcbfa886f3", + "2ddc2bd33320eed9de29a791d20e7d9622f01a9f2d368d95a83c151078a59cff" + ] + }, + "jp8": { + "CANONICAL-WORD.json.gz": [ + "7a3fec1022d3b2b1bd986302a327735ec521d17b043f4a5acb96253a56f6193c", + "1b22aeed987168c7a39d0bd62c050ad4a3000097cc52fdaaa26721dd5a5fd61f" + ], + "LOCAL-PROGRAMS.json.gz": [ + "fa0c196f65bd6ec1424fdf7d789f6972075c7bb02bf43f573ea85eafab31be98", + "3913c10ea6c5bd27aa61022891c5e627bb01c28ab89bafb6792f9a1f657f909e" + ] + } + }, + "accepted": [ + { + "provider": "ck", + "case": "recompressed_same_payloads", + "changed_raw_artifacts": [ + "CANONICAL-WORD.json.gz", + "LOCAL-PROGRAMS.json.gz" + ], + "all_seven_identities_unchanged": true, + "all_raw_links_rebound": true + }, + { + "provider": "jp8", + "case": "recompressed_same_payloads", + "changed_raw_artifacts": [ + "CANONICAL-WORD.json.gz", + "LOCAL-PROGRAMS.json.gz" + ], + "all_seven_identities_unchanged": true, + "all_raw_links_rebound": true + } + ], + "semantic_mutations_rejected": [ + { + "provider": "ck", + "case": "changed_actual_scalar", + "changed_identity": "LOCAL-PROGRAMS.json.gz", + "all_raw_and_semantic_links_rebound": true + }, + { + "provider": "ck", + "case": "changed_actual_start_frame_same_rank", + "changed_identity": "CANONICAL-WORD.json.gz", + "all_raw_and_semantic_links_rebound": true + }, + { + "provider": "ck", + "case": "native_false_restoration", + "changed_identity": "INDEPENDENT-LOCAL-REPLAY.json", + "all_raw_and_semantic_links_rebound": true + }, + { + "provider": "ck", + "case": "native_wrong_column_count", + "changed_identity": "INDEPENDENT-LOCAL-REPLAY.json", + "all_raw_and_semantic_links_rebound": true + }, + { + "provider": "ck", + "case": "native_changed_profile", + "changed_identity": "INDEPENDENT-LOCAL-REPLAY.json", + "all_raw_and_semantic_links_rebound": true + }, + { + "provider": "ck", + "case": "phase_false_global_equality", + "changed_identity": "CLIFFORD-REVIEW.json", + "all_raw_and_semantic_links_rebound": true + }, + { + "provider": "ck", + "case": "local_event_hash_is_not_a_container_reference", + "changed_identity": "LOCAL-CHECKS.json", + "all_raw_and_semantic_links_rebound": true + }, + { + "provider": "ck", + "case": "unrelated_native_root_seconds_retained", + "changed_identity": "INDEPENDENT-LOCAL-REPLAY.json", + "all_raw_and_semantic_links_rebound": true + }, + { + "provider": "ck", + "case": "nested_phase_seconds_retained", + "changed_identity": "CLIFFORD-REVIEW.json", + "all_raw_and_semantic_links_rebound": true + }, + { + "provider": "jp8", + "case": "changed_actual_scalar", + "changed_identity": "LOCAL-PROGRAMS.json.gz", + "all_raw_and_semantic_links_rebound": true + }, + { + "provider": "jp8", + "case": "changed_actual_start_frame_same_rank", + "changed_identity": "CANONICAL-WORD.json.gz", + "all_raw_and_semantic_links_rebound": true + }, + { + "provider": "jp8", + "case": "native_false_restoration", + "changed_identity": "INDEPENDENT-LOCAL-REPLAY.json", + "all_raw_and_semantic_links_rebound": true + }, + { + "provider": "jp8", + "case": "native_wrong_column_count", + "changed_identity": "INDEPENDENT-LOCAL-REPLAY.json", + "all_raw_and_semantic_links_rebound": true + }, + { + "provider": "jp8", + "case": "native_changed_profile", + "changed_identity": "INDEPENDENT-LOCAL-REPLAY.json", + "all_raw_and_semantic_links_rebound": true + }, + { + "provider": "jp8", + "case": "phase_false_global_equality", + "changed_identity": "CLIFFORD-REVIEW.json", + "all_raw_and_semantic_links_rebound": true + }, + { + "provider": "jp8", + "case": "local_event_hash_is_not_a_container_reference", + "changed_identity": "LOCAL-CHECKS.json", + "all_raw_and_semantic_links_rebound": true + }, + { + "provider": "jp8", + "case": "unrelated_native_root_seconds_retained", + "changed_identity": "INDEPENDENT-LOCAL-REPLAY.json", + "all_raw_and_semantic_links_rebound": true + }, + { + "provider": "jp8", + "case": "nested_phase_seconds_retained", + "changed_identity": "CLIFFORD-REVIEW.json", + "all_raw_and_semantic_links_rebound": true + } + ], + "invalid_references_or_metadata_rejected": [ + { + "provider": "ck", + "case": "stale_native_word_link", + "rejected_before_projection": true + }, + { + "provider": "ck", + "case": "stale_native_program_link", + "rejected_before_projection": true + }, + { + "provider": "ck", + "case": "stale_phase_word_link", + "rejected_before_projection": true + }, + { + "provider": "ck", + "case": "stale_phase_recipe_link", + "rejected_before_projection": true + }, + { + "provider": "ck", + "case": "invalid_phase_seconds_negative", + "rejected_before_projection": true + }, + { + "provider": "ck", + "case": "invalid_phase_seconds_boolean", + "rejected_before_projection": true + }, + { + "provider": "ck", + "case": "invalid_phase_seconds_string", + "rejected_before_projection": true + }, + { + "provider": "ck", + "case": "invalid_phase_seconds_nan", + "rejected_before_projection": true + }, + { + "provider": "ck", + "case": "invalid_phase_seconds_infinity", + "rejected_before_projection": true + }, + { + "provider": "jp8", + "case": "stale_native_word_link", + "rejected_before_projection": true + }, + { + "provider": "jp8", + "case": "stale_native_program_link", + "rejected_before_projection": true + }, + { + "provider": "jp8", + "case": "stale_phase_word_link", + "rejected_before_projection": true + }, + { + "provider": "jp8", + "case": "stale_phase_recipe_link", + "rejected_before_projection": true + }, + { + "provider": "jp8", + "case": "invalid_phase_seconds_negative", + "rejected_before_projection": true + }, + { + "provider": "jp8", + "case": "invalid_phase_seconds_boolean", + "rejected_before_projection": true + }, + { + "provider": "jp8", + "case": "invalid_phase_seconds_string", + "rejected_before_projection": true + }, + { + "provider": "jp8", + "case": "invalid_phase_seconds_nan", + "rejected_before_projection": true + }, + { + "provider": "jp8", + "case": "invalid_phase_seconds_infinity", + "rejected_before_projection": true + } + ], + "counts": { + "recompression_accepted": 2, + "semantic_rejected": 18, + "reference_or_metadata_rejected": 18 + }, + "scope": "Actual copied gzip streams and receipt JSON are changed. All seven content identities, raw source links and owner/invoice digests are recomputed consistently before assembly. Only identical decompressed payloads are accepted; scalar, same-rank frame, native proof fields, global phase, event hashes and unrelated seconds remain pinned. Literal references and invalid phase timing are rejected before normalization. Full physical replay remains a separate prerequisite." +} diff --git a/research/format-limits-2/s3-4-census-gauges/inputs/pr645/FULL-WORD.json.gz b/research/format-limits-2/s3-4-census-gauges/inputs/pr645/FULL-WORD.json.gz new file mode 100644 index 0000000000..447d45d08b Binary files /dev/null and b/research/format-limits-2/s3-4-census-gauges/inputs/pr645/FULL-WORD.json.gz differ diff --git a/research/format-limits-2/s3-4-census-gauges/inputs/pr656/PLAN.json.gz b/research/format-limits-2/s3-4-census-gauges/inputs/pr656/PLAN.json.gz new file mode 100644 index 0000000000..10f78fcea4 Binary files /dev/null and b/research/format-limits-2/s3-4-census-gauges/inputs/pr656/PLAN.json.gz differ diff --git a/research/format-limits-2/s3-4-census-gauges/verify.part.sh b/research/format-limits-2/s3-4-census-gauges/verify.part.sh new file mode 100755 index 0000000000..5b3ecc0a87 --- /dev/null +++ b/research/format-limits-2/s3-4-census-gauges/verify.part.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +# Bundle B (sections 3-4: C1-C3, G1-G3). Run from the package root; prints one PASS line per assertion; exit 0 only if none fails. About 3 s. +set -uo pipefail +HERE=$(cd "$(dirname "$0")" && pwd) +PY="${PYTHON:-python3}"; st=0 +for c in b_pins c1_census_656 c2_dirty_borrow c3_cap_f2_9 g1_gauge_bound; do + "$PY" -B "$HERE/checks/$c.py" || st=1 +done +echo "G3 ARGUED (no script); G2 ceiling 48/46/88 and the 504/K480 rows of G1 RECORDED (no re-run)" +exit $st diff --git a/research/format-limits-2/s5-6-decoders-spec/SOURCES.part.json b/research/format-limits-2/s5-6-decoders-spec/SOURCES.part.json new file mode 100644 index 0000000000..a1f797e44b --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/SOURCES.part.json @@ -0,0 +1,234 @@ +{ + "description": "Vendored PR files (git blob id at the cited commit) and local evidence (sha256 only; produced by flip-walk / SAT runs on the author's machine, not in a PR).", + "files": [ + { + "file": "inputs/pr626/ck-CANONICAL-WORD.json.gz", + "pr": 656, + "commit": "0805e78f5fecc700804d4766d7e3e1d7d7e6a2ba", + "source_path": "research/community-k492-audit/pr626/replay/mixed-global/base/providers/ck/CANONICAL-WORD.json.gz", + "used_for": "S1 (ck word of #622/#626; the same blob is vendored in #622/#623/#626 audit trees of the #656 head)", + "blob": "58cd1be8f28b74bea83c435eee1f52b36a274281", + "sha256": "ae3018c0646be06f47d345bb8baf0e6ea9220096a949fa30a8f7656aa4ad6f45" + }, + { + "file": "inputs/pr622/coupled_frames_base.py", + "pr": 622, + "commit": "f69477f4f6d3c7eb1f740b166881bffed4ffa9f6", + "source_path": "research/complex-joint-prefix/code/coupled_frames_base.py", + "used_for": "S4 anchors (identical blob in #622, #623, #626, #656)", + "blob": "90a01f0641c9929515d7fcd9b004a99164bdff50", + "sha256": "b6033cd2959297a624b557f3d04665c8fbb680a4c0987daf0704ef93711700bd" + }, + { + "file": "inputs/pr626/hpe_audit_local.py", + "pr": 626, + "commit": "660de893d27bb7abd1d5b01b1640207528a5c851", + "source_path": "research/complex-571-cold14-b3/code/hpe_audit_local.py", + "used_for": "S3 anchor (:75 common-frame assert)", + "blob": "17bccb64fdca54f329a3ce16e369449cb76c2802", + "sha256": "6bd9a1e279c9c9e4f3767d9f82e537b559292906feb2ddab02f380fb6523a810" + } + ], + "local_files": [ + { + "file": "inputs/local-hits/P104/HIT_flip_3a.txt", + "sha256": "8e0178db02c14e1b29058cdbdbd50aac22f2b55a1ba21dc82f417610c9932526", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "inputs/local-hits/P104/HIT_flip_3b.txt", + "sha256": "d27a8e2d14a2dcbb574995aa9ab82b3b107355faf48ad56f45c6dd5e051d252c", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "inputs/local-hits/P104/HIT_flip_3c.txt", + "sha256": "f3edfb771a76fc57d034b1cddba9de7b97a7d13409817879579eadb03381092e", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "inputs/local-hits/P111/HIT_c2_0.txt", + "sha256": "0af2b4b42cac05f21794013623f9955bd05cf48374a7e0a1badc29e441a027b7", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "inputs/local-hits/P111/HIT_c2_111.txt", + "sha256": "816768175d2b47ebabfd0f09180d95862bc7e84685f78dc616d9746ebf762a63", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "inputs/local-hits/P111/HIT_g0.txt", + "sha256": "c06d83ede44258b7250fe1df62a82011687f704c7f879ce4c91040ebbe2ef6b4", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "inputs/local-hits/P111/HIT_g1.txt", + "sha256": "9a8e8ee205cf3e69e2872c461844232df764a016a8c7e2741a02aeae9cdfc323", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "inputs/local-hits/P111/HIT_g111.txt", + "sha256": "8d5528362385dfc0c19cda625e5b2894d777d9405fc167c4c6723e99baa8db56", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "inputs/local-hits/P111/HIT_g30.txt", + "sha256": "a667c3f13d28828cb0a41b681e08fa6e4c07a1f3270f77555d3a1be29308a1d0", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "inputs/local-hits/P111/HIT_g48.txt", + "sha256": "521a618922d426573a1e808a6f7562eec5cd6ab09538d43b13c4dd79b1597aa7", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "inputs/local-hits/P111/HIT_g70.txt", + "sha256": "b803b2c2621061b9d2b4b31f4137e02c1342d288282a4ee92b7e2f50b2bd9fb3", + "origin": "local run output (not in any PR): exact decoder hits of the B14/B40 flip walks; re-verified exactly by checks/d3_punctures.py" + }, + { + "file": "evidence/D1/B14_satlift.exit", + "sha256": "9d9b18720961e9b4689fd763b85e7b6f36160ccd3a8a1c9ddc5103bb0f66c396", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D1/B14_satlift.log", + "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D1/B14_satlift.py", + "sha256": "3ba038c2a2a2d766f6a2687e132d6eecbd1efa120cb423b30e8b992f49df6113", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D1/B72_sat.py", + "sha256": "2254f42c0a2b025cb345baf7b22af15c400b0a6fb6abd49d41a5881365845414", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D1/B72_sat_n9_o3.exit", + "sha256": "9d9b18720961e9b4689fd763b85e7b6f36160ccd3a8a1c9ddc5103bb0f66c396", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D1/B72_sat_n9_o3.log", + "sha256": "8d3091ee1f4d11a1a3efbfcf5f89d10d7e4db4220f23a6ae009c15673eddcc22", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D1/satlift46.py", + "sha256": "dcf96c239888a7eb3d6b5354a97bb557308e8e94d3a75b828e23969e1777215b", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D3/B14_flip_3.log", + "sha256": "e6c2be4adff69e2c2002cf15e1b7c14de3524c603fedd860cd4c6064579b5d46", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D3/B14_flip_3a.out", + "sha256": "e29f3165c0e6b855b0079301a04b15b8a066906c9b0e9df7030cd90572944ae4", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D3/B14_flip_3b.out", + "sha256": "17f1bcc4b4bfd5ec0ca20d3b89c68e441d78b3befd68663d475108aaa1c98874", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D3/B14_flip_3c.out", + "sha256": "e9ef041b1a76dc94d1f661bf383ac89f285faaff6f17f6a8896e73e660712975", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D3/c1_0.out", + "sha256": "21c0953a5592dea290c4dfa0aceb425cbf7d06e2456c45101c6b5e6db6ab2606", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D3/c1_111.out", + "sha256": "7768e0fb8bf8386886b348ede4b8d1090dfd9231d1727c340fad0c7ded4e4156", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D3/c2_0.out", + "sha256": "f80e4becb4ffd0dbd9f32a3950698d668125450ed43e3f0f0579e2663a5edc72", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D3/c2_111.out", + "sha256": "5518d576d091ead48e6ff96dbcf33e4096e6108e289957c26ac8b69a5e496b35", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D3/g0.out", + "sha256": "136aeac659db958a4008b54c24d3921efc149741b8ff065b4ea2b3f1514e3337", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D3/g1.out", + "sha256": "a3624c2da333fc8e4123a9ed3b2e9ace654895d54c623d258b9eb2a3def81289", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D3/g111.out", + "sha256": "0442032f2c0d932ac798e494b385e7987199ae37db27278f117f3b3d04bda026", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D3/g30.out", + "sha256": "b2e69115fa90a5b9a9691c403aeba26b871a15be4a92cf923cee11aa26f21150", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D3/g48.out", + "sha256": "035d6ddc47f510f4b4fe3eed8c634a1447a0d5ffd4a2b635f32f2acfb52c37c6", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D3/g70.out", + "sha256": "9458e545c91b0ff346235473ae192651f29723400a2b81f77522772467acafae", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D2/cen1.out", + "sha256": "46d763a1e87c309d82765070df94c51e36de45e64a27d47f40606946a62cbcf6", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D2/cen2.out", + "sha256": "71314b4f28079348527f8ee9efb24309ad72fd5ea6934c927457722fb2751ef8", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D2/cen3.out", + "sha256": "48ac142440860e6ed5fccd96f5a6aa31538e555f17f878501b537e444c31984e", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D2/d1.out", + "sha256": "56dd5e20ecb02fbbf1dfee37f2c019bc160a7d136dd8ae8a7bb16688d042ce00", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D2/d2.out", + "sha256": "0e19ae1ec5e7d86a9eed9621571af9eaa00abfe165fc8dcd146b5085b520f77c", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D2/d3.out", + "sha256": "5414c014b669ab8475eb1c39fbf297c2dce9f539242d0320fd8b9cd4267b0a61", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D2/w1.out", + "sha256": "cf41e3e53127c5229014618b55fefa0f262d1f250b9f9fbb2963bea558de795b", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + }, + { + "file": "evidence/D2/w2.out", + "sha256": "07330ddc5d4f0793df4231d28dae3e8ccc96473a1cfe83be0b84e4b6c97665cd", + "origin": "local run logs / scripts of the same walks, shipped as evidence; read by checks/log_checks.py" + } + ] +} \ No newline at end of file diff --git a/research/format-limits-2/s5-6-decoders-spec/checks/anchors.py b/research/format-limits-2/s5-6-decoders-spec/checks/anchors.py new file mode 100644 index 0000000000..991a71fc20 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/checks/anchors.py @@ -0,0 +1,40 @@ +"""Citation anchors for the ARGUED rows S2, S3, S4: every file:line quoted in README.part.md is checked to contain the quoted text. +Spec files of main (base commit 66849e1) are vendored unchanged under inputs/main/ and pinned by git blob id in SOURCES.json; +verifier files are the vendored copies in inputs/. This checks that the citations are true, not that the arguments built on them are.""" +import hashlib, json, os, sys +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +REPO = os.path.join(ROOT, "inputs", "main") +fails = 0 +def ok(tag, cond, info=""): + global fails + print(("PASS " if cond else "FAIL ") + tag + (" | " + info if info else ""), flush=True) + fails += (not cond) +# the main files' pins (git blob ids) are checked by scripts/provenance.py (step 0); here only that they are present +for p in ("upstream/build/sections/03-motifs.tex", "upstream/build/sections/04-swap.tex", "notes/general-clifford-frames.tex"): + ok("anchors.present." + os.path.basename(p), os.path.isfile(os.path.join(REPO, p))) +SW, MO, GC = "upstream/build/sections/04-swap.tex", "upstream/build/sections/03-motifs.tex", "notes/general-clifford-frames.tex" +CF, HL = "inputs/pr622/coupled_frames_base.py", "inputs/pr626/hpe_audit_local.py" +A = [ # (tag, file, first line, last line, text) + ("S2.endpoint-operator-on-every-role", SW, 183, 187, "every original row"), + ("S2.contract-M_out(rho w)-M_in(w)=I", SW, 117, 121, "M_{\\mathrm{out}(\\rho(w))}-M_{\\mathrm{in}(w)}=I_m"), + ("S2.rho-is-a-permutation", SW, 105, 109, "permutation $\\rho$"), + ("S2.calls-equal-sum-of-edge-ranks", SW, 197, 199, "sum of the edge ranks, exactly $s$"), + ("S2.motif-source-is--P_U", MO, 469, 473, "source matrix $-P_{U_a}$"), + ("S2.interface-proof-P_Uperp-minus-source", MO, 519, 525, "P_{U_a^\\perp}-(-P_{U_a})=I_m"), + ("S2.common-frame-at-each-gate", MO, 154, 159, "use the same $D_v$"), + ("S3.R2-identical-exact-representative", GC, 61, 65, "one identical exact representative"), + ("S3.verifier-common-frame-assert", HL, 75, 75, "assert cur[r[1]]==f"), + ("S4.centre-descent-nested-chain", CF, 144, 148, "center descent not nested"), + ("S4.centre-descent-billed-per-step", CF, 148, 148, "self.center_profile[len(current) - len(g)] += 1"), + ("S4.centre-barrier-node", CF, 95, 99, "'barrier'"), + ("S4.final-hyperplane-for-ports", CF, 100, 108, "'final'"), + ("S4.monotone-chains", CF, 163, 163, "'nonmonotone'"), + ("S4.unbilled-cut-transition-refused", CF, 164, 165, "unbilled cut transition"), +] +for tag, f, a, b, txt in A: + p = os.path.join(REPO, f) if f.startswith(("upstream", "notes")) else os.path.join(ROOT, f) + lines = open(p, encoding="utf-8").read().split("\n")[a - 1:b] if os.path.exists(p) else [] + ok("anchors." + tag, txt in "\n".join(lines), "%s:%d-%d" % (os.path.basename(f), a, b)) +f = open(os.path.join(ROOT, CF)).read().split("\n") +ok("anchors.S4.final-port-hyperplane-code", any("word['ports']" in l for l in f[100:108]) and any("not (x & port).bit_count() % 2" in l for l in f[100:108])) +raise SystemExit(1 if fails else 0) diff --git a/research/format-limits-2/s5-6-decoders-spec/checks/d1_decoder_floor.py b/research/format-limits-2/s5-6-decoders-spec/checks/d1_decoder_floor.py new file mode 100644 index 0000000000..cfb61a2f77 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/checks/d1_decoder_floor.py @@ -0,0 +1,94 @@ +"""D1: complex decoder floor on P112 (B14 model). Reproduces, in memory and from nothing but the E8 root system: + (1) the reduction lemma (N-graph; free entries; 5824 forced entries are all nonzero), + (2) the census of hyperplane-flat supports: 440,880 supports, 9 label spans, minimum pairing rank 8, + (3) the tangent-space nullity 175 of the n=8 masked system at the coordinate decoder (gauge dimension 176 - 1).""" +import itertools, time, numpy as np, sympy +import e8model as m + +fails = 0 +def ok(tag, cond, info=""): + global fails + print(("PASS " if cond else "FAIL ") + tag + (" | " + info if info else ""), flush=True) + fails += (not cond) + +n = 112 +DOT = (m.Ln @ m.S9 @ m.Ln.T) % 2 +E = (DOT == 1) & ~np.eye(n, dtype=bool) +Z = m.M4 +# (1) reduction lemma +ok("D1.reduce.diagonal-label-pairing-1", set(DOT.diagonal()) == {1}) +ok("D1.reduce.N-equals-1-iff-E8-ip-even", ((DOT == 1) == (m.G % 2 == 0)).all()) +ok("D1.reduce.N0-entries-5824-all-nonzero-in-M4", (DOT == 0).sum() == 5824 and ((Z != 0) & (DOT == 0)).sum() == 5824) +ok("D1.reduce.M4-zero-on-E-offdiag", (Z[E] == 0).all()) +ok("D1.reduce.rank-F2-N-is-9", len(m.span_basis(m.tomask(DOT))) == 9) +ok("D1.reduce.E-graph-60-ones-per-row", set(DOT.sum(1)) == {60}) + +# (2) census of hyperplane flats: supports S_q = {i : != 0}, q in W(E8)-orbits of the 8 fundamental weights +B = m.basis() +Bi = sympy.Matrix(B.tolist()) +W = ((Bi * Bi.T) / 4).inv() +omegas = [np.array([int(x) for x in (W[i, :] * Bi)]) for i in range(8)] + +def orbit(o): + seen = {tuple(o)}; fr = np.array([o]); allv = [fr] + while len(fr): + new = [] + for r in B: + c = fr @ r + assert (c % 4 == 0).all() + new.append(fr - (c // 4)[:, None] * r[None, :]) + new = np.unique(np.concatenate(new), axis=0) + keep = [v for v in map(tuple, new) if v not in seen] + seen.update(keep); fr = np.array(keep) if keep else np.zeros((0, 8), int) + if len(fr): allv.append(fr) + return np.concatenate(allv) + +RP32 = m.RP.astype(np.int32) +masks = set(); sizes = [] +for o in omegas: + V = orbit(o).astype(np.int32); sizes.append(len(V)) + Sm = (V @ RP32.T) != 0 + for row in np.unique(np.packbits(Sm, axis=1), axis=0): masks.add(row.tobytes()) +ok("D1.census.orbit-sizes", sorted(sizes) == [240, 2160, 6720, 17280, 60480, 69120, 241920, 483840], str(sorted(sizes))) +ok("D1.census.440880-distinct-supports", len(masks) == 440880, str(len(masks))) +Sb = np.unpackbits(np.array([np.frombuffer(b, dtype=np.uint8) for b in masks]), axis=1)[:, :112].astype(np.float32) +# label span of a support: U^perp = {w : = 0 for all i in S}; key = which w are violated +par = lambda x: bin(x).count("1") & 1 +Pm = np.array([[par(w & m.Lm[i]) for w in range(1, 512)] for i in range(n)], dtype=np.float32) +keys = set() +for a in range(0, len(Sb), 40000): + viol = (Sb[a:a + 40000] @ Pm) > 0 + for row in np.unique(np.packbits(viol, axis=1), axis=0): keys.add(row.tobytes()) +Us = [] +for k in keys: + viol = np.unpackbits(np.frombuffer(k, dtype=np.uint8))[:511].astype(bool) + perp = [w for w in range(1, 512) if not viol[w - 1]] + U = [v for v in range(512) if all(par(v & w) == 0 for w in perp)] + Us.append(m.span_basis(U)) +dims = sorted(len(u) for u in Us) +ok("D1.census.9-distinct-label-spans", len(Us) == 9 and dims == [8] * 8 + [9], str(dims)) +def form(u, v): + a = np.array([(u >> (8 - i)) & 1 for i in range(9)]); b = np.array([(v >> (8 - i)) & 1 for i in range(9)]) + return int(a @ m.S9 @ b) % 2 +def rank_pair(U, V): + rows = [] + for u in U: + row = 0 + for k, v in enumerate(V): row |= form(u, v) << k + rows.append(row) + return len(m.span_basis(rows)) +betas = [rank_pair(U, V) for U in Us for V in Us] +ok("D1.census.min-pair-beta-is-8", min(betas) == 8, "min %d over %d ordered pairs of spans" % (min(betas), len(betas))) + +# (3) tangent space at the coordinate decoder +X0 = m.RP.astype(float); c = 0.5 +idx = np.nonzero((DOT == 1).ravel())[0] # E-graph incl. the diagonal: 112*60 = 6720 constraints +J = np.zeros((len(idx), 112 * 8 * 2)) +for t, k in enumerate(idx): + i, j = divmod(k, 112) + J[t, i * 8:(i + 1) * 8] = c * X0[j] + J[t, 896 + j * 8:896 + (j + 1) * 8] = c * X0[i] +rk = np.linalg.matrix_rank(J, tol=1e-8) +ok("D1.rigid.tangent-nullity-175", J.shape == (6720, 1792) and rk == 1617 and 1792 - rk == 175, + "rank %d nullity %d; gauge GL8(64)+row scalings(112)-1 shared = 175" % (rk, 1792 - rk)) +raise SystemExit(1 if fails else 0) diff --git a/research/format-limits-2/s5-6-decoders-spec/checks/d1_frames.py b/research/format-limits-2/s5-6-decoders-spec/checks/d1_frames.py new file mode 100644 index 0000000000..4e5f4953ea --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/checks/d1_frames.py @@ -0,0 +1,98 @@ +"""D1 (frame-substitution part): the E-graph of P112 has 1260 cliques of size 8 ('frames') and none of size 9; any exact decoder +restricted to a frame is a full-rank 8x8 problem, so >= 8 terms meet every frame. Searching label-span pairs (U,V) for the best +(fraction of frames hit)/beta gives max 1/8 at beta 8 and strictly more at beta 3..7, hence the weighted covering bound is only +ceil(8/rho) ~ 44 < 64: the frame-substitution argument does not prune decoders that mix beta<=7 terms. +Same search space as the original run (all-lines x hyperplane, hyperplane x hyperplane, 20000 random codim<=3 pairs, random.seed(1)).""" +import random, numpy as np +import e8model as m + +fails = 0 +def ok(tag, cond, info=""): + global fails + print(("PASS " if cond else "FAIL ") + tag + (" | " + info if info else ""), flush=True) + fails += (not cond) + +n = 112 +par = lambda x: bin(x).count("1") & 1 +L = list(m.Lm); LS = list(m.LSm) +N = np.array([[par(LS[i] & L[j]) for j in range(n)] for i in range(n)], dtype=np.uint8) +assert (N == N.T).all() +A = (N == 1) & ~np.eye(n, dtype=bool) +fr = [] +def ext(cl, cand): + if len(cl) == 8: + fr.append(tuple(cl)); return + for k, v in enumerate(cand): + ext(cl + [v], [w for w in cand[k + 1:] if A[v, w]]) +ext([], list(range(n))) +fr = np.array(fr); F = len(fr) +ok("D1.frames.1260-eight-cliques", F == 1260, str(F)) +# no 9-clique: extend each 8-clique by a common E-neighbour +common9 = any(A[list(c)].all(0).any() for c in fr) +ok("D1.frames.no-9-clique", not common9) + +nb = max(x.bit_length() for x in L) +# parity table and per-line 'violation' ints for fast label spans +Pm = np.array([[par(w & x) for w in range(1 << nb)] for x in L], dtype=bool) # Pm[i,w] = +Pint = [int("".join("1" if b else "0" for b in row[::-1]), 2) for row in Pm] +spancache = {} +def span_of(R): + key = 0 + for i in R: key |= Pint[i] + if key not in spancache: + perp = [w for w in range(1 << nb) if not (key >> w) & 1] # w with =0 for all l in R + U = [v for v in range(1 << nb) if all(par(v & w) == 0 for w in perp)] + spancache[key] = m.span_basis(U) + return key, spancache[key] +rcache = {} +def beta(R, Aset): + (kr, ur), (ka, ua) = span_of(R), span_of(Aset) + if (kr, ka) not in rcache: + # pairing rank of U x V under the label form (rows of LS-space vs labels): use the model's pair_rank on bases + vb = m.span_basis([int("".join(str(x) for x in (np.array([(u >> (nb - 1 - i)) & 1 for i in range(nb)]) @ m.S9 % 2)), 2) for u in ur]) + rows = [] + for v in vb: + row = 0 + for k, w in enumerate(ua): row |= (bin(v & w).count("1") & 1) << k + rows.append(row) + rcache[(kr, ka)] = len(m.span_basis(rows)) + return rcache[(kr, ka)] +def hit(R, Aset): + Rm = np.zeros(n, bool); Rm[R] = 1; Am = np.zeros(n, bool); Am[Aset] = 1 + return (Rm[fr].any(1) & Am[fr].any(1)).sum() +best = {} +def upd(b, r): + if b not in best or r > best[b]: best[b] = r +def ev(R, Aset): + if len(R) == 0 or len(Aset) == 0: return None + b = beta(R, Aset) + if b == 0: return (0, 0.0) + return (b, hit(R, Aset) / F / b) +def lines_with(ws): + okm = np.ones(n, bool) + for w in ws: okm &= ~Pm[:, w] + return np.nonzero(okm)[0] +allL = np.arange(n) +hyp = {w: lines_with([w]) for w in range(1, 1 << nb)} +for w in hyp: + r = ev(allL, hyp[w]) + if r: upd(*r) +for w in hyp: + for v in hyp: + if v < w: continue + r = ev(hyp[w], hyp[v]) + if r: upd(*r) +random.seed(1) +for t in range(20000): + k1 = random.choice([1, 2, 3]); k2 = random.choice([1, 2, 3]) + w = [random.randrange(1, 1 << nb) for _ in range(k1)]; v = [random.randrange(1, 1 << nb) for _ in range(k2)] + r = ev(lines_with(w), lines_with(v)) + if r: upd(*r) +print("beta : max (frames hit / 1260) / beta [1/8 = 0.125]") +for b in sorted(best): print(" ", b, round(best[b], 4)) +ok("D1.frames.beta8-max-is-exactly-1/8", abs(best[8] - 0.125) < 1e-12, "%.6f" % best[8]) +ok("D1.frames.beta7-pair-hits-all-frames", abs(best[7] - 1 / 7) < 1e-12, "%.6f" % best[7]) +ok("D1.frames.beta6-pair-hits-all-frames", abs(best[6] - 1 / 6) < 1e-12, "%.6f" % best[6]) +rho = max(best.values()) +ok("D1.frames.covering-bound-below-64", 40 <= 8 / rho < 48, "rho %.4f, 8/rho = %.1f (sampled rho; the bound only falls as rho grows)" % (rho, 8 / rho)) +raise SystemExit(1 if fails else 0) diff --git a/research/format-limits-2/s5-6-decoders-spec/checks/d3_punctures.py b/research/format-limits-2/s5-6-decoders-spec/checks/d3_punctures.py new file mode 100644 index 0000000000..734046e563 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/checks/d3_punctures.py @@ -0,0 +1,43 @@ +"""D3: exact non-star complex decoders on punctured P112 (B14 model, D T^T = M4 on the kept lines, cost = sum of F2 pairing ranks). + P111: six single-line punctures (0,1,30 D8-type; 48,70,111 spin-type) reach cst 63 with one cost-7 term; punctures 0 and 111 also at |coef|<=2. + P104: P112 minus the 8-clique drawn by numpy default_rng(1) (label-nonorthogonal lines) reaches cst 56 (three independent walkers).""" +import glob, os, numpy as np +import e8model as m +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +fails = 0 +def ok(tag, cond, info=""): + global fails + print(("PASS " if cond else "FAIL ") + tag + (" | " + info if info else ""), flush=True) + fails += (not cond) +def load(f): + D = []; T = [] + for l in open(f): + s = l.strip() + if s.startswith("d:"): D.append([int(x) for x in s[2:].split()]) + if s.startswith("t:"): T.append([int(x) for x in s[2:].split()]) + return np.array(D).T, np.array(T).T +def verify(f, keep): + D, T = load(f); keep = list(keep) + ex = (D @ T.T == m.M4[np.ix_(keep, keep)]).all() + Df = np.zeros((112, D.shape[1]), int); Tf = Df.copy(); Df[keep] = D; Tf[keep] = T + cs = [m.pair_rank(np.nonzero(Df[:, k])[0], np.nonzero(Tf[:, k])[0]) for k in range(D.shape[1])] + return ex, cs, int(abs(D).max()), int(abs(T).max()), D.shape[1] +for name, q in (("g0", 0), ("g1", 1), ("g30", 30), ("g48", 48), ("g70", 70), ("g111", 111), ("c2_0", 0), ("c2_111", 111)): + ex, cs, cd, ct, n = verify(os.path.join(ROOT, "inputs/local-hits/P111/HIT_%s.txt" % name), [i for i in range(112) if i != q]) + cap = 2 if name.startswith("c2") else 3 + ok("D3.P111.puncture%d.%s" % (q, name), ex and n == 8 and sum(cs) == 63 and sorted(cs) == [7] + [8] * 7 and max(cd, ct) <= cap, + "exact, n=8, costs %s, max|coef| %d" % (cs, max(cd, ct))) +rng = np.random.default_rng(1) +while True: + cl = [int(rng.integers(112))] + cand = [i for i in range(112) if m.DOT[cl[0], i] == 1 and i != cl[0]] + while cand and len(cl) < 8: + c = cand[int(rng.integers(len(cand)))]; cl.append(c) + cand = [i for i in cand if m.DOT[c, i] == 1 and i != c] + if len(cl) == 8: break +keep = [i for i in range(112) if i not in cl] +ok("D3.P104.removed-set-is-8-clique", sorted(cl) == [9, 15, 24, 46, 52, 66, 94, 104] and all(m.DOT[a, b] == 1 for a in cl for b in cl if a != b), str(sorted(cl))) +for s in "abc": + ex, cs, cd, ct, n = verify(os.path.join(ROOT, "inputs/local-hits/P104/HIT_flip_3%s.txt" % s), keep) + ok("D3.P104.walker-%s-exact-cost-56" % s, ex and n == 8 and sum(cs) == 56, "costs %s, max|coef| %d" % (cs, max(cd, ct))) +raise SystemExit(1 if fails else 0) diff --git a/research/format-limits-2/s5-6-decoders-spec/checks/d4_structured.py b/research/format-limits-2/s5-6-decoders-spec/checks/d4_structured.py new file mode 100644 index 0000000000..e1c9ea9cb3 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/checks/d4_structured.py @@ -0,0 +1,40 @@ +"""D4: structured classical decoders in the copy-cost model on P112 and all 112 single-puncture P111s: +coordinate 64; D2-butterfly pairs / halves / D4-Hadamard / permuted pairs / WHT 72; coset 4-split 192 (n=32, beta 6 each).""" +import numpy as np +import e8model as m +fails = 0 +def ok(tag, cond, info=""): + global fails + print(("PASS " if cond else "FAIL ") + tag + (" | " + info if info else ""), flush=True) + fails += (not cond) +X = m.X.copy(); d8 = np.array([np.count_nonzero(r) == 2 for r in m.RP]) +ok("D4.D8-48-spin-64-lines", d8.sum() == 48 and (~d8).sum() == 64) +ok("D4.coordinate-exact-cst-64", m.exact(X, X, 1) and m.cost(X, X) == 64) +A = X * d8[:, None]; B = X * (~d8)[:, None] +D = np.concatenate([A, B, A, B], 1); T = np.concatenate([A, B, B, A], 1) +ok("D4.coset-4split-exact-n32-cst-192", m.exact(D, T, 1) and D.shape[1] == 32 and m.cost(D, T) == 192 + and all(m.pair_rank(np.nonzero(D[:, k])[0], np.nonzero(T[:, k])[0]) == 6 for k in range(32))) +def H(n): + h = np.array([[1]]) + for _ in range(n): h = np.block([[h, h], [h, -h]]) + return h +def blk(pairs): + Q = np.zeros((8, 8), int); r = 0 + for a, b in pairs: + Q[r, a] = 1; Q[r, b] = 1; Q[r + 1, a] = 1; Q[r + 1, b] = -1; r += 2 + return Q +cands = {"pairs(2a,2a+1)": blk([(0, 1), (2, 3), (4, 5), (6, 7)]), "halves(j,j+4)": blk([(0, 4), (1, 5), (2, 6), (3, 7)]), + "D4-Hadamard-x2": np.kron(np.eye(2, dtype=int), H(2)), "perm-pairs(0,2)(1,3)": blk([(0, 2), (1, 3), (4, 6), (5, 7)]), "WHT8": H(3)} +for nm, Q in cands.items(): + F = X @ Q.T; sc = int((Q @ Q.T)[0, 0]) + ok("D4.%s-exact-cst-72" % nm, (F @ F.T == m.M4 * sc).all() and m.cost(F, F) == 72) +allr = np.arange(112) +fam = {"coord": (X, X), "pairs": (X @ cands["pairs(2a,2a+1)"].T,) * 2, "halves": (X @ cands["halves(j,j+4)"].T,) * 2, "coset4": (D, T)} +want = {"coord": 64, "pairs": 72, "halves": 72, "coset4": 192} +for nm, (D_, T_) in fam.items(): + vals = set() + for q in range(112): + keep = np.delete(allr, q) + vals.add(sum(m.pair_rank(keep[np.nonzero(D_[keep][:, k])[0]], keep[np.nonzero(T_[keep][:, k])[0]]) for k in range(D_.shape[1]))) + ok("D4.P111-all-112-punctures.%s" % nm, vals == {want[nm]}, "cst values %s" % sorted(vals)) +raise SystemExit(1 if fails else 0) diff --git a/research/format-limits-2/s5-6-decoders-spec/checks/e8model.py b/research/format-limits-2/s5-6-decoders-spec/checks/e8model.py new file mode 100644 index 0000000000..489a3e2c12 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/checks/e8model.py @@ -0,0 +1,98 @@ +"""B14 decoder model (E8 roots, P112 = 120 root lines minus the 8 frame lines e_{2a} +- e_{2a+1}, labels in F2^9, Thm-C pairing-rank cost). Self-contained; unchanged apart from this docstring.""" +import itertools, numpy as np +from fractions import Fraction + +def e8_roots(): + R=[] + for i,j in itertools.combinations(range(8),2): + for si in (1,-1): + for sj in (1,-1): + v=[0]*8; v[i]=2*si; v[j]=2*sj; R.append(tuple(v)) # scaled by 2 + for s in itertools.product((1,-1),repeat=8): + if s.count(-1)%2==0: R.append(tuple(s)) + return np.array(R) # 240 x 8, scaled x2 ; ip = dot/4 +# simple roots basis (Bourbaki-ish), scaled x2 +def basis(): + B=[] + B.append([1,-1,-1,-1,-1,-1,-1,1]) # (1/2)(e1+e8-e2..e7) + B.append([2,2,0,0,0,0,0,0]) + B.append([-2,2,0,0,0,0,0,0]) + for k in range(1,6): + v=[0]*8; v[k]=-2; v[k+1]=2; B.append(v) + return np.array(B) +def build(): + R=e8_roots(); B=basis() + Gb=(B@B.T)//4 + assert round(abs(np.linalg.det(Gb)))==1 + C=np.rint(np.linalg.solve(B.T.astype(float),R.T.astype(float))).T.astype(int) # coords of roots + assert (C@B==R).all() + # lines: pick one rep per +- + seen={};lines=[] + for i,r in enumerate(R): + key=tuple(r) if tuple(r)>tuple(-r) else tuple(-r) + if key not in seen: seen[key]=i; lines.append(i) + assert len(lines)==120 + Rl=R[lines]; Cl=C[lines]%2 + # frame: e1+-e2 etc (scaled 2*(e_i+-e_j) -> (2,2,0..)): + frame=[] + for a in range(4): + for s in (1,-1): + v=[0]*8; v[2*a]=2; v[2*a+1]=2*s; frame.append(tuple(v)) + fidx=[] + for f in frame: + for k,r in enumerate(Rl): + if tuple(r)==f or tuple(-r)==f: fidx.append(k) + P=[k for k in range(120) if k not in fidx] + assert len(P)==112 + return Rl,Cl,Gb%2,np.array(fidx),np.array(P) +Rl,Cl,Gb2,fidx,P=build() +RP=Rl[P]; Fr=Rl[fidx] +G=(RP@RP.T)//4 # integer E8 inner products +Ln=np.concatenate([Cl[P],np.ones((112,1),int)],1) # labels in F2^9 +S9=np.zeros((9,9),int); S9[:8,:8]=Gb2; S9[8,8]=1 # form +LS=(Ln@S9)%2 # row i: label_i S +DOT=(Ln@S9@Ln.T)%2 # label pairing +# 2G as integer target (N=G/2 -> 4N = 2G) +M4=2*G +X=(RP@Fr.T)//4 # 112x8, entries 0,+-1 : +def rank2(rows): + """F2 rank of list of ints (bitmask rows)""" + rows=list(rows); r=0 + basis=[] + for v in rows: + for b in basis: v=min(v,v^b) + if v: basis.append(v) + return basis +def tomask(mat): return [int(''.join(map(str,row)),2) for row in mat] +LSm=[int(''.join(map(str,row)),2) for row in LS] # label_i * S as bitmask +Lm =[int(''.join(map(str,row)),2) for row in Ln] +def span_basis(masks): + basis=[] + for v in masks: + for b in basis: v=min(v,v^b) + if v: basis.append(v) + return basis +def pair_rank(Rset,Aset): + """rank of pairing (span U(R)) x (span U(A)) over F2""" + if len(Rset)==0 or len(Aset)==0: return 0 + vb=span_basis([LSm[i] for i in Rset]) # vectors u S + wb=span_basis([Lm[i] for i in Aset]) + # matrix entries parity(vb & wb) + rows=[] + for v in vb: + row=0 + for k,w in enumerate(wb): + row|=(bin(v&w).count('1')&1)<8 state at cost<=64 in ~1.5e8 iterations), P113 (best 65), P111 punctures (n up to 11 at cost<=64) and P104.""" +import glob, os, re +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +fails = 0 +def ok(tag, cond, info=""): + global fails + print(("PASS " if cond else "FAIL ") + tag + (" | " + info if info else ""), flush=True) + fails += (not cond) +rd = lambda p: open(os.path.join(ROOT, p)).read() +st = sg = pr = 0 +for i in (1, 2, 3): + t = rd("evidence/D2/cen%d.out" % i) + s, bad, nint = map(int, re.search(r"states (\d+) bad (\d+) integer-ext frac \{True: (\d+)\}", t).groups()) + single = re.search(r"single \(dcst,integer\): \[\(\(1, True\), (\d+)\)\]", t); pair = re.search(r"pair dcst: \[\(2, (\d+)\)\]", t) + ok("D2.log.cen%d-all-singles-+1-all-pairs-+2" % i, bad == 0 and single and pair and "min single 1" in t, "%d states" % s) + st += s; sg += int(single.group(1)); pr += int(pair.group(1)) +ok("D2.log.totals-33981-states-271848-singles-951468-pairs", (st, sg, pr) == (33981, 271848, 951468), "%d / %d / %d" % (st, sg, pr)) +def done(p): + return [dict(zip(("it", "uniq", "best", "ngt8", "maxn"), map(int, re.search(r"it=(\d+) uniq<=64:(\d+) bestever=(\d+) .*n>8@<=64:(\d+) maxn=(\d+)", l).groups()))) for l in rd(p).split("\n") if "DONE" in l] +for i in (1, 2, 3): + d = done("evidence/D2/d%d.out" % i)[0] + ok("D1.log.P112-walk-d%d-no-state-below-64-none-with-n>8" % i, d["best"] == 64 and d["ngt8"] == 0 and d["maxn"] == 8 and d["it"] > 4e7, "%.1e iterations" % d["it"]) +for i in (1, 2): + d = done("evidence/D2/w%d.out" % i)[0] + ok("D2.log.P113-walk-w%d-best-65" % i, d["best"] == 65 and d["uniq"] == 0 and d["it"] > 2e8) +for g in ("g0", "g1", "g30", "g48", "g70", "g111", "c2_0", "c2_111"): + d = done("evidence/D3/%s.out" % g)[0] + ok("D3.log.P111-walk-%s-best-63" % g, d["best"] == 63 and d["uniq"] > 0, "%d distinct states at <=64, n>8 states %d, max n %d" % (d["uniq"], d["ngt8"], d["maxn"])) +for g in ("c1_0", "c1_111"): + d = done("evidence/D3/%s.out" % g)[0] + ok("D3.log.P111-cap1-%s-best-64" % g, d["best"] == 64) +for s in "abc": + t = rd("evidence/D3/B14_flip_3%s.out" % s) + ok("D3.log.P104-walker-%s-hit-56" % s, "NEW MIN cost=56" in t or "c56" in t) +ok("D1.log.no-SAT-result-exists", open(os.path.join(ROOT, "evidence/D1/B14_satlift.log")).read() == "" and rd("evidence/D1/B14_satlift.exit").strip() == "143" + and rd("evidence/D1/B72_sat_n9_o3.log").startswith("vars 23904 clauses 1540851") and rd("evidence/D1/B72_sat_n9_o3.exit").strip() == "143", + "both solver runs were killed (exit 143) without a result; there is no UNSAT proof or DRAT file") +raise SystemExit(1 if fails else 0) diff --git a/research/format-limits-2/s5-6-decoders-spec/checks/s1_inplace.py b/research/format-limits-2/s5-6-decoders-spec/checks/s1_inplace.py new file mode 100644 index 0000000000..99f61e7772 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/checks/s1_inplace.py @@ -0,0 +1,55 @@ +"""S1: in-place elimination is dead under the shipped frame rules (ck word of #622/#626, frames = F2^9 subspaces). +Reads inputs/pr626/ck-CANONICAL-WORD.json.gz. The content map M is recomputed by exact rational replay of the word's A, B and cut +phases (target t = register 112+t, source j = register j).""" +import gzip, json, os, sys +from fractions import Fraction as Q +import numpy as np +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +d = json.load(gzip.open(os.path.join(ROOT, "inputs/pr626/ck-CANONICAL-WORD.json.gz"))) +fails = 0 +def ok(tag, cond, info=""): + global fails + print(("PASS " if cond else "FAIL ") + tag + (" | " + info if info else ""), flush=True) + fails += (not cond) + +fr = d["frames"]; ports = d["ports"]; fin = d["final"] +def spanset(B): + s = {0} + for b in B: s |= {x ^ b for x in s} + return frozenset(s) +par = lambda x: bin(x).count("1") & 1 +H = [spanset(fr[fin[112 + p]]) for p in range(112)] +ok("S1.ports-distinct", len(set(ports)) == 112) +ok("S1.target-end-frame-is-perp-port", all(H[p] == frozenset(w for w in range(512) if par(w & ports[p]) == 0) for p in range(112))) +ok("S1.port-not-in-own-end-frame", sum(ports[p] in H[p] for p in range(112)) == 0, "0/112") +A = np.zeros((112, 112), int) +for a in range(112): + for b in range(112): + if a != b: + A[a, b] = {ports[a], ports[b], ports[a] ^ ports[b]} <= (H[a] & H[b]) +ok("S1.legal-cross-port-inplace-0-of-12432", A.sum() == 0 and 112 * 111 == 12432) +B = np.array([[ports[b] in H[a] for b in range(112)] for a in range(112)], int) +ok("S1.legal-target-reads-5824-diag-0", B.sum() == 5824 and np.trace(B) == 0, str(B.sum())) +# content map by exact replay +rows = {r: {r: Q(1)} for r in range(112)} +for ph in ("A", "B", "cut"): + for o in d[ph]: + if o[0] == "add": + t, s = o[1], o[2]; q = Q(o[3], o[4]); rt = rows.setdefault(t, {}) + for j, x in list(rows.get(s, {}).items()): + z = rt.get(j, 0) + q * x + if z: rt[j] = z + else: rt.pop(j, None) + else: + t = o[1]; q = Q(o[2], o[3]); rows[t] = {j: q * x for j, x in rows.get(t, {}).items()} +M = np.zeros((112, 112)) +for t in range(112): + for j, x in rows[112 + t].items(): M[t, j] = float(x) +off = (np.abs(M) > 1e-9) & ~np.eye(112, dtype=bool) +nz = int((np.abs(M) > 1e-9).sum()); legal = int((off & (B > 0)).sum()); tot = int(off.sum()) +print(" M: nnz %d, off-diagonal %d, off-diagonal inside the legal read mask %d (%.1f%%), rank %d" % (nz, tot, legal, 100 * legal / tot, np.linalg.matrix_rank(M))) +ok("S1.M-rank-112", np.linalg.matrix_rank(M) == 112) +ok("S1.M-offdiag-legal-5264-of-8960", (legal, tot) == (5264, 8960), "%d legal, %d illegal off-diagonal reads (41.2%% illegal) on the vendored canonical word" % (legal, tot - legal)) +rowill = (off & (B == 0)).sum(1) +ok("S1.every-row-needs-illegal-reads", rowill.min() == rowill.max() == 33, "per-row illegal reads min %d max %d mean %.1f" % (rowill.min(), rowill.max(), rowill.mean())) +raise SystemExit(1 if fails else 0) diff --git a/research/format-limits-2/s5-6-decoders-spec/checks/s3_r2_toy.py b/research/format-limits-2/s5-6-decoders-spec/checks/s3_r2_toy.py new file mode 100644 index 0000000000..eb82b17e3b --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/checks/s3_r2_toy.py @@ -0,0 +1,43 @@ +"""S3: relaxing R2 (one identical exact representative per gate) to representatives differing by a right logical permutation is not a +drop-in: h=3 exact Clifford toy. Same rep -> X = I; rep differing by an address permutation -> X is a permutation with 4/8 addresses +moved; a sideways label -> X not monomial, 8/8 moved; the group-ring span of S3 on 3 qubits is 5 of 64 dimensions.""" +import numpy as np +h = 3; N = 2 ** h +I2 = np.eye(2); C = (1 + 1j) / 2 * np.array([[1, -1j], [-1j, 1]]) +def kron(*a): + r = np.eye(1) + for x in a: r = np.kron(r, x) + return r +def Tcoord(S): return kron(*[C if i in S else I2 for i in range(h)]) +def perm(sig): + P = np.zeros((N, N)) + for x in range(N): + bits = [(x >> (h - 1 - i)) & 1 for i in range(h)] + nb = [bits[sig[i]] for i in range(h)] + P[sum(b << (h - 1 - i) for i, b in enumerate(nb)), x] = 1 + return P +fails = 0 +def ok(tag, cond, info=""): + global fails + print(("PASS " if cond else "FAIL ") + tag + (" | " + info if info else ""), flush=True) + fails += (not cond) +Ts = Tcoord({0}); P = perm([1, 0, 2]) +def eff(Tt): + X = np.linalg.inv(Tt) @ Ts + return X, int((np.abs(X - np.eye(N)).sum(0) > 1e-9).sum()) +X, mv = eff(Ts); ok("S3.same-rep-gives-identity", np.abs(X - np.eye(N)).max() < 1e-12 and mv == 0) +X, mv = eff(Ts @ P) +ok("S3.rep-differs-by-address-permutation-moves-4-of-8", mv == 4 and np.allclose(X @ X.T.conj(), np.eye(N)) and np.allclose(np.abs(X), np.round(np.abs(X))), "moved %d/8, X a permutation" % mv) +X, mv = eff(Tcoord({1})) +ok("S3.sideways-label-moves-8-of-8-non-monomial", mv == 8 and not np.allclose(np.abs(X), np.round(np.abs(X))), "moved %d/8" % mv) +gens = [perm([1, 0, 2]), perm([0, 2, 1])] +G = {tuple(np.eye(N).flatten())}; fr = [np.eye(N)] +while fr: + n = [] + for a in fr: + for g in gens: + b = g @ a; t = tuple(b.flatten()) + if t not in G: G.add(t); n.append(b) + fr = n +ok("S3.S3-group-ring-span-5-of-64", len(G) == 6 and np.linalg.matrix_rank(np.array(list(G))) == 5, "closure order %d, span rank %d of %d" % (len(G), np.linalg.matrix_rank(np.array(list(G))), N * N)) +raise SystemExit(1 if fails else 0) diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D1/B14_satlift.exit b/research/format-limits-2/s5-6-decoders-spec/evidence/D1/B14_satlift.exit new file mode 100644 index 0000000000..fba7ed526e --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D1/B14_satlift.exit @@ -0,0 +1 @@ +143 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D1/B14_satlift.log b/research/format-limits-2/s5-6-decoders-spec/evidence/D1/B14_satlift.log new file mode 100644 index 0000000000..e69de29bb2 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D1/B14_satlift.py b/research/format-limits-2/s5-6-decoders-spec/evidence/D1/B14_satlift.py new file mode 100644 index 0000000000..a687fdebc8 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D1/B14_satlift.py @@ -0,0 +1,98 @@ +"""B14 satlift: CP-SAT over F3 (ternary symmetric terms d_k d_k^T summing to 2G mod 3), Thm-C cost <= BOUND via +rank-factor encoding (u_i (S+M_k) u_j^T = 0 on R_k x R_k, rank M_k <= rho_k). Hits are lifted to Z by fitting + exact check. +usage: satlift.py n bound timelimit workers [control]""" +import sys, time, numpy as np +from ortools.sat.python import cp_model +import model as m +n=int(sys.argv[1]); BOUND=int(sys.argv[2]); TL=float(sys.argv[3]); W=int(sys.argv[4]); control=len(sys.argv)>5 +NP=112; U=m.Ln; S=m.S9; DOT=m.DOT; G2=2*m.G +RHO=8 +M=cp_model.CpModel() +p=[[M.NewBoolVar(f"p{k}_{i}") for i in range(NP)] for k in range(n)] +q=[[M.NewBoolVar(f"m{k}_{i}") for i in range(NP)] for k in range(n)] +r=[[M.NewBoolVar(f"r{k}_{i}") for i in range(NP)] for k in range(n)] +for k in range(n): + for i in range(NP): + M.AddBoolOr([p[k][i].Not(),q[k][i].Not()]) + M.Add(r[k][i]==p[k][i]+q[k][i]) + M.Add(sum(p[k][i]+q[k][i] for i in range(NP))>=1) +# symmetry breaking: terms ordered by support size (weak) +for k in range(n-1): + M.Add(sum(r[k])>=sum(r[k+1])) +# products +Z={} +for k in range(n): + for i in range(NP): + Z[k,i,i]=r[k][i] + for j in range(i+1,NP): + a=M.NewBoolVar(""); b=M.NewBoolVar(""); c=M.NewBoolVar(""); d=M.NewBoolVar("") + for v,x,y in ((a,p[k][i],p[k][j]),(b,q[k][i],q[k][j]),(c,p[k][i],q[k][j]),(d,q[k][i],p[k][j])): + M.AddBoolOr([x.Not(),y.Not(),v]); M.AddImplication(v,x); M.AddImplication(v,y) + Z[k,i,j]=(a,b,c,d) +for i in range(NP): + for j in range(i,NP): + s=M.NewIntVar(-(n//3+2),n//3+2,"") + if i==j: expr=sum(Z[k,i,i] for k in range(n)) + else: expr=sum(Z[k,i,j][0]+Z[k,i,j][1]-Z[k,i,j][2]-Z[k,i,j][3] for k in range(n)) + M.Add(expr-int(G2[i,j])==3*s) +# cost +costs=[] +for k in range(n): + used=[M.NewBoolVar(f"u{k}_{c}") for c in range(RHO)] + for c in range(RHO-1): M.AddImplication(used[c+1],used[c]) + costs.append(sum(used)) + Pi=[[M.NewBoolVar("") for _ in range(9)] for c in range(RHO)] + Sg=[[M.NewBoolVar("") for _ in range(9)] for c in range(RHO)] + for c in range(RHO): + for t in range(9): + M.AddImplication(Pi[c][t],used[c]); M.AddImplication(Sg[c][t],used[c]) + Mm=[[None]*9 for _ in range(9)] + for a_ in range(9): + for b_ in range(9): + ands=[] + for c in range(RHO): + v=M.NewBoolVar("") + M.AddBoolOr([Pi[c][a_].Not(),Sg[c][b_].Not(),v]); M.AddImplication(v,Pi[c][a_]); M.AddImplication(v,Sg[c][b_]) + ands.append(v) + mv=M.NewBoolVar(""); M.AddBoolXOr(ands+[mv.Not()]) ; Mm[a_][b_]=mv # mv = xor(ands) + # c_iq = (u_i M)_q + Cq=[[None]*9 for _ in range(NP)] + for i in range(NP): + for qq in range(9): + lits=[Mm[pp][qq] for pp in range(9) if U[i,pp]] + cv=M.NewBoolVar(""); M.AddBoolXOr(lits+[cv.Not()]); Cq[i][qq]=cv + for i in range(NP): + for j in range(NP): + if j0 else 0)); M.Add(q[k][i]==(1 if X[i,k]<0 else 0)) + # (n==8 control with hints only; bound 64) +sv=cp_model.CpSolver(); sv.parameters.max_time_in_seconds=TL; sv.parameters.num_workers=W; sv.parameters.log_search_progress=False +class CB(cp_model.CpSolverSolutionCallback): + def __init__(s): super().__init__(); s.t0=time.time() + def on_solution_callback(s): print(f"[{time.time()-s.t0:.0f}s] solution found",flush=True) +t0=time.time(); st=sv.Solve(M,CB()) +print("status",sv.StatusName(st),"wall %.0fs"%(time.time()-t0),flush=True) +if st in (cp_model.OPTIMAL,cp_model.FEASIBLE): + D=np.array([[sv.Value(p[k][i])-sv.Value(q[k][i]) for k in range(n)] for i in range(NP)]) + np.save(f"satlift_sol_n{n}_b{BOUND}_{int(time.time())}.npy",D) + print("F3 solution; cost(sym terms)=",m.cost(D,D),"; exact over Z(2G)?",m.exact(D,D,1),flush=True) + # lift: least squares on fixed supports + from scipy.optimize import least_squares + supp=(D!=0) + def res(x): + Dx=np.zeros((NP,n)); Dx[supp]=x + return (Dx@Dx.T-m.M4).ravel() + sol=least_squares(res,D[supp].astype(float),method="lm",max_nfev=200) + print("lift residual",np.abs(sol.fun).max(),flush=True) diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D1/B72_sat.py b/research/format-limits-2/s5-6-decoders-spec/evidence/D1/B72_sat.py new file mode 100644 index 0000000000..65e47cb790 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D1/B72_sat.py @@ -0,0 +1,32 @@ +"""B72: pure SAT (cadical153) for B52's support-level relaxation. usage: sat.py n orbit timeout [proof] +Vars x_f (1120 flats). cover each line; each even-ip pair i=2 chosen flats (x_f -> OR of others in C_ij); +sum x = n (totalizer); orbit reduction: rep of orbit o chosen, no lower-orbit flat.""" +import numpy as np, sys, time, threading +from pysat.solvers import Solver +from pysat.card import CardEnc, EncType +import model as m +F=np.load('F.npy').astype(bool); orb=np.load('orb.npy'); N=len(F); n=int(sys.argv[1]); o=int(sys.argv[2]); TL=float(sys.argv[3]) +Eo=(m.G%2==0) +cl=[] +for j in range(112): cl.append([int(f)+1 for f in np.nonzero(F[:,j])[0]]) +Fi=F.astype(np.int32); co=Fi.T@Fi # co[i,j]=#flats containing both +ncl=0 +for i in range(112): + for j in range(i+1,112): + if Eo[i,j]: + C=[int(f)+1 for f in np.nonzero(F[:,i]&F[:,j])[0]] + for f in C: + cl.append([-f]+[g for g in C if g!=f]) +rep=int(np.nonzero(orb==o)[0][0]); cl.append([rep+1]) +for f in range(N): + if orb[f]0],flush=True) diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D1/B72_sat_n9_o3.exit b/research/format-limits-2/s5-6-decoders-spec/evidence/D1/B72_sat_n9_o3.exit new file mode 100644 index 0000000000..fba7ed526e --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D1/B72_sat_n9_o3.exit @@ -0,0 +1 @@ +143 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D1/B72_sat_n9_o3.log b/research/format-limits-2/s5-6-decoders-spec/evidence/D1/B72_sat_n9_o3.log new file mode 100644 index 0000000000..999d5fac76 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D1/B72_sat_n9_o3.log @@ -0,0 +1 @@ +vars 23904 clauses 1540851 lits 24988995 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D1/satlift46.py b/research/format-limits-2/s5-6-decoders-spec/evidence/D1/satlift46.py new file mode 100644 index 0000000000..2687f1bc82 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D1/satlift46.py @@ -0,0 +1,134 @@ +"""B14 satlift: CP-SAT over F3 (ternary symmetric terms d_k d_k^T summing to 2G mod 3), Thm-C cost <= BOUND via +rank-factor encoding (u_i (S+M_k) u_j^T = 0 on R_k x R_k, rank M_k <= rho_k). Hits are lifted to Z by fitting + exact check. +usage: satlift.py n bound timelimit workers [control]""" +import sys, time, numpy as np +from ortools.sat.python import cp_model +import model as m +n=int(sys.argv[1]); BOUND=int(sys.argv[2]); TL=float(sys.argv[3]); W=int(sys.argv[4]); control=len(sys.argv)>5 and sys.argv[5]=='c'; SYM=not(len(sys.argv)>6 and sys.argv[6]=='nosym') +NP=112; U=m.Ln; S=m.S9; DOT=m.DOT; G2=2*m.G +RHO=8 +import os +MOD=int(os.environ.get('MOD','3')) +M=cp_model.CpModel() +p=[[M.NewBoolVar(f"p{k}_{i}") for i in range(NP)] for k in range(n)] +q=[[M.NewBoolVar(f"m{k}_{i}") for i in range(NP)] for k in range(n)] +r=[[M.NewBoolVar(f"r{k}_{i}") for i in range(NP)] for k in range(n)] +for k in range(n): + for i in range(NP): + M.AddBoolOr([p[k][i].Not(),q[k][i].Not()]) + M.Add(r[k][i]==p[k][i]+q[k][i]) + M.Add(sum(p[k][i]+q[k][i] for i in range(NP))>=1) +# symmetry breaking (B18): sign normalisation (d~-d: first nonzero entry is +) and lex-leader order of term supports +for k in range(n): + for i in range(NP): + # q[k][i] (a -1 entry) allowed only if some earlier index in the term is nonzero + if i==0: M.Add(q[k][i]==0) + else: M.AddBoolOr([q[k][i].Not()]+[r[k][j] for j in range(i)]) +if SYM: + for k in range(1,n-1): + # lex: r[k] >=lex r[k+1]; eq[i] = prefix equal up to i + eq=None + for i in range(NP): + if eq is None: M.Add(r[k][i]>=r[k+1][i]) + else: M.AddBoolOr([eq.Not(),r[k+1][i].Not(),r[k][i]]) + ne=M.NewBoolVar("") # ne => prefix still equal after i + # e_i <=> (prev eq) and r equal at i + e=M.NewBoolVar("") + pre=[] if eq is None else [eq] + d_=M.NewBoolVar("") # d_ <=> r[k][i]==r[k+1][i] + M.Add(r[k][i]==r[k+1][i]).OnlyEnforceIf(d_); M.Add(r[k][i]!=r[k+1][i]).OnlyEnforceIf(d_.Not()) + M.AddBoolAnd(pre+[d_]).OnlyEnforceIf(e); M.AddBoolOr([x.Not() for x in pre]+[d_.Not(),e]) + eq=e +# B46: forced mixed term 0 (support inside a codim-2 label flat => beta<=7) and optional even-support variant +FIX=os.environ.get('FIX') +if FIX: + ws=[int(x) for x in FIX.split(',')] + for i in range(NP): + l=int(''.join(map(str,U[i])),2) + if any(bin(w&l).count('1')%2 for w in ws): + M.Add(p[0][i]==0); M.Add(q[0][i]==0) +if os.environ.get('EVEN'): + for k in range(n): + M.AddBoolXOr([r[k][i] for i in range(NP)]+[M.NewConstant(1)]) # even support size +# products +Z={} +for k in range(n): + for i in range(NP): + Z[k,i,i]=r[k][i] + for j in range(i+1,NP): + a=M.NewBoolVar(""); b=M.NewBoolVar(""); c=M.NewBoolVar(""); d=M.NewBoolVar("") + for v,x,y in ((a,p[k][i],p[k][j]),(b,q[k][i],q[k][j]),(c,p[k][i],q[k][j]),(d,q[k][i],p[k][j])): + M.AddBoolOr([x.Not(),y.Not(),v]); M.AddImplication(v,x); M.AddImplication(v,y) + Z[k,i,j]=(a,b,c,d) +for i in range(NP): + for j in range(i,NP): + s=M.NewIntVar(-(n//MOD+4),n//MOD+4,"") + if i==j: expr=sum(Z[k,i,i] for k in range(n)) + else: expr=sum(Z[k,i,j][0]+Z[k,i,j][1]-Z[k,i,j][2]-Z[k,i,j][3] for k in range(n)) + M.Add(expr-int(G2[i,j])==MOD*s) +# cost +costs=[] +for k in range(n): + used=[M.NewBoolVar(f"u{k}_{c}") for c in range(RHO)] + for c in range(RHO-1): M.AddImplication(used[c+1],used[c]) + costs.append(sum(used)) + Pi=[[M.NewBoolVar("") for _ in range(9)] for c in range(RHO)] + Sg=[[M.NewBoolVar("") for _ in range(9)] for c in range(RHO)] + for c in range(RHO): + for t in range(9): + M.AddImplication(Pi[c][t],used[c]); M.AddImplication(Sg[c][t],used[c]) + Mm=[[None]*9 for _ in range(9)] + for a_ in range(9): + for b_ in range(9): + ands=[] + for c in range(RHO): + v=M.NewBoolVar("") + M.AddBoolOr([Pi[c][a_].Not(),Sg[c][b_].Not(),v]); M.AddImplication(v,Pi[c][a_]); M.AddImplication(v,Sg[c][b_]) + ands.append(v) + mv=M.NewBoolVar(""); M.AddBoolXOr(ands+[mv.Not()]) ; Mm[a_][b_]=mv # mv = xor(ands) + # c_iq = (u_i M)_q + Cq=[[None]*9 for _ in range(NP)] + for i in range(NP): + for qq in range(9): + lits=[Mm[pp][qq] for pp in range(9) if U[i,pp]] + cv=M.NewBoolVar(""); M.AddBoolXOr(lits+[cv.Not()]); Cq[i][qq]=cv + for i in range(NP): + for j in range(NP): + if j0 else 0)); M.Add(q[k][i]==(1 if X[i,k]<0 else 0)) + # (n==8 control with hints only; bound 64) +sv=cp_model.CpSolver(); sv.parameters.max_time_in_seconds=TL; sv.parameters.num_workers=W; sv.parameters.log_search_progress=False +class CB(cp_model.CpSolverSolutionCallback): + def __init__(s): super().__init__(); s.t0=time.time() + def on_solution_callback(s): print(f"[{time.time()-s.t0:.0f}s] solution found",flush=True) +t0=time.time(); st=sv.Solve(M,CB()) +print("status",sv.StatusName(st),"wall %.0fs"%(time.time()-t0),flush=True) +if st in (cp_model.OPTIMAL,cp_model.FEASIBLE): + D=np.array([[sv.Value(p[k][i])-sv.Value(q[k][i]) for k in range(n)] for i in range(NP)]) + np.save(f"satlift_sol_n{n}_b{BOUND}_{int(time.time())}.npy",D) + print("F3 solution; cost(sym terms)=",m.cost(D,D),"; exact over Z(2G)?",m.exact(D,D,1),flush=True) + # lift: least squares on fixed supports + from scipy.optimize import least_squares + supp=(D!=0) + def res(x): + Dx=np.zeros((NP,n)); Dx[supp]=x + return (Dx@Dx.T-m.M4).ravel() + sol=least_squares(res,D[supp].astype(float),method="lm",max_nfev=200) + print("lift residual",np.abs(sol.fun).max(),flush=True) diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D2/cen1.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D2/cen1.out new file mode 100644 index 0000000000..3bf632f33d --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D2/cen1.out @@ -0,0 +1,4 @@ +states 11560 bad 0 integer-ext frac {True: 92480} +single (dcst,integer): [((1, True), 92480)] +pair dcst: [(2, 323680)] +min single 1 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D2/cen2.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D2/cen2.out new file mode 100644 index 0000000000..216a95c75c --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D2/cen2.out @@ -0,0 +1,4 @@ +states 12126 bad 0 integer-ext frac {True: 97008} +single (dcst,integer): [((1, True), 97008)] +pair dcst: [(2, 339528)] +min single 1 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D2/cen3.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D2/cen3.out new file mode 100644 index 0000000000..9b40085c2f --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D2/cen3.out @@ -0,0 +1,4 @@ +states 10295 bad 0 integer-ext frac {True: 82360} +single (dcst,integer): [((1, True), 82360)] +pair dcst: [(2, 288260)] +min single 1 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D2/d1.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D2/d1.out new file mode 100644 index 0000000000..bb6f13825a --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D2/d1.out @@ -0,0 +1,4 @@ +[0] start tag=d1 NP=112 cost=64 tau=0.30 nmax=12 cap=3 +ndump 173399 +[121s] DONE it=49152000 uniq<=64:1389884 bestever=64 acc=9565592 n>8@<=64:0 maxn=8 +hist: 64:3258372 65:2828182 66:1679964 67:741238 68:280337 69:74454 70:14384 71:8499 72:680162 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D2/d2.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D2/d2.out new file mode 100644 index 0000000000..e077cb45fa --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D2/d2.out @@ -0,0 +1,4 @@ +[0] start tag=d2 NP=112 cost=64 tau=0.30 nmax=12 cap=3 +ndump 181889 +[121s] DONE it=48168960 uniq<=64:1451465 bestever=64 acc=9497066 n>8@<=64:0 maxn=8 +hist: 64:3239746 65:2688880 66:1727054 67:788475 68:283479 69:67514 70:12521 71:7049 72:682348 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D2/d3.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D2/d3.out new file mode 100644 index 0000000000..0779b8ce13 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D2/d3.out @@ -0,0 +1,4 @@ +[0] start tag=d3 NP=112 cost=64 tau=0.30 nmax=12 cap=3 +ndump 154417 +[121s] DONE it=50724864 uniq<=64:1238796 bestever=64 acc=9742344 n>8@<=64:0 maxn=8 +hist: 64:3045880 65:2896197 66:1845861 67:873989 68:333966 69:100130 70:24646 71:12667 72:609008 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D2/w1.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D2/w1.out new file mode 100644 index 0000000000..2efdf3e047 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D2/w1.out @@ -0,0 +1,6 @@ +[0] start tag=P113_1 NP=113 cost=65 tau=0.30 nmax=12 cap=3 +[158s] it=67108864 uniq<=64:0 cur=67 n=8 bestever=65 acc=13135893 split=6711242 merge=38254 +[311s] it=134217728 uniq<=64:0 cur=66 n=8 bestever=65 acc=26219110 split=13424367 merge=76332 +[464s] it=201326592 uniq<=64:0 cur=67 n=8 bestever=65 acc=39325461 split=20132636 merge=113441 +[481s] DONE it=208994304 uniq<=64:0 bestever=65 acc=40790992 n>8@<=64:0 maxn=0 +hist: 65:9365254 66:11600345 67:8489503 68:4622730 69:1850739 70:563452 71:108256 72:30960 73:1676681 74:2483072 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D2/w2.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D2/w2.out new file mode 100644 index 0000000000..8bb9be2f9b --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D2/w2.out @@ -0,0 +1,6 @@ +[0] start tag=P113_2 NP=113 cost=65 tau=0.40 nmax=12 cap=3 +[145s] it=67108864 uniq<=64:0 cur=71 n=8 bestever=65 acc=13788544 split=6603076 merge=115042 +[290s] it=134217728 uniq<=64:0 cur=69 n=8 bestever=65 acc=27756727 split=13315248 merge=217609 +[434s] it=201326592 uniq<=64:0 cur=67 n=8 bestever=65 acc=41623035 split=20023551 merge=322298 +[481s] DONE it=223870976 uniq<=64:0 bestever=65 acc=46326073 n>8@<=64:0 maxn=0 +hist: 65:1454367 66:3028671 67:4109634 68:5050622 69:5591220 70:5603417 71:4368899 72:1802454 73:649931 74:1467829 75:2216572 76:2912481 77:3650547 78:4419429 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D3/B14_flip_3.log b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/B14_flip_3.log new file mode 100644 index 0000000000..d937426ff5 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/B14_flip_3.log @@ -0,0 +1,60 @@ +cpuq/running/B14_flip_3.sh: line 7: 29015 Killed: 9 nice -n 19 env CTOP=84 cards/B14/fw_p104c1 302 0.5 20 3 8000000 21000 B14_flip_3b > cards/B14/hits/B14_flip_3b.out 2>&1 +cpuq/running/B14_flip_3.sh: line 7: 29016 Killed: 9 nice -n 19 env CTOP=72 cards/B14/fw_p104c1 303 0.4 16 2 2000000 21000 B14_flip_3c > cards/B14/hits/B14_flip_3c.out 2>&1 +cpuq/running/B14_flip_3.sh: line 8: 29014 Killed: 9 nice -n 19 env CTOP=76 cards/B14/fw_p104c1 301 0.3 12 3 4000000 21000 B14_flip_3a > cards/B14/hits/B14_flip_3a.out 2>&1 +===== a +[0s] NEW MIN cost=63 n=8 it=1224 +EXACT HIT written HIT_B14_flip_3a_c63_1791849202.txt +[0s] NEW MIN cost=62 n=8 it=3376 +EXACT HIT written HIT_B14_flip_3a_c62_1791849202.txt +[0s] NEW MIN cost=61 n=8 it=5679 +EXACT HIT written HIT_B14_flip_3a_c61_1791849202.txt +[0s] NEW MIN cost=60 n=8 it=5797 +EXACT HIT written HIT_B14_flip_3a_c60_1791849202.txt +[0s] NEW MIN cost=59 n=8 it=5801 +EXACT HIT written HIT_B14_flip_3a_c59_1791849202.txt +[0s] NEW MIN cost=58 n=8 it=5844 +EXACT HIT written HIT_B14_flip_3a_c58_1791849202.txt +[0s] NEW MIN cost=56 n=8 it=6119 +EXACT HIT written HIT_B14_flip_3a_c56_1791849202.txt +===== b +[0s] NEW MIN cost=63 n=8 it=1729 +EXACT HIT written HIT_B14_flip_3b_c63_1791849202.txt +[0s] NEW MIN cost=62 n=8 it=1731 +EXACT HIT written HIT_B14_flip_3b_c62_1791849202.txt +[0s] NEW MIN cost=61 n=8 it=28770 +EXACT HIT written HIT_B14_flip_3b_c61_1791849202.txt +[11s] NEW MIN cost=60 n=8 it=16028578 +EXACT HIT written HIT_B14_flip_3b_c60_1791849213.txt +[11s] NEW MIN cost=58 n=8 it=16028846 +EXACT HIT written HIT_B14_flip_3b_c58_1791849213.txt +[11s] NEW MIN cost=56 n=8 it=16050365 +EXACT HIT written HIT_B14_flip_3b_c56_1791849213.txt +===== c +[0s] NEW MIN cost=63 n=8 it=2165 +EXACT HIT written HIT_B14_flip_3c_c63_1791849202.txt +[0s] NEW MIN cost=62 n=8 it=3612 +EXACT HIT written HIT_B14_flip_3c_c62_1791849202.txt +[3s] NEW MIN cost=60 n=8 it=4698050 +EXACT HIT written HIT_B14_flip_3c_c60_1791849205.txt +[3s] NEW MIN cost=58 n=8 it=4730554 +EXACT HIT written HIT_B14_flip_3c_c58_1791849205.txt +[360s] NEW MIN cost=56 n=8 it=478123511 +EXACT HIT written HIT_B14_flip_3c_c56_1791849562.txt +cards/B14/hits/HIT_B14_flip_3a_c56_1791849202.txt +cards/B14/hits/HIT_B14_flip_3a_c58_1791849202.txt +cards/B14/hits/HIT_B14_flip_3a_c59_1791849202.txt +cards/B14/hits/HIT_B14_flip_3a_c60_1791849202.txt +cards/B14/hits/HIT_B14_flip_3a_c61_1791849202.txt +cards/B14/hits/HIT_B14_flip_3a_c62_1791849202.txt +cards/B14/hits/HIT_B14_flip_3a_c63_1791849202.txt +cards/B14/hits/HIT_B14_flip_3b_c56_1791849213.txt +cards/B14/hits/HIT_B14_flip_3b_c58_1791849213.txt +cards/B14/hits/HIT_B14_flip_3b_c60_1791849213.txt +cards/B14/hits/HIT_B14_flip_3b_c61_1791849202.txt +cards/B14/hits/HIT_B14_flip_3b_c62_1791849202.txt +cards/B14/hits/HIT_B14_flip_3b_c63_1791849202.txt +cards/B14/hits/HIT_B14_flip_3c_c56_1791849562.txt +cards/B14/hits/HIT_B14_flip_3c_c58_1791849205.txt +cards/B14/hits/HIT_B14_flip_3c_c60_1791849205.txt +cards/B14/hits/HIT_B14_flip_3c_c62_1791849202.txt +cards/B14/hits/HIT_B14_flip_3c_c63_1791849202.txt diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D3/B14_flip_3a.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/B14_flip_3a.out new file mode 100644 index 0000000000..9ef6df5a6c --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/B14_flip_3a.out @@ -0,0 +1,28 @@ +[0] start tag=B14_flip_3a NP=104 cost=64 tau=0.30 nmax=12 cap=3 +[0s] NEW MIN cost=63 n=8 it=1224 +EXACT HIT written HIT_B14_flip_3a_c63_1791849202.txt +[0s] NEW MIN cost=62 n=8 it=3376 +EXACT HIT written HIT_B14_flip_3a_c62_1791849202.txt +[0s] NEW MIN cost=61 n=8 it=5679 +EXACT HIT written HIT_B14_flip_3a_c61_1791849202.txt +[0s] NEW MIN cost=60 n=8 it=5797 +EXACT HIT written HIT_B14_flip_3a_c60_1791849202.txt +[0s] NEW MIN cost=59 n=8 it=5801 +EXACT HIT written HIT_B14_flip_3a_c59_1791849202.txt +[0s] NEW MIN cost=58 n=8 it=5844 +EXACT HIT written HIT_B14_flip_3a_c58_1791849202.txt +[0s] NEW MIN cost=56 n=8 it=6119 +EXACT HIT written HIT_B14_flip_3a_c56_1791849202.txt +[128s] it=67108864 uniq<=64:189844 cur=56 n=8 bestever=56 acc=7024327 split=6708832 merge=139078 +[257s] it=134217728 uniq<=64:364338 cur=56 n=8 bestever=56 acc=14045641 split=13418622 merge=277629 +[382s] it=201326592 uniq<=64:536578 cur=56 n=8 bestever=56 acc=21093756 split=20130644 merge=416291 +[507s] it=268435456 uniq<=64:694929 cur=56 n=8 bestever=56 acc=28147818 split=26837890 merge=554723 +[632s] it=335544320 uniq<=64:862760 cur=56 n=8 bestever=56 acc=35171265 split=33547099 merge=693821 +[758s] it=402653184 uniq<=64:1022164 cur=56 n=8 bestever=56 acc=42191720 split=40257657 merge=832477 +[891s] it=469762048 uniq<=64:1182041 cur=63 n=9 bestever=56 acc=49224827 split=46973535 merge=971881 +[1037s] it=536870912 uniq<=64:1339608 cur=56 n=8 bestever=56 acc=56252630 split=53684156 merge=1110887 +[1178s] it=603979776 uniq<=64:1503731 cur=56 n=8 bestever=56 acc=63343673 split=60397937 merge=1248340 +[1358s] it=671088640 uniq<=64:1660990 cur=56 n=8 bestever=56 acc=70361245 split=67106641 merge=1386818 +[1531s] it=738197504 uniq<=64:1816522 cur=56 n=8 bestever=56 acc=77410144 split=73818152 merge=1526025 +[1674s] it=805306368 uniq<=64:1974013 cur=56 n=8 bestever=56 acc=84529459 split=80530529 merge=1662805 +[1830s] it=872415232 uniq<=64:2097153 cur=56 n=8 bestever=56 acc=91560526 split=87240445 merge=1801314 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D3/B14_flip_3b.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/B14_flip_3b.out new file mode 100644 index 0000000000..b4acb48a75 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/B14_flip_3b.out @@ -0,0 +1,57 @@ +[0] start tag=B14_flip_3b NP=104 cost=64 tau=0.50 nmax=20 cap=3 +[0s] NEW MIN cost=63 n=8 it=1729 +EXACT HIT written HIT_B14_flip_3b_c63_1791849202.txt +[0s] NEW MIN cost=62 n=8 it=1731 +EXACT HIT written HIT_B14_flip_3b_c62_1791849202.txt +[0s] NEW MIN cost=61 n=8 it=28770 +EXACT HIT written HIT_B14_flip_3b_c61_1791849202.txt +[11s] NEW MIN cost=60 n=8 it=16028578 +EXACT HIT written HIT_B14_flip_3b_c60_1791849213.txt +[11s] NEW MIN cost=58 n=8 it=16028846 +EXACT HIT written HIT_B14_flip_3b_c58_1791849213.txt +[11s] NEW MIN cost=56 n=8 it=16050365 +EXACT HIT written HIT_B14_flip_3b_c56_1791849213.txt +[40s] it=67108864 uniq<=64:2255 cur=76 n=20 bestever=56 acc=8280286 split=165747 merge=31153 +[79s] it=134217728 uniq<=64:6131 cur=73 n=20 bestever=56 acc=16587944 split=391493 merge=66759 +[121s] it=201326592 uniq<=64:8402 cur=80 n=20 bestever=56 acc=25123044 split=603817 merge=110258 +[166s] it=268435456 uniq<=64:10934 cur=79 n=20 bestever=56 acc=33418870 split=779117 merge=143170 +[205s] it=335544320 uniq<=64:15458 cur=77 n=20 bestever=56 acc=41751786 split=987493 merge=174300 +[246s] it=402653184 uniq<=64:21134 cur=79 n=20 bestever=56 acc=50189513 split=1276218 merge=214331 +[287s] it=469762048 uniq<=64:24427 cur=78 n=20 bestever=56 acc=58576979 split=1465696 merge=250292 +[326s] it=536870912 uniq<=64:28477 cur=81 n=20 bestever=56 acc=66982968 split=1654125 merge=287332 +[364s] it=603979776 uniq<=64:31572 cur=76 n=20 bestever=56 acc=75301124 split=1838466 merge=321994 +[406s] it=671088640 uniq<=64:37816 cur=80 n=20 bestever=56 acc=83685354 split=2064114 merge=362030 +[442s] it=738197504 uniq<=64:42321 cur=79 n=20 bestever=56 acc=91966950 split=2278147 merge=398892 +[480s] it=805306368 uniq<=64:43611 cur=77 n=20 bestever=56 acc=100290959 split=2403205 merge=427388 +[522s] it=872415232 uniq<=64:48428 cur=84 n=20 bestever=56 acc=108691193 split=2655854 merge=469941 +[560s] it=939524096 uniq<=64:49761 cur=77 n=20 bestever=56 acc=116987825 split=2781675 merge=496029 +[598s] it=1006632960 uniq<=64:52989 cur=80 n=20 bestever=56 acc=125375369 split=2985956 merge=526851 +[637s] it=1073741824 uniq<=64:56898 cur=69 n=20 bestever=56 acc=133664929 split=3194689 merge=562270 +[675s] it=1140850688 uniq<=64:58976 cur=79 n=20 bestever=56 acc=141933990 split=3338007 merge=596562 +[714s] it=1207959552 uniq<=64:62366 cur=81 n=19 bestever=56 acc=150272118 split=3519443 merge=629991 +[755s] it=1275068416 uniq<=64:65114 cur=79 n=20 bestever=56 acc=158571472 split=3692824 merge=663629 +[794s] it=1342177280 uniq<=64:68308 cur=79 n=20 bestever=56 acc=166860787 split=3888458 merge=698096 +[835s] it=1409286144 uniq<=64:72129 cur=76 n=19 bestever=56 acc=175249998 split=4080590 merge=737790 +[882s] it=1476395008 uniq<=64:74190 cur=80 n=20 bestever=56 acc=183557084 split=4234852 merge=772864 +[926s] it=1543503872 uniq<=64:76824 cur=76 n=20 bestever=56 acc=191836176 split=4379700 merge=803630 +[972s] it=1610612736 uniq<=64:80314 cur=78 n=20 bestever=56 acc=200227872 split=4582333 merge=839432 +[1014s] it=1677721600 uniq<=64:84482 cur=79 n=20 bestever=56 acc=208608884 split=4864437 merge=885957 +[1064s] it=1744830464 uniq<=64:88116 cur=80 n=20 bestever=56 acc=217120391 split=5064141 merge=918439 +[1107s] it=1811939328 uniq<=64:90921 cur=76 n=20 bestever=56 acc=225386756 split=5257824 merge=955283 +[1154s] it=1879048192 uniq<=64:94310 cur=78 n=20 bestever=56 acc=233769684 split=5436920 merge=987946 +[1197s] it=1946157056 uniq<=64:97492 cur=80 n=20 bestever=56 acc=242135370 split=5666310 merge=1029890 +[1257s] it=2013265920 uniq<=64:100268 cur=77 n=20 bestever=56 acc=250486768 split=5829857 merge=1062074 +[1319s] it=2080374784 uniq<=64:102229 cur=79 n=20 bestever=56 acc=258840027 split=5958142 merge=1090795 +[1366s] it=2147483648 uniq<=64:106257 cur=79 n=20 bestever=56 acc=267170422 split=6154328 merge=1128248 +[1418s] it=2214592512 uniq<=64:108793 cur=76 n=20 bestever=56 acc=275549085 split=6349137 merge=1160630 +[1470s] it=2281701376 uniq<=64:111914 cur=79 n=20 bestever=56 acc=283936131 split=6512340 merge=1190969 +[1527s] it=2348810240 uniq<=64:114962 cur=76 n=20 bestever=56 acc=292202493 split=6711242 merge=1233534 +[1573s] it=2415919104 uniq<=64:119756 cur=79 n=20 bestever=56 acc=300744207 split=6920042 merge=1266547 +[1622s] it=2483027968 uniq<=64:123115 cur=81 n=20 bestever=56 acc=309154744 split=7125881 merge=1304033 +[1665s] it=2550136832 uniq<=64:125826 cur=80 n=20 bestever=56 acc=317467282 split=7304655 merge=1340941 +[1712s] it=2617245696 uniq<=64:129982 cur=76 n=20 bestever=56 acc=325798535 split=7535038 merge=1382089 +[1760s] it=2684354560 uniq<=64:135128 cur=70 n=20 bestever=56 acc=334094003 split=7720230 merge=1412367 +[1808s] it=2751463424 uniq<=64:138428 cur=77 n=20 bestever=56 acc=342388395 split=7891358 merge=1445506 +[1860s] it=2818572288 uniq<=64:140495 cur=78 n=20 bestever=56 acc=350712630 split=8025004 merge=1473586 +[1906s] it=2885681152 uniq<=64:143195 cur=74 n=20 bestever=56 acc=358995788 split=8189490 merge=1504925 +[1958s] it=2952790016 uniq<=64:145338 cur=77 n=20 bestever=56 acc=367320201 split=8359648 merge=1542636 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D3/B14_flip_3c.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/B14_flip_3c.out new file mode 100644 index 0000000000..1da57a2b45 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/B14_flip_3c.out @@ -0,0 +1,46 @@ +[0] start tag=B14_flip_3c NP=104 cost=64 tau=0.40 nmax=16 cap=2 +[0s] NEW MIN cost=63 n=8 it=2165 +EXACT HIT written HIT_B14_flip_3c_c63_1791849202.txt +[0s] NEW MIN cost=62 n=8 it=3612 +EXACT HIT written HIT_B14_flip_3c_c62_1791849202.txt +[3s] NEW MIN cost=60 n=8 it=4698050 +EXACT HIT written HIT_B14_flip_3c_c60_1791849205.txt +[3s] NEW MIN cost=58 n=8 it=4730554 +EXACT HIT written HIT_B14_flip_3c_c58_1791849205.txt +[52s] it=67108864 uniq<=64:93386 cur=60 n=8 bestever=58 acc=7846083 split=6709968 merge=191774 +[101s] it=134217728 uniq<=64:177034 cur=62 n=8 bestever=58 acc=15578388 split=13420901 merge=361278 +[154s] it=201326592 uniq<=64:249551 cur=68 n=9 bestever=58 acc=23387408 split=20124748 merge=539563 +[206s] it=268435456 uniq<=64:308498 cur=67 n=9 bestever=58 acc=31224246 split=26836582 merge=719417 +[257s] it=335544320 uniq<=64:369796 cur=61 n=8 bestever=58 acc=39075585 split=33549922 merge=927581 +[305s] it=402653184 uniq<=64:417764 cur=67 n=9 bestever=58 acc=46788937 split=40258136 merge=1091930 +[355s] it=469762048 uniq<=64:471144 cur=69 n=9 bestever=58 acc=54546230 split=46968427 merge=1244391 +[360s] NEW MIN cost=56 n=8 it=478123511 +EXACT HIT written HIT_B14_flip_3c_c56_1791849562.txt +[403s] it=536870912 uniq<=64:531873 cur=64 n=8 bestever=56 acc=62255694 split=53677251 merge=1414731 +[452s] it=603979776 uniq<=64:579438 cur=67 n=9 bestever=56 acc=70005089 split=60390042 merge=1555277 +[500s] it=671088640 uniq<=64:625670 cur=60 n=8 bestever=56 acc=77744425 split=67096881 merge=1723207 +[550s] it=738197504 uniq<=64:680053 cur=63 n=8 bestever=56 acc=85544549 split=73807456 merge=1904842 +[598s] it=805306368 uniq<=64:713318 cur=67 n=9 bestever=56 acc=93257842 split=80515813 merge=2072060 +[648s] it=872415232 uniq<=64:752090 cur=69 n=9 bestever=56 acc=101044603 split=87226574 merge=2257613 +[698s] it=939524096 uniq<=64:791544 cur=65 n=8 bestever=56 acc=108852665 split=93927658 merge=2435961 +[746s] it=1006632960 uniq<=64:826802 cur=61 n=8 bestever=56 acc=116531762 split=100639352 merge=2580067 +[795s] it=1073741824 uniq<=64:859855 cur=58 n=8 bestever=56 acc=124376657 split=107348842 merge=2755513 +[848s] it=1140850688 uniq<=64:899227 cur=60 n=8 bestever=56 acc=132131553 split=114056221 merge=2941056 +[907s] it=1207959552 uniq<=64:936225 cur=60 n=8 bestever=56 acc=139930984 split=120763927 merge=3116740 +[966s] it=1275068416 uniq<=64:974372 cur=68 n=9 bestever=56 acc=147726289 split=127468072 merge=3307141 +[1023s] it=1342177280 uniq<=64:1007329 cur=64 n=8 bestever=56 acc=155495437 split=134175586 merge=3465733 +[1081s] it=1409286144 uniq<=64:1042215 cur=67 n=9 bestever=56 acc=163273116 split=140886757 merge=3655295 +[1137s] it=1476395008 uniq<=64:1068291 cur=67 n=9 bestever=56 acc=171010648 split=147592807 merge=3820503 +[1190s] it=1543503872 uniq<=64:1096785 cur=60 n=8 bestever=56 acc=178631616 split=154303338 merge=3950611 +[1262s] it=1610612736 uniq<=64:1122280 cur=60 n=8 bestever=56 acc=186443688 split=161012836 merge=4135878 +[1339s] it=1677721600 uniq<=64:1147231 cur=68 n=9 bestever=56 acc=194210796 split=167726718 merge=4276755 +[1400s] it=1744830464 uniq<=64:1178772 cur=71 n=9 bestever=56 acc=201989653 split=174436769 merge=4452951 +[1466s] it=1811939328 uniq<=64:1211909 cur=71 n=9 bestever=56 acc=209749894 split=181143648 merge=4614054 +[1540s] it=1879048192 uniq<=64:1242225 cur=67 n=9 bestever=56 acc=217547890 split=187856793 merge=4804588 +[1597s] it=1946157056 uniq<=64:1267742 cur=63 n=8 bestever=56 acc=225282764 split=194563610 merge=4959330 +[1654s] it=2013265920 uniq<=64:1288587 cur=67 n=9 bestever=56 acc=233024129 split=201270199 merge=5140813 +[1717s] it=2080374784 uniq<=64:1323582 cur=67 n=9 bestever=56 acc=240966212 split=207979831 merge=5328414 +[1780s] it=2147483648 uniq<=64:1346933 cur=67 n=9 bestever=56 acc=248744865 split=214688786 merge=5496317 +[1844s] it=2214592512 uniq<=64:1375545 cur=61 n=8 bestever=56 acc=256601156 split=221394752 merge=5684129 +[1906s] it=2281701376 uniq<=64:1411514 cur=60 n=8 bestever=56 acc=264376528 split=228105504 merge=5860518 +[1966s] it=2348810240 uniq<=64:1428552 cur=61 n=8 bestever=56 acc=272041098 split=234818135 merge=6006842 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D3/c1_0.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/c1_0.out new file mode 100644 index 0000000000..4340922114 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/c1_0.out @@ -0,0 +1,3 @@ +[0] start tag=c1_0 NP=111 cost=64 tau=0.30 nmax=12 cap=1 +[61s] DONE it=61669376 uniq<=64:43 bestever=64 acc=6262889 n>8@<=64:42 maxn=9 +hist: 64:6008777 65:18 66:6 67:8 68:15 69:14 70:22 71:112 72:247200 73:10 74:12 75:12 76:14 77:18 78:50 79:118 80:6338 81:10 82:1 83:3 84:2 85:4 86:2 87:9 88:113 89:1 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D3/c1_111.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/c1_111.out new file mode 100644 index 0000000000..fe28f64fba --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/c1_111.out @@ -0,0 +1,3 @@ +[0] start tag=c1_111 NP=111 cost=64 tau=0.30 nmax=12 cap=1 +[61s] DONE it=61669376 uniq<=64:50 bestever=64 acc=6263074 n>8@<=64:49 maxn=9 +hist: 64:6009307 65:8 66:1 67:5 68:22 69:7 70:71 71:125 72:246798 73:5 74:4 75:5 76:30 77:22 78:43 79:153 80:6340 83:1 84:3 85:2 86:3 87:4 88:115 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D3/c2_0.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/c2_0.out new file mode 100644 index 0000000000..a9c5d83b99 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/c2_0.out @@ -0,0 +1,5 @@ +[0] start tag=c2_0 NP=111 cost=64 tau=0.30 nmax=12 cap=2 +[0s] NEW MIN cost=63 n=8 it=13382 +EXACT HIT written HIT_c2_0_c63_1791850584.txt +[61s] DONE it=40239104 uniq<=64:79119 bestever=63 acc=5571919 n>8@<=64:113 maxn=9 +hist: 63:450794 64:1830366 65:1175458 66:876193 67:188748 68:334315 69:61339 70:16179 71:48611 72:207664 73:147939 74:107077 75:39258 76:26818 77:11350 78:4339 79:5649 80:11645 81:8411 82:11620 83:3988 84:1577 85:813 86:221 87:335 88:458 89:324 90:430 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D3/c2_111.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/c2_111.out new file mode 100644 index 0000000000..d2bf783273 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/c2_111.out @@ -0,0 +1,5 @@ +[0] start tag=c2_111 NP=111 cost=64 tau=0.30 nmax=12 cap=2 +[0s] NEW MIN cost=63 n=8 it=33349 +EXACT HIT written HIT_c2_111_c63_1791850584.txt +[61s] DONE it=39649280 uniq<=64:62774 bestever=63 acc=5477186 n>8@<=64:7 maxn=9 +hist: 63:445307 64:1761851 65:1512647 66:920058 67:169165 68:26368 69:3800 70:7563 71:58009 72:153280 73:215570 74:119162 75:33937 76:6631 77:1568 78:1100 79:3832 80:10293 81:13148 82:8741 83:2433 84:693 85:158 86:201 87:177 88:319 89:738 90:437 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D3/g0.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/g0.out new file mode 100644 index 0000000000..bf185bd046 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/g0.out @@ -0,0 +1,5 @@ +[0] start tag=g0 NP=111 cost=64 tau=0.30 nmax=12 cap=3 +[0s] NEW MIN cost=63 n=8 it=11547 +EXACT HIT written HIT_g0_c63_1791850415.txt +[121s] DONE it=47579136 uniq<=64:468539 bestever=63 acc=8279641 n>8@<=64:2025 maxn=9 +hist: 63:500599 64:1510151 65:1644099 66:1270755 67:854111 68:544932 69:298500 70:150875 71:115995 72:247611 73:270055 74:227407 75:168256 76:121664 77:82210 78:51194 79:31508 80:37967 81:36334 82:29710 83:23172 84:19062 85:13830 86:8281 87:7028 88:6174 89:4600 90:3561 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D3/g1.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/g1.out new file mode 100644 index 0000000000..54b3a58ee0 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/g1.out @@ -0,0 +1,5 @@ +[0] start tag=g1 NP=111 cost=64 tau=0.30 nmax=12 cap=3 +[0s] NEW MIN cost=63 n=8 it=374 +EXACT HIT written HIT_g1_c63_1791850415.txt +[121s] DONE it=44302336 uniq<=64:611291 bestever=63 acc=7953050 n>8@<=64:839 maxn=9 +hist: 63:446065 64:1433672 65:1706826 66:1357432 67:841250 68:432403 69:191545 70:80688 71:94481 72:246892 73:294322 74:254689 75:182360 76:110063 77:62545 78:29711 79:19205 80:28862 81:32248 82:31758 83:25212 84:17021 85:12352 86:6179 87:4011 88:3776 89:3379 90:4103 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D3/g111.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/g111.out new file mode 100644 index 0000000000..4457f56e12 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/g111.out @@ -0,0 +1,5 @@ +[0] start tag=g111 NP=111 cost=64 tau=0.30 nmax=12 cap=3 +[0s] NEW MIN cost=63 n=8 it=18505 +EXACT HIT written HIT_g111_c63_1791850416.txt +[121s] DONE it=45744128 uniq<=64:609231 bestever=63 acc=8246518 n>8@<=64:26000 maxn=10 +hist: 63:425787 64:1528125 65:1763560 66:1349382 67:813990 68:437717 69:214997 70:114699 71:101212 72:265386 73:318850 74:270346 75:189370 76:117034 77:68486 78:39299 79:23999 80:38309 81:40919 82:38340 83:27984 84:20002 85:13213 86:6821 87:4617 88:4241 89:4709 90:5124 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D3/g30.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/g30.out new file mode 100644 index 0000000000..9d03bd3914 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/g30.out @@ -0,0 +1,5 @@ +[0] start tag=g30 NP=111 cost=64 tau=0.30 nmax=12 cap=3 +[0s] NEW MIN cost=63 n=8 it=384 +EXACT HIT written HIT_g30_c63_1791850415.txt +[121s] DONE it=44105728 uniq<=64:701626 bestever=63 acc=8096090 n>8@<=64:15658 maxn=10 +hist: 63:397882 64:1679494 65:1531760 66:1104488 67:687649 68:451207 69:296617 70:197170 71:173801 72:324766 73:288851 74:229830 75:167415 76:117122 77:83939 78:62269 79:47569 80:58848 81:48741 82:35365 83:28617 84:22510 85:15625 86:10857 87:8501 88:10227 89:7327 90:7643 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D3/g48.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/g48.out new file mode 100644 index 0000000000..3d67de7d4f --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/g48.out @@ -0,0 +1,5 @@ +[0] start tag=g48 NP=111 cost=64 tau=0.30 nmax=12 cap=3 +[0s] NEW MIN cost=63 n=8 it=863 +EXACT HIT written HIT_g48_c63_1791850415.txt +[121s] DONE it=45613056 uniq<=64:619669 bestever=63 acc=8235821 n>8@<=64:5091 maxn=10 +hist: 63:307266 64:1830143 65:1570440 66:1162149 67:719929 68:448071 69:280045 70:175675 71:172558 72:325460 73:310806 74:238585 75:171497 76:122420 77:78696 78:56591 79:41122 80:51561 81:41707 82:32992 83:28289 84:22607 85:15045 86:9378 87:6919 88:6549 89:5193 90:4128 diff --git a/research/format-limits-2/s5-6-decoders-spec/evidence/D3/g70.out b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/g70.out new file mode 100644 index 0000000000..41daa47a24 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/evidence/D3/g70.out @@ -0,0 +1,5 @@ +[0] start tag=g70 NP=111 cost=64 tau=0.30 nmax=12 cap=3 +[0s] NEW MIN cost=63 n=8 it=7105 +EXACT HIT written HIT_g70_c63_1791850415.txt +[121s] DONE it=45219840 uniq<=64:581204 bestever=63 acc=8096546 n>8@<=64:12555 maxn=11 +hist: 63:732209 64:1589628 65:1407931 66:1066792 67:751343 68:505495 69:306584 70:167951 71:140574 72:258348 73:259464 74:220004 75:174071 76:135364 77:91941 78:56083 79:33668 80:33858 81:34574 82:33628 83:26784 84:22428 85:14051 86:10434 87:6945 88:6130 89:6014 90:4250 diff --git a/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P104/HIT_flip_3a.txt b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P104/HIT_flip_3a.txt new file mode 100644 index 0000000000..458ddb13dc --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P104/HIT_flip_3a.txt @@ -0,0 +1,26 @@ +cost 56 n 8 NP 104 +D(cols) +term 0 cost 7 + d: 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + t: 0 2 0 2 2 0 2 0 2 0 2 -2 0 -2 0 -2 0 -2 0 -2 -2 0 -2 0 -2 0 -2 -2 0 0 -2 0 -2 0 -2 -2 0 2 0 0 2 2 0 2 0 0 0 -2 -2 -2 -2 2 0 0 0 0 0 0 -2 2 0 0 0 0 0 -2 2 2 2 0 2 0 0 0 2 0 0 0 0 0 0 -2 2 2 2 0 2 0 0 2 2 2 0 2 0 0 0 2 2 2 2 2 2 0 +term 1 cost 7 + d: 0 2 2 0 2 0 0 2 2 2 0 0 2 2 2 0 0 2 2 0 2 0 -2 -2 0 0 -2 0 -2 2 0 0 2 2 0 2 0 2 0 2 0 0 -2 -2 2 0 2 2 0 2 0 0 0 2 0 0 -2 0 0 2 2 2 2 0 2 2 2 0 2 2 0 0 2 0 0 0 2 0 0 -2 0 0 0 -2 0 0 -2 -2 -2 2 0 2 2 0 0 2 0 0 2 0 0 -2 0 0 + t: 0 0 0 0 1 -1 -1 1 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 1 1 1 -1 -1 -1 0 0 1 1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 1 1 -1 -1 0 0 0 1 1 -1 -1 0 0 +term 2 cost 7 + d: 0 0 2 -2 0 0 0 0 0 0 0 -2 -2 0 -2 -2 -2 -2 -2 -2 -2 -2 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 -2 -2 -2 -2 -2 -2 -2 0 0 0 0 0 0 0 -2 -2 -2 -2 -2 -2 -2 -2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 + t: 1 -1 1 -1 0 0 0 0 0 0 0 1 -1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 +term 3 cost 7 + d: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + t: 2 0 2 0 0 2 2 0 2 0 2 2 0 2 0 2 2 0 2 0 0 2 2 2 0 2 0 0 2 0 2 2 0 2 0 0 2 0 -2 -2 0 2 0 2 2 2 2 0 2 2 2 2 0 0 0 2 2 2 0 2 0 0 2 2 2 0 0 0 0 -2 2 0 0 0 2 0 0 0 2 2 2 0 0 0 0 -2 2 0 0 0 0 0 -2 2 0 0 0 -2 -2 -2 0 0 0 -2 +term 4 cost 7 + d: 0 0 0 0 0 0 0 0 1 1 -1 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 1 -1 1 -1 1 -1 -1 1 -1 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 0 0 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 -1 1 -1 0 0 0 0 1 -1 0 1 -1 1 -1 0 0 + t: 0 0 0 0 0 0 2 -2 0 2 -2 0 0 0 0 0 2 -2 0 0 2 -2 0 2 -2 0 0 2 -2 0 0 2 -2 0 0 2 -2 0 0 2 -2 2 2 0 2 0 -2 0 2 0 -2 0 2 0 -2 2 0 -2 0 0 2 -2 2 0 -2 0 2 0 -2 0 0 2 0 -2 0 2 0 -2 2 0 -2 0 2 0 -2 0 0 2 -2 2 0 -2 0 0 2 0 -2 2 0 -2 2 0 -2 0 +term 5 cost 7 + d: 2 2 2 2 2 2 2 2 0 2 2 0 0 0 0 0 0 0 -2 2 0 0 0 0 0 -2 2 0 0 0 0 0 0 -2 2 0 0 -2 2 0 0 -2 2 0 0 2 0 2 2 0 2 0 2 0 2 0 2 0 2 0 2 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 2 0 2 0 2 0 2 0 2 2 0 2 0 2 0 2 + t: 0 0 0 0 0 0 0 0 -1 1 -1 0 0 0 0 0 0 0 -1 1 1 -1 0 0 0 -1 1 1 -1 0 0 0 0 -1 1 1 -1 -1 1 1 -1 -1 1 -1 0 0 -1 1 1 0 0 -1 1 0 0 0 0 -1 1 -1 1 0 0 0 -1 1 0 0 -1 1 -1 1 0 0 -1 1 0 0 0 0 -1 1 0 0 -1 1 -1 1 0 0 0 -1 1 -1 1 0 0 1 0 0 0 0 -1 1 +term 6 cost 7 + d: 1 -1 -1 1 0 0 0 0 0 0 0 1 -1 -1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 + t: 2 -2 0 0 2 -2 0 0 0 0 0 2 -2 0 2 -2 0 0 0 0 0 0 0 2 2 2 2 2 2 2 -2 0 0 0 0 0 0 2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 2 2 2 0 0 0 0 0 0 0 -2 -2 -2 -2 0 0 0 0 -2 -2 -2 -2 2 2 2 2 0 0 0 0 2 2 2 2 0 0 0 0 0 0 0 -2 -2 -2 -2 0 0 0 -2 -2 -2 -2 +term 7 cost 7 + d: 2 0 0 2 0 2 0 2 2 2 0 0 -2 -2 -2 0 -2 0 0 -2 0 -2 2 0 2 2 0 2 0 -2 0 -2 0 0 -2 0 -2 0 -2 0 -2 0 -2 -2 0 -2 0 0 0 2 0 0 0 2 0 2 0 2 2 -2 -2 -2 0 -2 0 0 0 -2 0 0 0 0 2 0 0 0 2 0 2 0 2 2 2 0 2 2 2 2 2 0 -2 0 0 0 0 2 0 0 2 0 2 0 2 2 + t: 0 0 0 0 -1 1 -1 1 0 0 0 0 0 0 -1 1 -1 1 0 0 0 0 1 -1 1 0 0 0 0 -1 1 -1 1 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 -1 -1 0 0 0 0 1 1 -1 0 0 0 0 1 1 diff --git a/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P104/HIT_flip_3b.txt b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P104/HIT_flip_3b.txt new file mode 100644 index 0000000000..3eba762e13 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P104/HIT_flip_3b.txt @@ -0,0 +1,26 @@ +cost 56 n 8 NP 104 +D(cols) +term 0 cost 7 + d: 0 0 0 0 1 -1 -1 1 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 1 1 1 -1 -1 -1 0 0 1 1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 1 1 -1 -1 0 0 0 1 1 -1 -1 0 0 + t: -2 0 -2 0 0 -2 -2 0 -2 0 -2 -2 0 -2 0 -2 -2 0 -2 0 0 -2 -2 -2 0 -2 0 0 -2 0 -2 -2 0 -2 0 0 -2 0 2 2 0 -2 0 -2 -2 -2 -2 0 -2 -2 -2 -2 0 0 0 -2 -2 -2 0 -2 0 0 -2 -2 -2 0 0 0 0 2 -2 0 0 0 -2 0 0 0 -2 -2 -2 0 0 0 0 2 -2 0 0 0 0 0 2 -2 0 0 0 2 2 2 0 0 0 2 +term 1 cost 7 + d: 0 1 1 0 1 0 0 1 1 1 0 0 1 1 1 0 0 1 1 0 1 0 -1 -1 0 0 -1 0 -1 1 0 0 1 1 0 1 0 1 0 1 0 0 -1 -1 1 0 1 1 0 1 0 0 0 1 0 0 -1 0 0 1 1 1 1 0 1 1 1 0 1 1 0 0 1 0 0 0 1 0 0 -1 0 0 0 -1 0 0 -1 -1 -1 1 0 1 1 0 0 1 0 0 1 0 0 -1 0 0 + t: 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +term 2 cost 7 + d: 1 -1 -1 1 0 0 0 0 0 0 0 1 -1 -1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 + t: 0 0 -2 2 0 0 0 0 0 0 0 2 2 0 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 -2 -2 -2 -2 -2 -2 -2 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 -2 -2 -2 -2 -2 -2 -2 -2 0 0 0 0 0 0 0 -2 -2 -2 -2 -2 -2 -2 -2 0 0 0 0 0 0 0 +term 3 cost 7 + d: 0 0 0 0 2 -2 2 -2 0 0 0 0 0 0 2 -2 2 -2 0 0 0 0 -2 2 -2 0 0 0 0 2 -2 2 -2 0 0 0 0 2 2 2 2 2 2 2 2 2 0 0 0 -2 -2 2 2 0 0 0 0 -2 -2 2 2 0 0 0 -2 -2 2 2 0 0 0 0 -2 -2 2 2 0 0 0 0 -2 -2 2 2 0 0 0 0 -2 2 2 0 0 0 0 -2 -2 2 0 0 0 0 -2 -2 + t: 0 1 0 1 1 0 1 0 1 0 1 -1 0 -1 0 -1 0 -1 0 -1 -1 0 -1 0 -1 0 -1 -1 0 0 -1 0 -1 0 -1 -1 0 1 0 0 1 1 0 1 0 0 0 -1 -1 -1 -1 1 0 0 0 0 0 0 -1 1 0 0 0 0 0 -1 1 1 1 0 1 0 0 0 1 0 0 0 0 0 0 -1 1 1 1 0 1 0 0 1 1 1 0 1 0 0 0 1 1 1 1 1 1 0 +term 4 cost 7 + d: 0 0 0 0 0 0 2 -2 0 2 -2 0 0 0 0 0 2 -2 0 0 2 -2 0 2 -2 0 0 2 -2 0 0 2 -2 0 0 2 -2 0 0 2 -2 2 2 0 2 0 -2 0 2 0 -2 0 2 0 -2 2 0 -2 0 0 2 -2 2 0 -2 0 2 0 -2 0 0 2 0 -2 0 2 0 -2 2 0 -2 0 2 0 -2 0 0 2 -2 2 0 -2 0 0 2 0 -2 2 0 -2 2 0 -2 0 + t: 0 0 0 0 0 0 0 0 -1 1 -1 0 0 0 0 0 0 0 -1 1 1 -1 0 0 0 -1 1 1 -1 0 0 0 0 -1 1 1 -1 -1 1 1 -1 -1 1 -1 0 0 -1 1 1 0 0 -1 1 0 0 0 0 -1 1 -1 1 0 0 0 -1 1 0 0 -1 1 -1 1 0 0 -1 1 0 0 0 0 -1 1 0 0 -1 1 -1 1 0 0 0 -1 1 -1 1 0 0 1 0 0 0 0 -1 1 +term 5 cost 7 + d: 2 0 0 2 0 2 0 2 2 2 0 0 -2 -2 -2 0 -2 0 0 -2 0 -2 2 0 2 2 0 2 0 -2 0 -2 0 0 -2 0 -2 0 -2 0 -2 0 -2 -2 0 -2 0 0 0 2 0 0 0 2 0 2 0 2 2 -2 -2 -2 0 -2 0 0 0 -2 0 0 0 0 2 0 0 0 2 0 2 0 2 2 2 0 2 2 2 2 2 0 -2 0 0 0 0 2 0 0 2 0 2 0 2 2 + t: 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +term 6 cost 7 + d: 0 0 0 0 0 0 0 0 1 1 -1 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 1 -1 1 -1 1 -1 -1 1 -1 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 0 0 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 -1 1 -1 0 0 0 0 1 -1 0 1 -1 1 -1 0 0 + t: -2 -2 -2 -2 -2 -2 -2 -2 0 -2 -2 0 0 0 0 0 0 0 2 -2 0 0 0 0 0 2 -2 0 0 0 0 0 0 2 -2 0 0 2 -2 0 0 2 -2 0 0 -2 0 -2 -2 0 -2 0 -2 0 -2 0 -2 0 -2 0 -2 -2 0 -2 0 -2 0 -2 0 -2 0 -2 0 -2 0 -2 0 -2 0 -2 0 -2 0 -2 0 -2 0 -2 -2 0 -2 0 -2 0 -2 0 -2 -2 0 -2 0 -2 0 -2 +term 7 cost 7 + d: 2 -2 0 0 2 -2 0 0 0 0 0 2 -2 0 2 -2 0 0 0 0 0 0 0 2 2 2 2 2 2 2 -2 0 0 0 0 0 0 2 2 2 2 0 0 0 2 2 2 2 0 0 0 2 2 2 2 0 0 0 0 0 0 0 -2 -2 -2 -2 0 0 0 0 -2 -2 -2 -2 2 2 2 2 0 0 0 0 2 2 2 2 0 0 0 0 0 0 0 -2 -2 -2 -2 0 0 0 -2 -2 -2 -2 + t: 1 -1 1 -1 0 0 0 0 0 0 0 1 -1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 diff --git a/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P104/HIT_flip_3c.txt b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P104/HIT_flip_3c.txt new file mode 100644 index 0000000000..c922c8cae9 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P104/HIT_flip_3c.txt @@ -0,0 +1,26 @@ +cost 56 n 8 NP 104 +D(cols) +term 0 cost 7 + d: 0 0 0 0 0 0 2 -2 0 2 -2 0 0 0 0 0 2 -2 0 0 2 -2 0 2 -2 0 0 2 -2 0 0 2 -2 0 0 2 -2 0 0 2 -2 2 2 0 2 0 -2 0 2 0 -2 0 2 0 -2 2 0 -2 0 0 2 -2 2 0 -2 0 2 0 -2 0 0 2 0 -2 0 2 0 -2 2 0 -2 0 2 0 -2 0 0 2 -2 2 0 -2 0 0 2 0 -2 2 0 -2 2 0 -2 0 + t: 0 0 0 0 0 0 0 0 -1 1 -1 0 0 0 0 0 0 0 -1 1 1 -1 0 0 0 -1 1 1 -1 0 0 0 0 -1 1 1 -1 -1 1 1 -1 -1 1 -1 0 0 -1 1 1 0 0 -1 1 0 0 0 0 -1 1 -1 1 0 0 0 -1 1 0 0 -1 1 -1 1 0 0 -1 1 0 0 0 0 -1 1 0 0 -1 1 -1 1 0 0 0 -1 1 -1 1 0 0 1 0 0 0 0 -1 1 +term 1 cost 7 + d: 1 -1 0 0 1 -1 0 0 0 0 0 1 -1 0 1 -1 0 0 0 0 0 0 0 1 1 1 1 1 1 1 -1 0 0 0 0 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0 1 1 1 1 0 0 0 0 0 0 0 -1 -1 -1 -1 0 0 0 0 -1 -1 -1 -1 1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 -1 -1 -1 -1 0 0 0 -1 -1 -1 -1 + t: 2 -2 2 -2 0 0 0 0 0 0 0 2 -2 2 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 -2 -2 -2 -2 -2 -2 -2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 -2 -2 -2 -2 -2 -2 +term 2 cost 7 + d: 0 0 0 0 1 -1 1 -1 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 1 1 0 0 0 0 -1 -1 1 0 0 0 0 -1 -1 + t: 0 2 0 2 2 0 2 0 2 0 2 -2 0 -2 0 -2 0 -2 0 -2 -2 0 -2 0 -2 0 -2 -2 0 0 -2 0 -2 0 -2 -2 0 2 0 0 2 2 0 2 0 0 0 -2 -2 -2 -2 2 0 0 0 0 0 0 -2 2 0 0 0 0 0 -2 2 2 2 0 2 0 0 0 2 0 0 0 0 0 0 -2 2 2 2 0 2 0 0 2 2 2 0 2 0 0 0 2 2 2 2 2 2 0 +term 3 cost 7 + d: 1 -1 -1 1 0 0 0 0 0 0 0 1 -1 -1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 + t: 0 0 -2 2 0 0 0 0 0 0 0 2 2 0 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 -2 -2 -2 -2 -2 -2 -2 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 -2 -2 -2 -2 -2 -2 -2 -2 0 0 0 0 0 0 0 -2 -2 -2 -2 -2 -2 -2 -2 0 0 0 0 0 0 0 +term 4 cost 7 + d: 1 0 0 1 0 1 0 1 1 1 0 0 -1 -1 -1 0 -1 0 0 -1 0 -1 1 0 1 1 0 1 0 -1 0 -1 0 0 -1 0 -1 0 -1 0 -1 0 -1 -1 0 -1 0 0 0 1 0 0 0 1 0 1 0 1 1 -1 -1 -1 0 -1 0 0 0 -1 0 0 0 0 1 0 0 0 1 0 1 0 1 1 1 0 1 1 1 1 1 0 -1 0 0 0 0 1 0 0 1 0 1 0 1 1 + t: 2 2 2 2 2 2 2 2 2 2 2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 +term 5 cost 7 + d: 0 2 2 0 2 0 0 2 2 2 0 0 2 2 2 0 0 2 2 0 2 0 -2 -2 0 0 -2 0 -2 2 0 0 2 2 0 2 0 2 0 2 0 0 -2 -2 2 0 2 2 0 2 0 0 0 2 0 0 -2 0 0 2 2 2 2 0 2 2 2 0 2 2 0 0 2 0 0 0 2 0 0 -2 0 0 0 -2 0 0 -2 -2 -2 2 0 2 2 0 0 2 0 0 2 0 0 -2 0 0 + t: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +term 6 cost 7 + d: 0 0 0 0 1 -1 -1 1 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 1 1 1 -1 -1 -1 0 0 1 1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 1 1 -1 -1 0 0 0 1 1 -1 -1 0 0 + t: -2 0 -2 0 0 -2 -2 0 -2 0 -2 -2 0 -2 0 -2 -2 0 -2 0 0 -2 -2 -2 0 -2 0 0 -2 0 -2 -2 0 -2 0 0 -2 0 2 2 0 -2 0 -2 -2 -2 -2 0 -2 -2 -2 -2 0 0 0 -2 -2 -2 0 -2 0 0 -2 -2 -2 0 0 0 0 2 -2 0 0 0 -2 0 0 0 -2 -2 -2 0 0 0 0 2 -2 0 0 0 0 0 2 -2 0 0 0 2 2 2 0 0 0 2 +term 7 cost 7 + d: 0 0 0 0 0 0 0 0 2 2 -2 0 0 0 0 0 0 0 2 -2 2 -2 0 0 0 2 -2 2 -2 0 0 0 0 2 -2 2 -2 2 -2 2 -2 2 -2 -2 2 -2 0 0 0 2 -2 0 0 2 -2 2 -2 0 0 0 0 -2 2 -2 0 0 2 -2 0 0 0 0 2 -2 0 0 2 -2 2 -2 0 0 2 -2 0 0 0 0 -2 2 -2 0 0 0 0 2 -2 0 2 -2 2 -2 0 0 + t: -1 -1 -1 -1 -1 -1 -1 -1 0 -1 -1 0 0 0 0 0 0 0 1 -1 0 0 0 0 0 1 -1 0 0 0 0 0 0 1 -1 0 0 1 -1 0 0 1 -1 0 0 -1 0 -1 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 -1 0 -1 0 -1 0 -1 0 -1 -1 0 -1 0 -1 0 -1 diff --git a/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_c2_0.txt b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_c2_0.txt new file mode 100644 index 0000000000..a61bd7d97c --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_c2_0.txt @@ -0,0 +1,26 @@ +cost 63 n 8 NP 111 +D(cols) +term 0 cost 8 + d: 0 0 0 0 0 2 -2 0 0 0 0 0 0 0 0 0 0 2 -2 0 0 0 0 0 0 2 -2 0 0 0 0 0 0 2 -2 0 0 0 0 0 0 0 0 2 2 2 2 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 + t: 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 +term 1 cost 8 + d: 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 + t: 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 +term 2 cost 8 + d: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + t: 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 +term 3 cost 7 + d: 0 2 2 2 2 2 2 2 2 2 2 2 -2 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + t: 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +term 4 cost 8 + d: 0 0 0 1 -1 -1 1 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 1 1 1 -1 -1 -1 -1 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 + t: 0 0 0 2 -2 0 0 0 0 0 0 0 0 0 0 2 -2 0 0 0 0 0 0 2 -2 0 0 0 0 0 0 2 -2 0 0 0 0 0 0 2 2 2 2 0 0 0 0 1 1 1 1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 +term 5 cost 8 + d: 1 -1 1 0 0 0 0 0 0 0 0 -1 1 -1 1 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 + t: 2 0 2 1 1 1 1 1 1 1 1 -2 0 -2 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 +term 6 cost 8 + d: 1 1 -1 0 0 0 0 0 0 0 0 -1 1 1 -1 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 + t: 2 2 0 1 1 1 1 1 1 1 1 -2 0 0 -2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 +term 7 cost 8 + d: 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 + t: 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 diff --git a/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_c2_111.txt b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_c2_111.txt new file mode 100644 index 0000000000..cccdfdaa6a --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_c2_111.txt @@ -0,0 +1,26 @@ +cost 63 n 8 NP 111 +D(cols) +term 0 cost 8 + d: 1 -1 1 -1 0 0 0 0 -1 1 1 -1 1 -1 1 -1 0 0 0 0 -1 1 1 -1 1 1 1 1 0 2 2 0 1 1 1 1 0 2 2 0 -1 1 1 -1 -1 1 1 -1 1 1 0 2 0 2 1 1 -1 1 0 0 0 0 -1 1 -1 1 0 0 0 0 -1 1 -1 -1 -2 0 -2 0 -1 -1 0 2 1 1 1 1 0 2 0 0 -1 1 -1 1 0 0 0 0 -1 1 -1 1 0 0 -2 0 -1 -1 -1 -1 -2 + t: 1 -1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 +term 1 cost 8 + d: 1 1 1 1 1 1 1 1 2 0 2 0 1 1 1 1 1 1 1 1 2 0 2 0 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 2 0 1 1 1 1 2 0 1 1 2 0 2 0 1 1 1 1 2 0 2 0 1 1 2 0 1 1 1 1 2 0 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 + t: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +term 2 cost 8 + d: 0 0 0 0 1 -1 1 -1 -1 1 1 -1 0 0 0 0 1 -1 1 -1 -1 1 1 -1 1 -1 1 -1 -1 1 1 -1 1 -1 1 -1 -1 1 1 -1 0 2 2 0 0 2 2 0 1 1 -1 1 -1 1 -1 -1 0 2 0 0 0 0 -2 0 0 2 0 0 0 0 -2 0 1 1 -1 1 -1 1 -1 -1 0 2 0 0 0 0 -2 0 1 1 -1 1 -1 1 -1 -1 1 1 -1 1 -1 1 -1 -1 0 2 0 0 0 0 -2 + t: 0 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 +term 3 cost 8 + d: 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 + t: -1 -1 -1 -1 -1 -1 -1 -1 0 -2 0 -2 -1 -1 -1 -1 -1 -1 -1 -1 0 -2 0 -2 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 0 -2 -1 -1 -1 -1 0 -2 -1 -1 0 -2 0 -2 -1 -1 -1 -1 0 -2 0 -2 -1 -1 0 -2 -1 -1 -1 -1 0 -2 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 +term 4 cost 7 + d: 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 + t: 0 -2 0 -2 0 -2 0 -2 0 -2 -2 0 2 0 2 0 2 0 2 0 2 0 0 2 2 0 2 0 2 0 0 2 2 0 2 0 2 0 0 2 2 0 0 2 2 0 0 2 2 2 2 0 2 0 0 0 2 0 0 0 0 0 0 -2 2 0 0 0 0 0 0 -2 0 0 0 -2 0 -2 -2 -2 2 0 0 0 0 0 0 -2 0 0 0 -2 0 -2 -2 -2 0 0 0 -2 0 -2 -2 -2 0 -2 -2 -2 -2 -2 -2 +term 5 cost 8 + d: 1 -1 -1 1 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 + t: 1 -1 -1 1 1 -1 -1 1 0 0 0 0 1 -1 -1 1 1 -1 -1 1 0 0 0 0 2 0 0 2 1 1 1 1 0 -2 -2 0 -1 -1 -1 -1 1 1 1 1 -1 -1 -1 -1 0 0 1 1 -1 -1 0 0 1 1 2 2 0 0 1 1 -1 -1 0 0 -2 -2 -1 -1 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 1 1 2 2 0 0 1 1 -1 -1 0 0 -2 -2 -1 -1 0 0 1 1 -1 -1 0 +term 6 cost 8 + d: 1 -1 -1 1 -1 1 1 -1 0 0 0 0 1 -1 -1 1 -1 1 1 -1 0 0 0 0 0 2 2 0 1 1 1 1 -2 0 0 -2 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 0 0 -1 -1 1 1 0 0 1 1 0 0 2 2 1 1 -1 -1 -2 -2 0 0 -1 -1 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 1 1 0 0 2 2 1 1 -1 -1 -2 -2 0 0 -1 -1 0 0 -1 -1 1 1 0 + t: 0 0 0 0 -1 1 1 -1 0 0 0 0 0 0 0 0 -1 1 1 -1 0 0 0 0 -1 1 1 -1 0 0 0 0 -1 1 1 -1 0 0 0 0 -1 -1 -1 -1 1 1 1 1 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 +term 7 cost 8 + d: 1 1 1 1 1 1 1 1 2 0 0 2 -1 -1 -1 -1 -1 -1 -1 -1 0 -2 -2 0 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 2 0 1 1 1 1 2 0 1 1 2 0 2 0 1 1 1 1 2 0 2 0 1 1 2 0 1 1 1 1 2 + t: 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 diff --git a/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_g0.txt b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_g0.txt new file mode 100644 index 0000000000..05b86974fe --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_g0.txt @@ -0,0 +1,26 @@ +cost 63 n 8 NP 111 +D(cols) +term 0 cost 8 + d: 1 -1 1 0 0 0 0 0 0 0 0 -1 1 -1 1 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 + t: 2 0 2 2 0 2 0 1 1 1 1 0 2 0 2 2 0 2 0 1 1 1 1 0 -2 0 -2 -1 -1 -1 -1 0 -2 0 -2 -1 -1 -1 -1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 -1 -1 2 2 1 1 1 1 0 0 2 2 1 1 1 1 0 0 3 3 2 2 2 2 1 1 0 0 -1 -1 -1 -1 -2 -2 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 2 2 1 1 1 1 0 0 +term 1 cost 8 + d: 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 + t: 0 0 0 0 0 -2 2 1 -1 -1 1 0 0 0 0 0 0 -2 2 1 -1 -1 1 0 0 -2 2 1 -1 -1 1 0 0 -2 2 1 -1 -1 1 1 -1 -1 1 -1 -3 -3 -1 -1 -1 2 0 0 -2 1 1 0 -2 1 1 -1 -1 2 0 0 -2 1 1 -1 -1 2 0 -1 -1 2 0 0 -2 1 1 0 -2 1 1 -1 -1 2 0 -1 -1 2 0 0 -2 1 1 -1 -1 2 0 0 -2 1 1 0 -2 1 1 -1 -1 2 0 +term 2 cost 8 + d: 1 1 -1 0 0 0 0 0 0 0 0 -1 1 1 -1 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 + t: 2 2 0 1 1 1 1 1 1 1 1 0 2 2 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 +term 3 cost 7 + d: 0 2 2 2 2 2 2 2 2 2 2 2 -2 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + t: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +term 4 cost 8 + d: 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 + t: 0 0 0 -1 1 -1 1 1 -1 1 -1 0 0 0 0 -1 1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 1 -1 0 -2 0 -2 0 -2 0 -2 0 -2 0 0 0 0 2 0 -1 -1 1 -1 1 -1 1 1 -1 -1 1 -1 1 -1 1 1 0 -2 0 0 0 0 2 0 -1 -1 1 -1 1 -1 1 1 0 -2 0 0 0 0 2 0 0 -2 0 0 0 0 2 0 -1 -1 1 -1 1 -1 1 1 +term 5 cost 8 + d: 1 -1 1 -1 1 -1 1 -2 2 0 0 -1 1 -1 1 -1 1 -1 1 -2 2 0 0 -2 0 -2 0 -3 1 -1 -1 -2 0 -2 0 -3 1 -1 -1 -3 1 -1 -1 -3 1 -1 -1 -3 -1 -2 0 -2 0 -1 1 -2 0 -1 1 -1 1 0 2 -2 0 -1 1 -1 1 0 2 -1 1 0 2 0 2 1 3 -3 -1 -2 0 -2 0 -1 1 -2 0 -1 1 -1 1 0 2 -2 0 -1 1 -1 1 0 2 -1 1 0 2 0 2 1 3 + t: 0 0 0 -1 1 -1 1 0 0 0 0 0 0 0 0 -1 1 -1 1 0 0 0 0 -1 1 -1 1 0 0 0 0 -1 1 -1 1 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 +term 6 cost 8 + d: 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + t: 0 0 0 1 -1 -1 1 0 0 0 0 -2 -2 -2 -2 -1 -3 -3 -1 -2 -2 -2 -2 1 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 1 1 1 -1 -1 -1 -1 -1 -1 0 0 -2 -2 -1 -1 -1 -1 0 0 -2 -2 -1 -1 -1 -1 0 0 -2 -2 -1 -1 -1 -1 0 0 -2 -2 -1 -1 1 1 2 2 0 0 1 1 1 1 2 2 0 0 1 1 1 1 2 2 0 0 1 1 1 1 2 2 0 0 1 1 +term 7 cost 8 + d: 1 1 1 0 2 2 0 2 0 0 2 -1 -1 -1 -1 -2 0 0 -2 0 -2 -2 0 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 0 -2 -2 0 2 0 0 2 0 0 0 -2 2 0 0 0 1 -1 -1 -1 1 1 1 -1 1 -1 -1 -1 1 1 1 -1 0 0 0 -2 2 0 0 0 2 0 0 0 2 2 2 0 1 1 1 -1 3 1 1 1 1 1 1 -1 3 1 1 1 2 0 0 0 2 2 2 0 + t: 0 0 0 -1 1 1 -1 0 0 0 0 0 0 0 0 -1 1 1 -1 0 0 0 0 -1 1 1 -1 0 0 0 0 -1 1 1 -1 0 0 0 0 -1 -1 -1 -1 1 1 1 1 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 diff --git a/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_g1.txt b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_g1.txt new file mode 100644 index 0000000000..d3551b792a --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_g1.txt @@ -0,0 +1,26 @@ +cost 63 n 8 NP 111 +D(cols) +term 0 cost 8 + d: 2 2 0 1 1 1 1 1 1 1 1 2 0 2 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 + t: 1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 +term 1 cost 8 + d: 0 0 0 1 -1 1 -1 1 -1 1 -1 2 2 2 2 3 1 3 1 3 1 3 1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 2 0 2 0 2 0 2 0 3 1 1 1 1 1 1 -1 2 2 2 0 2 0 0 0 2 2 2 0 2 0 0 0 3 1 1 1 1 1 1 -1 0 0 0 -2 0 -2 -2 -2 1 -1 -1 -1 -1 -1 -1 -3 1 -1 -1 -1 -1 -1 -1 -3 0 0 0 -2 0 -2 -2 -2 + t: -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 +term 2 cost 7 + d: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + t: 0 2 2 2 2 2 2 2 2 2 2 -2 2 0 0 0 0 0 0 0 0 0 0 -2 -2 -2 -2 -2 -2 -2 -2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 +term 3 cost 8 + d: 2 0 2 0 2 0 2 1 1 1 1 2 0 0 2 0 2 0 2 1 1 1 1 0 2 0 2 1 1 1 1 -2 0 -2 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 1 1 1 1 2 2 1 1 2 2 2 2 3 3 -1 -1 0 0 0 0 1 1 0 0 1 1 1 1 2 2 -1 -1 0 0 0 0 1 1 0 0 1 1 1 1 2 2 -2 -2 -1 -1 -1 -1 0 0 -1 -1 0 0 0 0 1 1 + t: 1 -1 1 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 +term 4 cost 8 + d: 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 + t: 2 0 2 1 1 3 -1 1 1 1 1 0 -2 -2 0 -1 -1 1 -3 -1 -1 -1 -1 1 1 3 -1 1 1 1 1 -1 -1 1 -3 -1 -1 -1 -1 0 0 0 0 2 2 2 2 1 1 -1 -1 1 1 -1 -1 2 2 0 0 2 2 0 0 0 0 -2 -2 0 0 -2 -2 1 1 -1 -1 1 1 -1 -1 2 2 0 0 2 2 0 0 3 3 1 1 3 3 1 1 1 1 -1 -1 1 1 -1 -1 2 2 0 0 2 2 0 0 +term 5 cost 8 + d: 0 0 0 2 -2 0 0 1 -1 1 -1 0 0 0 0 2 -2 0 0 1 -1 1 -1 2 -2 0 0 1 -1 1 -1 2 -2 0 0 1 -1 1 -1 3 1 3 1 1 -1 1 -1 2 0 1 1 -1 -1 0 -2 1 1 2 0 0 -2 -1 -1 1 1 2 0 0 -2 -1 -1 2 0 1 1 -1 -1 0 -2 1 1 2 0 0 -2 -1 -1 2 0 1 1 -1 -1 0 -2 2 0 1 1 -1 -1 0 -2 1 1 2 0 0 -2 -1 -1 + t: 0 0 0 1 -1 -1 1 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 1 1 1 -1 -1 -1 -1 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 +term 6 cost 8 + d: 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 + t: 1 1 1 0 2 2 0 1 1 3 -1 -1 -1 -1 -1 -2 0 0 -2 -1 -1 1 -3 -1 1 1 -1 0 0 2 -2 -1 1 1 -1 0 0 2 -2 -1 -1 1 -3 1 1 3 -1 1 -1 -2 0 0 2 1 -1 -1 1 0 -2 2 0 -1 1 -1 1 0 -2 2 0 -1 1 1 -1 -2 0 0 2 1 -1 0 2 1 -1 3 1 0 2 2 0 -1 1 1 3 2 0 2 0 -1 1 1 3 2 0 0 2 1 -1 3 1 0 2 +term 7 cost 8 + d: 0 0 0 0 0 0 0 2 -2 0 0 0 0 0 0 0 0 0 0 2 -2 0 0 0 0 0 0 2 -2 0 0 0 0 0 0 2 -2 0 0 2 -2 0 0 2 -2 0 0 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 + t: 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 diff --git a/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_g111.txt b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_g111.txt new file mode 100644 index 0000000000..21930b3506 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_g111.txt @@ -0,0 +1,26 @@ +cost 63 n 8 NP 111 +D(cols) +term 0 cost 8 + d: 1 -1 1 -1 -2 2 0 0 -1 1 -1 1 1 -1 1 -1 -2 2 0 0 -1 1 -1 1 -1 3 1 1 0 2 0 2 -1 3 1 1 0 2 0 2 -3 -1 -3 -1 -1 1 -1 1 -1 1 0 0 2 2 1 3 -1 -1 -2 0 0 2 1 1 -1 -1 -2 0 0 2 1 1 -3 -1 -2 -2 0 0 -1 1 0 0 -1 1 1 3 2 2 -2 0 -1 -1 1 1 0 2 -2 0 -1 -1 1 1 0 2 -2 -2 -3 -1 -1 1 0 + t: 0 0 0 0 -1 1 -1 1 0 0 0 0 0 0 0 0 -1 1 -1 1 0 0 0 0 -1 1 -1 1 0 0 0 0 -1 1 -1 1 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 +term 1 cost 8 + d: 3 -1 1 1 1 1 1 1 0 2 0 2 1 -3 -1 -1 -1 -1 -1 -1 -2 0 -2 0 2 2 2 2 1 3 1 3 0 0 0 0 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 0 2 1 1 1 1 0 2 1 1 0 2 0 2 1 1 -1 -1 -2 0 -2 0 -1 -1 -2 0 -1 -1 -1 -1 -2 0 2 2 1 3 1 3 2 2 1 3 2 2 2 2 1 3 -1 1 0 0 0 0 -1 1 0 0 -1 1 -1 1 0 + t: 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +term 2 cost 8 + d: 0 0 0 0 1 -1 -1 1 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 1 1 1 -1 -1 -1 -1 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 + t: -1 -1 -1 -1 -1 -1 -3 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -3 1 -1 -1 -1 -1 0 0 -2 2 0 0 0 0 0 0 -2 2 0 0 0 0 0 0 0 0 -2 -2 -2 -2 -2 -2 0 0 -2 -2 0 0 -2 -2 0 0 -2 -2 0 0 -2 -2 0 0 -2 -2 0 0 -2 -2 0 0 -2 -2 0 0 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 +term 3 cost 8 + d: 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 + t: 1 1 1 1 0 2 0 2 1 1 3 -1 -1 -1 -1 -1 -2 0 -2 0 -1 -1 1 -3 -1 1 -1 1 0 0 2 -2 -1 1 -1 1 0 0 2 -2 -1 -1 1 -3 -1 -1 1 -3 0 -2 -1 1 -1 1 2 0 -2 0 1 -1 1 -1 0 2 -2 0 1 -1 1 -1 0 2 0 -2 -1 1 -1 1 2 0 -1 1 2 0 2 0 1 3 1 -1 0 2 0 2 3 1 1 -1 0 2 0 2 3 1 -1 1 2 0 2 0 1 +term 4 cost 8 + d: 0 2 2 0 2 0 0 2 1 1 1 1 0 2 2 0 2 0 0 2 1 1 1 1 0 -2 -2 0 -1 -1 -1 -1 2 0 0 2 1 1 1 1 1 1 1 1 -1 -1 -1 -1 1 1 2 2 0 0 1 1 0 0 1 1 -1 -1 0 0 2 2 3 3 1 1 2 2 1 1 2 2 0 0 1 1 0 0 1 1 -1 -1 0 0 -1 -1 0 0 -2 -2 -1 -1 1 1 2 2 0 0 1 1 0 0 1 1 -1 -1 0 + t: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 +term 5 cost 7 + d: 1 -1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 + t: 0 -2 0 -2 0 -2 0 -2 0 -2 -2 0 2 0 2 0 2 0 2 0 2 0 0 2 2 0 2 0 2 0 0 2 2 0 2 0 2 0 0 2 2 0 0 2 2 0 0 2 2 2 2 0 2 0 0 0 2 0 0 0 0 0 0 -2 2 0 0 0 0 0 0 -2 0 0 0 -2 0 -2 -2 -2 2 0 0 0 0 0 0 -2 0 0 0 -2 0 -2 -2 -2 0 0 0 -2 0 -2 -2 -2 0 -2 -2 -2 -2 -2 -2 +term 6 cost 8 + d: 1 -1 0 0 0 0 0 0 -1 1 0 0 1 -1 0 0 0 0 0 0 -1 1 0 0 1 1 1 1 0 2 1 1 0 0 0 0 -1 1 0 0 -1 1 0 0 -1 1 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 0 -1 + t: 0 0 0 0 0 0 0 0 -2 2 2 -2 0 0 0 0 0 0 0 0 -2 2 2 -2 0 0 0 0 -2 2 2 -2 0 0 0 0 -2 2 2 -2 -2 2 2 -2 -2 2 2 -2 0 0 -2 2 -2 2 0 0 -2 2 0 0 0 0 -2 2 -2 2 0 0 0 0 -2 2 0 0 -2 2 -2 2 0 0 -2 2 0 0 0 0 -2 2 0 0 -2 2 -2 2 0 0 0 0 -2 2 -2 2 0 0 -2 2 0 0 0 0 -2 +term 7 cost 8 + d: 1 -1 -1 1 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 + t: 1 -1 -1 1 0 0 0 0 1 -1 -1 1 3 1 1 3 2 2 2 2 3 1 1 3 1 1 1 1 2 0 0 2 -1 -1 -1 -1 0 -2 -2 0 1 -1 -1 1 1 -1 -1 1 1 1 2 0 2 0 1 1 3 1 2 2 2 2 3 1 1 -1 0 0 0 0 1 -1 1 1 2 0 2 0 1 1 0 -2 -1 -1 -1 -1 0 -2 0 0 1 -1 1 -1 0 0 -2 -2 -1 -3 -1 -3 -2 -2 0 -2 -1 -1 -1 -1 0 diff --git a/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_g30.txt b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_g30.txt new file mode 100644 index 0000000000..3d75a14d74 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_g30.txt @@ -0,0 +1,26 @@ +cost 63 n 8 NP 111 +D(cols) +term 0 cost 8 + d: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + t: 2 0 0 2 1 1 1 1 1 1 1 1 2 0 0 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 +term 1 cost 8 + d: 2 0 2 0 2 0 2 0 0 2 0 2 0 -2 0 -2 0 -2 0 -2 -2 0 -2 0 2 0 2 0 0 2 2 2 0 2 0 0 2 0 2 0 2 0 2 0 2 0 2 1 3 1 1 1 1 -1 1 1 1 -1 1 -1 1 -1 -1 1 1 -1 1 -1 1 -1 -1 -1 1 -1 -1 -1 -1 -3 -1 3 3 1 3 1 3 1 1 1 3 1 1 1 1 -1 1 1 3 1 1 1 1 -1 1 1 1 -1 1 -1 1 -1 -1 + t: 0 0 0 0 0 0 0 0 -1 1 -1 1 0 0 0 0 0 0 0 0 -1 1 -1 1 0 0 0 0 -1 1 1 0 0 0 0 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 0 0 0 0 -1 1 0 0 -1 1 -1 1 0 0 0 0 -1 1 -1 1 0 0 -1 1 0 0 0 0 -1 1 0 0 -1 1 -1 1 0 0 -1 1 0 0 0 0 -1 1 -1 1 0 0 0 0 -1 1 0 0 -1 1 -1 1 0 0 +term 2 cost 7 + d: 1 -1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 + t: 2 -2 0 0 0 0 0 0 0 0 2 -2 2 -2 0 0 0 0 0 0 0 0 2 -2 2 2 2 2 2 2 0 0 0 0 0 0 0 2 -2 0 0 2 -2 0 0 2 -2 2 0 0 2 0 2 2 0 0 2 2 0 2 0 0 2 -2 0 0 -2 0 -2 -2 0 0 -2 -2 0 -2 0 0 -2 0 2 2 0 2 0 0 2 2 0 0 2 0 2 2 0 0 -2 -2 0 -2 0 0 -2 -2 0 0 -2 0 -2 -2 0 +term 3 cost 8 + d: 1 1 3 -1 0 2 0 2 1 1 1 1 1 1 3 -1 0 2 0 2 1 1 1 1 -1 1 -1 1 0 0 0 1 3 1 3 2 2 2 2 -1 -1 -1 -1 -1 -1 -1 -1 1 1 2 2 2 2 3 3 -1 -1 0 0 0 0 1 1 1 1 2 2 2 2 3 3 -1 -1 0 0 0 0 1 1 0 0 1 1 1 1 2 2 -2 -2 -1 -1 -1 -1 0 0 0 0 1 1 1 1 2 2 -2 -2 -1 -1 -1 -1 0 0 + t: -1 1 1 -1 0 0 0 0 0 0 0 0 -1 1 1 -1 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 +term 4 cost 8 + d: 0 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 1 -1 1 -1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 + t: -1 1 1 -1 1 -1 1 -1 1 -1 1 -1 -1 1 1 -1 1 -1 1 -1 1 -1 1 -1 0 -2 0 -2 0 -2 -2 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 0 0 0 0 0 -2 0 0 0 -2 0 -2 -2 -2 2 2 2 0 2 0 0 0 2 0 0 0 0 0 0 -2 1 1 1 -1 1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -3 3 1 1 1 1 1 1 -1 1 1 1 -1 1 -1 -1 -1 +term 5 cost 8 + d: 1 1 1 1 2 0 0 2 1 1 1 1 -1 -1 -1 -1 0 -2 -2 0 -1 -1 -1 -1 1 -1 -1 1 0 0 0 1 -1 -1 1 0 0 0 0 1 1 1 1 -1 -1 -1 -1 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 1 1 2 2 0 0 1 1 1 1 2 2 0 0 1 1 1 1 2 2 0 0 1 1 1 1 2 2 0 0 1 1 + t: 0 0 0 0 1 -1 -1 1 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 1 -1 -1 1 0 0 0 0 1 1 1 1 -1 -1 -1 -1 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 +term 6 cost 8 + d: 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 + t: 1 1 1 1 0 2 2 0 2 0 2 0 -1 -1 -1 -1 -2 0 0 -2 0 -2 0 -2 -1 1 1 -1 1 -1 -1 -1 1 1 -1 1 -1 1 -1 0 -2 0 -2 2 0 2 0 1 -1 -1 -1 1 1 1 -1 0 0 0 -2 2 0 0 0 0 0 0 -2 2 0 0 0 1 -1 -1 -1 1 1 1 -1 1 1 1 -1 3 1 1 1 2 0 0 0 2 2 2 0 2 0 0 0 2 2 2 0 1 1 1 -1 3 1 1 1 +term 7 cost 8 + d: 1 -1 1 -1 0 0 0 0 1 -1 -1 1 1 -1 1 -1 0 0 0 0 1 -1 -1 1 1 1 1 1 2 0 2 1 1 1 1 2 0 0 2 1 -1 -1 1 1 -1 -1 1 1 1 2 0 2 0 1 1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 -1 -1 0 -2 0 -2 -1 -1 2 0 1 1 1 1 2 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 -2 -1 -1 -1 -1 0 -2 + t: 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 1 0 0 0 0 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 diff --git a/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_g48.txt b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_g48.txt new file mode 100644 index 0000000000..991e2566fa --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_g48.txt @@ -0,0 +1,26 @@ +cost 63 n 8 NP 111 +D(cols) +term 0 cost 8 + d: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + t: 0 2 0 2 1 1 1 1 2 0 0 2 0 2 0 2 1 1 1 1 2 0 0 2 -1 -1 -1 -1 0 -2 -2 0 -1 -1 -1 -1 0 -2 -2 0 1 -1 -1 1 1 -1 -1 1 0 1 -1 1 -1 0 0 2 0 1 1 1 1 2 0 2 0 1 1 1 1 2 0 2 2 3 1 3 1 2 2 0 -2 -1 -1 -1 -1 0 -2 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 2 0 1 1 1 1 2 0 +term 1 cost 8 + d: 2 0 0 2 2 0 0 2 2 0 2 0 0 -2 -2 0 0 -2 -2 0 0 -2 0 -2 2 0 0 2 2 0 2 0 0 -2 -2 0 0 -2 0 -2 2 0 2 0 0 -2 0 -2 -1 1 1 -1 -1 1 -1 1 1 3 1 1 -1 1 1 -1 -1 1 -1 -1 -3 -1 -1 1 -1 1 1 -1 -1 1 -1 1 1 3 1 1 -1 1 1 3 1 3 3 1 1 3 1 1 -1 1 1 -1 -1 1 -1 1 1 3 1 1 -1 1 1 + t: 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 +term 2 cost 7 + d: 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 2 2 2 2 2 0 2 2 2 0 2 0 0 0 2 2 2 0 2 0 0 0 2 0 0 0 0 0 0 -2 2 2 2 0 2 0 0 0 2 0 0 0 0 0 0 -2 2 0 0 0 0 0 0 -2 0 0 0 -2 0 -2 -2 -2 + t: 1 -1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 +term 3 cost 8 + d: 1 -1 -1 1 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 + t: 0 -2 -2 0 -1 -1 -1 -1 -1 -1 -1 -1 2 0 0 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 -2 -2 -2 -2 -2 -2 -2 -2 -1 -1 -1 -1 -1 -1 -1 -1 +term 4 cost 8 + d: 0 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 + t: -1 1 -1 1 1 -1 1 -1 -1 1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 1 -1 0 -2 0 -2 -2 0 0 -2 0 -2 0 -2 -2 0 0 -2 0 2 2 0 0 2 2 0 0 -2 0 -2 0 -2 -2 0 2 0 0 0 0 -2 0 0 2 0 0 0 0 -2 0 2 2 0 2 0 2 0 0 -1 1 -1 -1 -1 -1 -3 -1 1 1 -1 1 -1 1 -1 -1 1 1 -1 1 -1 1 -1 -1 1 3 1 1 1 1 -1 1 +term 5 cost 8 + d: 0 0 0 0 1 -1 -1 1 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 1 1 1 -1 -1 -1 -1 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 + t: -1 -1 -1 -1 0 -2 -2 0 -2 0 0 -2 1 1 1 1 2 0 0 2 0 2 2 0 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 0 2 2 0 -2 0 0 -2 0 0 2 -2 0 0 0 -1 1 1 1 -1 -1 -1 1 -1 1 1 1 -1 -1 -1 1 0 0 0 2 -2 0 0 0 -2 0 0 0 -2 -2 -2 0 -1 -1 -1 1 -3 -1 -1 -1 -1 -1 -1 1 -3 -1 -1 -1 -2 0 0 0 -2 -2 -2 0 +term 6 cost 8 + d: 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 + t: -2 0 -2 0 -1 -1 -1 -1 0 -2 0 -2 0 2 0 2 1 1 1 1 2 0 2 0 -1 -1 -1 -1 0 -2 0 -2 -1 -1 -1 -1 0 -2 0 -2 1 -1 1 -1 1 -1 1 -1 -2 -1 -1 -1 -1 0 -2 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 2 0 1 1 1 1 2 0 -2 -2 -1 -3 -1 -3 -2 -2 0 -2 -1 -1 -1 -1 0 -2 0 -2 -1 -1 -1 -1 0 -2 0 0 1 -1 1 -1 0 0 +term 7 cost 8 + d: 1 1 1 1 -1 3 1 1 0 2 2 0 1 1 1 1 -1 3 1 1 0 2 2 0 -2 2 0 0 -1 1 1 -1 -2 2 0 0 -1 1 1 -1 -3 -1 -1 -3 -1 1 1 -1 0 -1 1 1 3 2 2 -1 1 0 0 2 2 1 3 -1 1 0 0 2 2 1 3 0 0 -1 1 1 3 2 2 -2 0 -1 -1 1 1 0 2 -1 -1 -2 0 0 2 1 1 -1 -1 -2 0 0 2 1 1 -2 0 -1 -1 1 1 0 2 + t: 0 0 0 0 0 0 0 0 -1 1 1 -1 0 0 0 0 0 0 0 0 -1 1 1 -1 0 0 0 0 -1 1 1 -1 0 0 0 0 -1 1 1 -1 -1 1 1 -1 -1 1 1 -1 0 -1 1 -1 1 0 0 -1 1 0 0 0 0 -1 1 -1 1 0 0 0 0 -1 1 0 0 -1 1 -1 1 0 0 -1 1 0 0 0 0 -1 1 0 0 -1 1 -1 1 0 0 0 0 -1 1 -1 1 0 0 -1 1 0 0 0 0 -1 1 diff --git a/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_g70.txt b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_g70.txt new file mode 100644 index 0000000000..aa48bc2b8b --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/inputs/local-hits/P111/HIT_g70.txt @@ -0,0 +1,26 @@ +cost 63 n 8 NP 111 +D(cols) +term 0 cost 8 + d: 1 1 1 1 0 2 0 2 2 0 2 0 1 1 1 1 0 2 0 2 2 0 2 0 -1 1 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 1 -1 0 -2 0 -2 0 -2 0 -2 1 -1 1 1 1 1 3 1 0 0 2 0 2 0 2 2 0 0 2 0 2 0 2 1 -1 1 1 1 1 3 1 -1 -1 1 -1 1 -1 1 1 0 -2 0 0 0 0 2 0 0 -2 0 0 0 0 2 0 -1 -1 1 -1 1 -1 1 1 + t: 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 +term 1 cost 8 + d: 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 1 -1 -1 1 1 -1 -1 1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 -1 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 1 -1 0 0 0 0 1 -1 + t: 0 -2 -2 0 -1 -1 -1 -1 0 -2 -2 0 2 0 0 2 1 1 1 1 2 0 0 2 1 1 1 1 2 0 0 2 -1 -1 -1 -1 0 -2 -2 0 1 -1 -1 1 1 -1 -1 1 0 0 1 -1 1 -1 0 0 2 0 1 1 1 1 2 0 0 -2 -1 -1 -1 -1 -2 0 0 1 -1 1 -1 0 0 0 -2 -1 -1 -1 -1 0 -2 0 0 1 -1 1 -1 0 0 -2 -2 -1 -3 -1 -3 -2 -2 0 -2 -1 -1 -1 -1 0 -2 +term 2 cost 7 + d: 0 2 2 0 0 2 0 2 2 0 0 2 0 2 2 0 0 2 0 2 2 0 0 2 -2 0 -2 0 0 -2 -2 0 0 2 0 2 2 0 0 2 0 -2 -2 0 0 -2 -2 0 0 0 2 0 2 0 2 2 0 -2 0 0 0 0 2 0 2 0 2 2 2 2 2 0 0 2 0 2 0 2 2 0 -2 0 0 0 0 2 0 -2 -2 0 -2 0 -2 0 0 0 0 2 0 2 0 2 2 0 -2 0 0 0 0 2 0 + t: -1 1 1 -1 0 0 0 0 0 0 0 0 -1 1 1 -1 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 +term 3 cost 8 + d: 1 -1 1 -1 1 -1 1 -1 0 0 0 0 1 -1 1 -1 1 -1 1 -1 0 0 0 0 2 0 2 0 1 1 1 1 2 0 2 0 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 0 0 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 0 0 -1 -1 -1 -1 -2 -2 2 2 1 1 1 1 0 0 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 0 0 -1 -1 -1 -1 -2 -2 + t: 1 -1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 -1 -1 -1 -1 -1 -1 -1 +term 4 cost 8 + d: 0 0 0 0 1 -1 -1 1 0 0 0 0 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 1 1 1 -1 -1 -1 -1 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 + t: 1 1 1 1 2 0 0 2 1 1 1 1 -1 -1 -1 -1 0 -2 -2 0 -1 -1 -1 -1 1 -1 -1 1 0 0 0 0 1 -1 -1 1 0 0 0 0 1 1 1 1 -1 -1 -1 -1 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 0 1 1 -1 -1 0 0 0 1 1 -1 -1 0 0 1 1 2 2 0 0 1 1 1 1 2 2 0 0 1 1 1 1 2 2 0 0 1 1 1 1 2 2 0 0 1 1 +term 5 cost 8 + d: 0 0 0 0 1 -1 1 -1 0 0 0 0 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 -1 1 -1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 1 1 0 0 0 0 -1 -1 + t: -2 2 0 0 1 -1 1 -1 1 -1 1 -1 -2 2 0 0 1 -1 1 -1 1 -1 1 -1 -1 -3 -1 -3 -1 -3 -1 -3 1 -1 1 -1 1 -1 1 -1 2 0 2 0 2 0 2 0 1 -1 -1 -1 -1 -1 -1 -3 0 0 0 -2 0 -2 -2 -2 2 2 2 0 2 0 0 3 1 1 1 1 1 1 -1 0 0 0 -2 0 -2 -2 -2 1 -1 -1 -1 -1 -1 -1 -3 3 1 1 1 1 1 1 -1 2 2 2 0 2 0 0 0 +term 6 cost 8 + d: 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + t: 2 0 0 2 1 1 1 1 0 2 0 2 2 0 0 2 1 1 1 1 0 2 0 2 1 1 1 1 0 2 0 2 -1 -1 -1 -1 -2 0 -2 0 -1 1 -1 1 -1 1 -1 1 0 2 1 1 1 1 0 2 2 2 1 3 1 3 2 2 0 0 -1 1 -1 1 0 0 2 1 1 1 1 0 2 0 0 -1 1 -1 1 0 0 0 2 1 1 1 1 0 2 -2 0 -1 -1 -1 -1 -2 0 0 0 -1 1 -1 1 0 0 +term 7 cost 8 + d: 1 1 1 1 0 2 2 0 2 0 0 2 -1 -1 -1 -1 -2 0 0 -2 0 -2 -2 0 -1 1 1 -1 1 -1 -1 1 -1 1 1 -1 1 -1 -1 1 0 -2 -2 0 2 0 0 2 0 0 0 -2 2 0 0 0 1 -1 -1 -1 1 1 1 -1 1 -1 -1 -1 1 1 -1 0 0 0 -2 2 0 0 0 2 0 0 0 2 2 2 0 1 1 1 -1 3 1 1 1 1 1 1 -1 3 1 1 1 2 0 0 0 2 2 2 0 + t: 1 1 1 1 1 1 1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 diff --git a/research/format-limits-2/s5-6-decoders-spec/inputs/main/notes/general-clifford-frames.tex b/research/format-limits-2/s5-6-decoders-spec/inputs/main/notes/general-clifford-frames.tex new file mode 100644 index 0000000000..0367eeb005 --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/inputs/main/notes/general-clifford-frames.tex @@ -0,0 +1,102 @@ +\subsection{Preimage frames for arbitrary binary subspaces} +This frame construction is due to icekylinx with OpenAI GPT-6 Astra assistance; +the present exposition and integration use Codex. +Let $H=\mathbb F_2^h$ with the standard dot product. In the binary +symplectic space $H\oplus H$ put +\[ + L_0=\{(0,z)\},\qquad + F=\begin{pmatrix}I&I\\0&I\end{pmatrix},\qquad + L_F=FL_0=\{(z,z)\}. +\] +We also write $F$ for the exact Gaussian-dyadic operator $C^{\otimes h}$. +Its exact square is a Pauli translation; only its binary symplectic square +is the identity. For an exact Clifford operator $T$ the frame label is +$L(T)=T^{-1}L_0$. The physical transition from $T$ to $S$ is $ST^{-1}$, +and its Fourier rank is +$d(L(S),L(T))$, where $d(L,L')=h-\dim(L\cap L')$. +This follows by transporting the intersection by $S$: the intersection +with $L_0$ computes the kernel dimension of the $B$ block of $ST^{-1}$. + +\begin{lemma} +For every subspace $U\subseteq H$, including degenerate subspaces, +\[ + L_U=\{(u,u+v):u\in U,\ v\in U^\perp\} +\] +is Lagrangian, and +\[ + d(L_U,L_V)=\dim U+\dim V-2\dim(U\cap V),\qquad + FL_U=L_{U^\perp}. +\] +\end{lemma} +\begin{proof} +The displayed parametrization is injective and has dimension $h$. +Its symplectic pairing is $u\cdot v'+v\cdot u'=0$. +In an intersection, $u$ belongs to $U\cap V$ and $v$ to +$(U+V)^\perp$, giving the asserted dimension and distance. +Finally $F(u,u+v)=(v,u+v)$ proves the complement identity. +\end{proof} + +\subsection{Exact representatives and nested children} +Choose a deterministic invertible binary matrix $G$ carrying the first +$r=\dim U$ coordinate space $E_r$ to $U$, and set +\[ + K_G=\begin{pmatrix}G&0\\G+G^{-T}&G^{-T}\end{pmatrix},\qquad + T_U=K_G T_{E_r}K_G^{-1}. +\] +Here $T_{E_r}$ is the exact coordinate $C$ operator, and the $K_G$ are +exact Gaussian-dyadic Clifford lifts. The matrix $K_G$ is symplectic +because $G^TG+I$ is symmetric. It fixes both $L_0,L_F$ and maps $L_V$ +to $L_{GV}$. Thus both $K_G$ and $FK_GF^{-1}$ have Fourier rank zero; +their lifts are fixed binary address permutations with unit quadratic +phases. In particular, +\[ + L(T_U)=L_U,\quad \operatorname{rank}B(T_U)=r,\quad + \operatorname{rank}B(FT_UF^{-1})=r,\quad T_U^2\text{ is Pauli}. +\] +Set $V_U=GE_r^\perp$, a direct complement of $U$. The binary action gives +$T_U^{-1}L_F=L_{V_U}$ and hence +$\operatorname{rank}B(FT_U^{-1})=h-r$. +No assertion $V_U=U^\perp$ is needed. +For the norm-one source lines and their orthogonal target hyperplanes, +retain the inherited exact representatives; set $T_0=I,T_H=F$. +At every common scalar gate use one identical exact representative on all +incident registers. If separately transported representatives have the +same preimage, their physical ratio has rank zero and is implemented as +an actual left adapter before the gate. + +For $U\subseteq V$, the exact transition $T_VT_U^{-1}$ has rank +$\dim V-\dim U$. Clifford elimination expresses it as two rank-zero +adapters surrounding that many coordinate Fourier factors. These factors +are a single $C^{\otimes r}$ child: the scaled Hadamard satisfies +\[ + \frac{1+i}{2}\begin{pmatrix}1&1\\1&-1\end{pmatrix} + =SCS,\qquad S=\operatorname{diag}(1,i). +\] +Thus no new irrational field is introduced. All adapters are charged +finite movement and scalar operations. Exact transitions telescope; +commutativity between distinct $T_U$ is unnecessary. + +\subsection{Dirty tails and reverse/complement words} +A dirty role entering with gauge $T_\sigma$ and whose last active frame +is $T_U$, with $\sigma\subseteq U$, is assigned terminal gauge +$FT_\sigma$. Its logical value is restored by the complete transparent +scalar word, so its physical action is exactly $F$. The tail is +$FT_\sigma T_U^{-1}$. Its rank is +\[ + d(L_U,L_{V_\sigma})=h-\dim U+\dim\sigma. +\] +Indeed $H=\sigma\oplus V_\sigma$ and $U\supseteq\sigma$ imply +$\dim(U\cap V_\sigma)=\dim U-\dim\sigma$. +An inactive exterior adds $m-h$, giving $m-\dim U+\dim\sigma$. + +For the complete time-reversed word use +\[ + D_U=T_UF^{-1},\qquad L(D_U)=L_{U^\perp},\qquad + D_UD_V^{-1}=T_UT_V^{-1}. +\] +The last equality is exact, so reversal preserves every inverse transition +rank. Reverse the scalar signs and the whole transparent word, including +old-value corrections and final cleanup. The endpoints $D_0=F^{-1}$ +and $F$ differ by a Pauli, and the inherited norm-one endpoints are +reconciled by actual rank-zero adapters. Neither equality of binary +matrices nor equality of frame cosets substitutes for these operators. diff --git a/research/format-limits-2/s5-6-decoders-spec/inputs/main/upstream/build/sections/03-motifs.tex b/research/format-limits-2/s5-6-decoders-spec/inputs/main/upstream/build/sections/03-motifs.tex new file mode 100644 index 0000000000..cdb0ba527a --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/inputs/main/upstream/build/sections/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}}0$, write each chunk as $m$ +consecutive $b=e/m$ digit fields, giving vectors $H,D$ over +$\mathbb Z/q^b\mathbb Z$. We first construct the shear $H\leftarrow H+D$. + +Split whole rows cyclically into $W$ role streams within each prefix +preceding the row field. Write the original row number as +$r=Wg+(w-1)$ with $1\le w\le W$; stream $w$ has row number $g$. +These streams have exactly the same remaining shape, including the +full ranges of $H$ and $D$. Each has +logical volume $V/W$, and its row count is divisible by $W^{k-1}$. + +For a rational matrix $M$, let $\Phi_M$ act on an array by moving its +entry at address $(H,D)$ to $(H+MD,D)$, with every spectator unchanged. +Thus $\Phi_M$ is the array permutation induced by that address map. +Its inverse is $\Phi_{-M}$ and +$\Phi_{M'}\Phi_M=\Phi_{M'+M}$. On every circuit edge apply +$\Phi_{A_e}$ to that role stream; implement it by +Lemma~\ref{lem:matrix-shear}, recursively interchanging each pivot pair +of $b$-digit fields. Execute each circuit gate pointwise at matching +addresses of its role streams. + +The row split supplies the common address set used in the +frame identity~\eqref{eq:common-frame-identity}. Here the frame at a +vertex with matrix $M$ is the address permutation $\Phi_M$, and every +edge changes it by $\Phi_{M'-M}$. The same invariant proof applies +because a common address permutation commutes with every pointwise +bit gate. For the physical input arrays $f_w$, the logical arrays are +$g_w=\Phi_{-M_{\mathrm{in}(w)}}f_w$; this only specifies their +interpretation, with no initial tape operation. The logical circuit +routes $g_w$ to role $\rho(w)$. Thus its physical output satisfies +\[ + f'_{\rho(w)} + =\Phi_{M_{\mathrm{out}(\rho(w))}} + \Phi_{-M_{\mathrm{in}(w)}}f_w + =\Phi_{I_m}f_w, +\] +by~\eqref{eq:finite-shear-contract}. Merge by returning row $g$ of +output role $\rho(w)$ to the original row $Wg+(w-1)$ within the same +preceding prefix. This undoes $\rho$ and restores row order. The result +is $H\leftarrow H+D$ on every original row, including rows assigned +to scratch roles, whose initial values were arbitrary. + +To interchange the two full chunks, perform +\[ + D\leftarrow D-H,\qquad H\leftarrow H+D,\qquad D\leftarrow H-D, +\] +componentwise. Only the middle shear uses the circuit. The other two +updates target the later group and have linear cost. The transformation +sends $(H,D)$ to $(D,H)$. + +The number of recursive calls is the sum of the edge ranks, exactly $s$. +Each acts on one role stream of volume $V/W$, retaining all other +fields as spectators. Splitting, +merging, gates, and triangular operations have total cost $O(V)$ because +their number is fixed. Below we verify that scheduling the recursive +calls on fixed tapes also costs $O(V)$ at this node. Thus if $F_k$ is a +uniform upper bound for time divided by logical volume, then +\begin{equation} +\label{eq:swap-recurrence} + F_0=O(1),\qquad F_k\le(s/W)F_{k-1}+O(1). +\end{equation} +For $a=s/W1$, it is $O(a^k)$. +Hence $F_k=O(e^\tau)$. + +\paragraph{A fixed-tape depth-first schedule.} +Here we complete the implementation assertion used in +\eqref{eq:swap-recurrence}. Reserve $W$ role tapes, a fixed set of +I/O and elementary-operation work tapes, one parking stack tape, and a +separate descriptor stack. Although $W$ is large, it is fixed. +At a call boundary all reusable work tapes, other than the current I/O +and local descriptor, are empty and their heads are at their origins. +The parking and descriptor heads are at the tops of their stacks. + +Before a recursive call, append the $W-1$ inactive role streams to the +parking stack in a fixed order, with separators. Copy the active stream +to the child I/O area, and erase the parent role tapes while traversing +their current contents. Push the parent descriptor and its finite +program counter to the descriptor stack. The role and work tapes are +now available to the child, using the same tapes at every depth. +On return, copy the child output into the designated active role. +Pop the inactive streams in reverse order. To recover a stream in its +original direction, prepare its destination to the known length and +write the popped symbols from the destination's right end toward its +left end. Erase the popped stack cells as they are left. This uses +linear time and ends with the parking head at the previously saved top. +No scan passes through a parked ancestor. Cleanup is always limited to +the region visited by the current call; a reused tape is not swept to +the largest position ever visited by an ancestor. + +Each push, pop, copy, positioning operation, or erasure moves $O(V)$ +symbols at a parent node. There are only the fixed number $s$ of child +calls. This gives precisely the additional $O(V)$ term claimed above, +even though each child itself has volume $V/W$. Temporary storage is +therefore not substituted for logical volume in the factor $s/W$. + +For completeness, descriptor processing also fits this term when the +payload is one bit. Let $V_0$ be the volume at the root of one +power-width call with width $e_0=m^{k_0}$, and $V_j=V_0/W^j$ the volume +of any depth-$j$ child. Here $j\le k_0=\log_m e_0$. The root row +count is at least $W^{k_0}$, so at depth $j$ it is still at least one. +Both original chunk ranges remain present: digits outside the current +subchunks become spectators rather than being removed. Hence +\[ + V_j\ge q^{2e_0},\qquad + j\log W\le(\log_m e_0)\log W=O(e_0)=O(\log V_j). +\] +It follows that +$\log V_0=\log V_j+j\log W=O(\log(2V_j))$. +A local descriptor lists the row field, at most the current $m+m$ +fields, and a fixed number of intervals formed from intervening +spectator fields. Computing products of their lengths, subdividing +target fields, copying lengths, and storing the current instruction take +$(\log(2V_0))^{O(1)}=O(V_j)$ time at that child, since every fixed +power of $\log(2V_j)$ is $O(V_j)$. Before descending, +construct the child's descriptor by retaining its two target fields and +combining each consecutive group of spectator fields into one interval. +The ancestor's subdivision need not remain active in the child. Stack entries contain +finite instructions and binary integers, not new alphabet symbols. +These observations establish one finite machine for every recursion +depth and every choice of spectator lengths. + +\end{proof} + + +We use the rational value $\tau=1-2^{-50}$ established in +\eqref{eq:explicit-motif-exponents}. Its verification uses fixed integer +comparisons and the displayed exponential inequality; it needs no +real-arithmetic oracle. + + +\subsection{Removing width and row restrictions} + +We have proved the fast operation for power widths with enough rows. +Rows for a general array can be supplied by a few of its own high digits. +Their movement will cost less than the final bound. + +\begin{lemma}[Arbitrary-width interchange] +\label{lem:chunk-swap} +There exist fixed $0<\tau<1$ and one fixed finite-alphabet multitape +procedure with the following property. For positive integers $P,G,B$ +and $u\ge1$, it transforms an arbitrary bit array on +\[ + [P]\times[2^u]\times[G]\times[2^u]\times[B] +\] +by the address permutation +\[ + (p,h,g,d,z)\longmapsto(p,d,g,h,z) +\] +in $O(Vu^\tau)$ steps, where $V=PG B\,2^{2u}$. +The integers specifying the shape are part of the input. The time +includes their processing, all padding and unpadding, and fixed-tape +workspace cleanup. In particular, $B=1$ is allowed. +\end{lemma} + +\begin{proof} +First suppose the two ranges are $[q^e]$, where $q$ is the fixed prime +already chosen. Set +\[ + k=\lceil\log_m e\rceil,\qquad + \rho=\left\lceil\frac{k\log W}{2\log q}\right\rceil. +\] +For all sufficiently large $e$, $1\le\rho> p & 1: + x ^= pivots[p] + if x: + p = x.bit_length() - 1 + for q in pivots: + if pivots[q] >> p & 1: + pivots[q] ^= x + pivots[p] = x + return tuple(pivots[p] for p in sorted(pivots, reverse=True)) + + +@lru_cache(None) +def span(frame): + values = {0} + for x in frame: + values |= {y ^ x for y in values} + return frozenset(values) + + +@lru_cache(None) +def meet(a, b): + return basis(tuple(sorted(span(a) & span(b)))) + + +@lru_cache(None) +def join(a, b): + return basis(a + b) + + +def contained(a, b): + return join(a, b) == b + + +def exact_gain(delta): + """exp(old entropy - new entropy), using unchanged total rank mass.""" + require(sum(r * n for r, n in delta.items()) == 0, 'rank mass changed') + result = Fraction(1) + for r, n in delta.items(): + result *= Fraction(r) ** (r * n) + return result + + +class Chains: + def __init__(self, word): + self.word = word + self.v = len(word['ports']) + self.h = word['report']['h'] + self.full = basis(tuple(1 << i for i in range(self.h))) + self.nodes = [] + self.regs = [[] for _ in range(2 * self.v + word['report']['R'])] + self.mutable = [] + starts = [(p,) for p in word['ports']] + [()] * (self.v + word['report']['R']) + for r, frame in word.get('start_extra', {}).items(): + starts[int(r)] = tuple(frame) + levels = {int(t): basis(tuple(f)) for t, f in word.get('target_levels', {}).items()} + for r, f in enumerate(starts): + self.add([r], f, 'start', None) + for section in ('A', 'B'): + if section == 'B': + for r, f in zip(word['centers'], word['center_frames']): + self.add([r], f, 'barrier', None) + for t in range(self.v): + self.add([self.v + t], levels.get(t, ()), 'barrier', None) + for i, event in enumerate(word[section]): + regs = event[1:3] if event[0] == 'add' else event[1:2] + self.mutable.append(self.add(regs, event[-1], section, i)) + for r in range(len(self.regs)): + f = self.full + if self.v <= r < 2 * self.v: + port = word['ports'][r - self.v] + f = basis(tuple(x for x in range(1, 1 << self.h) if not (x & port).bit_count() % 2)) + self.add([r], f, 'final', None) + self.prev, self.next = {}, {} + for r, chain in enumerate(self.regs): + for x, y in zip(chain, chain[1:]): + self.next[x, r] = y + self.prev[y, r] = x + # The emitter has no implicit climb at a cut: lock its actual final + # incident gate too. This prevents free unbilled barrier transitions. + self.locked = {k for k, n in enumerate(self.nodes) if n['section'] not in ('A', 'B')} + for k, n in enumerate(self.nodes): + if n['section'] == 'barrier': + for r in n['regs']: + p = self.prev[k, r] + require(self.nodes[p]['F'] == n['F'], 'initial cut mismatch') + self.locked.add(p) + self.lower, self.upper = {}, {} + for k, n in enumerate(self.nodes): + value = () + if k in self.locked: + value = n['F'] + else: + for r in n['regs']: + value = join(value, self.lower[self.prev[k, r]]) + self.lower[k] = value + for k in reversed(range(len(self.nodes))): + n = self.nodes[k] + value = self.full + if k in self.locked: + value = n['F'] + else: + for r in n['regs']: + value = meet(value, self.upper[self.next[k, r]]) + self.upper[k] = value + self.center_profile = Counter() + for r, f in zip(word['centers'], word['center_frames']): + current = basis(tuple(f)) + served = {levels.get(e[1] - self.v, ()) for e in word['cut'] if e[2] == r} + for g in sorted(served, key=lambda x: (-len(x), x)): + require(contained(g, current), 'center descent not nested') + if current != g: + self.center_profile[len(current) - len(g)] += 1 + current = g + + def add(self, regs, frame, section, index): + k = len(self.nodes) + self.nodes.append(dict(regs=list(regs), F=basis(tuple(frame)), section=section, index=index)) + for r in regs: + self.regs[r].append(k) + return k + + def profile(self): + result = self.center_profile.copy() + for r, chain in enumerate(self.regs): + for x, y in zip(chain, chain[1:]): + f, g = self.nodes[x]['F'], self.nodes[y]['F'] + require(contained(f, g), ('nonmonotone', r, x, y)) + if self.nodes[y]['section'] == 'barrier': + require(f == g, 'unbilled cut transition') + if f != g: + result[len(g) - len(f)] += 1 + return result + + def closure(self, seed, wanted, direction, limit): + changed, queue = {}, [(seed, wanted)] + links = self.next if direction == 'raise' else self.prev + operation = join if direction == 'raise' else meet + while queue: + k, want = queue.pop() + old = changed.get(k, self.nodes[k]['F']) + new = operation(old, want) + if new == old: + continue + if k in self.locked: + return None + changed[k] = new + if len(changed) > limit: + return None + for r in self.nodes[k]['regs']: + j = links[k, r] + neighbor = changed.get(j, self.nodes[j]['F']) + valid = contained(new, neighbor) if direction == 'raise' else contained(neighbor, new) + if not valid: + queue.append((j, new)) + return changed + + def delta(self, changed): + edges = {(self.prev[k, r], k, r) for k in changed for r in self.nodes[k]['regs']} + edges |= {(k, self.next[k, r], r) for k in changed for r in self.nodes[k]['regs']} + result = Counter() + for x, y, _ in edges: + f, g = self.nodes[x]['F'], self.nodes[y]['F'] + nf, ng = changed.get(x, f), changed.get(y, g) + require(contained(nf, ng), 'invalid closure') + if f != g: + result[len(g) - len(f)] -= 1 + if nf != ng: + result[len(ng) - len(nf)] += 1 + return {r: n for r, n in result.items() if n} + + def options(self, seed, direction, depth, lattice=False): + links = self.next if direction == 'raise' else self.prev + options = [] + for r in self.nodes[seed]['regs']: + found, k, steps = [], seed, 0 + while (k, r) in links and steps < 128: + k = links[k, r] + f = self.nodes[k]['F'] + if f not in found: + found.append(f) + steps += 1 + if len(found) >= depth or k in self.locked: + break + options.append(found) + result = set(x for row in options for x in row) + if len(options) == 2: + operation = meet if direction == 'raise' else join + result |= {operation(a, b) for a in options[0] for b in options[1]} + f = self.nodes[seed]['F'] + if lattice: + if direction == 'raise': + # All covers of F in the allowed subspace interval. + result |= {join(f, (x,)) for x in span(self.upper[seed]) - span(f)} + else: + # Every codimension-one subspace is the kernel of a nonzero + # functional in F's basis coordinates. Keep the fixed lower. + for functional in range(1, 1 << len(f)): + pivot = (functional & -functional).bit_length() - 1 + kernel = basis(tuple(f[i] ^ (f[pivot] if functional >> i & 1 else 0) + for i in range(len(f)) if i != pivot)) + if contained(self.lower[seed], kernel): + result.add(kernel) + return sorted({join(f, g) if direction == 'raise' else meet(f, g) for g in result} - {f}, + key=lambda g: (len(g), g)) + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--word', type=Path, default=SOURCE) + parser.add_argument('--out', type=Path, required=True) + parser.add_argument('--passes', type=int, default=3) + parser.add_argument('--depth', type=int, default=4) + parser.add_argument('--closure-limit', type=int, default=256) + parser.add_argument('--lattice', action='store_true') + parser.add_argument('--neutral-rounds', type=int, default=0, + help='Seeded equal-entropy moves between strict descent passes.') + parser.add_argument('--seed', type=int, default=12026) + args = parser.parse_args() + require(args.passes > 0 and args.depth > 0 and args.closure_limit > 0, 'positive limits required') + require(args.neutral_rounds >= 0, 'neutral rounds must be nonnegative') + require(not args.out.exists(), 'use a new output directory') + source = args.word.read_bytes() + original = json.loads(gzip.decompress(source)) + word = copy.deepcopy(original) + graph = Chains(word) + before = graph.profile() + require(dict(before) == {int(r): n for r, n in word['report']['local_profile'].items()}, 'input profile mismatch') + trace, attempts, blocked, feasible = [], 0, 0, 0 + rng = random.Random(args.seed) + seen = {tuple(n['F'] for n in graph.nodes)} + neutral_moves = 0 + for pass_number in range(args.passes + args.neutral_rounds): + accepted = 0 + for direction in ('raise', 'lower'): + order = reversed(graph.mutable) if direction == 'raise' else iter(graph.mutable) + for k in order: + if k in graph.locked: + continue + best = None + for target in graph.options(k, direction, args.depth, args.lattice): + attempts += 1 + changed = graph.closure(k, target, direction, args.closure_limit) + if not changed: + blocked += 1 + continue + feasible += 1 + delta = graph.delta(changed) + ratio = exact_gain(delta) + if ratio > 1 and (best is None or ratio > best[0]): + best = ratio, changed, delta + if best is None: + continue + ratio, changed, delta = best + updates = [] + for j, frame in sorted(changed.items()): + node = graph.nodes[j] + updates.append(dict(section=node['section'], index=node['index'], + old=list(node['F']), new=list(frame))) + node['F'] = frame + trace.append(dict(pass_number=pass_number, direction=direction, + entropy_gain_ratio=str(ratio), delta=delta, updates=updates)) + accepted += 1 + print(json.dumps(dict(pass_number=pass_number, accepted=accepted, attempts=attempts, + profile=dict(sorted(graph.profile().items())))), flush=True) + if not accepted: + if pass_number >= args.neutral_rounds: + break + choices = list(graph.mutable) + rng.shuffle(choices) + moved = False + for k in choices: + if k in graph.locked: + continue + directions = ['raise', 'lower'] + rng.shuffle(directions) + for direction in directions: + candidates = graph.options(k, direction, args.depth, args.lattice) + rng.shuffle(candidates) + for target in candidates: + attempts += 1 + changed = graph.closure(k, target, direction, args.closure_limit) + if not changed: + blocked += 1 + continue + feasible += 1 + delta = graph.delta(changed) + if exact_gain(delta) != 1: + continue + state = tuple(changed.get(j, n['F']) for j,n in enumerate(graph.nodes)) + if state in seen: + continue + seen.add(state) + updates = [] + for j, frame in sorted(changed.items()): + n = graph.nodes[j] + updates.append(dict(section=n['section'], index=n['index'], old=list(n['F']), new=list(frame))) + n['F'] = frame + trace.append(dict(pass_number=pass_number, direction=direction, + entropy_gain_ratio='1', delta=delta, updates=updates)) + neutral_moves += 1 + moved = True + break + if moved: + break + if moved: + break + if not moved: + break + after = graph.profile() + for k in graph.mutable: + node = graph.nodes[k] + word[node['section']][node['index']][-1] = list(node['F']) + for section in ('A', 'B'): + require([e[:-1] for e in word[section]] == [e[:-1] for e in original[section]], 'scalar word changed') + require(all(word[k] == original[k] for k in original if k not in ('A', 'B', 'report')), 'fixed data changed') + require(sum(r*n for r,n in before.items()) == sum(r*n for r,n in after.items()), 'rank mass changed') + word['report']['local_profile'] = dict(sorted(after.items())) + word['report']['status'] = 'COUPLED_FRAME_SEARCH_CANDIDATE_REQUIRES_PHASE_AND_GLOBAL_REPLAY' + payload = gzip.compress(json.dumps(word, sort_keys=True, separators=(',', ':')).encode(), mtime=0) + gain = exact_gain({r:after[r]-before[r] for r in before.keys() | after.keys()}) + result = dict(status='LOCAL_CANDIDATE' if gain > 1 else 'NO_GAIN_IN_BOUNDED_SEARCH', + source_sha256=hashlib.sha256(source).hexdigest(), output_sha256=hashlib.sha256(payload).hexdigest(), + parameters=dict(passes=args.passes, depth=args.depth, closure_limit=args.closure_limit, + lattice=args.lattice, neutral_rounds=args.neutral_rounds, seed=args.seed), + attempts=attempts, blocked=blocked, feasible=feasible, accepted_groups=len(trace), + neutral_moves=neutral_moves, + profile_before=dict(sorted(before.items())), profile_after=dict(sorted(after.items())), + entropy_saving=sum(r*(before[r]-after[r])*math.log(73/r) for r in before.keys() | after.keys()), + trace=trace, scope='Scalar word and frame chains only; phases, ownership bindings and exact assembly remain separate.') + args.out.mkdir(parents=True) + (args.out / 'FULL-WORD.json.gz').write_bytes(payload) + (args.out / 'SEARCH.json').write_text(json.dumps(result, indent=2) + '\n') + print(json.dumps({k:v for k,v in result.items() if k != 'trace'}, sort_keys=True), flush=True) + + +if __name__ == '__main__': + main() diff --git a/research/format-limits-2/s5-6-decoders-spec/inputs/pr626/ck-CANONICAL-WORD.json.gz b/research/format-limits-2/s5-6-decoders-spec/inputs/pr626/ck-CANONICAL-WORD.json.gz new file mode 100644 index 0000000000..58cd1be8f2 Binary files /dev/null and b/research/format-limits-2/s5-6-decoders-spec/inputs/pr626/ck-CANONICAL-WORD.json.gz differ diff --git a/research/format-limits-2/s5-6-decoders-spec/inputs/pr626/hpe_audit_local.py b/research/format-limits-2/s5-6-decoders-spec/inputs/pr626/hpe_audit_local.py new file mode 100644 index 0000000000..17bccb64fd --- /dev/null +++ b/research/format-limits-2/s5-6-decoders-spec/inputs/pr626/hpe_audit_local.py @@ -0,0 +1,171 @@ +# Local-only extraction of the attributed PR514 / PR433 independent replay. +# Prepared for icekylinx with OpenAI Codex assistance. Apache-2.0. +# The complete local checker and its negative controls are retained verbatim. +# Global hosting is verified separately for the changed 112-port geometry. +import copy,gzip,hashlib,json,sys +from collections import Counter +from fractions import Fraction as Q +from pathlib import Path +OUT=Path(sys.argv[1]) +c=json.load(gzip.open(OUT/'CANONICAL-WORD.json.gz')) +ir={'local_programs':json.load(gzip.open(OUT/'LOCAL-PROGRAMS.json.gz'))} +v,R,h=c['v'],c['R'],c['h'];n=2*v+R;frames=c['frames'] +levels={int(t):f for t,f in c.get('target_levels',{}).items()} +entering=[r for r,f in enumerate(c['start']) if r>=2*v and f!=0] +plain={r for r in range(n) if r not in set(entering)} + +def contains(a,b): + for x in a: + for y in b: + if x>>(y.bit_length()-1)&1:x^=y + if x:return False + return True +hpe={r for r in range(2*v,n) if c['final'][r]!=1} # HPE: helpers whose terminal frame is a proper subspace U of FULL +assert all(len(frames[c['final'][r]])0 + hist[rank]+=1;cur[r]=b + elif tag=='center': + _,k,a,b,rank=event + assert phases[-1]=='centers' and private=={('C',k):a} + cf=c['center_frames'][k];cr=len(frames[cf]) + # GK: stepwise descent cf -> served levels -> lowest (forward), reversed ascent (backward); each step is a nested child + assert contains(frames[a],frames[b]) if back else contains(frames[b],frames[a]) + assert rank==abs(len(frames[a])-len(frames[b]))>0 + chain.setdefault(k,[]).append((a,b)) + private['C',k]=b;hist[rank]+=1;centers.append(k) + elif tag=='scalar': + _,e,f=event;op=e[0];target=tuple(e[1]);source=tuple(e[2]) if op in ('copy','add') else None + if target[0]=='C' and op=='clear': + assert private.get(target,f)==f + private.pop(target,None) + else: + for r in (target,source): + if r is None:continue + if r[0]=='L':assert cur[r[1]]==f and (r[1] not in wset or (r[1] in pre_seen and r[1] not in post_seen)),('common frame / wrapper order',r,cur[r[1]],f) + else: + if r==target and r not in private:private[r]=f + assert private[r]==f + if op=='clear':rows[target]={};norm[target]=Q(0) + elif op=='copy':rows[target]=dict(rows[source]);norm[target]=norm[source] + elif op=='scale': + q=Q(e[2],e[3]);a,b=abs(q.numerator),q.denominator + assert a&(a-1)==0 and b&(b-1)==0 + rows[target]={j:q*x for j,x in rows[target].items()};norm[target]*=abs(q) + else: + q=Q(e[3],e[4]);a,b=abs(q.numerator),q.denominator + assert source!=target and b&(b-1)==0 + # Independent symbolic replay of the cleared coefficient work. + w=0 + for bit in bin(a)[2:]:w=2*w+int(bit) + assert Q(w,b)*(1 if q>0 else -1)==q + prefix=max(prefix,Q(a)*norm[source]) + norm[target]=norm.get(target,Q(0))+abs(q)*norm[source] + row=rows.setdefault(target,{}) + for j,x in list(rows[source].items()): + z=row.get(j,Q(0))+q*x + if z:row[j]=z + else:row.pop(j,None) + prefix=max(prefix,norm[target]) + else:raise AssertionError(tag) + assert phases==allowed and set(centers)==set(range(len(c['centers']))) and not private + assert sorted(r for k,r,_ in wrappers if k=='pre')==wrapped and sorted(r for k,r,_ in wrappers if k=='post')==wrapped # GK + for k,st in chain.items(): # GK: the steps of each centre chain link up and end at the centre frame + cf=c['center_frames'][k] + if back:assert st[-1][1]==cf and all(st[i][1]==st[i+1][0] for i in range(len(st)-1)) + else:assert st[0][0]==cf and all(st[i][1]==st[i+1][0] for i in range(len(st)-1)) + assert all(not row for reg,row in rows.items() if reg[0]=='C') + for r in range(n): + expected={r:Q(1)} + if back and r bash verify.part.sh [outdir] (needs numpy, scipy, sympy) +# Prints one PASS/FAIL line per assertion; fails if any FAIL. Wall time about 35 s on 3 cores (longest check d1_frames ~20 s). +set -u +PKG=${PKG:-$(cd "$(dirname "$0")" && pwd)} +PY=${PY:-${PYTHON:-python3}} +OUT=${1:-${OUT:-$(mktemp -d "${TMPDIR:-/tmp}/fl2-C.XXXXXX")}} +mkdir -p "$OUT" +export PYTHONDONTWRITEBYTECODE=1 +cd "$PKG/checks" +checks="d1_decoder_floor d1_frames d3_punctures d4_structured s1_inplace s3_r2_toy log_checks anchors" +for c in $checks; do ( nice -n 19 "$PY" -B "$c.py" > "$OUT/C-$c.log" 2>&1; echo $? > "$OUT/C-$c.rc" ) & done +wait +status=0 +for c in $checks; do + cat "$OUT/C-$c.log" + [ "$(cat "$OUT/C-$c.rc")" = 0 ] || { echo "FAIL C.$c (exit $(cat "$OUT/C-$c.rc"))"; status=1; } +done +exit $status diff --git a/research/format-limits-2/s7-9-centre-fragmentation/SOURCES.part.json b/research/format-limits-2/s7-9-centre-fragmentation/SOURCES.part.json new file mode 100644 index 0000000000..3d708aee5b --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/SOURCES.part.json @@ -0,0 +1,320 @@ +{ + "description": "Bundle D inputs and evidence. PR inputs are byte copies at the cited commit; blob = git blob id; sha256 of the vendored file.", + "files": [ + { + "file": "inputs/pr656-FULL-WORD.json.gz", + "pr": 656, + "commit": "0805e78f5fecc700804d4766d7e3e1d7d7e6a2ba", + "source_path": "research/gauge44-layered-b/evidence/local/FULL-WORD.json.gz", + "blob": "447d45d08bf4b054d2fa76a0dc00a3b0f168fe91", + "sha256": "0ad202612f010df4ab66432a628247b37ad8b497dd6b27595b1685cbd7eb119e", + "used_for": "root_lines R and exact replay of A+B+cut (M) : Y1, Y2, O1, F1 carriers" + }, + { + "file": "inputs/pr656-k492audit-pr622-ck-CANONICAL-WORD.json.gz", + "pr": 656, + "commit": "0805e78f5fecc700804d4766d7e3e1d7d7e6a2ba", + "source_path": "research/community-k492-audit/pr622/replay/ck-local/CANONICAL-WORD.json.gz", + "blob": "58cd1be8f28b74bea83c435eee1f52b36a274281", + "sha256": "ae3018c0646be06f47d345bb8baf0e6ea9220096a949fa30a8f7656aa4ad6f45", + "used_for": "ck/jp8 K-triangle provider words of #622/#623 (audit copy inside #656): F1 frames, ports" + }, + { + "file": "inputs/pr656-k492audit-pr622-jp8-CANONICAL-WORD.json.gz", + "pr": 656, + "commit": "0805e78f5fecc700804d4766d7e3e1d7d7e6a2ba", + "source_path": "research/community-k492-audit/pr622/replay/jp8-local/CANONICAL-WORD.json.gz", + "blob": "7fd7cd1fefbb8b0e12397b355d9f6e227813bd58", + "sha256": "7a3fec1022d3b2b1bd986302a327735ec521d17b043f4a5acb96253a56f6193c", + "used_for": "ck/jp8 K-triangle provider words of #622/#623 (audit copy inside #656): F1 frames, ports" + }, + { + "file": "inputs/b82-rec.json", + "pr": null, + "commit": null, + "source_path": "DERIVED (not a PR file): cards/B82/work/out/rec.pkl converted to JSON; producer cards/B82/work/c82.py run on the rebuilt #656 word (inputs PROTOTYPE.json etc. not re-run here)", + "blob": "0cfe8201069af7d0492bbf2aa7f80711edaf9a9d", + "sha256": "5aaa5bc98240b6b346fe046f1993d68bc4a9abd63acb4c65cac98c34a3a2b55f", + "used_for": "F1 S3/S4 packet records (RECORDED derivation, CHECKED consumer)" + }, + { + "file": "evidence/Y2/B101-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B101/NOTES.md", + "blob": "81828dbe40f68ac460b45cf385e3f49e65c3462c", + "sha256": "6070ff15252c51783e289a66c389c06da0ca1dd480a7218f151e70b4220cb7e1", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/Y2/B106-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B106/NOTES.md", + "blob": "9253e556c2e293d0c03facd27d3dc0de5f874607", + "sha256": "049906ed7bb49c66205f643638a99393905525e8008b23617b060dc05eeabb4a", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/F3/B90-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B90/NOTES.md", + "blob": "4a4c5db80fba7cb88de1a5d99b0b62ff4fe57d5f", + "sha256": "192a4547c572a40d820bc6c424b974e51703e7b072e749ad9824c5c93a44376e", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/F3/B92-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B92/NOTES.md", + "blob": "40645036613d15a278850f5f8fdeaa0a3becd10f", + "sha256": "dbccb5c0d44b1ba04b52f26083adbec1fdd40cbbdcc57dbd5f119496ed5ed8b5", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/F3/B92b-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B92b/NOTES.md", + "blob": "749aa539baff68fe5ece5e760a72a170757edb46", + "sha256": "adb7cefda46501d2769718ef2374554b68722d759eacce1e37030859d3ecbdea", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/F3/B93-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B93/NOTES.md", + "blob": "805bd928791b53b9379dfab8ade504fa886f5f9f", + "sha256": "3dc9d03ab314eb047e90b1d4b94e5245f0769c7eeebd4a939a26c643339422d8", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/F3/B94-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B94/NOTES.md", + "blob": "6248269d9c5b52892661e36a1ffca3d3b6928877", + "sha256": "a08b06c423e298313be7b7a5101d3b37ce98ab1dae91627a4b77d877bd641659", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/F3/B97-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B97/NOTES.md", + "blob": "d3a45e0bafc20c907d41dca74bd0fc7783d88ae6", + "sha256": "1c7d4c83ed133b698169ca2be7708ea50d0ab4506e80e58e1a97bb330d9025b7", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/O2/B2-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B2/NOTES.md", + "blob": "412d2913128d5d5fdefc6c5680fd95368467ef0b", + "sha256": "a7b37cc232f220aedcb586e45312232e44347e619e985fd509978a9ec455571e", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/F2/B103-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B103/NOTES.md", + "blob": "0a8e274461ee22c5247db4d5f267291b54ee00e8", + "sha256": "44d900dd87450634eeb81f7d87bdd67cbd918a80e92ae091c66b57dbcf0c6b98", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/F2/B105-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B105/NOTES.md", + "blob": "c615a54af46668d53b05d14910cfc7e2c62238d1", + "sha256": "b41ddcb848a7f3ecbb75f93e281627cc112b85175b937f4c275f6d3f89242ce9", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/F2/B107-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B107/NOTES.md", + "blob": "3665eb0df3c9a9d1c5593413ddc4c867e43d2f72", + "sha256": "357bcdf2dc6f27518a2b9dc14337fd86f00a8d8d3f3b0a1e61de1cae4893fddf", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/F2/B108-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B108/NOTES.md", + "blob": "3a1a0084cda6b7530cf498dd0c6c392cf18d53b3", + "sha256": "42bc59cc85492f96abed7c0cb75048b418eb4d2730077db827ebb71e88dcd31f", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/F2/B98c-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B98c/NOTES.md", + "blob": "6691f6e4a27ca49ed9a29f6eeaa90020066556c5", + "sha256": "d9a258b3e70ecc982395869018bd7b27872ea83c3273f1ee3c50e53fc127c2d2", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/F2/B99b-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B99b/NOTES.md", + "blob": "a8bf4ac7123127f9862afa01a990b5429c01bcd0", + "sha256": "72917a21ab58fbd99012dc65410a32b27d5966a9e3ee7a3e01289d4bb01f4404", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/Y1/B10-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B10/NOTES.md", + "blob": "dfe06b7b0306c27a2a98569d7196afbebf47d1da", + "sha256": "21c3838e9bfa4b451facc9fe2c6063b1cd3f497e6ad0a2576c42a91b090c1f97", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/Y1/B16-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B16/NOTES.md", + "blob": "514879cc0d61792523557db7fffee3996e04da30", + "sha256": "3d6c34d60c9fe1d5a3d1af36c7aa9bcaa75dbe56814f1accfea4c546c890dc42", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/Y1/B74-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B74/NOTES.md", + "blob": "4e0bc796ecd06840411ddb109201afca1d7669c9", + "sha256": "3fa7333da8b33cbe7709efbac98fa4d8da47b0386910a8d138b019b0f6b5cddb", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/O1/B68-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B68/NOTES.md", + "blob": "11b9f5a62fd8747086357296e931284faca3824e", + "sha256": "390e5ea80e1da33988c17532dab42b74ac1ffd2262f07c03e04021c7f529f29c", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/O1/B68-faces.c", + "pr": null, + "commit": null, + "source_path": "cards/B68/faces.c", + "blob": "ff41c1936643656032c3421e614a966091fcb0ab", + "sha256": "6c230a05a0dbac13188068dad42dcd0ace52a1c7c11a90ad60c53b2c54b92a84", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/O1/B7-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B7/NOTES.md", + "blob": "c2577fc9c7706ef2b3c5c24307f9b8ee20322070", + "sha256": "a13c0cf567e7cbac3d5a1d59ad041e7ce0d13fb2518171badcbd4425d4a0a213", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/O1/B73-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B73/NOTES.md", + "blob": "df24f35db9607862c79be19a2ce966276eca5704", + "sha256": "1be2fafbefc53ac40d63497fbf4af8b1549bd10a3fc83c55f4d49254e38c9afe", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/O1/B74-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B74/NOTES.md", + "blob": "4e0bc796ecd06840411ddb109201afca1d7669c9", + "sha256": "3fa7333da8b33cbe7709efbac98fa4d8da47b0386910a8d138b019b0f6b5cddb", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/O1/B74-dump.c", + "pr": null, + "commit": null, + "source_path": "cards/B74/dump.c", + "blob": "12f4fce3bd1106a4382622c6ddc6e300c16ece08", + "sha256": "6e52b14e8f0c352dee5d54e84c4fcbd52399a9d15e27d0375249a7b6ab4d0a34", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/F1/B80-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B80/NOTES.md", + "blob": "c02c455c12c16afa279b9067fa9c83aa23a5a16d", + "sha256": "c95c492b9b94cf16fd0eaa68b7e1a41c0082de78f33c6059cc2c9a00761184a3", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/F1/B81-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B81/NOTES.md", + "blob": "747fb9b7b9d51bbb2643b9171aa33db862b2a536", + "sha256": "e3c1e6aa548c6af09c6cdde68d7b1aeb44e874ff8cc8499d8153483bd6287f62", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/F1/B82-DISCOVERY.json", + "pr": null, + "commit": null, + "source_path": "cards/B82/DISCOVERY.json", + "blob": "baab4e0080a34d33c5ddc52b7b209eb922b30912", + "sha256": "ba6767bc74e7e91330d27026fa81875d2b116f7a34b818a037d94f1bd519b778", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/F1/B82-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B82/NOTES.md", + "blob": "f229f6ac26f783c0349addfcdd2d181fd588995f", + "sha256": "9cbf48e3c0932ce286826b3a5807432a193275a5f4a6830a52401cbdacde0d54", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/F1/B82-run.log", + "pr": null, + "commit": null, + "source_path": "cards/B82/run.log", + "blob": "baab4e0080a34d33c5ddc52b7b209eb922b30912", + "sha256": "ba6767bc74e7e91330d27026fa81875d2b116f7a34b818a037d94f1bd519b778", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/F1/B85-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B85/NOTES.md", + "blob": "8725b268e6deeb794a67e9f03b8070a039622a99", + "sha256": "c131f3bc7dd229cfc67fc53bd9b79b6a5266f667d9c65c8b335f9df48ca35e70", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + }, + { + "file": "evidence/F1/B89-NOTES.md", + "pr": null, + "commit": null, + "source_path": "cards/B89/NOTES.md", + "blob": "46880b4a6a4665027920977112f41ca47d8291e3", + "sha256": "85b10b7d8adfcbad634b2e219e2336563324dfd02647282b512d5235e1dcf170", + "used_for": "evidence (existing card record; no SAT/DRAT/CP-SAT artefacts exist for these rows)" + } + ] +} \ No newline at end of file diff --git a/research/format-limits-2/s7-9-centre-fragmentation/checks/common.py b/research/format-limits-2/s7-9-centre-fragmentation/checks/common.py new file mode 100644 index 0000000000..b3f37ec0bb --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/checks/common.py @@ -0,0 +1,17 @@ +"""Shared helpers: input paths (relative to the package root) and PASS/FAIL printing.""" +import gzip, json, os, sys +ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +IN = os.path.join(ROOT, 'inputs') +FAILED = [] +def jgz(name): + with gzip.open(os.path.join(IN, name)) as f: + return json.load(f) +def jplain(name): + with open(os.path.join(IN, name)) as f: + return json.load(f) +def check(tag, cond, detail=''): + print(('PASS ' if cond else 'FAIL ') + tag + (' | ' + detail if detail else '')) + if not cond: + FAILED.append(tag) +def done(): + sys.exit(1 if FAILED else 0) diff --git a/research/format-limits-2/s7-9-centre-fragmentation/checks/f1_carriers.py b/research/format-limits-2/s7-9-centre-fragmentation/checks/f1_carriers.py new file mode 100644 index 0000000000..b8e82d7f9d --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/checks/f1_carriers.py @@ -0,0 +1,30 @@ +"""F1: carrier ladders from subspace coverings (port of cards B81 gate 1). Ports: ck word; readers: R R^T/2 on the #656 root lines.""" +import itertools, random +from collections import Counter +import numpy as np +from common import * +P = jgz('pr656-k492audit-pr622-ck-CANONICAL-WORD.json.gz')['ports'] +R = np.array(jgz('pr656-FULL-WORD.json.gz')['root_lines'], float) +Gm = R @ R.T / 2; nz = (Gm != 0) & ~np.eye(112, dtype=bool) +Rd = [[t for t in range(112) if nz[t, s]] for s in range(112)] +check('f1.carriers.52-readers-per-source', all(len(x) == 52 for x in Rd)) +S = set(P) +check('f1.carriers.ports-are-a-cap-in-F2^9 (no three XOR to 0)', len(S) == 112 and all((a ^ b) not in S for a, b in itertools.combinations(P, 2))) +car = [] +for s in range(112): + ports = [P[t] for t in Rd[s]]; ps = set(ports); quads = set() + for a, b, c in itertools.combinations(ports, 3): + e = a ^ b ^ c + if e in ps and e > max(a, b, c): quads.add(frozenset((a, b, c, e))) + left = set(ports); n = 0; q = list(quads) + while left: + best = max(q, key=lambda Q: len(Q & left), default=None) + if best and len(best & left) >= 3: left -= best + elif len(left) >= 2: left -= set(sorted(left)[:2]) + else: left.clear() + n += 1 + car.append(n) +m = float(np.mean(car)) +check('f1.carriers.greedy-cover-14.29-carriers-per-source', abs(m - 14.2946) < 1e-3 and min(car) == 14 and max(car) == 15, f'mean {m:.4f}, min {min(car)}, max {max(car)}; lower bound 52/4 = 13 (quads are the only 4-reader flats)') +check('f1.carriers.total-1601', round(112 * m) == 1601) +done() diff --git a/research/format-limits-2/s7-9-centre-fragmentation/checks/f1_frag.py b/research/format-limits-2/s7-9-centre-fragmentation/checks/f1_frag.py new file mode 100644 index 0000000000..94c65cd2ff --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/checks/f1_frag.py @@ -0,0 +1,113 @@ +"""F1 (fragmentation at the shipped op order). Inputs: the ck / jp8 CANONICAL words of the #622/#623 K-triangle +providers (vendored from the #656 audit copy). Port of cards B80 gap.py/slack.py/upr.py and B11 upper.py.""" +import math +from collections import Counter, defaultdict +from common import * + +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 spanset(B): + s = {0} + for b in B: s |= {x ^ b for x in s} + return frozenset(s) +dim = lambda s: len(s).bit_length() - 1 +psi = lambda r: r * math.log(73 / r) if r > 0 else 0 +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) +def upper(d, ss): + curU = [ss[f] for f in d['final']]; F = {} + def rev(part): + for i in range(len(d[part]) - 1, -1, -1): + e = d[part][i]; regs = [e[1]] + ([e[2]] if e[0] == 'add' else []) + U = curU[regs[0]] + for r in regs[1:]: U = U & curU[r] + F[part, i] = U + for r in regs: curU[r] = U + rev('tail'); rev('B') + for k, r in enumerate(d['centers']): curU[r] = ss[d['center_frames'][k]] + v = d['v'] + for t in range(v): curU[v + t] = ss[d.get('target_levels', {}).get(str(t), 0)] + rev('A') + return F +viol = [0] +def per_class(d, ss, F, cl): + cur = [ss[f] for f in d['start']]; tot = defaultdict(float) + def climb(r, s): + if cur[r] == s: return + if not cur[r] <= s: viol[0] += 1 + tot[cl(r)] += psi(dim(s) - dim(cur[r])); cur[r] = s + for part in ('A', 'B', 'tail'): + for i, e in enumerate(d[part]): + for r in [e[1]] + ([e[2]] if e[0] == 'add' else []): climb(r, F[part, i]) + for r, f in enumerate(d['final']): climb(r, ss[f]) + return tot + +for prov, name in (('ck', 'pr656-k492audit-pr622-ck-CANONICAL-WORD.json.gz'), ('jp8', 'pr656-k492audit-pr622-jp8-CANONICAL-WORD.json.gz')): + d = jgz(name); v = d['v']; C = set(d['centers']); ports = d['ports'] + cl = lambda r: 'S' if r < v else 'T' if r < 2 * v else 'C' if r in C else 'H' + ss = [spanset(f) for f in d['frames']] + F0 = {(p, i): ss[e[-1]] for p in ('A', 'B', 'tail') for i, e in enumerate(d[p])} + FU = upper(d, ss) + check(f'f1.{prov}.shipped-frames-below-ceiling', all(F0[k] <= FU[k] for k in F0)) + tb = [k for k in F0 if any(cl(r) == 'T' for r in ([d[k[0]][k[1]][1]] + ([d[k[0]][k[1]][2]] if d[k[0]][k[1]][0] == 'add' else [])))] + atU = sum(1 for k in tb if F0[k] == FU[k]) + sl = Counter(dim(FU[k]) - dim(F0[k]) for k in tb) + check(f'f1.{prov}.target-ops-1096-950-at-legal-ceiling', (len(tb), atU, dict(sl)) == (1096, 950, {0: 950, 1: 146}), f'{len(tb)} target ops, {atU} at ceiling, slack {dict(sl)}') + t0 = per_class(d, ss, F0, cl) + F2 = dict(F0) + for k in tb: F2[k] = FU[k] + viol[0] = 0; t2 = per_class(d, ss, F2, cl); nv = viol[0] + print(' non-monotone climbs in target-only raise:', nv) + net = sum(t2.values()) - sum(t0.values()) + check(f'f1.{prov}.target-only-raise-is-not-a-legal-assignment', nv == 50 if prov == 'ck' else nv > 0, f'{nv} non-monotone climbs') + tU = per_class(d, ss, FU, cl); viol[0] = 0 + check(f'f1.{prov}.legal-all-ops-at-ceiling-costs-more', sum(tU.values()) - sum(t0.values()) > 400, f'delta psi/call {sum(tU.values())-sum(t0.values()):+.1f}') + check(f'f1.{prov}.target-only-raise-model-delta', abs(net + 5.6) < 0.1, f'model delta psi/call {net:+.2f} on the NON-legal target-only raise (indicative only) (T {t2["T"]-t0["T"]:+.2f}, H {t2["H"]-t0["H"]:+.2f}, S {t2["S"]-t0["S"]:+.2f}); far below the 65 psi GO line') + frag = sum(psi(x) for x in [0]) # placeholder keeps style + if prov == 'ck': + # direct-port ceiling c(o) = 9 - rank(ports of o's unserved target readers), same reader order + ev = [(p, i, e) for p in ('A', 'B') for i, e in enumerate(d[p])] + isT = lambda r: v <= r < 2 * v + reads = defaultdict(list); tops = defaultdict(list) + for tm, (p, i, e) in enumerate(ev): + if e[0] != 'add': continue + a, b = e[1], e[2]; f = len(d['frames'][e[-1]]) + if isT(a) and not isT(b): tops[a].append([tm, b, f, None]); reads[b].append((tm, a)) + elif isT(b) and not isT(a): tops[b].append([tm, a, f, None]); reads[a].append((tm, b)) + elif isT(a) and isT(b): tops[a].append([tm, b, f, b]); tops[b].append([tm, a, f, a]) + cap = {} + for o, lst in reads.items(): + for k, (tm, t) in enumerate(lst): cap[t, tm] = 9 - rank([ports[x - v] for _, x in lst[k:]]) + save = 0; nviol = 0 + def steps(ds): + out = []; cur = 0 + for x in ds + [8]: + if x > cur: out.append(x - cur); cur = x + return out + shipped_frag = 0 + for t, L in tops.items(): + L.sort(); caps = [] + for tm, o, f, ot in L: + c = 9 - rank([ports[t - v], ports[ot - v]]) if ot is not None else cap[t, tm] + c = min(c, 8); caps.append(c); nviol += f > c + sm = caps[:] + for j in range(len(sm) - 2, -1, -1): sm[j] = min(sm[j], sm[j + 1]) + sh = steps([x[2] for x in L]); idl = steps(sm) + save += sum(psi(s) for s in sh) - sum(psi(s) for s in idl); shipped_frag += sum(psi(s) for s in sh) + check('f1.ck.loose-port-cap-bound-614-psi-per-call', round(save) == 614 and nviol == 0, + f'slack {save:.1f} psi/call (fixed reader order, {nviol} violations); LOOSE: ignores every constraint on the operand other than the port cap') + check('f1.ck.target-fragmentation-1342-psi-per-call', round(shipped_frag - 112 * psi(8)) == 1342, f'{shipped_frag - 112 * psi(8):.1f}') +done() diff --git a/research/format-limits-2/s7-9-centre-fragmentation/checks/f1_pack.py b/research/format-limits-2/s7-9-centre-fragmentation/checks/f1_pack.py new file mode 100644 index 0000000000..1894115b9c --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/checks/f1_pack.py @@ -0,0 +1,35 @@ +"""F1: format-level lower bound on target fragmentation (port of cards B85). Exact maximum 'last-reader' packing by MILP.""" +import math +from collections import defaultdict, Counter +import numpy as np +from scipy.optimize import milp, LinearConstraint, Bounds +from common import * +psi = lambda r: r * math.log(73 / r) +d = jgz('pr656-k492audit-pr622-ck-CANONICAL-WORD.json.gz'); v = d['v'] +isT = lambda r: v <= r < 2 * v +reads = defaultdict(set); tre = defaultdict(set) +for p in ('A', 'B'): + for e in d[p]: + if e[0] != 'add': continue + a, b = e[1], e[2] + if isT(a) and not isT(b): reads[b].add(a); tre[a].add(b) + elif isT(b) and not isT(a): reads[a].add(b); tre[b].add(a) +check('f1.pack.targets-operands-pairs', (len(tre), len(reads), sum(map(len, reads.values()))) == (112, 396, 796)) +check('f1.pack.reader-count-hist', sorted(Counter(len(s) for s in reads.values()).items()) == [(1, 220), (2, 64), (3, 24), (4, 64), (5, 24)]) +T = sorted(tre); ix = {t: i for i, t in enumerate(T)} +edges = set() +for o, st in reads.items(): + for a in st: + for b in st: + if a < b: edges.add((ix[a], ix[b])) +A = np.zeros((len(edges), len(T))) +for k, (a, b) in enumerate(edges): A[k, a] = A[k, b] = 1 +r = milp(-np.ones(len(T)), constraints=LinearConstraint(A, -np.inf, 1), integrality=np.ones(len(T)), bounds=Bounds(0, 1), options={'time_limit': 40}) +P = int(round(-r.fun)) +check('f1.pack.milp-optimal', r.status == 0, f'status {r.status} ({r.message}); max independent set P={P}') +g = min(psi(a) + psi(8 - a) for a in range(1, 8)) - psi(8) +check('f1.pack.stop-cost-3.014', abs(g - 3.01416129) < 1e-6, f'{g:.6f}') +bound = g * (len(T) - P) +print(f' bound g*(112-P) = {bound:.2f} psi/call (P={P}); published run: P>=36 by time-capped search -> 229.08') +check('f1.pack.bound-at-most-229.08', bound <= 229.08 + 1e-6 and P >= 36, f'{bound:.2f}') +done() diff --git a/research/format-limits-2/s7-9-centre-fragmentation/checks/f1_s3s4.py b/research/format-limits-2/s7-9-centre-fragmentation/checks/f1_s3s4.py new file mode 100644 index 0000000000..78b61014ed --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/checks/f1_s3s4.py @@ -0,0 +1,53 @@ +"""F1: S3 packets / S4 slots of the rebuilt #656 word admit no supersolvable (modular-chain) reader order (port of cards B89). +Input inputs/b82-rec.json is a DERIVED record (cards B82 c82.py run on the rebuilt #656 word); the derivation is not re-run here.""" +import collections +from common import * +D = jplain('b82-rec.json'); v = D['v']; P = D['ports']; SEQ = [tuple(x) for x in D['seq']] +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) +def taint(src, seq): + lab = {src}; T = set() + for t, s in SEQ[seq:]: + if s in lab: + lab.add(t) + if v <= t < 2 * v: T.add(t - v) + return T +def fields(r): + k = r[0] + return (k,) + ((r[4], r[5], r[6], r[7]) if k == 'S3' else (r[3], r[4], r[5], r[6])) +c = collections.Counter(); dep = collections.Counter(); sets = [] +for r in D['rec']: + k, a, b, seq, F = fields(r) + T = sorted(taint(a, seq) | taint(b, seq)); ports = [P[t] for t in T] + c[(k, len(T), rank(ports))] += 1; dep[(k, rank(ports) < len(T))] += 1 + ok = all(((f & p).bit_count() % 2 == 0) for f in F for p in ports) + sets.append((k, ports, ok)) +check('f1.s3s4.counts-S3-156-(8 readers,rank5)-S4-112-(4 readers,rank3)', dict(c) == {('S3', 8, 5): 156, ('S4', 4, 3): 112}, str(dict(c))) +check('f1.s3s4.all-268-dependent', dep == {('S3', True): 156, ('S4', True): 112}) +check('f1.s3s4.copy-frame-orthogonal-to-all-reader-ports-at-copy-time', all(o for _, _, o in sets)) +import itertools +def analyze(ports): + pts = [] + for p in ports: + if p and p not in pts: pts.append(p) + n = len(pts) + rk = lambda S: rank([pts[i] for i in S]) if S else 0 + full = rk(range(n)); flats = set() + for m in range(1 << n): + S = [i for i in range(n) if m >> i & 1]; r = rk(S) + flats.add((frozenset(i for i in range(n) if rk(S + [i]) == r), r)) + flats = list(flats) + mod = lambda F: all(rk(sorted(F[0] | G[0])) + rk(sorted(F[0] & G[0])) == F[1] + G[1] for G in flats) + M = [f for f in flats if mod(f)] + def chain(cur): + if cur[1] == full: return True + return any(g[1] == cur[1] + 1 and cur[0] <= g[0] and chain(g) for g in M) + return any(chain(s) for s in M if s[1] == 0) +res = collections.Counter() +for k, ports, _ in sets: res[(k, analyze(ports))] += 1 +check('f1.s3s4.supersolvable-0-of-156-S3-0-of-112-S4', dict(res) == {('S3', False): 156, ('S4', False): 112}, str(dict(res))) +done() diff --git a/research/format-limits-2/s7-9-centre-fragmentation/checks/f6_log.py b/research/format-limits-2/s7-9-centre-fragmentation/checks/f6_log.py new file mode 100644 index 0000000000..a28b413f72 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/checks/f6_log.py @@ -0,0 +1,14 @@ +"""F6 (CHECKED (log)): parse the shipped, sha256-pinned miner output of the rebuilt #664 word (evidence/F6/miner664_run1.out). +Line 1 is Counter({'disjoint': N, 'grow': G}) (disjoint-lifetime helper pairs, and how many of them need frame growth); line 2 is the Counter of +frame-nested pairs (empty = none). Not a re-run of the miner.""" +import ast, os +from common import * +L = open(os.path.join(ROOT, 'evidence', 'F6', 'miner664_run1.out')).read().strip().split('\n') +def parse(l): + assert l.startswith('Counter(') and l.endswith(')') + return ast.literal_eval(l[len('Counter('):-1] or '{}') +pairs, nested = parse(L[0]), parse(L[1]) +check('f6.log-2534-disjoint-pairs-all-need-growth-0-nested', + len(L) == 2 and pairs == {'disjoint': 2534, 'grow': 2534} and nested == {} and sum(nested.values()) == 0, + 'disjoint %d, grow %d, nested %d' % (pairs['disjoint'], pairs['grow'], sum(nested.values()))) +done() diff --git a/research/format-limits-2/s7-9-centre-fragmentation/checks/o1_faces.py b/research/format-limits-2/s7-9-centre-fragmentation/checks/o1_faces.py new file mode 100644 index 0000000000..350f0f4fb8 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/checks/o1_faces.py @@ -0,0 +1,51 @@ +"""O1: cross-block 'X4' faces on the 112 lines (port of cards B68/B74 dump.c restricted to quads in 4 distinct blocks), +the face-sum supply tests of B74, and the booked charge arithmetic of B7. Input: root lines of the #656 word.""" +import itertools, random +import numpy as np +from common import * +R = np.array(jgz('pr656-FULL-WORD.json.gz')['root_lines'], int) +ip = R @ R.T +blk = np.arange(112) // 8 +S = np.sign(ip).astype(np.int8) +faces = []; hist = {} +for bq in itertools.combinations(range(14), 4): + tg = np.array([t for t in range(112) if blk[t] not in bq]) + L = [np.arange(8 * b, 8 * b + 8) for b in bq] + s = [S[np.ix_(tg, l)] for l in L] # (80, 8) + ok = [(x != 0) for x in s] + valid = ok[0][:, :, None, None, None] & ok[1][:, None, :, None, None] & ok[2][:, None, None, :, None] & ok[3][:, None, None, None, :] + sg0 = s[0][:, :, None, None, None] + code = ((s[1][:, None, :, None, None] != sg0).astype(np.int8) + + 2 * (s[2][:, None, None, :, None] != sg0).astype(np.int8) + + 4 * (s[3][:, None, None, None, :] != sg0).astype(np.int8)) + cnt = np.stack([((code == k) & valid).sum(0) for k in range(8)]).max(0) # (8,8,8,8) + for m, nn in zip(*np.unique(cnt, return_counts=True)): + hist[int(m)] = hist.get(int(m), 0) + int(nn) + for idx in zip(*np.nonzero(cnt >= 10)): + faces.append(tuple(int(8 * b + i) for b, i in zip(bq, idx))) +check('o1.4-block-quads-total', sum(hist.values()) == 1001 * 4096) +check('o1.eff-reach-10-faces-2688-none-above', len(faces) == 2688 and max(hist) == 10 and hist[10] == 2688, f'max eff reach {max(hist)}, count at 10: {hist[10]}') +check('o1.every-face-spans-4-blocks', all(len({f_ // 8 for f_ in f}) == 4 for f in faces)) +rk = lambda A: int(np.linalg.matrix_rank(A, tol=1e-8)) +random.seed(1) +def form(f, sg): + v = np.zeros(112) + for i, s in zip(f, sg): v[i] = s + return v +Tall = np.array([form(f, [random.choice([-1, 1]) for _ in range(4)]) for f in faces]) +check('o1.2688-face-forms-span-Q^112', rk(Tall) == 112) +res = set() +for _ in range(20): + T = Tall[random.sample(range(len(faces)), 56)] + res.add((rk(T), rk(np.vstack([R.T.astype(float), T])) - 8)) +check('o1.random-56-faces-rank-56-and-56-beyond-the-8-centres', res == {(56, 56)}, str(res)) +def pairs_needed(sel): + used = set() + for f in sel: + opts = [((f[0], f[1]), (f[2], f[3])), ((f[0], f[2]), (f[1], f[3])), ((f[0], f[3]), (f[1], f[2]))] + used |= set(min(opts, key=lambda o: sum(p not in used for p in o))) + return len(used) +r = [pairs_needed([faces[i] for i in random.sample(range(len(faces)), 56)]) for _ in range(50)] +check('o1.random-56-faces-need-at-least-100-pair-registers', 100 <= min(r) and max(r) <= 112, f'{min(r)}..{max(r)} distinct pair registers (seeded 50 trials, greedy pairing; B74 recorded 105..112)') +check('o1.booked-charge-arithmetic-12.21', abs(14 * 0.3 + 56 * 0.143 - 12.208) < 1e-9 and abs(56 * 0.143 - 8.008) < 1e-9, '14 x 0.3 + 56 x 0.143 = 4.2 + 8.008 (booked rates; 0.143/helper is the J16-H class rate, not derived here)') +done() diff --git a/research/format-limits-2/s7-9-centre-fragmentation/checks/y1_centre_cut.py b/research/format-limits-2/s7-9-centre-fragmentation/checks/y1_centre_cut.py new file mode 100644 index 0000000000..2fb874dca6 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/checks/y1_centre_cut.py @@ -0,0 +1,97 @@ +"""Y1: centre/cut facts for the 112-port content map M of the #656 word (rows Y1, O1 numerics). +Inputs: inputs/pr656-FULL-WORD.json.gz (root_lines R; M = exact replay of precondition-free A+B+cut).""" +import itertools +from fractions import Fraction as Q +import numpy as np +from common import * + +d = jgz('pr656-FULL-WORD.json.gz') +R = np.array(d['root_lines'], float) +check('y1.R-shape', R.shape == (112, 8), str(R.shape)) +# exact replay of A, B, cut +rows = {r: {r: Q(1)} for r in range(112)} +for ph in ('A', 'B', 'cut'): + for o in d[ph]: + if o[0] == 'add': + t, s, q = o[1], o[2], Q(o[3], o[4]) + rt = rows.setdefault(t, {}); rs = rows.get(s, {}) + for j, x in list(rs.items()): + z = rt.get(j, 0) + q * x + if z: rt[j] = z + else: rt.pop(j, None) + else: + t = o[1]; q = Q(o[2], o[3]) + rows[t] = {j: q * x for j, x in rows.get(t, {}).items()} +M = np.zeros((112, 112)) +for t in range(112): + for j, x in rows.get(112 + t, {}).items(): + M[t, j] = float(x) +check('y1.M-from-replay', np.linalg.matrix_rank(M) == 112 and all(abs(float(v) * 64 - round(float(v) * 64)) < 1e-9 for v in M.ravel()), + 'rank M 112, entries multiples of 1/64') +rk = lambda A: int(np.linalg.matrix_rank(A, tol=1e-8)) +G = R.T @ R +check('y1.rank-G-8', rk(G) == 8) +res = {k: rk(M[:k, k:]) for k in (14, 28, 56, 84)} +check('y1.matched-cut-ranks-6-7-7-8', [res[k] for k in (14, 28, 56, 84)] == [6, 7, 7, 8], str(res)) +rng = np.random.default_rng(1) +mx = 0 +for _ in range(2000): + p = rng.permutation(112) + mx = max(mx, rk(M[np.ix_(p[:56], p[56:])])) +check('y1.random-bipartition-offdiag-rank-max-8', mx == 8, 'max over 2000 seeded random 56|56 splits (sample, not a bound)') +# blocks of 8 consecutive lines (equal octad support) +sup = [tuple(np.nonzero(R[i])[0]) for i in range(112)] +check('y1.blocks-are-8-consecutive-lines', all(sup[i] == sup[8 * (i // 8)] for i in range(112)) and len(set(sup)) == 14) +blocks = [list(range(8 * b, 8 * b + 8)) for b in range(14)] +cnt = {} +for S in itertools.combinations(range(1, 14), 6): + A = [i for b in [0] + list(S) for i in blocks[b]] + sa = set(A); B = [i for i in range(112) if i not in sa] + r = max(rk(M[np.ix_(A, B)]), rk(M[np.ix_(B, A)])) + cnt[r] = cnt.get(r, 0) + 1 +check('y1.block-7|7-splits-rank8-in-1708-of-1716', cnt == {8: 1708, 7: 8}, str(cnt)) +# the 8 exceptions are the coordinate splits (rows with R[:,j]==0 vs !=0), rank 7 +ex = 0 +for j in range(8): + A = [i for i in range(112) if R[i, j] == 0]; B = [i for i in range(112) if R[i, j] != 0] + ex += (len(A) == 56 and rk(M[np.ix_(A, B)]) == 7 and rk(M[np.ix_(B, A)]) == 7) +check('y1.exceptions-are-8-coordinate-splits-rank7', ex == 8, 'CAVEAT: rank 7 does occur at these 8 splits') +# F2 weights of the centre code +Ri = R.astype(int) +from collections import Counter +c = Counter(int(((Ri @ np.array([(x >> k) & 1 for k in range(8)])) % 2).sum()) for x in range(1, 256)) +check('y1.centre-F2-weights-0:15,56:128,64:112', dict(c) == {0: 15, 56: 128, 64: 112}, str(dict(c))) +# real-valued support of centre combinations: sampled minimum (an upper bound on the true minimum) +rg = np.random.default_rng(1); best = 112 +for _ in range(20000): + S = rg.choice(112, 7, replace=False) + u, s, vt = np.linalg.svd(R[S]) + if s[-1] < 1e-9: continue + best = min(best, int((np.abs(R @ vt[-1]) > 1e-9).sum())) +check('y1.min-centre-support-sampled-53', best == 53, 'min over 20000 seeded 7-subsets; upper bound on the true min') +# root-system closure: rows plus the 8 lines 2e_i give 120 lines = E8 root system (240 roots); reflections close it +roots = [tuple(int(x) for x in r) for r in Ri] + [tuple(2 * int(i == j) for j in range(8)) for i in range(8)] +roots = set(roots) | {tuple(-x for x in r) for r in roots} +ok = len(roots) == 240 and all(sum(x * x for x in r) == 4 for r in roots) +if ok: + rl = [np.array(r) for r in roots] + for a in rl[:60]: + for b in rl: + if tuple(int(x) for x in (b - (2 * (a @ b) // 4) * a)) not in roots: + ok = False +check('y1.rows+8 coordinate lines = E8 root system (240 roots, reflection-closed on 60 reflectors)', ok) +# strand/total rank: a weight-4 total from 4 different blocks adds +1 rank over the centres +rg = np.random.default_rng(0); allp = True +for _ in range(300): + T = np.zeros(112) + for b in rg.choice(14, 4, replace=False): + T[8 * b + rg.integers(8)] = rg.choice([-1, 1]) + allp &= (rk(np.hstack([R, T[:, None]])) == 9) +check('y1.cross-block-weight4-total-adds-rank-1', allp, '300 seeded totals; support 4 << 53') +# Y2 (numeric part, B106): the 8 coordinate 56|56 splits of the Gram matrix RR^T +GG = R @ R.T; okk = True +for j in range(8): + A = [i for i in range(112) if R[i, j] == 0]; B = [i for i in range(112) if R[i, j] != 0] + okk &= (rk(GG[np.ix_(A, B)]), rk(GG[np.ix_(A, A)]), rk(GG[np.ix_(B, B)])) == (7, 7, 8) +check('y2.coordinate-splits-rank(G_AB,G_AA,G_BB)=(7,7,8)', okk, 'all 8 splits; whole-split schedule saves no decoder term (price argument RECORDED)') +done() diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B80-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B80-NOTES.md new file mode 100644 index 0000000000..c02c455c12 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B80-NOTES.md @@ -0,0 +1,11 @@ +# B80 NOTES: who pays the target join? VERDICT: PROVEN (scope: ck/jp8 shipped op ORDER, A+B ops) no schedule slack at fixed order; order-free = loose 614 ψ/call bound only (LEAD-unproven). ship=false +Tools (single process, <1 min): slack.py (direct-port ceiling c(o)=9-rank(ports of o's unserved target readers)), upr.py (B11 transitive legal ceiling U via upper(), per-class ψ), gap.py. ck and jp8 targets identical. +## Results (per call, ψ=r ln(73/r); target frag shipped 1342 = 3323 step-ψ - 112*ψ(8)) +1. Direct-port ceiling (what the card defined), one-jump to suffix-min ceiling, same order: slack 614 ψ/call (fixed reader order, 0 violations of shipped), 699 (best reader peel order per operand, 42 violations = loose) -> above the 400 LEAD line, BUT this ceiling ignores every other constraint on the operand. +2. Legal ceiling at the same op order (B11 reverse closure U, includes transitive partner-chain caps): 950/1096 target-touching ops (87%) are already AT U; the other 146 have 1 dim of slack. Setting all target ops to U: T +2.7, helpers -5.5, sources -2.8 => net -5.6 ψ/call (< 65 GO). PROVEN for fixed order (agrees with B11 0.0% SA). +3. Why the gap 614 vs ~0: on target ops the direct cap exceeds the legal ceiling by (dims:ops) 0:224, 1:264, 2:16, 3:16, 4:28, 5:195, 6:169, 7:16. i.e. 70% of ops are held 1-7 dims below the PORT ceiling by the operand's other (helper/source) readers and partners, not by the port cap. Operand kinds: H 802 target ops (592 below cap), S 126 (112 below cap). So fragmentation is not set by the CAP geometry; the port-cap ceiling is slack, the binding rule is the transitive dependency (flow) order. +## Answer to the card +Forced, at fixed schedule. Targets sit at the transitive ceiling (87% of ops exactly; the rest 1 dim, no net gain). The geometric (cap-in-F2^9) ceiling is far above it, so the 8-block 'dim 5' argument is NOT what binds; the flow chains are. Schedule slack exists only if ops are reordered/flow changed, and the only bound I have for that is the loose direct-port 614-699 ψ/call (~+2.5% b before operand costs), unpriced; B11 SA (local swaps) found 0. +## Next step (not done, > 10 min gate) +Tighter order-free ceiling: per target op, ceiling = min over (port cap, ceiling of operand's FLOW-descendants), with operand's other readers' orders also free (needs the dependency DAG of the word, e.g. via B76 provenance). Only if that bound stays >= 400 ψ is a reader-order SA (non-local, DAG-level) worth a card. Odds low (~10%). +Escapes (kill protocol): (1) op reorder with changed DAG; (2) operands re-sourced (copy helpers) so their other readers don't cap; (3) dropping common-frame-at-ADD (SPEC, not allowed). Rescue check: order-free DAG ceiling above. diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B81-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B81-NOTES.md new file mode 100644 index 0000000000..747fb9b7b9 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B81-NOTES.md @@ -0,0 +1,25 @@ +# B81 NOTES: carrier ladder via Etzion coverings. VERDICT: KILL at the gate (PROVEN for covers of fixed reader sets, ck word; LOCAL-PRICE for hub-sum designs). ship=false +Tools: cards/B81/gate.py, hub.py (single process, <2 min, venv python). Inputs: ck CANONICAL-WORD ports (112, cap verified: 0 pairs XOR into the set), R.npy (readers: G=R R^T/2, 52 readers/source). +Assumption: target index t <-> port[t] (B11 convention). B80 NOTES not present, so the join rule is taken in the model's FAVOUR (all target savings granted, 905 psi/call). + +## Gate 1: cover numbers (per source, 52 readers) +- Etzion t=1 recipe at n=9: a plane SPREAD exists (3|9; 73 F8-lines partition PG(8,2)), so the lifted-MRD/recursion part is not needed. Intersected with the reader port set (200 random bases): 38.3 planes per source, 1.36 readers/plane (needs <=4; useless: a basis-blind cover ignores the cap). +- Cap-aware greedy cover with actual port quads (4 ports XOR 0 = the only 4-reader planes; ~1061 quads among each source's readers): 14.3 carriers/source (min 14, max 15), 3.64 readers/flat. +- Lower bound 52/4 = 13 per source. So single-source carriers: 112 x 14.3 = 1601 carriers. + +## Gate 2: price (psi/call; hosting 12.5 per quad carrier, 13.5 per pair carrier) +- Single-source ladder: 1601 x 12.5 = 20,000 hosting alone vs max target saving 905 (even all fragmentation of targets is 1342). Net ~ -19,000. Far below 65 psi GO. KILL. +- Generous hub-sum variant (one carrier = SUM of sources whose coefficient rows agree up to sign on the carrier's readers, the J37-H hub idea): pair (t,u) carriers share ~17.6 sources each, quads only 3.4 (24,276 quads). Greedy incidence cover (5824 (source,target) incidences): 139 pair hubs + 1 quad cover 5427 (397 left), hosting 1889 psi > 905 saving. Net < -980 before the hubs' own climbs, before the left-overs, and with saving over-counted. +- Over-count reasons for the saving: a target sits in ~2.5 pair hubs with DIFFERENT partners, i.e. different dim-7 frames, so its climb cannot be (7,1) (monotone, one frame at a time). (7,1) needs a global pairing of targets where every source's reader set is a union of pairs (twin vertices); none exists (reader sets differ). + +## How a carrier ladder escapes J38-U? It does NOT. +- A source s feeding a carrier at dim 7 (pair {t,u}) must itself be at frame perp(p_t,p_u), i.e. all its other readers already served, so a source can feed ONE dim-7 carrier (the last) and ONE dim-6 carrier before it. Feeding order is forced to be a nested chain V1>V2>... of reader spans. A flat ladder where a source feeds many pair carriers is illegal (same reader-cap that killed the dim-3 hubs, J38-U, from the other end). Only chain-nested levels are legal: ~log levels, each carrier serving the readers in V_i \ V_{i+1}, not a flat cover. + +## Escapes / rescue (kill protocol) +1. Chain-nested carriers (legal) serve readers in V_i\V_{i+1}: sizes are set by the cap geometry, not by flats; B80's slack measure prices that (not done here). +2. Carriers shared across calls/blocks (amortised): changes hosting to per word; no mechanism known (J30-F fusion neutral). +3. Descents (frame-lowering) for hubs: R39-H LOCAL-PRICE -2.9% b. +Rescue check: replace 12.5 hosting by 0 (free carriers): hub-sum net = 905 - own climbs(139 x >=7 psi ~ 1000) ~ 0; still < 65. Free single carriers: 1601 climbs. Still KILL. + +## TRANSFER (one line) +Survives: the spread idea (PG(8,2) = 73 disjoint planes = F8-lines) as a tiling of ports into reader-blind blocks; the cap-aware quad count (24,276 rank-3 flats, 3.4 sources shared) as a bound for any rank-3 hub design. MRD lifting / recursion not needed and do not help (cover must be cap-aware, not point-covering). diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B82-DISCOVERY.json b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B82-DISCOVERY.json new file mode 100644 index 0000000000..baab4e0080 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B82-DISCOVERY.json @@ -0,0 +1,49 @@ +{ + "status": "EXACT_CLEAN_OWN_Y_EARLY_CENTER_WORD_NOT_ADMITTED", + "h": 9, + "v": 112, + "R": 492, + "cst": 64, + "m": 73, + "local_profile": { + "1": 2024, + "2": 760, + "3": 300, + "4": 168, + "5": 168, + "6": 44, + "8": 8 + }, + "centre_ranks": [ + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8 + ], + "tri_join_counts": { + "2": 24, + "3": 24, + "4": 24, + "5": 24, + "6": 24 + }, + "selected_load_join_counts": { + "6": 88 + }, + "selected_partitions": [ + 0, + 0 + ], + "first_load_join_counts": { + "4": 88 + }, + "source_columns_exact": 112, + "borrowed_output_pairs": 56, + "source_and_helper_cleanup_exact_on_clean_columns": true, + "local_rank_mass": 6284, + "scope": "Clean scalar identity and all literal monotone local frames only; arbitrary-dirt compensation, entrance kernels, exact phase recipes, and global hosting/pricing are not yet certified." +} diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B82-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B82-NOTES.md new file mode 100644 index 0000000000..f229f6ac26 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/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/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B82-run.log b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B82-run.log new file mode 100644 index 0000000000..baab4e0080 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B82-run.log @@ -0,0 +1,49 @@ +{ + "status": "EXACT_CLEAN_OWN_Y_EARLY_CENTER_WORD_NOT_ADMITTED", + "h": 9, + "v": 112, + "R": 492, + "cst": 64, + "m": 73, + "local_profile": { + "1": 2024, + "2": 760, + "3": 300, + "4": 168, + "5": 168, + "6": 44, + "8": 8 + }, + "centre_ranks": [ + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8 + ], + "tri_join_counts": { + "2": 24, + "3": 24, + "4": 24, + "5": 24, + "6": 24 + }, + "selected_load_join_counts": { + "6": 88 + }, + "selected_partitions": [ + 0, + 0 + ], + "first_load_join_counts": { + "4": 88 + }, + "source_columns_exact": 112, + "borrowed_output_pairs": 56, + "source_and_helper_cleanup_exact_on_clean_columns": true, + "local_rank_mass": 6284, + "scope": "Clean scalar identity and all literal monotone local frames only; arbitrary-dirt compensation, entrance kernels, exact phase recipes, and global hosting/pricing are not yet certified." +} diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B85-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B85-NOTES.md new file mode 100644 index 0000000000..8725b268e6 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B85-NOTES.md @@ -0,0 +1,19 @@ +# B85: format-level lower bound on target fragmentation. VERDICT: KILL as a tight bound (PROVEN weak bound; skeleton-free bound = 0). ship=false +Tool: b85.py (single process, <2 min; reads B11 coarse.load of ck/jp8; no heavy job). Scope: SPEC + cap geometry (112 ports, cap in F2^9), psi(r)=r ln(73/r), frag = sum psi(steps) - psi(8) = 1342/call shipped (12.0 per target avg). +## Proven (rule-by-rule) +1. SPEC common frame + monotone frames: when operand o is added into t, both are at one frame F; o's frame afterwards contains F; any later direct target reader t' of o needs F inside perp(p_t'). Hence reader j of o (r = k-j+1 readers still pending incl. t) reads at dim <= 9 - rank(ports) <= 8 - ceil(log2 r) (cap: k ports span rank >= ceil(log2 k)+1). Only the LAST reader of o can read at dim 8; at most 2^(8-L) readers of o can read at dim >= L. +2. t's frame is monotone, so t's frame at every read is <= the read's ceiling. If t reads any operand as a non-last reader, its chain has a stop d <= 7 before 8, so frag(t) >= min_d [psi(d)+psi(8-d)] - psi(8) = psi(1)+psi(7)-psi(8) = **3.014 psi** (concave psi: cheapest stop is d=1; the ceiling then does not matter beyond "< 8"). Targets with ALL reads last-reader: frag 0. +3. Per-target statement: L(t) = 3.014 if t shares any direct operand with another target, else 0. Order-free over the direct-read graph of the shipped word (396 operands, 796 pairs; k_o in 1..5, targets read 5-10 operands; k_o max is 5, so every cap ceiling is >= 5): the all-last targets form an independent set in the "shares an operand" graph (degree 1..9, avg 4.9). Found packing 36 (B&B hit its 60 s limit; optimum not proven, so P>=36 and bound <= below). + Bound: L <= 3.014 x (112 - 36) = 229 psi/call (if P=36 optimal; never above 3.014 x 112 = 338). ck and jp8 identical. +## Numbers +Shipped 1342 psi/call; bound <= 229 (<= 338 worst case); GAP >= 1004..1113 psi/call = 75-83% of target fragmentation; at the SYN-4 rate (1342 psi = +6.68% b, ~0.00498% b/psi) the bound is worth at most +1.1% b, gap up to +5.5% b. This is the same room SYN-4 found (one-jump +6.68%); the bound does not shrink it. +## Why it is loose, and what would close it (the card's kill clause) +- Skeleton-free: a private helper h_t per target (t reads only h_t, as its last reader) gives L = 0. SPEC alone cannot forbid it; the cost reappears as helper climbs (SYN-4: helper and target fragmentation are one currency). A skeleton-free target bound is therefore 0 and cannot be raised without a rule on helpers. +- Rule needed: a JOINT bound over all registers: the operand's frame floor (o's frame at the read contains every earlier reader's read frame; helper reading sources at common frame must climb to it) plus the fixed mass cover (deficit 2560 literal). Each ADD (o,t) forces dim(F) >= dim(span of o's earlier-read frames) and >= t's frame, so one ADD's cost is shared by two chains; a bound needs a global charging argument (per ADD, fragmentation >= f(common-frame rank jump)) not per-target. +- Also not used: actual port ranks (B80 c(o)=9-rank gives higher/lower ceilings but only matters for the L<8 test), floors of d>=2 (would raise 3.014 toward 11), forced extra stops from different operands' incompatible frames (B11: 77.5% transitive). +## Escapes / rescue (kill protocol) +1. Add floors: stop d >= dim of the operands' common frames (needs B76 provenance of each operand's frame) -> per-target bound up to ~11; unproven, would need the joint charging above. +2. Fix the helper count (no private helpers: e.g. R <= shipped 484) and bound targets+helpers together by ADD-charging. +3. Drop common-frame ADD (SPEC, not allowed). +Rescue check: replaced "last reader" by actual-rank ceilings 9-rank(ports of pending readers): readers with k<=5 pending still rank<=5<9, same L<8 test -> same 3.014/not-last result. +Proven vs argued: items 1-3 proven (scope: direct-read graph of ck/jp8, ports as in B11 load); P=36 packing is a found value (not optimal-proven); the 'private helper => 0' point is an argument from SPEC (nothing forbids it), not a built word. diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B89-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B89-NOTES.md new file mode 100644 index 0000000000..46880b4a6a --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F1/B89-NOTES.md @@ -0,0 +1,15 @@ +# B89: modular chains / supersolvable reader order for S3/S4 copies. VERDICT: KILL, PROVEN [scope: shipped #656 packets, reader set = union of both chains' downstream target ports P[t] (B82 taint), binary simple matroid of the port vectors]. ship=false +Lit verified (citations only, from memory): Stanley, Algebra Universalis 2 (1972) 197-217 (supersolvable lattice = maximal chain of modular elements); Terao, Adv. Math. 62 (1986) 135-154 (modular element => factorisation/fibration, over fields of char 0 hyperplane arrangements; the combinatorial part is lattice-only so applies over F2). Not re-fetched. +Tool: g.py (single process, <1 min; reads B82 work/out/rec.pkl). Brute-force modular flats, then chain search. +## Gate result (4 min) +- Reader arrangements: S3 156 packets: 8 distinct readers, rank 5; S4 112: 4 readers, rank 3. All 268 are DEPENDENT (not boolean, so not trivially supersolvable). +- Supersolvable (a maximal chain of modular flats exists): 0/156 S3, 0/112 S4. E.g. S4 = U(3,4) (circuit of 4 ports): rank-2 flats {1,2},{3,4} meet in 0, 2+2 != 3+0, so no modular line. +- Independent of that, order is vacuous: the copy-time frame F (S3 dim3, S4 dim5) already lies in perp of ALL reader ports (268/268, B82). So any reader order is fine AT COPY TIME; what fails is the later read (frame has grown with the register's own history; B82: 0/124 reads legal even first-read). A modular chain would only organise intersections of hyperplanes, not shrink the packet's content span, which is what the frame must contain. +- Mutation: 144 packets (32 S3 + 112 S4) are value-forced copies; no reader order helps. +## Count: 0/124 h1 S3 admit a modular order (0/268 total). Gate killed; no pricing run. +## Escapes (3) +1. Read both targets right after the copy while frame = F (B82 esc.1): needs target frames still in hyper intersections; DAG-level, depends on B83's weak bound (2478 psi, over-reports). +2. Non-supersolvable but lower-rank pieces: split the 8 readers by chain (4+4); not tested, but each half's rank also >= 3 and same obstruction expected. +3. Choose reader pairs sharing ports (B82 esc.3) in a new skeleton (SYN-4/B81). +Rescue check: restricted to per-chain reader sets of S4 (2 readers each) trivially modular but that is just the shipped single-chain reading, no copy saved. +TRANSFER: supersolvability of the reader sets is not the lever for S3/S4 copies; the lever is target-read timing (frame at read vs content span). Reuse g.py's modular-flat checker for any port sub-arrangement (use on B81 skeleton reader sets). diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F2/B103-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F2/B103-NOTES.md new file mode 100644 index 0000000000..0a8e274461 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F2/B103-NOTES.md @@ -0,0 +1,13 @@ +# B103: equal-value re-threading census on B76 CANONICAL-WORD. VERDICT: KILL (no slack, no dyadic block legalised). ship=false +Tools in work/ (census.py, an.py, an2.py, sw.py, subs.py, subs2.py, chk.py; run with venv python, all <1 s). Uses B105 miner.W stream (A,cut,B,tail) + cascade. Unmodified word: 0 centre / 0 final violations, climb mass 4636. +Lemma 1 sanity: the cascade cur-frame equals the journey join by induction (each ADD sets a common frame = join), so G = cascade; U enters only via the final/centre caps (cascade violations). Full backward U not built (not needed: no G reduction found). +## Census (exact mod-p rows, hash of normalised row at every op, stream of 6075 ops) +- Equal-value pairs (a,b): 1148 distinct, 1178 equality intervals; 997 with scalar lam=1, 181 with lam!=1. +- Different pasts (cascade frame of a != b at creation or end of interval): 792 intervals / 776 pairs (598 pairs lam=1). Mostly S3/S4/centre copies and their faces. +- BUT a future swap is value-legal only if the end rows agree (a,b equal at tau => swap leaves all registers identical except a<->b, so need end_row[a]==end_row[b]; outputs cannot be relabelled). 953 intervals fail this, 181 are lam!=1 (not tested), 44 pass: 42 pairs (16 with different pasts at creation). +- Swap futures at t0/mid/t1 of those 42 pairs (129 tests, value-exact by construction): 123 legal, 6 violate finals (pair 45/308 in A, tail pairs). Climb mass: all legal swaps = 4636 exactly (zero change); illegal ones 4638-4652. No swap lowers any frame mass. Note 41 of 42 pairs live in B/tail; only (45,308) is in A and it is illegal. +## Elementary move: source substitution (ADD t+=q s, replace s by equal-row s') +- 967 candidates (lam=1; 580 A, 384 B, 3 tail). 799 violate finals and raise mass; 168 legal with mass exactly equal; 0 lower mass. +- End-of-A frames of the 112 lines under the 168 legal A substitutions: all identical to shipped (this is the quantity B98c's dyadic blocks need lowered, 4 -> 2/3). So no dyadic block becomes legal. +## Reading +Equal values with different pasts exist (776 pairs) but where pasts differ the futures end in different outputs (cannot swap), and where futures agree the pasts coincide downstream: Lemma 2 rigidity holds for fixed order and DAG against future swaps and single-source substitution at lam=1. Not tested: lam!=1 rescaled swaps (181 intervals), window swaps with swap-back across two equality intervals (21 multi-interval pairs; B105 territory), joint multi-swap (single swaps all neutral, so greedy/SA has nothing to optimise). Value replay: swaps and substitutions are exact by the equal-row argument; no price step needed (Delta mass 0, no kappa claim). diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F2/B105-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F2/B105-NOTES.md new file mode 100644 index 0000000000..c615a54af4 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F2/B105-NOTES.md @@ -0,0 +1,16 @@ +# B105: opening miner on #656 canonical word. VERDICT: 0 priced-positive openings (rigidity fact). ship=false. No heavy jobs, no kappa claim. +Tool: work/miner.py (reusable: W(path) loads any CANONICAL-WORD with A,B,cut,centers,start,final,frames; tail optional). run1.py/run1b.py (cat1 uncompute+rename gates), run5.py (cat5), usage `python3 -I run5.py WORD [sample]`. Base: forward join cascade on unmodified word = 0 violations (also on #646 ck/jp8 words; miner runs there too). +Lifetime = first TOUCH (zero-reads/dummy cold ops carry frames) to last touch in A,cut,B,tail. First attempt used first nonzero row: gave 39 "nested" pairs, all dead because b's earlier zero-touch ops hit a (B99 pitfall; fixed). +## Counts (raw / cascade-clean / value-checked+priced-positive) +- Cat1 lifetime pairs (helpers): 4708 disjoint ordered pairs; 0 frame-nested (0 growth); 58 with growth 1 dim. All 58 fail cascade on RENAME ALONE (no uncompute): 7-8 target end frames forced 8->9. => 0 / 0. +- Cat1 (loose, first-nonzero lifetime): 39 nested, uncompute-alone clean for ~9 (a=370,402,545,568,569,578,585,586,590 with 'all' sources), every rename fails (7-8 target caps). 0 clean. +- Cat2 idle: 1016 gaps >=400 ops between touches; 44 helpers idle at final frame >=400 ops before last use. Hosting inside a gap (b's span inside a's gap, frames nest): 0 raw. (Hosting a nonzero a would also need dirty restore, #665 >=5x.) +- Cat3 slack: stored op frames above operand join: 251 ops (pre-raises). Lowering them ALL makes the profile worse (units 2542->2582, w2 414->886, w3 434->154): shipped pre-raises are coarsening, not slack; mass invariant 5568. End slack 508 regs = cleanup climbs (not true slack). B98d suggestion (433/435 -> wide kept regs): 433 equals 432 only in ops 3609-3642 (frames equal) yet 433 is read through tail (6043) with changed content => not replaceable; 20=442 equal in 3618-3643 only. No clean candidate. +- Cat4 near-disjoint (<=2 interleaved touches, frames nest): 0 raw. +- Cat5 role swaps: 982 equal-content pairs (1179 intervals; H-H 422, L-H 332, T-T 216, T-H 12); 988 intervals start with equal frames. Sampled 900 swap moments: 657 cascade-clean (pure relabel), but swapping creates 0 new nested pairs (growth-1 count stays 58, all still fail). NOT value-checked: a swap changes the x,y end rows unless equal at end, so no swap counts as an opening. +- Copy elision (5c, y's writes dropped, reads redirected to x equal in [t0,t1)): 16 raw (tail copies 519,536,548,552...), 0 clean (2-4 target end frames 8->9). +- Twin elimination (all touches inside equality interval): 6 raw, all need dropping the copy op; folded into 5c. +## Interpretation +Shipped frames are tight against target perp(port) caps: ANY change giving a helper-register a frame different from its shipped history, even +1 dim, pushes 2-8 targets 8->9. Frame-nested disjoint pairs do not exist at all. Consistent with B99/B98c/B100. +## Not done +#664 word not rebuilt (heavy.sh BUSY, 3/3; rebuild ~10 min); miner is ready for it. Value replay (judge rule) never reached because no candidate passes the frame cascade; add exact Fraction row check (rows_at) before pricing for any future pass. diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F2/B107-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F2/B107-NOTES.md new file mode 100644 index 0000000000..3665eb0df3 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F2/B107-NOTES.md @@ -0,0 +1,11 @@ +# B107: B99b v3 deletion of 44 "unused" S1 scratch. VERDICT: FAIL at check 2 (value exactness). ship=false. No kappa claim. +Scripts: c12.py (check 1), c2.py (check 2); both single-process, <2 min, on the #656 canonical word (B76 out_local), B99b lib (exact Fractions). +## Check 1 (which 44, what "unused") +44 = noB (A-only scratch, 224..447, not read/written in B, not centres: 67) minus cl_used (appear in compensation/cleanup/cut: 23) = 44 (e.g. 225,227,241,243,257,259,273,...,435). "Unused" only means: not touched in phase B, tail, cut, compensation, cleanup. NOT unused in A. +Every one of the 44 is a SOURCE in A: 19-25 reads each, 690 A ops in total of the form add(kept target, D source). Per-register tgt/src/src->kept counts printed by c12.py (e.g. 225: tgt 22, src 25, src->kept 22). +## Check 2 (value exactness) +Exact rational replay of A with all ops touching D removed (the v3 edit): 134 kept registers (e.g. 7,8,9,10,11,16,17,...) have a different end-of-A row than the shipped word. First failure verbatim: "kept regs whose end-of-A row differs: 134 [7, 8, 9, 10, 11, 16, 17, 18, 19, 20, 22, 23, 24, 26, 28, 29, 30, 35, 37, 38]" and "A ops with D source and kept target: 690". +So deleted ops feed kept registers: the edited word computes a different linear map. B99b v3 only measured the frame cascade (its own notes: "naive deletion ... upper bound on B98c"), never values. The -176 mass/call is the frame-model price of ops that carry the actual computation (these scratch are the S1 factory/gauge intermediates: B98c's foreign-read flaw is the same phenomenon). +## Checks 3-5 +Not run (stopped at first failure, per card). No heavy.sh jobs used. No edited word, no kappa. +No SHIP CANDIDATE. diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F2/B108-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F2/B108-NOTES.md new file mode 100644 index 0000000000..3a1a0084cd --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F2/B108-NOTES.md @@ -0,0 +1,10 @@ +# B108: window swaps, scaled swaps, full-cap check on B76 CANONICAL-WORD. VERDICT: KILL PROVEN(scope) — re-threading at fixed order/DAG is closed. ship=false +Tools: work/win.py (modes ii, iia, i; incremental cascade from snapshot, ~4 ms/test), pw.py (per-op frame compare), val.py (mod-p replay). Baseline reproduced: mass 4636, 0 centre / 0 final violations. Equality intervals from B103 pairs.pkl. All runs were single process, <2 min each (heavy.sh was BUSY). +## Results (tested / frame-legal / lowering any frame) +- (ii) window swap, swap at tau1 in interval 1, swap back at tau2 in interval 2 (29 lam=1 pairs; 30th pair has lam!=1): 19428 tested, 8250 legal, 0 lower mass. Legal ones: mass exactly 4636. Illegal ones: mass +16..+30 or more. +- (ii-b) extra: windows inside a single lam=1 interval (968 pairs, sampled tau pairs): 58961 tested, 51415 legal, 0 lower. +- (i) scaled (lam!=1) swaps: 65 pairs; windows inside the interval or to a later interval, plus future swaps when end rows are proportional: 1932 tested, 1580 frame-legal, 0 lower. Frame test only (frames ignore scalars); since none lowers, no scale-op pricing needed. +- (iii) full-cap view: Lemma 1 gives G = forward cascade and legality = G within U, so U adds no new candidates. Checked directly: per-op frame comparison on 4000 sampled tests per mode (ii, ii-b, i): legal swaps are frame-identical at EVERY op (0 ops lowered, 0 raised); illegal swaps only raise frames. So no register where U was the binding side gains anything either. (Explicit backward-U lattice not built; unnecessary since G never moves.) +- Value replay (mod p 2^31-1): 25/25 sampled legal (ii) windows reproduce the exact end rows (and rows equal at both swap instants), as expected by construction. +## Reading +Together with B103 (unit-scalar future swaps 123 legal, single-source substitutions 168 legal, none lowering), every equal-value re-threading move at fixed order and DAG leaves the cascade frames unchanged or raises them. Legal swaps are pure relabellings with identical frame history, since equal values here also share equal pasts wherever futures can agree. No price step (Delta mass 0, no kappa claim; #664 port not needed). Remaining slack must come from changing order, DAG, or decomposition, not from re-threading. diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F2/B98c-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F2/B98c-NOTES.md new file mode 100644 index 0000000000..6691f6e4a2 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F2/B98c-NOTES.md @@ -0,0 +1,10 @@ +# B98c: dyadic S1 transplant. VERDICT: KILL AT GATE (frame legality + foreign-read flaw). ship=false. No heavy jobs, no kappa claim. +Scope: could not be done in the generator: the S1 A-programs of the shipped word are NOT generator output. The final A (3808 ops) = generator gauge events (frames 1-4) + stage-inserted cold ops (frame 0, ~1550) + late frame-8 cold-end ops, interleaved per block (block touches ~300 A ops spread over idx 254..3807). Port/regroup/hpe/cold44/layers stages align by op sequence and require ids<448 stable (build_port_stage.py assert), so a transplant must act on the post-layers word and renumber everything (cleanup/early_cleanup/start_extra/helper_final, PLAN/OWNERS hosting). I tested legality first on the CANONICAL word with B99's forward frame-join cascade (work/gate.py, gate2.py, diff.py, diag.py; B98b dyad.py programs, 9 blocks, 30 regs dropped, 73-84 ops each; all block A ops removed, program inserted at first touched idx). +## Result (exact, cascade model; unmodified word gives 0 violations) +- Profile/call: base {1:2542,2:414,3:434,4:154,5:56,8:8} mass 5632 -> new {1:1461,2:397,3:525,4:306,5:124,6:1,8:8} mass 5744 (+112/call; 1 unit/call ~ 2.8% b, B15) AND all 112 target end frames forced 8->9 (final caps). +- Cause (diag.py): dyadic program mixes the 8 lines densely, so lines end A at frame 4; shipped lines end A at frame 2 (70) / 3 (72) (+37 at 8). Forcing kept registers back to shipped end-of-A frames gives 0 violations -> the shipped frames are tight; end-of-A ROWS being equal (B98b) does not make frames equal. 212 registers differ in end-A frame. +- B98b flaw 2: each block has 4 FOREIGN A ops (other-block lines 57/81/92/9/11 and centres 224/240/256 read or written against its scratch MID-A, e.g. A idx 1742-1744). dyad.py matches only end-of-A rows of own regs; foreign registers' rows depend on mid-A scratch values, so the replacement is not value-exact for them either (I did not repair this). +- B99 warning (cleanup uses these regs 433x/559x): not reached; the A-end frame failure already blocks. +## What would be needed (not done) +Frame-constrained dyadic synthesis: allow op(t,s) only if join(F_t,F_s) <= bound(t) and bound(s), with bound = shipped end-of-A frames (lines 2-3 dim, scratch 4), foreign mid-A reads included as extra targets with time constraint; then renumber R (492 -> 462) through cleanup/start_extra/helper_final and rebuild PLAN/OWNERS hosting (verify_global needs an owner map). Unknown whether any 12-14-scratch program exists under these bounds (SAT/CP-SAT search, <=2 workers; est. hours). Gate: search feasibility for ONE block first. +## Exact kappa: none (not built). #656-patched / #659-patched: n/a; #659 port not attempted (same S1 family expected). diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F2/B99b-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F2/B99b-NOTES.md new file mode 100644 index 0000000000..a8bf4ac712 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F2/B99b-NOTES.md @@ -0,0 +1,13 @@ +# B99b: legal early-uncompute/reuse of A-only S1 scratch. VERDICT: KILL PROVEN (SPEC-forced, v1-v4). ship=false. Scope: #656 canonical word and #659 rebuilt (R=504, layered a9de804f, profile {1:2534,2:346,3:458,4:178,5:56,8:8}); fixed op order. +Tools: work/v2.py v2b.py v2c.py v3.py diag.py (B99 frame-join cascade model, unmodified word = 0 violations); work/p659/ = same on #659 (word rebuilt by work/build659.sh via heavy.sh, out659/np/local/CANONICAL-WORD.json.gz). +## Diagnosed cause (a=225, exact) +Uncompute row of 225 = line 0 (a -= r0). One ADD has ONE common frame, so r0 (frame {38,11}, dim 2) is raised to a's block span {448,38,21,11} (dim 4) at end of A. B op 529 (188 += -1/2 r0) then inherits dim 4, the raise cascades along shared lines, and 10+ targets whose end frame is perp(port) (dim 8) must end at 9 (spans 448,21 are not in their caps). NOT the cleanup: 225 is used 0x by cleanup/comp/cut. Generally: for all 67 A-only scratch, NO row is spanned by A-only registers (v2c: "noB-only unsolvable" 67/67); each needs 1-6 B-read sources (lines/other scratch), and a source can only be raised to a's span if its later B frames already contain it. Frames only grow, so end-of-A is the most permissive time; the uncompute point cannot be moved earlier to help. +## Cleanup coupling (card hypothesis, partly wrong) +Only 23/67 (#656) and 11/67 (#659) A-only scratch appear in cleanup/compensation (433x src, 559x tgt); the other 44 / 56 are used nowhere after A (these are B98c's drop pool). Cleanup runs at full frame 9 so rematerialising there is frame-free, but the blocker is the A-phase uncompute ADD, not cleanup. +## Variants +- v1 rematerialise for cleanup window: moot, cleanup window is frame-9 free; does not touch the A-time uncompute wall (0/67 legal either way). +- v2 order/minimal-raise: scratch-only sources with frame subset of a: 0/59 solvable-legal (8 no solution; 59 illegal); sources restricted to individually harmless raises (single-register raise leaves 0 centre/final violations) or equal frame: NO solution for 67/67 (#656) and 67/67 (#659). Equal-frame-only: no solution 67/67. +- v3 compound with B98c drop: naive deletion of all 44 cleanup-free regs' ops (upper bound on B98c): lazy cascade 0/0 violations; under SHIPPED frames the mass drops 5632 -> 5456 (-176/call, 4 per reg) which is pure removal gain (B98c's). Remaining scratch hit the same wall; lowered line frames (58 lines 3->2) only widen the gap to a's span-4. Lazy relabelling instead of shipped frames gives worse shape (more w2/w6), so not an extra gain. +- v4 #659 rebuilt (profile matches ledger): same 0/67; 56 are cleanup-free, 11 cleanup-used; B-read sources needed 1-6. +## Verdict +KILL PROVEN under fixed order: uncompute needs a B-read source in a's span (rank argument, v2c) and the common-frame rule + target perp(port) end caps make that raise illegal on every row. The only unexplored escape is pre-raising sources in earlier B ops combined with reordering (B11 reorder SA null) or a new geometry with looser target ends. No GO. Frontier now #664 (1.658614e-3, GO 1.66359e-3); #665 mechanism (w9 residual split) not re-derived. diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F3/B90-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F3/B90-NOTES.md new file mode 100644 index 0000000000..0b8d51916c --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F3/B90-NOTES.md @@ -0,0 +1,22 @@ +# B90 (team idea): helpers as the shadow of a true step / pseudo-gauge in #656. VERDICT: KILL (no priced true step); structural knowledge recorded. ship=false +Scope: shipped #656 word (B76 FULL-WORD.json.gz, byte-identical), exact Fraction replay of A+cut+B+cleanup (replay cleans to 0 on helpers), B76 tags. Tools: work/replay.py, an.py, blk.py, tstruct.py, reads.py, walsh.py, life.py. Output: composite_summary.csv. No heavy jobs (heavy.sh was BUSY; all runs < 2 min, single process). +## Composite per site (clean source rows; rank over Q, mod p) +| site | helpers | rank (end of A) | rank (end of B) | rank of all values ever held | notes | +|---|---|---|---|---|---| +| S1 block scratch (14x16) | 224 | 8-9 per block (16 helpers) | 8-15 | 8-26 | 99-119 distinct values per block over 16 registers | +| S3 packet copy | 156 | 0 (all zero until B) | 4 (7 blocks, 10-12 helpers), 10 (7 blocks) | 4-20 | | +| S4 slot copy (8/block) | 112 | 0 | 8 (full) | 8 | residue ratio 1.0 | +## S1 internal structure (the real finding) +- Each block owns 8 X lines (14 x 8 = 112, a partition). Block-local program = 152 ops; canonical form (registers relabelled by first use, coefs, frame sizes) is IDENTICAL for 6 blocks (0,1,2,11,12 and the first 152 ops of 13) and differs by 2 extra scale ops in 8 blocks (blocks 3-10); block 13 has extra trailing ops beyond its 152; frame-size histogram identical in all 14 ({4:72,1:28,2:24,3:8}). +- After the program, the 8 line registers hold T (8x8, rank 6, nnz 36, charpoly x^3(x^5-5/2x^4+11/4x^3-7/8x^2-1/2x+1/2) identical in all 14 blocks); lines + 16 scratch = 24 forms spanning R^8 exactly (rank 8, injective clean map R^8 -> R^24). +- The 24 forms are Haar/lifting pair forms (x_a+x_b, (x_b-x_a)/2) plus 4-term and 8-term +-1 sums: 4 of 24 are full Walsh characters (all-ones, 4|4, 2|2|2|2 sign patterns), the rest are not a Walsh frame. Best Walsh relabelling of the 8 lines cuts nnz only 86 -> 76 (4/24 forms become unit vectors). +- Snapshot duplicates (row equal to another register up to scale): end of A 60/224 S1 helpers (28 equal an X/Y register), end of B 130/224 S1, 76/156 S3; S4 0. Not removable: B19/B82 (reader frame, timing, in-place). +## Hypotheses +- h-a (composite = change of basis in Free group / relabel): NO. T is non-monomial (36 of 64 nonzeros, rank 6), so not in Free; the only basis that would sparsify it is a Hadamard rotation of the 8 lines, which mixes registers of different frames = B69/B23 (common-frame ADD illegal). Gain bound anyway 86 -> 76 nnz. +- h-b (gauge x small residue): NO. S1 rank 8 of 16 is not a gauge factor, it is an overcomplete frame (24 forms, dimension 8); S4 residue 8/8 = 1.0 (killed by the card's 0.8 rule); S3 mixed (4/10 on 7 blocks), but B82 already proves those 124 copies frame-blocked. +- h-c (14 blocks conjugate): TRUE (same local program, same T, same S up to 2 classes). But conjugacy shares no registers: the 14 scratch sets are separate and every block's scratch is read across the whole of B (windows 2245-3727 for most blocks), so no time multiplexing without reordering B. Read-span bound: at most 66 distinct S1 scratch forms are simultaneously within their first..last-read spans vs 224 registers; this IGNORES creation (all built in A, ops 0-2192) so it is not a bound on helpers and nothing here prices a just-in-time recompute (extra ops add climbs; B82/B83 order-fixed). +- h-d (known transform): partially (Haar lifting butterflies + a few Walsh characters on an octad's 8 lines); no direct frame-legal expression found, because the consumers need the stage values, not the transform output (B84 lifting reduces to B23). +## Priced +Nothing. No step removing >= 5 w9-equivalent helpers; no >=1% structural claim (the 14-fold conjugacy is real but earns no cost). +## Honest lead (unpriced, NOT a claim) +Time-multiplexed S1 scratch (run the 152-op local program just before each block's consumers) would need B ordered block-major or per-form recompute; B's reads are interleaved across blocks for the whole phase. Upper-bound removal price from B76: S1 +38.9% b (all climbs deleted), not reachable. diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F3/B92-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F3/B92-NOTES.md new file mode 100644 index 0000000000..4064503661 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F3/B92-NOTES.md @@ -0,0 +1,16 @@ +# B92: S1 scratch dependencies / pseudo-gauge. VERDICT: KILL, PROVEN [scope: shipped #656 word, B90 exact replay, value-level test; no frame replay needed]. ship=false +Tools: cards/B92/cls.py (rank + scalar-duplicate classes at end of A), feas.py/feas2.py (per B read of a scratch: does another live register hold the same row up to scale?). Single process, seconds. +## Facts +- End of A: the 16 scratch are DISTINCT sparse forms (nnz 1,2,4,8), not copies. Only 2/block equal a line register (S225~L56, S227~L59 in block 0; same in block 11), and these are not read in B (A-internal). Rank 8 of 24 is overcompleteness of Haar/Walsh stage forms, not frame duplicates. 2 nnz-1 scratch/block are clean copies of an original x_j, but the line register already holds a mutated row, so nothing to exchange (no cold-end rank-one structure as in Gauge44). +- Reads in B (value test, alt holder = any other live register): block (0,1,2,3): 12 scratch read; 0 fully covered; 8 have 2/3 reads covered, ONLY by a target accumulator that the first read just copied into (e.g. S226 -> reg 450, later reads could use 450); 4 never covered. Block (2,3,4,5): 11 read; 0 fully covered; 8 partial (1 of 2 reads, same mechanism), 3 never. +- All 14 blocks: fully value-covered scratch by own S/L registers = 0 for 6 blocks, exactly 2 for the 8 blocks (0,2,4,6)...(1,3,5,7) (S281/S285-type: pairs of mutually equal scratch, S277~S281, S282~S285; one member unread in B). +## Classification (blocks 0 and 11), per scratch +- g1 frame copy (value-feasible via a target accumulator, but that accumulator sits in hyper(P[t]) after the first read = B82 target-read timing): 8 and 8. +- g2 gauge-exchangeable at a common frame: 0 and 0 (kill gate: g2=0 in both). +- g3 value-forced (no alt holder at read time; distinct stage form): 4 and 3. +- g4 A-internal / unread in B: 4 and 5 (incl. the 2 line duplicates). +## Judge's butterfly question (in-place stage k over stage k-2) +Kept stages are all read throughout B (windows ~2245-3727, B90 life.py), max simultaneously live read-span per block 4-12 of 16 (reads.py); values are built in A, so overwriting a stage needs a recompute (extra climbs), not an exchange. Reads after any plausible overwrite point exist for essentially every scratch (reads per scratch 2-28 spread over B); the only alt holders are frame-locked targets (g1). No legal in-place count found; not a g2. +## Possible lead (small, unpriced): the 8 blocks with 2 mutually-equal scratch (16 helpers = 16 w9-ish, <=0.4% of b upper bound). Needs: why both exist (probably a copy for A-internal consumer), whether the unread-in-B twin can be deleted or reused. Below the 1% bar; not pursued. +## Escapes +1. Check the 16 twin helpers' A construction (why S277 and S281 both). 2. Order-free (B80) version of g1 targets. 3. Recompute-just-in-time with B66 pricing (B90 bound +38.9% unreachable). diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F3/B92b-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F3/B92b-NOTES.md new file mode 100644 index 0000000000..749aa539ba --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F3/B92b-NOTES.md @@ -0,0 +1,14 @@ +# B92b: equal S1 twins in 8/14 blocks of #656. VERDICT: KILL, PROVEN [scope: shipped #656 word, exact symbolic replay (B90/B76 FULL-WORD), all 16 pairs]. ship=false, no word built, no kappa. +Tools: cards/B92/twins.py (finds equal pairs, lists write/read sites per twin), cards/B92/tw2.py (value history of a pair). Single process, seconds. +## Facts (all 16 pairs identical in shape; example block (0,2,4,6): S277~S281, S282~S285) +- Class (b)/(c-ish): twins are NOT copies. S281 is a 4-write stage form {x12+x15} built at A-op 465-509 and READ in A (3 reads, ops 472-509) and in B (2 reads, B13, B244). S277 is a long-lived working register (13 writes, 13 reads, all A) that only reaches the same row at A-op 578 (end of A), after being {10},{10,15},{15},{14},{14,15},{15}.. etc. Equality is end-of-A coincidence of Walsh/Haar stage forms, not a construction duplicate. +- S277/S285-type partners are never read in B and never written in B; S281-type twins are the only ones read in B. +- B-reads of the 281-type twin could be re-pointed to 277-type (equal, unmutated through B): B11-legal, but saves 0 ops. +- The 281-type register cannot be retired: its value is needed in A at ops 472-509 while the 277-type holds {10}/{10,15}, a different form (value-forced, no alt holder). Its 4 build ops and 4 cleanup ops stay. +- Only conceivable gain: after re-pointing, 281-type is idle from ~A-op 509 to cleanup, so its register slot could host a B-only helper (<=1 reg/pair, <=0.4% b upper bound). Needs early zeroing of 281 (its inverse ops need A-time frames, not the cleanup frames) = new ops that cancel the saving, plus a B-only helper whose lifetime fits. Not shown feasible; below 1% bar. +## Result +0 of 16 pairs retireable. Pairs retireable: 0. SHIP CANDIDATE: no (no kappa). +## Escapes +1. Slot sharing of the idle 281-type (above) with exact early-zero pricing (B66). 2. Reorder A so the 277-type is built in 281-type's place and 281 derived from it (butterfly refactor, value-level only, unpriced). + +Scripts: twins.py and tw2.py live in cards/B92/. diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F3/B93-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F3/B93-NOTES.md new file mode 100644 index 0000000000..805bd92879 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F3/B93-NOTES.md @@ -0,0 +1,15 @@ +# B93 (LIT): group-frame theory for S1's 24-form frame. VERDICT: KILL at gate (~15 min incl. 87 s run). ship=false +Scope: block (0,1,2,3) of B90 snaps.pkl (exact Fractions); other blocks conjugate (B90 h-c). Script: scratchpad g.py/g2.py (single process, no heavy job). +Literature (from memory, not re-fetched): Vale-Waldron 2005 (symmetry group of a frame = unitaries permuting it up to unimodular scalars; group frame = one orbit) and Waldron 2018 ch.6 (harmonic/group frames). Lemma used: a group frame's symmetry group acts transitively on one orbit; the number of generators = orbit count. +## Computation +- 24 forms (8 lines + 16 scratch over the 8 lines) = 22 DISTINCT up to scale (2 exact duplicates; B92's territory). Support sizes: 1x2, 2x8, 4x8, 8x4. +- Symmetry group restricted to signed permutations of the 8 lines (monomial; the only kind that are free relabel/sign gauge): order 8 (16 with global sign). Elements are involution-like perms of the line indices (id, 3 disjoint-transposition types...), acts on the 22 forms with 7 ORBITS of sizes 2,2,2,4,4,4,4. Not transitive: NOT a group frame; not even a few-orbit frame (max orbit 4). +## Kill gate +1. Group order 8 -> at best 22/8 -> 7 orbits; replacing 16 scratch by generators saves at most 9 registers/block, only if every orbit member were free. +2. Fatal: B69/B38 make relabel/sign free only as ONE per-word gauge (whole word, all blocks/times, fixed labelling). A symmetry g maps form f to g(f) as a different REGISTER's content; to "read g(f) from f" one would need g applied at the read site = a data-side basis change on the reader, outside the swap contract (B69: non-uniform T breaks common-frame ADD). The registers are not reusable across the 8 symmetries within a single word; reads in B span all orbit members simultaneously (B90: scratch read across whole of B). +3. The group is not a gauge of the word anyway: it permutes the 8 lines inside a block, while the lines are partitioned among frames (B90: 112 = 14x8). +Verdict: no price run, no legality check (B11) needed. +## Knowledge gained +S1 per-block form set has monomial symmetry of order 8 and 7 orbits; it is not a harmonic/group frame (consistent with B90: only 4 Walsh characters). Haar lifting pairs are the structure, not a group orbit. +## TRANSFER +Orbit structure (7 orbits, 22 distinct forms) gives B92 an independent dedup count: 2 exact duplicates per block = 28 total, matching "equals another register up to scale". Any future S1 recompute (time-multiplexing, B90 lead) could use the 7 generators + the 152-op program as the compressed spec, but symmetry itself earns no free registers. diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F3/B94-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F3/B94-NOTES.md new file mode 100644 index 0000000000..6248269d9c --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F3/B94-NOTES.md @@ -0,0 +1,14 @@ +# B94 (LIT): group-FFT over block-permuting symmetry, one shared S1 program for 14 conjugate blocks. VERDICT: KILL at gate, PROVEN [scope: shipped #656 S1 blocks; B90 frame-size histogram + fleet triage (c)]. ship=false +Lit (from memory, not re-fetched): Clausen-Baum, Fast Fourier Transforms (BI 1993); Maslen-Rockmore, Generalized FFTs survey (DIMACS 1997). Technique: direct sum of G-conjugate copies -> change to group-Fourier basis (linear combos ACROSS copies), run each isotypic part once, transform back. The saving needs the cross-copy butterflies (ADDs between registers of different copies) to be legal. +## Gate (argument + existing numbers, no new compute, ~8 min) +- Cross-block combination of corresponding forms = ADD between registers of blocks i != j. Legal only at a frame inside both blocks' frames. Fleet triage (c): block frames meet pairwise in dim 2 (91/91). A Fourier mix over an orbit of size k needs a frame inside the intersection of all k frames, so dim <= 2 (can only shrink; even the 2-block "isotypic" case is capped at 2). +- B89/B82: a register's frame must contain its content label span. B90: per-block S1 register frame-size histogram {4:72, 1:28, 2:24, 3:8} (132 regs): 80/132 (4 and 3) exceed dim 2 outright; the 24 forms of the 24-form frame have rank-8 content (R^8), and Haar/4-term/8-term sums span more labels than 2 dims. Only 52/132 can even sit in dim <= 2, and a mixed register must hold the content of BOTH constituents (union span larger than either), so the bound is stricter. +- Hence no cross-block combination of S1 forms lives at a legal common frame. B90 h-a already showed the same obstruction for the 8-line Hadamard (B69/B23 common-frame ADD illegal). Group-FFT reduces to the same illegal cross-frame ADD. +- Also (B90 h-c): even without mixing, sharing needs time-multiplexing; scratch of every block is read across all of B (windows 2245-3727), and B93: no group-frame structure (symmetry order 8 per block; 22 forms/7 orbits). +## Numbers: common frame dim <= 2 vs required >= 3 for 80/132 registers per block; 0 legal orbit combinations for those. No pricing run (gate killed). +## Escapes (3) +1. Mix only the <=2-dim-frame registers (52/132, e.g. the 28 frame-1 ones): sub-butterfly on a few forms; untested, gain tiny (<1%), content span union still must fit dim 2. +2. Reorder B so block j's scratch is recomputed just-in-time at its own frame (no cross-block ADD): that is the multiplexing price (extra climbs), B82/B83 order-fixed; unpriced. +3. A new skeleton (SYN-4/B81) whose blocks share a larger common frame (needs dim-2 meet changed; B68 unique partition makes this unlikely). +Rescue check: 2-block case is the weakest requirement and still capped at dim 2 (91/91 pairs), so no pair rescues it. +TRANSFER: cross-block (group-Fourier) mixing of S1 forms is dead: block frames meet in dim 2 while 80/132 S1 registers need frame >= 3. Any multiplexing must be non-mixing (recompute at own frame) and priced separately; do not revisit generalized FFTs for S1. diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F3/B97-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F3/B97-NOTES.md new file mode 100644 index 0000000000..d3a45e0baf --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F3/B97-NOTES.md @@ -0,0 +1,13 @@ +# B97 (LIT): e-graph + ILP extraction on the S1 block interface. VERDICT: KILL at gate, LOCAL-PRICE [scope: S1 interface of the B76 canonical word, B/tail reads, rule set SCALE + 2-term ADD with coefs {+-1,+-2,+-1/2}, static legality]. ship=false. No cpuq job. +Lit (from memory, NOT fetched; arXiv ids recalled: egg 2004.03082, TENSAT 2101.01332): Willsey et al. POPL 2021 (egg: rebuild + hash-consing); Yang et al. MLSys 2021 (ILP extraction with shared-node cost + acyclicity); Denali PLDI 2002. Only the idea transfers: our equality is exact Q-linear algebra, so e-classes = forms up to scale and no checker is needed. +## Instance used +B98b iface.pkl (blocks + per-scratch read forms from the PRICED canonical word), 14 blocks x 16 scratch. Not the card's 12x8 packet/PROTOTYPE instance: B96 owns the packet decomposition, and no B96 NOTES exist yet. Code: eg.py (single process, <1 min). +## Result (eg.py) +- Required classes (forms read in B/tail): 11 per block, ALL DISTINCT up to scale (154 of 154), none equal to a +-1/+-2/+-1/2 two-term combination of other required classes (0 rewrites fire among them). Cost model (A-phase ops free, frame 0; B98b finding 1) makes extraction cost = #distinct required classes (+1..3 for cut/compensation/cleanup readers, per B98b = 12-14 kept). +- So the ILP optimum is the required-class set, = B98b's dyad.py kept set: shipped 16 -> 12 (6 blocks) / 14 (3 blocks). The e-graph reproduces B98b; it finds NOTHING below it, and saturating (iteration 1 of 5) adds only intermediates that are free. +- Reason: reductions need a REQUIRED class to become derivable from others, which requires changing the READERS' decomposition (their B-phase coefficients/packets), i.e. rule (iii) of SYN-6 = B96's centre/packet gauge. Over the S1 interface alone the rule set is closed. Named missing rule: B96's row - lambda*c_{b,i} shift (a rewrite on reader rows, not on forms). +- Node-cap / copies / reader-cap legality were not needed: no candidate beat the B98b kept set. +## Status of the real lead +The only gain on this surface is B98b's (drop 2-4 unread scratch/block, ~+2% b estimate, 27.3 w9-eq). Unaudited; belongs to B98c. B97 adds a negative: no extra S1 register is removable at fixed readers. +## TRANSFER +Extraction-as-pricing: for any new skeleton, cost = #distinct required forms read after the free A phase, and a rewrite can only help if it fires among REQUIRED classes (eg.py gives the 2-term test, 0 hits here). Full TENSAT ILP is unnecessary when A-phase intermediates are free. The e-graph earns its keep only once B96 gives reader-side rules (then run eg.py on the shifted rows). diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F6/B105_miner664.log b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F6/B105_miner664.log new file mode 100644 index 0000000000..cc5cea6494 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F6/B105_miner664.log @@ -0,0 +1 @@ +SUMMARY B105_miner664 rc=0 :: || cat1: Counter() diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/F6/miner664_run1.out b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F6/miner664_run1.out new file mode 100644 index 0000000000..3c5f236582 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/F6/miner664_run1.out @@ -0,0 +1,2 @@ +Counter({'disjoint': 2534, 'grow': 2534}) +Counter() diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/O1/B68-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/O1/B68-NOTES.md new file mode 100644 index 0000000000..11b9f5a62f --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/O1/B68-NOTES.md @@ -0,0 +1,20 @@ +# B68 NOTES: alternative block partition for X faces. VERDICT: KILL at gate, PROVEN (scope below). ship=false + +## Gate 1: where the partition comes from +- Source is the E8 line geometry, not a free choice. Hamming/Construction A form: 112 non-centre lines = 14 extended-Hamming octads x 8 sign patterns (mod +-); 8 centres = +-2e_i. + Blocks c = lines supported on octad c (research/punctured112-global/vendor/pr514/code/construct_partial.py: `blocks`, `tetrads`, `block_totals[c,i]`, centre frames hyper(P[frame[i]])). +- Given the 8-centre frame (the 8 coordinate ports deleted by build_port112.py, indices 0,13,22,35,40,51,54,119), the partition is UNIQUE: a block is the D4 spanned by 4 centres minus those centres; only octad 4-subsets of the frame span 8 further lines. Other frames (135) are W(E8)-equivalent, so the count is unchanged. Conclusion: construction-fixed (frame + Hamming code), not a SPEC clause. +## Gate 2: counts (faces.c, sa.c; single process <1 s / <100 s) +- Rebuilt: line0 has 59 orthogonal / 52 adjacent lines. Eff-reach census (own-block readers excluded, sign-consistent) reproduces J21-K: eff10 = 2688 faces (all 4 blocks), eff9 = 2688 (2 blocks) + 17920 (4 blocks), eff8 includes the 168 block-local planes. +- Raw reach >= 10 (block-independent): 24192 faces; canonical partition: 24192/24192 span 4 blocks. +- UNCONSTRAINED SA over all 14x8 partitions of the 112 lines (swap moves, 3e6 iters, not required to be legal): best 20681 of 24192 faces still span >= 3 blocks (8739 span 3, 11942 span 4). Needs < 50 to pass; it is ~400x off. The reach-9 SA run did not move (temperature schedule too cold for those deltas), so reach-9 is only the canonical census: 21504 span 3, 67200 span 4 (raw). +## Verdict +KILL. PROVEN scope: 14x8 partitions of the 112 lines; faces = 4-sets with raw reach >= 10; SA is a heuristic upper bound on the best partition (not an exhaustive proof), but the legal class is a single partition and the unconstrained one is nowhere near the 50 bar. High-reach faces are spread over the whole line graph (about 864 per line), so no 8-set blocking can contain them. +## Escapes (>= 3) +1. Not a partition: faces whose sources need no block frame because totals come from another supply (B7 escape 1, <= 10 helpers; B10 centre supply dead). +2. Blocks of other sizes/overlapping cover (non-partition cell graph, 6-quad family; B64 escape) - changes the skeleton, the #646 lineage. +3. Different centre set per phase (cut-timing / donor retiming) so the 56 retired-row totals disappear. +4. Reach-9 two-block faces (2688, nb2) as a hybrid tile class: B7 prices hybrids at -0.10% b per block, so not a lever alone. +## Rescue check +Rerun SA with a hotter schedule on reach>=9 and with an exact (CP-SAT) cut on the reach-10 hypergraph; expected still hundreds. Not run (gate is two orders of magnitude off). +Files: cards/B68/faces.c, sa.c diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/O1/B68-faces.c b/research/format-limits-2/s7-9-centre-fragmentation/evidence/O1/B68-faces.c new file mode 100644 index 0000000000..ff41c19366 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/O1/B68-faces.c @@ -0,0 +1,32 @@ +#include +#include +#include +// E8 as Construction A of extended Hamming [8,4]; 112 lines = 14 octads x 8 sign patterns mod +- +int oct[14],nl=0; int vec[112][8], blk[112]; int ip[112][112]; +int main(){ + // generator of extended Hamming: weight-4 codewords + int gen[4]={0xF0,0xCC,0xAA,0xFF}; int seen[256]={0}; int k=0; + for(int m=0;m<16;m++){int w=0;for(int b=0;b<4;b++)if(m>>b&1)w^=gen[b]; if(__builtin_popcount(w)==4&&!seen[w]){seen[w]=1;oct[k++]=w;}} + if(k!=14){printf("k=%d\n",k);return 1;} + for(int c=0;c<14;c++){ int pos[4],q=0;for(int i=0;i<8;i++)if(oct[c]>>i&1)pos[q++]=i; + for(int s=0;s<8;s++){ // fix sign of pos[0] = +, other 3 bits free + memset(vec[nl],0,sizeof(vec[nl])); vec[nl][pos[0]]=1; + for(int j=1;j<4;j++)vec[nl][pos[j]]=(s>>(j-1)&1)?-1:1; blk[nl]=c;nl++;}} + for(int a=0;a<112;a++)for(int b=0;b<112;b++){int d=0;for(int i=0;i<8;i++)d+=vec[a][i]*vec[b][i];ip[a][b]=d;} + // sanity + int cnt0=0,cnt2=0,other=0;for(int b=1;b<112;b++){int d=ip[0][b];if(d==0)cnt0++;else if(abs(d)==2)cnt2++;else other++;} + printf("line0: orth %d, |ip|=2 %d, other %d\n",cnt0,cnt2,other); + long hist[16][5]; memset(hist,0,sizeof hist); // reach(eff) x nblocks + long total=0; + for(int a=0;a<112;a++)for(int b=a+1;b<112;b++)for(int c=b+1;c<112;c++)for(int d=c+1;d<112;d++){ + int S[4]={a,b,c,d}; int bm=0;for(int i=0;i<4;i++)bm|=1<>blk[t]&1)continue; int ok=1,code=0; + int s0=ip[t][a]; if(!s0)continue; + for(int i=1;i<4;i++){int v=ip[t][S[i]]; if(!v){ok=0;break;} if((v>0)!=(s0>0))code|=1<<(i-1);} + if(ok)cls[code]++; } + int mx=0;for(int i=0;i<8;i++)if(cls[i]>mx)mx=cls[i]; + if(mx>15)mx=15; hist[mx][nb]++; total++; + } + for(int r=15;r>=7;r--){printf("eff reach %2d:",r);for(int n=1;n<=4;n++)printf(" nb%d=%ld",n,hist[r][n]);printf("\n");} + return 0;} diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/O1/B7-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/O1/B7-NOTES.md new file mode 100644 index 0000000000..c2577fc9c7 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/O1/B7-NOTES.md @@ -0,0 +1,24 @@ +# B7 notes (Oct 12). VERDICT: KILL at fast gate. PROVEN (scope below) for ledger-priced tile covers; no heavy job, nothing built. ship=false + +## (a) Charge anatomy of X4 (J21-K K.2/K.3, recomputed) +X4 raw +7.68% b, charged -4.53%, so charges = 12.21% b: +- S-type: 14 blocks x 0.3% = 4.2% (0 aligned blocks, X-tiles are cross-block and lose the rank-4 groups/gauges). +- Totals + cut timing: 56 retired-row helpers x 0.143 = 8.01% (X faces have 4 sources in 4 blocks, so their strands lie in no block frame; retired rows no longer supply the totals). Cut timing is the same cause; it is not a separate charge. +- 4.2 + 8.01 = 12.21, matches. +Shape dependence: both are "cross-block face" charges. Only the 168 block-local planes (eff reach 8) avoid them, and a plane-only ledger is 504. Any ledger < 504 needs faces of eff reach 9/10, which are non-block-local. A subset tile keeps the same faces, so the charges do not shrink. They are per converted block (0.3 + 4 totals rows x 0.143 = 0.87% b), linear, and all-or-nothing per block. +## (b) Best-case bound over ALL subset / partial-use covers +Model: ledger B = N2 + K + R - 112, R = 280, face reach <= 10, key reach <= 6 (J21-K inventory), 5376 cross-block cells, face slots 2*(5376/8) = 1344. +- Full-use face: 10 reader slots, > 6, so it needs >= 2 tiles; hence K >= N2 and N2 >= 134.4. Partial use costs more per slot (0.25 vs 0.2 objects/slot). Floor N2 + K >= 268.8, so B >= 436.8. +- Subset tiles revive this floor on paper: 4-subsets of a (10,10) 6-common pair give the (10,10,4) pairs that J21-K entry 7 said did not exist. That is the 437 ideal. +- Priced with J16-H classes (0.143 / 0.1095 / 0.0755): X4 (144,144) = +7.68 (reproduced). Absolute floor (134.4,134.4) = +10.75% b raw. +- Charges at full conversion = 12.21%, so net <= -1.46% b (uncapped best case, cover assumed to exist). Hybrid per converted block: gain <= 10.75/14 = 0.77 vs charge 0.87, so -0.10% b per block, never positive. +- Break-even needs B <= ~453; +1% needs ~447. The card's "LB <= 470" threshold is far too weak: 470 gives raw ~5.4% vs 12.2% of charges. +## (c) Decision: KILL (best-case net < +1%, in fact < 0). The cover question (wall a) is moot. Capped = uncapped = no gain. +PROVEN scope: ledger model of J21-K (calibrated on #531), reach <= 10 / <= 6, binary 2/4/8 ladder, coordinator charges as booked, R = 280. Not shown: the charges themselves (they are booked, not derived here). +## Escapes (>= 3) +1. Charge side (the one that matters): a totals supply for cross-block faces costing <= ~10 helpers instead of 56. This is J21-K E2, not a tile lever. If totals were free, the ideal net would be 10.75 - 4.2 = +6.5%, but it would also need a subset-tile cover with LB ~437 to exist. +2. S-type recovery (rank-4 groups in X blocks): 4.2% of the charge. Paired with escape 1 it would be a different card. +3. Non-binary / 12-24-source / odd-arity ladders (J21-K A5/E3). They change the face/key reach caps, so the floor of 436.8 moves. +4. Read side R < 280 (E4). It lowers every row, so it is not a tile lever. +## Rescue check (not run) +Show the totals charge is not generic to cross-block faces: e.g. price a cut-timing scheme where X-face strands get totals from existing helpers at <= 10 extra rows. If that holds, add subset tiles to library C (6-tile 4-/5-subsets), relax face usage, and run x4exact (CP-SAT) for a cover with N2 + K <= 290. Without it, escape 1 is only an assumption. diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/O1/B73-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/O1/B73-NOTES.md new file mode 100644 index 0000000000..df24f35db9 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/O1/B73-NOTES.md @@ -0,0 +1,23 @@ +# B73 NOTES: overlapping cell cover for X faces. VERDICT: KILL at gate (20-min), LOCAL-PRICE [scope: SA heuristic upper bounds, not exhaustive]. ship=false + +## Method (cell.c; reuses B68 line geometry/face census; one process, <1 min per run) +Faces = 4-sets of the 112 lines with raw reach >= 10 (24192, reproduces B68). A cell is a line subset; a face is confined iff all 4 lines are in one cell. SA (swap moves, 3e6 iters) maximizes faces inside ONE s-subset; summing over the 222/s cells that fit the 110-extra-copy budget (every line in <= 2 cells, 224 slots) gives an upper bound on the confined fraction (union only lowers it). + +## Numbers (best single cell; per-cell max faces; bound = sum over cells in budget; bar = 12096 = 50%) +- s=8 : 36 of C(8,4)=70 -> 28 cells: <= 1008 (4.2%) +- s=16 : 322 of 1820 -> 14 cells: <= 4508 (18.6%) [reach>=9: 657 of 91392 faces] +- s=24 : 648 of 10626 -> 9.25 cells: <= 6000 (25%) +- s=32 : 1120 of 35960 -> 7 cells: <= 7770 (32%) +- s=56 : 3796 of 367290 -> 4 cells: <= 15000 (62%, summed, overlaps double-counted; a 56-line cell is 7 blocks, no D4/centre frame, so it is not a block-sized cell at all: it is the whole X problem restated at half size) +High-reach faces are spread (~864 per line); in any s-set density is only 1.8-2% at s=16 vs the 0.4% global, nowhere near what a cell needs. +=> No block-sized cover (s<=32, the only sizes where a cell can carry a D4-type centre frame) confines >=50% with <=110 extra copies; best ~32% at an extra-copy count that already equals the budget, before any legality charge (B11/B16 shared-read rules) and before the 56 totals are even addressed. Break-even needs the 56 totals gone, so a 32% confinement does not remove them. +Gate failed -> no ledger pricing / B15 invoice run. + +## Escapes (>= 3) +1. Cells = 2-flats / D4 structure of the faces' own 4 lines: not tested separately; the SA above is cell-shape-free so it bounds any shape of that size. +2. Faces not confined but the totals supplied differently (B7 esc.1, <= 10 helpers); this card shows overlap does not substitute for it. +3. Larger cells (s>=56) with a half-system frame: bound 62% summed but needs a new frame/centre structure (centres per cell) -- #646-type skeleton, unpriced; centre cost 22.6% b/unit (B15) makes any extra centre set prohibitive. +4. Partial confinement hybrid: B7 prices hybrids -0.10% b per converted block. +## Rescue check +Run CP-SAT/exact max-density on s=16 (a 322 SA result could be a local optimum; D4-sub-lattice seeds not tried); to reach 50% at s=16 it would need ~2.7x the SA value, implausible. Not run. +Files: cards/B73/cell.c diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/O1/B74-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/O1/B74-NOTES.md new file mode 100644 index 0000000000..ad3bd829b4 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/O1/B74-NOTES.md @@ -0,0 +1,17 @@ +# B74 NOTES: supply the 56 cross-block totals at <= 10 helpers. VERDICT: KILL at 20-min gate, LOCAL-PRICE [scope: face-sum model of the totals; the real X4 totals/tiles do not exist]. ship=false + +## Model (the exact J21-K objects are gone: gate1.py/facepack.py missing, and X4 has NO exact cover, J21-K K.6/B6) +Total = signed sum of the 4 source strands of an eff-reach-10 cross-block face. faces.txt = all 2688 such faces (dump.c = B68 faces.c + dump; reproduces 2688, all nb=4). g.py. Ranks over Q, 112 sources. +- The 2688 face forms span all of Q^112 (rank 112). Any 56 random faces: rank 56 (20/20 trials). +## Residual rank needing new standing registers, per supply (bar: > 46 => KILL) +(a) 8 centres (B16 R.npy): rank([C|T]) - 8 = 56 (residual 56). Agrees with B10 (centre weights >= 53 vs total weight 4). KILL. +(b) block-local retired-row / cold-end basis: SPAN residual 0 (a total is a sum of 4 single-source block pieces, each in its block's invertible basis), but this rank test is vacuous: forming the sum is an ADD across 4 block frames (common frame per ADD, SPEC), i.e. exactly the cross-block problem. As STANDING forms no total equals any block-local row, so register residual = 56. Not a saving. +(c) 2-level pair sums (total = pair + pair, pairs shared, Pippenger sharing): random 56 faces need 105-112 distinct pair registers (greedy pairing, 50 trials), i.e. MORE than the 56 totals. Only an adversarially clustered choice of 56 faces (greedy, 24 distinct sources) reaches 30 pair regs; the real 56 are fixed by the (non-existent) cover, 4 per block, so clustering is not available. Residual 105+ (>46) => KILL. Pair registers also sit in 2-block frames, so legality is untested even at 30. +(d) transient totals: not a rank question; it is the frame schedule (in-place cross-frame ADD with dirty borrow). No real X4 word exists to run the B11 oracle / B15 invoice on; not run. The B7 numbers (0.143/helper) remain unpriced against B2's 0.043 (3x), so even a 56 -> 20 helper saving would be worth ~+1.5..+5% raw, before the 4.2% S-type charge and with the cover still infeasible. +## PROVEN scope: (a) centres, source-sum or strand-sum totals (same as B10); (c) random-selection pair sharing under the face-sum model. LOCAL-PRICE for (b),(d): rank cannot separate them, legality can, and that needs a real X4 word (does not exist). +## Escapes (>= 3) +1. Make X4 exist first: exact cover is infeasible in both Aut-orbit branches (J21-K K.6); totals supply is moot until a cover exists (subset tiles/partial faces, B7 esc.). +2. Totals as in-place cross-frame ADD chains with dirty borrow (d): needs a frame-lowering primitive / non-monotone frames (convention-breaking allowance); test on a toy block pair with the B11 oracle. +3. Totals supplied target-side (B10 esc.3): span(C + 32 target rows) contains them but is circular with the cut timing; reorder so targets of 4 blocks are final-written before the totals are used (B11_reorder). +4. Choose faces so that the 56 cluster on <= ~24 sources (30 pair regs): a different cover objective (min distinct sources), not the max-reach cover. +## Rescue check (not run, ~15 min): redo (c) with the actual 4-per-block constraint and the 6/4-tile library C (needs rebuild of J21-K tiles) to see whether any cover forces pair sharing <= 46; and a sign-aware version of the face forms (signs here are random; ranks are generic so unaffected). diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/O1/B74-dump.c b/research/format-limits-2/s7-9-centre-fragmentation/evidence/O1/B74-dump.c new file mode 100644 index 0000000000..12f4fce3bd --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/O1/B74-dump.c @@ -0,0 +1,32 @@ +#include +#include +#include +// E8 as Construction A of extended Hamming [8,4]; 112 lines = 14 octads x 8 sign patterns mod +- +int oct[14],nl=0; int vec[112][8], blk[112]; int ip[112][112]; +int main(){ + // generator of extended Hamming: weight-4 codewords + int gen[4]={0xF0,0xCC,0xAA,0xFF}; int seen[256]={0}; int k=0; + for(int m=0;m<16;m++){int w=0;for(int b=0;b<4;b++)if(m>>b&1)w^=gen[b]; if(__builtin_popcount(w)==4&&!seen[w]){seen[w]=1;oct[k++]=w;}} + if(k!=14){printf("k=%d\n",k);return 1;} + for(int c=0;c<14;c++){ int pos[4],q=0;for(int i=0;i<8;i++)if(oct[c]>>i&1)pos[q++]=i; + for(int s=0;s<8;s++){ // fix sign of pos[0] = +, other 3 bits free + memset(vec[nl],0,sizeof(vec[nl])); vec[nl][pos[0]]=1; + for(int j=1;j<4;j++)vec[nl][pos[j]]=(s>>(j-1)&1)?-1:1; blk[nl]=c;nl++;}} + for(int a=0;a<112;a++)for(int b=0;b<112;b++){int d=0;for(int i=0;i<8;i++)d+=vec[a][i]*vec[b][i];ip[a][b]=d;} + // sanity + int cnt0=0,cnt2=0,other=0;for(int b=1;b<112;b++){int d=ip[0][b];if(d==0)cnt0++;else if(abs(d)==2)cnt2++;else other++;} + printf("line0: orth %d, |ip|=2 %d, other %d\n",cnt0,cnt2,other); + long hist[16][5]; memset(hist,0,sizeof hist); // reach(eff) x nblocks + long total=0; + for(int a=0;a<112;a++)for(int b=a+1;b<112;b++)for(int c=b+1;c<112;c++)for(int d=c+1;d<112;d++){ + int S[4]={a,b,c,d}; int bm=0;for(int i=0;i<4;i++)bm|=1<>blk[t]&1)continue; int ok=1,code=0; + int s0=ip[t][a]; if(!s0)continue; + for(int i=1;i<4;i++){int v=ip[t][S[i]]; if(!v){ok=0;break;} if((v>0)!=(s0>0))code|=1<<(i-1);} + if(ok)cls[code]++; } + int mx=0;for(int i=0;i<8;i++)if(cls[i]>mx)mx=cls[i]; + if(mx>15)mx=15; hist[mx][nb]++; total++; if(mx>=10&&nb==4){printf("F %d %d %d %d\n",a,b,c,d);} + } + for(int r=15;r>=7;r--){printf("eff reach %2d:",r);for(int n=1;n<=4;n++)printf(" nb%d=%ld",n,hist[r][n]);printf("\n");} + return 0;} diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/O2/B2-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/O2/B2-NOTES.md new file mode 100644 index 0000000000..412d291312 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/O2/B2-NOTES.md @@ -0,0 +1,58 @@ +# B2 NOTES: climb-neutral skeleton atoms (K-triangle gross value) + +VERDICT: LOCAL-PRICE (knowledge result). ship=false. Scope: the K-triangle atom (#622) on the cold14 skeleton, priced with the +package's own moment engine (pr575 engines/moment.py, certify(H,73,7168)), reproducing b617=1.637861934e-3 exactly. +Premise "climbs ate 99% of the gross" is FALSE. Ceiling of the whole atom family at this price is ~+0.6-1.0% b, reachable only if +every conflict is free; realistic recoverable ~+0.2-0.4%. Below the +1% / kappa 1.64040e-3 bar. No heavy job was run. + +## 1. Ledger #617 -> #622 (price = b % when the local paid-profile delta is applied to all 72 calls; scripts price.py ladder*.py climb.py) +Per-call local data come from the #623 verify work dir (r40/base/work/k492b/*/FULL-WORD.json.gz reports; jp8 chain, 504 shadow vs 492). +jp8 local paid mass per call: 504 pre-ends 6000 -> K pre-ends 5904 (-96) -> final 5758 (617 final 5812; net -54). + +| line | local mass/call | b effect | +|---|---|---| +| 12 helpers removed, NET of their own K-read climbs (pre-ends 6000->5904) | -96 | +0.321% (0.0267%/helper) | +| climb charge of 48 rewired reads (108 ideal mass -96) | +12 | -0.17..-0.21% (the "climb" line) | +| => ideal gross, climbs free | -108 | ~+0.52% = 0.043%/helper (NOT 0.1-0.2%) | +| frame_regroup (24 changes {1:-3,2:+3,3:-1}) | 0 | +0.095% (gain, climb mitigation already in #622) | +| removed helpers' own hyperplane ends lost (46->34) | +12 | ~-0.05% (0.0041%/end) | +| 6 second cold ends (S b.9) lost in blocks 0-2, 11-13 | +30 | -0.19% (0.0321%/cold end) | +| atm3->ck provider swap, idle-remainder packing, dispatch | | ~-0.08% (model +0.044% vs true +0.0146%) | +| TRUE net | -54 | +0.0146% | + +Width check: jp8 widths 4:36->30, 7:48->36, 9:260->266. Sum psi -153.6/8729 = -1.76% (12 width-7 removed, 6 cold 4->9 back). +Removed packet copies were already width-7 (hyperplane-ended), so the gross is psi(7) not psi(9). +Price per unit: a cold end ~0.032% b (matches brief 0.03-0.04). A removed width-9-equivalent helper ~0.043% ideal, 0.027% net of its reads. + +## 2. Climb anatomy / what ate the gain +Climbs ate ~38% of the mass gross (12 of 108 units), not 99%. The larger single eater is the lost S b.9 cold ends (0.19%). +Cause (checked in recipes): the forward absorption in cold_end needs the dead port q to be dead and frame-equal to g (PROOF-NOTE (a)-(c)). +In 617 the q's for blocks 0-2 and 11-13 are registers 61,29,21 and 93,85,53; these are exactly K-coordinate registers that the +triangle now reads leavers into (TRI-SCHEDULE reads list 20,21,28,29,60,61,84,85,92,93...). They stay live and rise in frame, so +absorption is illegal. Not a climb price but a liveness/frame conflict with the cold end. +Not done: classifying each of the 48 reads as forced vs avoidable (needs the per-read frames; CP-SAT model not built, since price caps below). +Scope check of #622's exhaustive claim: PROOF-NOTE only certifies exactness; the 6-block exclusion is stated as "do not admit", not proved forced. + +## 3. Bounds on the climb-neutral design +- Free climbs on the 4 existing triangles: +0.17..0.21%. Restoring the 6 cold ends: +0.19%. Both: ~+0.4%, kappa ~1.642e-3 (needs no new loss). +- Extending to (p,+1) triangles (4 more, 12 helpers): ideal gross 0.52%, minus hyperplane ends 0.05%, minus S b.10 conflict + (a lost S b.10 cold unit costs 0.032%; 4 triangles touching ~6 blocks = 0.19%) and climbs 0.2% => ~+0.1% net. All 8 triangles with + every conflict free: 24 helpers x 0.043 = ~1.0% ideal; with climbs/cold conflicts as priced here ~0.2-0.5%. +- So reaching +1% b is not plausible from this atom family alone. + +## Escapes (outside the scope of this negative) +1. A different q (or a different cold-end absorption) for blocks 0-2/11-13: a dead port that is not a K-register, or absorbing into a + triangle-leaver register after its last read. Requires Port480's construct2b (not in repo; only recipes). Worth ~+0.19% b. +2. Re-select the partition so full pairs avoid the 6 cold-end blocks (full_pairs are (0,1),(2,3),(4,5),(6,7)); an alternative full-pair set + might move the conflict onto blocks whose cold ends are lost anyway. +3. Reading leavers before the K-register's frame grows past the cold frame, or splitting each K-register into a read-then-dead copy + (costs a helper ~0.043%, may still net positive vs 0.032%/cold end). +4. Centres carrying the leaver sum (B1) so the K-coordinate reads become zero-climb descents; cost R40-C unpriced. + +## Rescue check +Does B1 centre promotion make leaver reads climb-free? Not tested. Upper bound of the prize is the climb line only (+0.17..0.21%), +and the lost cold ends (0.19%) are untouched by it. Rescue of the verdict: if escape 1 gives a legal absorbing q for the 6 blocks, +price = +0.19%, still < 0.3%; combined with free climbs ~+0.4% (marginal GO bar +0.3%). Re-open only on that joint tool. + +## Incidental structural gain +None verified. The only candidate (restoring 6 cold ends, +0.19% b) is unbuilt. ship=false. diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/Y1/B10-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/Y1/B10-NOTES.md new file mode 100644 index 0000000000..dfe06b7b03 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/Y1/B10-NOTES.md @@ -0,0 +1,23 @@ +# B10 notes (Oct 12). VERDICT: KILL at gate (a). PROVEN, scope below. ship=false. Nothing built, no heavy job. + +## Gate (a): span (script g.py, B3R R.npy = the 8 centre functionals on the 112 sources, rank 8) +- A converted block's X-face total = the sum over a face's 4 sources in 4 different blocks (B7/J21-K): a weight-4 vector in source space. +- Every nonzero vector in span(8 centres) has large support: over F2 (package field) the centre code (R mod 2 has rank only 4, kernel 15 x's) has nonzero weights exactly {56 (128 vectors), 64 (112)}; over Q the min weight found across 20000 random hyperplane normals is 53 (of 112). +- So a weight-4 total is in span(centres) never (4 << 53). Each total adds +1 to rank: rank([C|T]) = 8 + rank(T) = 12 for one block's 4 totals, up to 8+56 = 64 for all 14 blocks' totals. Kill bar was > 10. Fast KILL. +- Reason: centres are global D8-root combinations (every source enters with +-1 in ~half the centres); X totals are local 4-source sums. B3's rank-8 state carries the Gram part of M, not arbitrary local sums, and the 8 centres are not a basis of anything local. Kill risk (i) realised. +- Gate (b) legality and (c) hybrid pricing not run (moot once totals are outside span; a centre read could only supply span vectors). Note B3R fixed-cover pricing is ill-posed anyway. + +PROVEN scope: totals defined as source-subset sums of X faces (J21-K), centres = B3R's exact 8 centre functionals on the #623 content map. Not shown: totals defined on other quantities (e.g. M-row/target-side or dirt/F2-frame strand totals), a different (non-matched) centre set. + +## Escapes (>=3) +1. Different state: choose a rank-r > 8 state (r ~ 12-16 centres = centres + 4 per-block local totals) -- that is exactly the helpers charge again (+4 per block) unless centres double as totals; price with moment engine. +2. Re-gauge: pick the X-face source sets to lie in the centre code (weight-56/64 faces are unusable, but faces defined by D8 root lines that happen to be low weight in a different centre basis); check J21-K tiles against root-line geometry. +3. Totals defined target-side: supply X strands' totals from partially-written targets (cut timing), not sources; test span of M rows rather than R columns. +4. B3R escape 2 (wide-climb mass padding) could make a wider, cheaper hybrid; independent of totals. +Rescue check (not run, ~10 min): take J21-K's actual X-face definition from archive/r21/K_skeletons code (if totals are F2 strand totals rather than source sums, recompute rank([R mod 2 | T]) on the real vectors); if rank <= 10, reopen gate (b). + +## Rescue check (Oct 12, g2.py) -- result +- Real totals (J17-T/J21-K): per block, 4 totals + 4 complement = f(+)+-f(-) strand rows, i.e. linear forms supported on the face sources: a face has <=10 sources, a total <=20 sources, 4 blocks = <=32 sources. Every nonzero centre combination has support >=53 (Q) / 56 (F2), so no strand total (block-local or X) lies in span(centres) either: rank([C|T]) = 9 per total. Same KILL as the source-sum reading. +- Escape 3 (target-side): rank(C) = 8; rank([C | the block's 8 target rows]) = 16, and adding the block's 8 unit source vectors E_b stays 16 -> the block-local 8-space (which includes any block-local total and its complement) IS in span(centres + own block's 8 target rows), blocks 0,5,13 checked. So an X total on blocks {a,b,c,d} lies in span(C + the 32 target rows of those blocks) (rank 8+32=40, by the same per-block containment; my random-sample check used blocks not covered by M[:32], so its +1 is expected). +- But this is the trivial identity "targets = M u": the supply needs 4 target rows read per total, and targets get their final writes only in the last 224 ops (B3), i.e. after/at the cut -- the totals are needed to produce those very writes (circular), and the reads climb into cross-block frames. Legality/pricing not run; no helper saving shown. +- FINAL: KILL stands for centre-only supply (PROVEN, scope: centres alone). Target-side supply: span exists but is circular with the cut ordering -> LEAD at most (unpriced, <=5% odds); not built. diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/Y1/B16-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/Y1/B16-NOTES.md new file mode 100644 index 0000000000..514879cc0d --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/Y1/B16-NOTES.md @@ -0,0 +1,33 @@ +# B16: centres (-1 = +22.6% b) and ports (+1 = +2.15% b). VERDICT: PROVEN (scope below) for centres; LOCAL-PRICE (negative, ~-1% b) for ports. ship=false +Scope: #626 tree (cards/B15/pr626), B3R M.npy/R.npy (#623 ck content map), B14 model.py (P112 = E8 120 lines minus the 8 frame lines e_{2a}+-e_{2a+1}). Scripts: g.py (cut ranks), p.py (port decoder cost), b14model.py (copy). Time ~25 min, no heavy jobs. + +## Q1 file:line (pr626/research/complex-allcold/code/) +- invoice_allcold.py:182 `v,helpers,h,m,centres,n=112,504,9,73,8,728` hard-coded; :138 `centres=len(w['centers'])` is data; :229/:240 physical=live+helpers+centres+2. +- assemble.py:47-54 asserts centres==8, v==112, n==728; assemble.py:132 halving inequality [5329,4608] (73^2; 4608=64*72=cst*72); :154 deficit==2560. +- emit_allcold.py:24 `assert (V,canon['h'])==(112,9)`, V from canon['v']; :85 `assert M*DATA-sum(r*n)==2560`; :86 C=len(canon['centers']), physical=DATA+C+R+2; :133 deficit=2560. +- audit_allcold.py:59 V==112,h==9; :62 DATA=8*T*V; :164 `73*DATA-mass==2560`; :196/:200 deficit=2560; :114 private namespace centres [DATA,DATA+C]. +- Class: v=112 and 8 centres are CONSTRUCTION (word data: ports/centers lists of CANONICAL-WORD), frozen into CONVENTION asserts. They are NOT SPEC. deficit 2560 is a DERIVED identity (73*7168-mass, = 64v - 72*cst = 7168-... with cst=64), checked as a literal. Changing v or centres only means editing these asserts AND supplying a word. + +## Q2 centres: rank 7 does not exist (PROVEN, scope: M = I - G/2 content map on the 112 D8-root ports) +- g.py: matched-order off-diagonal ranks of M at cuts 14/28/56/84 = 6/7/7/8 (reproduces B3). But ANY bipartition A|B of the ports (random 56|56, 2000 samples, max) gives off-diagonal block rank 8, and M-D for ANY diagonal D has the same off-diagonal block. So min_D rank(M-D) >= 8: no state of dimension 7 can carry M across a barrier that separates two port sets each spanning R^8. The low matched ranks 6-7 are small-k prefixes (block <= k rows), not a smaller state. +- Hence "8 centres" is a property of the unit (E8 rank), not of the barrier placement. Barrier position: the format has one barrier (R40-C: centres are locked cut nodes); rank is 8 at every position once k>=8 on both sides. +- The +22.6% (deficit +576, local -17, host -9) is a derivative that no legal design realises. (A rank-7 unit would be a 7-dim root system: E7 punctured, J5-N ratio 0.59.) + +## Q3 ports: 113th port costs +1 cst exactly (p.py, exact Fraction-free integer check) +- Port set = live subset of the 120 E8 lines (punctured set = 8 frame lines). Un-puncturing line f: coordinate star decoder stays exact (X X^T == 2G true for all 8 choices) with cst 65 (all 8 choices); P120 cst 72; P112 cst 64. So each port back = +1 cst; ports and cst are tied one-to-one (D = 8v - 9*cst per T=8 block; v+1 +8, cst+1 -9). +- Price with B15 invoice: +2.15% (v) -2.81% (cst) = -0.66%, plus ~4.4 extra helpers (R/v=4.4) x -0.068..-0.137% = -0.3..-0.6% => net about -1.0% b (not rebuilt on the word, derivative sum of B15 exact finite differences; nonlinearity cross-term not computed). Consistent with J5-N atlas (E8 unpunctured 0.91 of punctured). Mirror (more punctures, v-1 cst-1 would be +0.66%+helpers ~+1%) needs cst 63 on P111/P104-type sets: that IS the B14/J14-D cst<64 hunt (P104 break-even 56.9; 0 hits). +- Another decoder on P113 with cst 64 would give +2.15% - helpers ~ +1.8%: not excluded (coordinate decoder only). + +## Verdict +Centres: PROVEN (scope above). Ports: LOCAL-PRICE negative with coordinate decoder. No GO, ship=false. +Escapes (>=3): 1. A non-coordinate decoder on P113 with cst 64 (pair-rank search with 113 labels; B14 flipwalk on hdr for P113) -> +1.8% if found. 2. State rank via a different factorisation than M=D+low-rank, e.g. non-matched barrier with time-varying ports (rank bound above assumes one barrier separating all inputs from outputs). 3. Puncture mirror: any P111 with cst 63 (+~1%): the one-cst-per-puncture pattern holds only for the 8 frame lines; test a 9th puncture's decoder cost with p.py's cost() (cost function reusable; try all 112 lines, ~minutes). +Rescue check (10 min, not run): run p.py's cost() on P111 = P112 minus each of its 112 lines; if any gives 63 (not 64), price v-1,cst-1 in B15 knobs and reopen. + +## Rescue check RUN (p.py last line) +P111 = P112 minus any one of its 112 lines: coordinate cost stays 64 for all 112 (histogram {64:112}). A 9th puncture saves no cst, so the mirror knob costs -2.15% with no cst gain under the coordinate decoder (only the 8 frame lines drop a star rank). Escape 3 is closed for the coordinate decoder. + +## FOLLOW-UP (unbalanced splits; g2.py g3.py g4.py) -- CORRECTION to Q2 +1. Ranks confirmed on the real M (B3R M.npy, R.npy 112x8): hyperplane splits give off-diagonal rank 7 (R column j==0: 56|56 for each of the 8 columns; best random 7-row hyperplane 59|53) and rank 6 for a two-column split (24|88). So "any bipartition = 8" was WRONG; my 2000 random balanced splits only sampled generic ones. Rank = min(dim span) as stated. The exact 84|28 (D7 vs +-e_i+-e8) was NOT reproduced: in R's basis random 7-row hyperplanes top out at 59 rows (84-row hyperplane is a rare special one), and note M offdiag/(R R^T) is not constant (-0.5..-0.125), so R is the skeleton's centre functionals, not the orthonormal D8 roots; the 84|28 rank 7 holds by theory (M=I-G/2) but is unchecked numerically. Q2 verdict downgraded: centres NOT proven 8. +2. What forces 56|56 / the barrier: nothing in SPEC. The word's A phase / B phase / cut are not source|target or port splits (B3: all 112 sources enter by op 2286, every target is last-written in the final 224 ops; centres are 8 GLOBAL functionals over all sources, assemble/emit only check len(centers)==8: construction). The shipped cut routes ALL pairs (i,j) through the 8 functionals. A rank-7 cross-block does not give a 7-centre word: M[A,A] is full-rank local, and M[B,B] (28 roots, span 8) carries the e8 component G_BB = s s^T (rank 1 on B). So 7 centres for the A-B cross terms + a rank-1 centre local to B = still 8 registers (the 8th live only while the 28 sources of B are in flight). The invoice charges centres per register (9 + cut climb 8 mass, 72 calls), not per live time, so the 8th register still pays; savings exist only if the e8 term for B-B pairs is done with no register (28*27 direct pair ops = extra helpers/climbs, which B3 showed cost frame tax per op, not information). +3. Price (B15, derivative only): -1 centre +22.6% is the max; offsets: a recursive/HSS word (A recursion at rank 7, leaf 28x28 dense, forward+backward sweeps) is a rebuild of the 4611-op word, same class as B3R SSS word (LOCAL-PRICE: fills 27% of the cover). Each leaf pair avoided as helper costs at least +0.068% per w9 helper removed, and 756 direct pair ops would need ~tens of new helper-class registers x -0.07..-0.14% each, i.e. -2..-5%, plus 4 blocks/totals structure (B10: totals not in centre span, X faces weight 4) unchanged. Net >= +1% NOT shown; not excluded. Verdict stays: LEAD-weak (<=3%), not GO. +Rescue check (30 min): build G_BB's e8 rank-1 centre as a B-local register in the B3R SSS builder (build.py) with A-D7 7 centres, count registers and price with price2.py; if total registers <= 7 live-time-weighted AND mass fits the cover, reopen. diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/Y1/B74-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/Y1/B74-NOTES.md new file mode 100644 index 0000000000..ad3bd829b4 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/Y1/B74-NOTES.md @@ -0,0 +1,17 @@ +# B74 NOTES: supply the 56 cross-block totals at <= 10 helpers. VERDICT: KILL at 20-min gate, LOCAL-PRICE [scope: face-sum model of the totals; the real X4 totals/tiles do not exist]. ship=false + +## Model (the exact J21-K objects are gone: gate1.py/facepack.py missing, and X4 has NO exact cover, J21-K K.6/B6) +Total = signed sum of the 4 source strands of an eff-reach-10 cross-block face. faces.txt = all 2688 such faces (dump.c = B68 faces.c + dump; reproduces 2688, all nb=4). g.py. Ranks over Q, 112 sources. +- The 2688 face forms span all of Q^112 (rank 112). Any 56 random faces: rank 56 (20/20 trials). +## Residual rank needing new standing registers, per supply (bar: > 46 => KILL) +(a) 8 centres (B16 R.npy): rank([C|T]) - 8 = 56 (residual 56). Agrees with B10 (centre weights >= 53 vs total weight 4). KILL. +(b) block-local retired-row / cold-end basis: SPAN residual 0 (a total is a sum of 4 single-source block pieces, each in its block's invertible basis), but this rank test is vacuous: forming the sum is an ADD across 4 block frames (common frame per ADD, SPEC), i.e. exactly the cross-block problem. As STANDING forms no total equals any block-local row, so register residual = 56. Not a saving. +(c) 2-level pair sums (total = pair + pair, pairs shared, Pippenger sharing): random 56 faces need 105-112 distinct pair registers (greedy pairing, 50 trials), i.e. MORE than the 56 totals. Only an adversarially clustered choice of 56 faces (greedy, 24 distinct sources) reaches 30 pair regs; the real 56 are fixed by the (non-existent) cover, 4 per block, so clustering is not available. Residual 105+ (>46) => KILL. Pair registers also sit in 2-block frames, so legality is untested even at 30. +(d) transient totals: not a rank question; it is the frame schedule (in-place cross-frame ADD with dirty borrow). No real X4 word exists to run the B11 oracle / B15 invoice on; not run. The B7 numbers (0.143/helper) remain unpriced against B2's 0.043 (3x), so even a 56 -> 20 helper saving would be worth ~+1.5..+5% raw, before the 4.2% S-type charge and with the cover still infeasible. +## PROVEN scope: (a) centres, source-sum or strand-sum totals (same as B10); (c) random-selection pair sharing under the face-sum model. LOCAL-PRICE for (b),(d): rank cannot separate them, legality can, and that needs a real X4 word (does not exist). +## Escapes (>= 3) +1. Make X4 exist first: exact cover is infeasible in both Aut-orbit branches (J21-K K.6); totals supply is moot until a cover exists (subset tiles/partial faces, B7 esc.). +2. Totals as in-place cross-frame ADD chains with dirty borrow (d): needs a frame-lowering primitive / non-monotone frames (convention-breaking allowance); test on a toy block pair with the B11 oracle. +3. Totals supplied target-side (B10 esc.3): span(C + 32 target rows) contains them but is circular with the cut timing; reorder so targets of 4 blocks are final-written before the totals are used (B11_reorder). +4. Choose faces so that the 56 cluster on <= ~24 sources (30 pair regs): a different cover objective (min distinct sources), not the max-reach cover. +## Rescue check (not run, ~15 min): redo (c) with the actual 4-per-block constraint and the 6/4-tile library C (needs rebuild of J21-K tiles) to see whether any cover forces pair sharing <= 46; and a sign-aware version of the face forms (signs here are random; ranks are generic so unaffected). diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/Y2/B101-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/Y2/B101-NOTES.md new file mode 100644 index 0000000000..81828dbe40 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/Y2/B101-NOTES.md @@ -0,0 +1,15 @@ +# B101: full centre delivery (0 packets, S3+S4 268 helpers gone?) VERDICT: KILL, PROVEN at the frame gate [scope: #656/B76 PROTOTYPE.json geometry, frame rules of B11/B82; no build, no price]. ship=false +Tool: gate.py (run in B76/work/in_h, <1 s, single process). Prior kills agree: B1 (centre = clean scratch, rank-8 frame, read only at cut), R40-C (centre descents only at barrier), B10 (centre span weights 56/64), B16 (fan-out). +## Gate (frame numbers) +- Centre i holds c_i = sum_s R[s,i] y_s: 57 sources. Minimal frame = span of their start ports = rank 9 (FULL) by direct count; shipped word keeps it at rank 8 = hyper(P[f_i]) (f_i = the coordinate source of axis i; borrowed-basis trick), i.e. dim 8, a FIXED hyperplane. +- Target t allowed frame (every frame in its monotone chain, end = perp(port)) is hyper(P[t]), dim 8. ADD t += c_i forces the common frame to contain the centre frame. +- Centre frame dim 8 vs target frame dim 8: contained only if hyper(P[f_i]) = hyper(P[t]), i.e. t = f_i. True for 8 targets (the shipped cut = 8 coordinate reads, c82 assert e[1]-120==e[2]<8) and FALSE for the other 112 (each (t,i in supp t) pair: 28/57 source ports have odd parity with P[t]; 448/456 pairs violate, the 8 survivors are t=f_i). +- A target reading its 4 supp(t) centres needs a frame containing 4 distinct hyperplanes: span = 9 (FULL) > 8 for all 112 targets (4 distinct centre frames each). Frame 9 > 8 => KILL PROVEN. Gram-parity legality (p_s.p_t=0) is a VALUE condition; it does not give frame legality. +- Centre descent cannot rescue: a centre's frame is bounded below by its content (>= 8) and chains only climb; serving 56 readers (112*4/8) would need frame <= intersection of 56 target hyperplanes (dim <= 8-ceil(log2 56)=2), far below content rank (B82 same bound). +## Consequence +Packets/block: 12 (shipped); 4 or 0 only at full centre delivery, which is frame-illegal. B96's "unpriced" point is now closed: S3+S4 = 268 stay. No price needed. +## Escapes (>= 3), none promising +1. Targets re-based so P[t] in {P[f_i]} (changes geometry: only 8 hyperplanes available; skeleton redesign). +2. Per-target copies of centres at reduced frame: content rank forces >= 8 (copy of FULL-rank content). +3. Split centre content by block (block totals, rank ~ 4-5 frames): that IS the shipped packet architecture (12/block). +TRANSFER: a register's min frame = span of its source ports (>= 8 for any 57-source centre); legal readers of it need hyper(P[t]) = that frame, so only the 8 coordinate targets. diff --git a/research/format-limits-2/s7-9-centre-fragmentation/evidence/Y2/B106-NOTES.md b/research/format-limits-2/s7-9-centre-fragmentation/evidence/Y2/B106-NOTES.md new file mode 100644 index 0000000000..9253e556c2 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/evidence/Y2/B106-NOTES.md @@ -0,0 +1,11 @@ +# B106 NOTES: temporal Menger vs the 8-centre barrier. KILL, PROVEN (scope: M = I - G/2 on the 112 ports, one-barrier shipped skeleton; kill gate honestly met in ~10 min) +Read: B16 (flow/B16.NOTES.md), B33, R40-C, R39-H/C.7, B101, SYN-7 Lemmas 1-2. Run: one numpy rank check (cards/B3R/R.npy, <1 s). Literature (Kempe-Kleinberg-Kumar JCSS 2002; Akrida et al.) from memory, not fetched; only the known statement used (Menger fails for time-respecting vertex-disjoint paths, i.e. a temporal cut can be SMALLER than the max number of disjoint journeys). That is the direction that would help, so it was checked on the actual data. +## Checks +1. Rank is NOT time-independent in the loose sense, but the relevant numbers are (new, verified): for each of the 8 splits by R column j (56|56): rank G_AB = 7, rank G_AA = 7, rank G_BB = 8 (rank G = 8). So the 56|56 split saves one functional only for the cross pairs; the B x B odd pairs (25% of M) still need all 8 functionals, and 59|53 / 24|88 splits are no better for the large block. +2. A temporal 7+1 schedule is algebraically fine (G = sum of 8 rank-1 terms, delivery sequential), so Menger-failure is real here in principle. But the saving is not the simultaneous register count. B16/B15: centres = decoder terms, cst 64 = 8 x beta8, and -1 centre = +22.6% b comes from the per-call decoder mass. A time-shared 8th functional keeps 8 decoder terms (7 + 1 later), so the cst is unchanged. Saving = 0 on the invoice unless the 8th term has beta < 8 (B16's restricted-e8 escape, which this does not supply). +3. Cost side: the second pass needs a second descent epoch for the reused centre. R40-C: centre descent is cheap (one frame-rank step per word) but legal ONLY at the locked barrier node before B; a mid-B epoch is a new skeleton role (escape 2 of R40-C) or reader descents at -5.5% each per call (C.7). B101: a centre read is legal only for t = f_i (frame gate), so the pass-2 centre cannot read the ports at their final frames. Cost >= -5.5%/call per descent against a 0 saving. +4. Lemma 1/2 consequence: the second pass ADDs journeys through already-final port registers (G = U at 79% of ops), so by Lemma 2 it violates necessarily; this is B98c/B99/B100's failure again. +## Verdict +Priced split: saving 0% (cst/decoder terms unchanged, 8 functionals) vs descent cost >= 5.5%/call plus a skeleton change. Ratio undefined/infinite; no GO. +Residual (not killed): the saving appears only if the later rank-1 term can be a RESTRICTED e8 decoder term (beta < 8) on the BB block, i.e. B16's open escape; this card adds that the AA/AB side is rank 7, BB side rank 8, so the restriction would have to live on the B x B block. +TRANSFER: temporal cuts help register-count walls, not per-call decoder-mass walls; cst is charged per functional, so time-sharing buys nothing. BB-block rank 8 (verified) bounds any hyperplane split. diff --git a/research/format-limits-2/s7-9-centre-fragmentation/inputs/b82-rec.json b/research/format-limits-2/s7-9-centre-fragmentation/inputs/b82-rec.json new file mode 100644 index 0000000000..0cfe820106 --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/inputs/b82-rec.json @@ -0,0 +1 @@ +{"v":120,"ports":[1,7,25,31,121,127,97,103,13,405,395,19,491,115,109,501,2,412,388,26,484,122,98,508,400,8,14,406,104,496,502,110,208,336,342,214,296,168,174,302,348,196,220,324,186,290,314,162,341,203,213,331,179,301,307,173,185,289,295,191,313,161,167,319,32,448,454,38,472,56,62,478,460,84,74,466,44,436,426,50,453,91,67,477,37,443,419,61,73,465,471,79,425,49,55,431,265,137,143,271,233,361,367,239,155,259,283,131,379,227,251,355,148,266,276,138,372,234,244,362],"seq":[[240,64],[241,64],[242,65],[243,65],[244,66],[245,66],[246,67],[247,67],[248,68],[249,68],[250,69],[251,69],[252,70],[253,70],[254,71],[255,71],[68,249],[249,68],[68,249],[69,251],[251,69],[69,251],[70,253],[253,70],[70,253],[71,255],[255,71],[71,255],[64,67],[67,64],[240,69],[69,240],[241,70],[70,241],[65,66],[66,65],[242,68],[68,242],[243,71],[71,243],[244,248],[248,244],[245,254],[254,245],[246,250],[250,246],[247,252],[252,247],[249,255],[255,249],[251,253],[253,251],[247,245],[242,240],[246,243],[244,241],[248,250],[70,71],[252,68],[254,69],[69,68],[68,69],[69,68],[240,68],[241,68],[71,69],[243,69],[245,71],[71,245],[245,71],[250,240],[240,250],[250,240],[243,241],[241,243],[243,241],[69,241],[245,241],[68,243],[240,243],[250,243],[250,245],[245,250],[250,245],[68,245],[240,245],[243,245],[69,250],[71,250],[241,250],[245,250],[243,250],[241,250],[243,245],[71,245],[69,245],[250,243],[245,243],[241,243],[240,243],[71,243],[69,243],[68,243],[250,241],[245,241],[243,241],[240,241],[71,241],[69,241],[68,241],[245,240],[71,240],[69,240],[68,240],[241,240],[240,241],[241,240],[243,71],[241,71],[68,71],[245,69],[243,69],[241,69],[68,69],[240,69],[69,240],[240,69],[243,68],[241,68],[240,68],[71,68],[69,68],[256,32],[257,32],[258,33],[259,33],[260,34],[261,34],[262,35],[263,35],[264,36],[265,36],[266,37],[267,37],[268,38],[269,38],[270,39],[271,39],[36,265],[265,36],[36,265],[37,267],[267,37],[37,267],[38,269],[269,38],[38,269],[39,271],[271,39],[39,271],[32,35],[35,32],[256,37],[37,256],[257,38],[38,257],[33,34],[34,33],[258,36],[36,258],[259,39],[39,259],[260,264],[264,260],[261,270],[270,261],[262,266],[266,262],[263,268],[268,263],[265,271],[271,265],[267,269],[269,267],[263,261],[258,256],[262,259],[260,257],[264,266],[38,39],[268,36],[270,37],[37,36],[36,37],[37,36],[256,36],[257,36],[39,37],[259,37],[261,39],[39,261],[261,39],[266,256],[256,266],[266,256],[259,257],[257,259],[259,257],[37,257],[261,257],[36,259],[256,259],[266,259],[266,261],[261,266],[266,261],[36,261],[256,261],[259,261],[37,266],[39,266],[257,266],[261,266],[259,266],[257,266],[259,261],[39,261],[37,261],[266,259],[261,259],[257,259],[256,259],[39,259],[37,259],[36,259],[266,257],[261,257],[259,257],[256,257],[39,257],[37,257],[36,257],[261,256],[39,256],[37,256],[36,256],[257,256],[256,257],[257,256],[259,39],[257,39],[36,39],[261,37],[259,37],[257,37],[36,37],[256,37],[37,256],[256,37],[259,36],[257,36],[256,36],[39,36],[37,36],[272,24],[273,24],[274,25],[275,25],[276,26],[277,26],[278,27],[279,27],[280,28],[281,28],[282,29],[283,29],[284,30],[285,30],[286,31],[287,31],[28,281],[281,28],[28,281],[29,283],[283,29],[29,283],[30,285],[285,30],[30,285],[31,287],[287,31],[31,287],[24,27],[27,24],[272,29],[29,272],[273,30],[30,273],[25,26],[26,25],[274,28],[28,274],[275,31],[31,275],[276,280],[280,276],[277,286],[286,277],[278,282],[282,278],[279,284],[284,279],[281,287],[287,281],[283,285],[285,283],[279,277],[274,272],[278,275],[276,273],[280,282],[30,31],[284,28],[286,29],[29,28],[28,29],[29,28],[272,28],[273,28],[31,29],[275,29],[277,31],[31,277],[277,31],[282,272],[272,282],[282,272],[275,273],[273,275],[275,273],[29,273],[277,273],[28,275],[272,275],[282,275],[282,277],[277,282],[282,277],[28,277],[272,277],[275,277],[29,282],[31,282],[273,282],[277,282],[275,282],[273,282],[275,277],[31,277],[29,277],[282,275],[277,275],[273,275],[272,275],[31,275],[29,275],[28,275],[282,273],[277,273],[275,273],[272,273],[31,273],[29,273],[28,273],[277,272],[31,272],[29,272],[28,272],[273,272],[272,273],[273,272],[275,31],[273,31],[28,31],[277,29],[275,29],[273,29],[28,29],[272,29],[29,272],[272,29],[275,28],[273,28],[272,28],[31,28],[29,28],[288,16],[289,16],[290,17],[291,17],[292,18],[293,18],[294,19],[295,19],[296,20],[297,20],[298,21],[299,21],[300,22],[301,22],[302,23],[303,23],[20,297],[297,20],[20,297],[21,299],[299,21],[21,299],[22,301],[301,22],[22,301],[23,303],[303,23],[23,303],[16,19],[19,16],[288,21],[21,288],[289,22],[22,289],[17,18],[18,17],[290,20],[20,290],[291,23],[23,291],[292,296],[296,292],[293,302],[302,293],[294,298],[298,294],[295,300],[300,295],[297,303],[303,297],[299,301],[301,299],[295,293],[290,288],[294,291],[292,289],[296,298],[22,23],[300,20],[302,21],[21,20],[20,21],[21,20],[288,20],[289,20],[23,21],[291,21],[293,23],[23,293],[293,23],[298,288],[288,298],[298,288],[291,289],[289,291],[291,289],[21,289],[293,289],[20,291],[288,291],[298,291],[298,293],[293,298],[298,293],[20,293],[288,293],[291,293],[21,298],[23,298],[289,298],[293,298],[291,298],[289,298],[291,293],[23,293],[21,293],[298,293],[293,298],[298,293],[298,291],[293,291],[289,291],[288,291],[23,291],[21,291],[20,291],[293,289],[291,289],[288,289],[23,289],[21,289],[20,289],[23,288],[21,288],[20,288],[289,288],[288,289],[289,288],[291,23],[289,23],[20,23],[291,21],[289,21],[20,21],[288,21],[21,288],[288,21],[291,20],[289,20],[288,20],[23,20],[21,20],[304,40],[305,40],[306,41],[307,41],[308,42],[309,42],[310,43],[311,43],[312,44],[313,44],[314,45],[315,45],[316,46],[317,46],[318,47],[319,47],[44,313],[313,44],[44,313],[45,315],[315,45],[45,315],[46,317],[317,46],[46,317],[47,319],[319,47],[47,319],[40,43],[43,40],[304,45],[45,304],[305,46],[46,305],[41,42],[42,41],[306,44],[44,306],[307,47],[47,307],[308,312],[312,308],[309,318],[318,309],[310,314],[314,310],[311,316],[316,311],[313,319],[319,313],[315,317],[317,315],[311,309],[306,304],[310,307],[308,305],[312,314],[46,47],[316,44],[318,45],[45,44],[44,45],[45,44],[304,44],[305,44],[47,45],[307,45],[309,47],[47,309],[309,47],[314,304],[304,314],[314,304],[307,305],[305,307],[307,305],[45,305],[309,305],[44,307],[304,307],[314,307],[314,309],[309,314],[314,309],[44,309],[304,309],[307,309],[45,314],[47,314],[305,314],[309,314],[307,314],[305,314],[307,309],[47,309],[45,309],[314,309],[309,314],[314,309],[314,307],[309,307],[305,307],[304,307],[47,307],[45,307],[44,307],[309,305],[307,305],[304,305],[47,305],[45,305],[44,305],[47,304],[45,304],[44,304],[305,304],[304,305],[305,304],[307,47],[305,47],[44,47],[307,45],[305,45],[44,45],[304,45],[45,304],[304,45],[307,44],[305,44],[304,44],[47,44],[45,44],[320,72],[321,72],[322,73],[323,73],[324,74],[325,74],[326,75],[327,75],[328,76],[329,76],[330,77],[331,77],[332,78],[333,78],[334,79],[335,79],[76,329],[329,76],[76,329],[77,331],[331,77],[77,331],[78,333],[333,78],[78,333],[79,335],[335,79],[79,335],[72,75],[75,72],[320,77],[77,320],[321,78],[78,321],[73,74],[74,73],[322,76],[76,322],[323,79],[79,323],[324,328],[328,324],[325,334],[334,325],[326,330],[330,326],[327,332],[332,327],[329,335],[335,329],[331,333],[333,331],[327,325],[322,320],[326,323],[324,321],[328,330],[78,79],[332,76],[334,77],[77,76],[76,77],[77,76],[320,76],[321,76],[79,77],[323,77],[325,79],[79,325],[325,79],[330,320],[320,330],[330,320],[323,321],[321,323],[323,321],[77,321],[325,321],[76,323],[320,323],[330,323],[330,325],[325,330],[330,325],[76,325],[320,325],[323,325],[77,330],[79,330],[321,330],[325,330],[323,330],[321,330],[323,325],[79,325],[77,325],[330,325],[325,330],[330,325],[330,323],[325,323],[321,323],[320,323],[79,323],[77,323],[76,323],[325,321],[323,321],[320,321],[79,321],[77,321],[76,321],[79,320],[77,320],[76,320],[321,320],[320,321],[321,320],[323,79],[321,79],[76,79],[323,77],[321,77],[76,77],[320,77],[77,320],[320,77],[323,76],[321,76],[320,76],[79,76],[77,76],[336,112],[337,112],[338,113],[339,113],[340,114],[341,114],[342,115],[343,115],[344,116],[345,116],[346,117],[347,117],[348,118],[349,118],[350,119],[351,119],[116,345],[345,116],[116,345],[117,347],[347,117],[117,347],[118,349],[349,118],[118,349],[119,351],[351,119],[119,351],[112,115],[115,112],[336,117],[117,336],[337,118],[118,337],[113,114],[114,113],[338,116],[116,338],[339,119],[119,339],[340,344],[344,340],[341,350],[350,341],[342,346],[346,342],[343,348],[348,343],[345,351],[351,345],[347,349],[349,347],[343,341],[338,336],[342,339],[340,337],[344,346],[118,119],[348,116],[350,117],[117,116],[116,117],[117,116],[336,116],[337,116],[119,117],[339,117],[341,119],[119,341],[341,119],[346,336],[336,346],[346,336],[339,337],[337,339],[339,337],[117,337],[341,337],[116,339],[336,339],[346,339],[346,341],[341,346],[346,341],[116,341],[336,341],[339,341],[117,346],[119,346],[337,346],[341,346],[339,346],[337,346],[339,341],[119,341],[117,341],[346,341],[341,346],[346,341],[346,339],[341,339],[337,339],[336,339],[119,339],[117,339],[116,339],[341,337],[339,337],[336,337],[119,337],[117,337],[116,337],[119,336],[117,336],[116,336],[337,336],[336,337],[337,336],[339,119],[337,119],[116,119],[339,117],[337,117],[116,117],[336,117],[117,336],[336,117],[339,116],[337,116],[336,116],[119,116],[117,116],[352,8],[353,8],[354,9],[355,9],[356,10],[357,10],[358,11],[359,11],[360,12],[361,12],[362,13],[363,13],[364,14],[365,14],[366,15],[367,15],[12,361],[361,12],[12,361],[13,363],[363,13],[13,363],[14,365],[365,14],[14,365],[15,367],[367,15],[15,367],[8,11],[11,8],[352,13],[13,352],[353,14],[14,353],[9,10],[10,9],[354,12],[12,354],[355,15],[15,355],[356,360],[360,356],[357,366],[366,357],[358,362],[362,358],[359,364],[364,359],[361,367],[367,361],[363,365],[365,363],[359,357],[354,352],[358,355],[356,353],[360,362],[14,15],[364,12],[366,13],[13,12],[12,13],[13,12],[352,12],[353,12],[15,13],[355,13],[357,15],[15,357],[357,15],[362,352],[352,362],[362,352],[355,353],[353,355],[355,353],[13,353],[357,353],[12,355],[352,355],[362,355],[362,357],[357,362],[362,357],[12,357],[352,357],[355,357],[13,362],[15,362],[353,362],[357,362],[355,362],[353,362],[355,357],[15,357],[13,357],[362,357],[357,362],[362,357],[362,355],[357,355],[353,355],[352,355],[15,355],[13,355],[12,355],[357,353],[355,353],[352,353],[15,353],[13,353],[12,353],[15,352],[13,352],[12,352],[353,352],[352,353],[353,352],[355,15],[353,15],[12,15],[355,13],[353,13],[12,13],[352,13],[13,352],[352,13],[355,12],[353,12],[352,12],[15,12],[13,12],[368,48],[369,48],[370,49],[371,49],[372,50],[373,50],[374,51],[375,51],[376,52],[377,52],[378,53],[379,53],[380,54],[381,54],[382,55],[383,55],[52,377],[377,52],[52,377],[53,379],[379,53],[53,379],[54,381],[381,54],[54,381],[55,383],[383,55],[55,383],[48,51],[51,48],[368,53],[53,368],[369,54],[54,369],[49,50],[50,49],[370,52],[52,370],[371,55],[55,371],[372,376],[376,372],[373,382],[382,373],[374,378],[378,374],[375,380],[380,375],[377,383],[383,377],[379,381],[381,379],[375,373],[370,368],[374,371],[372,369],[376,378],[54,55],[380,52],[382,53],[53,52],[52,53],[53,52],[368,52],[369,52],[55,53],[371,53],[373,55],[55,373],[373,55],[378,368],[368,378],[378,368],[371,369],[369,371],[371,369],[53,369],[373,369],[52,371],[368,371],[378,371],[378,373],[373,378],[378,373],[52,373],[368,373],[371,373],[53,378],[55,378],[369,378],[373,378],[371,378],[369,378],[371,373],[55,373],[53,373],[378,373],[373,378],[378,373],[378,371],[373,371],[369,371],[368,371],[55,371],[53,371],[52,371],[373,369],[371,369],[368,369],[55,369],[53,369],[52,369],[55,368],[53,368],[52,368],[369,368],[368,369],[369,368],[371,55],[369,55],[52,55],[371,53],[369,53],[52,53],[368,53],[53,368],[368,53],[371,52],[369,52],[368,52],[55,52],[53,52],[384,80],[385,80],[386,81],[387,81],[388,82],[389,82],[390,83],[391,83],[392,84],[393,84],[394,85],[395,85],[396,86],[397,86],[398,87],[399,87],[84,393],[393,84],[84,393],[85,395],[395,85],[85,395],[86,397],[397,86],[86,397],[87,399],[399,87],[87,399],[80,83],[83,80],[384,85],[85,384],[385,86],[86,385],[81,82],[82,81],[386,84],[84,386],[387,87],[87,387],[388,392],[392,388],[389,398],[398,389],[390,394],[394,390],[391,396],[396,391],[393,399],[399,393],[395,397],[397,395],[391,389],[386,384],[390,387],[388,385],[392,394],[86,87],[396,84],[398,85],[85,84],[84,85],[85,84],[384,84],[385,84],[87,85],[387,85],[389,87],[87,389],[389,87],[394,384],[384,394],[394,384],[387,385],[385,387],[387,385],[85,385],[389,385],[84,387],[384,387],[394,387],[394,389],[389,394],[394,389],[84,389],[384,389],[387,389],[85,394],[87,394],[385,394],[389,394],[387,394],[385,394],[387,389],[87,389],[85,389],[394,389],[389,394],[394,389],[394,387],[389,387],[385,387],[384,387],[87,387],[85,387],[84,387],[389,385],[387,385],[384,385],[87,385],[85,385],[84,385],[87,384],[85,384],[84,384],[385,384],[384,385],[385,384],[387,87],[385,87],[84,87],[387,85],[385,85],[84,85],[384,85],[85,384],[384,85],[387,84],[385,84],[384,84],[87,84],[85,84],[400,104],[401,104],[402,105],[403,105],[404,106],[405,106],[406,107],[407,107],[408,108],[409,108],[410,109],[411,109],[412,110],[413,110],[414,111],[415,111],[108,409],[409,108],[108,409],[109,411],[411,109],[109,411],[110,413],[413,110],[110,413],[111,415],[415,111],[111,415],[104,107],[107,104],[400,109],[109,400],[401,110],[110,401],[105,106],[106,105],[402,108],[108,402],[403,111],[111,403],[404,408],[408,404],[405,414],[414,405],[406,410],[410,406],[407,412],[412,407],[409,415],[415,409],[411,413],[413,411],[407,405],[402,400],[406,403],[404,401],[408,410],[110,111],[412,108],[414,109],[109,108],[108,109],[109,108],[400,108],[401,108],[111,109],[403,109],[405,111],[111,405],[405,111],[410,400],[400,410],[410,400],[403,401],[401,403],[403,401],[109,401],[405,401],[108,403],[400,403],[410,403],[410,405],[405,410],[410,405],[108,405],[400,405],[403,405],[109,410],[111,410],[401,410],[405,410],[403,410],[401,410],[403,405],[111,405],[109,405],[410,405],[405,410],[410,405],[410,403],[405,403],[401,403],[400,403],[111,403],[109,403],[108,403],[405,401],[403,401],[400,401],[111,401],[109,401],[108,401],[111,400],[109,400],[108,400],[401,400],[400,401],[401,400],[403,111],[401,111],[108,111],[403,109],[401,109],[108,109],[400,109],[109,400],[400,109],[403,108],[401,108],[400,108],[111,108],[109,108],[416,96],[417,96],[418,97],[419,97],[420,98],[421,98],[422,99],[423,99],[424,100],[425,100],[426,101],[427,101],[428,102],[429,102],[430,103],[431,103],[100,425],[425,100],[100,425],[101,427],[427,101],[101,427],[102,429],[429,102],[102,429],[103,431],[431,103],[103,431],[96,99],[99,96],[416,101],[101,416],[417,102],[102,417],[97,98],[98,97],[418,100],[100,418],[419,103],[103,419],[420,424],[424,420],[421,430],[430,421],[422,426],[426,422],[423,428],[428,423],[425,431],[431,425],[427,429],[429,427],[423,421],[418,416],[422,419],[420,417],[424,426],[102,103],[428,100],[430,101],[101,100],[100,101],[101,100],[416,100],[417,100],[103,101],[419,101],[421,103],[103,421],[421,103],[426,416],[416,426],[426,416],[419,417],[417,419],[419,417],[101,417],[421,417],[100,419],[416,419],[426,419],[426,421],[421,426],[426,421],[100,421],[416,421],[419,421],[101,426],[103,426],[417,426],[421,426],[419,426],[417,426],[419,421],[103,421],[101,421],[426,419],[421,419],[417,419],[416,419],[103,419],[101,419],[100,419],[426,417],[421,417],[419,417],[416,417],[103,417],[101,417],[100,417],[421,416],[103,416],[101,416],[100,416],[417,416],[416,417],[417,416],[419,103],[417,103],[100,103],[421,101],[419,101],[417,101],[100,101],[416,101],[101,416],[416,101],[419,100],[417,100],[416,100],[103,100],[101,100],[432,88],[433,88],[434,89],[435,89],[436,90],[437,90],[438,91],[439,91],[440,92],[441,92],[442,93],[443,93],[444,94],[445,94],[446,95],[447,95],[92,441],[441,92],[92,441],[93,443],[443,93],[93,443],[94,445],[445,94],[94,445],[95,447],[447,95],[95,447],[88,91],[91,88],[432,93],[93,432],[433,94],[94,433],[89,90],[90,89],[434,92],[92,434],[435,95],[95,435],[436,440],[440,436],[437,446],[446,437],[438,442],[442,438],[439,444],[444,439],[441,447],[447,441],[443,445],[445,443],[439,437],[434,432],[438,435],[436,433],[440,442],[94,95],[444,92],[446,93],[93,92],[92,93],[93,92],[432,92],[433,92],[95,93],[435,93],[437,95],[95,437],[437,95],[442,432],[432,442],[442,432],[435,433],[433,435],[435,433],[93,433],[437,433],[92,435],[432,435],[442,435],[442,437],[437,442],[442,437],[92,437],[432,437],[435,437],[93,442],[95,442],[433,442],[437,442],[435,442],[433,442],[435,437],[95,437],[93,437],[442,435],[437,435],[433,435],[432,435],[95,435],[93,435],[92,435],[442,433],[437,433],[435,433],[432,433],[95,433],[93,433],[92,433],[437,432],[95,432],[93,432],[92,432],[433,432],[432,433],[433,432],[435,95],[433,95],[92,95],[437,93],[435,93],[433,93],[92,93],[432,93],[93,432],[432,93],[435,92],[433,92],[432,92],[95,92],[93,92],[448,56],[449,56],[450,57],[451,57],[452,58],[453,58],[454,59],[455,59],[456,60],[457,60],[458,61],[459,61],[460,62],[461,62],[462,63],[463,63],[60,457],[457,60],[60,457],[61,459],[459,61],[61,459],[62,461],[461,62],[62,461],[63,463],[463,63],[63,463],[56,59],[59,56],[448,61],[61,448],[449,62],[62,449],[57,58],[58,57],[450,60],[60,450],[451,63],[63,451],[452,456],[456,452],[453,462],[462,453],[454,458],[458,454],[455,460],[460,455],[457,463],[463,457],[459,461],[461,459],[455,453],[450,448],[454,451],[452,449],[456,458],[62,63],[460,60],[462,61],[61,60],[60,61],[61,60],[448,60],[449,60],[63,61],[451,61],[453,63],[63,453],[453,63],[458,448],[448,458],[458,448],[451,449],[449,451],[451,449],[61,449],[453,449],[60,451],[448,451],[458,451],[458,453],[453,458],[458,453],[60,453],[448,453],[451,453],[61,458],[63,458],[449,458],[453,458],[451,458],[449,458],[451,453],[63,453],[61,453],[458,451],[453,451],[449,451],[448,451],[63,451],[61,451],[60,451],[458,449],[453,449],[451,449],[448,449],[63,449],[61,449],[60,449],[453,448],[63,448],[61,448],[60,448],[449,448],[448,449],[449,448],[451,63],[449,63],[60,63],[453,61],[451,61],[449,61],[60,61],[448,61],[61,448],[448,61],[451,60],[449,60],[448,60],[63,60],[61,60],[68,36],[68,28],[68,20],[68,44],[68,76],[68,116],[69,37],[69,29],[69,12],[69,52],[69,84],[69,108],[71,21],[71,45],[71,13],[71,53],[71,100],[71,92],[240,77],[240,117],[240,85],[240,109],[240,101],[240,93],[39,23],[39,79],[39,15],[39,87],[39,103],[39,60],[256,47],[256,119],[256,55],[256,111],[256,416],[256,61],[31,288],[31,336],[31,368],[31,384],[31,95],[31,63],[272,304],[272,320],[272,352],[272,400],[272,432],[272,448],[128,9],[129,8],[130,365],[131,367],[132,363],[133,361],[134,10],[135,11],[136,17],[137,16],[138,301],[139,303],[140,299],[141,297],[142,18],[143,19],[144,25],[145,24],[147,287],[151,27],[152,33],[153,32],[155,271],[159,35],[160,41],[161,40],[162,317],[163,319],[164,315],[165,313],[166,42],[167,43],[168,49],[169,48],[170,381],[171,383],[172,379],[173,377],[174,50],[175,51],[176,57],[177,56],[179,463],[183,59],[184,65],[185,64],[187,255],[191,67],[192,73],[193,72],[194,333],[195,335],[196,331],[197,329],[198,74],[199,75],[200,81],[201,80],[202,397],[203,399],[204,395],[205,393],[206,82],[207,83],[208,89],[209,88],[211,447],[215,91],[216,97],[217,96],[219,431],[223,99],[224,105],[225,104],[226,413],[227,415],[228,411],[229,409],[230,106],[231,107],[232,113],[233,112],[234,349],[235,351],[236,347],[237,345],[238,114],[239,115],[149,265],[189,249],[188,283],[157,281],[148,251],[157,251],[188,265],[156,267],[156,281],[189,283],[149,267],[188,267],[148,249],[157,249],[189,265],[156,251],[149,281],[188,281],[148,283],[148,265],[156,249],[157,283],[189,267],[149,251],[188,251],[149,249],[157,265],[189,281],[156,283],[148,267],[213,425],[212,443],[220,427],[221,253],[212,425],[213,427],[190,66],[212,427],[186,441],[186,443],[221,66],[220,253],[213,253],[220,66],[190,441],[190,443],[221,441],[186,425],[190,425],[213,66],[220,441],[212,253],[212,66],[221,443],[186,427],[213,441],[221,425],[186,253],[220,443],[190,427],[181,429],[154,459],[154,429],[158,98],[218,457],[180,34],[158,457],[218,34],[222,269],[222,98],[181,269],[180,459],[180,429],[154,269],[180,269],[222,457],[158,34],[181,98],[154,98],[180,98],[181,457],[154,457],[222,34],[218,459],[218,429],[218,269],[158,459],[222,459],[181,34],[158,429],[182,445],[210,285],[214,90],[150,26],[178,461],[178,445],[182,90],[178,90],[146,58],[210,26],[146,461],[214,285],[150,58],[210,58],[214,26],[214,58],[150,461],[210,461],[146,445],[150,445],[210,445],[214,461],[146,90],[150,90],[182,285],[182,26],[182,58],[178,285],[178,26],[146,285],[65,64],[255,67],[464,65],[465,247],[466,242],[467,246],[468,244],[469,248],[470,70],[471,252],[472,254],[473,255],[33,32],[271,35],[474,33],[475,263],[476,258],[477,262],[478,260],[479,264],[480,38],[481,268],[482,270],[483,271],[25,24],[287,27],[484,25],[485,279],[486,274],[487,278],[488,276],[489,280],[490,30],[491,284],[492,286],[493,287],[299,297],[17,16],[18,301],[303,19],[494,299],[495,17],[496,295],[497,290],[498,294],[499,292],[500,296],[501,22],[502,300],[503,302],[504,18],[505,303],[315,313],[41,40],[42,317],[319,43],[506,315],[507,41],[508,311],[509,306],[510,310],[511,308],[512,312],[513,46],[514,316],[515,318],[516,42],[517,319],[331,329],[73,72],[74,333],[335,75],[518,331],[519,73],[520,327],[521,322],[522,326],[523,324],[524,328],[525,78],[526,332],[527,334],[528,74],[529,335],[347,345],[113,112],[114,349],[351,115],[530,347],[531,113],[532,343],[533,338],[534,342],[535,340],[536,344],[537,118],[538,348],[539,350],[540,114],[541,351],[363,361],[9,8],[10,365],[367,11],[542,363],[543,9],[544,359],[545,354],[546,358],[547,356],[548,360],[549,14],[550,364],[551,366],[552,10],[553,367],[379,377],[49,48],[50,381],[383,51],[554,379],[555,49],[556,375],[557,370],[558,374],[559,372],[560,376],[561,54],[562,380],[563,382],[564,50],[565,383],[395,393],[81,80],[82,397],[399,83],[566,395],[567,81],[568,391],[569,386],[570,390],[571,388],[572,392],[573,86],[574,396],[575,398],[576,82],[577,399],[411,409],[105,104],[106,413],[415,107],[578,411],[579,105],[580,407],[581,402],[582,406],[583,404],[584,408],[585,110],[586,412],[587,414],[588,106],[589,415],[97,96],[431,99],[590,97],[591,423],[592,418],[593,422],[594,420],[595,424],[596,102],[597,428],[598,430],[599,431],[89,88],[447,91],[600,89],[601,439],[602,434],[603,438],[604,436],[605,440],[606,94],[607,444],[608,446],[609,447],[57,56],[463,59],[610,57],[611,455],[612,450],[613,454],[614,452],[615,456],[616,62],[617,460],[618,462],[619,463],[184,474],[185,484],[187,590],[191,600],[152,464],[153,25],[155,599],[159,610],[144,65],[145,33],[147,609],[151,619],[140,465],[141,315],[136,466],[137,41],[138,576],[142,611],[139,577],[143,612],[164,247],[165,299],[160,242],[161,17],[162,588],[166,617],[163,589],[167,618],[196,467],[197,347],[192,468],[193,113],[194,552],[198,613],[195,553],[199,614],[236,246],[237,331],[232,244],[233,73],[234,564],[238,615],[235,565],[239,616],[132,469],[133,379],[128,470],[129,49],[130,528],[134,454],[131,529],[135,452],[172,248],[173,363],[168,70],[169,9],[170,540],[174,456],[171,541],[175,62],[204,471],[205,411],[200,472],[201,105],[202,504],[206,455],[203,505],[207,450],[228,252],[229,395],[224,254],[225,81],[226,516],[230,460],[227,517],[231,462],[216,473],[217,89],[219,483],[223,57],[208,255],[209,97],[211,493],[215,463],[176,271],[177,431],[179,287],[183,447],[299,315],[17,41],[331,347],[73,113],[363,379],[9,49],[395,411],[81,105],[295,327],[290,322],[311,343],[306,338],[359,391],[354,386],[375,407],[370,402],[294,342],[292,340],[310,326],[308,324],[374,390],[372,388],[358,406],[356,404],[263,520],[258,521],[279,534],[274,535],[360,423],[14,418],[380,439],[382,434],[262,532],[260,533],[278,522],[276,523],[376,422],[54,420],[364,438],[366,436],[475,496],[476,497],[487,510],[488,511],[392,424],[86,102],[412,444],[414,446],[477,508],[478,509],[485,498],[486,499],[408,428],[110,430],[396,440],[398,94],[264,568],[38,569],[284,582],[286,583],[296,591],[22,592],[316,603],[318,604],[268,580],[270,581],[280,570],[30,571],[312,593],[46,594],[300,601],[302,602],[479,544],[480,545],[489,558],[490,559],[328,595],[78,596],[348,605],[350,606],[481,556],[482,557],[491,546],[492,547],[344,597],[118,598],[332,607],[334,608],[500,548],[501,549],[512,560],[513,561],[524,572],[525,573],[536,584],[537,585],[502,562],[503,563],[514,550],[515,551],[538,574],[539,575],[526,586],[527,587],[504,576],[505,577],[528,552],[529,553],[540,564],[541,565],[516,588],[517,589],[620,299],[621,17],[622,331],[623,73],[624,363],[625,9],[626,395],[627,81],[628,295],[629,290],[630,311],[631,306],[632,359],[633,354],[634,375],[635,370],[636,294],[637,292],[638,310],[639,308],[640,374],[641,372],[642,358],[643,356],[644,263],[645,258],[646,279],[647,274],[648,360],[649,14],[650,380],[651,382],[652,262],[653,260],[654,278],[655,276],[656,376],[657,54],[658,364],[659,366],[660,475],[661,476],[662,487],[663,488],[664,392],[665,86],[666,412],[667,414],[668,477],[669,478],[670,485],[671,486],[672,408],[673,110],[674,396],[675,398],[676,264],[677,38],[678,284],[679,286],[680,296],[681,22],[682,316],[683,318],[684,268],[685,270],[686,280],[687,30],[688,312],[689,46],[690,300],[691,302],[692,479],[693,480],[694,489],[695,490],[696,328],[697,78],[698,348],[699,350],[700,481],[701,482],[702,491],[703,492],[704,344],[705,118],[706,332],[707,334],[708,500],[709,501],[710,512],[711,513],[712,524],[713,525],[714,536],[715,537],[716,502],[717,503],[718,514],[719,515],[720,538],[721,539],[722,526],[723,527],[724,504],[725,505],[726,528],[727,529],[728,540],[729,541],[730,516],[731,517],[184,25],[185,33],[187,89],[191,97],[152,484],[153,65],[155,57],[159,431],[144,474],[145,464],[147,463],[151,447],[140,506],[141,247],[136,507],[137,242],[138,455],[142,82],[139,450],[143,399],[164,494],[165,465],[160,495],[161,466],[162,460],[166,106],[163,462],[167,415],[196,530],[197,246],[192,531],[193,244],[194,454],[198,10],[195,452],[199,367],[236,518],[237,467],[232,519],[233,468],[234,456],[238,50],[235,62],[239,383],[132,554],[133,248],[128,555],[129,70],[130,613],[134,74],[131,614],[135,335],[172,542],[173,469],[168,543],[169,470],[170,615],[174,114],[171,616],[175,351],[204,578],[205,252],[200,579],[201,254],[202,611],[206,18],[203,612],[207,303],[228,566],[229,471],[224,567],[225,472],[226,617],[230,42],[227,618],[231,319],[216,600],[217,255],[219,610],[223,271],[208,590],[209,473],[211,619],[215,287],[176,599],[177,483],[179,609],[183,493],[189,190],[190,189],[184,187],[187,184],[188,191],[191,188],[185,186],[186,185],[157,158],[158,157],[152,155],[155,152],[156,159],[159,156],[153,154],[154,153],[149,150],[150,149],[144,147],[147,144],[148,151],[151,148],[145,146],[146,145],[141,142],[142,141],[136,139],[139,136],[140,143],[143,140],[137,138],[138,137],[165,166],[166,165],[160,163],[163,160],[164,167],[167,164],[161,162],[162,161],[197,198],[198,197],[192,195],[195,192],[196,199],[199,196],[193,194],[194,193],[237,238],[238,237],[232,235],[235,232],[236,239],[239,236],[233,234],[234,233],[133,134],[134,133],[128,131],[131,128],[132,135],[135,132],[129,130],[130,129],[173,174],[174,173],[168,171],[171,168],[172,175],[175,172],[169,170],[170,169],[205,206],[206,205],[200,203],[203,200],[204,207],[207,204],[201,202],[202,201],[229,230],[230,229],[224,227],[227,224],[228,231],[231,228],[225,226],[226,225],[221,222],[222,221],[216,219],[219,216],[220,223],[223,220],[217,218],[218,217],[213,214],[214,213],[208,211],[211,208],[212,215],[215,212],[209,210],[210,209],[181,182],[182,181],[176,179],[179,176],[180,183],[183,180],[177,178],[178,177],[299,395],[395,299],[187,299],[190,395],[17,81],[81,17],[184,17],[189,81],[331,363],[363,331],[187,331],[189,363],[73,9],[9,73],[184,73],[190,9],[620,627],[627,620],[186,620],[191,627],[621,626],[626,621],[185,621],[188,626],[622,625],[625,622],[185,622],[191,625],[623,624],[624,623],[186,623],[188,624],[295,375],[375,295],[155,295],[158,375],[290,370],[370,290],[152,290],[157,370],[311,359],[359,311],[155,311],[157,359],[306,354],[354,306],[152,306],[158,354],[628,635],[635,628],[154,628],[159,635],[629,634],[634,629],[153,629],[156,634],[630,633],[633,630],[153,630],[159,633],[631,632],[632,631],[154,631],[156,632],[294,358],[358,294],[147,294],[150,358],[292,356],[356,292],[144,292],[149,356],[310,374],[374,310],[147,310],[149,374],[308,372],[372,308],[144,308],[150,372],[636,643],[643,636],[146,636],[151,643],[637,642],[642,637],[145,637],[148,642],[638,641],[641,638],[145,638],[151,641],[639,640],[640,639],[146,639],[148,640],[263,380],[380,263],[139,263],[142,380],[258,382],[382,258],[136,258],[141,382],[279,360],[360,279],[139,279],[141,360],[274,14],[14,274],[136,274],[142,14],[644,651],[651,644],[138,644],[143,651],[645,650],[650,645],[137,645],[140,650],[646,649],[649,646],[137,646],[143,649],[647,648],[648,647],[138,647],[140,648],[262,364],[364,262],[163,262],[166,364],[260,366],[366,260],[160,260],[165,366],[278,376],[376,278],[163,278],[165,376],[276,54],[54,276],[160,276],[166,54],[652,659],[659,652],[162,652],[167,659],[653,658],[658,653],[161,653],[164,658],[654,657],[657,654],[161,654],[167,657],[655,656],[656,655],[162,655],[164,656],[475,412],[412,475],[195,475],[198,412],[476,414],[414,476],[192,476],[197,414],[487,392],[392,487],[195,487],[197,392],[488,86],[86,488],[192,488],[198,86],[660,667],[667,660],[194,660],[199,667],[661,666],[666,661],[193,661],[196,666],[662,665],[665,662],[193,662],[199,665],[663,664],[664,663],[194,663],[196,664],[477,396],[396,477],[235,477],[238,396],[478,398],[398,478],[232,478],[237,398],[485,408],[408,485],[235,485],[237,408],[486,110],[110,486],[232,486],[238,110],[668,675],[675,668],[234,668],[239,675],[669,674],[674,669],[233,669],[236,674],[670,673],[673,670],[233,670],[239,673],[671,672],[672,671],[234,671],[236,672],[264,316],[316,264],[131,264],[134,316],[38,318],[318,38],[128,38],[133,318],[284,296],[296,284],[131,284],[133,296],[286,22],[22,286],[128,286],[134,22],[676,683],[683,676],[130,676],[135,683],[677,682],[682,677],[129,677],[132,682],[678,681],[681,678],[129,678],[135,681],[679,680],[680,679],[130,679],[132,680],[268,300],[300,268],[171,268],[174,300],[270,302],[302,270],[168,270],[173,302],[280,312],[312,280],[171,280],[173,312],[30,46],[46,30],[168,30],[174,46],[684,691],[691,684],[170,684],[175,691],[685,690],[690,685],[169,685],[172,690],[686,689],[689,686],[169,686],[175,689],[687,688],[688,687],[170,687],[172,688],[479,348],[348,479],[203,479],[206,348],[480,350],[350,480],[200,480],[205,350],[489,328],[328,489],[203,489],[205,328],[490,78],[78,490],[200,490],[206,78],[692,699],[699,692],[202,692],[207,699],[693,698],[698,693],[201,693],[204,698],[694,697],[697,694],[201,694],[207,697],[695,696],[696,695],[202,695],[204,696],[481,332],[332,481],[227,481],[230,332],[482,334],[334,482],[224,482],[229,334],[491,344],[344,491],[227,491],[229,344],[492,118],[118,492],[224,492],[230,118],[700,707],[707,700],[226,700],[231,707],[701,706],[706,701],[225,701],[228,706],[702,705],[705,702],[225,702],[231,705],[703,704],[704,703],[226,703],[228,704],[500,536],[536,500],[219,500],[222,536],[501,537],[537,501],[216,501],[221,537],[512,524],[524,512],[219,512],[221,524],[513,525],[525,513],[216,513],[222,525],[708,715],[715,708],[218,708],[223,715],[709,714],[714,709],[217,709],[220,714],[710,713],[713,710],[217,710],[223,713],[711,712],[712,711],[218,711],[220,712],[502,526],[526,502],[211,502],[214,526],[503,527],[527,503],[208,503],[213,527],[514,538],[538,514],[211,514],[213,538],[515,539],[539,515],[208,515],[214,539],[716,723],[723,716],[210,716],[215,723],[717,722],[722,717],[209,717],[212,722],[718,721],[721,718],[209,718],[215,721],[719,720],[720,719],[210,719],[212,720],[504,516],[516,504],[179,504],[182,516],[505,517],[517,505],[176,505],[181,517],[528,540],[540,528],[179,528],[181,540],[529,541],[541,529],[176,529],[182,541],[724,731],[731,724],[178,724],[183,731],[725,730],[730,725],[177,725],[180,730],[726,729],[729,726],[177,726],[183,729],[727,728],[728,727],[178,727],[180,728]],"rec":[["S3",[0,1,2,3],[0,1],1,65,464,2107,[448,32,6]],["S3",[0,1,2,3],[0,2],-1,247,465,2108,[454,38,24]],["S3",[0,1,2,3],[0,2],1,242,466,2109,[448,32,24]],["S3",[0,1,2,3],[0,3],-1,246,467,2110,[448,38,30]],["S3",[0,1,2,3],[0,3],1,244,468,2111,[454,32,30]],["S3",[0,1,2,3],[1,2],-1,248,469,2112,[454,38,30]],["S3",[0,1,2,3],[1,2],1,70,470,2113,[448,32,30]],["S3",[0,1,2,3],[1,3],-1,252,471,2114,[448,38,24]],["S3",[0,1,2,3],[1,3],1,254,472,2115,[454,32,24]],["S3",[0,1,2,3],[2,3],1,255,473,2116,[472,32,6]],["S3",[0,1,4,5],[0,1],1,33,474,2119,[336,208,6]],["S3",[0,1,4,5],[0,4],-1,263,475,2120,[302,174,120]],["S3",[0,1,4,5],[0,4],1,258,476,2121,[296,168,120]],["S3",[0,1,4,5],[0,5],-1,262,477,2122,[302,168,126]],["S3",[0,1,4,5],[0,5],1,260,478,2123,[296,174,126]],["S3",[0,1,4,5],[1,4],-1,264,479,2124,[296,168,126]],["S3",[0,1,4,5],[1,4],1,38,480,2125,[302,174,126]],["S3",[0,1,4,5],[1,5],-1,268,481,2126,[296,174,120]],["S3",[0,1,4,5],[1,5],1,270,482,2127,[302,168,120]],["S3",[0,1,4,5],[4,5],1,271,483,2128,[296,208,6]],["S3",[0,1,6,7],[0,1],1,25,484,2131,[400,8,6]],["S3",[0,1,6,7],[0,6],-1,279,485,2132,[406,96,14]],["S3",[0,1,6,7],[0,6],1,274,486,2133,[400,96,8]],["S3",[0,1,6,7],[0,7],-1,278,487,2134,[406,102,8]],["S3",[0,1,6,7],[0,7],1,276,488,2135,[400,102,14]],["S3",[0,1,6,7],[1,6],-1,280,489,2136,[406,102,14]],["S3",[0,1,6,7],[1,6],1,30,490,2137,[400,102,8]],["S3",[0,1,6,7],[1,7],-1,284,491,2138,[406,96,8]],["S3",[0,1,6,7],[1,7],1,286,492,2139,[400,96,14]],["S3",[0,1,6,7],[6,7],1,287,493,2140,[400,104,6]],["S3",[0,2,4,6],[0,2],-1,299,494,2145,[390,98,24]],["S3",[0,2,4,6],[0,2],1,17,495,2146,[388,24,2]],["S3",[0,2,4,6],[0,4],-1,295,496,2147,[388,98,26]],["S3",[0,2,4,6],[0,4],1,290,497,2148,[412,120,2]],["S3",[0,2,4,6],[0,6],-1,294,498,2149,[390,96,26]],["S3",[0,2,4,6],[0,6],1,292,499,2150,[388,96,2]],["S3",[0,2,4,6],[2,4],-1,296,500,2151,[388,96,26]],["S3",[0,2,4,6],[2,4],1,22,501,2152,[412,96,2]],["S3",[0,2,4,6],[2,6],-1,300,502,2153,[390,98,26]],["S3",[0,2,4,6],[2,6],1,302,503,2154,[388,120,2]],["S3",[0,2,4,6],[4,6],-1,18,504,2155,[388,98,24]],["S3",[0,2,4,6],[4,6],1,303,505,2156,[484,24,2]],["S3",[0,2,5,7],[0,2],-1,315,506,2161,[290,162,24]],["S3",[0,2,5,7],[0,2],1,41,507,2162,[324,196,24]],["S3",[0,2,5,7],[0,5],-1,311,508,2163,[314,162,126]],["S3",[0,2,5,7],[0,5],1,306,509,2164,[290,186,126]],["S3",[0,2,5,7],[0,7],-1,310,510,2165,[290,162,102]],["S3",[0,2,5,7],[0,7],1,308,511,2166,[314,186,102]],["S3",[0,2,5,7],[2,5],-1,312,512,2167,[290,186,102]],["S3",[0,2,5,7],[2,5],1,46,513,2168,[314,162,102]],["S3",[0,2,5,7],[2,7],-1,316,514,2169,[314,186,126]],["S3",[0,2,5,7],[2,7],1,318,515,2170,[290,162,126]],["S3",[0,2,5,7],[5,7],-1,42,516,2171,[290,196,24]],["S3",[0,2,5,7],[5,7],1,319,517,2172,[324,162,24]],["S3",[0,3,4,7],[0,3],-1,331,518,2177,[390,44,30]],["S3",[0,3,4,7],[0,3],1,73,519,2178,[390,74,30]],["S3",[0,3,4,7],[0,4],-1,327,520,2179,[408,74,50]],["S3",[0,3,4,7],[0,4],1,322,521,2180,[408,84,44]],["S3",[0,3,4,7],[0,7],-1,326,522,2181,[390,84,50]],["S3",[0,3,4,7],[0,7],1,324,523,2182,[390,74,44]],["S3",[0,3,4,7],[3,4],-1,328,524,2183,[408,74,44]],["S3",[0,3,4,7],[3,4],1,78,525,2184,[408,84,50]],["S3",[0,3,4,7],[3,7],-1,332,526,2185,[390,84,44]],["S3",[0,3,4,7],[3,7],1,334,527,2186,[390,74,50]],["S3",[0,3,4,7],[4,7],-1,74,528,2187,[426,74,30]],["S3",[0,3,4,7],[4,7],1,335,529,2188,[460,44,30]],["S3",[0,3,5,6],[0,3],-1,347,530,2193,[362,234,30]],["S3",[0,3,5,6],[0,3],1,113,531,2194,[266,138,30]],["S3",[0,3,5,6],[0,5],-1,343,532,2195,[276,138,126]],["S3",[0,3,5,6],[0,5],1,338,533,2196,[266,148,126]],["S3",[0,3,5,6],[0,6],-1,342,534,2197,[266,138,96]],["S3",[0,3,5,6],[0,6],1,340,535,2198,[276,148,96]],["S3",[0,3,5,6],[3,5],-1,344,536,2199,[276,138,96]],["S3",[0,3,5,6],[3,5],1,118,537,2200,[266,148,96]],["S3",[0,3,5,6],[3,6],-1,348,538,2201,[266,138,126]],["S3",[0,3,5,6],[3,6],1,350,539,2202,[276,148,126]],["S3",[0,3,5,6],[5,6],-1,114,540,2203,[266,234,30]],["S3",[0,3,5,6],[5,6],1,351,541,2204,[362,138,30]],["S3",[1,2,4,7],[1,2],-1,363,542,2209,[390,109,30]],["S3",[1,2,4,7],[1,2],1,9,543,2210,[390,19,13]],["S3",[1,2,4,7],[1,4],-1,359,544,2211,[395,109,19]],["S3",[1,2,4,7],[1,4],1,354,545,2212,[405,115,13]],["S3",[1,2,4,7],[1,7],-1,358,546,2213,[390,96,19]],["S3",[1,2,4,7],[1,7],1,356,547,2214,[390,96,13]],["S3",[1,2,4,7],[2,4],-1,360,548,2215,[395,96,19]],["S3",[1,2,4,7],[2,4],1,14,549,2216,[405,96,13]],["S3",[1,2,4,7],[2,7],-1,364,550,2217,[390,109,19]],["S3",[1,2,4,7],[2,7],1,366,551,2218,[390,115,13]],["S3",[1,2,4,7],[4,7],-1,10,552,2219,[395,109,30]],["S3",[1,2,4,7],[4,7],1,367,553,2220,[486,19,13]],["S3",[1,2,5,6],[1,2],-1,379,554,2225,[301,173,30]],["S3",[1,2,5,6],[1,2],1,49,555,2226,[331,203,30]],["S3",[1,2,5,6],[1,5],-1,375,556,2227,[307,173,120]],["S3",[1,2,5,6],[1,5],1,370,557,2228,[301,179,120]],["S3",[1,2,5,6],[1,6],-1,374,558,2229,[301,173,102]],["S3",[1,2,5,6],[1,6],1,372,559,2230,[307,179,102]],["S3",[1,2,5,6],[2,5],-1,376,560,2231,[301,179,102]],["S3",[1,2,5,6],[2,5],1,54,561,2232,[307,173,102]],["S3",[1,2,5,6],[2,6],-1,380,562,2233,[307,179,120]],["S3",[1,2,5,6],[2,6],1,382,563,2234,[301,173,120]],["S3",[1,2,5,6],[5,6],-1,50,564,2235,[301,203,30]],["S3",[1,2,5,6],[5,6],1,383,565,2236,[331,173,30]],["S3",[1,3,4,6],[1,3],-1,395,566,2241,[390,37,24]],["S3",[1,3,4,6],[1,3],1,81,567,2242,[390,67,24]],["S3",[1,3,4,6],[1,4],-1,391,568,2243,[414,67,61]],["S3",[1,3,4,6],[1,4],1,386,569,2244,[414,91,37]],["S3",[1,3,4,6],[1,6],-1,390,570,2245,[390,91,61]],["S3",[1,3,4,6],[1,6],1,388,571,2246,[390,67,37]],["S3",[1,3,4,6],[3,4],-1,392,572,2247,[414,67,37]],["S3",[1,3,4,6],[3,4],1,86,573,2248,[414,91,61]],["S3",[1,3,4,6],[3,6],-1,396,574,2249,[390,91,37]],["S3",[1,3,4,6],[3,6],1,398,575,2250,[390,67,61]],["S3",[1,3,4,6],[4,6],-1,82,576,2251,[419,67,24]],["S3",[1,3,4,6],[4,6],1,399,577,2252,[453,37,24]],["S3",[1,3,5,7],[1,3],-1,411,578,2257,[355,227,24]],["S3",[1,3,5,7],[1,3],1,105,579,2258,[259,131,24]],["S3",[1,3,5,7],[1,5],-1,407,580,2259,[283,131,120]],["S3",[1,3,5,7],[1,5],1,402,581,2260,[259,155,120]],["S3",[1,3,5,7],[1,7],-1,406,582,2261,[259,131,96]],["S3",[1,3,5,7],[1,7],1,404,583,2262,[283,155,96]],["S3",[1,3,5,7],[3,5],-1,408,584,2263,[283,131,96]],["S3",[1,3,5,7],[3,5],1,110,585,2264,[259,155,96]],["S3",[1,3,5,7],[3,7],-1,412,586,2265,[259,131,120]],["S3",[1,3,5,7],[3,7],1,414,587,2266,[283,155,120]],["S3",[1,3,5,7],[5,7],-1,106,588,2267,[259,227,24]],["S3",[1,3,5,7],[5,7],1,415,589,2268,[355,131,24]],["S3",[2,3,4,5],[2,3],1,97,590,2271,[265,137,6]],["S3",[2,3,4,5],[2,4],-1,423,591,2272,[271,143,96]],["S3",[2,3,4,5],[2,4],1,418,592,2273,[265,137,96]],["S3",[2,3,4,5],[2,5],-1,422,593,2274,[271,137,102]],["S3",[2,3,4,5],[2,5],1,420,594,2275,[265,143,102]],["S3",[2,3,4,5],[3,4],-1,424,595,2276,[271,143,102]],["S3",[2,3,4,5],[3,4],1,102,596,2277,[265,137,102]],["S3",[2,3,4,5],[3,5],-1,428,597,2278,[271,137,96]],["S3",[2,3,4,5],[3,5],1,430,598,2279,[265,143,96]],["S3",[2,3,4,5],[4,5],1,431,599,2280,[265,233,6]],["S3",[2,3,6,7],[2,3],1,89,600,2283,[408,73,6]],["S3",[2,3,6,7],[2,6],-1,439,601,2284,[408,79,55]],["S3",[2,3,6,7],[2,6],1,434,602,2285,[408,73,49]],["S3",[2,3,6,7],[2,7],-1,438,603,2286,[414,79,49]],["S3",[2,3,6,7],[2,7],1,436,604,2287,[414,73,55]],["S3",[2,3,6,7],[3,6],-1,440,605,2288,[408,79,49]],["S3",[2,3,6,7],[3,6],1,94,606,2289,[408,73,55]],["S3",[2,3,6,7],[3,7],-1,444,607,2290,[414,79,55]],["S3",[2,3,6,7],[3,7],1,446,608,2291,[414,73,49]],["S3",[2,3,6,7],[6,7],1,447,609,2292,[425,73,6]],["S3",[4,5,6,7],[4,5],1,57,610,2295,[289,185,6]],["S3",[4,5,6,7],[4,6],-1,455,611,2296,[295,167,24]],["S3",[4,5,6,7],[4,6],1,450,612,2297,[289,161,24]],["S3",[4,5,6,7],[4,7],-1,454,613,2298,[289,161,30]],["S3",[4,5,6,7],[4,7],1,452,614,2299,[295,167,30]],["S3",[4,5,6,7],[5,6],-1,456,615,2300,[295,161,30]],["S3",[4,5,6,7],[5,6],1,62,616,2301,[289,167,30]],["S3",[4,5,6,7],[5,7],-1,460,617,2302,[289,167,24]],["S3",[4,5,6,7],[5,7],1,462,618,2303,[295,161,24]],["S3",[4,5,6,7],[6,7],1,463,619,2304,[313,185,6]],["S4",[[0,1,2,3],[0,2],-1],8,299,620,2505,[290,162,98,24,6]],["S4",[[0,1,2,3],[0,2],1],9,17,621,2506,[320,192,24,4,2]],["S4",[[0,1,2,3],[0,3],-1],10,331,622,2507,[320,192,42,24,6]],["S4",[[0,1,2,3],[0,3],1],11,73,623,2508,[266,138,74,24,6]],["S4",[[0,1,2,3],[1,2],-1],11,363,624,2509,[299,171,107,24,6]],["S4",[[0,1,2,3],[1,2],1],10,9,625,2510,[320,192,19,11,6]],["S4",[[0,1,2,3],[1,3],-1],9,395,626,2511,[320,192,35,24,6]],["S4",[[0,1,2,3],[1,3],1],8,81,627,2512,[259,131,67,24,6]],["S4",[[0,1,4,5],[0,4],-1],20,295,628,2513,[386,74,40,26,6]],["S4",[[0,1,4,5],[0,4],1],21,290,629,2514,[408,80,40,4,2]],["S4",[[0,1,4,5],[0,5],-1],22,311,630,2515,[274,138,80,40,6]],["S4",[[0,1,4,5],[0,5],1],23,306,631,2516,[266,146,80,40,6]],["S4",[[0,1,4,5],[1,4],-1],23,359,632,2517,[395,67,40,19,6]],["S4",[[0,1,4,5],[1,4],1],22,354,633,2518,[403,80,35,11,6]],["S4",[[0,1,4,5],[1,5],-1],21,375,634,2519,[283,131,80,40,6]],["S4",[[0,1,4,5],[1,5],1],20,370,635,2520,[259,155,80,40,6]],["S4",[[0,1,6,7],[0,6],-1],32,294,636,2521,[266,138,96,26,6]],["S4",[[0,1,6,7],[0,6],1],33,292,637,2522,[272,144,96,4,2]],["S4",[[0,1,6,7],[0,7],-1],34,310,638,2523,[272,144,82,50,6]],["S4",[[0,1,6,7],[0,7],1],35,308,639,2524,[272,144,74,42,6]],["S4",[[0,1,6,7],[1,6],-1],35,374,640,2525,[272,144,91,59,6]],["S4",[[0,1,6,7],[1,6],1],34,372,641,2526,[272,144,67,35,6]],["S4",[[0,1,6,7],[1,7],-1],33,358,642,2527,[259,131,96,19,6]],["S4",[[0,1,6,7],[1,7],1],32,356,643,2528,[272,144,96,11,6]],["S4",[[0,2,4,6],[0,4],-1],44,263,644,2529,[260,132,74,42,24]],["S4",[[0,2,4,6],[0,4],1],45,258,645,2530,[260,132,76,44,24]],["S4",[[0,2,4,6],[0,6],-1],46,279,646,2531,[260,132,96,22,14]],["S4",[[0,2,4,6],[0,6],1],47,274,647,2532,[260,132,96,16,8]],["S4",[[0,2,4,6],[2,4],-1],47,360,648,2533,[260,132,96,19,11]],["S4",[[0,2,4,6],[2,4],1],46,14,649,2534,[260,132,96,21,13]],["S4",[[0,2,4,6],[2,6],-1],45,380,650,2535,[260,132,79,47,24]],["S4",[[0,2,4,6],[2,6],1],44,382,651,2536,[260,132,73,41,24]],["S4",[[0,2,5,7],[0,5],-1],56,262,652,2537,[268,138,68,34,24]],["S4",[[0,2,5,7],[0,5],1],57,260,653,2538,[266,140,68,34,24]],["S4",[[0,2,5,7],[0,7],-1],58,278,654,2539,[390,68,34,16,8]],["S4",[[0,2,5,7],[0,7],1],59,276,655,2540,[390,68,34,22,14]],["S4",[[0,2,5,7],[2,5],-1],59,376,656,2541,[271,137,68,34,24]],["S4",[[0,2,5,7],[2,5],1],58,54,657,2542,[265,143,68,34,24]],["S4",[[0,2,5,7],[2,7],-1],57,364,658,2543,[390,68,34,19,11]],["S4",[[0,2,5,7],[2,7],1],56,366,659,2544,[390,68,34,21,13]],["S4",[[0,3,4,7],[0,4],-1],68,475,660,2545,[298,170,98,26,4]],["S4",[[0,3,4,7],[0,4],1],69,476,661,2546,[296,168,100,28,2]],["S4",[[0,3,4,7],[0,7],-1],70,487,662,2547,[290,162,102,22,8]],["S4",[[0,3,4,7],[0,7],1],71,488,663,2548,[292,164,102,16,14]],["S4",[[0,3,4,7],[3,4],-1],71,392,664,2549,[271,143,67,37,30]],["S4",[[0,3,4,7],[3,4],1],70,86,665,2550,[265,137,69,35,30]],["S4",[[0,3,4,7],[3,7],-1],69,412,666,2551,[259,131,79,41,30]],["S4",[[0,3,4,7],[3,7],1],68,414,667,2552,[261,133,73,47,30]],["S4",[[0,3,5,6],[0,5],-1],80,477,668,2553,[292,162,96,20,10]],["S4",[[0,3,5,6],[0,5],1],81,478,669,2554,[290,164,96,20,10]],["S4",[[0,3,5,6],[0,6],-1],82,485,670,2555,[386,96,16,10,4]],["S4",[[0,3,5,6],[0,6],1],83,486,671,2556,[388,96,20,8,2]],["S4",[[0,3,5,6],[3,5],-1],83,408,672,2557,[261,131,96,20,10]],["S4",[[0,3,5,6],[3,5],1],82,110,673,2558,[259,133,96,20,10]],["S4",[[0,3,5,6],[3,6],-1],81,396,674,2559,[390,69,37,20,10]],["S4",[[0,3,5,6],[3,6],1],80,398,675,2560,[390,67,35,20,10]],["S4",[[1,2,4,7],[1,4],-1],92,264,676,2561,[267,139,67,35,30]],["S4",[[1,2,4,7],[1,4],1],93,38,677,2562,[267,139,69,37,30]],["S4",[[1,2,4,7],[1,7],-1],94,284,678,2563,[259,131,96,22,8]],["S4",[[1,2,4,7],[1,7],1],95,286,679,2564,[261,133,96,16,14]],["S4",[[1,2,4,7],[2,4],-1],95,296,680,2565,[267,139,96,26,4]],["S4",[[1,2,4,7],[2,4],1],94,22,681,2566,[265,137,96,28,2]],["S4",[[1,2,4,7],[2,7],-1],93,316,682,2567,[267,139,79,47,30]],["S4",[[1,2,4,7],[2,7],1],92,318,683,2568,[267,139,73,41,30]],["S4",[[1,2,5,6],[1,5],-1],104,268,684,2569,[261,131,75,45,30]],["S4",[[1,2,5,6],[1,5],1],105,270,685,2570,[259,133,75,45,30]],["S4",[[1,2,5,6],[1,6],-1],106,280,686,2571,[390,69,35,16,14]],["S4",[[1,2,5,6],[1,6],1],107,30,687,2572,[390,67,37,22,8]],["S4",[[1,2,5,6],[2,5],-1],107,312,688,2573,[271,137,75,45,30]],["S4",[[1,2,5,6],[2,5],1],106,46,689,2574,[265,143,75,45,30]],["S4",[[1,2,5,6],[2,6],-1],105,300,690,2575,[386,75,41,26,4]],["S4",[[1,2,5,6],[2,6],1],104,302,691,2576,[388,73,45,28,2]],["S4",[[1,3,4,6],[1,4],-1],116,479,692,2577,[291,163,102,19,11]],["S4",[[1,3,4,6],[1,4],1],117,480,693,2578,[291,163,102,21,13]],["S4",[[1,3,4,6],[1,6],-1],118,489,694,2579,[291,163,102,22,14]],["S4",[[1,3,4,6],[1,6],1],119,490,695,2580,[291,163,102,16,8]],["S4",[[1,3,4,6],[3,4],-1],119,328,696,2581,[271,143,74,44,24]],["S4",[[1,3,4,6],[3,4],1],118,78,697,2582,[265,137,76,42,24]],["S4",[[1,3,4,6],[3,6],-1],117,348,698,2583,[266,138,79,41,24]],["S4",[[1,3,4,6],[3,6],1],116,350,699,2584,[268,140,73,47,24]],["S4",[[1,3,5,7],[1,5],-1],128,481,700,2585,[296,173,96,24,3]],["S4",[[1,3,5,7],[1,5],1],129,482,701,2586,[301,168,96,24,3]],["S4",[[1,3,5,7],[1,7],-1],130,491,702,2587,[389,96,16,8,3]],["S4",[[1,3,5,7],[1,7],1],131,492,703,2588,[389,96,21,13,3]],["S4",[[1,3,5,7],[3,5],-1],131,344,704,2589,[268,137,96,24,3]],["S4",[[1,3,5,7],[3,5],1],130,118,705,2590,[265,140,96,24,3]],["S4",[[1,3,5,7],[3,7],-1],129,332,706,2591,[389,76,44,24,3]],["S4",[[1,3,5,7],[3,7],1],128,334,707,2592,[389,73,41,24,3]],["S4",[[2,3,4,5],[2,4],-1],140,500,708,2593,[386,96,19,9,6]],["S4",[[2,3,4,5],[2,4],1],141,501,709,2594,[401,96,9,4,2]],["S4",[[2,3,4,5],[2,5],-1],142,512,710,2595,[290,179,96,9,6]],["S4",[[2,3,4,5],[2,5],1],143,513,711,2596,[307,162,96,9,6]],["S4",[[2,3,4,5],[3,4],-1],143,524,712,2597,[401,67,35,9,6]],["S4",[[2,3,4,5],[3,4],1],142,525,713,2598,[401,82,50,9,6]],["S4",[[2,3,4,5],[3,5],-1],141,536,714,2599,[274,131,96,9,6]],["S4",[[2,3,4,5],[3,5],1],140,537,715,2600,[259,146,96,9,6]],["S4",[[2,3,6,7],[2,6],-1],152,502,716,2601,[297,169,98,26,6]],["S4",[[2,3,6,7],[2,6],1],153,503,717,2602,[297,169,120,4,2]],["S4",[[2,3,6,7],[2,7],-1],154,514,718,2603,[297,169,107,19,6]],["S4",[[2,3,6,7],[2,7],1],155,515,719,2604,[290,162,115,11,6]],["S4",[[2,3,6,7],[3,6],-1],155,538,720,2605,[266,138,91,35,6]],["S4",[[2,3,6,7],[3,6],1],154,539,721,2606,[274,146,67,59,6]],["S4",[[2,3,6,7],[3,7],-1],153,526,722,2607,[259,131,82,42,6]],["S4",[[2,3,6,7],[3,7],1],152,527,723,2608,[283,155,74,50,6]],["S4",[[4,5,6,7],[4,6],-1],164,504,724,2609,[386,67,33,24,6]],["S4",[[4,5,6,7],[4,6],1],165,505,725,2610,[449,33,24,4,2]],["S4",[[4,5,6,7],[4,7],-1],166,528,726,2611,[395,74,33,24,6]],["S4",[[4,5,6,7],[4,7],1],167,529,727,2612,[449,33,19,11,6]],["S4",[[4,5,6,7],[5,6],-1],167,540,728,2613,[266,203,33,24,6]],["S4",[[4,5,6,7],[5,6],1],166,541,729,2614,[331,138,33,24,6]],["S4",[[4,5,6,7],[5,7],-1],165,516,730,2615,[259,194,33,24,6]],["S4",[[4,5,6,7],[5,7],1],164,517,731,2616,[322,131,33,24,6]]],"note":"derived record from B82 c82.py (rebuilt #656 word); fields rec: S3=[kind,block,key,coef,a,b,seq,frame]; S4 without the coef field"} \ No newline at end of file diff --git a/research/format-limits-2/s7-9-centre-fragmentation/inputs/pr656-FULL-WORD.json.gz b/research/format-limits-2/s7-9-centre-fragmentation/inputs/pr656-FULL-WORD.json.gz new file mode 100644 index 0000000000..447d45d08b Binary files /dev/null and b/research/format-limits-2/s7-9-centre-fragmentation/inputs/pr656-FULL-WORD.json.gz differ diff --git a/research/format-limits-2/s7-9-centre-fragmentation/inputs/pr656-k492audit-pr622-ck-CANONICAL-WORD.json.gz b/research/format-limits-2/s7-9-centre-fragmentation/inputs/pr656-k492audit-pr622-ck-CANONICAL-WORD.json.gz new file mode 100644 index 0000000000..58cd1be8f2 Binary files /dev/null and b/research/format-limits-2/s7-9-centre-fragmentation/inputs/pr656-k492audit-pr622-ck-CANONICAL-WORD.json.gz differ diff --git a/research/format-limits-2/s7-9-centre-fragmentation/inputs/pr656-k492audit-pr622-jp8-CANONICAL-WORD.json.gz b/research/format-limits-2/s7-9-centre-fragmentation/inputs/pr656-k492audit-pr622-jp8-CANONICAL-WORD.json.gz new file mode 100644 index 0000000000..7fd7cd1fef Binary files /dev/null and b/research/format-limits-2/s7-9-centre-fragmentation/inputs/pr656-k492audit-pr622-jp8-CANONICAL-WORD.json.gz differ diff --git a/research/format-limits-2/s7-9-centre-fragmentation/verify.part.sh b/research/format-limits-2/s7-9-centre-fragmentation/verify.part.sh new file mode 100755 index 0000000000..ca4f1fa95f --- /dev/null +++ b/research/format-limits-2/s7-9-centre-fragmentation/verify.part.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +# Bundle D (sections 7-9: rows Y1-Y2, F1-F3, O1-O2). Run from anywhere; prints one PASS/FAIL line per assertion. +# Needs python3 >= 3.11 with numpy and scipy. Runtime about 15 s. +set -uo pipefail +HERE=$(cd "$(dirname "$0")" && pwd); PY="${PYTHON:-python3}"; st=0 +export PYTHONDONTWRITEBYTECODE=1 +echo "== D.1 checks" +for c in y1_centre_cut o1_faces f1_frag f1_pack f1_s3s4 f1_carriers f6_log; do + echo "-- $c"; ( cd "$HERE/checks" && "$PY" -B "$c.py" ) || st=1 +done +[ $st = 0 ] && echo "D: all PASS" || echo "D: FAILURES" +exit $st diff --git a/research/format-limits-2/scripts/provenance.py b/research/format-limits-2/scripts/provenance.py new file mode 100644 index 0000000000..35ef5e6727 --- /dev/null +++ b/research/format-limits-2/scripts/provenance.py @@ -0,0 +1,51 @@ +"""Step 0 of verify.sh (standard library only). Prints one PASS/FAIL line per group and exits 1 on any mismatch. + 0.manifest every file of the package matches MANIFEST.sha256 (sha256), none is missing and none is extra + 0.sources every entry of SOURCES.json matches its pin: sha256 of the stored file; for PR copies also the git blob id of + the source file (of the decompressed content for a gzip copy of a non-gz source); for rebuilt words also the + sha256 of the canonical JSON where the PR publishes one +usage: python3 provenance.py [--write-manifest] (--write-manifest is for the authors: it rewrites MANIFEST.sha256)""" +import gzip, hashlib, json, os, sys +PKG = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +bad = 0 +def sha(b): return hashlib.sha256(b).hexdigest() +def blob(b): return hashlib.sha1(b'blob %d\0' % len(b) + b).hexdigest() +def listing(): + out = [] + for d, ds, fs in os.walk(PKG): + ds[:] = sorted(x for x in ds if x != '__pycache__') + for f in fs: + if f.endswith('.pyc'): continue + p = os.path.relpath(os.path.join(d, f), PKG) + if p != 'MANIFEST.sha256': out.append(p) + return sorted(out) +if '--write-manifest' in sys.argv: + with open(os.path.join(PKG, 'MANIFEST.sha256'), 'w') as h: + for p in listing(): h.write('%s %s\n' % (sha(open(os.path.join(PKG, p), 'rb').read()), p)) + print('wrote MANIFEST.sha256 (%d files)' % len(listing())); sys.exit(0) +# 0.manifest +want = {} +for l in open(os.path.join(PKG, 'MANIFEST.sha256'), encoding='utf-8'): + h, p = l.rstrip('\n').split(' ', 1); want[p] = h +have = listing(); n = 0 +for p in sorted(set(want) | set(have)): + f = os.path.join(PKG, p) + if p not in want: print('FAIL 0.manifest extra file not in MANIFEST: ' + p); bad += 1 + elif not os.path.isfile(f): print('FAIL 0.manifest missing file: ' + p); bad += 1 + elif sha(open(f, 'rb').read()) != want[p]: print('FAIL 0.manifest hash differs: ' + p); bad += 1 + else: n += 1 +print('%s 0.manifest %d files match MANIFEST.sha256' % ('PASS' if not bad else 'FAIL', n), flush=True) +# 0.sources +S = json.load(open(os.path.join(PKG, 'SOURCES.json'))); b0 = bad; k = 0 +for sect in ('files', 'derived', 'evidence'): + for e in S[sect]: + k += 1; f = os.path.join(PKG, e['file']) + if not os.path.isfile(f): print('FAIL 0.sources missing ' + e['file']); bad += 1; continue + raw = open(f, 'rb').read(); ok = sha(raw) == e['sha256'] + src = gzip.decompress(raw) if e['file'].endswith('.gz') and not e.get('source_path', '').endswith('.gz') else raw + if 'blob' in e: ok = ok and blob(src) == e['blob'] + if 'content_sha256' in e: + c = hashlib.sha256(json.dumps(json.loads(src), sort_keys=True, separators=(',', ':')).encode()).hexdigest() + ok = ok and c == e['content_sha256'] + if not ok: print('FAIL 0.sources pin differs: ' + e['file']); bad += 1 +print('%s 0.sources %d pinned files match SOURCES.json (blob ids / sha256 / content sha256)' % ('PASS' if bad == b0 else 'FAIL', k), flush=True) +sys.exit(1 if bad else 0) diff --git a/research/format-limits-2/verify.sh b/research/format-limits-2/verify.sh new file mode 100644 index 0000000000..2f8efe5aa3 --- /dev/null +++ b/research/format-limits-2/verify.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +# One-command verification of research/format-limits-2 (no kappa claim): the erratum to #595 and the invoice calculus (sections 1-2), +# the censuses and cold-end gauges of the #656 word (3-4), the decoder floors and the spec/verifier requirements (5-6) and the centre +# barrier, fragmentation and ledger rows (7-9). Step 0 checks the package against MANIFEST.sha256 and every vendored input against its +# pin in SOURCES.json (git blob ids / sha256) and stops hard on any mismatch; then each section group's checks run and print one PASS/FAIL +# line per assertion. Exit status 0 only if every assertion passes. +# usage: bash verify.sh [/fresh/output/dir] (inside a checkout or `git archive` of the repository; nothing outside the package is read) +# needs python3 >= 3.11 with numpy, scipy and sympy (requirements.txt) for sections 5-9; set PYTHON to choose the interpreter. +# Sections 1-4 use the standard library only; a C++ compiler is used by E2 if present (otherwise E2 compares the shipped output). +# About 1 minute wall on 4 cores (the four groups run at once). +set -uo pipefail +HERE=$(cd "$(dirname "$0")" && pwd) +OUT=${1:-$(mktemp -d "${TMPDIR:-/tmp}/format-limits-2.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 PYTHON="$PY" 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 +echo "== 1-9. checks [$((SECONDS - T0))s]" +G="s1-2-erratum-invoice s3-4-census-gauges s5-6-decoders-spec s7-9-centre-fragmentation" +for g in $G; do + mkdir -p "$OUT/$g" + ( PKG="$HERE/$g" OUT="$OUT/$g" bash "$HERE/$g/verify.part.sh" "$OUT/$g" > "$OUT/$g.log" 2>&1; echo $? > "$OUT/$g.rc" ) & +done +wait +status=0; npass=0; nfail=0 +for g in $G; do + echo "== $g" + sed 's/^/ /' "$OUT/$g.log" + p=$(grep -c '^ *PASS' "$OUT/$g.log"); f=$(grep -c '^ *FAIL' "$OUT/$g.log") + 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