diff --git a/research/a2-family-decoder-floors/LICENSE b/research/a2-family-decoder-floors/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/a2-family-decoder-floors/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/a2-family-decoder-floors/MANIFEST.sha256 b/research/a2-family-decoder-floors/MANIFEST.sha256 new file mode 100644 index 0000000000..5c644bf6ad --- /dev/null +++ b/research/a2-family-decoder-floors/MANIFEST.sha256 @@ -0,0 +1,97 @@ +c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4 LICENSE +0c65859a122e54f5705bd7a8888956532118409415fb9e822e93f8d1a91a613a NOTICE.md +084cccb166de485a47ba5d1d950215410aa585969975d4c4514ea7a42fb1704a README.md +2ccd8ec8ae900e556ffe2479429dad81ff0bac25d6fdf45684713d0619599e3d SOURCES.json +e5841760a67cdb773265f5a5c262abab3f63c78d05a6206f65a0b4839f7cb986 checks/a2cert.py +ea8a8993846d536a34f26e87d23d140b5cdebb82ec1fb839a5fa627ff466d1c0 checks/a2cls.py +48e1d504264d49f1ff512559ef7b1a26b09794afccfd93f3c63b8a1f22b4ffda checks/a2fam.py +a983007b7fe2c0350f5ed1600063dd051ce09f4b95e1dcb215f315e97f28bc9b checks/a2lib.py +e052cbbadfd7418cd2240fa174eb78044dc5f8b6eb1fc9632e287a2721961df5 checks/census_facts.py +3a63e37e44858da37541de7b3e627f85aa1dbc966e376fdce116268fcc2b2c54 checks/cert2.py +031c35a05f18b936a2ae38eafbcac5aa5afc247ae4cacc59179ebe1d53d3c2ba checks/common2.py +578dd42d735f20b2d27cc95d17a2bbbc35e7f406d21f00ca3bddae6909d1d802 checks/exact_opt.py +801aaa33a4fdc7bda0656979a79f67695b12479b51b888dff75b1ee170a50033 checks/floors.py +e2819749b30aa5073560c1f4b46cca13b06ec36feb1d0d7379a29fd9947076c8 checks/frames.py +d4027cd040c3715337c82835132f0dcefdd0ae04ccfdd87d713e89cc710ec406 checks/frames_data.py +1323c754e01b0ed9ce135b420462f5c9529e22423ab3ac2cae7361438dfd4f7c checks/iib.py +6a4b0f79805b3be9966bcdb464243b564737de5b9f325627c5d5daf15fdf7033 checks/iib_check.py +9d9516c356fab49a8d1e11a196df0f913213e8a71abbe37de170b3392331f5f2 checks/inputs_check.py +a1b1520f1eef030933260974a44bafc1315cca78ec0a3d0793cd9e1d6c049ca4 checks/lib.py +1808dc520887f7827c23976eddaf9fc01bb01a8ddd454a5015d0831f8491c34b checks/lib2.py +98187a01ad097abcc3b7df12abece08bcfb8a906146a2a2878b9fa128745fbf0 checks/log_counts.py +012739ff3dc3421c187ca089b361c0b1d49f808908a5a7efdb0603c20f08ca71 checks/manifest_check.py +2f18eca6bb3139adb7e69606c0cbd96cfa6d7839aa600f4e09b16253be0d410b checks/mergedkill.py +c77e3615c6c200c2b0a86e51e6350627a994811b86edb24ca3ef68a559e2a910 checks/modrank.py +d5cf701bb2917510a5d4ffa7a3ff97ba108185a1e3b69186faf25b9dbd430c98 checks/opt3u.py +2ca14267c44badcd420e996d059b3e463c071e618f14f4adfb07a4e201d1ea4c checks/orbits.py +d852b98d9c25319fae7e965ac943690fecea29869394a654b9cd9ac43d5220ce checks/orbits104.py +d4d248d38e2b4d37337b76362e1e23f5d6667e6c9c1be2e429b2c97a445ad090 checks/pairtable.py +46e2ae37b4de98840a39e5484f33402d853d4a0b0b02b7329a7a4e3d733ff6c6 checks/setup9.py +1483af9e44a1e3e57dedb91d51e583cee30a4bf9555a5be19fba57fc94026b50 checks/spans.py +b4557c11cde48eae858cf8627b13d4c52128deafb3ee77105d95e0ae44006841 checks/tie_check.py +3b4778e3406765be0ffc8d3c615f18095b57581650fee88f0cb4372ba74749e7 checks/unitcensus.py +094540dbc26f53e204d93250c360f7b7a0edd0ad13545d5a4c7b6491a3effd17 checks/units_check.py +471c3c68b1ca65e38e05125e3a329dde0cf01a44f5af86fd84eec75e534421f1 data/p104_frames.json +a858a041d19ca31db35c3e5515596e94d9cc3b07fa8d6d5b82196de7946b5eba data/tie_E8.json +df0710817de0238a02bcb65db3c2a372e6982154de003de637e859a0100c40f0 data/tie_P112.json +315ddf8d611ee66715dfb2947cf32692bacf134e4d4fb940532f70ab69c14d2d evidence/hunt-a2-scripts/cegar.py +06596c12d7bf10fd44e21dfeda754a6185d42d1a92a92f2aae9504325e436ab2 evidence/hunt-a2-scripts/ilp9.py +1f112f980fc14b47f442b869b804aa2735bdbfb79835f4e80a2f537bc2d59f5a evidence/hunt-a2-scripts/point.py +db9f5cef462ecbc78c0b5a09b8b5b7b3ed25ef93656d3814145229884d6c13f5 evidence/hunt-a2-scripts/refree.py +8cee4102230dc6d8092fac4c5596ec68755185154c02408eb60e3819306ffb26 evidence/hunt-a2-scripts/rowjump.py +937f43e9b15987abfa3fbee322b463ebe0635e0f9bbe40fe491ee112981e32a3 evidence/hunt-a2-scripts/specall.py +48c425e13c376c8b600f2c304e5e63cb81307e691fc6d6cb12a9e46afd6ae54b evidence/hunt-a2-scripts/sympm2.py +cf963c58664c82021f176c75b16ebba974edd0316dbd9b27ba34df4b0a3e1f83 evidence/hunt-a2-scripts/zexcl.py +88ab80a074809feab20194e5a55744afcf47519f7f44cd6800d567f0cd7bb612 evidence/logs/census/uc104_0_3_22.log.txt +dfe551c58b835398346e9b71baac3563f0dc41e35c9709ac67ff639d5496138a evidence/logs/census/uc104_0_5_24.log.txt +3cae260beb8a57814f12e4c318a147dfa31aa4668efba9ca548922fba8e307b9 evidence/logs/census/uc104_0_60_103.log.txt +d594be0c6547db9cf5f65ca6d75ff9a9cf1d84f8af49173ecc6964efaf00e20d evidence/logs/census/uc104_0_61_102.log.txt +6b18cca610dc8a8d0b8be40c70ee30eef914e3165df44f337c32f87e2cec3a4a evidence/logs/census/uc104_1_3_31.log.txt +482a385287e74b194de1234a634424b92be1719a05e1dc7132c4b23f17058405 evidence/logs/census/uc104_1_44_96.log.txt +8a3856647d2ac9edd9002946e50a9287a0335324b3fb3d222b3c735c5fe07224 evidence/logs/census/uc104_1_45_95.log.txt +1a10718bdaf3fab64c66d57226989c4cc242b3dc4e86b7ef3c9a675851946b10 evidence/logs/census/uc104_1_46_94.log.txt +e17532d5689a6fe07a7924e1b83046aa6c3d54f55d2adbd22f47eafbf616cd56 evidence/logs/census/uc104_1_47_93.log.txt +08cbbc49fbadfac79e8375dcff15eaf13c2b881f87287e3d0a1a5d4342c8e0e6 evidence/logs/census/uc104_1_49_92.log.txt +4ee7e030388b302102423264190aafd746af6016a7a949e3aed7728b78807c34 evidence/logs/census/uc104_1_50_91.log.txt +1071acad27929bae67a9fcb9d141aef6eee62dd0735f72de2a92bf6443f18500 evidence/logs/census/uc104_1_51_90.log.txt +8502a3f8622759012febf78a0768c839f2ef92ba3bd7b9c3d5aca80e3e961bfc evidence/logs/census/uc104_1_5_33.log.txt +ea4977f8af53606561c8e3f761e6219190a995897955161d59f49932ec8c2990 evidence/logs/census/uc104_5_44_101.log.txt +e36072857fe124bd935ffe9baba7a202750ddf2e2621d6a4437a78a095eec345 evidence/logs/census/uc104_5_45_100.log.txt +5d1f66444e395ee683f23e61c5f6b1e98e1b933a9cfe48ad3112e84e859c44b8 evidence/logs/census/uc104_5_48_97.log.txt +ee53093e489795838ff821910c7dd2ff076f6bb3d8256b6a83b25a60605c0f2f evidence/logs/census/uc104_5_53_93.log.txt +11daca0da65fbfaea91a2796928d5f146cfe3937aae2ec5635939dfa183abc07 evidence/logs/census/uc104_5_56_91.log.txt +8a50ae8cd9c7f1702c9c565b9944d31c79d6dfe31b9c2c605a2b5e1b92a6a4e6 evidence/logs/census/uc104_7_44_102.log.txt +951a2e80971419d9ea3a77c4a9d33d1fcb4d0c2ef5ec5906d4b0d9a8a2c5c0d4 evidence/logs/census/uc104_7_46_100.log.txt +bd2600e9a973ce115f418c181aa754ca3020c091a161475b884d82e5e0db84a8 evidence/logs/census/uc104_7_48_98.log.txt +758baa20727796338ac21aa67e4bfd2c25473c205f202741c3618980a81c39e2 evidence/logs/census/uc104_7_52_95.log.txt +e4d11cbcedf93811313ae0565de622e80d76b86ea1ea2d7c58e09f5c2fb5105d evidence/logs/census/uc104_7_54_93.log.txt +e374df440c644ffbc596885786005d029d68d9978a92dc516fd214bb3c55c745 evidence/logs/census/uc104_9_44_103.log.txt +3fb1f7fc615e5a51be580f62223c03408d619c65c692ae145c54e0e458035cea evidence/logs/census/uc104_9_47_100.log.txt +56d546c76681834ce00e46e90d6c8462d054b34ad6e2089cefb7a2d0342f886f evidence/logs/census/uc104_9_49_98.log.txt +2ab36f35327c7db843bf454d1b2356472474ac42cd844ed66402bbecc9cc3c54 evidence/logs/census/uc104_9_50_97.log.txt +1fb4228e2d51fe8f5224b7731394281153d773f20a478ef2263a9be7560390cd evidence/logs/census/uc104_9_53_95.log.txt +d68a08337fcbcb8cd7d09d2c05fb22ce2cb8b4e548d808f0a99368c34e2cecb1 evidence/logs/census/ucensus_E8.log.txt +88ab80a074809feab20194e5a55744afcf47519f7f44cd6800d567f0cd7bb612 evidence/logs/census/ucensus_P104.log.txt +206eb9143de7da20e2e7d148993ed0ba5ece1e26b6506c9cf51c3109ef682030 evidence/logs/census/ucensus_P112.log.txt +89de52e7bd1537d5a5dc737dfa6d8e80cf814257c2055c3574e203348d55802e evidence/logs/hunt-a2/E8_cegar2_gen.log.txt +d5d24608ab5a114e992dc19dd62eb3a514f2cc1ff3fc2b73eb8eba0c71b61145 evidence/logs/hunt-a2/E8_cegar72_gen.log.txt +165880b605e438f8158f78b5fd5cc35871b171eada2e744c5e6b102e383f5752 evidence/logs/hunt-a2/E8_cegar72_s2.log.txt +89de52e7bd1537d5a5dc737dfa6d8e80cf814257c2055c3574e203348d55802e evidence/logs/hunt-a2/E8_cegar_gen.log.txt +f0a5c0cb9b8b6cc8d449d7e2d74d16acfce1dc01c4b0c6564b3095cea7cafa2b evidence/logs/hunt-a2/E8_cegar_s2.log.txt +0cb510a5e44e9e2bc10c978a797de32726880f821359ee0da2d57081c1f2819f evidence/logs/hunt-a2/E8_cegar_s4.log.txt +a6a8757f5ee03184a055420483558b62901d9712a09ce0923452d9f7f2a3212a evidence/logs/hunt-a2/E8_cegar_s6.log.txt +2f92a6522c0fd280c3647f49660a637e635ad321477ec125e6cb98ba3cd9356e evidence/logs/hunt-a2/E8_specall.log.txt +bc6feca1d153eeec757e1e620bab97a0bcef2ba34dcbc4e27d9eda86564d1fa9 evidence/logs/hunt-a2/P104_specall.log.txt +3e41456af65a7ac37b19cbb66c333f1ed96603b89f6e8af416a26bc5c1173ff6 evidence/logs/hunt-a2/P112_cegar64_gen.log.txt +f7d43036555f03c34506f2b9806384733c92f0837edc17fb7893d9b655c8375f evidence/logs/hunt-a2/P112_cegar64_s2.log.txt +b1a72b1080ae1d2140290a30452c4e8898a7679ebe63c55ea7423b0831b98d23 evidence/logs/hunt-a2/P112_cegar_gen.log.txt +3a882044646c0d403bf222ca6f3021e8af8023622c99e27b12837e89602b5b9c evidence/logs/hunt-a2/P112_cegar_s10.log.txt +9dde3396463e3303f164f5736107f0e5c90364a51592da4412af59bc4a50117e evidence/logs/hunt-a2/P112_cegar_s2.log.txt +3b33591f230e5ed9456b9a04711a7b248d5a438f43853fbe722f562862af1642 evidence/logs/hunt-a2/P112_cegar_s8.log.txt +ed3e32449be81329cfeacdaf5a424bdd97da0064c3240b19dcc87ea92fde10c1 evidence/logs/hunt-a2/P112_opt_gen.log.txt +95ab1963bebc88d174e63079e3f1a0572d92183e58f74799787b084012dcfccb evidence/logs/hunt-a2/P112_opt_s10.log.txt +b6648f8c4dbac603288722ff7d524e6a0d0eea6e4a14662571e0cbcfc2833d11 evidence/logs/hunt-a2/P112_opt_s2.log.txt +a949265d006a0474c398d77b38fe08de131c3db079798d17c4a35714fdd0a3b6 evidence/logs/hunt-a2/P112_opt_s8.log.txt +4d7ea64e129b8683ca2c78ba441cb172704479da1fb913e66b982d7191a9b410 evidence/logs/hunt-a2/P112_specall.log.txt +ca71e7daa2f185a5de4cd49f313528428b34ea45e7023812844df2bee7969781 requirements.txt +0994714e1622f25e49bbb4d6eaa1f7583be0c436fdc4019ef2e7e3280fa015ae verify.sh diff --git a/research/a2-family-decoder-floors/NOTICE.md b/research/a2-family-decoder-floors/NOTICE.md new file mode 100644 index 0000000000..847aeb2a92 --- /dev/null +++ b/research/a2-family-decoder-floors/NOTICE.md @@ -0,0 +1,19 @@ +# Notice + +Prepared by DreamingOfClouds with Claude Opus 5.5 (Anthropic), via Claude Code; Apache-2.0 (`LICENSE`, copied from the repository root). + +## Credits + +- This package extends the author's #2338 (*Decoder floors are tight in the frontier format*, open) and its sibling #2724 (case (b)): it works on part of the `m = 9` case (c) of #2338's trichotomy, a single explicit family of rank-9 realisations. + The model, notation and the results it uses (the dense `F2^9` label table, Theorem P, the exact rank formula, the reductions) are #2338's, which build on #2277 and #2639 (the author's own) and on the merged swarm work cited below. +- **Cited from their PR statements, not re-derived:** **#1212** (burntout76) and its extensions **#1389, #1399, #1419, #1425, #1616** (JosieElliston): rank-8 gauge rigidity (used only to state Lemma E); **#968**: the P104 unit and the 8-term floor; + **#1224** (joaqcoo), **#1180** (woklerx), **#1320** (Hope7Happiness), **Discussion 1267** (philippeVV): the nine-term one-sided and co-star decoders (context for case (c); **not covered** here). + **#2321, #2385, #2398, #2515** (other authors) treat one fixed rank-9 P112 completion under a COPY-power cost; not the A2 family. +- Tools: Python (standard library), `numpy`, `networkx`. No SAT solver, no CP-SAT in `verify.sh`. +- No file is copied from another contributor. `checks/lib.py, lib2.py, common2.py, frames.py, frames_data.py, cert2.py, setup9.py` and `checks/inputs_check.py, manifest_check.py` are the author's library and check files, copied unchanged from #2724; `checks/a2lib.py, a2fam.py, a2cert.py, spans.py, modrank.py, unitcensus.py, orbits.py, orbits104.py, opt3u.py` + are the author's working-card scripts (A2COST, CONJB, HUNT-A2; Oct 15, 2026), with absolute paths removed and (for `a2lib.py`) two working files merged. `SOURCES.json` records the source hash of each. + +## New in this package + +`README.md`, `verify.sh`, `SOURCES.json`, `MANIFEST.sha256`, `checks/floors.py, tie_check.py, exact_opt.py, pairtable.py, census_facts.py, units_check.py, log_counts.py`, `data/` (frames; the two tie decoders converted from pickles to JSON); +`evidence/logs` and `evidence/hunt-a2-scripts` are exports of the author's working cards (A2COST, HUNT-A2; Oct 15, 2026), copied (absolute paths stripped in the scripts; `*.log` renamed `*.log.txt`). diff --git a/research/a2-family-decoder-floors/README.md b/research/a2-family-decoder-floors/README.md new file mode 100644 index 0000000000..ccaf3da1d2 --- /dev/null +++ b/research/a2-family-decoder-floors/README.md @@ -0,0 +1,215 @@ +# Decoder floors, case (c): the A2 family of non-B-form rank-9 realisations (P112 ≥ 64, #968 P104 ≥ 56, E8 ≥ 72; no κ claim) + +**Status: research note. Exact finite computations plus written proofs; not a SAT/DRAT result. No κ claim, no supplier word.** +Only `research/a2-family-decoder-floors/` is added; nothing existing is changed. It works on the `m = 9`, rank-9 case "(c)" of #2338's trichotomy, +but only for **one explicit family of rank-9 realisations**, not for all of case (c) (see "Not covered"). + +## Claims box (scope is part of the claim) + +Setting (the model of #2338 / #2277 / #2724): a unit of lines `V` (`E8`, `P112` = E8 minus an orthogonal frame `F0`, `P104` = E8 minus `F0 ∪ F1`, #968's unit, `F1 = H4`), a **pattern realisation** +`M` (`M_tt ≠ 0`; for `t ≠ s`: `M_ts = 0 ⇔ r_t ⊥ r_s`; "iff pattern") over a field of characteristic 0, the **dense** pairing table `B[t,s] = 1 ⇔ (t = s or r_t ⊥ r_s)` (F2-rank 9, 511 label classes), +and the cost `Σ_j rank_F2 B[R_j, A_j]` of a decoder `M = Σ_j p_j q_jᵀ` with row/column supports `R_j`, `A_j`. + +| # | Statement | Scope | Status | +|---|---|---|---| +| **A1** | **The A2 family**: rank-9 iff-pattern realisations of P112, P104, E8 equal to the Gram matrix `G` except on the three rows of one A2 triangle, where row `u_i` is `G` rescaled by one factor on `N̄(u_i) ∩ O_{u_j}` and by another on `N̄(u_i) ∩ O_{u_k}`; 7 parameters plus diagonal scalings (§2) | the three units | PROVEN (construction) + CHECKED (exact members, `a2fam.py`) | +| **A2** | **They are not of B-form** `D₁GD₂ + cβᵀ` (`c_uβ_s = 0` on every orthogonal pair): a counterexample to the B-form conjecture (our working "Conjecture B", never posted) for rank-9 square decoders | generic members (3 random exact members per unit) and the two tie members of S1 | PROVEN (argument, §2.3) from CHECKED (exact / mod-p ranks, `a2cert.py`) | +| **G** | **Theorem G**: if the rows outside a set `X` are Gram rows, a rank-9 pattern realisation is B-form with `supp c ⊆ X`, **or** in the A2 family on an A2 triangle inside `X` (transposed statement for columns) | P112, P104, E8; char K ≠ 2 | PROVEN (§3) from CHECKED span facts S1, S2 (`spans.py`) | +| **E** | **Lemma E**: if `rank M[V∖X, :] ≤ 8` and `V∖X` contains a sub-unit with rank-8 rigidity (#1212 and extensions) and a span condition, the rows off `X` are Gram rows | conditional on the cited rigidity | PROVEN (§3) | +| **F** | **Floors**: every `9`-term (square) decoder of **every** A2-family member, all parameters, all triangles, costs **P112 ≥ 64, P104 (#968's unit) ≥ 56, E8 ≥ 72** (§5) | `m = 9`, rank-9 A2 members, dense `B` | PROVEN from CHECKED (row census parameter-free; column census treats `γ` symbolically; merged-kill fact `mergedkill.py`; exact class-level relaxation `iib_check.py`); corroborated by RECORDED robust CP-SAT runs | +| **S** | **Sharpness**: exact tie decoders of cost **64 (P112)** and **72 (E8)** at the stated special parameter points; generic members reach only 65 / 73 (§6) | the two points | CHECKED (exact over Q) | +| **M** | **`m ≥ 10`, both factors in the realisation's two 9-dimensional spaces** (`P = AX`, `Q = BY`): cost ≥ **68 (P112), 64 (P104), 77 (E8)** (§7) | A2 members **off the B-locus `γ₂ ≠ γ₃`**, any `m ≥ 10`; the B-locus case is **OPEN** (the relaxation drops there to 62 / 58 / 70) | PROVEN from CHECKED (class-level relaxation `iib_check.py` + merged-kill fact); pair tables at members are corroboration only | + +The result relies on #2338 (our own PR, open): the model, Theorem P (`P_0`), the exact rank formula; the 8-term floors `P_0 = 64 / 56 / 72` are re-confirmed here by exact branch-and-bound. + +### Not covered (stated up front) + +* **`m ≥ 10` on the B-locus `γ₂ = γ₃`** (the cocycle locus, B-form members): not claimed. The class-level relaxation drops there to 62 / 58 / 70 (P112 / P104 / E8), below the floors of Theorem F, and the recorded logs exclude the locus. Open. +* **Decoders whose factors leave `col M` / `row M` on an A2 member with `m ≥ 10` are NOT covered** (the catalogue method needs the factors inside the realisation's 9-dimensional spaces). For `m = 10` such decoders are exactly the + one-sided frame-expansion decoders (§7.3, PROVEN reduction); a heuristic search (§7.3) found only ties, nothing proven. `m ≥ 11` outside the spaces was not analysed. +* **Other rank-9 realisations.** The existence step is open: we do **not** prove that every rank-9 pattern realisation is B-form or A2 ("Conjecture B\*"). Theorem G only says that a rank-9 realisation with Gram rows off a set `X` is one of the two. So the floors above are + floors for the A2 family and (by the earlier B-form analysis, not part of this package) are *not* a statement about all of case (c). The co-star decoders (Discussion 1267, #1320) are case (c) of #2338; nothing here proves anything about them unless their realisation lies in the family. +* **Non-iff patterns** (zeros allowed on non-orthogonal pairs), `B` of rank ≥ 10, other P104 units, other punctured units. +* The A2 family is shown not to be of B-form; we do **not** claim that it is an irreducible component of the realisation variety (a floating-point tangent-space count, 310 = 81 + 229, points that way; it is not shipped and not claimed). +* Not DRAT-logged. Two things are RECORDED, not re-run (§9): the robust CP-SAT / CEGAR logs and the all-parameter rigidity of the pair tables (special-locus census). + +## 1. Setting and notation + +`L` = the lines of the unit, root representatives `r_t ∈ Z⁸` (E8 roots, norm 2), `G_ts = r_t · r_s`, `R` the `v × 8` matrix of the `r_t` (rank 8). `O_u = {s : s ⊥ u}`, `N̄[u] = {s : s ⊥̸ u} ∪ {u}`. +A **pattern realisation** `M` is a `v × v` matrix with the iff pattern; `M = ABᵀ` with `A, B ∈ K^{v×ρ}` (rows `a_u`, `b_s`), `ρ = rank M`. The **Gram realisation** is `G` (`ρ = 8`). **B-form** (our working conjecture "B"): `M = D₁GD₂ + cβᵀ`, +`D₁, D₂` diagonal (singular allowed), `c βᵀ` rank one with `c_uβ_s = 0` on every orthogonal pair `(u, s)`. +`E8` is the full 120-line unit; `P112`, `P104` as above (`checks/units_check.py` recomputes sizes and the label dimension 9). + +**Square decoders.** Every 9-term decoder `M = PQᵀ`, `P, Q ∈ K^{v×9}`, of a rank-9 `M` is *square*: `P = AX̂`, `Q = BŶ` with `X̂, Ŷ ∈ GL₉`, `X̂Ŷᵀ = I`. +*Proof.* `rank M = 9` forces `rank P = rank Q = 9`, `col P = col M = col A` and `col Q = col B`, so `P = AX̂`, `Q = BŶ`; then `AX̂ŶᵀBᵀ = ABᵀ` and `A, B` injective give `X̂Ŷᵀ = I`. ∎ +Write `x_j, y_j` for the columns of `X̂, Ŷ` (dual bases of `K⁹`). A row normal `x` has support `R(x) = {u : a_u · x ≠ 0}`, a column normal `y` has `A(y) = {s : b_s · y ≠ 0}`. + +**Exact rank formula (PROVEN; proof inlined).** Dense `B[t,s] = Ω(u(t), u(s))` with `u(t) ∈ F₂⁹` the label of line `t` and `Ω` nondegenerate (`h = 9`, 511 classes, `units_check.py`). For supports `R, A` with label spans `U_R, U_A`, +`B[R,A]` has the rank of `Ω` restricted to `U_R × U_A`, i.e. `rank B[R,A] = dim U_R − dim(U_R ∩ U_A^{⊥Ω})`. The class `O_z = {t : Ω(z,u(t)) = 1}` is *avoided* by `R` iff `z ∈ U_R^⊥`; put `δ(R) = dim U_R^⊥`. +Hence **`rank B[R,A] ≥ 9 − δ(R) − δ(A)`** (Lemma 3.1 of the working notes behind #2338) and the cost of a term depends only on the label classes its supports avoid. +A row normal `x` avoids the class `O` iff `a(O) ⊆ x^⊥`; a normal killing no class behaves as "full support". + +## 2. The A2 family + +### 2.1 Two facts about A2 in E8 (PROVEN) +(a) The lines of E8 in a 2-plane form a simply-laced rank-≤2 root system (A1, A1×A1 or A2), so at most 3 lines, exactly 3 only for an **A2 triangle** (pairwise non-orthogonal, `r_3 = ±r_1 ± r_2`). +(b) Let `r_1·r_2 = ±1`, `r_3 = ±(r_1 ∓ r_2)`. Every root `r ∉ {±r_1, ±r_2, ±r_3}` is orthogonal to at least one of `r_1, r_2, r_3`. *Proof.* `r·r_3 = r·r_1 ∓ r·r_2`; if `r·r_1, r·r_2 ∈ {±1}` then `r·r_3 ∈ {0, ±2}`, and `±2` forces `r = ±r_3`. ∎ +So `V ∖ X = O_{u_1} ∪ O_{u_2} ∪ O_{u_3}` and `O_{u_i} ∩ O_{u_j}` is the same set `E6` of lines orthogonal to the plane `Π = ⟨r_1, r_2⟩` (`a2fam.py` asserts this: 34 / 32 / 36 lines on P112 / P104 / E8). + +### 2.2 Construction (PROVEN; CHECKED on instances) +Let `X = {u_1, u_2, u_3}` be an A2 triangle in `L`. Take `g_1 = 0`, `g_2, g_3 ∈ Π` (four parameters `θ = (α₂, β₂, α₃, β₃)`: `g_2 = α₂r_1 + β₂r_2`, `g_3 = α₃r_1 + β₃r_2`), and three numbers `ζ_i`. For `s ∈ O_{u_i}` put `z_s = −g_i · r_s` +(consistent on overlaps because `O_{u_i} ∩ O_{u_j} ⊥ Π ∋ g_i − g_j`), `z_{u_i} = ζ_i`. Rows and columns in `K⁹`: +`a_u = (r_u, 0)` for `u ∉ X`, `a_{u_i} = (r_i + g_i, 1)`, `b_s = (r_s, z_s)`, and `M = ABᵀ` (then `D₁MD₂` for diagonal scalings). +* `M` equals `G` off the three rows `X`. +* For `s ∈ O_{u_i}`: `M_{u_i s} = (r_i + g_i)·r_s + z_s = 0`, an orthogonal pair, as required. +* For `s ∈ N̄(u_i) ∩ O_{u_j}`: `M_{u_i s} = (r_i + g_i − g_j)·r_s`; with `g_i − g_j = a r_i + b r_j` and `r_s ⊥ r_j` this is `(1 + a) G_{u_i s}`: row `u_i` is the Gram row **rescaled by `κ_ij = 1 + a`** on `N̄(u_i) ∩ O_{u_j}` and by `κ_ik` on `N̄(u_i) ∩ O_{u_k}`. +* Pattern (iff): the nonzero conditions are `κ_ij ≠ 0` (i.e. `r_i + g_i − g_j ∉ ⟨r_j⟩`, six open conditions) and `M_{u_iu_i}, M_{u_iu_j} ≠ 0` (open conditions on `ζ`); nothing else changes. +* `M − G` has rank 2 modulo the Gram row space (with `p, q, r` the restrictions of Gram rows to the three parts, `G_{u_1} ≡ p+q`, `G_{u_2} ≡ r+q`, `G_{u_3} ≡ p−r`, so every piecewise rescaling lies in the Gram span plus one vector). That is why six scale factors survive at rank 9. +* `rank M = 9` iff `A` and `B` have rank 9; `A` always does, `B` does unless `z` is a linear function of `r` (an open condition). + +`checks/a2fam.py` (exact rationals) builds random members on each unit and asserts: every line off `X` is orthogonal to a line of `X`; the zeros of `M` are exactly the orthogonal pairs and the diagonal is nonzero; `rank A = rank B = 9`; `M = G` off `X`. +Parameter draws that create an extra zero are skipped (they leave the open set). + +### 2.3 Not of B-form: exact certificate (argument PROVEN; ranks CHECKED) +**Claim.** For a member with the iff pattern and `rank M = 9`, there is no `M = D₁GD₂ + cβᵀ` with `c_uβ_s = 0` on all orthogonal pairs, if the following CHECKED facts hold (they do for the members tested): (i) the lines non-orthogonal to all of `N̄[u]` are just `{u}`, for every `u`; +(ii) `Σ := {u : rank b(O_u) ≤ 7}` equals `X`, the rows `a_w`, `w ∉ Σ`, span 8 dimensions, and `rank b(⋃_{u∈X} O_u) = 9`; (iii) every `(v−1)`-row submatrix of `M` has rank 9. +*Proof.* Suppose `M = D₁GD₂ + cβᵀ` with these properties. `rank M = 9` forces `rank D₁GD₂ = 8` and `c ∉ col(D₁R)`, so `col M = col(D₁R) ⊕ ⟨c⟩` and likewise `row M = row(D₂R) ⊕ ⟨β⟩`: `c = Aπ`, `β = Bν`. +For `u ∈ supp c` the condition `c_uβ_s = 0` on `O_u` says `ν ∈ N_u := b(O_u)^⊥`. Note `a_u ∈ N_u`. +*Case 1: some `u ∈ supp c` has `dim N_u = 1`.* Then `ν ∝ a_u`, so `β ∝ M[u,:]` with support `N̄[u]`. Every `w ∈ supp c` is non-orthogonal to every `s ∈ supp β = N̄[u]`, so `supp c = {u}` by (i). Then all rows `w ≠ u` of `M` are rows of `D₁GD₂`, rank ≤ 8, contradicting (iii). +*Case 2: all `u ∈ supp c` have `dim N_u ≥ 2`.* Then `supp c ⊆ Σ = X`. The rows off `X` satisfy `a_w·π = 0` (since `c_w = 0`), and they span 8 dimensions, so `π` is unique up to scale and `supp c = supp(Aπ)`; by the computation `supp(Aπ) = X`. Then `ν` annihilates `b(O_u)` for all `u ∈ X`, i.e. `b(⋃_{u∈X}O_u)`, which has rank 9: `ν = 0`, `β = 0`, and `M = D₁GD₂` has rank ≤ 8. Contradiction. ∎ +`checks/a2cert.py` verifies (i), (ii), (iii) on three random exact members of each unit (and on the two tie members of §6). Ranks are computed **mod p = 2⁶¹ − 1**, which are lower bounds for the ranks over Q; every inference above uses only lower bounds, or upper bounds that hold by construction +(`dim N_u` computed mod p can only be too large, which enlarges `Σ`, the safe direction). **Not claimed:** the variant without the orthogonal-pair condition on `supp c × supp β`; for special parameters (e.g. the cocycle locus `γ₂ = γ₃` of §5.1, where `M = D₁G + 1_X ζᵀ`) an A2-family member *is* B-form. + +## 3. Theorem G and Lemma E + +**Span facts (CHECKED, `spans.py`, exact up to the safe mod-p direction).** For `L ∈ {P112, P104, E8}`: **(S1)** `r(O_u)` spans `r_u^⊥` (rank 7) for every `u`; **(S2)** `r(O_u ∩ O_{u′})` spans `⟨r_u, r_{u′}⟩^⊥` (rank 6) for every `u ≠ u′`. + +**Theorem G (PROVEN from S1, S2).** Let `L ∈ {P112, P104, E8}`, `M` a rank-9 pattern realisation over `K`, `char K ≠ 2`, `X ⊆ L` with `M[w,:] = d_w (GD₂)[w,:]` for all `w ∉ X` (`D₂` invertible, `d_w ≠ 0`) and `r(L∖X)` spanning `K⁸`. Then +(a) `M = D₁′GD₂ + x z′ᵀ` with `supp x ⊆ X` and `x_u z′_s = 0` whenever `u ⊥ s` (B-form), **or** (b) `X′ := {u ∈ X : M[u,:] ∉ rowspace(GD₂)}` is an A2 triangle and `M` is in the A2 family of §2.2 (with `D₁, D₂` and scalars `x_i` on the three rows; for special parameters it can also be B-form). +*Proof.* `rowspace(GD₂) = rowspace(RᵀD₂)` has dimension 8 and is spanned by the rows off `X`; as `rank M = 9`, `rowspace M = rowspace(RᵀD₂) ⊕ ⟨z⟩`. For `u ∈ X` write `M[u,:] = w_uᵀRᵀD₂ + x_u z` (unique). Zeros of row `u` give `d₂_s(w_u·r_s) + x_u z_s = 0` on `O_u`. +If `x_u = 0` then `w_u ⊥ r(O_u)`, so `w_u ∝ r_u` by (S1) and row `u` is a Gram row; `X′ ≠ ∅` because `rank M = 9`. For `u ∈ X′` put `g_u = w_u/x_u`: `z_s = −d₂_s g_u·r_s` on `O_u`, and for `u, u′ ∈ X′`, `(g_u − g_{u′})·r_s = 0` on `O_u ∩ O_{u′}`, hence by (S2) **`g_u − g_{u′} ∈ ⟨r_u, r_{u′}⟩`**. +*Cocycle lemma.* If `|X′| ≤ 2` or `r(X′)` spans ≥ 3 dimensions, there is `g` with `g − g_u ∈ ⟨r_u⟩` for all `u ∈ X′`. (`|X′| = 1`: `g = g_u`. Otherwise fix `u_1 ≠ u_2`, write `g_1 − g_2 = μr_1 + νr_2` (unique, `r_1, r_2` independent) and put `g := g_1 − μr_1 = g_2 + νr_2`, the unique vector that works for `u_1, u_2`. +For `u_3` with `r_3 ∉ ⟨r_1, r_2⟩`: `g − g_3 ∈ (g_1 − g_3 + ⟨r_1⟩) ∩ (g_2 − g_3 + ⟨r_2⟩) ⊆ ⟨r_1, r_3⟩ ∩ ⟨r_2, r_3⟩ = ⟨r_3⟩`. For `u_3` with `r_3 ∈ ⟨r_1, r_2⟩` use some `u_4 ∈ X′` with `r_4 ∉ ⟨r_1, r_2⟩` and the pair `(u_1, u_4)`, which determines the same `g`, and `r_3 ∉ ⟨r_1, r_4⟩`.) +Given such `g`, put `z′ = z + gᵀRᵀD₂`: it vanishes on every `O_u`, `u ∈ X′`, and `M[u,:] = x_u(g_u − g)ᵀRᵀD₂ + x_u z′` with `x_u(g_u − g) = d₁′_u r_u`: this is (a). Otherwise `|X′| ≥ 3` and `r(X′)` spans a 2-plane, so `X′` is an A2 triangle (§2.1(a)); the rows off `X′` are Gram rows and the rows of `X′` have exactly the form of §2.2. This is (b). ∎ +The proof uses no characteristic assumption beyond S1/S2 (rank statements about integer matrices; true over Q, hence over every field of characteristic 0; for characteristic `p` re-run `spans.py` mod `p`). The transposed statement holds for columns. + +**Lemma E (PROVEN).** Let `rank M[V∖X, :] ≤ 8` and `L′ ⊆ V∖X` with `M[L′,L′] = D₁GD₂` on `L′` (e.g. a sub-unit where rank-8 rigidity is known: #1212 and its extensions #1389, #1399, #1419, #1425, #1616) and `r(L′)` spanning `K⁸`; assume (S1) for `L` and (S1′) `r(L′ ∩ O_s)` spans `r_s^⊥` for every `s` (a finite check per `(L, L′)`). Then `M[V∖X,:] = D₁G[V∖X,:]D₂` with `D₂` invertible. +*Proof.* Factor `M[V∖X,:] = A′B′ᵀ` in `K⁸`; `a(L′)` spans `K⁸` (as `M[L′,L′]` has rank 8), so take `a_u = d₁_u r_u` on `L′` (the basis change is well defined because `r(L′)` spans and the form is nondegenerate). Each column has `b_s ⊥ r(L′ ∩ O_s)`, so `b_s = d₂_s r_s` by (S1′); `d₂_s ≠ 0` because some `u ∈ L′` is non-orthogonal to `s` and `M_us ≠ 0`. Each row `u ∉ X` has `a_u ⊥ b(O_u) ∝ r(O_u)`, so `a_u ∝ r_u` by (S1), with nonzero factor since `M_uu ≠ 0`. ∎ +Theorem G + Lemma E reduce the classification of rank-9 realisations to the *existence* of such a set `X` ("Conjecture B\*"), which is **OPEN** here. + +## 4. Catalogue facts for the cost count (CHECKED) + +Normal form of a member (GL₉-normalised): `a_u = (r_u, 0)`, `a_{u_i} = (c_i, 1)`, `b_s = (r_s, z_s)` with `c_1 = r_1`, `c_i ∈ Π`, and off `X`: `z_s = −γ_i (r_1·r_s)` on `O_{u_i}` (`γ_1 = 0`); the parameters are `(c_2, c_3 ∈ Π; ζ_1, ζ_2, ζ_3)`. The pattern is equivalent to `c_i − c_j ∉ ⟨r_i⟩ ∪ ⟨r_j⟩` (`i ≠ j`) plus open conditions on `ζ`. +The **cocycle locus** `γ₂ = γ₃` is B-form (`M = D₁G + 1_X ζ′ᵀ`). +`checks/unitcensus.py` (UNIT = P112 | P104 | E8, a triangle chosen by `A2TRI`) recomputes, and `checks/census_facts.py` asserts, for each unit and triangle: +* **(R) rows.** The 63 X-avoiding classes have `rank r(O) = 8`, so their only killer is `e_9` (`R(e_9) = X`). The other row-deficient classes are those with `|O ∩ X| = 1`, or `O ∩ X = X`, and `rank r(O∖X) = 7`: **11 (P112: 8 "survivors" + 3 "triangle classes" `T_i = O_{u_i} ∪ {u_i}`, of 60 lines), 19 (P104: 16 + 3, the triangle classes having 56 lines), 3 (E8: only the triangle classes, 64 lines)**. + Each has a **1-dimensional nullspace** and the normals are pairwise distinct, so every `x ≠ e_9` kills at most one class (`δ_R ≤ 1`). +* **(S) spans.** For each `u_i`, `r(O_{u_i} ∖ (E6 ∪ X))` spans `r_i^⊥` (rank 7); no line off `X` is non-orthogonal to all of `X`. +* **(C) columns.** For generic `γ` exactly six column classes are killable by a vector `(f, 1)`: the three triangle classes `T_i` and three "merged" classes `M_ij` (`|M ∩ X| = 2`; 52 lines on P112, 48 on P104, 56 on E8); they are co-killable only as the three triples `{M_ij, T_i, T_j}` (a vector killing a triple has a 26-line support on P112), and no other triple is. Each `T_i` has a unique column killer, so a merged `y` is the killer of both of its triangle classes, and at most one merged `y` exists. + Consequently, off the B-locus, **`δ_A ≤ 1` for every column normal, except for at most one term with `δ_A = 2`** (§5.3(b): two merged classes are co-killable only on `γ₂ = γ₃`, `mergedkill.py`). On the cocycle locus a column normal `y ≠ e_9` kills at most one class, from the same list 11 / 19 / 3. +* **B[X, s] = e_i** for every `s ∈ O_{u_i} ∖ (E6 ∪ X)` (asserted in `floors.py`; convention `B = 1` on orthogonal-or-equal pairs). +* **Triangles.** E8: `W(E8)` is transitive on A2 subsystems. P112: the 204 automorphism generators found (reflections and products of two reflections preserving `L`) merge all **896** triangles into **one orbit** (`orbits.py`); E8: all 1120 in one orbit. P104: the 64 signed permutations found merge the **704** triangles into **≤ 28 orbits**, and `unitcensus.py` + `census_facts.py` are run on **all 28 representatives** (identical structure; logs recorded and compared line for line). Every fact above is invariant under automorphisms of `L`. + +## 5. The floors (F) + +### 5.1 Row-puncture floors `P_k` (CHECKED) +`P_k` := the minimum cost of an 8-term (square, dimension 8) decoder of the Gram matrix `G` with the rows of `Z ⊆ X`, `|Z| = k`, deleted; a row that is not honest (a non-Gram row, or zero) costs at least as much (supports only grow), so `P_k` bounds every such decoder from below. +`floors.py`: **P112: `P_k = 64, 63, 62, 62` (`k = 0..3`); P104: `56` for all `k`** by exact duality branch-and-bound over the catalogue of deficiency directions (`opt3u.py`; complete because every candidate space is 1-dimensional); **E8: `72, 71, 70, 70`**, by the structural count +(no column-deficient classes; the row-deficient classes of the punctured Gram are exactly `|Z|` classes with 1-dim nullspace and normal `r_i`, `i ∈ Z`; every term costs ≥ 9 except at most `rank{r_i : i ∈ Z}` terms, which cost ≥ 8, so **`P_k ≥ 72 − rank{r_i : i ∈ Z}`**, and `r_1, r_2, r_3` span only 2 dimensions). +`P_0 = 64 / 56 / 72` is #2338's Theorem P for these units. + +**Remark (the E8 near-miss).** On E8 the three punctured row classes have normals `r_1, r_2, r_3`, which are dependent (`r_3 = ±r_1 ± r_2`, `floors.py` asserts `rank{r_1, r_2, r_3} = 2`), so at most **two** cost-8 terms fit in one basis: `P_3 = 70`, not `69`. +The count below uses `cost_0 ≥ |T|`, which holds because `B[X, s] = e_i` for the columns used (convention `B = 1` on orthogonal-or-equal pairs; `floors.py` verifies it for the `B` of this package), so `|T| = 3` gives `70 + 3 = 73` and the dependency enters only through `P_k`. + +### 5.2 Case I: some `x_{j0} ∝ e_9` (PROVEN from §4) +Duality gives `y_j = (y′_j, 0)` for `j ≠ j0`, and `(x′_j, y′_j)_{j≠j0}` are dual bases of `K⁸`. Normalise `y_{j0} = (y′_0, 1)` and put **`w_i := c_i − y′_0`**. For `j ≠ j0`: the columns are honest Gram columns, rows off `X` are Gram rows and `p_j(u_i) = w_i · x′_j`. Term `j0` has `R_0 = X` and `q_0(s) = −w_i · r_s` on `O_{u_i}∖X`. +Let `T = {i : w_i ∉ ⟨r_i⟩}`. For `i ∈ T` (S) gives `s ∈ O_{u_i}∖(E6 ∪ X)` with `q_0(s) ≠ 0`, i.e. `s ∈ A_0`, and `B[X,s] = e_i`, so **`cost_0 ≥ rank{e_i : i ∈ T} = |T|`**. +For `i, j ∉ T` write `w_i = λ_i r_i`, `w_j = λ_j r_j`: the pattern (`c_i − c_j ∉ ⟨r_i⟩ ∪ ⟨r_j⟩`) forces `λ_i, λ_j ≠ 0`, so those rows are honest scaled Gram rows. The other eight terms form a Gram decoder with `|Z|` rows non-honest, `|Z| = |T|` for `|T| ≤ 1`, `|Z| ∈ {2,3}` for `|T| = 2`, `|Z| = 3` for `|T| = 3`: +`|T| = 0`: ≥ `P_0`; `|T| = 1`: ≥ `1 + P_1`; `|T| = 2`: ≥ `2 + min(P_2, P_3)`; `|T| = 3`: ≥ `3 + P_3`. Totals: **P112 64, 64, 64, 65; P104 56, 57, 58, 59; E8 72, 72, 72, 73** (`floors.py`). So Case I costs **≥ 64 / 56 / 72**, tight for P112 and E8 as a bound. + +### 5.3 Case II: no `x_j ∝ e_9` +The split is frame-invariant: (a) some `y_j` has `A_j ⊆ X` (it kills every X-avoiding column class), or (b) no `y_j` does. By (C), (a) can occur only on the cocycle locus (B-form members). +**(a)** (PROVEN). In the cocycle frame `y_{j0} = e_9`, `x_{j0} = (x′_0, 1)`; the other terms have honest Gram rows, and column `u_i` is `(r_i − ζ′_i x′_0)·y′_j`. `A_0 = {u_i : ζ′_i ≠ 0} ≠ ∅` (else `rank M = 8`). Let `Z ⊆ A_0` be the non-honest columns: the `i ∈ A_0` with `x′_0 ∉ ⟨r_i⟩`, plus at most one `i ∈ A_0` with `r_i = ζ′_i x′_0`. +If `x′_0 = 0`: `R_0 = X`, `cost_0 = |A_0| ≥ 1`, total ≥ `1 + P_0`. Otherwise `x′_0` lies on at most one `⟨r_k⟩`; for each `i ∈ A_0` with `x′_0 ∉ ⟨r_i⟩` (S) gives a row `s ∈ O_{u_i}∖(E6∪X)` in `R_0` with `B[s, A_0] = e_i|_{A_0}`, and if `r_k − ζ′_k x′_0 = 0` for `k ∈ A_0`, the diagonal condition `M_{u_ku_k} ≠ 0` says exactly `u_k ∈ R_0`, with `B[u_k, A_0] = e_k|_{A_0}`. +Hence **`cost_0 ≥ |Z|`** and the other eight terms cost ≥ `P_{|Z|}` (column version of §5.1, equal by the symmetry of `G` and `B`): total ≥ `min_k (k + P_k)` = **64 / 56 / 72**. +**(b)** (PROVEN from CHECKED: row census parameter-free; column census treats `γ` symbolically). By (R) and (C) a term's row normal kills at most one deficient class (`δ_R ≤ 1`), and its column normal kills one class, except for merged columns. +The cost of a term depends only on the label classes its two supports avoid (exact rank formula), so it is read from a **class-level table** `f[i][j] = rank_F2 B[R_i, A_j]` for the row direction `i` (one of the 11 / 19 / 3 row-deficient classes, or "full support") and the column direction `j`. +*Column directions.* The eta = 0 killers `S` (8 on P112, 16 on P104, none on E8), the three triangle classes `T_i`, and merged classes `M_ij`. **Merged-kill fact (CHECKED, `mergedkill.py`; P112, E8 and all 28 P104 representatives):** the joint kill system of any two merged classes +(unknowns: one column normal `(f,1)` per class, shared `γ₂, γ₃, ζ₁..ζ₃`, X-column `ζ` conditions included) has solutions only on `γ₂ = γ₃`. Hence **off the B-locus at most one column direction kills any `M_ij`** (a direction killing `M_ij` also kills `T_i, T_j` (the co-killable triples of (C)); `T_i` has a unique killer, so two different `M`'s would share a killer and be killed jointly). +So off the locus the available column directions are `S ∪ T` plus at most one merged class (alone, or merged with the `T_i, T_j` it co-kills); on the locus a column normal kills at most one class and the merged ones are absent. +*Relaxation.* The terms of a square decoder have pairwise non-parallel row normals and column normals (they are dual bases), so each direction is used at most once; the relaxation chooses 9 terms, each direction at most once per side, "full support" unlimited, and minimises the sum of table entries (exact min-cost flow, `iib.py`; it ignores duality and independence, so it only lowers the bound). +Its exact optimum is **off the B-locus 65 (P112) / 62 (P104) / 74 (E8); on the B-locus 66 / 63 / 75** (`iib_check.py`; P112, E8 and all 28 P104 representatives; the case with the single merged class is the minimum). +(The relaxation is not a count of the form `9 − δ_R − δ_A` per term: a survivor row against a single `M` column costs 7, and there are 12 such pairs on P112; allowing them, and ignoring the fact above, the relaxation would reach 63.) + +**Theorem F (floors).** *Every 9-term decoder of every A2-family member, at every parameter point and on every A2 triangle, costs at least 64 on P112, 56 on P104 and 72 on E8.* Cases I, II(a), II(b) give `≥ 64, 64, 65` (P112), `≥ 56, 56, 62` (P104), `≥ 72, 72, 74` (E8). ∎ (PROVEN from CHECKED: the census, the merged-kill fact and the class-level relaxation). +`floors.py` re-computes `P_k` and all arithmetic (including the II(b) relaxation); `unitcensus.py`/`census_facts.py` the inputs; `mergedkill.py`/`iib_check.py` the merged-kill fact and the relaxation; `orbits*.py` the triangle coverage. Independent corroboration (RECORDED): a robust CP-SAT / CEGAR search over all parameters in each stratum reports **no square decoder of cost ≤ 63 on P112 and ≤ 71 on E8** (`evidence/logs/hunt-a2/`); at the checked members, exact duality branch-and-bound (`exact_opt.py`, below) gives the same. + +## 6. Sharpness (S) + +`checks/tie_check.py` re-verifies, with its own inverse, products, pattern (from raw root coordinates), dense `B` and F2 ranks (independent of `a2lib.evaluate`): at the special points below there is a **square decoder of cost exactly 64 (P112) and 72 (E8)**, with `PQᵀ = M` exactly over Q, `M` of rank 9 with the iff pattern. +Parameters are in the convention of §2.2 with `r_1, r_2` the first two lines of the triangle: **P112** `X = (r_1, r_2, r_3) = ((1,0,1,0,0,0,0,0), (1,0,0,0,1,0,0,0), (0,0,1,0,−1,0,0,0))` (lines 0, 4, 25 of `setup9.load('P112')`); **E8** `X = ((1,1,0,0,0,0,0,0), (1,0,1,0,0,0,0,0), (0,1,−1,0,0,0,0,0))` (lines 0, 2, 15 of the E8 list); the decoder (row normals `x_j`; `y_j` the dual basis) is in `data/tie_P112.json`, `data/tie_E8.json`: + +| unit | `θ = (α₂, β₂, α₃, β₃)` | `ζ = (ζ_1, ζ_2, ζ_3)` | term costs | total | +|---|---|---|---|---| +| P112 | `(37/6, 0, −11/2, 4/3)` | `(0, 29/2, −33/2)` | `1, 8, 8, 8, 8, 7, 8, 8, 8` | **64** | +| E8 | `(4/3, 0, −11/2, −11/2)` | `(4/3, 0, 3/2)` | `2, 8, 8, 9, 9, 9, 9, 9, 9` | **72** | + +The cost-1 (P112) / cost-2 (E8) term is the `e_9` row against a "2-kill" column direction. `a2cert.py tie` certifies both tie members as **not of B-form**, so these are decoders on genuine A2 (non-B) members, not on the cocycle locus. Hence the floors of Theorem F are **attained**. +Generic members: `exact_opt.py` (exact square optimum at one fixed member by duality branch-and-bound over the catalogue, §4) gives **65 (P112, generic member), 64 (P112, tie member), 73 (E8, generic), 72 (E8, tie)**. We claim only that 64 / 72 occur at special parameter points +(a zX-special locus together with conditions on `θ`; the special-locus census is RECORDED) and that the generic members checked reach 65 / 73; we do not claim a full characterisation of where the optimum is 64 / 72, and we do not claim sharpness of the P104 floor 56. + +## 7. `m ≥ 10`, factors inside the realisation's spaces (M) + +**7.1 Reduction (PROVEN).** Let `P = AX`, `Q = BY` with `X, Y ∈ K^{9×m}`, `XYᵀ = I₉`, `m ≥ 10` (both factors in `col A`, `col B`; any realisation of the family). *Merge lemma:* terms with parallel row normals `x` merge, `p q₁ᵀ + p q₂ᵀ = p(q₁ + q₂)ᵀ`, and `rank B[R, A₁ ∪ A₂] ≤ rank B[R, A₁] + rank B[R, A₂]`, likewise for columns; the cost does not rise. +Repeating, WLOG all row normals are pairwise non-parallel and so are all column normals, `m′ ≥ 9` terms (`m′ = 9` is square: Theorem F). So each catalogue direction is used at most once per side. +**7.2 Pair tables and arithmetic.** The cost of a term is `f[i][j] = rank B[R(d_i), A(e_j)]` for a catalogue row direction `d_i` and column direction `e_j` (or "full support" for a direction killing no class). `pairtable.py` computes the table exactly at a member and solves the relaxation "choose `m′` terms, each real direction at most once" by exact min-cost flow. +**Class-level relaxation (CHECKED, `iib_check.py`; PROVEN from CHECKED).** Same table as §5.3(b) with the `e_9` row (support `X`) added, and the same column directions: off the B-locus `γ₂ ≠ γ₃` at most one merged class (`mergedkill.py`). The exact min-cost relaxation with `m′` terms is monotone in `m′` (dropping a term never raises the cost); at `m′ = 10` it is exactly **68 (P112), 64 (P104), 77 (E8)** (and `+8 / +7 / +9` per further term), attained by the "survivor/`T` columns plus one single `M`" configuration. Hence for `m′ ≥ 10` and **off the B-locus: P112 ≥ 68, P104 ≥ 64, E8 ≥ 77** (P112, E8 and all 28 P104 representatives). +**On the B-locus the relaxation is lower** (cocycle column `A ⊆ X` allowed: 62 / 58 / 70 at `m′ = 10`), the recorded logs exclude the locus, and the `m ≥ 10` case there is **OPEN** (Scope). +Corroboration at members (`pairtable.py`, CHECKED at the members tested, generic and tie members, all off the locus): bounds of at least 64 / 64 / 77 from the member's own catalogue (relaxation values 69 on P112, 65 on P104, 78 on E8 there). +**All parameters** (RECORDED, not re-run): the catalogue is parameter-rigid on the row side (the special-locus census `specall.log`: row-special sets 2 / 4 / 0 on P112 / P104 / E8, columns change only through `ζ`, three mutually exclusive zX-special options, each adding one column direction that kills a 2-dim subspace). +**7.3 What is not covered.** Factors outside `col A` / `col B`. For `m = 10` with `rank P = 10` these are exactly the one-sided frame-expansion decoders (`q_j = B y_j`, each row `u` expands `a_u = Σ_j p_j(u) y_j` in one of several square decoders sharing the other terms): PROVEN reduction (working notes), not shipped. +A heuristic search over such expansions (single-row annealing and whole-class block moves from 60 best square decoders and the E8 tie) found only ties, nothing below, **nothing proven**. `m ≥ 11` outside the spaces and two-sided decoders with `rank > 9` were not analysed. + +## 8. Relation to other work, and caveats + +* **#2338** (ours, open): the model; Theorem P/R; the `m = 9` trichotomy `(a)/(b)/(c)`. This package treats part of (c): the A2 family, not all of (c). **#2724** (ours, open): case (b); its "Not covered" names this family. **#2639, #2277** (ours): closures and dense-pairing floors for rank-T realisations. +* **#1212** (burntout76, merged) and its extensions #1389, #1399, #1419, #1425, #1616: rank-8 gauge rigidity; #1212 lists rank ≥ 9 as open. Used only to state Lemma E. **#968** (merged): the P104 unit and the 8-term floor. +* **#2321, #2385, #2398, #2515** (open, other authors): one *fixed* rank-9 P112 completion (a column modification of the Gram matrix) under a COPY-power cost; not the A2 family, not the dense-`B` pairing rank. **#1180, #1224, #1320** (merged): the nine-term example, the one-sided normal form, one co-star assignment. +* Not independently re-implemented: the census (`unitcensus.py`) and the branch-and-bound (`opt3u.py`) were written once; `tie_check.py` is an independent evaluator for the tie decoders only. The column census (C) treats `γ` symbolically at generic `γ`; `γ`-special points are covered by the recorded special-locus census (RECORDED, not re-run). + +## 9. Labels (every step) + +| Step | Label | +|---|---| +| square-decoder normal form; merge lemma; exact rank formula; E6/A2 facts §2.1; construction §2.2 (algebra) | PROVEN (in text) | +| exact members with iff pattern and rank 9 on P112, P104, E8 | CHECKED (exact over Q, `a2fam.py`) | +| non-B-form certificate (i)–(iii) | CHECKED (exact pattern; ranks mod p, safe direction); argument PROVEN | +| S1, S2 | CHECKED (`spans.py`) | +| Theorem G, Lemma E | PROVEN (given S1, S2; Lemma E given cited rigidity) | +| survivors (8 / 16 classes) and survivor-pair ranks (P112 all 8) | CHECKED (`inputs_check.py`) | +| census (R), (S), (C), `B[X,s] = e_i`, triangle orbits (896 / 1120 / ≤ 28 reps, all 28 run) | CHECKED (`unitcensus.py`, `census_facts.py`, `orbits*.py`; recorded logs compared line for line) | +| `P_k` | CHECKED (exact B&B on P112, P104; structural + arithmetic on E8) | +| Case I, II(a) | PROVEN from CHECKED (`floors.py` re-computes the arithmetic) | +| merged-kill fact (two merged classes co-killable only on `γ₂ = γ₃`; P112, E8, 28 P104 reps) | CHECKED (`mergedkill.py`) | +| Case II(b): class-level relaxation 65 / 62 / 74 off the B-locus (66 / 63 / 75 on it) | PROVEN from CHECKED (row census parameter-free; column census treats `γ` symbolically; `iib_check.py`) | +| tie decoders 64 / 72; tie members not B-form; exact optima at fixed members 65 / 64 / 73 / 72 | CHECKED (exact) | +| `m ≥ 10` off the B-locus: class-level relaxation 68 / 64 / 77 | PROVEN from CHECKED (`iib_check.py`, all 28 P104 reps); pair tables at the checked members: CHECKED (corroboration) | +| `m ≥ 10` on the B-locus `γ₂ = γ₃` | OPEN, not claimed | +| all-parameter rigidity of the tables; robust CP-SAT / CEGAR logs; special-locus census | RECORDED (logs shipped, hash-pinned, headline lines asserted, **not re-run**) | +| out-of-space `m ≥ 10`, B\*, the full classification of rank-9 realisations | NOT CLAIMED | + +## 10. Verification + +`bash research/a2-family-decoder-floors/verify.sh /fresh/dir` (Python ≥ 3.11, `numpy`, `networkx`; one process at a time; no SAT solver, no CP-SAT, no kissat). Steps: 0 manifest (pins every shipped file including the recorded logs); 1 units, S1/S2, survivor classes and survivor-pair ranks; 2 A2 members and the non-B certificate on all three units; +3 census on the first triangle of each unit (identical to the recorded logs), on all 28 P104 orbit representatives, and the triangle-orbit counts; 4 `P_k` and the case arithmetic, the merged-kill fact (`mergedkill.py`) and the class-level relaxation (`iib_check.py`) on P112, P104, E8 and all 28 P104 representatives; 5 the tie decoders (exact), the tie members' certificates and the exact optima at fixed members; 6 pair tables (member-level corroboration of `m ≥ 10`); 7 headline lines of the recorded logs. +The measured transcript is stated in the PR body. + +## 11. Files + +* `checks/` — `lib.py, lib2.py, common2.py, frames.py, frames_data.py, cert2.py, setup9.py` (the author's library files, as in #2724); `a2lib.py` (unit-generic exact helpers, A2 realisations, evaluator; merged from two working files); `a2fam.py, a2cert.py, spans.py, modrank.py` (A2 construction and certificate, S1/S2); `unitcensus.py, census_facts.py, orbits.py, orbits104.py` (census, triangle orbits); `inputs_check.py` (survivor classes and survivor-pair ranks, as in #2724); + `floors.py, opt3u.py` (`P_k`, cases); `a2cls.py, mergedkill.py, iib.py, iib_check.py` (class-level catalogue, merged-kill fact, II(b) and `m ≥ 10` relaxation); `tie_check.py, exact_opt.py` (sharpness); `pairtable.py` (`m ≥ 10`, member-level corroboration); `log_counts.py` (recorded logs); `units_check.py, manifest_check.py`. +* `data/` — `p104_frames.json` (the frames `F0`, `F1`), `tie_P112.json`, `tie_E8.json` (the tie decoders, exact rationals). +* `evidence/logs/census/` — recorded unit-census logs (3 units + 28 P104 triangles); `evidence/logs/hunt-a2/` — recorded robust CP-SAT / CEGAR / special-locus logs; `evidence/hunt-a2-scripts/` — the scripts that produced the latter (provenance only: they need `ortools` and the working-card library and are **not** run by `verify.sh`). +* `SOURCES.json` — hashes of each shipped copy and of its working-card source; `MANIFEST.sha256`; `NOTICE.md`; `LICENSE` (Apache-2.0, copied from the repository root). + +Prepared by DreamingOfClouds with Claude Opus 5.5 (Anthropic), via Claude Code; Apache-2.0. diff --git a/research/a2-family-decoder-floors/SOURCES.json b/research/a2-family-decoder-floors/SOURCES.json new file mode 100644 index 0000000000..73ca169e01 --- /dev/null +++ b/research/a2-family-decoder-floors/SOURCES.json @@ -0,0 +1,582 @@ +{ + "description": "Pins for research/a2-family-decoder-floors. copies = shipped file and the file it was copied from (sha256 of both; checks/ copies differ from their working-card source only by removed absolute sys.path prefixes, relative-path imports replaced by the package library, and (a2lib.py) the merge of two working files, a2lib A2COST + HUNT-A2; the library files lib..setup9 are copied from the sibling package #2724 where they were already path-cleaned; evidence/hunt-a2-scripts differ by stripped path prefixes; logs identical or renamed *.log.txt). external = working-card texts the README is derived from (snapshot at packaging time, not shipped). unitcensus.py additionally carries a Hadamard comment added in review (identical=false is expected for it); floors.py was edited in review; checks/a2cls.py, mergedkill.py, iib.py, iib_check.py are new in review (adapted from the auditor scratch scripts pairs/relax2/mfeas/m10, path-free), not working cards. Tools: Python >= 3.11, numpy, networkx.", + "copies": [ + { + "path": "checks/a2cert.py", + "source": "W/cards/CONJB/a2cert.py", + "sha256": "e5841760a67cdb773265f5a5c262abab3f63c78d05a6206f65a0b4839f7cb986", + "source_sha256": "38efd9680417797978fa7c2f98689c48bedf6d7f4fcb528b5aea78b079dae388", + "identical": false + }, + { + "path": "checks/a2fam.py", + "source": "W/cards/CONJB/a2fam.py", + "sha256": "48e1d504264d49f1ff512559ef7b1a26b09794afccfd93f3c63b8a1f22b4ffda", + "source_sha256": "d9f5b2ff943e68f1a0c73d08b418b3582859b2f01258791b7cacd370979543a0", + "identical": false + }, + { + "path": "checks/a2lib.py", + "source": "W/cards/A2COST/a2lib.py + W/cards/HUNT-A2/a2lib.py (merged)", + "sha256": "a983007b7fe2c0350f5ed1600063dd051ce09f4b95e1dcb215f315e97f28bc9b", + "source_sha256": "c715c613a4297b376141de381e9984ce83a413a8e81a6cf53a7452bac717cc1c", + "identical": false + }, + { + "path": "checks/cert2.py", + "source": "kpr11:checks/cert2.py", + "sha256": "3a63e37e44858da37541de7b3e627f85aa1dbc966e376fdce116268fcc2b2c54", + "source_sha256": "3a63e37e44858da37541de7b3e627f85aa1dbc966e376fdce116268fcc2b2c54", + "identical": true + }, + { + "path": "checks/common2.py", + "source": "kpr11:checks/common2.py", + "sha256": "031c35a05f18b936a2ae38eafbcac5aa5afc247ae4cacc59179ebe1d53d3c2ba", + "source_sha256": "031c35a05f18b936a2ae38eafbcac5aa5afc247ae4cacc59179ebe1d53d3c2ba", + "identical": true + }, + { + "path": "checks/frames.py", + "source": "kpr11:checks/frames.py", + "sha256": "e2819749b30aa5073560c1f4b46cca13b06ec36feb1d0d7379a29fd9947076c8", + "source_sha256": "e2819749b30aa5073560c1f4b46cca13b06ec36feb1d0d7379a29fd9947076c8", + "identical": true + }, + { + "path": "checks/frames_data.py", + "source": "kpr11:checks/frames_data.py", + "sha256": "d4027cd040c3715337c82835132f0dcefdd0ae04ccfdd87d713e89cc710ec406", + "source_sha256": "d4027cd040c3715337c82835132f0dcefdd0ae04ccfdd87d713e89cc710ec406", + "identical": true + }, + { + "path": "checks/inputs_check.py", + "source": "kpr11:checks/inputs_check.py", + "sha256": "9d9516c356fab49a8d1e11a196df0f913213e8a71abbe37de170b3392331f5f2", + "source_sha256": "9d9516c356fab49a8d1e11a196df0f913213e8a71abbe37de170b3392331f5f2", + "identical": true + }, + { + "path": "checks/lib.py", + "source": "kpr11:checks/lib.py", + "sha256": "a1b1520f1eef030933260974a44bafc1315cca78ec0a3d0793cd9e1d6c049ca4", + "source_sha256": "a1b1520f1eef030933260974a44bafc1315cca78ec0a3d0793cd9e1d6c049ca4", + "identical": true + }, + { + "path": "checks/lib2.py", + "source": "kpr11:checks/lib2.py", + "sha256": "1808dc520887f7827c23976eddaf9fc01bb01a8ddd454a5015d0831f8491c34b", + "source_sha256": "1808dc520887f7827c23976eddaf9fc01bb01a8ddd454a5015d0831f8491c34b", + "identical": true + }, + { + "path": "checks/manifest_check.py", + "source": "kpr11:checks/manifest_check.py", + "sha256": "012739ff3dc3421c187ca089b361c0b1d49f808908a5a7efdb0603c20f08ca71", + "source_sha256": "012739ff3dc3421c187ca089b361c0b1d49f808908a5a7efdb0603c20f08ca71", + "identical": true + }, + { + "path": "checks/modrank.py", + "source": "W/cards/CONJB/modrank.py", + "sha256": "c77e3615c6c200c2b0a86e51e6350627a994811b86edb24ca3ef68a559e2a910", + "source_sha256": "c77e3615c6c200c2b0a86e51e6350627a994811b86edb24ca3ef68a559e2a910", + "identical": true + }, + { + "path": "checks/opt3u.py", + "source": "W/cards/A2COST/opt3u.py", + "sha256": "d5cf701bb2917510a5d4ffa7a3ff97ba108185a1e3b69186faf25b9dbd430c98", + "source_sha256": "d5cf701bb2917510a5d4ffa7a3ff97ba108185a1e3b69186faf25b9dbd430c98", + "identical": true + }, + { + "path": "checks/orbits.py", + "source": "W/cards/A2COST/orbits.py", + "sha256": "2ca14267c44badcd420e996d059b3e463c071e618f14f4adfb07a4e201d1ea4c", + "source_sha256": "2ca14267c44badcd420e996d059b3e463c071e618f14f4adfb07a4e201d1ea4c", + "identical": true + }, + { + "path": "checks/orbits104.py", + "source": "W/cards/A2COST/orbits104.py", + "sha256": "d852b98d9c25319fae7e965ac943690fecea29869394a654b9cd9ac43d5220ce", + "source_sha256": "d852b98d9c25319fae7e965ac943690fecea29869394a654b9cd9ac43d5220ce", + "identical": true + }, + { + "path": "checks/setup9.py", + "source": "kpr11:checks/setup9.py", + "sha256": "46e2ae37b4de98840a39e5484f33402d853d4a0b0b02b7329a7a4e3d733ff6c6", + "source_sha256": "46e2ae37b4de98840a39e5484f33402d853d4a0b0b02b7329a7a4e3d733ff6c6", + "identical": true + }, + { + "path": "checks/spans.py", + "source": "W/cards/CONJB/spans.py", + "sha256": "1483af9e44a1e3e57dedb91d51e583cee30a4bf9555a5be19fba57fc94026b50", + "source_sha256": "eb006291e5fe68c9f05c69f203fa97b7ea0b1be4fd91d5737eb4a248b2c741aa", + "identical": false + }, + { + "path": "checks/unitcensus.py", + "source": "W/cards/A2COST/unitcensus.py", + "sha256": "3b4778e3406765be0ffc8d3c615f18095b57581650fee88f0cb4372ba74749e7", + "source_sha256": "4cbe30bd3cab7d28c6f87842bd1bf2f5a25919d004f0fc290eeebb83da6fc233", + "identical": false + }, + { + "path": "data/p104_frames.json", + "source": "kpr11:data/p104_frames.json", + "sha256": "471c3c68b1ca65e38e05125e3a329dde0cf01a44f5af86fd84eec75e534421f1", + "source_sha256": "471c3c68b1ca65e38e05125e3a329dde0cf01a44f5af86fd84eec75e534421f1", + "identical": true + }, + { + "path": "evidence/hunt-a2-scripts/cegar.py", + "source": "W/cards/HUNT-A2/cegar.py", + "sha256": "315ddf8d611ee66715dfb2947cf32692bacf134e4d4fb940532f70ab69c14d2d", + "source_sha256": "315ddf8d611ee66715dfb2947cf32692bacf134e4d4fb940532f70ab69c14d2d", + "identical": true + }, + { + "path": "evidence/hunt-a2-scripts/ilp9.py", + "source": "W/cards/HUNT-A2/ilp9.py", + "sha256": "06596c12d7bf10fd44e21dfeda754a6185d42d1a92a92f2aae9504325e436ab2", + "source_sha256": "06596c12d7bf10fd44e21dfeda754a6185d42d1a92a92f2aae9504325e436ab2", + "identical": true + }, + { + "path": "evidence/hunt-a2-scripts/point.py", + "source": "W/cards/HUNT-A2/point.py", + "sha256": "1f112f980fc14b47f442b869b804aa2735bdbfb79835f4e80a2f537bc2d59f5a", + "source_sha256": "1f112f980fc14b47f442b869b804aa2735bdbfb79835f4e80a2f537bc2d59f5a", + "identical": true + }, + { + "path": "evidence/hunt-a2-scripts/refree.py", + "source": "W/cards/HUNT-A2/refree.py", + "sha256": "db9f5cef462ecbc78c0b5a09b8b5b7b3ed25ef93656d3814145229884d6c13f5", + "source_sha256": "db9f5cef462ecbc78c0b5a09b8b5b7b3ed25ef93656d3814145229884d6c13f5", + "identical": true + }, + { + "path": "evidence/hunt-a2-scripts/rowjump.py", + "source": "W/cards/HUNT-A2/rowjump.py", + "sha256": "8cee4102230dc6d8092fac4c5596ec68755185154c02408eb60e3819306ffb26", + "source_sha256": "8cee4102230dc6d8092fac4c5596ec68755185154c02408eb60e3819306ffb26", + "identical": true + }, + { + "path": "evidence/hunt-a2-scripts/specall.py", + "source": "W/cards/HUNT-A2/specall.py", + "sha256": "937f43e9b15987abfa3fbee322b463ebe0635e0f9bbe40fe491ee112981e32a3", + "source_sha256": "937f43e9b15987abfa3fbee322b463ebe0635e0f9bbe40fe491ee112981e32a3", + "identical": true + }, + { + "path": "evidence/hunt-a2-scripts/sympm2.py", + "source": "W/cards/HUNT-A2/sympm2.py", + "sha256": "48c425e13c376c8b600f2c304e5e63cb81307e691fc6d6cb12a9e46afd6ae54b", + "source_sha256": "48c425e13c376c8b600f2c304e5e63cb81307e691fc6d6cb12a9e46afd6ae54b", + "identical": true + }, + { + "path": "evidence/hunt-a2-scripts/zexcl.py", + "source": "W/cards/HUNT-A2/zexcl.py", + "sha256": "cf963c58664c82021f176c75b16ebba974edd0316dbd9b27ba34df4b0a3e1f83", + "source_sha256": "cf963c58664c82021f176c75b16ebba974edd0316dbd9b27ba34df4b0a3e1f83", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_0_3_22.log.txt", + "source": "W/cards/A2COST/uc104,0,3_22.log.log", + "sha256": "88ab80a074809feab20194e5a55744afcf47519f7f44cd6800d567f0cd7bb612", + "source_sha256": "88ab80a074809feab20194e5a55744afcf47519f7f44cd6800d567f0cd7bb612", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_0_5_24.log.txt", + "source": "W/cards/A2COST/uc104,0,5_24.log.log", + "sha256": "dfe551c58b835398346e9b71baac3563f0dc41e35c9709ac67ff639d5496138a", + "source_sha256": "dfe551c58b835398346e9b71baac3563f0dc41e35c9709ac67ff639d5496138a", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_0_60_103.log.txt", + "source": "W/cards/A2COST/uc104,0,60_103.log.log", + "sha256": "3cae260beb8a57814f12e4c318a147dfa31aa4668efba9ca548922fba8e307b9", + "source_sha256": "3cae260beb8a57814f12e4c318a147dfa31aa4668efba9ca548922fba8e307b9", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_0_61_102.log.txt", + "source": "W/cards/A2COST/uc104,0,61_102.log.log", + "sha256": "d594be0c6547db9cf5f65ca6d75ff9a9cf1d84f8af49173ecc6964efaf00e20d", + "source_sha256": "d594be0c6547db9cf5f65ca6d75ff9a9cf1d84f8af49173ecc6964efaf00e20d", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_1_3_31.log.txt", + "source": "W/cards/A2COST/uc104,1,3_31.log.log", + "sha256": "6b18cca610dc8a8d0b8be40c70ee30eef914e3165df44f337c32f87e2cec3a4a", + "source_sha256": "6b18cca610dc8a8d0b8be40c70ee30eef914e3165df44f337c32f87e2cec3a4a", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_1_44_96.log.txt", + "source": "W/cards/A2COST/uc104,1,44_96.log.log", + "sha256": "482a385287e74b194de1234a634424b92be1719a05e1dc7132c4b23f17058405", + "source_sha256": "482a385287e74b194de1234a634424b92be1719a05e1dc7132c4b23f17058405", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_1_45_95.log.txt", + "source": "W/cards/A2COST/uc104,1,45_95.log.log", + "sha256": "8a3856647d2ac9edd9002946e50a9287a0335324b3fb3d222b3c735c5fe07224", + "source_sha256": "8a3856647d2ac9edd9002946e50a9287a0335324b3fb3d222b3c735c5fe07224", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_1_46_94.log.txt", + "source": "W/cards/A2COST/uc104,1,46_94.log.log", + "sha256": "1a10718bdaf3fab64c66d57226989c4cc242b3dc4e86b7ef3c9a675851946b10", + "source_sha256": "1a10718bdaf3fab64c66d57226989c4cc242b3dc4e86b7ef3c9a675851946b10", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_1_47_93.log.txt", + "source": "W/cards/A2COST/uc104,1,47_93.log.log", + "sha256": "e17532d5689a6fe07a7924e1b83046aa6c3d54f55d2adbd22f47eafbf616cd56", + "source_sha256": "e17532d5689a6fe07a7924e1b83046aa6c3d54f55d2adbd22f47eafbf616cd56", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_1_49_92.log.txt", + "source": "W/cards/A2COST/uc104,1,49_92.log.log", + "sha256": "08cbbc49fbadfac79e8375dcff15eaf13c2b881f87287e3d0a1a5d4342c8e0e6", + "source_sha256": "08cbbc49fbadfac79e8375dcff15eaf13c2b881f87287e3d0a1a5d4342c8e0e6", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_1_50_91.log.txt", + "source": "W/cards/A2COST/uc104,1,50_91.log.log", + "sha256": "4ee7e030388b302102423264190aafd746af6016a7a949e3aed7728b78807c34", + "source_sha256": "4ee7e030388b302102423264190aafd746af6016a7a949e3aed7728b78807c34", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_1_51_90.log.txt", + "source": "W/cards/A2COST/uc104,1,51_90.log.log", + "sha256": "1071acad27929bae67a9fcb9d141aef6eee62dd0735f72de2a92bf6443f18500", + "source_sha256": "1071acad27929bae67a9fcb9d141aef6eee62dd0735f72de2a92bf6443f18500", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_1_5_33.log.txt", + "source": "W/cards/A2COST/uc104,1,5_33.log.log", + "sha256": "8502a3f8622759012febf78a0768c839f2ef92ba3bd7b9c3d5aca80e3e961bfc", + "source_sha256": "8502a3f8622759012febf78a0768c839f2ef92ba3bd7b9c3d5aca80e3e961bfc", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_5_44_101.log.txt", + "source": "W/cards/A2COST/uc104,5,44_101.log.log", + "sha256": "ea4977f8af53606561c8e3f761e6219190a995897955161d59f49932ec8c2990", + "source_sha256": "ea4977f8af53606561c8e3f761e6219190a995897955161d59f49932ec8c2990", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_5_45_100.log.txt", + "source": "W/cards/A2COST/uc104,5,45_100.log.log", + "sha256": "e36072857fe124bd935ffe9baba7a202750ddf2e2621d6a4437a78a095eec345", + "source_sha256": "e36072857fe124bd935ffe9baba7a202750ddf2e2621d6a4437a78a095eec345", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_5_48_97.log.txt", + "source": "W/cards/A2COST/uc104,5,48_97.log.log", + "sha256": "5d1f66444e395ee683f23e61c5f6b1e98e1b933a9cfe48ad3112e84e859c44b8", + "source_sha256": "5d1f66444e395ee683f23e61c5f6b1e98e1b933a9cfe48ad3112e84e859c44b8", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_5_53_93.log.txt", + "source": "W/cards/A2COST/uc104,5,53_93.log.log", + "sha256": "ee53093e489795838ff821910c7dd2ff076f6bb3d8256b6a83b25a60605c0f2f", + "source_sha256": "ee53093e489795838ff821910c7dd2ff076f6bb3d8256b6a83b25a60605c0f2f", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_5_56_91.log.txt", + "source": "W/cards/A2COST/uc104,5,56_91.log.log", + "sha256": "11daca0da65fbfaea91a2796928d5f146cfe3937aae2ec5635939dfa183abc07", + "source_sha256": "11daca0da65fbfaea91a2796928d5f146cfe3937aae2ec5635939dfa183abc07", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_7_44_102.log.txt", + "source": "W/cards/A2COST/uc104,7,44_102.log.log", + "sha256": "8a50ae8cd9c7f1702c9c565b9944d31c79d6dfe31b9c2c605a2b5e1b92a6a4e6", + "source_sha256": "8a50ae8cd9c7f1702c9c565b9944d31c79d6dfe31b9c2c605a2b5e1b92a6a4e6", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_7_46_100.log.txt", + "source": "W/cards/A2COST/uc104,7,46_100.log.log", + "sha256": "951a2e80971419d9ea3a77c4a9d33d1fcb4d0c2ef5ec5906d4b0d9a8a2c5c0d4", + "source_sha256": "951a2e80971419d9ea3a77c4a9d33d1fcb4d0c2ef5ec5906d4b0d9a8a2c5c0d4", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_7_48_98.log.txt", + "source": "W/cards/A2COST/uc104,7,48_98.log.log", + "sha256": "bd2600e9a973ce115f418c181aa754ca3020c091a161475b884d82e5e0db84a8", + "source_sha256": "bd2600e9a973ce115f418c181aa754ca3020c091a161475b884d82e5e0db84a8", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_7_52_95.log.txt", + "source": "W/cards/A2COST/uc104,7,52_95.log.log", + "sha256": "758baa20727796338ac21aa67e4bfd2c25473c205f202741c3618980a81c39e2", + "source_sha256": "758baa20727796338ac21aa67e4bfd2c25473c205f202741c3618980a81c39e2", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_7_54_93.log.txt", + "source": "W/cards/A2COST/uc104,7,54_93.log.log", + "sha256": "e4d11cbcedf93811313ae0565de622e80d76b86ea1ea2d7c58e09f5c2fb5105d", + "source_sha256": "e4d11cbcedf93811313ae0565de622e80d76b86ea1ea2d7c58e09f5c2fb5105d", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_9_44_103.log.txt", + "source": "W/cards/A2COST/uc104,9,44_103.log.log", + "sha256": "e374df440c644ffbc596885786005d029d68d9978a92dc516fd214bb3c55c745", + "source_sha256": "e374df440c644ffbc596885786005d029d68d9978a92dc516fd214bb3c55c745", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_9_47_100.log.txt", + "source": "W/cards/A2COST/uc104,9,47_100.log.log", + "sha256": "3fb1f7fc615e5a51be580f62223c03408d619c65c692ae145c54e0e458035cea", + "source_sha256": "3fb1f7fc615e5a51be580f62223c03408d619c65c692ae145c54e0e458035cea", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_9_49_98.log.txt", + "source": "W/cards/A2COST/uc104,9,49_98.log.log", + "sha256": "56d546c76681834ce00e46e90d6c8462d054b34ad6e2089cefb7a2d0342f886f", + "source_sha256": "56d546c76681834ce00e46e90d6c8462d054b34ad6e2089cefb7a2d0342f886f", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_9_50_97.log.txt", + "source": "W/cards/A2COST/uc104,9,50_97.log.log", + "sha256": "2ab36f35327c7db843bf454d1b2356472474ac42cd844ed66402bbecc9cc3c54", + "source_sha256": "2ab36f35327c7db843bf454d1b2356472474ac42cd844ed66402bbecc9cc3c54", + "identical": true + }, + { + "path": "evidence/logs/census/uc104_9_53_95.log.txt", + "source": "W/cards/A2COST/uc104,9,53_95.log.log", + "sha256": "1fb4228e2d51fe8f5224b7731394281153d773f20a478ef2263a9be7560390cd", + "source_sha256": "1fb4228e2d51fe8f5224b7731394281153d773f20a478ef2263a9be7560390cd", + "identical": true + }, + { + "path": "evidence/logs/census/ucensus_E8.log.txt", + "source": "W/cards/A2COST/ucensus_E8.log", + "sha256": "d68a08337fcbcb8cd7d09d2c05fb22ce2cb8b4e548d808f0a99368c34e2cecb1", + "source_sha256": "d68a08337fcbcb8cd7d09d2c05fb22ce2cb8b4e548d808f0a99368c34e2cecb1", + "identical": true + }, + { + "path": "evidence/logs/census/ucensus_P104.log.txt", + "source": "W/cards/A2COST/ucensus_P104.log", + "sha256": "88ab80a074809feab20194e5a55744afcf47519f7f44cd6800d567f0cd7bb612", + "source_sha256": "88ab80a074809feab20194e5a55744afcf47519f7f44cd6800d567f0cd7bb612", + "identical": true + }, + { + "path": "evidence/logs/census/ucensus_P112.log.txt", + "source": "W/cards/A2COST/ucensus_P112.log", + "sha256": "206eb9143de7da20e2e7d148993ed0ba5ece1e26b6506c9cf51c3109ef682030", + "source_sha256": "206eb9143de7da20e2e7d148993ed0ba5ece1e26b6506c9cf51c3109ef682030", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/E8_cegar2_gen.log.txt", + "source": "W/cards/HUNT-A2/E8/logs/cegar2_gen.log", + "sha256": "89de52e7bd1537d5a5dc737dfa6d8e80cf814257c2055c3574e203348d55802e", + "source_sha256": "89de52e7bd1537d5a5dc737dfa6d8e80cf814257c2055c3574e203348d55802e", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/E8_cegar72_gen.log.txt", + "source": "W/cards/HUNT-A2/E8/logs/cegar72_gen.log", + "sha256": "d5d24608ab5a114e992dc19dd62eb3a514f2cc1ff3fc2b73eb8eba0c71b61145", + "source_sha256": "d5d24608ab5a114e992dc19dd62eb3a514f2cc1ff3fc2b73eb8eba0c71b61145", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/E8_cegar72_s2.log.txt", + "source": "W/cards/HUNT-A2/E8/logs/cegar72_s2.log", + "sha256": "165880b605e438f8158f78b5fd5cc35871b171eada2e744c5e6b102e383f5752", + "source_sha256": "165880b605e438f8158f78b5fd5cc35871b171eada2e744c5e6b102e383f5752", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/E8_cegar_gen.log.txt", + "source": "W/cards/HUNT-A2/E8/logs/cegar_gen.log", + "sha256": "89de52e7bd1537d5a5dc737dfa6d8e80cf814257c2055c3574e203348d55802e", + "source_sha256": "89de52e7bd1537d5a5dc737dfa6d8e80cf814257c2055c3574e203348d55802e", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/E8_cegar_s2.log.txt", + "source": "W/cards/HUNT-A2/E8/logs/cegar_s2.log", + "sha256": "f0a5c0cb9b8b6cc8d449d7e2d74d16acfce1dc01c4b0c6564b3095cea7cafa2b", + "source_sha256": "f0a5c0cb9b8b6cc8d449d7e2d74d16acfce1dc01c4b0c6564b3095cea7cafa2b", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/E8_cegar_s4.log.txt", + "source": "W/cards/HUNT-A2/E8/logs/cegar_s4.log", + "sha256": "0cb510a5e44e9e2bc10c978a797de32726880f821359ee0da2d57081c1f2819f", + "source_sha256": "0cb510a5e44e9e2bc10c978a797de32726880f821359ee0da2d57081c1f2819f", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/E8_cegar_s6.log.txt", + "source": "W/cards/HUNT-A2/E8/logs/cegar_s6.log", + "sha256": "a6a8757f5ee03184a055420483558b62901d9712a09ce0923452d9f7f2a3212a", + "source_sha256": "a6a8757f5ee03184a055420483558b62901d9712a09ce0923452d9f7f2a3212a", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/E8_specall.log.txt", + "source": "W/cards/HUNT-A2/E8/specall.log", + "sha256": "2f92a6522c0fd280c3647f49660a637e635ad321477ec125e6cb98ba3cd9356e", + "source_sha256": "2f92a6522c0fd280c3647f49660a637e635ad321477ec125e6cb98ba3cd9356e", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/P104_specall.log.txt", + "source": "W/cards/HUNT-A2/P104/specall.log", + "sha256": "bc6feca1d153eeec757e1e620bab97a0bcef2ba34dcbc4e27d9eda86564d1fa9", + "source_sha256": "bc6feca1d153eeec757e1e620bab97a0bcef2ba34dcbc4e27d9eda86564d1fa9", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/P112_cegar64_gen.log.txt", + "source": "W/cards/HUNT-A2/logs/cegar64_gen.log", + "sha256": "3e41456af65a7ac37b19cbb66c333f1ed96603b89f6e8af416a26bc5c1173ff6", + "source_sha256": "3e41456af65a7ac37b19cbb66c333f1ed96603b89f6e8af416a26bc5c1173ff6", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/P112_cegar64_s2.log.txt", + "source": "W/cards/HUNT-A2/logs/cegar64_s2.log", + "sha256": "f7d43036555f03c34506f2b9806384733c92f0837edc17fb7893d9b655c8375f", + "source_sha256": "f7d43036555f03c34506f2b9806384733c92f0837edc17fb7893d9b655c8375f", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/P112_cegar_gen.log.txt", + "source": "W/cards/HUNT-A2/logs/cegar_gen.log", + "sha256": "b1a72b1080ae1d2140290a30452c4e8898a7679ebe63c55ea7423b0831b98d23", + "source_sha256": "b1a72b1080ae1d2140290a30452c4e8898a7679ebe63c55ea7423b0831b98d23", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/P112_cegar_s10.log.txt", + "source": "W/cards/HUNT-A2/logs/cegar_s10.log", + "sha256": "3a882044646c0d403bf222ca6f3021e8af8023622c99e27b12837e89602b5b9c", + "source_sha256": "3a882044646c0d403bf222ca6f3021e8af8023622c99e27b12837e89602b5b9c", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/P112_cegar_s2.log.txt", + "source": "W/cards/HUNT-A2/logs/cegar_s2.log", + "sha256": "9dde3396463e3303f164f5736107f0e5c90364a51592da4412af59bc4a50117e", + "source_sha256": "9dde3396463e3303f164f5736107f0e5c90364a51592da4412af59bc4a50117e", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/P112_cegar_s8.log.txt", + "source": "W/cards/HUNT-A2/logs/cegar_s8.log", + "sha256": "3b33591f230e5ed9456b9a04711a7b248d5a438f43853fbe722f562862af1642", + "source_sha256": "3b33591f230e5ed9456b9a04711a7b248d5a438f43853fbe722f562862af1642", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/P112_opt_gen.log.txt", + "source": "W/cards/HUNT-A2/logs/opt_gen.log", + "sha256": "ed3e32449be81329cfeacdaf5a424bdd97da0064c3240b19dcc87ea92fde10c1", + "source_sha256": "ed3e32449be81329cfeacdaf5a424bdd97da0064c3240b19dcc87ea92fde10c1", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/P112_opt_s10.log.txt", + "source": "W/cards/HUNT-A2/logs/opt_s10.log", + "sha256": "95ab1963bebc88d174e63079e3f1a0572d92183e58f74799787b084012dcfccb", + "source_sha256": "95ab1963bebc88d174e63079e3f1a0572d92183e58f74799787b084012dcfccb", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/P112_opt_s2.log.txt", + "source": "W/cards/HUNT-A2/logs/opt_s2.log", + "sha256": "b6648f8c4dbac603288722ff7d524e6a0d0eea6e4a14662571e0cbcfc2833d11", + "source_sha256": "b6648f8c4dbac603288722ff7d524e6a0d0eea6e4a14662571e0cbcfc2833d11", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/P112_opt_s8.log.txt", + "source": "W/cards/HUNT-A2/logs/opt_s8.log", + "sha256": "a949265d006a0474c398d77b38fe08de131c3db079798d17c4a35714fdd0a3b6", + "source_sha256": "a949265d006a0474c398d77b38fe08de131c3db079798d17c4a35714fdd0a3b6", + "identical": true + }, + { + "path": "evidence/logs/hunt-a2/P112_specall.log.txt", + "source": "W/cards/HUNT-A2/P112s/specall.log", + "sha256": "4d7ea64e129b8683ca2c78ba441cb172704479da1fb913e66b982d7191a9b410", + "source_sha256": "4d7ea64e129b8683ca2c78ba441cb172704479da1fb913e66b982d7191a9b410", + "identical": true + } + ], + "converted": [ + { + "path": "data/tie_P112.json", + "source": "W/cards/HUNT-A2/dec_tie64.pkl (pickle converted to JSON, Fractions as strings)", + "source_sha256": "07ff45b9f37151a70daeada4569b1601e9d4722e310950c9eaacf26318f13f77", + "sha256": "df0710817de0238a02bcb65db3c2a372e6982154de003de637e859a0100c40f0" + }, + { + "path": "data/tie_E8.json", + "source": "W/cards/HUNT-A2/E8/dec_e8tie.pkl (pickle converted to JSON)", + "source_sha256": "369a96b6b0003f9fc2b4676fe3a126e1ca1901dea162c6d0a51f488911156c9a", + "sha256": "a858a041d19ca31db35c3e5515596e94d9cc3b07fa8d6d5b82196de7946b5eba" + } + ], + "external": [ + { + "what": "working-card text read for this package (live files of the author, not shipped)", + "path": "W/cards/CONJB/THEORY.md", + "sha256": "97704de7113528a6bfc0cc4614b7fc767dd2414585b23206ff24b9c4bfa6b4a8" + }, + { + "what": "working-card text read for this package (live files of the author, not shipped)", + "path": "W/cards/A2COST/THEORY.md", + "sha256": "76b6e28575a6520061447d418dc0b026a1c983269a1fadba34b3889a3547b037" + }, + { + "what": "working-card text read for this package (live files of the author, not shipped)", + "path": "W/cards/HUNT-A2/NOTES.md", + "sha256": "59dbdd75fbdd8d6d4de453d802bef96e568102c26ffd792c73317e6307bd3000" + } + ] +} \ No newline at end of file diff --git a/research/a2-family-decoder-floors/checks/a2cert.py b/research/a2-family-decoder-floors/checks/a2cert.py new file mode 100644 index 0000000000..11c1dad3d0 --- /dev/null +++ b/research/a2-family-decoder-floors/checks/a2cert.py @@ -0,0 +1,42 @@ +# The A2 realisations are NOT of B-form (CONJB section 1.3), exact certificate on A2 members of UNIT. B-form: M = D1 G D2 + c beta^T with c_u beta_s = 0 on orthogonal pairs. +# Steps (see README): (1) the common non-orthogonal neighbourhood of Nbar[u] is {u} for every line u (exact); +# (2) Sigma = {u : dim N_u >= 2}, N_u = b(O_u)^perp, equals X; the rows off Sigma span 8 dimensions, so pi is unique and supp(A pi) = X; +# (3) rank b(union of O_u over u in X) = 9, so no nu exists. Also: deleting any single row leaves rank 9 (case "dim N_u = 1" of the proof). +# Ranks are computed mod p = 2^61-1 (a lower bound for the rank over Q; every inference uses only lower bounds, or upper bounds that hold by construction). +# Arguments: none = 3 random members (seeds as in a2fam.py logic); 'tie' = the special member of the tie decoder of the given unit (data/tie_.json). +import sys, json, os, random +from a2lib import * +from modrank import rkp +rk=lambda rows: rkp(rows) if rows else 0 +Nb=[[s for s in range(v) if Gm[u][s]!=0] for u in range(v)] +CN1=[[w for w in range(v) if all(Gm[w][s]!=0 for s in Nb[u])] for u in range(v)] +assert all(CN1[u]==[u] for u in range(v)), 'CN(Nbar[u]) != {u}' +print('PASS common non-orthogonal neighbourhood of Nbar[u] is {u} for all',v,'lines, unit',UNIT) +Ou=[[s for s in range(v) if Gm[u][s]==0] for u in range(v)] +def certify(M,label): + Mt=[list(c) for c in zip(*M)] + assert pattern_ok(M)==0 + r=rk(M); assert r==9, r + dimN=[9-rk([Mt[s] for s in Ou[u]]) for u in range(v)] + Sa=[u for u in range(v) if dimN[u]>=2] + off=[u for u in range(v) if u not in Sa] + r_off=rk([M[u] for u in off]) + r_minus1=min(rk([M[w] for w in range(v) if w!=u]) for u in range(v)) + assert r_minus1==9 + base=r_off + supp=[u for u in range(v) if rk([M[w] for w in off]+[M[u]])>base] + U=sorted(set(s for u in supp for s in Ou[u])); rU=rk([Mt[s] for s in U]) + print(' %s: rank %d, Sigma_a=%s, rank rows off Sigma_a=%d, min rank deleting one row=%d, supp(A pi)=%s, rank b(union O_u)=%d'%(label,r,Sa,r_off,r_minus1,supp,rU)) + assert sorted(Sa)==sorted(X) and r_off==8 and sorted(supp)==sorted(X) and rU==9 + print('PASS %s: not of B-form (rank b(union_{u in X} O_u) = 9, so no nu)'%label) +if len(sys.argv)>1 and sys.argv[1]=='tie': + D=json.load(open(os.path.join(os.path.dirname(os.path.abspath(__file__)),'..','data','tie_%s.json'%UNIT))) + th=tuple(Fr(x) for x in D['theta']); zX=tuple(Fr(x) for x in D['zX']) + A,B=build(th,zX); certify(Mof(A,B),'tie-decoder member %s'%UNIT) +else: + rnd=random.Random(1); good=0 + while good<3: + th=tuple(Fr(rnd.randint(-9,9)) for _ in range(4)); zX=tuple(Fr(rnd.randint(-50,50),rnd.randint(1,7)) for _ in range(3)) + A,B=build(th,zX); M=Mof(A,B) + if pattern_ok(M)!=0: continue + good+=1; certify(M,'member %d'%good) diff --git a/research/a2-family-decoder-floors/checks/a2cls.py b/research/a2-family-decoder-floors/checks/a2cls.py new file mode 100644 index 0000000000..e53c9db85c --- /dev/null +++ b/research/a2-family-decoder-floors/checks/a2cls.py @@ -0,0 +1,51 @@ +# Class-level catalogue of an A2 triangle (UNIT env, A2TRI env), shared by mergedkill.py and iib.py. +# A column normal (f,1) kills a label class O iff (f,1).b_s = 0 for every s in O. Off X, b_s = (r_s, -gamma_i (r_1.r_s)) on O_{u_i} (gamma_1 = 0); on X, b_{u_i} = (r_i, zeta_i). +# info(U) = (dim S, dim K, dim S - dim K) for the line set U off X, S = {(w, g2, g3): r_s.w = g_i (r_1.r_s) on U}, K = {g = 0}: the same quantity as unitcensus.py (the census is the recorded reference). +from a2lib import * +Xs = list(X) +p = 2**31 - 1 +def rkp(M, n): + # Rank mod p = 2^31 - 1. EXACT here, not only a lower bound: every row used has integer entries (E8 roots doubled: entries <= 2 in absolute value; the g-entry r_1.s doubled twice: <= 4) + # and at most 10 columns; a row has at most 8 doubled-root coordinates (squared norm 8) plus ONE g-entry (squared <= 16), so squared norm <= 24, and by Hadamard every minor has absolute + # value <= 24^(10/2) = 24^5 < 8.0e6 < 2^31 - 1: a minor is nonzero mod p iff it is nonzero over Z. + M = [[x % p for x in r] for r in M]; r = 0 + for c in range(n): + q = next((i for i in range(r, len(M)) if M[i][c]), None) + if q is None: continue + M[r], M[q] = M[q], M[r]; inv = pow(M[r][c], p - 2, p); M[r] = [x * inv % p for x in M[r]] + for i in range(len(M)): + if i != r and M[i][c]: + f = M[i][c]; M[i] = [(a - f * b) % p for a, b in zip(M[i], M[r])] + r += 1 + return r +Ri = [[int(2 * x) for x in r] for r in L]; r1i = Ri[Xs[0]] +idot = lambda a, b: sum(x * y for x, y in zip(a, b)) +rowsg = {} +for s in range(v): + if s in Xs: continue + ii = [i for i in range(3) if idot(Ri[Xs[i]], Ri[s]) == 0]; i = ii[0]; g = [0, 0]; c = idot(r1i, Ri[s]) + if len(ii) > 1: assert c == 0 + if i == 1: g[0] = -c + if i == 2: g[1] = -c + assert max(abs(x) for x in Ri[s] + g) <= 4 and sum(1 for x in g if x) <= 1 + rowsg[s] = Ri[s] + g +def info(U): + M = [rowsg[s] for s in U]; r = rkp(M, 10); rg = rkp([x[:8] for x in M], 8) + dimS = 10 - r; dimK = 8 - rg; return dimS, dimK, dimS - dimK +single = {co: info([s for s in bits(w) if s not in Xs]) for co, w in cls.items()} +gen = [co for co in cls if single[co][2] == 2] # generic-gamma killable classes +Mg = [c for c in gen if len([t for t in bits(cls[c]) if t in Xs]) == 2]; Tg = [c for c in gen if c not in Mg] +assert len(gen) == 6 and len(Mg) == 3 and len(Tg) == 3 +# row-deficient classes: |O cap X| >= 1 and rank r(O \ X) = 7 +rowdef = [] +for co, w in cls.items(): + Ob = bits(w) + if not any(t in Xs for t in Ob): continue + if rank([R[t] for t in Ob if t not in Xs], 8) == 7: rowdef.append(co) +# eta = 0 column killers (the "survivor" classes): r-rank 7 off X and every X-column orthogonal to the normal +colS = [] +for co in rowdef: + Ob = bits(cls[co]); n = nullspace([R[t] for t in Ob if t not in Xs], 8)[0] + if all(dot(R[t], n) == 0 for t in Ob if t in Xs): colS.append(co) +assert not [c for c in colS if c in Tg] +def sup_avoid(cl): return [u for u in range(v) if not any((cls[a] >> u) & 1 for a in cl)] diff --git a/research/a2-family-decoder-floors/checks/a2fam.py b/research/a2-family-decoder-floors/checks/a2fam.py new file mode 100644 index 0000000000..02c8b6eb9d --- /dev/null +++ b/research/a2-family-decoder-floors/checks/a2fam.py @@ -0,0 +1,25 @@ +# The A2 family (CONJB section 1): exact construction of rank-9 realisations of the iff pattern on P112 / P104 / E8 (UNIT env). +# rows a_u = (r_u, 0) off X, a_{u_i} = (r_i + g_i, 1); cols b_s = (r_s, z_s), z_s = -g_i . r_s on O_{u_i}, z free on X. +# Checks (all exact over Q): (i) every line off X is orthogonal to a line of X (section 1.1(b)); (ii) the zeros of M = A B^T are exactly the orthogonal pairs +# and the diagonal is nonzero (the iff pattern); (iii) rank M = 9 (A and B have exact rank 9 and M = A B^T); (iv) M equals the Gram matrix off the three rows X. +import random +from a2lib import * +print('unit',UNIT,'lines',v,'A2 triangle X',list(X)) +assert all(Gm[X[i]][X[j]]!=0 for i in range(3) for j in range(3) if i!=j) +assert all(any(Gm[x][s]==0 for x in X) for s in range(v) if s not in X) +print('PASS (i) every line off X is orthogonal to some line of X') +E6=[s for s in range(v) if all(Gm[x][s]==0 for x in X)] +assert all(set(O[i])&set(O[j])==set(E6) for i in range(3) for j in range(3) if i>i&1: w^=basis[i] + cls[co]=w +else: + L,v,G,frames,nbar,h,basis,cls=load(UNIT) +Brows=B0rows(L) +def nullspace(rows,n): + A=[list(map(Fr,r)) for r in rows]; piv=[]; r=0 + for c in range(n): + p=next((i for i in range(r,len(A)) if A[i][c]!=0),None) + if p is None: continue + A[r],A[p]=A[p],A[r]; pv=A[r][c]; A[r]=[x/pv for x in A[r]] + for i in range(len(A)): + if i!=r and A[i][c]!=0: + f=A[i][c]; A[i]=[a-f*b for a,b in zip(A[i],A[r])] + piv.append(c); r+=1 + if r==len(A): break + free=[c for c in range(n) if c not in piv]; out=[] + for f in free: + x=[Fr(0)]*n; x[f]=Fr(1) + for i,c in enumerate(piv): x[c]=-A[i][f] + out.append(x) + return out +def rank(rows,n): return n-len(nullspace(rows,n)) +def bits(m): return [i for i in range(v) if m>>i&1] +R=[[Fr(x) for x in r] for r in L] +dot=lambda x,y: sum(a*b for a,b in zip(x,y)) +def find_a2_first(): + for i in range(v): + for j in range(i+1,v): + g=dot(R[i],R[j]) + if g==0: continue + s=1 if g>0 else -1 + w=[a-s*b for a,b in zip(R[i],R[j])] + for k in range(v): + if k in(i,j): continue + if w==R[k] or w==[-x for x in R[k]]: return [i,j,k] + +def all_a2(): + out=set() + for i in range(v): + for j in range(i+1,v): + g=dot(R[i],R[j]) + if g==0: continue + s=1 if g>0 else -1 + w=[a-s*b for a,b in zip(R[i],R[j])] + for k in range(v): + if k in(i,j): continue + if w==R[k] or w==[-x for x in R[k]]: out.add(tuple(sorted((i,j,k)))) + return sorted(out) +def find_a2(): + if os.environ.get('A2TRI'): return list(map(int,os.environ['A2TRI'].split(','))) + sd=os.environ.get('A2SEED') + if not sd: return find_a2_first() + import random + T=all_a2(); t=random.Random(int(sd)).choice(T); return list(t) + +# ---- A2-family realisations and decoder evaluation (HUNT-A2) ---- +Gm=[[dot(R[i],R[j]) for j in range(v)] for i in range(v)] +X=tuple(find_a2()) +r1,r2,r3=R[X[0]],R[X[1]],R[X[2]] +O=[[s for s in range(v) if Gm[X[i]][s]==0] for i in range(3)] +def gvecs(th): + al2,be2,al3,be3=th + return [[Fr(0)]*8,[al2*a+be2*b for a,b in zip(r1,r2)],[al3*a+be3*b for a,b in zip(r1,r2)]] +def build(th,zX): + g=gvecs(th); z=[None]*v + for s in range(v): + vals=set(-dot(g[i],R[s]) for i in range(3) if Gm[X[i]][s]==0) + assert len(vals)<=1 + z[s]=vals.pop() if vals else None + for i in range(3): z[X[i]]=Fr(zX[i]) + assert all(x is not None for x in z) + A=[R[s]+[Fr(0)] for s in range(v)] + for i in range(3): A[X[i]]=[a+b for a,b in zip(R[X[i]],g[i])]+[Fr(1)] + B=[R[s]+[z[s]] for s in range(v)] + return A,B +def Mof(A,B): return [[dot(A[i],B[j]) for j in range(v)] for i in range(v)] +def pattern_ok(M): + return sum(1 for i in range(v) for j in range(v) if (M[i][j]==0)!=(Gm[i][j]==0 and i!=j)) +def inv(Mx): + n=len(Mx); A=[list(map(Fr,r))+[Fr(int(i==j)) for j in range(n)] for i,r in enumerate(Mx)] + for c in range(n): + p=next((i for i in range(c,n) if A[i][c]!=0),None) + if p is None: return None + A[c],A[p]=A[p],A[c]; pv=A[c][c]; A[c]=[x/pv for x in A[c]] + for i in range(n): + if i!=c and A[i][c]!=0: + f=A[i][c]; A[i]=[a-f*b for a,b in zip(A[i],A[c])] + return [r[n:] for r in A] +def evaluate(A,B,xs,check=True): + """xs: 9 row normals (list of 9-vectors). Returns (cost, per-term costs, supports). Exactness checked exactly.""" + Xm=[[xs[j][k] for j in range(9)] for k in range(9)] # columns = x_j + Xi=inv(Xm) + if Xi is None: return None + # Y = X^{-T}: y_j = column j of X^{-T} = row j of X^{-1} + ys=[Xi[j] for j in range(9)] + P=[[dot(A[u],xs[j]) for j in range(9)] for u in range(v)] + Q=[[dot(B[s],ys[j]) for j in range(9)] for s in range(v)] + if check: + M=Mof(A,B) + for u in range(v): + for s in range(v): + assert sum(P[u][j]*Q[s][j] for j in range(9))==M[u][s] + costs=[]; sup=[] + for j in range(9): + Rj=[u for u in range(v) if P[u][j]!=0]; Aj=[s for s in range(v) if Q[s][j]!=0] + costs.append(blk(Brows,Rj,Aj) if Rj and Aj else 0); sup.append((Rj,Aj)) + return sum(costs),costs,sup,ys +def catalogue(A,B): + out={} + for co,w in cls.items(): + Os=bits(w) + nr=nullspace([A[t] for t in Os],9); nc=nullspace([B[t] for t in Os],9) + if nr or nc: out[co]=(len(Os),nr,nc) + return out diff --git a/research/a2-family-decoder-floors/checks/census_facts.py b/research/a2-family-decoder-floors/checks/census_facts.py new file mode 100644 index 0000000000..520a87d9dc --- /dev/null +++ b/research/a2-family-decoder-floors/checks/census_facts.py @@ -0,0 +1,34 @@ +# Assertions on the output of unitcensus.py (one or more files): python census_facts.py FILE... (unit and triangle are read from the header line) +# Facts (A2COST section 2): (R) rows: the 63 X-avoiding classes have rank r(O) = 8; the other row-deficient classes are those with |O cap X| = 1, or O cap X = X, and rank r(O \ X) = 7; +# there are 11 (P112) / 19 (P104) / 3 (E8); each has a 1-dim nullspace and the normals are pairwise distinct. +# (S) spans: r(O_{u_i} \ (E6 u X)) spans r_i^perp (rank 7); no line off X is non-orthogonal to all of X. +# (C) columns, generic gamma: exactly six killable classes, three 'sixty' classes (|O cap X| = 1) and three 'merged' classes (|O cap X| = 2); exactly three co-killable triples {merged_ij, sixty_i, sixty_j}, no other triple. +import sys, re, ast +from fractions import Fraction as Fr +EXP={'P112':11,'P104':19,'E8':3} +def norm(x): + x=[Fr(a) for a in x]; i=next(k for k in range(8) if x[k]!=0); return tuple(a/x[i] for a in x) +for fn in sys.argv[1:]: + T=open(fn).read().split('\n') + m=re.match(r'(\w+) v (\d+) X \[([\d, ]+)\]',T[0]); unit=m.group(1); X=tuple(map(int,m.group(3).split(','))) + spans=[l for l in T if l.startswith(' span O_u')] + assert len(spans)==3 and all(l.strip()=='span O_u\\E6 7 (7) lines non-orth to all of X off X: 0' for l in spans) + rc=ast.literal_eval(next(l for l in T if l.startswith('row census')).split(':',1)[1].strip()) + rc=dict(rc); assert rc[(0,8)]==63 and (0,7) not in rc and (2,7) not in rc + r7=sum(c for (s,r),c in rc.items() if r==7); assert r7==EXP[unit],(unit,r7) + rows=[ast.literal_eval(l.split('rank<8:')[1].strip()) for l in T if 'rank<8:' in l] + assert len(rows)==r7 and all(isinstance(r[3],list) for r in rows) # 1-dim nullspaces + nrm=[norm(r[3]) for r in rows]; assert len(set(nrm))==len(nrm) # pairwise distinct normals + assert all((len(r[1])==1 or tuple(r[1])==tuple(sorted(X))) for r in rows) + gk=ast.literal_eval(next(l for l in T if l.startswith('generic-gamma killable')).split(':',1)[1].strip()) + assert len(gk)==6 and sorted(len(g[2]) for g in gk)==[1,1,1,2,2,2] + sixty={g[0] for g in gk if len(g[2])==1}; merged={g[0] for g in gk if len(g[2])==2} + assert all(g[3]==((3,1,2) if len(g[2])==1 else (2,0,2)) for g in gk) + ck=ast.literal_eval(next(l for l in T if l.startswith('co-killable 2-dim')).split(':',1)[1].strip()) + assert len(ck)==3 + for a,b,c,t in ck: + assert a^b==c and t==(2,0,2) and len({a,b,c}&merged)==1 and len({a,b,c}&sixty)==2 + tri=[l for l in T if l.startswith(' 3 gen classes co-killable')] + assert len(tri)==3, len(tri) # no further co-killable triple + ng=int(re.search(r'Gram-deficient \(eta=0\) classes: (\d+)',"\n".join(T)).group(1)); assert ng==EXP[unit] + print('PASS census facts %s triangle %s: %d row-deficient classes (1-dim, distinct normals), 6 killable column classes, 3 co-killable triples'%(unit,list(X),r7)) diff --git a/research/a2-family-decoder-floors/checks/cert2.py b/research/a2-family-decoder-floors/checks/cert2.py new file mode 100644 index 0000000000..1b5f406700 --- /dev/null +++ b/research/a2-family-decoder-floors/checks/cert2.py @@ -0,0 +1,50 @@ +# Support-propagation certificate (IDEAL3 §2). A class O is deficient in a rank-T realisation iff some h* != 0 kills p0(O). +# For every T-frame E write h* = sum_e c_e q0(e). Facts (any realisation of the zero pattern, rank T): +# (1) c_e = 0 for e in E ∩ O (h*(p0(e)) = c_e M_ee). +# (2) if supp_E(c) ⊆ S_E then h* ∈ span q0(S_E), and q0(e) has E'-support ⊆ Nbar(e) ∩ E' (Nbar = non-orthogonal or equal), +# so supp_{E'}(c) ⊆ ∪_{e∈S_E} Nbar(e). +# Iterate to a fixed point; any S_E = ∅ certifies O non-deficient (in every rank-T realisation). +import sys, pickle +from lib2 import * +from frames import colspace_vectors +from frames_data import load_frames +def setup(L,T): + v=len(L); G=Gmat(L) + og=nx.Graph(); og.add_nodes_from(range(v)); og.add_edges_from((t,s) for t in range(v) for s in range(t+1,v) if G[t][s]==0) + frames=[sum(1<>i&1: w^=basis[i] + classes.append(w) + res=[] + for O in classes: + S=propagate(O,frames,nbar,v) + res.append((O,min(bin(s).count('1') for s in S))) + unc=[(O,m) for O,m in res if m>0] + print(name,"frames",len(frames),"classes",len(classes),"uncertified",len(unc),"sizes",sorted(set(bin(O).count('1') for O,_ in unc)),flush=True) + return unc +if __name__=="__main__": + F0, F1 = load_frames() + P112=[E8[i] for i in range(120) if i not in set(F0)] + P104=[E8[i] for i in range(120) if i not in set(F0)|set(F1)] + for name,L,T in [('D4',D4,4),('D6',D6,6),('E7',E7,7),('P112',P112,8),('P104',P104,8),('E8',E8,8)]: + analyse(name,L,T) diff --git a/research/a2-family-decoder-floors/checks/common2.py b/research/a2-family-decoder-floors/checks/common2.py new file mode 100644 index 0000000000..b0c90e7345 --- /dev/null +++ b/research/a2-family-decoder-floors/checks/common2.py @@ -0,0 +1,19 @@ +import sys +from lib import lines, dn, dot, e8_roots +from fractions import Fraction as Fr +def orth_sub(L,vs): return [r for r in L if all(dot(r,x)==0 for x in vs)] +def rank_f2(rows): + basis=[] + for r in rows: + x=r + for b in basis: x=min(x,x^b) + if x: basis.append(x) + return len(basis) +E8=lines(e8_roots()); r0=E8[0]; r1=next(r for r in E8 if dot(r,r0) in (1,-1)) +E7=orth_sub(E8,[r0]); E6=orth_sub(E8,[r0,r1]); D5=lines(dn(5)); D4=lines(dn(4)); D6=lines(dn(6)) +def Gmat(L): return [[int(dot(a,b)) for b in L] for a in L] +def B0rows(L): + G=Gmat(L); v=len(L) + return [sum((1<>s&1) for t in R]) diff --git a/research/a2-family-decoder-floors/checks/exact_opt.py b/research/a2-family-decoder-floors/checks/exact_opt.py new file mode 100644 index 0000000000..e3499e2ef7 --- /dev/null +++ b/research/a2-family-decoder-floors/checks/exact_opt.py @@ -0,0 +1,22 @@ +# Exact optimum over square (9-term) decoders of ONE fixed A2-family member (duality branch-and-bound over the catalogue of deficiency directions, opt3u.py). +# Every deficiency space of these members is 1-dim (asserted), so the candidate directions are exactly the catalogue directions and the search is complete for that member (HUNT-A2 notes, section 1); +# pairwise duality (x_i . y_j = 0 unpaired, != 0 paired) and independence of the chosen row / column directions are enforced exactly at the point. +# usage: UNIT=P112|P104|E8 python exact_opt.py gen|tie THRESHOLD gen: first random member with the exact iff pattern; tie: the member of data/tie_.json. +import os, sys, json, random, io, contextlib +os.environ['NDIM']='9'; os.environ['NT']='9' +from a2lib import * +import opt3u +mode=sys.argv[1]; thr=int(sys.argv[2]) +if mode=='tie': + D=json.load(open(os.path.join(os.path.dirname(os.path.abspath(__file__)),'..','data','tie_%s.json'%UNIT))); th=tuple(Fr(x) for x in D['theta']); zX=tuple(Fr(x) for x in D['zX']) +else: + rnd=random.Random(1) + while True: + th=tuple(Fr(rnd.randint(-9,9)) for _ in range(4)); zX=tuple(Fr(rnd.randint(-50,50),rnd.randint(1,7)) for _ in range(3)) + if pattern_ok(Mof(*build(th,zX)))==0: break +A,B=build(th,zX); assert pattern_ok(Mof(A,B))==0 +out=catalogue(A,B); assert all(len(x[1])<=1 and len(x[2])<=1 for x in out.values()) +buf=io.StringIO() +with contextlib.redirect_stdout(buf): + r=opt3u.run(list(X),[],[0]*v,[0]*v,out,thr,verbose=False,PH=(A,B)) +print('RESULT',UNIT,mode,'theta',[str(x) for x in th],'zX',[str(x) for x in zX],'exact square optimum',r) diff --git a/research/a2-family-decoder-floors/checks/floors.py b/research/a2-family-decoder-floors/checks/floors.py new file mode 100644 index 0000000000..a1313d1d79 --- /dev/null +++ b/research/a2-family-decoder-floors/checks/floors.py @@ -0,0 +1,71 @@ +# Row-puncture floors P_k and the Case I / Case II arithmetic (A2COST sections 2-4), UNIT env: P112 | P104 | E8. +# P_k := minimum cost of an 8-term (square, dimension 8) decoder of the Gram matrix with the rows of Z (subset of the triangle X, |Z| = k) deleted (zeroed). +# P112, P104: exact duality branch-and-bound over the catalogue of deficiency directions (opt3u.py; complete because every candidate space is 1-dim). +# E8: no column-deficient classes; the row-deficient classes of the punctured Gram are exactly |Z| classes with 1-dim nullspace and normal r_i (i in Z), and r_1, r_2, r_3 span only 2 dimensions +# (the E8 near-miss, README remark); then each term costs >= 9 except at most rank{r_i : i in Z} terms with row normal parallel to some r_i (cost >= 8): P_k >= 72 - rank{r_i : i in Z}. +# Then the case arithmetic (README section 5): Case I (some x_j parallel to e_9) and Case II (no x_j parallel to e_9). +import os, io, contextlib, itertools +os.environ['NDIM']='8'; os.environ['NT']='8' +from a2lib import * +Xt=list(X); print(UNIT,'lines',v,'triangle X',Xt) +P={} +def punctured(Z): + ph=[([0]*8 if u in Z else list(L[u])) for u in range(v)]; qh=[list(L[u]) for u in range(v)] + out={} + for co,w in cls.items(): + Oc=bits(w); nr=nullspace([ph[u] for u in Oc],8); nc=nullspace([qh[u] for u in Oc],8) + if nr or nc: out[co]=(len(Oc),nr,nc) + return ph,qh,out +for k in range(4): + vals=[] + for Z in itertools.combinations(Xt,k): + ph,qh,out=punctured(Z) + if UNIT in ('P112','P104'): + import opt3u + buf=io.StringIO() + with contextlib.redirect_stdout(buf): + r=opt3u.run(list(Z),[],[0]*v,[0]*v,out,80,verbose=False,PH=(ph,qh)) + assert r is not None and all(len(x[1])<=1 and len(x[2])<=1 for x in out.values()) + vals.append(r) + else: + rowdef=[(co,x) for co,x in out.items() if x[1]]; coldef=[x for x in out.values() if x[2]] + assert not coldef and len(rowdef)==k and all(len(x[1])==1 for _,x in rowdef) + def norm(x): + i=next(a for a in range(8) if x[a]!=0); return tuple(c/x[i] for c in x) + normals=sorted(norm(x[1][0]) for _,x in rowdef) + assert normals==sorted(norm(R[u]) for u in Z) # the normals are the roots r_i, i in Z + vals.append(8*9-rank([R[u] for u in Z],8)) # the bound P_k >= 72 - rank{r_i : i in Z} + P[k]=min(vals) + print('P_%d = %d (over the %d subsets Z of X of size %d: %s)'%(k,P[k],len(vals),k,sorted(set(vals)))) +if UNIT=='E8': + assert rank([R[u] for u in Xt],8)==2 + print('PASS E8: r_1, r_2, r_3 span only 2 dimensions') +EXP_P={'P112':{0:64,1:63,2:62,3:62},'P104':{0:56,1:56,2:56,3:56},'E8':{0:72,1:71,2:70,3:70}}[UNIT] +assert P==EXP_P, (P,EXP_P) +print('PASS floors',UNIT,P) +# B[X,s] for s in O_{u_i} \ (E6 u X) is the unit vector e_i (convention B[t,s] = 1 iff t = s or t orthogonal to s); this is what makes cost_0 >= |T| (Case I) and cost_0 >= |Z| (Case II(a)). +E6=[s for s in range(v) if all(Gm[x][s]==0 for x in Xt)] +for i in range(3): + Sset=[s for s in O[i] if s not in E6 and s not in Xt] + assert {tuple((Brows[x]>>s)&1 for x in Xt) for s in Sset}=={tuple(int(a==i) for a in range(3))} +print('PASS B[X,s] = e_i for every s in O_{u_i} minus (E6 and X)') +# ---- Case I (some x_j parallel to e9): T = {i : w_i not in }; cost_0 >= rank{e_i : i in T} = |T|; the other eight terms decode a Gram with the rows Z (T <= Z, |Z| <= 3) deleted or enlarged. +# |T| <= 1: the rows outside T are honest (pattern), so |Z| = |T|; |T| = 2: |Z| in {2,3}; |T| = 3: |Z| = 3. +caseI={0:P[0],1:1+P[1],2:2+min(P[2],P[3]),3:3+P[3]} +# ---- Case II (a): some y_j has A_j inside X (cocycle frame y_j = e_9): cost_0 >= |Z| and the other eight terms are a Gram decoder with the columns Z punctured/enlarged: total >= min_k (k + P_k) +caseIIa=min(k+P[k] for k in range(4)) +# ---- Case II (b): exact class-level min-cost relaxation (iib.py), no e9 row, each catalogue direction used at most once per side. Off the B-locus (gamma2 != gamma3) at most ONE merged class is column-killable +# (mergedkill.py, CHECKED); on the B-locus none. II(b) = min(off, on) = the off-locus value (65 / 62 / 74 vs 66 / 63 / 75 on the locus). +from iib import relaxations +_r = relaxations([9]) +caseIIb = min(_r['off'][9], _r['on'][9]) +print('Case II(b) relaxation: off B-locus', _r['off'][9], ' on B-locus', _r['on'][9]) +assert caseIIb == {'P112': 65, 'P104': 62, 'E8': 74}[UNIT] +caseII=min(caseIIa,caseIIb) +FLOOR={'P112':64,'P104':56,'E8':72}[UNIT] +print('Case I totals by |T|:',caseI,'-> Case I floor',min(caseI.values())) +print('Case II: (a)',caseIIa,' (b)',caseIIb,'-> Case II floor',caseII) +assert min(caseI.values())==FLOOR and caseII>=FLOOR +overall=min(min(caseI.values()),caseII) +print('PASS case arithmetic %s: every square decoder of every A2-family member costs >= %d (Case I %d, Case II >= %d)'%(UNIT,overall,min(caseI.values()),caseII)) +assert overall==FLOOR diff --git a/research/a2-family-decoder-floors/checks/frames.py b/research/a2-family-decoder-floors/checks/frames.py new file mode 100644 index 0000000000..9c6da9e261 --- /dev/null +++ b/research/a2-family-decoder-floors/checks/frames.py @@ -0,0 +1,38 @@ +# Realisation-free deficiency test (Theorem 4'): for every label class O_z (= support of a nonzero vector in col(B), B = dense J+Abar, +# symmetric so row and column classes coincide), does O_z contain an orthogonal T-frame? If yes for all z, no realisation of the +# pattern of rank T can have a deficient direction, so every term has full rank h under dense B. +import sys, pickle, itertools +from lib2 import * +def colspace_vectors(Brows,v): + basis=[] # gaussian elimination over F2 on rows (B symmetric => row space = column space) + piv=[] + for r in Brows: + x=r + for b,p in zip(basis,piv): + if x>>p&1: x^=b + if x: + p=x.bit_length()-1 + for i in range(len(basis)): + if basis[i]>>p&1: basis[i]^=x + basis.append(x); piv.append(p) + return basis +def run(name,L,T,live=None): + if live is not None: L=[L[i] for i in live] + v=len(L); G=Gmat(L); Brows=B0rows(L) + basis=colspace_vectors(Brows,v); h=len(basis) + og=nx.Graph(); og.add_nodes_from(range(v)); og.add_edges_from((t,s) for t in range(v) for s in range(t+1,v) if G[t][s]==0) + frames=[frozenset(c) for c in nx.find_cliques(og) if len(c)>=T] + alpha=max(len(c) for c in nx.find_cliques(og)) + fmasks=[sum(1<>i&1: w^=basis[i] + if not any((fm & ~w)==0 for fm in fmasks): bad.append(w) + sizes=sorted(set(bin(w).count('1') for w in bad)) + print(name,"v",v,"T",T,"h",h,"alpha_orth",alpha,"#T-frames",len(frames),"classes without a T-frame:",len(bad),"sizes",sizes,flush=True) + return bad +if __name__=="__main__": + for name,L,T in [('D4',D4,4),('D5',D5,5),('D6',D6,6),('E6',E6,6),('E7',E7,7),('E8',E8,8)]: + run(name,L,T) diff --git a/research/a2-family-decoder-floors/checks/frames_data.py b/research/a2-family-decoder-floors/checks/frames_data.py new file mode 100644 index 0000000000..1a31180974 --- /dev/null +++ b/research/a2-family-decoder-floors/checks/frames_data.py @@ -0,0 +1,21 @@ +# Loads the two orthogonal frames F0 (removed for P112) and F1 (additionally removed for P104) from ../data/p104_frames.json and re-derives +# their indices in the E8 line list from the explicit vectors (asserts the stored indices agree as sets). +import json, os +from fractions import Fraction as Fr +from lib import lines, e8_roots, dot +def load_frames(): + d = json.load(open(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'data', 'p104_frames.json'))) + E8 = lines(e8_roots()) + def canon(x): + for c in x: + if c != 0: return tuple(x) if c > 0 else tuple(-y for y in x) + idx = {canon(r): i for i, r in enumerate(E8)} + def vec(*pairs): + r = [Fr(0)] * 8 + for i, s in pairs: r[i] = Fr(s) + return r + F0 = [idx[canon(vec((2 * a, 1), (2 * a + 1, 1)))] for a in range(4)] + [idx[canon(vec((2 * a, 1), (2 * a + 1, -1)))] for a in range(4)] + F1 = [idx[canon([Fr(x, 2) for x in w])] for w in d['F1_vectors_x2']] + assert F0 == d['F0_idx'] and set(F1) == set(d['F1_idx']) and len(set(F0) | set(F1)) == 16 + for F in (F0, F1): assert all(dot(E8[a], E8[b]) == 0 for a in F for b in F if a != b) + return list(F0), list(d['F1_idx']) diff --git a/research/a2-family-decoder-floors/checks/iib.py b/research/a2-family-decoder-floors/checks/iib.py new file mode 100644 index 0000000000..049a383045 --- /dev/null +++ b/research/a2-family-decoder-floors/checks/iib.py @@ -0,0 +1,32 @@ +# Class-level min-cost relaxation for Case II(b) (m' = 9) and for m' >= 10 (README 5.3, 7.2). usage (as a module): from iib import relaxations +# A term pairs a row direction (its kill set = the label classes it kills; row directions = the row-deficient classes, one normal each; e9 = the row X; "full" = a direction killing nothing, unlimited) +# with a column direction; its cost is rank_F2 B[R, A] with R, A the supports avoiding the killed classes (exact rank formula). Each catalogue direction is used at most once per side (merge lemma, +# non-parallel normals); the relaxation drops duality / independence and is solved by exact min-cost flow. Column directions available: +# S: the eta = 0 killers colS; T: the three triangle classes (each its unique killer); M: off the B-locus (gamma2 != gamma3) AT MOST ONE merged class (mergedkill.py), alone or merged with the T_i, T_j it +# co-kills. On the B-locus (gamma2 = gamma3) no M is killable by a direction with the rest of S, T: a column normal there kills at most one of the 11/19/3 classes: S + T only. +from a2cls import * +import networkx as nx +def solve(rows, cols, mt): + f = [[blk(Brows, a, b) for b in cols + [list(range(v))]] for a in rows + [list(range(v))]] + nr, nc = len(rows), len(cols) + G = nx.DiGraph(); G.add_node('s', demand=-mt); G.add_node('t', demand=mt) + for i in range(nr + 1): G.add_edge('s', ('r', i), capacity=1 if i < nr else mt, weight=0) + for j in range(nc + 1): G.add_edge(('c', j), 't', capacity=1 if j < nc else mt, weight=0) + for i in range(nr + 1): + for j in range(nc + 1): G.add_edge(('r', i), ('c', j), capacity=mt, weight=f[i][j]) + return nx.min_cost_flow_cost(G) +def relaxations(mts): + """returns {'off': {mt: min over off-locus column options}, 'on': {mt: B-locus value}} for Case II rows (no e9), and the same with the e9 row for m' >= 10 ('off9', 'on9').""" + rows2 = [sup_avoid([a]) for a in rowdef] + rows9 = rows2 + [Xs] + base = [sup_avoid([c]) for c in colS] + [sup_avoid([t]) for t in Tg] + out = {'off': {}, 'on': {}, 'off9': {}, 'on9': {}} + for mt in mts: + opts = [] + for m in Mg: + ts = [t for t in Tg if (t ^ m) in Tg]; tk = [t for t in Tg if t not in ts] + opts.append(('T+singleM', m, lambda rows, m=m: solve(rows, base + [sup_avoid([m])], mt))) + opts.append(('merged+Tk', m, lambda rows, m=m, ts=ts, tk=tk: solve(rows, [sup_avoid([c]) for c in colS] + [sup_avoid([m] + ts)] + [sup_avoid([t]) for t in tk], mt))) + out['on'][mt] = solve(rows2, base, mt); out['on9'][mt] = solve(rows9, base, mt) + out['off'][mt] = min(o[2](rows2) for o in opts); out['off9'][mt] = min(o[2](rows9) for o in opts) + return out diff --git a/research/a2-family-decoder-floors/checks/iib_check.py b/research/a2-family-decoder-floors/checks/iib_check.py new file mode 100644 index 0000000000..a3c3ad809c --- /dev/null +++ b/research/a2-family-decoder-floors/checks/iib_check.py @@ -0,0 +1,11 @@ +# Case II(b) exact relaxation (m' = 9, no e9 row) and the m >= 10 relaxation (with e9 row), off and on the B-locus. usage: UNIT=... [A2TRI=a,b,c] python iib_check.py +# Expected (README): II(b) off the locus >= 65 / 62 / 74 (P112 / P104 / E8), on the locus 66 / 63 / 75; m' >= 10 off the locus >= 68 / 64 / 77 (monotone in m': removing a term never raises the cost). +from iib import * +EXP = {'P112': (65, 66, 68), 'P104': (62, 63, 64), 'E8': (74, 75, 77)}[UNIT] +res = relaxations(range(9, 14)) +print(UNIT, 'X', Xs, 'II(b) relaxation (m\'=9, no e9): off B-locus', res['off'][9], ' on B-locus', res['on'][9]) +print(UNIT, 'm\' >= 10 relaxation with e9 row: off', res['off9'], ' on', res['on9']) +assert res['off'][9] == EXP[0] and res['on'][9] == EXP[1], (res['off'][9], res['on'][9], EXP) +off10 = min(res['off9'][m] for m in range(10, 14)); assert res['off9'][10] == off10 == EXP[2], (res['off9'], EXP) +assert all(res['off9'][m] <= res['off9'][m + 1] for m in range(10, 13)) +print('PASS II(b) relaxation %s %s: off the B-locus >= %d, on it %d; m >= 10 off the B-locus >= %d (the S+T-only value with e9 is %d; the B-locus m >= 10 case is OPEN, README Scope)' % (UNIT, Xs, EXP[0], EXP[1], EXP[2], res['on9'][10])) diff --git a/research/a2-family-decoder-floors/checks/inputs_check.py b/research/a2-family-decoder-floors/checks/inputs_check.py new file mode 100644 index 0000000000..b8142a4c2a --- /dev/null +++ b/research/a2-family-decoder-floors/checks/inputs_check.py @@ -0,0 +1,32 @@ +# Recomputes the finite geometric INPUTS the counting uses (all inputs stated in README section 3): unit sizes, frame counts, the label table (h = 9, +# 511 classes), the Lemma 1.1 survivors (classes whose propagation fixed point leaves S_E != empty for every... i.e. NOT certified), survivor +# pair ranks, orthogonal 7-cliques inside survivors, "no plane of the label space contains 3 survivors". usage: inputs_check.py +import sys, itertools, networkx as nx +from setup9 import * +from common2 import B0rows, rank_f2 +from lib2 import E8, dot +ok = True +def chk(name, cond, detail=''): + global ok + ok &= bool(cond); print(('PASS ' if cond else 'FAIL ') + name + (' ' + str(detail) if detail != '' else ''), flush=True) +for unit, nl, nfr, nsurv, pairranks, nstar in [('P112', 112, 1260, 8, {8}, 56), ('P104', 104, 759, 16, {7, 8}, 52)]: + L, v, G, frames, nbar, h, basis, cls = load(unit) + chk(f'{unit}: lines / 8-frames / label dimension h', (v, len(frames), h) == (nl, nfr, 9), (v, len(frames), h)) + chk(f'{unit}: 511 distinct nonzero label classes', len(set(cls.values())) == 511 and all(cls.values())) + surv = [c for c in sorted(cls) if min(pc(s) for s in propagate(cls[c], frames, nbar, v)) > 0] + chk(f'{unit}: Lemma 1.1 leaves exactly {nsurv} classes uncertified (survivors), each of {nstar} lines', len(surv) == nsurv and all(pc(cls[c]) == nstar for c in surv), (len(surv), sorted({pc(cls[c]) for c in surv}))) + full = (1 << v) - 1; B0 = B0rows(L) + def rk(R, A): + Rl = [t for t in range(v) if R >> t & 1]; Al = [s for s in range(v) if A >> s & 1] + return rank_f2([sum(1 << i for i, s in enumerate(Al) if B0[t] >> s & 1) for t in Rl]) + rks = {rk(full ^ cls[a], full ^ cls[b]) for a in surv for b in surv} + chk(f'{unit}: survivor-pair ranks rank_F2 B[V\\O_z, V\\O_z\'] in {sorted(pairranks)}', rks == pairranks, sorted(rks)) + og = nx.Graph(); og.add_nodes_from(range(v)); og.add_edges_from((t, s) for t in range(v) for s in range(t + 1, v) if G[t][s] == 0) + om = [max(len(c) for c in nx.find_cliques(og.subgraph([t for t in range(v) if cls[s] >> t & 1]))) for s in surv] + chk(f'{unit}: every survivor class contains an orthogonal 7-clique and no 8-frame', set(om) == {7}, sorted(set(om))) + chk(f'{unit}: no plane of label space contains 3 survivors (survivors pairwise sum to non-survivors)', all((a ^ b) not in surv for a, b in itertools.combinations(surv, 2))) + F0_, F1_ = load_frames(); rem = F0_ if unit == 'P112' else F0_ + F1_ + live = [i for i in range(120) if i not in set(rem)] + perp = {sum(1 << k for k, i in enumerate(live) if dot(E8[i], E8[f]) == 0) for f in rem} + chk(f'{unit}: the survivors are exactly the sets of live lines orthogonal to one removed root (Gram-deficient classes)', {cls[c] for c in surv} == perp, len(perp)) +print('ALL PASS' if ok else 'SOME FAIL'); sys.exit(0 if ok else 1) diff --git a/research/a2-family-decoder-floors/checks/lib.py b/research/a2-family-decoder-floors/checks/lib.py new file mode 100644 index 0000000000..d27a4f21c5 --- /dev/null +++ b/research/a2-family-decoder-floors/checks/lib.py @@ -0,0 +1,133 @@ +import itertools, random +from fractions import Fraction as F +import numpy as np +INF=10**6 +def v2(x): + x=F(x) + if x==0: return None + n,d=x.numerator,x.denominator; k=0 + while n%2==0: n//=2;k+=1 + while d%2==0: d//=2;k-=1 + return k +def dot(a,b): return sum(x*y for x,y in zip(a,b)) +def e8_roots(): + R=[] + for i,j in itertools.combinations(range(8),2): + for si in(1,-1): + for sj in(1,-1): + r=[F(0)]*8; r[i]=F(si); r[j]=F(sj); R.append(tuple(r)) + for s in itertools.product((1,-1),repeat=8): + if s.count(-1)%2==0: R.append(tuple(F(x,2) for x in s)) + return R +def lines(R): + seen=set();L=[] + for r in R: + n=tuple(-x for x in r) + if n in seen: continue + seen.add(r); L.append(r) + return L +def dn(n): + R=[] + for i,j in itertools.combinations(range(n),2): + for si in(1,-1): + for sj in(1,-1): + r=[F(0)]*n; r[i]=F(si); r[j]=F(sj); R.append(tuple(r)) + return R +def solve(A,Rm): + # coefficients c (len T) with sum c_j A[j] = r ; A: T vectors, via gaussian on Fractions (least: exact) + T=len(A); n=len(A[0]) + # build augmented system n eq, T unknowns + M=[[A[j][i] for j in range(T)]+[None] for i in range(n)] + return M +def inv_coeffs(A): + # return function r -> coeffs, using Gram: c = G^{-1} (A r) + T=len(A) + G=[[dot(A[i],A[j]) for j in range(T)] for i in range(T)] + # invert G + M=[row[:]+[F(int(i==j)) for j in range(T)] for i,row in enumerate(G)] + for c in range(T): + p=next(r for r in range(c,T) if M[r][c]!=0); M[c],M[p]=M[p],M[c] + pv=M[c][c]; M[c]=[x/pv for x in M[c]] + for r in range(T): + if r!=c and M[r][c]!=0: + f=M[r][c]; M[r]=[x-f*y for x,y in zip(M[r],M[c])] + Gi=[row[T:] for row in M] + return Gi +def decoder(roots,A): + T=len(A); Gi=inv_coeffs(A) + P=[];Q=[] + for r in roots: + q=[dot(r,a) for a in A] + p=[sum(Gi[j][k]*q[k] for k in range(T)) for j in range(T)] + # verify + assert all(sum(p[j]*A[j][i] for j in range(T))==r[i] for i in range(len(r))),"not in span" + P.append(p);Q.append(q) + return P,Q +def gram_ok(roots,P,Q): + for t in range(len(roots)): + for s in range(len(roots)): + if sum(P[t][j]*Q[s][j] for j in range(len(P[0])))!=dot(roots[t],roots[s]): return False + return True +def rank_f2(rows): + basis={}; r=0 + for x in rows: + while x: + h=x.bit_length()-1 + if h in basis: x^=basis[h] + else: basis[h]=x; r+=1; break + return r +def Bmat(roots): + v=len(roots) + return [sum(1<box: continue + s=sc(b) + if s>cur: a,cur=b,s;improved=True + # pair moves + if not improved: + for i,j in itertools.combinations(range(T),2): + for di in (-step,step): + for dj in (-step,step): + b=a.copy();b[i]+=di;b[j]+=dj + if abs(b[i])>box or abs(b[j])>box: continue + s=sc(b) + if s>cur: a,cur=b,s;improved=True + if cur>best[0]: best=(cur,a.copy()-a.min()) + return best diff --git a/research/a2-family-decoder-floors/checks/lib2.py b/research/a2-family-decoder-floors/checks/lib2.py new file mode 100644 index 0000000000..98c12b1029 --- /dev/null +++ b/research/a2-family-decoder-floors/checks/lib2.py @@ -0,0 +1,6 @@ +import sys +from common2 import * # E8,E7,E6,D4,D5,D6, Gmat, B0rows, blk, rank_f2, dot +import networkx as nx +def nonorth_graph(L): + G=Gmat(L); v=len(L); g=nx.Graph(); g.add_nodes_from(range(v)) + g.add_edges_from((t,s) for t in range(v) for s in range(t+1,v) if G[t][s]!=0); return g diff --git a/research/a2-family-decoder-floors/checks/log_counts.py b/research/a2-family-decoder-floors/checks/log_counts.py new file mode 100644 index 0000000000..26bba36df6 --- /dev/null +++ b/research/a2-family-decoder-floors/checks/log_counts.py @@ -0,0 +1,20 @@ +# Headline lines of the shipped RECORDED logs (HUNT-A2 robust CP-SAT / CEGAR runs; not re-run by verify.sh). Content is pinned by MANIFEST.sha256. +import os, re +root=os.path.join(os.path.dirname(os.path.abspath(__file__)),'..','evidence','logs','hunt-a2') +def rd(n): return open(os.path.join(root,n+'.log.txt')).read() +ok=True +def chk(name,cond,msg): + global ok + print(('PASS ' if cond else 'FAIL ')+msg); ok&=bool(cond) +for s in ('gen','s2','s8','s10'): + chk(s,re.search(r'it 0 status INFEASIBLE -> no robust assignment <= 63',rd('P112_cegar_'+s)),'P112 robust CEGAR (%s): no square decoder of cost <= 63 for any parameter in this stratum'%s) + chk(s,'relaxation min below 64 : None' in rd('P112_opt_'+s),'P112 exact duality B&B (%s member): nothing below 64'%s) +t=rd('P112_cegar64_s2'); chk('tie',('CANDIDATE saved' in t) and 'Fraction(37, 6)' in t and 'Fraction(29, 2), Fraction(-33, 2)' in t,'P112 cap-64 CEGAR (s2) found a realisable cost-64 assignment at theta=(37/6,0,-11/2,4/3), zX=(0,29/2,-33/2)') +for s in ('gen','s2','s4','s6'): + chk(s,'INFEASIBLE -> no robust assignment <= 71' in rd('E8_cegar_'+s),'E8 robust CEGAR (%s): no square decoder of cost <= 71'%s) +chk('e8gen2','INFEASIBLE -> no robust assignment <= 71' in rd('E8_cegar2_gen'),'E8 robust CEGAR (second run, generic): no cost <= 71') +for s in ('gen','s2'): chk(s,'CANDIDATE saved' in rd('E8_cegar72_'+s),'E8 cap-72 CEGAR (%s): realisable cost-72 assignment found'%s) +chk('sp112','row-special 2' in rd('P112_specall') and 'z-special 6' in rd('P112_specall') and 'col theta-special (not in B-locus) 0' in rd('P112_specall'),'P112 special-locus census: 2 row-special sets, 0 column theta-special, 6 z-special') +chk('sp104','row-special 4' in rd('P104_specall') and 'z-special 6' in rd('P104_specall') and 'col theta-special (not in B-locus) 0' in rd('P104_specall'),'P104 special-locus census: 4 row-special sets, 0 column theta-special, 6 z-special') +chk('spe8','row-special 0' in rd('E8_specall') and 'z-special 6' in rd('E8_specall') and 'col theta-special (not in B-locus) 0' in rd('E8_specall'),'E8 special-locus census: 0 row-special, 0 column theta-special, 6 z-special') +raise SystemExit(0 if ok else 1) diff --git a/research/a2-family-decoder-floors/checks/manifest_check.py b/research/a2-family-decoder-floors/checks/manifest_check.py new file mode 100644 index 0000000000..0c39981713 --- /dev/null +++ b/research/a2-family-decoder-floors/checks/manifest_check.py @@ -0,0 +1,12 @@ +# Step 0 of verify.sh: every line of MANIFEST.sha256 (" ") must match the file; the manifest must list every file of the package except itself. +import hashlib, os, sys +root = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) +listed = {} +for l in open(os.path.join(root, 'MANIFEST.sha256')): + h, p = l.rstrip('\n').split(' ', 1); listed[p] = h +bad = [p for p, h in listed.items() if not os.path.isfile(os.path.join(root, p)) or hashlib.sha256(open(os.path.join(root, p), 'rb').read()).hexdigest() != h] +allf = {os.path.relpath(os.path.join(d, f), root) for d, _, fs in os.walk(root) for f in fs if '__pycache__' not in d and f != 'MANIFEST.sha256' and not f.endswith('.pyc')} +extra = sorted(allf - set(listed)) +print(('FAIL' if bad else 'PASS') + ' manifest: %d files hash-checked, %d mismatching %s' % (len(listed), len(bad), bad[:3])) +print(('FAIL' if extra else 'PASS') + ' manifest lists every package file (%d unlisted %s)' % (len(extra), extra[:3])) +sys.exit(1 if bad or extra else 0) diff --git a/research/a2-family-decoder-floors/checks/mergedkill.py b/research/a2-family-decoder-floors/checks/mergedkill.py new file mode 100644 index 0000000000..9983113253 --- /dev/null +++ b/research/a2-family-decoder-floors/checks/mergedkill.py @@ -0,0 +1,41 @@ +# CHECKED fact for Case II(b) (README 4/5.3): the joint kill system of any two merged classes M_ij (X-column zeta conditions included) has solutions only on gamma_2 = gamma_3. +# Unknowns per class: a column normal (f,1), f in K^8 (one f per class); shared: gamma_2, gamma_3 and zeta_1..zeta_3. Equations per class O: off X, r_s.f - gamma_k (r_1.r_s) = 0 (gamma_1 = 0, k = the +# triangle line orthogonal to s); on X, r_i.f + zeta_i = 0 for u_i in O. We compute the exact nullspace over Q and assert every solution has gamma_2 = gamma_3. +# Consequence (README): off the B-locus gamma_2 != gamma_3 at most one column direction kills any M_ij (a direction killing M_ij also kills T_i and T_j and the unique killer of T_i is shared, so two +# different M's would share a T-killer and be killed jointly). The census (census_facts.py, recorded logs) gives the co-killable triples. usage: UNIT=P112|P104|E8 [A2TRI=a,b,c] python mergedkill.py +import itertools +from a2cls import * +r1 = R[Xs[0]] +def gidx(s): return [i for i in range(3) if dot(R[Xs[i]], R[s]) == 0][0] +def eqs(co): + E = [] + for s in bits(cls[co]): + if s in Xs: + i = Xs.index(s); row = list(R[s]) + [0, 0] + [0, 0, 0]; row[10 + i] = Fr(1); E.append(row) + else: + k = gidx(s); row = list(R[s]) + [0, 0, 0, 0, 0]; c = dot(r1, R[s]) + if k == 1: row[8] = -c + if k == 2: row[9] = -c + E.append(row) + return E +def system(classes): + n = 8 * len(classes) + 5; rows = [] + for j, co in enumerate(classes): + for e in eqs(co): + row = [Fr(0)] * n; row[8 * j:8 * j + 8] = e[:8]; row[8 * len(classes):] = e[8:]; rows.append(row) + ns = nullspace(rows, n) + return len(ns), [x[8 * len(classes):] for x in ns] +print(UNIT, 'X', Xs, 'merged classes', Mg, 'triangle classes', Tg) +for m in Mg: + d, proj = system([m]) + ok = any(q[0] != q[1] for q in proj) + print(' single', m, 'solution dim', d, 'a solution with gamma2 != gamma3 exists:', ok) + assert ok # one merged class alone IS killable off the B-locus (that is why one M is allowed in the relaxation) +npair = 0 +for a, b in itertools.combinations(Mg, 2): + d, proj = system([a, b]); npair += 1 + print(' pair', a, b, 'solution dim', d, '(g2,g3,z1,z2,z3):', [[str(x) for x in q] for q in proj]) + assert all(q[0] == q[1] for q in proj) +d, proj = system(Mg) +assert all(q[0] == q[1] for q in proj) +print('PASS merged-kill %s %s: the joint kill system of any two merged classes (and of all three) has solutions only on gamma2 = gamma3 (%d pairs)' % (UNIT, Xs, npair)) diff --git a/research/a2-family-decoder-floors/checks/modrank.py b/research/a2-family-decoder-floors/checks/modrank.py new file mode 100644 index 0000000000..2eb6120da9 --- /dev/null +++ b/research/a2-family-decoder-floors/checks/modrank.py @@ -0,0 +1,15 @@ +# rank over GF(p) of a rational matrix (lower bound for the rank over Q); p large prime +P=2**61-1 +def rkp(rows,p=P): + A=[[ (x.numerator*pow(x.denominator,-1,p))%p for x in r] for r in rows] + r=0; n=len(A[0]) if A else 0 + for c in range(n): + piv=next((i for i in range(r,len(A)) if A[i][c]),None) + if piv is None: continue + A[r],A[piv]=A[piv],A[r]; inv=pow(A[r][c],-1,p) + A[r]=[x*inv%p for x in A[r]] + for i in range(len(A)): + if i!=r and A[i][c]: + f=A[i][c]; A[i]=[(x-f*y)%p for x,y in zip(A[i],A[r])] + r+=1 + return r diff --git a/research/a2-family-decoder-floors/checks/opt3u.py b/research/a2-family-decoder-floors/checks/opt3u.py new file mode 100644 index 0000000000..971bd91e4a --- /dev/null +++ b/research/a2-family-decoder-floors/checks/opt3u.py @@ -0,0 +1,82 @@ +# exact relaxation lower bound for square decoders of a B-form realisation phat(u)=(D1 r_u, c_u) etc. +# candidates: all 1-dim deficiency spaces, pairwise intersections, and a generic member of each multi-dim space (duality-free). +import sys,pickle,itertools,random +from a2lib import * +import os +NDIM=int(os.environ.get('NDIM','9')); NT=int(os.environ.get('NT','9')) +def run(Zc,Zb,c,b,out,thresh=65,verbose=True,PH=None): + ph=[list(map(Fr,L[u]))+[Fr(c[u])] for u in range(v)]; qh=[list(map(Fr,L[u]))+[Fr(b[u])] for u in range(v)] + if PH: ph=[list(map(Fr,x)) for x in PH[0]]; qh=[list(map(Fr,x)) for x in PH[1]] + def norm(x): + i=next(k for k in range(NDIM) if x[k]!=0); return tuple(a/x[i] for a in x) + def cands(side): + sp=[(x[1] if side==0 else x[2]) for x in out.values()]; sp=[s for s in sp if s] + one=set(); free=[] + for s in sp: + if len(s)==1: one.add(norm(s[0])) + else: free.append(tuple(sum(random.randint(1,97)*vv[k] for vv in s) for k in range(NDIM))) + # pairwise intersections of multi-dim spaces with everything + for s1,s2 in itertools.combinations([s for s in sp if len(s)>1],2): + ns=nullspace([*[ [a for a in w] for w in nullspace(s1,NDIM)], *nullspace(s2,NDIM)],NDIM) + if len(ns)==1: one.add(norm(ns[0])) + return [list(x) for x in one],[list(x) for x in free] + random.seed(1) + d1,dfree=cands(0); e1,efree=cands(1) + def supp(vecs,x): return [u for u in range(v) if sum(a*b for a,b in zip(vecs[u],x))!=0] + full=list(range(v)) + R=[supp(ph,d) for d in d1+dfree]; A=[supp(qh,e) for e in e1+efree] + nd,ne=len(d1),len(e1) + f=[[blk(Brows,R[i],A[j]) for j in range(len(A))] for i in range(len(R))] + fr=[blk(Brows,R[i],full) for i in range(len(R))]; fc=[blk(Brows,full,A[j]) for j in range(len(A))] + dot=lambda x,y: sum(a*b for a,b in zip(x,y)) + Pm=[[dot(e1[j],d1[i]) if (i unconstrained + nv=0 + for i in range(nd): + for j in range(ne): + d,e=d1[i],e1[j] + if d[8]!=0 and e[8]!=0 and any(d[k]!=0 for k in range(8)) and any(e[k]!=0 for k in range(8)) and sum(d[k]*e[k] for k in range(8))!=0: + Pm[i][j]=None; nv+=1 + print('robust: variable pairs',nv,flush=True) + vec_r=d1+dfree; vec_c=e1+efree + LB=min(min(map(min,f)),min(fr),min(fc)) + if verbose: print('cands row',nd,'+',len(dfree),'col',ne,'+',len(efree),'min pair',LB,'row-only',sorted(fr)[:6],'col-only',sorted(fc)[:6],flush=True) + best=[thresh]; found=[] + def ok_pair(i,j,ui,uj): + if i is not None and j is not None and Pm[i][j] is not None and Pm[i][j]==0: return False + if i is not None and any(Pm[i][jj] not in (None,) and Pm[i][jj]!=0 for jj in uj): return False + if j is not None and any(Pm[ii][j] not in (None,) and Pm[ii][j]!=0 for ii in ui): return False + return True + minrow=[min([fr[i]]+f[i]) for i in range(len(R))]; mincol=[min([fc[j]]+[f[i][j] for i in range(len(R))]) for j in range(len(A))] + def rem(k,ui,uj): + pool=sorted([minrow[i] for i in range(len(R)) if i not in ui]+[mincol[j] for j in range(len(A)) if j not in uj]+[9]*NT) + return sum(pool[:NT-k]) + def dfs(k,cost,ui,uj,last): + if cost+rem(k,ui,uj)>=best[0]: return + if k==NT: best[0]=cost; found.append(cost); print('decoder',cost,last,flush=True); return + opts=[] + for i in [None]+[i for i in range(len(R)) if i not in ui]: + for j in [None]+[j for j in range(len(A)) if j not in uj]: + if not ok_pair(i,j,ui,uj): continue + cst=9 if i is None and j is None else (fc[j] if i is None else (fr[i] if j is None else f[i][j])) + key=(cst,-1 if i is None else i,-1 if j is None else j) + if key2 else 65,PH=T[5:7] if len(T)>5 else None) + print(sys.argv[1],'relaxation min below threshold:',r) diff --git a/research/a2-family-decoder-floors/checks/orbits.py b/research/a2-family-decoder-floors/checks/orbits.py new file mode 100644 index 0000000000..2812e39fc8 --- /dev/null +++ b/research/a2-family-decoder-floors/checks/orbits.py @@ -0,0 +1,34 @@ +# orbits of A2 triangles of the unit under the subgroup of W(E8) generated by reflections / products of two reflections preserving the unit's line set +import sys,itertools +from a2lib import * +E=[tuple(Fr(x) for x in r) for r in E8] +def key(r): + i=next(k for k in range(8) if r[k]!=0); s=1 if r[i]>0 else -1; return tuple(s*x for x in r) +idx={key(r):i for i,r in enumerate(E)} +Lk=[key(tuple(Fr(x) for x in r)) for r in L]; Lset=set(Lk); Lpos={k:i for i,k in enumerate(Lk)} +def refl(a): + aa=sum(x*x for x in a) + return lambda r: tuple(x-2*sum(p*q for p,q in zip(r,a))/aa*y for x,y in zip(r,a)) +perms=[] +R1=[refl(a) for a in E] +for g in R1: + img=[key(g(k)) for k in Lk] + if set(img)==Lset: perms.append([Lpos[k] for k in img]) +print('single reflections preserving L:',len(perms)) +if len(perms)<200: + for g,h in itertools.combinations(R1,2): + img=[key(g(h(k))) for k in Lk] + if set(img)==Lset: perms.append([Lpos[k] for k in img]) +print('generators:',len(perms)) +T=all_a2(); Tid={t:i for i,t in enumerate(T)} +par=list(range(len(T))) +def find(x): + while par[x]!=x: par[x]=par[par[x]]; x=par[x] + return x +for p in perms: + for t in T: + u=tuple(sorted(p[i] for i in t)); a,b=find(Tid[t]),find(Tid[u]) + if a!=b: par[a]=b +comps={} +for t in T: comps.setdefault(find(Tid[t]),[]).append(t) +print(UNIT,'triangles',len(T),'orbits(lower bound on merging)',len(comps),'reps',[c[0] for c in comps.values()],'sizes',sorted(len(c) for c in comps.values())) diff --git a/research/a2-family-decoder-floors/checks/orbits104.py b/research/a2-family-decoder-floors/checks/orbits104.py new file mode 100644 index 0000000000..027fbd363c --- /dev/null +++ b/research/a2-family-decoder-floors/checks/orbits104.py @@ -0,0 +1,31 @@ +# P104: orbits of A2 triangles under signed permutations (even sign changes) preserving the line set L +import itertools +from a2lib import * +assert UNIT=='P104' +def key(r): + i=next(k for k in range(8) if r[k]!=0); s=1 if r[i]>0 else -1; return tuple(s*x for x in r) +Lk=[key(tuple(int(2*x) for x in r)) for r in L]; Lpos={k:i for i,k in enumerate(Lk)}; Lset=set(Lk) +perms=[] +pairs=[(0,1),(2,3),(4,5),(6,7)] +for pp in itertools.permutations(range(4)): + for flips in itertools.product([0,1],repeat=4): + perm=[] + for k in range(4): + a,b=pairs[pp[k]] + perm+= [b,a] if flips[k] else [a,b] + for sg in itertools.product([1,-1],repeat=8): + if sg.count(-1)%2: continue + img=[key(tuple(sg[i]*r[perm[i]] for i in range(8))) for r in Lk] + if all(k in Lset for k in img): perms.append([Lpos[k] for k in img]) +print('automorphisms found',len(perms)) +T=all_a2(); Tid={t:i for i,t in enumerate(T)}; par=list(range(len(T))) +def find(x): + while par[x]!=x: par[x]=par[par[x]]; x=par[x] + return x +for p in perms: + for t in T: + u=tuple(sorted(p[i] for i in t)); a,b=find(Tid[t]),find(Tid[u]) + if a!=b: par[a]=b +comps={} +for t in T: comps.setdefault(find(Tid[t]),[]).append(t) +print('triangles',len(T),'orbits',len(comps),'reps',[c[0] for c in comps.values()],'sizes',sorted(len(c) for c in comps.values())) diff --git a/research/a2-family-decoder-floors/checks/pairtable.py b/research/a2-family-decoder-floors/checks/pairtable.py new file mode 100644 index 0000000000..51cbbde2af --- /dev/null +++ b/research/a2-family-decoder-floors/checks/pairtable.py @@ -0,0 +1,55 @@ +# Pair-cost table of an A2-family member and the m >= 10 "in-colspace" arithmetic (HUNT-A2 section 3(B)). +# Model: factors in the realisation's spaces (P = A X, Q = B Y). A row normal x has support R(x) = {u : a_u . x != 0}; by the exact rank formula the cost of a term +# depends only on the label classes avoided by R(x) and A(y). The catalogue lists the (1-dim, here) deficiency directions: a normal outside the catalogue behaves as 'full support'. +# After merging terms with parallel normals (cost does not rise), WLOG row normals are pairwise non-parallel and so are column normals, so each catalogue direction is used at most once. +# The relaxation below minimises the sum of pair costs over m' >= 9 terms using each catalogue row / column direction at most once (no duality / independence constraints), exact DP. +# usage: UNIT=P112 python pairtable.py gen|tie [LOWER_BOUND] gen: first random member with the exact iff pattern; tie: the member of data/tie_.json (P112, E8) +import sys, json, os, random +from a2lib import * +mode=sys.argv[1] if len(sys.argv)>1 else 'gen' +if mode=='tie': + D=json.load(open(os.path.join(os.path.dirname(os.path.abspath(__file__)),'..','data','tie_%s.json'%UNIT))) + th=tuple(Fr(x) for x in D['theta']); zX=tuple(Fr(x) for x in D['zX']) +else: + rnd=random.Random(1) # first random member with the exact iff pattern (as in a2fam.py) + while True: + th=tuple(Fr(rnd.randint(-9,9)) for _ in range(4)); zX=tuple(Fr(rnd.randint(-50,50),rnd.randint(1,7)) for _ in range(3)) + if pattern_ok(Mof(*build(th,zX)))==0: break +A,B=build(th,zX); M=Mof(A,B); assert pattern_ok(M)==0 and rank(A,9)==9 and rank(B,9)==9 +out=catalogue(A,B) +assert all(len(x[1])<=1 and len(x[2])<=1 for x in out.values()) # every deficiency space is 1-dim +def norm(x): + i=next(k for k in range(9) if x[k]!=0); return tuple(a/x[i] for a in x) +rd=sorted(set(norm(x[1][0]) for x in out.values() if x[1])); cd=sorted(set(norm(x[2][0]) for x in out.values() if x[2])) +supp=lambda vecs,x:[u for u in range(v) if dot(vecs[u],x)!=0] +Rr=[supp(A,d) for d in rd]+[list(range(v))]; Ac=[supp(B,e) for e in cd]+[list(range(v))] +f=[[blk(Brows,a,b) for b in Ac] for a in Rr] +nr,nc=len(rd),len(cd) +e9=[i for i,d in enumerate(rd) if all(x==0 for x in d[:8])]; assert len(e9)==1; e9=e9[0] +print('%s %s: row directions %d (incl. e9), column directions %d, table %dx%d (last = full support)'%(UNIT,mode,nr,nc,nr+1,nc+1)) +for i,row in enumerate(f): print(' row',i,'(e9)' if i==e9 else ' ',row) +nonE9=[f[i][j] for i in range(nr+1) if i!=e9 for j in range(nc+1)] +print('min over non-e9 rows:',min(nonE9),'| entries below 7 among non-e9 rows:',sorted(set((i,j,f[i][j]) for i in range(nr+1) if i!=e9 for j in range(nc+1) if f[i][j]<7))) +print('e9 row:',f[e9]) +import networkx as nx +def relax(mt): + # exact min-cost flow: row slots (each real row direction capacity 1, 'full' unlimited) -> column slots (same); exactly mt terms (units of flow) + G=nx.DiGraph(); G.add_node('s',demand=-mt); G.add_node('t',demand=mt) + for i in range(nr+1): G.add_edge('s',('r',i),capacity=1 if i= 7, except 6 only in the single 2-kill column; e9 row >= 2, or 1 in the 2-kill column) ---- +low=sorted(set((i,j,f[i][j]) for i in range(nr+1) if i!=e9 for j in range(nc+1) if f[i][j]<7)) +cols_low=sorted(set(j for _,j,_ in low)) +assert all(c==6 for _,_,c in low) and len(cols_low)<=1, low +assert min(f[e9][j] for j in range(nc+1) if j not in cols_low)>=2 and min(f[e9])>=1 +if cols_low: assert f[e9][cols_low[0]]==1 +assert len(set(len(Ac[j]) for j in cols_low))<=1 +LB=int(sys.argv[2]) if len(sys.argv)>2 else 0 +assert min(vals[m] for m in range(10,16))>=LB, (vals,LB) +print('PASS pair table %s %s: non-e9 minimum %d (%s), e9 row minimum %d; relaxation for m\' >= 10 terms is %d >= %d'%(UNIT,mode,min(nonE9),'6 only in one column' if cols_low else 'no 6',min(f[e9]),min(vals[m] for m in range(10,16)),LB)) diff --git a/research/a2-family-decoder-floors/checks/setup9.py b/research/a2-family-decoder-floors/checks/setup9.py new file mode 100644 index 0000000000..db0ac3e67a --- /dev/null +++ b/research/a2-family-decoder-floors/checks/setup9.py @@ -0,0 +1,17 @@ +# common setup: P112 / P104 lines, frames, nbar, label classes (dense B), Omega form via labels +import sys, pickle +from cert2 import * +def load(unit): + F0, F1 = load_frames() + if unit=='P112': L=[E8[i] for i in range(120) if i not in set(F0)] + else: L=[E8[i] for i in range(120) if i not in set(F0)|set(F1)] + v,G,frames,nbar=setup(L,8) + basis=colspace_vectors(B0rows(L),v); h=len(basis) + cls={} + for co in range(1,1<>i&1: w^=basis[i] + cls[co]=w + return L,v,G,frames,nbar,h,basis,cls +pc=lambda x: bin(x).count('1') diff --git a/research/a2-family-decoder-floors/checks/spans.py b/research/a2-family-decoder-floors/checks/spans.py new file mode 100644 index 0000000000..ab536ad2e5 --- /dev/null +++ b/research/a2-family-decoder-floors/checks/spans.py @@ -0,0 +1,18 @@ +# CONJB CHECKED (exact): span facts used by Theorem G, for P112, P104, E8. +# S1: r(O_u) spans r_u^perp (rank 7) for every line u. S2: r(O_u ∩ O_u') spans ^perp (rank 6) for all u != u'. +# Ranks are GF(p) ranks of integer matrices = lower bounds over Q; the upper bounds 7 / 6 hold trivially. +import os, sys, itertools +from setup9 import load, E8 +from fractions import Fraction as Fr +from modrank import rkp +for unit in ['P112','P104','E8']: + L=list(E8) if unit=='E8' else load(unit)[0] + R=[[Fr(x) for x in r] for r in L]; v=len(R) + dot=lambda x,y: sum(a*b for a,b in zip(x,y)) + G=[[dot(R[i],R[j]) for j in range(v)] for i in range(v)] + O=[set(s for s in range(v) if G[u][s]==0) for u in range(v)] + s1=min(rkp([R[s] for s in O[u]]) for u in range(v)) + s2=min(rkp([R[s] for s in O[u]&O[w]]) for u,w in itertools.combinations(range(v),2)) + print(unit,'lines',v,'S1 min rank',s1,'(need 7)','S2 min rank',s2,'(need 6)') + assert s1==7 and s2==6 + print('PASS spans',unit) diff --git a/research/a2-family-decoder-floors/checks/tie_check.py b/research/a2-family-decoder-floors/checks/tie_check.py new file mode 100644 index 0000000000..563781c48a --- /dev/null +++ b/research/a2-family-decoder-floors/checks/tie_check.py @@ -0,0 +1,69 @@ +# Exact check of the tie decoders (HUNT-A2): a square (9-term) decoder of an A2-family member at a special parameter point, over Q. +# * member: rows a_u = (r_u,0) off X, a_{u_i} = (r_i + g_i, 1); columns b_s = (r_s, z_s) (a2lib.build; theta = (al2,be2,al3,be3), g_2 = al2 r_1 + be2 r_2, g_3 = al3 r_1 + be3 r_2, zX = z on X) +# * decoder: row normals x_j (data/tie_.json), column normals y_j = dual basis; P = A X, Q = B Y, so sum_j P[u,j] Q[s,j] = M[u,s] exactly. +# Independent of a2lib.evaluate: matrix inverse, products, the iff pattern (from raw root coordinates), the dense B (B[t,s] = 1 iff t = s or r_t . r_s = 0) and the F2 ranks are recomputed here. +# usage: UNIT=P112|E8 python tie_check.py +import json, os, sys +from fractions import Fraction as Fr +from a2lib import UNIT, L, v, X, build +D=json.load(open(os.path.join(os.path.dirname(os.path.abspath(__file__)),'..','data','tie_%s.json'%UNIT))) +assert D['unit']==UNIT +th=tuple(Fr(x) for x in D['theta']); zX=tuple(Fr(x) for x in D['zX']) +A,B=build(th,zX) +xs=[[Fr(x) for x in r] for r in D['xs']] +def mat_inv(Mx): + n=len(Mx); W=[list(r)+[Fr(int(i==j)) for j in range(n)] for i,r in enumerate(Mx)] + for c in range(n): + p=next(i for i in range(c,n) if W[i][c]!=0); W[c],W[p]=W[p],W[c] + pv=W[c][c]; W[c]=[x/pv for x in W[c]] + for i in range(n): + if i!=c and W[i][c]!=0: + f=W[i][c]; W[i]=[a-f*b for a,b in zip(W[i],W[c])] + return [r[n:] for r in W] +Xm=[[xs[j][k] for j in range(9)] for k in range(9)] # columns are the x_j +Xi=mat_inv(Xm) # X^{-1} +Ym=[[Xi[j][k] for j in range(9)] for k in range(9)] # Y = X^{-T}: column j of Y is row j of X^{-1} +P=[[sum(A[u][k]*Xm[k][j] for k in range(9)) for j in range(9)] for u in range(v)] +Q=[[sum(B[s][k]*Ym[k][j] for k in range(9)) for j in range(9)] for s in range(v)] +dot=lambda a,b: sum(x*y for x,y in zip(a,b)) +M=[[dot(A[u],B[s]) for s in range(v)] for u in range(v)] +assert all(sum(P[u][j]*Q[s][j] for j in range(9))==M[u][s] for u in range(v) for s in range(v)) +print('PASS exact: P Q^T = M over Q (9 terms, X invertible)') +# iff pattern from raw integer coordinates (2*root coordinates are integers) +Ri=[[int(2*x) for x in r] for r in L] +G=[[sum(a*b for a,b in zip(Ri[i],Ri[j])) for j in range(v)] for i in range(v)] +assert all((M[i][j]==0)==(G[i][j]==0 and i!=j) for i in range(v) for j in range(v)) +print('PASS iff pattern: M[i][j]=0 exactly on orthogonal pairs i!=j, nonzero diagonal (%s lines)'%v) +# rank M = 9: A, B have rank 9 (X invertible, P=AX has rank = rank A) +def rank(rows): + W=[list(r) for r in rows]; r=0 + for c in range(len(W[0])): + p=next((i for i in range(r,len(W)) if W[i][c]!=0),None) + if p is None: continue + W[r],W[p]=W[p],W[r]; pv=W[r][c]; W[r]=[x/pv for x in W[r]] + for i in range(len(W)): + if i!=r and W[i][c]!=0: + f=W[i][c]; W[i]=[a-f*b for a,b in zip(W[i],W[r])] + r+=1 + return r +assert rank(A)==9 and rank(B)==9 +print('PASS rank M = 9 (A and B have exact rank 9)') +# dense B and F2 ranks +Bd=[sum(1< only e9). +# (C) column side off X: S_U = {(w,g2,g3): r_s.w = g_i (r1.r_s) on U∩O_{u_i}}, info (dimS, dimK, proj); generic-killable classes; co-killable 2-dim subspaces. +import sys,itertools,collections +from a2lib import * +X=find_a2(); print(UNIT,'v',v,'X',X) +E6=[s for s in range(v) if all(dot(R[s],R[x])==0 for x in X)] +# spanning checks +for u in X: + Ou=[s for s in range(v) if s not in X and dot(R[s],R[u])==0 and s not in E6] + print(' span O_u\\E6',rank([R[s] for s in Ou],8),'(7)', 'lines non-orth to all of X off X:',sum(1 for s in range(v) if s not in X and all(dot(R[s],R[x])!=0 for x in X))) +C=collections.Counter(); rk7=[] +for co,w in cls.items(): + O=bits(w); S=tuple(t for t in O if t in X) + ns=nullspace([R[t] for t in O if t not in X],8); rk=8-len(ns) + C[(len(S),rk)]+=1 + if rk<8: rk7.append((co,S,len(O),[str(a) for a in ns[0]] if len(ns)==1 else len(ns))) +print('row census (|S|,rank r(O\\X)):',sorted(C.items())) +for t in rk7: print(' rank<8:',t) +Ri=[[int(2*x) for x in r] for r in L]; r1=Ri[X[0]] +idot=lambda a,b: sum(x*y for x,y in zip(a,b)) +rows={} +for s in range(v): + if s in X: continue + ii=[i for i in range(3) if idot(Ri[X[i]],Ri[s])==0]; i=ii[0]; g=[0,0]; c=idot(r1,Ri[s]) + if len(ii)>1: assert c==0 + if i==1: g[0]=-c + if i==2: g[1]=-c + rows[s]=Ri[s]+g +p=2**31-1 +# Hadamard note: the integer rows used with rkp have entries <= 4 in absolute value and 10 columns; each row has squared norm <= 24 (doubled root: 8; one g-entry: <= 16), so every minor is <= 24^5 < 2^31 - 1 +# in absolute value and the ranks mod p = 2^31 - 1 are EXACT (equal to the ranks over Q). +def rkp(M,n): + M=[[x%p for x in r] for r in M]; r=0 + for c in range(n): + q=next((i for i in range(r,len(M)) if M[i][c]),None) + if q is None: continue + M[r],M[q]=M[q],M[r]; inv=pow(M[r][c],p-2,p); M[r]=[x*inv%p for x in M[r]] + for i in range(len(M)): + if i!=r and M[i][c]: + f=M[i][c]; M[i]=[(a-f*b)%p for a,b in zip(M[i],M[r])] + r+=1 + return r +def info(U): + M=[rows[s] for s in U]; r=rkp(M,10); rg=rkp([x[:8] for x in M],8) + dimS=10-r; dimK=8-rg; return dimS,dimK,dimS-dimK +single={co:info([s for s in bits(w) if s not in X]) for co,w in cls.items()} +print('col off-X single info:',collections.Counter(single.values())) +gen=[co for co in cls if single[co][2]==2] +print('generic-gamma killable:',[(co,len(bits(cls[co])),[t for t in bits(cls[co]) if t in X],single[co]) for co in gen]) +gram=[co for co in cls if single[co][1]>0] +print('Gram-deficient (eta=0) classes:',len(gram)) +good=[] +gs=set(gen) +for a,b in itertools.combinations(gen,2): + c3=a^b + if c3 in gs and c3>b: + U=sorted(set(s for co in (a,b) for s in bits(cls[co]) if s not in X)); t=info(U) + if t[2]==2: good.append((a,b,c3,t)) +print('co-killable 2-dim off cocycle:',good) +for tri in itertools.combinations(gen,3): + U=sorted(set(s for co in tri for s in bits(cls[co]) if s not in X)); t=info(U) + if t[2]==2: print(' 3 gen classes co-killable:',tri,t) diff --git a/research/a2-family-decoder-floors/checks/units_check.py b/research/a2-family-decoder-floors/checks/units_check.py new file mode 100644 index 0000000000..d7899bf1b6 --- /dev/null +++ b/research/a2-family-decoder-floors/checks/units_check.py @@ -0,0 +1,15 @@ +# The three units: E8 (120 lines), P112 = E8 minus the orthogonal frame F0 (112 lines), P104 = E8 minus F0 and F1 (104 lines; #968's unit, F1 = H4). Dense label table: h = 9, 511 nonzero classes. +import os +os.environ['UNIT']='E8' +from setup9 import load, E8 +from frames_data import load_frames +from lib2 import dot +F0,F1=load_frames() +assert len(F0)==8 and len(F1)==8 and not set(F0)&set(F1) +assert all(dot(E8[a],E8[b])==0 for F in (F0,F1) for a in F for b in F if a!=b) +for unit,n in (('P112',112),('P104',104)): + L,v,G,frames,nbar,h,basis,cls=load(unit) + assert (v,h,len(cls),len(set(cls.values())))==(n,9,511,511) and all(cls.values()) + print('PASS unit %s: %d lines, label dimension h = 9, 511 distinct nonzero classes, %d eight-frames'%(unit,v,len(frames))) +from a2lib import cls as c8, h as h8 +print('PASS unit E8: 120 lines, label dimension h = %d, %d classes'%(h8,len(c8))); assert (len(E8),h8,len(c8))==(120,9,511) diff --git a/research/a2-family-decoder-floors/data/p104_frames.json b/research/a2-family-decoder-floors/data/p104_frames.json new file mode 100644 index 0000000000..2312a2144c --- /dev/null +++ b/research/a2-family-decoder-floors/data/p104_frames.json @@ -0,0 +1,105 @@ +{ + "description": "P112 = E8 lines (lib.lines(e8_roots()) order) minus F0; P104 = minus F0 and F1. F0: the frame e_{2a} +- e_{2a+1}; F1: the 8 vectors listed (each is 2 x a root, i.e. a root up to the factor 2) forming a second orthogonal frame (author's #2338 / IDEAL h4 P104 unit). F0_idx / F1_idx: indices into the E8 line list; frames_data.py re-derives them from the vectors and asserts equality as sets.", + "F0_idx": [ + 0, + 26, + 44, + 54, + 1, + 27, + 45, + 55 + ], + "F1_idx": [ + 2, + 18, + 40, + 52, + 77, + 86, + 107, + 112 + ], + "F1_vectors_x2": [ + [ + 2, + 0, + 2, + 0, + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 0, + 0, + 2, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 2, + 0, + 0, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0, + 0, + 2, + 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 + ], + [ + 1, + -1, + -1, + -1, + 1, + 1, + 1, + -1 + ] + ] +} \ No newline at end of file diff --git a/research/a2-family-decoder-floors/data/tie_E8.json b/research/a2-family-decoder-floors/data/tie_E8.json new file mode 100644 index 0000000000..801d8cb25d --- /dev/null +++ b/research/a2-family-decoder-floors/data/tie_E8.json @@ -0,0 +1,128 @@ +{ + "unit": "E8", + "description": "Exact square (9-term) decoder of an A2-family member at a special parameter point (HUNT-A2). xs[j] = row normal x_j in K^9; the column normals are the dual basis y_j (X^-T).", + "theta": [ + "4/3", + "0", + "-11/2", + "-11/2" + ], + "zX": [ + "4/3", + "0", + "3/2" + ], + "xs": [ + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "2/3" + ], + [ + "0", + "1", + "-1", + "0", + "0", + "0", + "0", + "0", + "-2" + ], + [ + "1", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "-2" + ], + [ + "169/2", + "-22", + "6", + "24", + "21", + "18", + "-26", + "-14", + "-23" + ], + [ + "83/2", + "1", + "18", + "-2", + "0", + "11", + "-6", + "20", + "-17" + ], + [ + "37", + "-24", + "1", + "-29", + "27", + "23", + "-6", + "-3", + "8" + ], + [ + "-97/2", + "18", + "19", + "-30", + "14", + "-2", + "-13", + "16", + "21" + ], + [ + "165/2", + "-16", + "7", + "30", + "-24", + "27", + "-10", + "-29", + "-29" + ], + [ + "99/2", + "-29", + "11", + "4", + "-30", + "30", + "26", + "-6", + "13" + ] + ], + "recorded_costs": [ + 2, + 8, + 8, + 9, + 9, + 9, + 9, + 9, + 9 + ], + "recorded_cost": 72 +} \ No newline at end of file diff --git a/research/a2-family-decoder-floors/data/tie_P112.json b/research/a2-family-decoder-floors/data/tie_P112.json new file mode 100644 index 0000000000..611d3238b9 --- /dev/null +++ b/research/a2-family-decoder-floors/data/tie_P112.json @@ -0,0 +1,128 @@ +{ + "unit": "P112", + "description": "Exact square (9-term) decoder of an A2-family member at a special parameter point (HUNT-A2). xs[j] = row normal x_j in K^9; the column normals are the dual basis y_j (X^-T).", + "theta": [ + "37/6", + "0", + "-11/2", + "4/3" + ], + "zX": [ + "0", + "29/2", + "-33/2" + ], + "xs": [ + [ + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "0", + "-25/6" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1/2", + "-1/2", + "0" + ], + [ + "0", + "0", + "0", + "0", + "0", + "0", + "1/2", + "1/2", + "0" + ], + [ + "0", + "0", + "1", + "1", + "0", + "0", + "0", + "0", + "-37/6" + ], + [ + "1", + "-1", + "0", + "0", + "0", + "0", + "0", + "0", + "25/6" + ], + [ + "1", + "0", + "1", + "0", + "0", + "0", + "0", + "0", + "-2" + ], + [ + "1", + "1", + "0", + "0", + "0", + "0", + "0", + "0", + "25/6" + ], + [ + "-153/100", + "11/24", + "-1/8", + "-1/8", + "1/2", + "-1/2", + "0", + "0", + "-7/16" + ], + [ + "58/175", + "-9/14", + "13/14", + "13/14", + "1/2", + "1/2", + "0", + "0", + "23/28" + ] + ], + "recorded_costs": [ + 1, + 8, + 8, + 8, + 8, + 7, + 8, + 8, + 8 + ], + "recorded_cost": 64 +} \ No newline at end of file diff --git a/research/a2-family-decoder-floors/evidence/hunt-a2-scripts/cegar.py b/research/a2-family-decoder-floors/evidence/hunt-a2-scripts/cegar.py new file mode 100644 index 0000000000..373e792782 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/hunt-a2-scripts/cegar.py @@ -0,0 +1,62 @@ +# HUNT-A2: CEGAR over parameter-dependent duality products. Robust CP-SAT (cost <= CAP) -> realize params -> +# exact catalogue/ILP at that point. Infeasible equation sets become no-good cuts (minimal infeasible subsets). +import sys, pickle, os, itertools, sympy as sp +from ortools.sat.python import cp_model +from a2lib import * +import realize +k=sys.argv[1]; CAP=int(sys.argv[2]); NT=9 +rd,cd,f=pickle.load(open(f'tab_{k}.pkl','rb')); nr,nc=len(rd),len(cd) +FREE=pickle.load(open(f'free_{k}.pkl','rb')); EX=pickle.load(open(f'expr_{k}.pkl','rb')) +PZ=[[(None if (i,j) in FREE else dot(rd[i],cd[j])==0) for j in range(nc)] for i in range(nr)] +def circuits(vecs): + out=[]; n=len(vecs) + for kk in range(2,min(n,10)+1): + for S in itertools.combinations(range(n),kk): + if any(set(C)<=set(S) for C in out): continue + if rank([vecs[i] for i in S],9)=ur[i]+uc[j]-x[i,j]-1); zz[i,j]=b + for C in cr: m.Add(sum(ur[i] for i in C)<=len(C)-1) + for C in cc: m.Add(sum(uc[j] for j in C)<=len(C)-1) + for E in cuts: m.Add(sum(zz[e] for e in E)<=len(E)-1) + obj=sum(f[i][j]*x[i,j] for i in range(nr+1) for j in range(nc+1)); m.Add(obj<=CAP); m.Minimize(obj) + s=cp_model.CpSolver(); s.parameters.num_workers=1; s.parameters.max_time_in_seconds=600 + st=s.Solve(m) + if st not in (cp_model.OPTIMAL,cp_model.FEASIBLE): + print(k,'it',it,'status',s.StatusName(st),'-> no robust assignment <=',CAP,'cuts',len(cuts),flush=True); break + terms=[(i,j) for (i,j),var in x.items() for _ in range(s.Value(var))] + E=[e for e,b in zz.items() if s.Value(b)] + print(k,'it',it,'cost',s.ObjectiveValue(),'needs zero',E,'terms',terms,flush=True) + if infeasible(E): + M=mis(E); cuts.append(M); print(' cut',M,[str(numer(e)) for e in M],flush=True); continue + r,pt=realize.solve_point(k,terms,verbose=False) + print(' realize',r,pt,flush=True) + if r=='ok': + pickle.dump((terms,pt),open(f'cand_{k}_{it}.pkl','wb')); print(' CANDIDATE saved',flush=True); break + else: + cuts.append(E); print(" NEQ-CUT (review)",E,flush=True) diff --git a/research/a2-family-decoder-floors/evidence/hunt-a2-scripts/ilp9.py b/research/a2-family-decoder-floors/evidence/hunt-a2-scripts/ilp9.py new file mode 100644 index 0000000000..26e286f50a --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/hunt-a2-scripts/ilp9.py @@ -0,0 +1,39 @@ +# HUNT-A2: exact square-decoder optimum over a catalogue as a CP-SAT model (1 worker). +# Exact for fixed parameters (pairwise duality + independence = completable, see NOTES §1); with ROBUST=1 the +# theta/zX-variable products (free_*.pkl) are unconstrained -> lower bound over all parameters. +import sys, pickle, os, itertools +from ortools.sat.python import cp_model +from a2lib import * +cat=sys.argv[1]; NT=int(os.environ.get('NT','9')) +rd,cd,f=pickle.load(open(cat.replace('cat_','tab_'),'rb')) +nr,nc=len(rd),len(cd) +FREE=pickle.load(open(cat.replace('cat_','free_'),'rb')) if os.environ.get('ROBUST') else set() +PZ=[[(None if (i,j) in FREE else dot(rd[i],cd[j])==0) for j in range(nc)] for i in range(nr)] +def circuits(vecs): + out=[]; n=len(vecs) + for k in range(2,min(n,10)+1): + for S in itertools.combinations(range(n),k): + if any(set(C)<=set(S) for C in out): continue + if rank([vecs[i] for i in S],9)1 or len(x[2])>1]) +supp=lambda vecs,x:[u for u in range(v) if dot(vecs[u],x)!=0] +Rr=[supp(A,d) for d in rd]+[list(range(v))]; Ac=[supp(B,e) for e in cd]+[list(range(v))] +f=[[blk(Brows,a,b) for b in Ac] for a in Rr] +nr,nc=len(rd),len(cd); NT=9 +def circuits(vecs): + o=[]; n=len(vecs) + for k in range(2,min(n,10)+1): + for S in itertools.combinations(range(n),k): + if any(set(C)<=set(S) for C in o): continue + if rank([vecs[i] for i in S],9)=60: s_.StopSearch() + cb=CB(); s.parameters.enumerate_all_solutions=True; s.Solve(m,cb); pool=cb.sols; print('pool',len(pool)) +else: + st=s.Solve(m); print('exact square optimum',s.StatusName(st),s.ObjectiveValue(),'bound',s.BestObjectiveBound()) + pool=[[(i,j) for (i,j),var in x.items() for _ in range(s.Value(var))]] +for pn,terms in enumerate(pool): + name_=name if not POOL else f'{name}_{pn}' + print('terms',terms,'pair costs',[f[i][j] for i,j in terms]) + rnd=random.Random(1) + Tc=[t for t,(i,j) in enumerate(terms) if j=2, d>=1, find theta where the +# constraint rank drops below generic (off B-locus). +import pickle, itertools, sympy as sp, collections +from a2lib import * +al2,be2,al3,be3=sp.symbols('al2 be2 al3 be3') +g=[[0]*8,[al2*x+be2*y for x,y in zip(r1,r2)],[al3*x+be3*y for x,y in zip(r1,r2)]] +h=[[sp.Rational(R[X[i]][k])+g[i][k] for k in range(8)] for i in range(3)] +cl=sorted(cls.items()); sets=[((c,),w) for c,w in cl]; seen=set() +for a in range(len(cl)): + for b in range(a+1,len(cl)): + key=tuple(sorted((cl[a][0],cl[b][0],cl[a][0]^cl[b][0]))) + if key in seen: continue + seen.add(key); sets.append((key,cl[a][1]|cl[b][1])) +Xs=set(X); cnt=collections.Counter(); hits=[] +cache={} +for key,w in sets: + Kl=bits(w); S=[i for i in range(3) if X[i] in Kl] + if len(S)<2: continue + N=nullspace([R[t] for t in Kl if t not in Xs],8) + if not N: continue + # phi(N): projections onto (r1.x, r2.x) + ph=tuple(sorted(set(tuple(x) for x in [[dot(r1,n),dot(r2,n)] for n in N]))) + sig=(tuple(S),tuple(tuple(n) for n in N)) + C=sp.Matrix([[sum((h[i][k]-h[S[0]][k])*n[k] for k in range(8)) for n in N] for i in S[1:]]) + rg=C.subs({al2:3,be2:-7,al3:5,be3:2}).rank() + cnt[(len(S),len(N),rg)]+=1 + if rg==0: continue + minors=[C.extract(list(r),list(c)).det() for r in itertools.combinations(range(C.rows),rg) for c in itertools.combinations(range(C.cols),rg)] + minors=[sp.factor(mm) for mm in minors if mm!=0] + sols=sp.solve(minors,[al2,be2,al3,be3],dict=True) + good=[s_ for s_ in sols if sp.simplify((al2-al3-be3).subs(s_))!=0] + if good: hits.append((key,len(Kl),S,len(N),rg,good[:3])) +print(cnt); print('row jump loci off B-locus:',len(hits)) +for x in hits[:30]: print(x) +pickle.dump(hits,open('rowjump.pkl','wb')) diff --git a/research/a2-family-decoder-floors/evidence/hunt-a2-scripts/specall.py b/research/a2-family-decoder-floors/evidence/hunt-a2-scripts/specall.py new file mode 100644 index 0000000000..96b4cf5d7b --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/hunt-a2-scripts/specall.py @@ -0,0 +1,86 @@ +# HUNT-A2: unit-generic special-locus analysis for the A2 family (run with UNIT=..., PYTHONPATH=..). +# Killed sets K = one class, or a 2-dim subspace (union of 3 classes). For each: +# rows: special iff d=dim r(K\X)^perp in [1,|S|-1], |S|>=2 (else generic or never) +# cols b=1: V_K = {(g2,g3)=(n1-n2, n1-n3) in PxP, n_i in r(K cap O_i)^perp} (theta coords); special iff V_K != K^4 and not inside B-locus; +# if V_K == K^4 and S != {}: z-special, requirement z_{u_k} = -r_k.y, y solving the system (affine in theta). +import pickle, itertools +from a2lib import * +P=(1<<61)-1 +def rank_modp(rows,n): + A=[[int(x.numerator*pow(x.denominator,-1,P))%P for x in r] for r in rows]; rk=0 + for c in range(n): + p=next((i for i in range(rk,len(A)) if A[i][c]),None) + if p is None: continue + A[rk],A[p]=A[p],A[rk]; iv=pow(A[rk][c],-1,P); A[rk]=[x*iv%P for x in A[rk]] + for i in range(len(A)): + if i!=rk and A[i][c]: + f=A[i][c]; A[i]=[(a-f*b)%P for a,b in zip(A[i],A[rk])] + rk+=1 + return rk +r3v=R[X[2]] +# B-locus in theta coords: g2 = a r1 + b r2, g3 = a r1 + c r3 ; express r3 in (r1,r2) +co3=nullspace([[r1[k],r2[k],-r3v[k]] for k in range(8)],3)[0]; co3=[x/co3[2] for x in co3] # r3 = co3[0] r1 + co3[1] r2 +Bloc=[[Fr(1),Fr(0),Fr(1),Fr(0)],[Fr(0),Fr(1),Fr(0),Fr(0)],[Fr(0),Fr(0),co3[0],co3[1]]] +Bnorm=nullspace(Bloc,4) +def inB(V): return all(dot(n,x)==0 for n in Bnorm for x in V) +def Vsub(Kl): + Ni=[] + for i in range(3): + rows=[R[t] for t in Kl if t in Oset[i]] + Ni.append(nullspace(rows,8) if rows else [[Fr(int(a==b)) for a in range(8)] for b in range(8)]) + nv=sum(len(n) for n in Ni)+4; rows=[] + for k in range(8): + for which in (1,2): + row=[Fr(0)]*nv + for m,b_ in enumerate(Ni[0]): row[m]=b_[k] + o=len(Ni[0]) + if which==1: + for m,b_ in enumerate(Ni[1]): row[o+m]=-b_[k] + o+=len(Ni[1]) + if which==2: + for m,b_ in enumerate(Ni[2]): row[o+m]=-b_[k] + o+=len(Ni[2]) + if which==1: row[o]=-r1[k]; row[o+1]=-r2[k] + else: row[o+2]=-r1[k]; row[o+3]=-r2[k] + rows.append(row) + proj=[x[-4:] for x in nullspace(rows,nv)] + proj=[p for p in proj if any(a!=0 for a in p)] + return nullspace(nullspace(proj,4),4) if proj else [] +Oset=[set(o) for o in O]; Xs=set(X) +def zreq(Kl,th): + g=gvecs(th); S=[i for i in range(3) if X[i] in Kl] + rows=[R[s]+[-dot(R[s],g[i])] for i in range(3) for s in Kl if s in Oset[i]] + ns=nullspace(rows,9); part=[x for x in ns if x[8]!=0] + if not part: return 'none' + p0=part[0]; homs=[[a-b*x[8]/p0[8] for a,b in zip(x,p0)][:8] for x in ns] + homs=[hh for hh in homs if any(a!=0 for a in hh)] + p=[a/p0[8] for a in p0][:8] + if homs and rank([[ -dot(R[X[k]],hh) for hh in homs] for k in S],len(homs))>0: return 'free' + return {k:-dot(R[X[k]],p) for k in S} +cl=sorted(cls.items()); seen=set(); sets=[] +for (c1,w1) in cl: sets.append(((c1,),w1)) +for a in range(len(cl)): + for b in range(a+1,len(cl)): + key=tuple(sorted((cl[a][0],cl[b][0],cl[a][0]^cl[b][0]))) + if key in seen: continue + seen.add(key); sets.append((key,cl[a][1]|cl[b][1])) +rowspec=[]; colspec=[]; zspec=[] +ths=[tuple(Fr(int(i==e)) for i in range(4)) for e in range(4)]+[(Fr(0),)*4] +gth=[tuple(Fr(x) for x in (3,-7,5,2)),tuple(Fr(x) for x in (-4,1,6,-3))] +for key,w in sets: + Kl=bits(w); S=[i for i in range(3) if X[i] in Kl]; rest=[t for t in Kl if t not in Xs] + d=8-rank_modp([R[t] for t in rest],8) + if d>=1 and len(S)>=2 and d<=len(S)-1: rowspec.append((key,len(Kl),tuple(S),d)) + dims=[8-rank_modp([R[t] for t in Kl if t in Oset[i]],8) for i in range(3)] + if all(dd<=1 for dd in dims) and not S: continue + V=Vsub(Kl) + if len(V)==4: + if S: + r=[zreq(Kl,th) for th in gth] + if all(isinstance(x,dict) for x in r): zspec.append((key,len(Kl),tuple(S))) + continue + if V and not inB(V): colspec.append((key,len(Kl),tuple(S),tuple(dims),len(V))) +print(UNIT,'sets',len(sets),'row-special',len(rowspec),rowspec[:5]) +print('col theta-special (not in B-locus)',len(colspec),colspec[:10]) +print('z-special',len(zspec),zspec[:20]) +pickle.dump((rowspec,colspec,zspec),open('specall.pkl','wb')) diff --git a/research/a2-family-decoder-floors/evidence/hunt-a2-scripts/sympm2.py b/research/a2-family-decoder-floors/evidence/hunt-a2-scripts/sympm2.py new file mode 100644 index 0000000000..7dbb56d8ce --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/hunt-a2-scripts/sympm2.py @@ -0,0 +1,43 @@ +# symbolic duality products for a catalogue pickle (gen or zX-special), returns variable (dir_i,dir_j) pairs +import sympy as sp, pickle, collections, sys +from a2lib import * +cat=sys.argv[1]; D=pickle.load(open(cat,'rb')); out=D['out']; th0=D['th']; zX0=D['zX'] +rd,cd,f=pickle.load(open(cat.replace('cat_','tab_'),'rb')) +al2,be2,al3,be3,z1,z2,z3=sp.symbols('al2 be2 al3 be3 z1 z2 z3') +a=al2; c=al3+be3 +key=cat[4:-4] +if key=='gen': zsub=(z1,z2,z3) +else: + ZA=pickle.load(open('zaff.pkl','rb'))[key]; zl=[z1,z2,z3] + for k_,e_ in ZA.items(): zl[k_]=e_.subs({sp.Symbol('al2'):al2,sp.Symbol('be2'):be2,sp.Symbol('al3'):al3,sp.Symbol('be3'):be3}) + zsub=tuple(zl) +g=[[0]*8,[al2*x+be2*y for x,y in zip(r1,r2)],[al3*x+be3*y for x,y in zip(r1,r2)]] +zs=[None]*v +for s in range(v): + for i in range(3): + if Gm[X[i]][s]==0: zs[s]=-sum(sp.Rational(x)*y for x,y in zip(R[s],g[i])); break +for i in range(3): zs[X[i]]=zsub[i] +A=[[sp.Rational(x) for x in R[s]]+[0] for s in range(v)] +for i in range(3): A[X[i]]=[sp.Rational(x)+y for x,y in zip(R[X[i]],g[i])]+[1] +Bv=[[sp.Rational(x) for x in R[s]]+[zs[s]] for s in range(v)] +def norm(x): + i=next(k for k in range(9) if x[k]!=0); return tuple(t/x[i] for t in x) +subs={al2:th0[0],be2:th0[1],al3:th0[2],be3:th0[3],z1:zX0[0],z2:zX0[1],z3:zX0[2]} +def symdir(rows): + ns=sp.Matrix(rows).nullspace(); assert len(ns)==1; return ns[0] +rowsym={}; colsym={} +for co,(sz,nr,nc) in out.items(): + Os=bits(cls[co]) + if nr: + d=symdir([A[t] for t in Os]); dn=norm([Fr(str(sp.nsimplify(x.subs(subs)))) for x in d]); rowsym.setdefault(rd.index(dn),d) + if nc: + e=symdir([Bv[t] for t in Os]); en=norm([Fr(str(sp.nsimplify(x.subs(subs)))) for x in e]); colsym.setdefault(cd.index(en),e) +free=set(); kinds=collections.Counter(); EX={} +for i,d in rowsym.items(): + for j,e in colsym.items(): + p=sp.factor(sp.simplify((d.T*e)[0])); EX[(i,j)]=p + if p==0: kinds['zero']+=1 + elif p.free_symbols: free.add((i,j)); kinds['var']+=1; print(i,j,p) + else: kinds['const']+=1 +print(cat,len(rowsym),len(colsym),kinds) +pickle.dump(free,open(cat.replace('cat_','free_'),'wb')); pickle.dump(EX,open(cat.replace('cat_','expr_'),'wb')) diff --git a/research/a2-family-decoder-floors/evidence/hunt-a2-scripts/zexcl.py b/research/a2-family-decoder-floors/evidence/hunt-a2-scripts/zexcl.py new file mode 100644 index 0000000000..2e8a609357 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/hunt-a2-scripts/zexcl.py @@ -0,0 +1,29 @@ +# pairwise compatibility of single-class z-specials (as affine functions of theta) vs the B-locus +import pickle, sympy as sp, itertools +from a2lib import * +rowspec,colspec,zspec=pickle.load(open('specall.pkl','rb')) +Oset=[set(o) for o in O] +al2,be2,al3,be3=sp.symbols('al2 be2 al3 be3') +def zreq(Kl,th): + g=gvecs(th); S=[i for i in range(3) if X[i] in Kl] + rows=[R[s]+[-dot(R[s],g[i])] for i in range(3) for s in Kl if s in Oset[i]] + ns=nullspace(rows,9); part=[x for x in ns if x[8]!=0] + p0=part[0]; p=[a/p0[8] for a in p0][:8] + return {k:-dot(R[X[k]],p) for k in S} +ths=[(Fr(0),)*4]+[tuple(Fr(int(i==e)) for i in range(4)) for e in range(4)] +aff={} +for key,sz,S in zspec: + if len(key)!=1: continue + r=[zreq(bits(cls[key[0]]),th) for th in ths] + aff[key[0]]={k_:sp.Rational(str(r[0][k_]))+sum(sp.Rational(str(r[e+1][k_]-r[0][k_]))*s_ for e,s_ in enumerate((al2,be2,al3,be3))) for k_ in r[0]} + print(key[0],aff[key[0]]) +pickle.dump({f"s{k}":v_ for k,v_ in aff.items()},open("zaff.pkl","wb")) +r3v=R[X[2]] +co3=nullspace([[r1[k],r2[k],-r3v[k]] for k in range(8)],3)[0]; co3=[x/co3[2] for x in co3] +bn=nullspace([[Fr(1),Fr(0),Fr(1),Fr(0)],[Fr(0),Fr(1),Fr(0),Fr(0)],[Fr(0),Fr(0),co3[0],co3[1]]],4)[0] +Bf=sum(sp.Rational(str(c))*s_ for c,s_ in zip(bn,(al2,be2,al3,be3))) +for a,b in itertools.combinations(aff,2): + common=set(aff[a])&set(aff[b]); eqs=[aff[a][k]-aff[b][k] for k in common] + sol=sp.solve(eqs,[al2,be2,al3,be3],dict=True) + ok=[s_ for s_ in sol if sp.simplify(Bf.subs(s_))!=0] + print('pair',a,b,'common',common,'eqs',eqs,'compatible off B-locus:',bool(ok), ok[:1]) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_0_3_22.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_0_3_22.log.txt new file mode 100644 index 0000000000..994752c6d6 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_0_3_22.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [0, 3, 22] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (3,), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (0, 3, 22), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (22,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (103, (0,), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (129, (0,), 56, ['-1', '0', '1', '0', '0', '0', '0', '0']) + rank<8: (133, (3,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (137, (22,), 56, ['0', '0', '1', '0', '1', '0', '0', '0']) + rank<8: (146, (0, 3, 22), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (22,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (0,), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (280, (0,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (3,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (0, 3, 22), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (22,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (0, 3, 22), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (22,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (503, (3,), 56, ['1', '0', '0', '0', '1', '0', '0', '0']) + rank<8: (506, (3,), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (0,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(8, 48, [0, 22], (2, 0, 2)), (129, 56, [0], (3, 1, 2)), (137, 56, [22], (3, 1, 2)), (374, 48, [0, 3], (2, 0, 2)), (382, 48, [3, 22], (2, 0, 2)), (503, 56, [3], (3, 1, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(8, 129, 137, (2, 0, 2)), (129, 374, 503, (2, 0, 2)), (137, 382, 503, (2, 0, 2))] + 3 gen classes co-killable: (8, 129, 137) (2, 0, 2) + 3 gen classes co-killable: (129, 374, 503) (2, 0, 2) + 3 gen classes co-killable: (137, 382, 503) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_0_5_24.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_0_5_24.log.txt new file mode 100644 index 0000000000..a68c22ca1a --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_0_5_24.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [0, 5, 24] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (5,), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (0, 5, 24), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (24,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (103, (0,), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (111, (5,), 56, ['1', '0', '0', '0', '0', '1', '0', '0']) + rank<8: (129, (0,), 56, ['-1', '0', '1', '0', '0', '0', '0', '0']) + rank<8: (133, (5,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (0,), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (24,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (0, 5, 24), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (273, (24,), 56, ['0', '0', '1', '0', '0', '1', '0', '0']) + rank<8: (280, (0,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (24,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (0, 5, 24), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (5,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (0, 5, 24), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (24,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (506, (5,), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (0,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (3, 1, 2): 3, (2, 0, 2): 3}) +generic-gamma killable: [(111, 56, [5], (3, 1, 2)), (129, 56, [0], (3, 1, 2)), (238, 48, [0, 5], (2, 0, 2)), (273, 56, [24], (3, 1, 2)), (382, 48, [5, 24], (2, 0, 2)), (400, 48, [0, 24], (2, 0, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(111, 129, 238, (2, 0, 2)), (111, 273, 382, (2, 0, 2)), (129, 273, 400, (2, 0, 2))] + 3 gen classes co-killable: (111, 129, 238) (2, 0, 2) + 3 gen classes co-killable: (111, 273, 382) (2, 0, 2) + 3 gen classes co-killable: (129, 273, 400) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_0_60_103.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_0_60_103.log.txt new file mode 100644 index 0000000000..c9593847f9 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_0_60_103.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [0, 60, 103] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (2, (103,), 56, ['1', '-1', '-1', '-1', '-1', '-1', '-1', '1']) + rank<8: (29, (60,), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (0, 60, 103), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (103,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (103, (0, 60, 103), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (129, (0,), 56, ['-1', '0', '1', '0', '0', '0', '0', '0']) + rank<8: (133, (60,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (0, 60, 103), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (60,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (0,), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (280, (0,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (103,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (0,), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (60,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (380, (60,), 56, ['-1', '-1', '1', '-1', '-1', '-1', '-1', '1']) + rank<8: (420, (0,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (103,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (506, (103,), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (0, 60, 103), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (3, 1, 2): 3, (2, 0, 2): 3}) +generic-gamma killable: [(2, 56, [103], (3, 1, 2)), (129, 56, [0], (3, 1, 2)), (131, 48, [0, 103], (2, 0, 2)), (380, 56, [60], (3, 1, 2)), (382, 48, [60, 103], (2, 0, 2)), (509, 48, [0, 60], (2, 0, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(2, 129, 131, (2, 0, 2)), (2, 380, 382, (2, 0, 2)), (129, 380, 509, (2, 0, 2))] + 3 gen classes co-killable: (2, 129, 131) (2, 0, 2) + 3 gen classes co-killable: (2, 380, 382) (2, 0, 2) + 3 gen classes co-killable: (129, 380, 509) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_0_61_102.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_0_61_102.log.txt new file mode 100644 index 0000000000..c6e5e6eac1 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_0_61_102.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [0, 61, 102] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (61,), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (0, 61, 102), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (61,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (103, (0, 61, 102), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (129, (0,), 56, ['-1', '0', '1', '0', '0', '0', '0', '0']) + rank<8: (133, (61,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (0,), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (160, (102,), 56, ['-1', '1', '1', '1', '1', '1', '-1', '1']) + rank<8: (192, (61,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (0,), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (280, (0,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (102,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (0,), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (102,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (0, 61, 102), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (102,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (478, (61,), 56, ['1', '1', '-1', '1', '1', '1', '-1', '1']) + rank<8: (506, (102,), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (0, 61, 102), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(33, 48, [0, 102], (2, 0, 2)), (129, 56, [0], (3, 1, 2)), (160, 56, [102], (3, 1, 2)), (351, 48, [0, 61], (2, 0, 2)), (382, 48, [61, 102], (2, 0, 2)), (478, 56, [61], (3, 1, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(33, 129, 160, (2, 0, 2)), (129, 351, 478, (2, 0, 2)), (160, 382, 478, (2, 0, 2))] + 3 gen classes co-killable: (33, 129, 160) (2, 0, 2) + 3 gen classes co-killable: (129, 351, 478) (2, 0, 2) + 3 gen classes co-killable: (160, 382, 478) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_3_31.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_3_31.log.txt new file mode 100644 index 0000000000..198aba765c --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_3_31.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [1, 3, 31] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (1, 3, 31), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (1, 3, 31), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (1,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (103, (1,), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (133, (3,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (1, 3, 31), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (31,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (1,), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (280, (1,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (3,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (1, 3, 31), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (31,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (3,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (31,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (499, (31,), 56, ['0', '0', '0', '-1', '1', '0', '0', '0']) + rank<8: (503, (3,), 56, ['1', '0', '0', '0', '1', '0', '0', '0']) + rank<8: (506, (3,), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (507, (1,), 56, ['1', '0', '0', '1', '0', '0', '0', '0']) + rank<8: (510, (31,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(4, 48, [3, 31], (2, 0, 2)), (8, 48, [1, 31], (2, 0, 2)), (12, 48, [1, 3], (2, 0, 2)), (499, 56, [31], (3, 1, 2)), (503, 56, [3], (3, 1, 2)), (507, 56, [1], (3, 1, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(4, 499, 503, (2, 0, 2)), (8, 499, 507, (2, 0, 2)), (12, 503, 507, (2, 0, 2))] + 3 gen classes co-killable: (4, 499, 503) (2, 0, 2) + 3 gen classes co-killable: (8, 499, 507) (2, 0, 2) + 3 gen classes co-killable: (12, 503, 507) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_44_96.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_44_96.log.txt new file mode 100644 index 0000000000..ca83c8cca3 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_44_96.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [1, 44, 96] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (1, 44, 96), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (1,), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (1, 44, 96), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (103, (1, 44, 96), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (133, (96,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (1,), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (44,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (1,), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (280, (1,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (44,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (1, 44, 96), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (44,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (384, (44,), 56, ['1', '1', '1', '1', '1', '1', '1', '1']) + rank<8: (388, (96,), 56, ['-1', '1', '1', '-1', '1', '1', '1', '1']) + rank<8: (420, (96,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (96,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (506, (44,), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (507, (1,), 56, ['1', '0', '0', '1', '0', '0', '0', '0']) + rank<8: (510, (96,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(4, 48, [44, 96], (2, 0, 2)), (123, 48, [1, 44], (2, 0, 2)), (127, 48, [1, 96], (2, 0, 2)), (384, 56, [44], (3, 1, 2)), (388, 56, [96], (3, 1, 2)), (507, 56, [1], (3, 1, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(4, 384, 388, (2, 0, 2)), (123, 384, 507, (2, 0, 2)), (127, 388, 507, (2, 0, 2))] + 3 gen classes co-killable: (4, 384, 388) (2, 0, 2) + 3 gen classes co-killable: (123, 384, 507) (2, 0, 2) + 3 gen classes co-killable: (127, 388, 507) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_45_95.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_45_95.log.txt new file mode 100644 index 0000000000..50ba604daa --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_45_95.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [1, 45, 95] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (1,), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (1,), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (1, 45, 95), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (89, (95,), 56, ['1', '-1', '-1', '1', '-1', '-1', '1', '1']) + rank<8: (93, (45,), 56, ['-1', '-1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (103, (1, 45, 95), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (133, (95,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (1, 45, 95), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (45,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (1,), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (280, (1,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (95,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (1, 45, 95), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (45,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (45,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (95,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (506, (45,), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (507, (1,), 56, ['1', '0', '0', '1', '0', '0', '0', '0']) + rank<8: (510, (95,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(4, 48, [45, 95], (2, 0, 2)), (89, 56, [95], (3, 1, 2)), (93, 56, [45], (3, 1, 2)), (418, 48, [1, 95], (2, 0, 2)), (422, 48, [1, 45], (2, 0, 2)), (507, 56, [1], (3, 1, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(4, 89, 93, (2, 0, 2)), (89, 418, 507, (2, 0, 2)), (93, 422, 507, (2, 0, 2))] + 3 gen classes co-killable: (4, 89, 93) (2, 0, 2) + 3 gen classes co-killable: (89, 418, 507) (2, 0, 2) + 3 gen classes co-killable: (93, 422, 507) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_46_94.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_46_94.log.txt new file mode 100644 index 0000000000..f0702c2d32 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_46_94.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [1, 46, 94] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (1, 46, 94), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (1, 46, 94), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (1, 46, 94), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (103, (1,), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (133, (94,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (1,), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (46,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (1,), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (233, (94,), 56, ['1', '-1', '-1', '1', '-1', '1', '-1', '1']) + rank<8: (237, (46,), 56, ['-1', '-1', '-1', '-1', '-1', '1', '-1', '1']) + rank<8: (280, (1, 46, 94), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (46,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (1,), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (46,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (94,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (94,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (506, (46,), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (507, (1,), 56, ['1', '0', '0', '1', '0', '0', '0', '0']) + rank<8: (510, (94,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(4, 48, [46, 94], (2, 0, 2)), (233, 56, [94], (3, 1, 2)), (237, 56, [46], (3, 1, 2)), (274, 48, [1, 94], (2, 0, 2)), (278, 48, [1, 46], (2, 0, 2)), (507, 56, [1], (3, 1, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(4, 233, 237, (2, 0, 2)), (233, 274, 507, (2, 0, 2)), (237, 278, 507, (2, 0, 2))] + 3 gen classes co-killable: (4, 233, 237) (2, 0, 2) + 3 gen classes co-killable: (233, 274, 507) (2, 0, 2) + 3 gen classes co-killable: (237, 278, 507) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_47_93.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_47_93.log.txt new file mode 100644 index 0000000000..0f760a7256 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_47_93.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [1, 47, 93] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (1, 47, 93), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (1, 47, 93), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (1,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (75, (93,), 56, ['-1', '1', '1', '-1', '1', '-1', '-1', '1']) + rank<8: (79, (47,), 56, ['1', '1', '1', '1', '1', '-1', '-1', '1']) + rank<8: (103, (1,), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (133, (93,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (1, 47, 93), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (47,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (1,), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (280, (1, 47, 93), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (47,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (1,), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (93,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (47,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (93,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (506, (47,), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (507, (1,), 56, ['1', '0', '0', '1', '0', '0', '0', '0']) + rank<8: (510, (93,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(4, 48, [47, 93], (2, 0, 2)), (75, 56, [93], (3, 1, 2)), (79, 56, [47], (3, 1, 2)), (432, 48, [1, 93], (2, 0, 2)), (436, 48, [1, 47], (2, 0, 2)), (507, 56, [1], (3, 1, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(4, 75, 79, (2, 0, 2)), (75, 432, 507, (2, 0, 2)), (79, 436, 507, (2, 0, 2))] + 3 gen classes co-killable: (4, 75, 79) (2, 0, 2) + 3 gen classes co-killable: (75, 432, 507) (2, 0, 2) + 3 gen classes co-killable: (79, 436, 507) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_49_92.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_49_92.log.txt new file mode 100644 index 0000000000..2f28a444e5 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_49_92.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [1, 49, 92] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (1, 49, 92), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (1, 49, 92), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (1,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (103, (1,), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (133, (92,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (1,), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (49,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (1, 49, 92), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (280, (1, 49, 92), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (92,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (1,), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (49,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (49,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (92,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (467, (92,), 56, ['-1', '1', '1', '-1', '-1', '1', '-1', '1']) + rank<8: (471, (49,), 56, ['1', '1', '1', '1', '-1', '1', '-1', '1']) + rank<8: (506, (49,), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (507, (1,), 56, ['1', '0', '0', '1', '0', '0', '0', '0']) + rank<8: (510, (92,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(4, 48, [49, 92], (2, 0, 2)), (40, 48, [1, 92], (2, 0, 2)), (44, 48, [1, 49], (2, 0, 2)), (467, 56, [92], (3, 1, 2)), (471, 56, [49], (3, 1, 2)), (507, 56, [1], (3, 1, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(4, 467, 471, (2, 0, 2)), (40, 467, 507, (2, 0, 2)), (44, 471, 507, (2, 0, 2))] + 3 gen classes co-killable: (4, 467, 471) (2, 0, 2) + 3 gen classes co-killable: (40, 467, 507) (2, 0, 2) + 3 gen classes co-killable: (44, 471, 507) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_50_91.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_50_91.log.txt new file mode 100644 index 0000000000..5de2f46aa7 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_50_91.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [1, 50, 91] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (1,), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (1,), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (1,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (103, (1, 50, 91), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (133, (91,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (1, 50, 91), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (50,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (1, 50, 91), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (280, (1,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (50,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (1, 50, 91), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (355, (91,), 56, ['-1', '1', '1', '-1', '-1', '-1', '1', '1']) + rank<8: (359, (50,), 56, ['1', '1', '1', '1', '-1', '-1', '1', '1']) + rank<8: (369, (50,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (91,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (91,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (506, (50,), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (507, (1,), 56, ['1', '0', '0', '1', '0', '0', '0', '0']) + rank<8: (510, (91,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(4, 48, [50, 91], (2, 0, 2)), (152, 48, [1, 91], (2, 0, 2)), (156, 48, [1, 50], (2, 0, 2)), (355, 56, [91], (3, 1, 2)), (359, 56, [50], (3, 1, 2)), (507, 56, [1], (3, 1, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(4, 355, 359, (2, 0, 2)), (152, 355, 507, (2, 0, 2)), (156, 359, 507, (2, 0, 2))] + 3 gen classes co-killable: (4, 355, 359) (2, 0, 2) + 3 gen classes co-killable: (152, 355, 507) (2, 0, 2) + 3 gen classes co-killable: (156, 359, 507) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_51_90.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_51_90.log.txt new file mode 100644 index 0000000000..7c8be0a946 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_51_90.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [1, 51, 90] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (1, 51, 90), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (1,), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (1,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (103, (1, 51, 90), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (133, (90,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (1,), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (186, (51,), 56, ['-1', '-1', '-1', '-1', '1', '1', '1', '1']) + rank<8: (190, (90,), 56, ['1', '-1', '-1', '1', '1', '1', '1', '1']) + rank<8: (192, (51,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (1, 51, 90), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (280, (1,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (90,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (1, 51, 90), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (51,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (51,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (90,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (506, (51,), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (507, (1,), 56, ['1', '0', '0', '1', '0', '0', '0', '0']) + rank<8: (510, (90,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(4, 48, [51, 90], (2, 0, 2)), (186, 56, [51], (3, 1, 2)), (190, 56, [90], (3, 1, 2)), (321, 48, [1, 51], (2, 0, 2)), (325, 48, [1, 90], (2, 0, 2)), (507, 56, [1], (3, 1, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(4, 186, 190, (2, 0, 2)), (186, 321, 507, (2, 0, 2)), (190, 325, 507, (2, 0, 2))] + 3 gen classes co-killable: (4, 186, 190) (2, 0, 2) + 3 gen classes co-killable: (186, 321, 507) (2, 0, 2) + 3 gen classes co-killable: (190, 325, 507) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_5_33.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_5_33.log.txt new file mode 100644 index 0000000000..7d35504d52 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_1_5_33.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [1, 5, 33] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (1, 5, 33), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (1, 5, 33), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (1,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (103, (1,), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (107, (33,), 56, ['0', '0', '0', '-1', '0', '1', '0', '0']) + rank<8: (111, (5,), 56, ['1', '0', '0', '0', '0', '1', '0', '0']) + rank<8: (133, (5,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (1,), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (33,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (1, 5, 33), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (280, (1,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (33,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (1, 5, 33), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (5,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (5,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (33,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (506, (5,), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (507, (1,), 56, ['1', '0', '0', '1', '0', '0', '0', '0']) + rank<8: (510, (33,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(4, 48, [5, 33], (2, 0, 2)), (107, 56, [33], (3, 1, 2)), (111, 56, [5], (3, 1, 2)), (400, 48, [1, 33], (2, 0, 2)), (404, 48, [1, 5], (2, 0, 2)), (507, 56, [1], (3, 1, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(4, 107, 111, (2, 0, 2)), (107, 400, 507, (2, 0, 2)), (111, 404, 507, (2, 0, 2))] + 3 gen classes co-killable: (4, 107, 111) (2, 0, 2) + 3 gen classes co-killable: (107, 400, 507) (2, 0, 2) + 3 gen classes co-killable: (111, 404, 507) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_5_44_101.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_5_44_101.log.txt new file mode 100644 index 0000000000..f5f1df0a92 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_5_44_101.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [5, 44, 101] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (16, (101,), 56, ['-1', '1', '1', '1', '1', '-1', '1', '1']) + rank<8: (29, (5, 44, 101), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (5,), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (44,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (103, (44,), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (111, (5,), 56, ['1', '0', '0', '0', '0', '1', '0', '0']) + rank<8: (133, (5,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (101,), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (44,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (5,), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (280, (101,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (44,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (5, 44, 101), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (5, 44, 101), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (384, (44,), 56, ['1', '1', '1', '1', '1', '1', '1', '1']) + rank<8: (420, (5,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (101,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (506, (5, 44, 101), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (101,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (3, 1, 2): 3, (2, 0, 2): 3}) +generic-gamma killable: [(16, 56, [101], (3, 1, 2)), (111, 56, [5], (3, 1, 2)), (127, 48, [5, 101], (2, 0, 2)), (384, 56, [44], (3, 1, 2)), (400, 48, [44, 101], (2, 0, 2)), (495, 48, [5, 44], (2, 0, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(16, 111, 127, (2, 0, 2)), (16, 384, 400, (2, 0, 2)), (111, 384, 495, (2, 0, 2))] + 3 gen classes co-killable: (16, 111, 127) (2, 0, 2) + 3 gen classes co-killable: (16, 384, 400) (2, 0, 2) + 3 gen classes co-killable: (111, 384, 495) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_5_45_100.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_5_45_100.log.txt new file mode 100644 index 0000000000..aa3e19434e --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_5_45_100.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [5, 45, 100] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (5,), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (5,), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (45,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (93, (45,), 56, ['-1', '-1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (103, (45,), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (111, (5,), 56, ['1', '0', '0', '0', '0', '1', '0', '0']) + rank<8: (133, (5,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (45,), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (45,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (5,), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (280, (100,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (100,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (5, 45, 100), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (5, 45, 100), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (5, 45, 100), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (100,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (461, (100,), 56, ['1', '-1', '-1', '-1', '-1', '1', '1', '1']) + rank<8: (506, (5, 45, 100), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (100,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(50, 48, [5, 45], (2, 0, 2)), (93, 56, [45], (3, 1, 2)), (111, 56, [5], (3, 1, 2)), (400, 48, [45, 100], (2, 0, 2)), (418, 48, [5, 100], (2, 0, 2)), (461, 56, [100], (3, 1, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(50, 93, 111, (2, 0, 2)), (93, 400, 461, (2, 0, 2)), (111, 418, 461, (2, 0, 2))] + 3 gen classes co-killable: (50, 93, 111) (2, 0, 2) + 3 gen classes co-killable: (93, 400, 461) (2, 0, 2) + 3 gen classes co-killable: (111, 418, 461) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_5_48_97.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_5_48_97.log.txt new file mode 100644 index 0000000000..b973479c47 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_5_48_97.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [5, 48, 97] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (5, 48, 97), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (5, 48, 97), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (48,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (103, (97,), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (111, (5,), 56, ['1', '0', '0', '0', '0', '1', '0', '0']) + rank<8: (133, (5,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (48,), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (48,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (5, 48, 97), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (229, (97,), 56, ['1', '-1', '-1', '-1', '1', '1', '-1', '1']) + rank<8: (280, (48,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (97,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (5,), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (5,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (373, (48,), 56, ['-1', '-1', '-1', '-1', '1', '-1', '-1', '1']) + rank<8: (420, (5,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (97,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (506, (5, 48, 97), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (97,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (3, 1, 2): 3, (2, 0, 2): 3}) +generic-gamma killable: [(111, 56, [5], (3, 1, 2)), (138, 48, [5, 97], (2, 0, 2)), (229, 56, [97], (3, 1, 2)), (282, 48, [5, 48], (2, 0, 2)), (373, 56, [48], (3, 1, 2)), (400, 48, [48, 97], (2, 0, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(111, 138, 229, (2, 0, 2)), (111, 282, 373, (2, 0, 2)), (229, 373, 400, (2, 0, 2))] + 3 gen classes co-killable: (111, 138, 229) (2, 0, 2) + 3 gen classes co-killable: (111, 282, 373) (2, 0, 2) + 3 gen classes co-killable: (229, 373, 400) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_5_53_93.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_5_53_93.log.txt new file mode 100644 index 0000000000..b753684e55 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_5_53_93.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [5, 53, 93] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (5, 53, 93), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (5, 53, 93), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (53,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (75, (93,), 56, ['-1', '1', '1', '-1', '1', '-1', '-1', '1']) + rank<8: (103, (53,), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (111, (5,), 56, ['1', '0', '0', '0', '0', '1', '0', '0']) + rank<8: (133, (5, 53, 93), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (93,), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (53,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (5,), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (280, (93,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (53,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (5,), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (5, 53, 93), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (5,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (93,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (475, (53,), 56, ['1', '1', '1', '-1', '1', '1', '-1', '1']) + rank<8: (506, (5,), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (93,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(36, 48, [5, 93], (2, 0, 2)), (75, 56, [93], (3, 1, 2)), (111, 56, [5], (3, 1, 2)), (400, 48, [53, 93], (2, 0, 2)), (436, 48, [5, 53], (2, 0, 2)), (475, 56, [53], (3, 1, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(36, 75, 111, (2, 0, 2)), (75, 400, 475, (2, 0, 2)), (111, 436, 475, (2, 0, 2))] + 3 gen classes co-killable: (36, 75, 111) (2, 0, 2) + 3 gen classes co-killable: (75, 400, 475) (2, 0, 2) + 3 gen classes co-killable: (111, 436, 475) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_5_56_91.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_5_56_91.log.txt new file mode 100644 index 0000000000..e22c13957e --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_5_56_91.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [5, 56, 91] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (5,), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (5,), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (56,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (103, (91,), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (111, (5,), 56, ['1', '0', '0', '0', '0', '1', '0', '0']) + rank<8: (133, (5, 56, 91), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (91,), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (56,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (5, 56, 91), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (243, (56,), 56, ['1', '1', '1', '-1', '-1', '1', '1', '1']) + rank<8: (280, (56,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (56,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (5, 56, 91), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (355, (91,), 56, ['-1', '1', '1', '-1', '-1', '-1', '1', '1']) + rank<8: (369, (5,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (5, 56, 91), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (91,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (506, (5,), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (91,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (3, 1, 2): 3, (2, 0, 2): 3}) +generic-gamma killable: [(111, 56, [5], (3, 1, 2)), (156, 48, [5, 56], (2, 0, 2)), (243, 56, [56], (3, 1, 2)), (268, 48, [5, 91], (2, 0, 2)), (355, 56, [91], (3, 1, 2)), (400, 48, [56, 91], (2, 0, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(111, 156, 243, (2, 0, 2)), (111, 268, 355, (2, 0, 2)), (243, 355, 400, (2, 0, 2))] + 3 gen classes co-killable: (111, 156, 243) (2, 0, 2) + 3 gen classes co-killable: (111, 268, 355) (2, 0, 2) + 3 gen classes co-killable: (243, 355, 400) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_7_44_102.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_7_44_102.log.txt new file mode 100644 index 0000000000..88bfdf7b07 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_7_44_102.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [7, 44, 102] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (44,), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (102,), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (44,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (103, (7, 44, 102), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (133, (7,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (7,), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (160, (102,), 56, ['-1', '1', '1', '1', '1', '1', '-1', '1']) + rank<8: (192, (44,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (7,), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (223, (7,), 56, ['1', '0', '0', '0', '0', '0', '1', '0']) + rank<8: (280, (7,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (7, 44, 102), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (44,), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (7, 44, 102), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (384, (44,), 56, ['1', '1', '1', '1', '1', '1', '1', '1']) + rank<8: (420, (102,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (102,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (506, (7, 44, 102), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (102,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(127, 48, [7, 102], (2, 0, 2)), (160, 56, [102], (3, 1, 2)), (223, 56, [7], (3, 1, 2)), (288, 48, [44, 102], (2, 0, 2)), (351, 48, [7, 44], (2, 0, 2)), (384, 56, [44], (3, 1, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(127, 160, 223, (2, 0, 2)), (160, 288, 384, (2, 0, 2)), (223, 351, 384, (2, 0, 2))] + 3 gen classes co-killable: (127, 160, 223) (2, 0, 2) + 3 gen classes co-killable: (160, 288, 384) (2, 0, 2) + 3 gen classes co-killable: (223, 351, 384) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_7_46_100.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_7_46_100.log.txt new file mode 100644 index 0000000000..9e35f6227e --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_7_46_100.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [7, 46, 100] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (46,), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (46,), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (46,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (103, (7,), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (133, (7,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (7,), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (46,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (7,), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (223, (7,), 56, ['1', '0', '0', '0', '0', '0', '1', '0']) + rank<8: (237, (46,), 56, ['-1', '-1', '-1', '-1', '-1', '1', '-1', '1']) + rank<8: (280, (7, 46, 100), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (7, 46, 100), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (100,), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (7, 46, 100), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (100,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (100,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (461, (100,), 56, ['1', '-1', '-1', '-1', '-1', '1', '1', '1']) + rank<8: (506, (7, 46, 100), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (100,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(50, 48, [7, 46], (2, 0, 2)), (223, 56, [7], (3, 1, 2)), (237, 56, [46], (3, 1, 2)), (274, 48, [7, 100], (2, 0, 2)), (288, 48, [46, 100], (2, 0, 2)), (461, 56, [100], (3, 1, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(50, 223, 237, (2, 0, 2)), (223, 274, 461, (2, 0, 2)), (237, 288, 461, (2, 0, 2))] + 3 gen classes co-killable: (50, 223, 237) (2, 0, 2) + 3 gen classes co-killable: (223, 274, 461) (2, 0, 2) + 3 gen classes co-killable: (237, 288, 461) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_7_48_98.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_7_48_98.log.txt new file mode 100644 index 0000000000..4075842489 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_7_48_98.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [7, 48, 98] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (48,), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (48,), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (48,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (85, (98,), 56, ['1', '-1', '-1', '-1', '1', '-1', '1', '1']) + rank<8: (103, (7,), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (133, (7,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (7, 48, 98), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (48,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (7, 48, 98), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (223, (7,), 56, ['1', '0', '0', '0', '0', '0', '1', '0']) + rank<8: (280, (7, 48, 98), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (7,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (98,), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (7,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (373, (48,), 56, ['-1', '-1', '-1', '-1', '1', '-1', '-1', '1']) + rank<8: (420, (98,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (98,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (506, (7, 48, 98), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (98,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (3, 1, 2): 3, (2, 0, 2): 3}) +generic-gamma killable: [(85, 56, [98], (3, 1, 2)), (138, 48, [7, 98], (2, 0, 2)), (223, 56, [7], (3, 1, 2)), (288, 48, [48, 98], (2, 0, 2)), (373, 56, [48], (3, 1, 2)), (426, 48, [7, 48], (2, 0, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(85, 138, 223, (2, 0, 2)), (85, 288, 373, (2, 0, 2)), (223, 373, 426, (2, 0, 2))] + 3 gen classes co-killable: (85, 138, 223) (2, 0, 2) + 3 gen classes co-killable: (85, 288, 373) (2, 0, 2) + 3 gen classes co-killable: (223, 373, 426) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_7_52_95.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_7_52_95.log.txt new file mode 100644 index 0000000000..5246e7f28b --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_7_52_95.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [7, 52, 95] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (52,), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (52,), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (95,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (89, (95,), 56, ['1', '-1', '-1', '1', '-1', '-1', '1', '1']) + rank<8: (103, (7, 52, 95), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (133, (7, 52, 95), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (7, 52, 95), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (52,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (7,), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (223, (7,), 56, ['1', '0', '0', '0', '0', '0', '1', '0']) + rank<8: (280, (7,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (7, 52, 95), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (95,), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (7,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (377, (52,), 56, ['-1', '-1', '-1', '1', '-1', '-1', '-1', '1']) + rank<8: (420, (52,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (95,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (506, (7,), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (95,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (3, 1, 2): 3, (2, 0, 2): 3}) +generic-gamma killable: [(89, 56, [95], (3, 1, 2)), (134, 48, [7, 95], (2, 0, 2)), (223, 56, [7], (3, 1, 2)), (288, 48, [52, 95], (2, 0, 2)), (377, 56, [52], (3, 1, 2)), (422, 48, [7, 52], (2, 0, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(89, 134, 223, (2, 0, 2)), (89, 288, 377, (2, 0, 2)), (223, 377, 422, (2, 0, 2))] + 3 gen classes co-killable: (89, 134, 223) (2, 0, 2) + 3 gen classes co-killable: (89, 288, 377) (2, 0, 2) + 3 gen classes co-killable: (223, 377, 422) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_7_54_93.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_7_54_93.log.txt new file mode 100644 index 0000000000..22d371f089 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_7_54_93.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [7, 54, 93] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (93,), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (93,), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (54,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (75, (93,), 56, ['-1', '1', '1', '-1', '1', '-1', '-1', '1']) + rank<8: (103, (7,), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (133, (7, 54, 93), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (7, 54, 93), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (54,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (7,), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (223, (7,), 56, ['1', '0', '0', '0', '0', '0', '1', '0']) + rank<8: (280, (7, 54, 93), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (7,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (54,), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (363, (54,), 56, ['1', '1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (369, (7, 54, 93), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (54,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (93,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (506, (7,), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (93,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (3, 1, 2): 3, (2, 0, 2): 3}) +generic-gamma killable: [(75, 56, [93], (3, 1, 2)), (148, 48, [7, 93], (2, 0, 2)), (223, 56, [7], (3, 1, 2)), (288, 48, [54, 93], (2, 0, 2)), (363, 56, [54], (3, 1, 2)), (436, 48, [7, 54], (2, 0, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(75, 148, 223, (2, 0, 2)), (75, 288, 363, (2, 0, 2)), (223, 363, 436, (2, 0, 2))] + 3 gen classes co-killable: (75, 148, 223) (2, 0, 2) + 3 gen classes co-killable: (75, 288, 363) (2, 0, 2) + 3 gen classes co-killable: (223, 363, 436) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_9_44_103.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_9_44_103.log.txt new file mode 100644 index 0000000000..495455bc64 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_9_44_103.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [9, 44, 103] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (2, (103,), 56, ['1', '-1', '-1', '-1', '-1', '-1', '-1', '1']) + rank<8: (29, (44,), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (103,), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (9, 44, 103), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (103, (9, 44, 103), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (125, (9,), 56, ['1', '0', '0', '0', '0', '0', '0', '1']) + rank<8: (133, (9,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (103,), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (44,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (9,), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (280, (9,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (9, 44, 103), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (44,), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (44,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (384, (44,), 56, ['1', '1', '1', '1', '1', '1', '1', '1']) + rank<8: (420, (9,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (103,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (506, (9, 44, 103), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (103,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (3, 1, 2): 3, (2, 0, 2): 3}) +generic-gamma killable: [(2, 56, [103], (3, 1, 2)), (125, 56, [9], (3, 1, 2)), (127, 48, [9, 103], (2, 0, 2)), (384, 56, [44], (3, 1, 2)), (386, 48, [44, 103], (2, 0, 2)), (509, 48, [9, 44], (2, 0, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(2, 125, 127, (2, 0, 2)), (2, 384, 386, (2, 0, 2)), (125, 384, 509, (2, 0, 2))] + 3 gen classes co-killable: (2, 125, 127) (2, 0, 2) + 3 gen classes co-killable: (2, 384, 386) (2, 0, 2) + 3 gen classes co-killable: (125, 384, 509) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_9_47_100.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_9_47_100.log.txt new file mode 100644 index 0000000000..3c6a692ed6 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_9_47_100.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [9, 47, 100] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (47,), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (47,), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (9,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (79, (47,), 56, ['1', '1', '1', '1', '1', '-1', '-1', '1']) + rank<8: (103, (9,), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (125, (9,), 56, ['1', '0', '0', '0', '0', '0', '0', '1']) + rank<8: (133, (9,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (47,), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (47,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (9,), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (280, (9, 47, 100), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (9, 47, 100), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (100,), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (100,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (9, 47, 100), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (100,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (461, (100,), 56, ['1', '-1', '-1', '-1', '-1', '1', '1', '1']) + rank<8: (506, (9, 47, 100), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (100,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(50, 48, [9, 47], (2, 0, 2)), (79, 56, [47], (3, 1, 2)), (125, 56, [9], (3, 1, 2)), (386, 48, [47, 100], (2, 0, 2)), (432, 48, [9, 100], (2, 0, 2)), (461, 56, [100], (3, 1, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(50, 79, 125, (2, 0, 2)), (79, 386, 461, (2, 0, 2)), (125, 432, 461, (2, 0, 2))] + 3 gen classes co-killable: (50, 79, 125) (2, 0, 2) + 3 gen classes co-killable: (79, 386, 461) (2, 0, 2) + 3 gen classes co-killable: (125, 432, 461) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_9_49_98.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_9_49_98.log.txt new file mode 100644 index 0000000000..25221f8d50 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_9_49_98.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [9, 49, 98] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (49,), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (49,), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (9,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (85, (98,), 56, ['1', '-1', '-1', '-1', '1', '-1', '1', '1']) + rank<8: (103, (9,), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (125, (9,), 56, ['1', '0', '0', '0', '0', '0', '0', '1']) + rank<8: (133, (9,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (98,), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (49,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (9, 49, 98), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (280, (9, 49, 98), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (9,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (98,), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (49,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (9, 49, 98), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (98,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (471, (49,), 56, ['1', '1', '1', '1', '-1', '1', '-1', '1']) + rank<8: (506, (9, 49, 98), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (98,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(40, 48, [9, 98], (2, 0, 2)), (85, 56, [98], (3, 1, 2)), (125, 56, [9], (3, 1, 2)), (386, 48, [49, 98], (2, 0, 2)), (426, 48, [9, 49], (2, 0, 2)), (471, 56, [49], (3, 1, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(40, 85, 125, (2, 0, 2)), (85, 386, 471, (2, 0, 2)), (125, 426, 471, (2, 0, 2))] + 3 gen classes co-killable: (40, 85, 125) (2, 0, 2) + 3 gen classes co-killable: (85, 386, 471) (2, 0, 2) + 3 gen classes co-killable: (125, 426, 471) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_9_50_97.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_9_50_97.log.txt new file mode 100644 index 0000000000..2c92848fd7 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_9_50_97.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [9, 50, 97] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (97,), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (97,), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (9,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (103, (9, 50, 97), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (125, (9,), 56, ['1', '0', '0', '0', '0', '0', '0', '1']) + rank<8: (133, (9,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (50,), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (50,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (9, 50, 97), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (229, (97,), 56, ['1', '-1', '-1', '-1', '1', '1', '-1', '1']) + rank<8: (280, (9,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (9, 50, 97), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (50,), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (359, (50,), 56, ['1', '1', '1', '1', '-1', '-1', '1', '1']) + rank<8: (369, (50,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (9,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (97,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (506, (9, 50, 97), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (97,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (3, 1, 2): 3, (2, 0, 2): 3}) +generic-gamma killable: [(125, 56, [9], (3, 1, 2)), (152, 48, [9, 97], (2, 0, 2)), (229, 56, [97], (3, 1, 2)), (282, 48, [9, 50], (2, 0, 2)), (359, 56, [50], (3, 1, 2)), (386, 48, [50, 97], (2, 0, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(125, 152, 229, (2, 0, 2)), (125, 282, 359, (2, 0, 2)), (229, 359, 386, (2, 0, 2))] + 3 gen classes co-killable: (125, 152, 229) (2, 0, 2) + 3 gen classes co-killable: (125, 282, 359) (2, 0, 2) + 3 gen classes co-killable: (229, 359, 386) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/uc104_9_53_95.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/uc104_9_53_95.log.txt new file mode 100644 index 0000000000..b0070ea500 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/uc104_9_53_95.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [9, 53, 95] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (53,), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (53,), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (9, 53, 95), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (89, (95,), 56, ['1', '-1', '-1', '1', '-1', '-1', '1', '1']) + rank<8: (103, (9, 53, 95), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (125, (9,), 56, ['1', '0', '0', '0', '0', '0', '0', '1']) + rank<8: (133, (9, 53, 95), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (146, (95,), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (53,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (9,), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (280, (9,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (9, 53, 95), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (95,), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (53,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (9,), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (95,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (475, (53,), 56, ['1', '1', '1', '-1', '1', '1', '-1', '1']) + rank<8: (506, (9,), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (95,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(36, 48, [9, 95], (2, 0, 2)), (89, 56, [95], (3, 1, 2)), (125, 56, [9], (3, 1, 2)), (386, 48, [53, 95], (2, 0, 2)), (422, 48, [9, 53], (2, 0, 2)), (475, 56, [53], (3, 1, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(36, 89, 125, (2, 0, 2)), (89, 386, 475, (2, 0, 2)), (125, 422, 475, (2, 0, 2))] + 3 gen classes co-killable: (36, 89, 125) (2, 0, 2) + 3 gen classes co-killable: (89, 386, 475) (2, 0, 2) + 3 gen classes co-killable: (125, 422, 475) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/ucensus_E8.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/ucensus_E8.log.txt new file mode 100644 index 0000000000..7f312e2a57 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/ucensus_E8.log.txt @@ -0,0 +1,15 @@ +E8 v 120 X [0, 2, 15] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 3), ((1, 8), 189), ((2, 8), 192), ((3, 8), 64)] + rank<8: (505, (15,), 64, ['0', '-1', '1', '0', '0', '0', '0', '0']) + rank<8: (507, (2,), 64, ['1', '0', '1', '0', '0', '0', '0', '0']) + rank<8: (509, (0,), 64, ['1', '1', '0', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 505, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(2, 56, [2, 15], (2, 0, 2)), (4, 56, [0, 15], (2, 0, 2)), (6, 56, [0, 2], (2, 0, 2)), (505, 64, [15], (3, 1, 2)), (507, 64, [2], (3, 1, 2)), (509, 64, [0], (3, 1, 2))] +Gram-deficient (eta=0) classes: 3 +co-killable 2-dim off cocycle: [(2, 505, 507, (2, 0, 2)), (4, 505, 509, (2, 0, 2)), (6, 507, 509, (2, 0, 2))] + 3 gen classes co-killable: (2, 505, 507) (2, 0, 2) + 3 gen classes co-killable: (4, 505, 509) (2, 0, 2) + 3 gen classes co-killable: (6, 507, 509) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/ucensus_P104.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/ucensus_P104.log.txt new file mode 100644 index 0000000000..994752c6d6 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/ucensus_P104.log.txt @@ -0,0 +1,31 @@ +P104 v 104 X [0, 3, 22] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 15), ((1, 8), 177), ((2, 8), 192), ((3, 7), 4), ((3, 8), 60)] + rank<8: (29, (3,), 52, ['1', '1', '-1', '-1', '-1', '-1', '1', '1']) + rank<8: (34, (0, 3, 22), 52, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (71, (22,), 52, ['-1', '1', '1', '1', '-1', '-1', '-1', '1']) + rank<8: (103, (0,), 52, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (129, (0,), 56, ['-1', '0', '1', '0', '0', '0', '0', '0']) + rank<8: (133, (3,), 52, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (137, (22,), 56, ['0', '0', '1', '0', '1', '0', '0', '0']) + rank<8: (146, (0, 3, 22), 52, ['0', '0', '0', '0', '0', '1', '0', '1']) + rank<8: (192, (22,), 52, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (200, (0,), 52, ['0', '1', '0', '0', '1', '0', '0', '0']) + rank<8: (280, (0,), 52, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (299, (3,), 52, ['-1', '-1', '1', '-1', '1', '-1', '1', '1']) + rank<8: (349, (0, 3, 22), 52, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (369, (22,), 52, ['1', '-1', '-1', '1', '1', '-1', '-1', '1']) + rank<8: (420, (0, 3, 22), 52, ['0', '0', '0', '1', '0', '0', '1', '0']) + rank<8: (447, (22,), 52, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (503, (3,), 56, ['1', '0', '0', '0', '1', '0', '0', '0']) + rank<8: (506, (3,), 52, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (510, (0,), 52, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 489, (2, 1, 1): 16, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(8, 48, [0, 22], (2, 0, 2)), (129, 56, [0], (3, 1, 2)), (137, 56, [22], (3, 1, 2)), (374, 48, [0, 3], (2, 0, 2)), (382, 48, [3, 22], (2, 0, 2)), (503, 56, [3], (3, 1, 2))] +Gram-deficient (eta=0) classes: 19 +co-killable 2-dim off cocycle: [(8, 129, 137, (2, 0, 2)), (129, 374, 503, (2, 0, 2)), (137, 382, 503, (2, 0, 2))] + 3 gen classes co-killable: (8, 129, 137) (2, 0, 2) + 3 gen classes co-killable: (129, 374, 503) (2, 0, 2) + 3 gen classes co-killable: (137, 382, 503) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/census/ucensus_P112.log.txt b/research/a2-family-decoder-floors/evidence/logs/census/ucensus_P112.log.txt new file mode 100644 index 0000000000..c95a47f297 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/census/ucensus_P112.log.txt @@ -0,0 +1,23 @@ +P112 v 112 X [0, 4, 25] + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 + span O_u\E6 7 (7) lines non-orth to all of X off X: 0 +row census (|S|,rank r(O\X)): [((0, 8), 63), ((1, 7), 9), ((1, 8), 183), ((2, 8), 192), ((3, 7), 2), ((3, 8), 62)] + rank<8: (33, (0, 4, 25), 56, ['0', '0', '0', '0', '0', '0', '1', '1']) + rank<8: (103, (0,), 56, ['0', '0', '0', '0', '-1', '1', '0', '0']) + rank<8: (134, (4,), 56, ['0', '0', '1', '1', '0', '0', '0', '0']) + rank<8: (192, (25,), 56, ['-1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (280, (0,), 56, ['0', '0', '0', '0', '1', '1', '0', '0']) + rank<8: (350, (0, 4, 25), 56, ['0', '0', '0', '0', '0', '0', '-1', '1']) + rank<8: (447, (25,), 56, ['1', '1', '0', '0', '0', '0', '0', '0']) + rank<8: (501, (25,), 60, ['0', '0', '-1', '0', '1', '0', '0', '0']) + rank<8: (503, (4,), 60, ['1', '0', '0', '0', '1', '0', '0', '0']) + rank<8: (505, (4,), 56, ['0', '0', '-1', '1', '0', '0', '0', '0']) + rank<8: (509, (0,), 60, ['1', '0', '1', '0', '0', '0', '0', '0']) +col off-X single info: Counter({(1, 0, 1): 497, (2, 1, 1): 8, (2, 0, 2): 3, (3, 1, 2): 3}) +generic-gamma killable: [(2, 52, [4, 25], (2, 0, 2)), (8, 52, [0, 25], (2, 0, 2)), (10, 52, [0, 4], (2, 0, 2)), (501, 60, [25], (3, 1, 2)), (503, 60, [4], (3, 1, 2)), (509, 60, [0], (3, 1, 2))] +Gram-deficient (eta=0) classes: 11 +co-killable 2-dim off cocycle: [(2, 501, 503, (2, 0, 2)), (8, 501, 509, (2, 0, 2)), (10, 503, 509, (2, 0, 2))] + 3 gen classes co-killable: (2, 501, 503) (2, 0, 2) + 3 gen classes co-killable: (8, 501, 509) (2, 0, 2) + 3 gen classes co-killable: (10, 503, 509) (2, 0, 2) diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar2_gen.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar2_gen.log.txt new file mode 100644 index 0000000000..1a4aed4816 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar2_gen.log.txt @@ -0,0 +1 @@ +gen it 0 status INFEASIBLE -> no robust assignment <= 71 cuts 0 diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar72_gen.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar72_gen.log.txt new file mode 100644 index 0000000000..3d1270516f --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar72_gen.log.txt @@ -0,0 +1,6 @@ +gen it 0 cost 72.0 needs zero [(2, 0), (3, 0)] terms [(0, 0), (2, 3), (3, 3), (4, 3), (4, 3), (4, 3), (4, 3), (4, 3), (4, 3)] + realize infeasible-neq None + NEQ-CUT (review) [(2, 0), (3, 0)] +gen it 1 cost 72.0 needs zero [(1, 0), (3, 0)] terms [(0, 0), (1, 3), (3, 3), (4, 3), (4, 3), (4, 3), (4, 3), (4, 3), (4, 3)] + realize ok ((Fraction(4, 3), Fraction(0, 1), Fraction(-11, 2), Fraction(-11, 2)), (Fraction(4, 3), Fraction(0, 1), Fraction(3, 2))) + CANDIDATE saved diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar72_s2.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar72_s2.log.txt new file mode 100644 index 0000000000..7551c5c62f --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar72_s2.log.txt @@ -0,0 +1,3 @@ +s2 it 0 cost 72.0 needs zero [(3, 0)] terms [(0, 0), (3, 2), (4, 2), (4, 2), (4, 2), (4, 2), (4, 2), (4, 2), (4, 2)] + realize ok ((Fraction(37, 6), Fraction(0, 1), Fraction(-11, 2), Fraction(4, 3)), (Fraction(0, 1), Fraction(29, 2), Fraction(-33, 2))) + CANDIDATE saved diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar_gen.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar_gen.log.txt new file mode 100644 index 0000000000..1a4aed4816 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar_gen.log.txt @@ -0,0 +1 @@ +gen it 0 status INFEASIBLE -> no robust assignment <= 71 cuts 0 diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar_s2.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar_s2.log.txt new file mode 100644 index 0000000000..5152d0d7a9 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar_s2.log.txt @@ -0,0 +1,10 @@ +s2 it 0 cost 71.0 needs zero [(2, 0), (3, 0)] + realize infeasible-neq None + NEQ-CUT (review) [(2, 0), (3, 0)] +s2 it 1 cost 71.0 needs zero [(1, 0), (3, 0)] + realize infeasible-neq None + NEQ-CUT (review) [(1, 0), (3, 0)] +s2 it 2 cost 71.0 needs zero [(1, 0), (2, 0)] + realize infeasible-neq None + NEQ-CUT (review) [(1, 0), (2, 0)] +s2 it 3 status INFEASIBLE -> no robust assignment <= 71 cuts 3 diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar_s4.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar_s4.log.txt new file mode 100644 index 0000000000..749c6dfe11 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar_s4.log.txt @@ -0,0 +1,10 @@ +s4 it 0 cost 71.0 needs zero [(2, 1), (3, 1)] + realize infeasible-neq None + NEQ-CUT (review) [(2, 1), (3, 1)] +s4 it 1 cost 71.0 needs zero [(1, 1), (3, 1)] + realize infeasible-neq None + NEQ-CUT (review) [(1, 1), (3, 1)] +s4 it 2 cost 71.0 needs zero [(1, 1), (2, 1)] + realize infeasible-neq None + NEQ-CUT (review) [(1, 1), (2, 1)] +s4 it 3 status INFEASIBLE -> no robust assignment <= 71 cuts 3 diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar_s6.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar_s6.log.txt new file mode 100644 index 0000000000..b63322ae28 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_cegar_s6.log.txt @@ -0,0 +1,10 @@ +s6 it 0 cost 71.0 needs zero [(2, 0), (3, 0)] + realize infeasible-neq None + NEQ-CUT (review) [(2, 0), (3, 0)] +s6 it 1 cost 71.0 needs zero [(1, 0), (3, 0)] + realize infeasible-neq None + NEQ-CUT (review) [(1, 0), (3, 0)] +s6 it 2 cost 71.0 needs zero [(1, 0), (2, 0)] + realize infeasible-neq None + NEQ-CUT (review) [(1, 0), (2, 0)] +s6 it 3 status INFEASIBLE -> no robust assignment <= 71 cuts 3 diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_specall.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_specall.log.txt new file mode 100644 index 0000000000..ff709178da --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/E8_specall.log.txt @@ -0,0 +1,3 @@ +E8 sets 43946 row-special 0 [] +col theta-special (not in B-locus) 0 [] +z-special 6 [((2,), 56, (1, 2)), ((4,), 56, (0, 2)), ((6,), 56, (0, 1)), ((2, 505, 507), 92, (1, 2)), ((4, 505, 509), 92, (0, 2)), ((6, 507, 509), 92, (0, 1))] diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P104_specall.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P104_specall.log.txt new file mode 100644 index 0000000000..77af699fad --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P104_specall.log.txt @@ -0,0 +1,3 @@ +P104 sets 43946 row-special 4 [((34,), 52, (0, 1, 2), 1), ((146,), 52, (0, 1, 2), 1), ((349,), 52, (0, 1, 2), 1), ((420,), 52, (0, 1, 2), 1)] +col theta-special (not in B-locus) 0 [] +z-special 6 [((8,), 48, (0, 2)), ((374,), 48, (0, 1)), ((382,), 48, (1, 2)), ((8, 129, 137), 80, (0, 2)), ((129, 374, 503), 80, (0, 1)), ((137, 382, 503), 80, (1, 2))] diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_cegar64_gen.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_cegar64_gen.log.txt new file mode 100644 index 0000000000..6813952d9d --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_cegar64_gen.log.txt @@ -0,0 +1,600 @@ +gen it 0 cost 64.0 needs zero [(3, 7), (7, 7), (9, 7), (10, 7)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (7, 7), (9, 7), (10, 7)] +gen it 1 cost 64.0 needs zero [(5, 8), (6, 8), (7, 8), (8, 8), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(5, 8), (6, 8), (7, 8), (8, 8), (10, 8)] +gen it 2 cost 64.0 needs zero [(3, 9), (4, 9), (6, 9), (9, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (4, 9), (6, 9), (9, 9), (11, 9)] +gen it 3 cost 64.0 needs zero [(5, 8), (6, 8), (7, 8), (10, 8), (11, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(5, 8), (6, 8), (7, 8), (10, 8), (11, 8)] +gen it 4 cost 64.0 needs zero [(4, 9), (5, 8), (6, 8), (6, 9), (7, 8), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(4, 9), (5, 8), (6, 8), (6, 9), (7, 8), (10, 8), (10, 9), (11, 9)] +gen it 5 cost 64.0 needs zero [(4, 9), (5, 8), (6, 8), (6, 9), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(4, 9), (5, 8), (6, 8), (6, 9), (10, 8), (10, 9), (11, 9)] +gen it 6 cost 64.0 needs zero [(4, 9), (6, 8), (6, 9), (7, 8), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(4, 9), (6, 8), (6, 9), (7, 8), (10, 8), (10, 9), (11, 9)] +gen it 7 cost 64.0 needs zero [(4, 9), (6, 8), (6, 9), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(4, 9), (6, 8), (6, 9), (10, 8), (10, 9), (11, 9)] +gen it 8 cost 64.0 needs zero [(4, 9), (5, 8), (6, 8), (6, 9), (7, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(4, 9), (5, 8), (6, 8), (6, 9), (7, 8), (10, 9), (11, 9)] +gen it 9 cost 64.0 needs zero [(4, 9), (5, 8), (6, 8), (6, 9), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(4, 9), (5, 8), (6, 8), (6, 9), (10, 9), (11, 9)] +gen it 10 cost 64.0 needs zero [(4, 9), (6, 8), (6, 9), (7, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(4, 9), (6, 8), (6, 9), (7, 8), (10, 9), (11, 9)] +gen it 11 cost 64.0 needs zero [(4, 9), (6, 8), (6, 9), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(4, 9), (6, 8), (6, 9), (10, 9), (11, 9)] +gen it 12 cost 64.0 needs zero [(4, 9), (5, 8), (6, 9), (7, 8), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(4, 9), (5, 8), (6, 9), (7, 8), (10, 8), (10, 9), (11, 9)] +gen it 13 cost 64.0 needs zero [(4, 9), (5, 8), (6, 9), (7, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(4, 9), (5, 8), (6, 9), (7, 8), (10, 9), (11, 9)] +gen it 14 cost 64.0 needs zero [(4, 9), (6, 9), (7, 8), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(4, 9), (6, 9), (7, 8), (10, 8), (10, 9), (11, 9)] +gen it 15 cost 64.0 needs zero [(4, 9), (6, 9), (7, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(4, 9), (6, 9), (7, 8), (10, 9), (11, 9)] +gen it 16 cost 64.0 needs zero [(4, 9), (5, 8), (6, 9), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(4, 9), (5, 8), (6, 9), (10, 8), (10, 9), (11, 9)] +gen it 17 cost 64.0 needs zero [(4, 9), (6, 9), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(4, 9), (6, 9), (10, 8), (10, 9), (11, 9)] +gen it 18 cost 64.0 needs zero [(4, 9), (5, 8), (6, 9), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(4, 9), (5, 8), (6, 9), (10, 9), (11, 9)] +gen it 19 cost 64.0 needs zero [(4, 9), (6, 9), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(4, 9), (6, 9), (10, 9), (11, 9)] +gen it 20 cost 64.0 needs zero [(3, 9), (5, 8), (6, 8), (6, 9), (7, 8), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (5, 8), (6, 8), (6, 9), (7, 8), (10, 8), (10, 9), (11, 9)] +gen it 21 cost 64.0 needs zero [(3, 9), (5, 8), (6, 8), (6, 9), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (5, 8), (6, 8), (6, 9), (10, 8), (10, 9), (11, 9)] +gen it 22 cost 64.0 needs zero [(3, 9), (6, 8), (6, 9), (7, 8), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (6, 8), (6, 9), (7, 8), (10, 8), (10, 9), (11, 9)] +gen it 23 cost 64.0 needs zero [(3, 9), (6, 8), (6, 9), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (6, 8), (6, 9), (10, 8), (10, 9), (11, 9)] +gen it 24 cost 64.0 needs zero [(3, 9), (5, 8), (6, 8), (6, 9), (7, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (5, 8), (6, 8), (6, 9), (7, 8), (10, 9), (11, 9)] +gen it 25 cost 64.0 needs zero [(3, 9), (6, 8), (6, 9), (7, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (6, 8), (6, 9), (7, 8), (10, 9), (11, 9)] +gen it 26 cost 64.0 needs zero [(3, 9), (5, 8), (6, 8), (6, 9), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (5, 8), (6, 8), (6, 9), (10, 9), (11, 9)] +gen it 27 cost 64.0 needs zero [(3, 9), (6, 8), (6, 9), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (6, 8), (6, 9), (10, 9), (11, 9)] +gen it 28 cost 64.0 needs zero [(3, 9), (5, 8), (6, 9), (7, 8), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (5, 8), (6, 9), (7, 8), (10, 8), (10, 9), (11, 9)] +gen it 29 cost 64.0 needs zero [(3, 9), (6, 9), (7, 8), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (6, 9), (7, 8), (10, 8), (10, 9), (11, 9)] +gen it 30 cost 64.0 needs zero [(3, 9), (5, 8), (6, 9), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (5, 8), (6, 9), (10, 8), (10, 9), (11, 9)] +gen it 31 cost 64.0 needs zero [(3, 9), (6, 9), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (6, 9), (10, 8), (10, 9), (11, 9)] +gen it 32 cost 64.0 needs zero [(3, 9), (5, 8), (6, 9), (7, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (5, 8), (6, 9), (7, 8), (10, 9), (11, 9)] +gen it 33 cost 64.0 needs zero [(3, 9), (6, 9), (7, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (6, 9), (7, 8), (10, 9), (11, 9)] +gen it 34 cost 64.0 needs zero [(3, 9), (5, 8), (6, 9), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (5, 8), (6, 9), (10, 9), (11, 9)] +gen it 35 cost 64.0 needs zero [(3, 9), (6, 9), (8, 9), (9, 9), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (6, 9), (8, 9), (9, 9), (10, 9), (11, 9)] +gen it 36 cost 64.0 needs zero [(3, 9), (4, 9), (5, 8), (6, 8), (7, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (4, 9), (5, 8), (6, 8), (7, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] +gen it 37 cost 64.0 needs zero [(3, 9), (5, 8), (6, 8), (7, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (5, 8), (6, 8), (7, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] +gen it 38 cost 64.0 needs zero [(3, 9), (4, 9), (5, 8), (6, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (4, 9), (5, 8), (6, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] +gen it 39 cost 64.0 needs zero [(3, 9), (5, 8), (6, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (5, 8), (6, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] +gen it 40 cost 64.0 needs zero [(3, 9), (4, 9), (5, 8), (6, 8), (7, 8), (8, 9), (9, 9), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (4, 9), (5, 8), (6, 8), (7, 8), (8, 9), (9, 9), (10, 9), (11, 9)] +gen it 41 cost 64.0 needs zero [(3, 9), (5, 8), (6, 8), (7, 8), (8, 9), (9, 9), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (5, 8), (6, 8), (7, 8), (8, 9), (9, 9), (10, 9), (11, 9)] +gen it 42 cost 64.0 needs zero [(3, 9), (4, 9), (5, 8), (6, 8), (8, 9), (9, 9), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (4, 9), (5, 8), (6, 8), (8, 9), (9, 9), (10, 9), (11, 9)] +gen it 43 cost 64.0 needs zero [(3, 9), (4, 9), (6, 9), (7, 8), (8, 9), (9, 9), (10, 8), (10, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (4, 9), (6, 9), (7, 8), (8, 9), (9, 9), (10, 8), (10, 9)] +gen it 44 cost 64.0 needs zero [(6, 8), (7, 8), (8, 8), (9, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(6, 8), (7, 8), (8, 8), (9, 8)] +gen it 45 cost 64.0 needs zero [(5, 8), (6, 8), (8, 8), (9, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(5, 8), (6, 8), (8, 8), (9, 8)] +gen it 46 cost 64.0 needs zero [(6, 8), (7, 8), (9, 8), (10, 8), (11, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(6, 8), (7, 8), (9, 8), (10, 8), (11, 8)] +gen it 47 cost 64.0 needs zero [(5, 8), (6, 8), (7, 8), (9, 8), (11, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(5, 8), (6, 8), (7, 8), (9, 8), (11, 8)] +gen it 48 cost 64.0 needs zero [(6, 8), (7, 8), (9, 8), (11, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(6, 8), (7, 8), (9, 8), (11, 8)] +gen it 49 cost 64.0 needs zero [(5, 8), (6, 8), (9, 8), (10, 8), (11, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(5, 8), (6, 8), (9, 8), (10, 8), (11, 8)] +gen it 50 cost 64.0 needs zero [(5, 8), (6, 8), (9, 8), (11, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(5, 8), (6, 8), (9, 8), (11, 8)] +gen it 51 cost 64.0 needs zero [(7, 8), (8, 8), (9, 8), (10, 8), (11, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(7, 8), (8, 8), (9, 8), (10, 8), (11, 8)] +gen it 52 cost 64.0 needs zero [(5, 8), (8, 8), (9, 8), (10, 8), (11, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(5, 8), (8, 8), (9, 8), (10, 8), (11, 8)] +gen it 53 cost 64.0 needs zero [(3, 9), (5, 8), (7, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (5, 8), (7, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] +gen it 54 cost 64.0 needs zero [(3, 9), (5, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (5, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] +gen it 55 cost 64.0 needs zero [(3, 9), (6, 8), (7, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (6, 8), (7, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 8), (11, 9)] +gen it 56 cost 64.0 needs zero [(3, 9), (6, 8), (7, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (6, 8), (7, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] +gen it 57 cost 64.0 needs zero [(3, 9), (7, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (7, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] +gen it 58 cost 64.0 needs zero [(3, 9), (6, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (6, 8), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] +gen it 59 cost 64.0 needs zero [(3, 9), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (8, 9), (9, 9), (10, 8), (10, 9), (11, 9)] +gen it 60 cost 64.0 needs zero [(3, 9), (5, 8), (7, 8), (8, 9), (9, 9), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (5, 8), (7, 8), (8, 9), (9, 9), (10, 9), (11, 9)] +gen it 61 cost 64.0 needs zero [(3, 9), (5, 8), (6, 8), (8, 9), (9, 9), (10, 9), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 9), (5, 8), (6, 8), (8, 9), (9, 9), (10, 9), (11, 9)] +gen it 62 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (8, 8), (9, 7), (9, 9), (10, 8), (11, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (8, 8), (9, 7), (9, 9), (10, 8), (11, 8), (11, 9)] +gen it 63 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 8), (11, 9)] +gen it 64 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (8, 8), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (8, 8), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 65 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (6, 7), (6, 8), (7, 7), (7, 8), (8, 8), (8, 9), (9, 7), (9, 9), (10, 9), (11, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (6, 7), (6, 8), (7, 7), (7, 8), (8, 8), (8, 9), (9, 7), (9, 9), (10, 9), (11, 8), (11, 9)] +gen it 66 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 67 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (6, 7), (6, 9), (7, 7), (7, 8), (8, 8), (9, 7), (9, 9), (10, 8), (11, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (6, 7), (6, 9), (7, 7), (7, 8), (8, 8), (9, 7), (9, 9), (10, 8), (11, 8), (11, 9)] +gen it 68 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 8), (11, 9)] +gen it 69 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (6, 7), (6, 9), (7, 7), (7, 8), (8, 8), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (6, 7), (6, 9), (7, 7), (7, 8), (8, 8), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 70 cost 64.0 needs zero [(3, 7), (4, 7), (5, 7), (5, 8), (6, 7), (6, 8), (9, 7), (10, 8), (11, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 7), (5, 8), (6, 7), (6, 8), (9, 7), (10, 8), (11, 8)] +gen it 71 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 7), (5, 8), (6, 7), (6, 9), (9, 7), (9, 9), (10, 8), (11, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 7), (5, 8), (6, 7), (6, 9), (9, 7), (9, 9), (10, 8), (11, 8)] +gen it 72 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 7), (5, 8), (6, 7), (6, 9), (9, 7), (9, 9), (10, 8), (11, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 7), (5, 8), (6, 7), (6, 9), (9, 7), (9, 9), (10, 8), (11, 8), (11, 9)] +gen it 73 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 7), (5, 8), (6, 7), (6, 9), (9, 7), (9, 9), (10, 8), (11, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 7), (5, 8), (6, 7), (6, 9), (9, 7), (9, 9), (10, 8), (11, 8)] +gen it 74 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 7), (5, 8), (6, 7), (6, 9), (9, 7), (9, 9), (10, 8), (11, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 7), (5, 8), (6, 7), (6, 9), (9, 7), (9, 9), (10, 8), (11, 8), (11, 9)] +gen it 75 cost 64.0 needs zero [(4, 7), (5, 7), (5, 8), (6, 8), (7, 7), (7, 8), (9, 7), (10, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(4, 7), (5, 7), (5, 8), (6, 8), (7, 7), (7, 8), (9, 7), (10, 7), (10, 8)] +gen it 76 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 7), (5, 8), (6, 7), (6, 9), (9, 7), (9, 9), (10, 7), (10, 8), (11, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 7), (5, 8), (6, 7), (6, 9), (9, 7), (9, 9), (10, 7), (10, 8), (11, 8)] +gen it 77 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 78 cost 64.0 needs zero [(3, 7), (4, 7), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (10, 8), (11, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (10, 8), (11, 8)] +gen it 79 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (6, 7), (6, 8), (6, 9), (7, 8), (8, 9), (9, 7), (9, 9), (10, 7), (10, 8), (11, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (6, 7), (6, 8), (6, 9), (7, 8), (8, 9), (9, 7), (9, 9), (10, 7), (10, 8), (11, 8)] +gen it 80 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 81 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] +gen it 82 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] +gen it 83 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] +gen it 84 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] +gen it 85 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 86 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 87 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 88 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 89 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] +gen it 90 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] +gen it 91 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] +gen it 92 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] +gen it 93 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] +gen it 94 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] +gen it 95 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] +gen it 96 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] +gen it 97 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8)] +gen it 98 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8)] +gen it 99 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8)] +gen it 100 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8)] +gen it 101 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] +gen it 102 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] +gen it 103 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] +gen it 104 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] +gen it 105 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (10, 8)] +gen it 106 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (10, 8)] +gen it 107 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (10, 8)] +gen it 108 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (7, 8), (9, 7), (10, 8)] +gen it 109 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 110 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 111 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 112 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] +gen it 113 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] +gen it 114 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] +gen it 115 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] +gen it 116 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 117 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 118 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 119 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 120 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] +gen it 121 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] +gen it 122 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] +gen it 123 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (9, 9), (10, 8)] +gen it 124 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] +gen it 125 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] +gen it 126 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] +gen it 127 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] +gen it 128 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8)] +gen it 129 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8)] +gen it 130 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8)] +gen it 131 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (7, 8), (9, 7), (10, 8)] +gen it 132 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] +gen it 133 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] +gen it 134 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] +gen it 135 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (10, 8)] +gen it 136 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (10, 8)] +gen it 137 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (10, 8), (11, 9)] +gen it 138 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (10, 8)] +gen it 139 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (7, 7), (7, 8), (9, 7), (10, 8)] +gen it 140 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 141 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 142 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 143 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8)] +gen it 144 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8)] +gen it 145 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8)] +gen it 146 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8)] +gen it 147 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (10, 8), (11, 9)] +gen it 148 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 149 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (10, 8), (11, 9)] +gen it 150 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (10, 8), (11, 9)] +gen it 151 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (10, 8), (11, 9)] +gen it 152 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (10, 8)] +gen it 153 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (10, 8)] +gen it 154 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (10, 8)] +gen it 155 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (6, 9), (7, 7), (9, 7), (10, 8)] +gen it 156 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 157 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 158 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 159 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (9, 9), (10, 8)] +gen it 160 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (9, 9), (10, 8)] +gen it 161 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (9, 9), (10, 8)] +gen it 162 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (9, 9), (10, 8)] +gen it 163 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (10, 8), (11, 9)] +gen it 164 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (10, 8), (11, 9)] +gen it 165 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (10, 8)] +gen it 166 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (10, 8)] +gen it 167 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (10, 8), (11, 9)] +gen it 168 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (10, 8), (11, 9)] +gen it 169 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (10, 8)] +gen it 170 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 8), (7, 7), (9, 7), (10, 8)] +gen it 171 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 172 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 173 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 174 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8)] +gen it 175 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8)] +gen it 176 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8)] +gen it 177 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (9, 9), (10, 8)] +gen it 178 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (10, 8), (11, 9)] +gen it 179 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 180 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 181 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 182 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (10, 8), (11, 9)] +gen it 183 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (7, 7), (9, 7), (9, 9), (10, 8), (11, 9)] +gen it 184 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (9, 7), (9, 9), (10, 8)] +gen it 185 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (9, 7), (9, 9), (10, 8)] +gen it 186 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (7, 7), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (7, 7), (9, 7), (9, 9), (10, 8)] +gen it 187 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (7, 7), (9, 7), (9, 9), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (7, 7), (9, 7), (9, 9), (10, 8)] +gen it 188 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (10, 8), (11, 9)] +gen it 189 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (10, 8), (11, 9)] +gen it 190 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (10, 8)] +gen it 191 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (10, 8)] +gen it 192 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (10, 8)] +gen it 193 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (6, 9), (7, 7), (9, 7), (10, 8)] +gen it 194 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (9, 7), (10, 8), (11, 9)] +gen it 195 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (9, 7), (10, 8), (11, 9)] +gen it 196 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (7, 7), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (5, 8), (6, 7), (7, 7), (9, 7), (10, 8), (11, 9)] +gen it 197 cost 64.0 needs zero [(3, 7), (4, 7), (5, 8), (6, 7), (7, 7), (9, 7), (10, 8), (11, 9)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (5, 8), (6, 7), (7, 7), (9, 7), (10, 8), (11, 9)] +gen it 198 cost 64.0 needs zero [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (3, 9), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (9, 7), (10, 8)] +gen it 199 cost 64.0 needs zero [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (9, 7), (10, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(3, 7), (4, 7), (4, 9), (5, 8), (6, 7), (7, 7), (9, 7), (10, 8)] diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_cegar64_s2.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_cegar64_s2.log.txt new file mode 100644 index 0000000000..8ed11078b5 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_cegar64_s2.log.txt @@ -0,0 +1,9 @@ +s2 it 0 cost 64.0 needs zero [(9, 7), (10, 7)] + realize infeasible-neq None + NEQ-CUT (review) [(9, 7), (10, 7)] +s2 it 1 cost 64.0 needs zero [(5, 8), (8, 8), (9, 8), (10, 7), (10, 8), (11, 8)] + realize infeasible-neq None + NEQ-CUT (review) [(5, 8), (8, 8), (9, 8), (10, 7), (10, 8), (11, 8)] +s2 it 2 cost 64.0 needs zero [(10, 7)] + realize ok ((Fraction(37, 6), Fraction(0, 1), Fraction(-11, 2), Fraction(4, 3)), (Fraction(0, 1), Fraction(29, 2), Fraction(-33, 2))) + CANDIDATE saved diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_cegar_gen.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_cegar_gen.log.txt new file mode 100644 index 0000000000..4d7ea27e9c --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_cegar_gen.log.txt @@ -0,0 +1 @@ +gen it 0 status INFEASIBLE -> no robust assignment <= 63 cuts 0 diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_cegar_s10.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_cegar_s10.log.txt new file mode 100644 index 0000000000..b900287bf4 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_cegar_s10.log.txt @@ -0,0 +1 @@ +s10 it 0 status INFEASIBLE -> no robust assignment <= 63 cuts 0 diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_cegar_s2.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_cegar_s2.log.txt new file mode 100644 index 0000000000..2cb61d3633 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_cegar_s2.log.txt @@ -0,0 +1 @@ +s2 it 0 status INFEASIBLE -> no robust assignment <= 63 cuts 0 diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_cegar_s8.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_cegar_s8.log.txt new file mode 100644 index 0000000000..1ba7a36984 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_cegar_s8.log.txt @@ -0,0 +1 @@ +s8 it 0 status INFEASIBLE -> no robust assignment <= 63 cuts 0 diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_opt_gen.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_opt_gen.log.txt new file mode 100644 index 0000000000..d1aa7f76e7 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_opt_gen.log.txt @@ -0,0 +1,2 @@ +cands row 12 + 0 col 11 + 0 min pair 2 row-only [3, 8, 8, 8, 8, 8] col-only [8, 8, 8, 8, 8, 8] +cat_gen.pkl relaxation min below 64 : None diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_opt_s10.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_opt_s10.log.txt new file mode 100644 index 0000000000..3ecd2e1f2d --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_opt_s10.log.txt @@ -0,0 +1,2 @@ +cands row 12 + 0 col 10 + 0 min pair 1 row-only [3, 8, 8, 8, 8, 8] col-only [7, 8, 8, 8, 8, 8] +cat_s10.pkl relaxation min below 64 : None diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_opt_s2.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_opt_s2.log.txt new file mode 100644 index 0000000000..81a5e967fe --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_opt_s2.log.txt @@ -0,0 +1,2 @@ +cands row 12 + 0 col 10 + 0 min pair 1 row-only [3, 8, 8, 8, 8, 8] col-only [7, 8, 8, 8, 8, 8] +cat_s2.pkl relaxation min below 64 : None diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_opt_s8.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_opt_s8.log.txt new file mode 100644 index 0000000000..58d139e57f --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_opt_s8.log.txt @@ -0,0 +1,2 @@ +cands row 12 + 0 col 10 + 0 min pair 1 row-only [3, 8, 8, 8, 8, 8] col-only [7, 8, 8, 8, 8, 8] +cat_s8.pkl relaxation min below 64 : None diff --git a/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_specall.log.txt b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_specall.log.txt new file mode 100644 index 0000000000..ce17df0f39 --- /dev/null +++ b/research/a2-family-decoder-floors/evidence/logs/hunt-a2/P112_specall.log.txt @@ -0,0 +1,3 @@ +P112 sets 43946 row-special 2 [((33,), 56, (0, 1, 2), 1), ((350,), 56, (0, 1, 2), 1)] +col theta-special (not in B-locus) 0 [] +z-special 6 [((2,), 52, (1, 2)), ((8,), 52, (0, 2)), ((10,), 52, (0, 1)), ((2, 501, 503), 86, (1, 2)), ((8, 501, 509), 86, (0, 2)), ((10, 503, 509), 86, (0, 1))] diff --git a/research/a2-family-decoder-floors/requirements.txt b/research/a2-family-decoder-floors/requirements.txt new file mode 100644 index 0000000000..654457e563 --- /dev/null +++ b/research/a2-family-decoder-floors/requirements.txt @@ -0,0 +1,2 @@ +numpy +networkx diff --git a/research/a2-family-decoder-floors/verify.sh b/research/a2-family-decoder-floors/verify.sh new file mode 100755 index 0000000000..823ab6a3aa --- /dev/null +++ b/research/a2-family-decoder-floors/verify.sh @@ -0,0 +1,100 @@ +#!/usr/bin/env bash +# Verification of research/a2-family-decoder-floors (no kappa claim). usage: bash verify.sh [/fresh/output/dir] (Python >= 3.11, numpy, networkx; PYTHON=/path/to/python) +# One process at a time, no SAT solver. Everything below is exact (rational arithmetic, F2 ranks) except where a step says "mod p" (ranks mod 2^61-1: lower bounds for the rank over Q, used only in the safe direction). +# 0 MANIFEST.sha256 (pins every shipped file, including the recorded logs) +# 1 units (E8 / P112 / P104, label dimension 9); survivor classes and survivor-pair ranks (inputs_check.py); spans S1, S2 (Theorem G inputs) +# 2 the A2 family: exact members with the iff pattern and rank 9 on all three units; the non-B-form certificate (a2cert.py) +# 3 census facts (A2COST sections 2, 5): unit census on the first triangle of each unit, replayed and compared line-for-line with the recorded logs; all 28 P104 orbit representatives; triangle-orbit counts +# 4 floors: P_k (exact duality B&B on P112 / P104, structural + arithmetic on E8) and the Case I / Case II arithmetic; Case II(b): the merged-class kill fact (mergedkill.py) and the exact class-level +# min-cost relaxation (iib_check.py), on P112, E8 and all 28 P104 orbit representatives +# 5 sharpness: the tie decoders (64 on P112, 72 on E8), exact over Q, independent evaluator; the tie members are certified non-B-form; exact square optimum at fixed members (generic 65 / tie 64 on P112; 73 / 72 on E8) +# 6 m >= 10, factors in the realisation's spaces: the class-level relaxation (step 4, off the B-locus) and pair-cost tables at the checked members (corroboration) +# 7 recorded HUNT-A2 logs (robust CP-SAT / CEGAR; NOT re-run): headline lines asserted +set -uo pipefail +HERE=$(cd "$(dirname "$0")" && pwd) +OUT=${1:-$(mktemp -d "${TMPDIR:-/tmp}/a2fam.XXXXXX")} +mkdir -p "$OUT"; OUT=$(cd "$OUT" && pwd) +case "$OUT/" in "$HERE"/*) echo "output dir must be outside the package"; exit 2;; esac +PY="${PYTHON:-python3}"; export PYTHONDONTWRITEBYTECODE=1 OMP_NUM_THREADS=1 VECLIB_MAXIMUM_THREADS=1 OPENBLAS_NUM_THREADS=1 +C="$HERE/checks"; REC="$HERE/evidence/logs"; W="$OUT/work"; mkdir -p "$W" "$OUT/logs"; : > "$OUT/all.out" +export PYTHONPATH="$C" +T0=$SECONDS +note() { echo "$@" | tee -a "$OUT/all.out"; } +# run NAME UNIT SCRIPT ARGS... (cwd = work dir; log -> logs/NAME.log; every PASS line is echoed) +run() { local n=$1 u=$2; shift 2; local s=$SECONDS + ( cd "$W" && UNIT=$u "$PY" -B "$C/$1" "${@:2}" > "$OUT/logs/$n.log" 2>&1 ); local rc=$? + grep '^PASS' "$OUT/logs/$n.log" | sed 's/^/ /' | tee -a "$OUT/all.out" >/dev/null + if [ $rc = 0 ]; then note "PASS ran $n (UNIT=$u $1 ${*:2}) in $((SECONDS - s))s"; else note "FAIL ran $n exit $rc"; tail -3 "$OUT/logs/$n.log" | sed 's/^/ /'; fi; } +expectF() { if grep -qF -- "$2" "$OUT/logs/$1.log"; then note "PASS $1: $3"; else note "FAIL $1: expected '$2' ($3)"; fi; } +expect() { if grep -q -- "$2" "$OUT/logs/$1.log"; then note "PASS $1: $3"; else note "FAIL $1: expected '$2' ($3)"; fi; } +echo "== 0. manifest" +if ! "$PY" -B "$C/manifest_check.py" | tee -a "$OUT/all.out" | sed 's/^/ /' || grep -q '^FAIL' "$OUT/all.out"; then echo "step 0 FAILED"; exit 1; fi +echo "== 1. units and span facts" +run units E8 units_check.py +run inputs E8 inputs_check.py +expectF inputs "PASS P112: survivor-pair ranks" "P112: survivor-pair ranks computed and passing" +expectF inputs "] in [8] [8]" "P112: all survivor-pair ranks equal 8" +expectF inputs "PASS P104: survivor-pair ranks" "P104: survivor-pair ranks" +expectF inputs "ALL PASS" "survivors, survivor-pair ranks, 7-cliques on P112 and P104" +run spans E8 spans.py; expect spans "PASS spans E8" "S1 (rank r(O_u) = 7) and S2 (rank r(O_u cap O_u') = 6) on P112, P104, E8" +echo "== 2. the A2 family: exact members, non-B-form certificate" +for U in P112 P104 E8; do + run a2fam_$U $U a2fam.py; expect a2fam_$U "PASS A2 family on $U" "3 exact rank-9 members with the iff pattern" + run a2cert_$U $U a2cert.py; [ "$(grep -c '^PASS member\|not of B-form' "$OUT/logs/a2cert_$U.log")" = 3 ] && note "PASS a2cert_$U: 3 members certified not of B-form" || note "FAIL a2cert_$U" +done +echo "== 3. census facts and triangle orbits" +for U in P112 P104 E8; do + run census_$U $U unitcensus.py; cmp -s "$OUT/logs/census_$U.log" "$REC/census/ucensus_$U.log.txt" && note "PASS census_$U identical to recorded log" || note "FAIL census_$U differs from recorded log" + "$PY" -B "$C/census_facts.py" "$OUT/logs/census_$U.log" | tee -a "$OUT/all.out" | sed 's/^/ /' +done +REPS="0,3,22 0,5,24 0,60,103 0,61,102 1,3,31 1,5,33 1,44,96 1,45,95 1,46,94 1,47,93 1,49,92 1,50,91 1,51,90 5,44,101 5,45,100 5,48,97 5,53,93 5,56,91 7,44,102 7,46,100 7,48,98 7,52,95 7,54,93 9,44,103 9,47,100 9,49,98 9,50,97 9,53,95" +n=0; bad=0 +for T in $REPS; do + ( cd "$W" && UNIT=P104 A2TRI=$T "$PY" -B "$C/unitcensus.py" > "$OUT/logs/uc104_$T.log" 2>&1 ) + cmp -s "$OUT/logs/uc104_$T.log" "$REC/census/uc104_${T//,/_}.log.txt" || { bad=$((bad+1)); echo " differs: $T"; } + "$PY" -B "$C/census_facts.py" "$OUT/logs/uc104_$T.log" > "$OUT/logs/uc104_$T.facts" 2>&1 || { bad=$((bad+1)); echo " facts fail: $T"; } + n=$((n+1)) +done +[ $bad = 0 ] && note "PASS census on all $n P104 orbit representatives: identical to the recorded logs, same structural facts" || note "FAIL P104 representatives: $bad problems" +run orbits_P112 P112 orbits.py; expect orbits_P112 "P112 triangles 896 orbits(lower bound on merging) 1 " "all 896 A2 triangles of P112 form one orbit" +run orbits_E8 E8 orbits.py; expect orbits_E8 "E8 triangles 1120 orbits(lower bound on merging) 1 " "all 1120 A2 triangles of E8 form one orbit" +run orbits_P104 P104 orbits104.py; expect orbits_P104 "triangles 704 orbits 28 " "the 704 A2 triangles of P104 fall into at most 28 orbits" +echo "== 4. floors and the case arithmetic" +for U in P112 P104 E8; do run floors_$U $U floors.py; done +expect floors_P112 "PASS case arithmetic P112: every square decoder of every A2-family member costs >= 64" "P112 >= 64" +expect floors_P104 "PASS case arithmetic P104: every square decoder of every A2-family member costs >= 56" "P104 >= 56" +expect floors_E8 "PASS case arithmetic E8: every square decoder of every A2-family member costs >= 72" "E8 >= 72" +run mk_P104 P104 mergedkill.py; expect mk_P104 "PASS merged-kill P104" "P104 (default triangle): two merged classes are co-killable only on gamma2 = gamma3" +run iib_P104 P104 iib_check.py; expect iib_P104 "PASS II(b) relaxation P104" "P104: II(b) >= 62 off the B-locus (63 on it); m >= 10 off the locus >= 64" +run mk_P112 P112 mergedkill.py; expect mk_P112 "PASS merged-kill P112" "P112: two merged classes are co-killable only on gamma2 = gamma3" +run mk_E8 E8 mergedkill.py; expect mk_E8 "PASS merged-kill E8" "E8: two merged classes are co-killable only on gamma2 = gamma3" +run iib_P112 P112 iib_check.py; expect iib_P112 "PASS II(b) relaxation P112" "P112: II(b) >= 65 off the B-locus (66 on it); m >= 10 off the locus >= 68" +run iib_E8 E8 iib_check.py; expect iib_E8 "PASS II(b) relaxation E8" "E8: II(b) >= 74 off the B-locus (75 on it); m >= 10 off the locus >= 77" +bad=0; n=0 +for T in $REPS; do + ( cd "$W" && UNIT=P104 A2TRI=$T "$PY" -B "$C/mergedkill.py" > "$OUT/logs/mk104_$T.log" 2>&1 && UNIT=P104 A2TRI=$T "$PY" -B "$C/iib_check.py" > "$OUT/logs/iib104_$T.log" 2>&1 ) || { bad=$((bad+1)); echo " fail: $T"; } + grep -q '^PASS merged-kill' "$OUT/logs/mk104_$T.log" && grep -q '^PASS II(b) relaxation' "$OUT/logs/iib104_$T.log" || bad=$((bad+1)) + n=$((n+1)) +done +[ $bad = 0 ] && note "PASS merged-kill fact and II(b)/m>=10 relaxation on all $n P104 orbit representatives (II(b) >= 62 off the B-locus, 63 on it; m >= 10 off the locus >= 64)" || note "FAIL P104 representatives (merged-kill / relaxation): $bad problems" +echo "== 5. sharpness: tie decoders" +for U in P112 E8; do + run tie_$U $U tie_check.py; expect tie_$U "PASS $U tie decoder: exact cost" "exact tie decoder" + run tiecert_$U $U a2cert.py tie; expect tiecert_$U "PASS tie-decoder member $U: not of B-form" "the tie member is not of B-form" +done +run opt_P112_gen P112 exact_opt.py gen 70; expect opt_P112_gen "exact square optimum 65$" "P112 generic member: exact square optimum 65" +run opt_P112_tie P112 exact_opt.py tie 70; expect opt_P112_tie "exact square optimum 64$" "P112 tie member: exact square optimum 64" +run opt_E8_gen E8 exact_opt.py gen 80; expect opt_E8_gen "exact square optimum 73$" "E8 generic member: exact square optimum 73" +run opt_E8_tie E8 exact_opt.py tie 80; expect opt_E8_tie "exact square optimum 72$" "E8 tie member: exact square optimum 72" +echo "== 6. m >= 10 in the realisation's spaces" +run pt_P112_gen P112 pairtable.py gen 64; expect pt_P112_gen "PASS pair table P112 gen" "P112 generic member: m >= 10 relaxation >= 64" +run pt_P112_tie P112 pairtable.py tie 64; expect pt_P112_tie "PASS pair table P112 tie" "P112 tie member: m >= 10 relaxation >= 64" +run pt_P104_gen P104 pairtable.py gen 64; expect pt_P104_gen "PASS pair table P104 gen" "P104 generic member: m >= 10 relaxation >= 64" +run pt_E8_gen E8 pairtable.py gen 77; expect pt_E8_gen "PASS pair table E8 gen" "E8 generic member: m >= 10 relaxation >= 77" +run pt_E8_tie E8 pairtable.py tie 77; expect pt_E8_tie "PASS pair table E8 tie" "E8 tie member: m >= 10 relaxation >= 77" +echo "== 7. recorded logs (not re-run)" +"$PY" -B "$C/log_counts.py" 2>&1 | tee "$OUT/logs/log_counts.log" | sed 's/^/ /'; grep '^PASS\|^FAIL' "$OUT/logs/log_counts.log" >> "$OUT/all.out" +npass=$(grep -c '^PASS' "$OUT/all.out"); nfail=$(grep -c '^FAIL' "$OUT/all.out") +echo "== done in $((SECONDS - T0))s: $npass PASS, $nfail FAIL; logs in $OUT" +[ "$nfail" = 0 ] && { echo "PASS: all assertions hold"; exit 0; } +echo "FAIL"; exit 1