#!/usr/bin/env python3 """Reproducibility package for https://cairn-commons.com/claims/C-15 Use this text-safe attachment instead of the earlier ZIP (handled as text by the site). Python 3.10+, standard library only. No network access. Run with --report to print the original research note and follow-up. Without arguments, extracts files to a temporary directory and runs checks. External published classification counts are INPUTS, not independently proved. The certificate repair and known lower-bound constructions are fully checked. Follow-up: at most four exceptional defect classes remain for length 88; this uses external classification counts and does not prove existence. """ import json from pathlib import Path import subprocess import sys import tempfile FILES = json.loads('{"RESEARCH-NOTE.txt": "TWO UPPER-BOUND IMPROVEMENTS AND A REPAIRED ADDITIVE-CODE CERTIFICATE\\nResearch for Christian Manahl, assisted by ChatGPT\\n3 November 2026 \\u2014 working research note; not submitted or peer reviewed\\n\\nRESULT\\n\\nFor binary-additive codes over F_8 with 256 messages, the argument below gives\\n\\n 87 <= n_2(8,3;11) <= 88,\\n 119 <= n_2(8,3;15) <= 120.\\n\\nHere n_2(8,3;s) is the maximum length n with minimum distance at least n-s.\\nKurz\'s May 2026 preprint states upper bounds 89 and 121, respectively [1,\\nTheorem 17]. We exclude those two endpoints. The remaining endpoints 88 and\\n120 are unresolved here. We have not constructed a new record code or\\nestablished a new example outperforming all full-field linear codes.\\n\\nThe upper-bound proof uses the published classification counts in [2]. We\\nhave NOT independently rerun that classification. The included checker\\nverifies the arithmetic, construction certificates and incidence identity;\\nit is not a standalone machine proof of the classification or upper bounds.\\nThe novelty check found the larger intervals in the latest arXiv version\\nand no publication stating these particular improvements. This is evidence\\nof a useful deduction, not a guarantee of priority across all literature.\\n\\n1. A DEFECT MULTISET\\n\\nRepresent a binary-additive F_8 code by n subspaces U_j of F_2^8, each of\\ndimension at most three. For a nonzero message vector x, its j-th symbol\\nis zero precisely when U_j lies in H_x = {v : x dot v = 0}.\\n\\nWe may enlarge every U_j to dimension three: this can only remove zero\\nsymbols from each nonzero message, so minimum distance cannot decrease.\\nIt also preserves injectivity, since the old column span is contained in\\nthe new one. Thus a nonexistence proof for full three-dimensional spaces\\nalso excludes codes with smaller coordinate images.\\n\\nLet a_x count the U_j contained in H_x. The distance condition is a_x <= s.\\nDefine a multiset T of the 255 nonzero vectors x by\\n\\n T(x) = s - a_x.\\n\\nIts multiplicities lie between 0 and s. A three-dimensional space in F_2^8\\nlies in exactly 2^5-1 = 31 hyperplanes, hence\\n\\n |T| = 255s - 31n. (1)\\n\\nFor a nonzero v, let m_v count the U_j containing v. Count normals x that\\nannihilate U_j but satisfy x dot v = 1. There are none if v lies in U_j;\\notherwise there are exactly 16, since this is a nonzero functional on the\\nfive-dimensional annihilator of U_j. Consequently,\\n\\n sum_{x: x dot v = 1} T(x) = 128s - 16(n - m_v)\\n = 16(8s - n + m_v). (2)\\n\\nEvery weight of the binary linear code generated by the multiset T is\\ntherefore divisible by 16. Its effective length is |T|, its dimension is\\nat most eight, and its maximum column multiplicity is at most s. No\\nsymmetry restriction has been imposed in this argument.\\n\\nThis is a standard kind of divisible-code obstruction, rather than a\\nclaim to invent the underlying method; compare the related use of\\ncomplementary multisets in [1, Proposition 6].\\n\\n2. THE PUBLISHED CLASSIFICATION INPUT AND WHY MATCHING COUNTS SUFFICE\\n\\nTheorem 13 of [2] says that an 8-divisible binary code of effective length\\n23 or 37 has maximum column multiplicity at least eight. Tables 4 and 5\\nof the same paper give these numbers of equivalence classes:\\n\\n dimension k\\n divisibility length 1 2 3 4 5 6 7 8\\n 8 23 0 0 0 1 1 0 0 0\\n 16 46 0 0 0 1 1 0 0 0\\n 8 37 0 0 0 2 5 8 5 1\\n 16 74 0 0 0 2 5 8 5 1\\n\\nRepeating every column twice sends each 8-divisible code of length N to\\na 16-divisible code of length 2N, preserving dimension. This map is\\ninjective on equivalence classes: if two doubled point multisets are\\nlinearly equivalent, divide their multiplicities by two to recover an\\nequivalence of the original multisets.\\n\\nThe matching counts therefore make this injection a bijection, separately\\nin every dimension at most eight, for N=23 and N=37. Thus every relevant\\n16-divisible code of length 46 or 74 is a doubled code, and has maximum\\ncolumn multiplicity at least 16.\\n\\nThis deduction uses the completeness of the indicated published counts.\\nIt does not merely infer structural similarity from equal-looking rows.\\n\\n3. APPLYING THE OBSTRUCTION\\n\\nFor n=89 and s=11, equation (1) gives |T|=46. But T would have maximum\\nmultiplicity at most 11, contradicting the required minimum 16.\\n\\nFor n=121 and s=15, equation (1) gives |T|=74. Its multiplicities would be\\nat most 15, again contradicting the required minimum 16.\\n\\nCombined with [1, Theorem 17], these exclusions yield the two intervals\\non the first page. The argument excludes all binary-additive codes of\\nthe stated sizes, not merely the cyclic families searched by our programs.\\n\\n4. AN INDEPENDENTLY CHECKED REPAIR TO THE LOWER-BOUND DATA\\n\\nWhile reproducing the known lower bounds, we found that the 46-component\\nexample in [1, Appendix F] has minimum distance 39 as printed, whereas\\ndistance 40 is claimed. This is present in both HTML and PDF. Component\\n31 is the third matrix at the top of printed page 117 (PDF page 119).\\n\\nIn the integer convention of our certificate, message mask 2 (binary\\n00000010) has seven zero symbols, in positions\\n\\n 22, 23, 29, 31, 36, 41, 43.\\n\\nIt therefore has weight 46-7=39. This is a direct counterexample to the\\nprinted certificate, not a refutation of the claimed existence bound.\\n\\nReplacing only component 31 restores the intended parameters:\\n\\n original basis replacement basis\\n 01010100 10010010\\n 00100000 01010110\\n 00001000 00110010\\n\\nThe repaired code has exactly 256 words and weight enumerator\\n\\n 1 + 229 z^40 + 26 z^44.\\n\\nThe repair was found by removing the sole component contained in every\\noverloaded hyperplane, then enumerating possible replacement planes.\\nrepair_example.py reproduces that search using only the Python standard\\nlibrary. The parameters are already known; the contribution is a repaired,\\nindependently checkable certificate, not a new code-parameter record.\\n\\nWe also reconstructed both lower bounds in the result:\\n\\n length messages minimum distance nonzero weight distribution\\n 87 256 76 228 at 76; 27 at 80\\n 119 256 104 229 at 104; 26 at 108\\n\\nThe 87-symbol code concatenates Kurz\'s 55-symbol example with a 32-symbol\\nlifted multiplication construction. The 119-symbol code concatenates the\\nrepaired 46-symbol example with an eight-binary-dimensional restriction\\nof the 73-symbol F_8 simplex code. Both are reproductions of known bounds.\\nAll 32,640 pairs of distinct messages were checked for each certificate.\\n\\n5. REPRODUCIBILITY AND LIMITS\\n\\nRun, with Python 3.10 or later and no third-party dependencies:\\n\\n python repair_example.py\\n python verify.py\\n\\nThe checker regenerates baseline-87.json and baseline-119.json, checks\\nthe source example\'s failure and its repair, enumerates all codewords\\nand all distinct pairs for six constructions, and verifies equation (2)\\nfor all 255 nonzero vectors in three example systems. It also checks the\\ntranscribed classification counts and endpoint arithmetic. It deliberately\\nstates that the classification itself is an external input.\\n\\nExperimental search scripts and logs are included under experiments/.\\nThey require numpy and ortools (used versions 2.3.5 and 9.15.6755).\\nUNKNOWN means a time limit, NOT nonexistence. One order-15 cyclic model\\nwas infeasible; that result concerns only its stated symmetry family.\\nNone of the solver outcomes is used as a premise of the upper-bound proof.\\n\\nThe next constructive targets are length 88, distance 77, or length 120,\\ndistance 105, each with 256 messages over F_8. A worthwhile alternative is\\nreproducing the small published classifications to remove the external\\ncomputational dependency from this proof package.\\n\\nNo claim, objection, message to authors, or contribution has been posted.\\n\\nREFERENCES\\n\\n[1] Sascha Kurz, Additive codes attaining the Griesmer bound,\\n arXiv:2412.14615v3, 8 May 2026; Theorem 17 and Appendix F.\\n https://arxiv.org/html/2412.14615v3\\n https://arxiv.org/pdf/2412.14615v3\\n\\n[2] Theresa K\\u00f6rner and Sascha Kurz, Lengths of divisible codes with\\n restricted column multiplicities, Advances in Mathematics of\\n Communications 18(2), 505-534 (2024), DOI 10.3934/amc.2023050.\\n Theorem 13; Tables 4 and 5; arXiv:2303.17172v2, 3 November 2023.\\n https://www.aimsciences.org/article/doi/10.3934/amc.2023050\\n https://arxiv.org/pdf/2303.17172v2\\n\\nProblem:\\n https://cairn-commons.com/problems/additive-codes-beating-linear\\n\\nSource PDFs were inspected locally but are not redistributed in this\\npackage. Source hashes and exact inputs are recorded in source-hashes.json\\nand published-facts.json. The original matrix data retain attribution to\\nKurz; our repair and verification work must not be represented as his.\\n", "verify.py": "\\"\\"\\"Independent exact checks; standard library only.\\n\\nThis checks constructions, identities, and arithmetic. It does NOT reproduce\\nthe published classification of divisible codes used in the upper-bound proof.\\n\\"\\"\\"\\nfrom collections import Counter\\nfrom itertools import combinations\\nimport json\\nfrom pathlib import Path\\n\\nROOT = Path(__file__).resolve().parent\\n\\n\\ndef span(basis):\\n values = {0}\\n for vector in basis:\\n values |= {v ^ vector for v in tuple(values)}\\n return values\\n\\n\\ndef multiplication(a, b, degree, polynomial):\\n product = 0\\n for _ in range(degree):\\n if b & 1:\\n product ^= a\\n b >>= 1\\n a <<= 1\\n if a & (1 << degree):\\n a ^= polynomial\\n return product\\n\\n\\ndef check_code(data):\\n columns, rank = data[\'columns\'], data[\'rank\']\\n assert len(columns) == data[\'length\']\\n assert all(len(c) == 3 and all(0 <= x < 1 << rank for x in c) for c in columns)\\n rows = [tuple(sum(((mask >> i) & 1) << j for j, mask in enumerate(c))\\n for c in columns) for i in range(rank)]\\n words = [tuple(0 for _ in columns)]\\n for row in rows:\\n words += [tuple(a ^ b for a, b in zip(w, row)) for w in tuple(words)]\\n assert len(set(words)) == 1 << rank\\n weights = Counter(sum(symbol != 0 for symbol in w) for w in words)\\n distance = min(w for w in weights if w)\\n assert distance == data[\'distance\'], (distance, data[\'distance\'])\\n # A second calculation examines all pairs, not just nonzero word weights.\\n pair_distance = min(sum(x != y for x, y in zip(a, b))\\n for a, b in combinations(words, 2))\\n assert pair_distance == distance\\n return {\'length\': len(columns), \'size\': len(words), \'distance\': distance,\\n \'weight_distribution\': dict(sorted(weights.items())),\\n \'pairs_checked\': len(words)*(len(words)-1)//2}\\n\\n\\ndef check_defect_identity(columns):\\n planes = [span(c) - {0} for c in columns]\\n assert all(len(p) == 7 for p in planes)\\n incidence = [sum(all((a & p).bit_count() % 2 == 0 for p in plane)\\n for plane in planes) for a in range(1, 256)]\\n slack = max(incidence)\\n defect = [0] + [slack - count for count in incidence]\\n multiplicities = Counter(p for plane in planes for p in plane)\\n assert sum(defect) == 255*slack - 31*len(planes)\\n for v in range(1, 256):\\n weight = sum(defect[x] for x in range(1, 256) if (v & x).bit_count() % 2)\\n assert weight == 16*(8*slack - len(planes) + multiplicities[v])\\n return {\'length\': len(planes), \'slack\': slack, \'defect_length\': sum(defect),\\n \'identities_checked\': 255}\\n\\n\\ndef reproduce_baselines():\\n # 32 lifted planes: graphs of multiplication F_32 x F_2^3 -> F_32.\\n columns32 = [[x | (multiplication(a, x, 5, 0x25) << 3) for x in (1, 2, 4)]\\n for a in range(32)]\\n # F_8-linear simplex code in F_512, restricted to eight binary message rows.\\n generator = 1\\n for _ in range(73):\\n generator = multiplication(generator, 2, 9, 0x211)\\n scalar_field = {0}\\n element = 1\\n for _ in range(7):\\n scalar_field.add(element)\\n element = multiplication(element, generator, 9, 0x211)\\n assert len(scalar_field) == 8 and element == 1\\n assert all(a ^ b in scalar_field for a in scalar_field for b in scalar_field)\\n covered, columns73 = set(), []\\n for v in range(1, 512):\\n if v in covered:\\n continue\\n line = {multiplication(v, a, 9, 0x211) for a in scalar_field}\\n covered |= line\\n basis = []\\n for p in sorted(line):\\n if p not in span(basis):\\n basis.append(p)\\n assert len(basis) == 3\\n columns73.append([b & 255 for b in basis])\\n assert len(columns73) == 73\\n known46 = json.loads((ROOT/\'repaired-46.json\').read_text())\\n known55 = json.loads((ROOT/\'known-55.json\').read_text())\\n cases = [known46, known55,\\n {\'rank\': 8, \'length\': 32, \'distance\': 28, \'columns\': columns32},\\n {\'rank\': 8, \'length\': 73, \'distance\': 64, \'columns\': columns73},\\n {\'rank\': 8, \'length\': 87, \'distance\': 76, \'columns\': known55[\'columns\']+columns32},\\n {\'rank\': 8, \'length\': 119, \'distance\': 104, \'columns\': known46[\'columns\']+columns73}]\\n results = []\\n for case in cases:\\n result = check_code(case)\\n results.append(result)\\n if case[\'length\'] in (87, 119):\\n case[\'attribution\'] = \'Reproduction of known lower bound; see RESEARCH-NOTE.txt.\'\\n (ROOT/f\\"baseline-{case[\'length\']}.json\\").write_text(json.dumps(case, indent=2)+\'\\\\n\')\\n return results, [check_defect_identity(c[\'columns\']) for c in cases[:3]]\\n\\n\\ndef check_published_inputs():\\n facts = json.loads((ROOT/\'published-facts.json\').read_text())\\n results = []\\n for n, s in ((89, 11), (121, 15)):\\n total = 255*s - 31*n\\n small = str(total//2)\\n assert facts[\'counts_8_divisible\'][small] == facts[\'counts_16_divisible\'][str(total)]\\n assert facts[\'minimum_max_multiplicity_8_divisible\'][small] == 8\\n assert s < 2*8\\n results.append({\'excluded_length\': n, \'slack\': s, \'defect_length\': total,\\n \'required_multiplicity\': 16, \'allowed_multiplicity\': s})\\n return results\\n\\n\\ndef audit_printed_example():\\n original = json.loads((ROOT/\'known-46.json\').read_text())\\n corrected = json.loads((ROOT/\'repaired-46.json\').read_text())\\n changed = [i+1 for i, (a, b) in enumerate(zip(original[\'columns\'], corrected[\'columns\'])) if a != b]\\n assert changed == [31]\\n original[\'distance\'] = 39\\n checked = check_code(original)\\n zero_positions = [i+1 for i, basis in enumerate(original[\'columns\'])\\n if all((2 & b).bit_count() % 2 == 0 for b in basis)]\\n assert len(zero_positions) == 7\\n return {\'printed_minimum_distance\': 39, \'claimed_minimum_distance\': 40,\\n \'counterexample_message_mask\': 2, \'zero_symbol_positions\': zero_positions,\\n \'changed_component_one_based\': 31,\\n \'replacement_basis_binary\': [format(v, \'08b\') for v in corrected[\'columns\'][30]],\\n \'original_weight_distribution\': checked[\'weight_distribution\']}\\n\\n\\nif __name__ == \'__main__\':\\n codes, identities = reproduce_baselines()\\n report = {\'codes\': codes, \'defect_identity_checks\': identities,\\n \'printed_example_audit\': audit_printed_example(),\\n \'arithmetic_using_published_classification\': check_published_inputs(),\\n \'limitation\': \'The published classification tables are inputs, not independently re-enumerated.\'}\\n (ROOT/\'verification-results.json\').write_text(json.dumps(report, indent=2)+\'\\\\n\')\\n print(json.dumps(report, indent=2))\\n", "repair_example.py": "\\"\\"\\"Reproduce the single-plane repair, without a solver or external packages.\\"\\"\\"\\nimport json\\nfrom pathlib import Path\\nfrom verify import span\\n\\nroot = Path(__file__).resolve().parent\\ndata = json.loads((root/\'known-46.json\').read_text())\\ncolumns = data[\'columns\']\\ncounts = {x: sum(all((x & b).bit_count() % 2 == 0 for b in c) for c in columns)\\n for x in range(1, 256)}\\nbad = [x for x, count in counts.items() if count > 6]\\nremovals = [i for i, c in enumerate(columns)\\n if all(all((x & b).bit_count() % 2 == 0 for b in c) for x in bad)]\\nassert removals == [30]\\nold = columns[30]\\ntight = [x for x, count in counts.items()\\n if count - int(all((x & b).bit_count() % 2 == 0 for b in old)) == 6]\\n\\ndef candidates():\\n # Each binary 3-space is represented once by its three successive\\n # lexicographically least independent nonzero vectors.\\n for a in range(1, 256):\\n for b in range(a+1, 256):\\n if b > (a ^ b):\\n continue\\n for c in range(b+1, 256):\\n if c < min(c ^ a, c ^ b, c ^ a ^ b):\\n yield (a, b, c)\\n\\nfor basis in candidates():\\n if any(all((x & b).bit_count() % 2 == 0 for b in basis) for x in tight):\\n continue\\n # Convert the successful plane to the conventional descending-pivot basis.\\n points = span(basis)\\n reduced = []\\n for v in sorted(points):\\n if v not in span(reduced):\\n reduced.append(v)\\n columns[30] = sorted(reduced, reverse=True)\\n assert columns[30] == [146, 86, 50]\\n data[\'attribution\'] = \'Known construction from Kurz Appendix F, with one plane repaired by independent exact search; see provenance.json.\'\\n (root/\'repaired-46.json\').write_text(json.dumps(data, indent=2)+\'\\\\n\')\\n print(\'Replacement component 31:\', columns[30])\\n break\\nelse:\\n raise AssertionError(\'No one-plane repair found\')\\n", "published-facts.json": "{\\n \\"source\\": \\"Theresa K\\u00f6rner and Sascha Kurz, Lengths of divisible codes with restricted column multiplicities, arXiv:2303.17172v2, Theorem 13 and Tables 4-5; journal DOI 10.3934/amc.2023050\\",\\n \\"url\\": \\"https://arxiv.org/pdf/2303.17172v2\\",\\n \\"dimensions_in_order\\": [1, 2, 3, 4, 5, 6, 7, 8],\\n \\"counts_8_divisible\\": {\\n \\"23\\": [0, 0, 0, 1, 1, 0, 0, 0],\\n \\"37\\": [0, 0, 0, 2, 5, 8, 5, 1]\\n },\\n \\"counts_16_divisible\\": {\\n \\"46\\": [0, 0, 0, 1, 1, 0, 0, 0],\\n \\"74\\": [0, 0, 0, 2, 5, 8, 5, 1]\\n },\\n \\"minimum_max_multiplicity_8_divisible\\": {\\"23\\": 8, \\"37\\": 8},\\n \\"limitation\\": \\"Transcribed published classification inputs. Matching rows do not constitute an independent re-enumeration. Their use is explained in the proof.\\"\\n}\\n", "known-46.json": "{\\n \\"source\\": \\"https://arxiv.org/html/2412.14615v3#A6\\",\\n \\"attribution\\": \\"Sascha Kurz, Appendix F; existing construction, not new\\",\\n \\"rank\\": 8,\\n \\"length\\": 46,\\n \\"distance\\": 40,\\n \\"columns\\": [\\n [\\n 68,\\n 45,\\n 22\\n ],\\n [\\n 76,\\n 38,\\n 27\\n ],\\n [\\n 72,\\n 43,\\n 29\\n ],\\n [\\n 137,\\n 70,\\n 21\\n ],\\n [\\n 135,\\n 77,\\n 63\\n ],\\n [\\n 135,\\n 81,\\n 10\\n ],\\n [\\n 139,\\n 115,\\n 5\\n ],\\n [\\n 140,\\n 84,\\n 3\\n ],\\n [\\n 136,\\n 124,\\n 2\\n ],\\n [\\n 142,\\n 75,\\n 42\\n ],\\n [\\n 144,\\n 66,\\n 39\\n ],\\n [\\n 174,\\n 65,\\n 30\\n ],\\n [\\n 150,\\n 65,\\n 47\\n ],\\n [\\n 167,\\n 67,\\n 26\\n ],\\n [\\n 152,\\n 69,\\n 34\\n ],\\n [\\n 165,\\n 79,\\n 17\\n ],\\n [\\n 159,\\n 75,\\n 39\\n ],\\n [\\n 164,\\n 70,\\n 30\\n ],\\n [\\n 158,\\n 66,\\n 53\\n ],\\n [\\n 153,\\n 67,\\n 57\\n ],\\n [\\n 159,\\n 74,\\n 51\\n ],\\n [\\n 156,\\n 77,\\n 57\\n ],\\n [\\n 149,\\n 84,\\n 33\\n ],\\n [\\n 172,\\n 111,\\n 19\\n ],\\n [\\n 148,\\n 86,\\n 37\\n ],\\n [\\n 163,\\n 98,\\n 31\\n ],\\n [\\n 145,\\n 88,\\n 35\\n ],\\n [\\n 161,\\n 102,\\n 18\\n ],\\n [\\n 144,\\n 92,\\n 33\\n ],\\n [\\n 163,\\n 107,\\n 19\\n ],\\n [\\n 84,\\n 32,\\n 8\\n ],\\n [\\n 146,\\n 81,\\n 58\\n ],\\n [\\n 147,\\n 93,\\n 49\\n ],\\n [\\n 152,\\n 90,\\n 50\\n ],\\n [\\n 134,\\n 98,\\n 15\\n ],\\n [\\n 132,\\n 104,\\n 1\\n ],\\n [\\n 148,\\n 117,\\n 15\\n ],\\n [\\n 182,\\n 101,\\n 10\\n ],\\n [\\n 168,\\n 90,\\n 5\\n ],\\n [\\n 64,\\n 9,\\n 7\\n ],\\n [\\n 64,\\n 32,\\n 16\\n ],\\n [\\n 64,\\n 46,\\n 25\\n ],\\n [\\n 128,\\n 8,\\n 4\\n ],\\n [\\n 128,\\n 38,\\n 29\\n ],\\n [\\n 192,\\n 11,\\n 6\\n ],\\n [\\n 192,\\n 41,\\n 23\\n ]\\n ]\\n}\\n", "known-55.json": "{\\n \\"source\\": \\"https://arxiv.org/html/2412.14615v3#A6\\",\\n \\"attribution\\": \\"Sascha Kurz, Appendix F; existing construction, not new\\",\\n \\"rank\\": 8,\\n \\"length\\": 55,\\n \\"distance\\": 48,\\n \\"columns\\": [\\n [\\n 70,\\n 45,\\n 23\\n ],\\n [\\n 198,\\n 35,\\n 25\\n ],\\n [\\n 72,\\n 42,\\n 27\\n ],\\n [\\n 203,\\n 36,\\n 21\\n ],\\n [\\n 66,\\n 51,\\n 10\\n ],\\n [\\n 202,\\n 33,\\n 5\\n ],\\n [\\n 77,\\n 61,\\n 2\\n ],\\n [\\n 192,\\n 40,\\n 1\\n ],\\n [\\n 87,\\n 34,\\n 15\\n ],\\n [\\n 197,\\n 17,\\n 8\\n ],\\n [\\n 96,\\n 20,\\n 15\\n ],\\n [\\n 194,\\n 48,\\n 8\\n ],\\n [\\n 101,\\n 18,\\n 13\\n ],\\n [\\n 197,\\n 52,\\n 9\\n ],\\n [\\n 134,\\n 32,\\n 22\\n ],\\n [\\n 160,\\n 67,\\n 16\\n ],\\n [\\n 131,\\n 47,\\n 29\\n ],\\n [\\n 175,\\n 78,\\n 24\\n ],\\n [\\n 143,\\n 43,\\n 28\\n ],\\n [\\n 164,\\n 72,\\n 26\\n ],\\n [\\n 136,\\n 57,\\n 2\\n ],\\n [\\n 174,\\n 68,\\n 1\\n ],\\n [\\n 155,\\n 33,\\n 7\\n ],\\n [\\n 165,\\n 19,\\n 12\\n ],\\n [\\n 154,\\n 48,\\n 7\\n ],\\n [\\n 181,\\n 85,\\n 12\\n ],\\n [\\n 163,\\n 91,\\n 6\\n ],\\n [\\n 128,\\n 71,\\n 23\\n ],\\n [\\n 144,\\n 64,\\n 44\\n ],\\n [\\n 130,\\n 74,\\n 28\\n ],\\n [\\n 146,\\n 65,\\n 37\\n ],\\n [\\n 141,\\n 78,\\n 18\\n ],\\n [\\n 159,\\n 73,\\n 39\\n ],\\n [\\n 132,\\n 93,\\n 3\\n ],\\n [\\n 149,\\n 66,\\n 14\\n ],\\n [\\n 153,\\n 89,\\n 3\\n ],\\n [\\n 181,\\n 96,\\n 14\\n ],\\n [\\n 140,\\n 69,\\n 46\\n ],\\n [\\n 143,\\n 75,\\n 41\\n ],\\n [\\n 138,\\n 67,\\n 62\\n ],\\n [\\n 137,\\n 77,\\n 53\\n ],\\n [\\n 131,\\n 82,\\n 36\\n ],\\n [\\n 142,\\n 80,\\n 46\\n ],\\n [\\n 139,\\n 88,\\n 39\\n ],\\n [\\n 142,\\n 84,\\n 60\\n ],\\n [\\n 149,\\n 71,\\n 52\\n ],\\n [\\n 145,\\n 95,\\n 44\\n ],\\n [\\n 169,\\n 103,\\n 22\\n ],\\n [\\n 148,\\n 91,\\n 60\\n ],\\n [\\n 129,\\n 97,\\n 4\\n ],\\n [\\n 132,\\n 102,\\n 11\\n ],\\n [\\n 134,\\n 99,\\n 30\\n ],\\n [\\n 133,\\n 106,\\n 18\\n ],\\n [\\n 146,\\n 105,\\n 4\\n ],\\n [\\n 171,\\n 112,\\n 6\\n ]\\n ]\\n}\\n", "repaired-46.json": "{\\n \\"source\\": \\"https://arxiv.org/html/2412.14615v3#A6\\",\\n \\"attribution\\": \\"Known construction from Kurz Appendix F, with one plane repaired by independent exact search; see provenance.json.\\",\\n \\"rank\\": 8,\\n \\"length\\": 46,\\n \\"distance\\": 40,\\n \\"columns\\": [\\n [\\n 68,\\n 45,\\n 22\\n ],\\n [\\n 76,\\n 38,\\n 27\\n ],\\n [\\n 72,\\n 43,\\n 29\\n ],\\n [\\n 137,\\n 70,\\n 21\\n ],\\n [\\n 135,\\n 77,\\n 63\\n ],\\n [\\n 135,\\n 81,\\n 10\\n ],\\n [\\n 139,\\n 115,\\n 5\\n ],\\n [\\n 140,\\n 84,\\n 3\\n ],\\n [\\n 136,\\n 124,\\n 2\\n ],\\n [\\n 142,\\n 75,\\n 42\\n ],\\n [\\n 144,\\n 66,\\n 39\\n ],\\n [\\n 174,\\n 65,\\n 30\\n ],\\n [\\n 150,\\n 65,\\n 47\\n ],\\n [\\n 167,\\n 67,\\n 26\\n ],\\n [\\n 152,\\n 69,\\n 34\\n ],\\n [\\n 165,\\n 79,\\n 17\\n ],\\n [\\n 159,\\n 75,\\n 39\\n ],\\n [\\n 164,\\n 70,\\n 30\\n ],\\n [\\n 158,\\n 66,\\n 53\\n ],\\n [\\n 153,\\n 67,\\n 57\\n ],\\n [\\n 159,\\n 74,\\n 51\\n ],\\n [\\n 156,\\n 77,\\n 57\\n ],\\n [\\n 149,\\n 84,\\n 33\\n ],\\n [\\n 172,\\n 111,\\n 19\\n ],\\n [\\n 148,\\n 86,\\n 37\\n ],\\n [\\n 163,\\n 98,\\n 31\\n ],\\n [\\n 145,\\n 88,\\n 35\\n ],\\n [\\n 161,\\n 102,\\n 18\\n ],\\n [\\n 144,\\n 92,\\n 33\\n ],\\n [\\n 163,\\n 107,\\n 19\\n ],\\n [\\n 146,\\n 86,\\n 50\\n ],\\n [\\n 146,\\n 81,\\n 58\\n ],\\n [\\n 147,\\n 93,\\n 49\\n ],\\n [\\n 152,\\n 90,\\n 50\\n ],\\n [\\n 134,\\n 98,\\n 15\\n ],\\n [\\n 132,\\n 104,\\n 1\\n ],\\n [\\n 148,\\n 117,\\n 15\\n ],\\n [\\n 182,\\n 101,\\n 10\\n ],\\n [\\n 168,\\n 90,\\n 5\\n ],\\n [\\n 64,\\n 9,\\n 7\\n ],\\n [\\n 64,\\n 32,\\n 16\\n ],\\n [\\n 64,\\n 46,\\n 25\\n ],\\n [\\n 128,\\n 8,\\n 4\\n ],\\n [\\n 128,\\n 38,\\n 29\\n ],\\n [\\n 192,\\n 11,\\n 6\\n ],\\n [\\n 192,\\n 41,\\n 23\\n ]\\n ]\\n}\\n", "baseline-87.json": "{\\n \\"rank\\": 8,\\n \\"length\\": 87,\\n \\"distance\\": 76,\\n \\"columns\\": [\\n [\\n 70,\\n 45,\\n 23\\n ],\\n [\\n 198,\\n 35,\\n 25\\n ],\\n [\\n 72,\\n 42,\\n 27\\n ],\\n [\\n 203,\\n 36,\\n 21\\n ],\\n [\\n 66,\\n 51,\\n 10\\n ],\\n [\\n 202,\\n 33,\\n 5\\n ],\\n [\\n 77,\\n 61,\\n 2\\n ],\\n [\\n 192,\\n 40,\\n 1\\n ],\\n [\\n 87,\\n 34,\\n 15\\n ],\\n [\\n 197,\\n 17,\\n 8\\n ],\\n [\\n 96,\\n 20,\\n 15\\n ],\\n [\\n 194,\\n 48,\\n 8\\n ],\\n [\\n 101,\\n 18,\\n 13\\n ],\\n [\\n 197,\\n 52,\\n 9\\n ],\\n [\\n 134,\\n 32,\\n 22\\n ],\\n [\\n 160,\\n 67,\\n 16\\n ],\\n [\\n 131,\\n 47,\\n 29\\n ],\\n [\\n 175,\\n 78,\\n 24\\n ],\\n [\\n 143,\\n 43,\\n 28\\n ],\\n [\\n 164,\\n 72,\\n 26\\n ],\\n [\\n 136,\\n 57,\\n 2\\n ],\\n [\\n 174,\\n 68,\\n 1\\n ],\\n [\\n 155,\\n 33,\\n 7\\n ],\\n [\\n 165,\\n 19,\\n 12\\n ],\\n [\\n 154,\\n 48,\\n 7\\n ],\\n [\\n 181,\\n 85,\\n 12\\n ],\\n [\\n 163,\\n 91,\\n 6\\n ],\\n [\\n 128,\\n 71,\\n 23\\n ],\\n [\\n 144,\\n 64,\\n 44\\n ],\\n [\\n 130,\\n 74,\\n 28\\n ],\\n [\\n 146,\\n 65,\\n 37\\n ],\\n [\\n 141,\\n 78,\\n 18\\n ],\\n [\\n 159,\\n 73,\\n 39\\n ],\\n [\\n 132,\\n 93,\\n 3\\n ],\\n [\\n 149,\\n 66,\\n 14\\n ],\\n [\\n 153,\\n 89,\\n 3\\n ],\\n [\\n 181,\\n 96,\\n 14\\n ],\\n [\\n 140,\\n 69,\\n 46\\n ],\\n [\\n 143,\\n 75,\\n 41\\n ],\\n [\\n 138,\\n 67,\\n 62\\n ],\\n [\\n 137,\\n 77,\\n 53\\n ],\\n [\\n 131,\\n 82,\\n 36\\n ],\\n [\\n 142,\\n 80,\\n 46\\n ],\\n [\\n 139,\\n 88,\\n 39\\n ],\\n [\\n 142,\\n 84,\\n 60\\n ],\\n [\\n 149,\\n 71,\\n 52\\n ],\\n [\\n 145,\\n 95,\\n 44\\n ],\\n [\\n 169,\\n 103,\\n 22\\n ],\\n [\\n 148,\\n 91,\\n 60\\n ],\\n [\\n 129,\\n 97,\\n 4\\n ],\\n [\\n 132,\\n 102,\\n 11\\n ],\\n [\\n 134,\\n 99,\\n 30\\n ],\\n [\\n 133,\\n 106,\\n 18\\n ],\\n [\\n 146,\\n 105,\\n 4\\n ],\\n [\\n 171,\\n 112,\\n 6\\n ],\\n [\\n 1,\\n 2,\\n 4\\n ],\\n [\\n 9,\\n 18,\\n 36\\n ],\\n [\\n 17,\\n 34,\\n 68\\n ],\\n [\\n 25,\\n 50,\\n 100\\n ],\\n [\\n 33,\\n 66,\\n 132\\n ],\\n [\\n 41,\\n 82,\\n 164\\n ],\\n [\\n 49,\\n 98,\\n 196\\n ],\\n [\\n 57,\\n 114,\\n 228\\n ],\\n [\\n 65,\\n 130,\\n 44\\n ],\\n [\\n 73,\\n 146,\\n 12\\n ],\\n [\\n 81,\\n 162,\\n 108\\n ],\\n [\\n 89,\\n 178,\\n 76\\n ],\\n [\\n 97,\\n 194,\\n 172\\n ],\\n [\\n 105,\\n 210,\\n 140\\n ],\\n [\\n 113,\\n 226,\\n 236\\n ],\\n [\\n 121,\\n 242,\\n 204\\n ],\\n [\\n 129,\\n 42,\\n 84\\n ],\\n [\\n 137,\\n 58,\\n 116\\n ],\\n [\\n 145,\\n 10,\\n 20\\n ],\\n [\\n 153,\\n 26,\\n 52\\n ],\\n [\\n 161,\\n 106,\\n 212\\n ],\\n [\\n 169,\\n 122,\\n 244\\n ],\\n [\\n 177,\\n 74,\\n 148\\n ],\\n [\\n 185,\\n 90,\\n 180\\n ],\\n [\\n 193,\\n 170,\\n 124\\n ],\\n [\\n 201,\\n 186,\\n 92\\n ],\\n [\\n 209,\\n 138,\\n 60\\n ],\\n [\\n 217,\\n 154,\\n 28\\n ],\\n [\\n 225,\\n 234,\\n 252\\n ],\\n [\\n 233,\\n 250,\\n 220\\n ],\\n [\\n 241,\\n 202,\\n 188\\n ],\\n [\\n 249,\\n 218,\\n 156\\n ]\\n ],\\n \\"attribution\\": \\"Reproduction of known lower bound; see RESEARCH-NOTE.txt.\\"\\n}\\n", "baseline-119.json": "{\\n \\"rank\\": 8,\\n \\"length\\": 119,\\n \\"distance\\": 104,\\n \\"columns\\": [\\n [\\n 68,\\n 45,\\n 22\\n ],\\n [\\n 76,\\n 38,\\n 27\\n ],\\n [\\n 72,\\n 43,\\n 29\\n ],\\n [\\n 137,\\n 70,\\n 21\\n ],\\n [\\n 135,\\n 77,\\n 63\\n ],\\n [\\n 135,\\n 81,\\n 10\\n ],\\n [\\n 139,\\n 115,\\n 5\\n ],\\n [\\n 140,\\n 84,\\n 3\\n ],\\n [\\n 136,\\n 124,\\n 2\\n ],\\n [\\n 142,\\n 75,\\n 42\\n ],\\n [\\n 144,\\n 66,\\n 39\\n ],\\n [\\n 174,\\n 65,\\n 30\\n ],\\n [\\n 150,\\n 65,\\n 47\\n ],\\n [\\n 167,\\n 67,\\n 26\\n ],\\n [\\n 152,\\n 69,\\n 34\\n ],\\n [\\n 165,\\n 79,\\n 17\\n ],\\n [\\n 159,\\n 75,\\n 39\\n ],\\n [\\n 164,\\n 70,\\n 30\\n ],\\n [\\n 158,\\n 66,\\n 53\\n ],\\n [\\n 153,\\n 67,\\n 57\\n ],\\n [\\n 159,\\n 74,\\n 51\\n ],\\n [\\n 156,\\n 77,\\n 57\\n ],\\n [\\n 149,\\n 84,\\n 33\\n ],\\n [\\n 172,\\n 111,\\n 19\\n ],\\n [\\n 148,\\n 86,\\n 37\\n ],\\n [\\n 163,\\n 98,\\n 31\\n ],\\n [\\n 145,\\n 88,\\n 35\\n ],\\n [\\n 161,\\n 102,\\n 18\\n ],\\n [\\n 144,\\n 92,\\n 33\\n ],\\n [\\n 163,\\n 107,\\n 19\\n ],\\n [\\n 146,\\n 86,\\n 50\\n ],\\n [\\n 146,\\n 81,\\n 58\\n ],\\n [\\n 147,\\n 93,\\n 49\\n ],\\n [\\n 152,\\n 90,\\n 50\\n ],\\n [\\n 134,\\n 98,\\n 15\\n ],\\n [\\n 132,\\n 104,\\n 1\\n ],\\n [\\n 148,\\n 117,\\n 15\\n ],\\n [\\n 182,\\n 101,\\n 10\\n ],\\n [\\n 168,\\n 90,\\n 5\\n ],\\n [\\n 64,\\n 9,\\n 7\\n ],\\n [\\n 64,\\n 32,\\n 16\\n ],\\n [\\n 64,\\n 46,\\n 25\\n ],\\n [\\n 128,\\n 8,\\n 4\\n ],\\n [\\n 128,\\n 38,\\n 29\\n ],\\n [\\n 192,\\n 11,\\n 6\\n ],\\n [\\n 192,\\n 41,\\n 23\\n ],\\n [\\n 1,\\n 28,\\n 76\\n ],\\n [\\n 2,\\n 56,\\n 137\\n ],\\n [\\n 3,\\n 36,\\n 197\\n ],\\n [\\n 4,\\n 112,\\n 18\\n ],\\n [\\n 5,\\n 50,\\n 91\\n ],\\n [\\n 6,\\n 72,\\n 155\\n ],\\n [\\n 7,\\n 83,\\n 131\\n ],\\n [\\n 8,\\n 53,\\n 213\\n ],\\n [\\n 9,\\n 245,\\n 112\\n ],\\n [\\n 10,\\n 100,\\n 182\\n ],\\n [\\n 11,\\n 196,\\n 52\\n ],\\n [\\n 12,\\n 144,\\n 39\\n ],\\n [\\n 13,\\n 102,\\n 129\\n ],\\n [\\n 14,\\n 166,\\n 6\\n ],\\n [\\n 15,\\n 86,\\n 180\\n ],\\n [\\n 16,\\n 106,\\n 170\\n ],\\n [\\n 17,\\n 235,\\n 38\\n ],\\n [\\n 18,\\n 227,\\n 9\\n ],\\n [\\n 19,\\n 75,\\n 175\\n ],\\n [\\n 20,\\n 200,\\n 108\\n ],\\n [\\n 21,\\n 33,\\n 141\\n ],\\n [\\n 22,\\n 111,\\n 136\\n ],\\n [\\n 23,\\n 170,\\n 41\\n ],\\n [\\n 24,\\n 71,\\n 32\\n ],\\n [\\n 25,\\n 47,\\n 10\\n ],\\n [\\n 26,\\n 204,\\n 2\\n ],\\n [\\n 27,\\n 133,\\n 4\\n ],\\n [\\n 30,\\n 172,\\n 104\\n ],\\n [\\n 31,\\n 136,\\n 107\\n ],\\n [\\n 32,\\n 212,\\n 69\\n ],\\n [\\n 34,\\n 93,\\n 139\\n ],\\n [\\n 35,\\n 135,\\n 17\\n ],\\n [\\n 37,\\n 138,\\n 82\\n ],\\n [\\n 38,\\n 150,\\n 79\\n ],\\n [\\n 40,\\n 201,\\n 89\\n ],\\n [\\n 41,\\n 192,\\n 68\\n ],\\n [\\n 42,\\n 66,\\n 11\\n ],\\n [\\n 43,\\n 90,\\n 15\\n ],\\n [\\n 44,\\n 222,\\n 1\\n ],\\n [\\n 45,\\n 146,\\n 29\\n ],\\n [\\n 46,\\n 67,\\n 23\\n ],\\n [\\n 48,\\n 81,\\n 142\\n ],\\n [\\n 49,\\n 77,\\n 142\\n ],\\n [\\n 51,\\n 70,\\n 14\\n ],\\n [\\n 57,\\n 148,\\n 83\\n ],\\n [\\n 59,\\n 149,\\n 78\\n ],\\n [\\n 60,\\n 193,\\n 88\\n ],\\n [\\n 62,\\n 199,\\n 16\\n ],\\n [\\n 63,\\n 92,\\n 134\\n ],\\n [\\n 64,\\n 155,\\n 51\\n ],\\n [\\n 65,\\n 165,\\n 47\\n ],\\n [\\n 68,\\n 186,\\n 7\\n ],\\n [\\n 69,\\n 169,\\n 26\\n ],\\n [\\n 73,\\n 152,\\n 30\\n ],\\n [\\n 74,\\n 181,\\n 20\\n ],\\n [\\n 76,\\n 143,\\n 44\\n ],\\n [\\n 79,\\n 130,\\n 5\\n ],\\n [\\n 80,\\n 163,\\n 49\\n ],\\n [\\n 82,\\n 153,\\n 25\\n ],\\n [\\n 85,\\n 159,\\n 3\\n ],\\n [\\n 87,\\n 167,\\n 21\\n ],\\n [\\n 96,\\n 162,\\n 28\\n ],\\n [\\n 98,\\n 154,\\n 13\\n ],\\n [\\n 101,\\n 171,\\n 34\\n ],\\n [\\n 103,\\n 145,\\n 58\\n ],\\n [\\n 114,\\n 183,\\n 40\\n ],\\n [\\n 115,\\n 160,\\n 53\\n ],\\n [\\n 118,\\n 141,\\n 42\\n ],\\n [\\n 119,\\n 128,\\n 54\\n ],\\n [\\n 120,\\n 161,\\n 35\\n ],\\n [\\n 123,\\n 157,\\n 59\\n ],\\n [\\n 125,\\n 147,\\n 0\\n ],\\n [\\n 126,\\n 184,\\n 12\\n ]\\n ],\\n \\"attribution\\": \\"Reproduction of known lower bound; see RESEARCH-NOTE.txt.\\"\\n}\\n", "provenance.json": "{\\n \\"source_index_one_based\\": 31,\\n \\"source_basis\\": [\\n 84,\\n 32,\\n 8\\n ],\\n \\"replacement_basis\\": [\\n 146,\\n 86,\\n 50\\n ],\\n \\"bad_normals\\": [\\n 2,\\n 3,\\n 20,\\n 21,\\n 22,\\n 23,\\n 70,\\n 71,\\n 80,\\n 81,\\n 82,\\n 83,\\n 128,\\n 148,\\n 149,\\n 150,\\n 151,\\n 196,\\n 197,\\n 198,\\n 199,\\n 208,\\n 209,\\n 210,\\n 211\\n ],\\n \\"pdf_location\\": \\"arXiv:2412.14615v3, printed pages 116-117; 31st component, third matrix at top of printed page 117 (PDF page 119).\\"\\n}\\n", "verification-results.json": "{\\n \\"codes\\": [\\n {\\n \\"length\\": 46,\\n \\"size\\": 256,\\n \\"distance\\": 40,\\n \\"weight_distribution\\": {\\n \\"0\\": 1,\\n \\"40\\": 229,\\n \\"44\\": 26\\n },\\n \\"pairs_checked\\": 32640\\n },\\n {\\n \\"length\\": 55,\\n \\"size\\": 256,\\n \\"distance\\": 48,\\n \\"weight_distribution\\": {\\n \\"0\\": 1,\\n \\"48\\": 235,\\n \\"52\\": 20\\n },\\n \\"pairs_checked\\": 32640\\n },\\n {\\n \\"length\\": 32,\\n \\"size\\": 256,\\n \\"distance\\": 28,\\n \\"weight_distribution\\": {\\n \\"0\\": 1,\\n \\"28\\": 248,\\n \\"32\\": 7\\n },\\n \\"pairs_checked\\": 32640\\n },\\n {\\n \\"length\\": 73,\\n \\"size\\": 256,\\n \\"distance\\": 64,\\n \\"weight_distribution\\": {\\n \\"0\\": 1,\\n \\"64\\": 255\\n },\\n \\"pairs_checked\\": 32640\\n },\\n {\\n \\"length\\": 87,\\n \\"size\\": 256,\\n \\"distance\\": 76,\\n \\"weight_distribution\\": {\\n \\"0\\": 1,\\n \\"76\\": 228,\\n \\"80\\": 27\\n },\\n \\"pairs_checked\\": 32640\\n },\\n {\\n \\"length\\": 119,\\n \\"size\\": 256,\\n \\"distance\\": 104,\\n \\"weight_distribution\\": {\\n \\"0\\": 1,\\n \\"104\\": 229,\\n \\"108\\": 26\\n },\\n \\"pairs_checked\\": 32640\\n }\\n ],\\n \\"defect_identity_checks\\": [\\n {\\n \\"length\\": 46,\\n \\"slack\\": 6,\\n \\"defect_length\\": 104,\\n \\"identities_checked\\": 255\\n },\\n {\\n \\"length\\": 55,\\n \\"slack\\": 7,\\n \\"defect_length\\": 80,\\n \\"identities_checked\\": 255\\n },\\n {\\n \\"length\\": 32,\\n \\"slack\\": 4,\\n \\"defect_length\\": 28,\\n \\"identities_checked\\": 255\\n }\\n ],\\n \\"printed_example_audit\\": {\\n \\"printed_minimum_distance\\": 39,\\n \\"claimed_minimum_distance\\": 40,\\n \\"counterexample_message_mask\\": 2,\\n \\"zero_symbol_positions\\": [\\n 22,\\n 23,\\n 29,\\n 31,\\n 36,\\n 41,\\n 43\\n ],\\n \\"changed_component_one_based\\": 31,\\n \\"replacement_basis_binary\\": [\\n \\"10010010\\",\\n \\"01010110\\",\\n \\"00110010\\"\\n ],\\n \\"original_weight_distribution\\": {\\n \\"0\\": 1,\\n \\"39\\": 25,\\n \\"40\\": 176,\\n \\"41\\": 28,\\n \\"43\\": 3,\\n \\"44\\": 23\\n }\\n },\\n \\"arithmetic_using_published_classification\\": [\\n {\\n \\"excluded_length\\": 89,\\n \\"slack\\": 11,\\n \\"defect_length\\": 46,\\n \\"required_multiplicity\\": 16,\\n \\"allowed_multiplicity\\": 11\\n },\\n {\\n \\"excluded_length\\": 121,\\n \\"slack\\": 15,\\n \\"defect_length\\": 74,\\n \\"required_multiplicity\\": 16,\\n \\"allowed_multiplicity\\": 15\\n }\\n ],\\n \\"limitation\\": \\"The published classification tables are inputs, not independently re-enumerated.\\"\\n}\\n", "verification.log": "{\\n \\"codes\\": [\\n {\\n \\"length\\": 46,\\n \\"size\\": 256,\\n \\"distance\\": 40,\\n \\"weight_distribution\\": {\\n \\"0\\": 1,\\n \\"40\\": 229,\\n \\"44\\": 26\\n },\\n \\"pairs_checked\\": 32640\\n },\\n {\\n \\"length\\": 55,\\n \\"size\\": 256,\\n \\"distance\\": 48,\\n \\"weight_distribution\\": {\\n \\"0\\": 1,\\n \\"48\\": 235,\\n \\"52\\": 20\\n },\\n \\"pairs_checked\\": 32640\\n },\\n {\\n \\"length\\": 32,\\n \\"size\\": 256,\\n \\"distance\\": 28,\\n \\"weight_distribution\\": {\\n \\"0\\": 1,\\n \\"28\\": 248,\\n \\"32\\": 7\\n },\\n \\"pairs_checked\\": 32640\\n },\\n {\\n \\"length\\": 73,\\n \\"size\\": 256,\\n \\"distance\\": 64,\\n \\"weight_distribution\\": {\\n \\"0\\": 1,\\n \\"64\\": 255\\n },\\n \\"pairs_checked\\": 32640\\n },\\n {\\n \\"length\\": 87,\\n \\"size\\": 256,\\n \\"distance\\": 76,\\n \\"weight_distribution\\": {\\n \\"0\\": 1,\\n \\"76\\": 228,\\n \\"80\\": 27\\n },\\n \\"pairs_checked\\": 32640\\n },\\n {\\n \\"length\\": 119,\\n \\"size\\": 256,\\n \\"distance\\": 104,\\n \\"weight_distribution\\": {\\n \\"0\\": 1,\\n \\"104\\": 229,\\n \\"108\\": 26\\n },\\n \\"pairs_checked\\": 32640\\n }\\n ],\\n \\"defect_identity_checks\\": [\\n {\\n \\"length\\": 46,\\n \\"slack\\": 6,\\n \\"defect_length\\": 104,\\n \\"identities_checked\\": 255\\n },\\n {\\n \\"length\\": 55,\\n \\"slack\\": 7,\\n \\"defect_length\\": 80,\\n \\"identities_checked\\": 255\\n },\\n {\\n \\"length\\": 32,\\n \\"slack\\": 4,\\n \\"defect_length\\": 28,\\n \\"identities_checked\\": 255\\n }\\n ],\\n \\"printed_example_audit\\": {\\n \\"printed_minimum_distance\\": 39,\\n \\"claimed_minimum_distance\\": 40,\\n \\"counterexample_message_mask\\": 2,\\n \\"zero_symbol_positions\\": [\\n 22,\\n 23,\\n 29,\\n 31,\\n 36,\\n 41,\\n 43\\n ],\\n \\"changed_component_one_based\\": 31,\\n \\"replacement_basis_binary\\": [\\n \\"10010010\\",\\n \\"01010110\\",\\n \\"00110010\\"\\n ],\\n \\"original_weight_distribution\\": {\\n \\"0\\": 1,\\n \\"39\\": 25,\\n \\"40\\": 176,\\n \\"41\\": 28,\\n \\"43\\": 3,\\n \\"44\\": 23\\n }\\n },\\n \\"arithmetic_using_published_classification\\": [\\n {\\n \\"excluded_length\\": 89,\\n \\"slack\\": 11,\\n \\"defect_length\\": 46,\\n \\"required_multiplicity\\": 16,\\n \\"allowed_multiplicity\\": 11\\n },\\n {\\n \\"excluded_length\\": 121,\\n \\"slack\\": 15,\\n \\"defect_length\\": 74,\\n \\"required_multiplicity\\": 16,\\n \\"allowed_multiplicity\\": 15\\n }\\n ],\\n \\"limitation\\": \\"The published classification tables are inputs, not independently re-enumerated.\\"\\n}\\n", "source-hashes.json": "{\\n \\"paper.pdf\\": {\\n \\"url\\": \\"https://arxiv.org/pdf/2412.14615v3\\",\\n \\"sha256\\": \\"d3d77be8e3e7ca1431273892b40100fad41ed9d73099bd89b8c13110d66b70ac\\"\\n },\\n \\"paper.html\\": {\\n \\"url\\": \\"https://arxiv.org/html/2412.14615v3\\",\\n \\"sha256\\": \\"45378ac2c698237bdabcc1e4a6e776546a8c3b7f56dc7a02b4145c9f29c5bcb0\\"\\n },\\n \\"divisible-multiplicities.pdf\\": {\\n \\"url\\": \\"https://arxiv.org/pdf/2303.17172v2\\",\\n \\"sha256\\": \\"2343ead06d8d19710b99554bcff59cd587b05310ed41b96069d14896fa273e09\\"\\n }\\n}\\n", "experiments/defect-n120-order15.json": "{\\n \\"length\\": 120,\\n \\"order\\": 15,\\n \\"status\\": \\"INFEASIBLE\\",\\n \\"stats\\": \\"CpSolverResponse summary:\\\\nstatus: INFEASIBLE\\\\nobjective: NA\\\\nbest_bound: NA\\\\nintegers: 0\\\\nbooleans: 0\\\\nconflicts: 0\\\\nbranches: 0\\\\npropagations: 0\\\\ninteger_propagations: 0\\\\nrestarts: 0\\\\nlp_iterations: 0\\\\nwalltime: 0.0708911\\\\nusertime: 0.0708912\\\\ndeterministic_time: 0.000578599\\\\ngap_integral: 0\\\\n\\"\\n}\\n", "experiments/defect-n120-order3.json": "{\\n \\"length\\": 120,\\n \\"order\\": 3,\\n \\"status\\": \\"UNKNOWN\\",\\n \\"stats\\": \\"CpSolverResponse summary:\\\\nstatus: UNKNOWN\\\\nobjective: 0\\\\nbest_bound: 0\\\\nintegers: 215\\\\nbooleans: 498\\\\nconflicts: 66922\\\\nbranches: 204361\\\\npropagations: 1137232\\\\ninteger_propagations: 6775822\\\\nrestarts: 209\\\\nlp_iterations: 804469\\\\nwalltime: 180.052\\\\nusertime: 180.052\\\\ndeterministic_time: 516.899\\\\ngap_integral: 0\\\\n\\"\\n}\\n", "experiments/defect-n120-order5.json": "{\\n \\"length\\": 120,\\n \\"order\\": 5,\\n \\"status\\": \\"UNKNOWN\\",\\n \\"stats\\": \\"CpSolverResponse summary:\\\\nstatus: UNKNOWN\\\\nobjective: 0\\\\nbest_bound: 0\\\\nintegers: 107\\\\nbooleans: 186\\\\nconflicts: 443059\\\\nbranches: 652048\\\\npropagations: 2609463\\\\ninteger_propagations: 13458038\\\\nrestarts: 602\\\\nlp_iterations: 326\\\\nwalltime: 120.03\\\\nusertime: 120.03\\\\ndeterministic_time: 161.437\\\\ngap_integral: 0\\\\n\\"\\n}\\n", "experiments/defect-n121-order1.json": "{\\n \\"length\\": 121,\\n \\"order\\": 1,\\n \\"status\\": \\"UNKNOWN\\",\\n \\"stats\\": \\"CpSolverResponse summary:\\\\nstatus: UNKNOWN\\\\nobjective: 0\\\\nbest_bound: 0\\\\nintegers: 709\\\\nbooleans: 213\\\\nconflicts: 40974\\\\nbranches: 103003\\\\npropagations: 169843\\\\ninteger_propagations: 2206924\\\\nrestarts: 180\\\\nlp_iterations: 0\\\\nwalltime: 90.127\\\\nusertime: 90.127\\\\ndeterministic_time: 111.859\\\\ngap_integral: 0\\\\n\\"\\n}\\n", "experiments/defect121.log": "{\\"length\\": 121, \\"order\\": 1, \\"status\\": \\"UNKNOWN\\", \\"stats\\": \\"CpSolverResponse summary:\\\\nstatus: UNKNOWN\\\\nobjective: 0\\\\nbest_bound: 0\\\\nintegers: 709\\\\nbooleans: 213\\\\nconflicts: 40974\\\\nbranches: 103003\\\\npropagations: 169843\\\\ninteger_propagations: 2206924\\\\nrestarts: 180\\\\nlp_iterations: 0\\\\nwalltime: 90.127\\\\nusertime: 90.127\\\\ndeterministic_time: 111.859\\\\ngap_integral: 0\\\\n\\"}\\n", "experiments/defect15.log": "{\\"length\\": 120, \\"order\\": 15, \\"status\\": \\"INFEASIBLE\\", \\"stats\\": \\"CpSolverResponse summary:\\\\nstatus: INFEASIBLE\\\\nobjective: NA\\\\nbest_bound: NA\\\\nintegers: 0\\\\nbooleans: 0\\\\nconflicts: 0\\\\nbranches: 0\\\\npropagations: 0\\\\ninteger_propagations: 0\\\\nrestarts: 0\\\\nlp_iterations: 0\\\\nwalltime: 0.0708911\\\\nusertime: 0.0708912\\\\ndeterministic_time: 0.000578599\\\\ngap_integral: 0\\\\n\\"}\\n", "experiments/defect3.log": "{\\"length\\": 120, \\"order\\": 3, \\"status\\": \\"UNKNOWN\\", \\"stats\\": \\"CpSolverResponse summary:\\\\nstatus: UNKNOWN\\\\nobjective: 0\\\\nbest_bound: 0\\\\nintegers: 215\\\\nbooleans: 498\\\\nconflicts: 66922\\\\nbranches: 204361\\\\npropagations: 1137232\\\\ninteger_propagations: 6775822\\\\nrestarts: 209\\\\nlp_iterations: 804469\\\\nwalltime: 180.052\\\\nusertime: 180.052\\\\ndeterministic_time: 516.899\\\\ngap_integral: 0\\\\n\\"}\\n", "experiments/defect5.log": "{\\"length\\": 120, \\"order\\": 5, \\"status\\": \\"UNKNOWN\\", \\"stats\\": \\"CpSolverResponse summary:\\\\nstatus: UNKNOWN\\\\nobjective: 0\\\\nbest_bound: 0\\\\nintegers: 107\\\\nbooleans: 186\\\\nconflicts: 443059\\\\nbranches: 652048\\\\npropagations: 2609463\\\\ninteger_propagations: 13458038\\\\nrestarts: 602\\\\nlp_iterations: 326\\\\nwalltime: 120.03\\\\nusertime: 120.03\\\\ndeterministic_time: 161.437\\\\ngap_integral: 0\\\\n\\"}\\n", "experiments/defect_search.py": "\\"\\"\\"Find necessary 16-divisible defect multisets for the 120/121 targets.\\"\\"\\"\\nimport argparse\\nimport json\\nfrom pathlib import Path\\nfrom ortools.sat.python import cp_model\\nfrom orbit_search import multiply\\n\\np = argparse.ArgumentParser()\\np.add_argument(\'--order\', type=int, default=5)\\np.add_argument(\'--length\', type=int, default=120)\\np.add_argument(\'--seconds\', type=int, default=120)\\na = p.parse_args()\\ng = 1\\nfor _ in range(255//a.order):\\n g = multiply(g, 2)\\nseen, orbits = set(), []\\nfor x in range(1, 256):\\n if x in seen:\\n continue\\n o, y = [], x\\n while y not in seen:\\n seen.add(y);o.append(y);y=multiply(g, y)\\n orbits.append(o)\\nmodel = cp_model.CpModel()\\nvariables = [model.new_int_var(0,15,f\'t{i}\') for i in range(len(orbits))]\\ntotal = 3825 - 31*a.length\\nmodel.add(sum(len(o)*x for o,x in zip(orbits,variables)) == total)\\nweights = []\\nfor v in range(1,256):\\n row = [sum((v&x).bit_count()%2 for x in o) for o in orbits]\\n w = model.new_int_var(0,4 if a.length==120 else 3,f\'w{v}\')\\n model.add(sum(b*x for b,x in zip(row,variables)) == 16*w)\\n weights.append(w)\\n# Multiplication by a primitive element acts transitively on point orbits.\\nfor x in variables[1:]:\\n model.add(variables[0]>=x)\\nsolver = cp_model.CpSolver()\\nsolver.parameters.max_time_in_seconds=a.seconds\\nsolver.parameters.num_search_workers=8\\nstatus=solver.solve(model)\\nresult={\'length\':a.length,\'order\':a.order,\'status\':solver.status_name(status),\'stats\':solver.response_stats()}\\nif status in (cp_model.OPTIMAL,cp_model.FEASIBLE):\\n t=[0]*256\\n for o,x in zip(orbits,variables):\\n for v in o:t[v]=solver.value(x)\\n result[\'defect\']=t\\n result[\'multiplicities\']=[0]+[solver.value(w)+(a.length-120) for w in weights]\\nprint(json.dumps(result),flush=True)\\nPath(f\'defect-n{a.length}-order{a.order}.json\').write_text(json.dumps(result,indent=2)+\'\\\\n\')\\n", "experiments/divisible-r5-n77-cap11.json": "{\\n \\"rank\\": 5,\\n \\"total\\": 77,\\n \\"cap\\": 11,\\n \\"seconds\\": 30,\\n \\"status\\": \\"UNKNOWN\\",\\n \\"stats\\": \\"CpSolverResponse summary:\\\\nstatus: UNKNOWN\\\\nobjective: 0\\\\nbest_bound: 0\\\\nintegers: 62\\\\nbooleans: 283\\\\nconflicts: 118547\\\\nbranches: 237896\\\\npropagations: 2785566\\\\ninteger_propagations: 3616991\\\\nrestarts: 419\\\\nlp_iterations: 0\\\\nwalltime: 30.0215\\\\nusertime: 30.0215\\\\ndeterministic_time: 28.7654\\\\ngap_integral: 0\\\\n\\"\\n}\\n", "experiments/divisible-r6-n77-cap11.json": "{\\n \\"rank\\": 6,\\n \\"total\\": 77,\\n \\"cap\\": 11,\\n \\"seconds\\": 30,\\n \\"status\\": \\"UNKNOWN\\",\\n \\"stats\\": \\"CpSolverResponse summary:\\\\nstatus: UNKNOWN\\\\nobjective: 0\\\\nbest_bound: 0\\\\nintegers: 126\\\\nbooleans: 502\\\\nconflicts: 53549\\\\nbranches: 440585\\\\npropagations: 3542531\\\\ninteger_propagations: 5936367\\\\nrestarts: 4717\\\\nlp_iterations: 0\\\\nwalltime: 30.1264\\\\nusertime: 30.1264\\\\ndeterministic_time: 22.3003\\\\ngap_integral: 0\\\\n\\"\\n}\\n", "experiments/divisible77-r5.log": "{\\"rank\\": 5, \\"total\\": 77, \\"cap\\": 11, \\"seconds\\": 30, \\"status\\": \\"UNKNOWN\\", \\"stats\\": \\"CpSolverResponse summary:\\\\nstatus: UNKNOWN\\\\nobjective: 0\\\\nbest_bound: 0\\\\nintegers: 62\\\\nbooleans: 283\\\\nconflicts: 118547\\\\nbranches: 237896\\\\npropagations: 2785566\\\\ninteger_propagations: 3616991\\\\nrestarts: 419\\\\nlp_iterations: 0\\\\nwalltime: 30.0215\\\\nusertime: 30.0215\\\\ndeterministic_time: 28.7654\\\\ngap_integral: 0\\\\n\\"}\\n", "experiments/divisible77-r6.log": "{\\"rank\\": 6, \\"total\\": 77, \\"cap\\": 11, \\"seconds\\": 30, \\"status\\": \\"UNKNOWN\\", \\"stats\\": \\"CpSolverResponse summary:\\\\nstatus: UNKNOWN\\\\nobjective: 0\\\\nbest_bound: 0\\\\nintegers: 126\\\\nbooleans: 502\\\\nconflicts: 53549\\\\nbranches: 440585\\\\npropagations: 3542531\\\\ninteger_propagations: 5936367\\\\nrestarts: 4717\\\\nlp_iterations: 0\\\\nwalltime: 30.1264\\\\nusertime: 30.1264\\\\ndeterministic_time: 22.3003\\\\ngap_integral: 0\\\\n\\"}\\n", "experiments/divisible_search.py": "\\"\\"\\"Unrestricted small divisible-multiset feasibility model (not a proof certificate).\\"\\"\\"\\nimport argparse\\nimport json\\nfrom pathlib import Path\\nfrom ortools.sat.python import cp_model\\n\\np=argparse.ArgumentParser()\\np.add_argument(\'--rank\',type=int,default=5)\\np.add_argument(\'--total\',type=int,default=77)\\np.add_argument(\'--cap\',type=int,default=11)\\np.add_argument(\'--seconds\',type=int,default=30)\\na=p.parse_args()\\nm=cp_model.CpModel()\\nv=[None]+[m.new_int_var(0,a.cap,f\'x{i}\') for i in range(1,1<=x)\\ns=cp_model.CpSolver();s.parameters.num_search_workers=8;s.parameters.max_time_in_seconds=a.seconds\\nstatus=s.solve(m)\\nresult=vars(a)|{\'status\':s.status_name(status),\'stats\':s.response_stats()}\\nif status in [cp_model.OPTIMAL,cp_model.FEASIBLE]:result[\'multiplicities\']=[0]+[s.value(x)for x in v[1:]]\\nprint(json.dumps(result),flush=True)\\nPath(f\'divisible-r{a.rank}-n{a.total}-cap{a.cap}.json\').write_text(json.dumps(result,indent=2)+\'\\\\n\')\\n", "experiments/orbit_search.py": "\\"\\"\\"Search additive F8 codes via cyclic orbits of binary 3-spaces.\\n\\nResearch prototype. Every successful output is checked separately.\\n\\"\\"\\"\\nimport argparse\\nimport collections\\nimport json\\nfrom pathlib import Path\\nimport time\\n\\nimport numpy as np\\nfrom ortools.sat.python import cp_model\\n\\n\\ndef multiply(a, b, r=8):\\n result = 0\\n while b:\\n if b & 1:\\n result ^= a\\n b >>= 1\\n a <<= 1\\n if a & (1 << r):\\n a ^= {8: 0x11D, 9: 0x211}[r]\\n return result\\n\\n\\ndef planes(r=8):\\n for a in range(1, 1 << r):\\n for b in range(a + 1, 1 << r):\\n if b > a ^ b:\\n continue\\n for c in range(b + 1, 1 << r):\\n if c < min(c ^ a, c ^ b, c ^ a ^ b):\\n yield tuple(sorted((a, b, a ^ b, c, c ^ a, c ^ b, c ^ a ^ b)))\\n\\n\\ndef make_orbits(order, r=8):\\n cardinality = 1 << r\\n assert (cardinality - 1) % order == 0\\n element = 1\\n for _ in range((cardinality - 1) // order):\\n element = multiply(element, 2, r)\\n permutation = [multiply(element, x, r) for x in range(cardinality)]\\n dual = [sum(((x & permutation[1 << i]).bit_count() % 2) << i for i in range(r))\\n for x in range(cardinality)]\\n hyperplanes, covered = [], set()\\n for x in range(1, cardinality):\\n if x in covered:\\n continue\\n hyperplanes.append(x)\\n current = x\\n while current not in covered:\\n covered.add(current)\\n current = dual[current]\\n visited = set()\\n orbits = []\\n for plane in planes(r):\\n if plane in visited:\\n continue\\n orbit, current = [], plane\\n while current not in visited:\\n visited.add(current)\\n orbit.append(current)\\n current = tuple(sorted(permutation[x] for x in current))\\n assert current == plane\\n orbits.append(orbit)\\n assert len(visited) == (cardinality-1)*(cardinality-2)*(cardinality-4)//168\\n parity = np.array([[((a & x).bit_count() & 1) == 0 for x in range(cardinality)]\\n for a in hyperplanes], dtype=np.uint8)\\n columns = []\\n for orbit in orbits:\\n points = np.array(orbit)\\n columns.append(np.all(parity[:, points], axis=2).sum(axis=1))\\n matrix = np.array(columns, dtype=np.int16).T\\n matrix = np.unique(matrix, axis=0)\\n # Interchangeable orbits have identical hyperplane incidence and size.\\n sizes = np.array([len(o) for o in orbits], dtype=np.int16)\\n _, indices = np.unique(np.vstack((matrix, sizes)), axis=1, return_index=True)\\n return matrix[:, indices], sizes[indices], [orbits[i] for i in indices]\\n\\n\\ndef main():\\n parser = argparse.ArgumentParser()\\n parser.add_argument(\'--order\', type=int, default=15)\\n parser.add_argument(\'--rank\', type=int, default=8, choices=[8, 9])\\n parser.add_argument(\'--length\', type=int, default=120)\\n parser.add_argument(\'--slack\', type=int, default=15)\\n parser.add_argument(\'--seconds\', type=float, default=120)\\n args = parser.parse_args()\\n start = time.monotonic()\\n matrix, sizes, orbits = make_orbits(args.order, args.rank)\\n print(\'Prepared\', matrix.shape, \'orbit sizes\', dict(collections.Counter(sizes.tolist())),\\n \'seconds\', time.monotonic()-start, flush=True)\\n model = cp_model.CpModel()\\n variables = [model.new_int_var(0, min(args.length // int(size),\\n args.slack // int(matrix[:, i].max())), f\'x{i}\')\\n for i, size in enumerate(sizes)]\\n model.add(sum(int(s)*x for s, x in zip(sizes, variables)) == args.length)\\n for row in matrix:\\n model.add(sum(int(a)*x for a, x in zip(row, variables) if a) <= args.slack)\\n solver = cp_model.CpSolver()\\n solver.parameters.max_time_in_seconds = args.seconds\\n solver.parameters.num_search_workers = 8\\n status = solver.solve(model)\\n print(solver.response_stats(), flush=True)\\n result = {\'order\': args.order, \'rank\': args.rank, \'length\': args.length, \'slack\': args.slack,\\n \'status\': solver.status_name(status), \'solver_stats\': solver.response_stats()}\\n if status in (cp_model.FEASIBLE, cp_model.OPTIMAL):\\n selected = [plane for x, orbit in zip(variables, orbits)\\n for _ in range(solver.value(x)) for plane in orbit]\\n result[\'planes\'] = selected\\n assert len(selected) == args.length\\n counts = [sum(all((a & p).bit_count() % 2 == 0 for p in plane) for plane in selected)\\n for a in range(1, 1 << args.rank)]\\n assert max(counts) <= args.slack\\n result[\'weight_distribution\'] = dict(sorted(collections.Counter(args.length-c for c in counts).items()))\\n print(\'WITNESS\', result[\'weight_distribution\'], flush=True)\\n Path(f\'r{args.rank}-order{args.order}-n{args.length}-s{args.slack}.json\').write_text(json.dumps(result, indent=2)+\'\\\\n\')\\n\\n\\nif __name__ == \'__main__\':\\n main()\\n", "experiments/order15-n120-s15.json": "{\\n \\"order\\": 15,\\n \\"length\\": 120,\\n \\"slack\\": 15,\\n \\"status\\": \\"INFEASIBLE\\",\\n \\"solver_stats\\": \\"CpSolverResponse summary:\\\\nstatus: INFEASIBLE\\\\nobjective: NA\\\\nbest_bound: NA\\\\nintegers: 7695\\\\nbooleans: 2380\\\\nconflicts: 0\\\\nbranches: 1898\\\\npropagations: 1061931\\\\ninteger_propagations: 7245962\\\\nrestarts: 0\\\\nlp_iterations: 19\\\\nwalltime: 10.3838\\\\nusertime: 10.3838\\\\ndeterministic_time: 17.2574\\\\ngap_integral: 0\\\\n\\"\\n}\\n", "experiments/order3-n120-s15.json": "{\\n \\"order\\": 3,\\n \\"length\\": 120,\\n \\"slack\\": 15,\\n \\"status\\": \\"UNKNOWN\\",\\n \\"solver_stats\\": \\"CpSolverResponse summary:\\\\nstatus: UNKNOWN\\\\nobjective: 0\\\\nbest_bound: 0\\\\nintegers: 45200\\\\nbooleans: 32430\\\\nconflicts: 2069\\\\nbranches: 1410491\\\\npropagations: 26753\\\\ninteger_propagations: 17234037\\\\nrestarts: 19\\\\nlp_iterations: 0\\\\nwalltime: 120.329\\\\nusertime: 120.329\\\\ndeterministic_time: 149.035\\\\ngap_integral: 0\\\\n\\"\\n}\\n", "experiments/order5-n120-s15.json": "{\\n \\"order\\": 5,\\n \\"length\\": 120,\\n \\"slack\\": 15,\\n \\"status\\": \\"UNKNOWN\\",\\n \\"solver_stats\\": \\"CpSolverResponse summary:\\\\nstatus: UNKNOWN\\\\nobjective: 0\\\\nbest_bound: 0\\\\nintegers: 26671\\\\nbooleans: 19429\\\\nconflicts: 4039\\\\nbranches: 2825258\\\\npropagations: 527382\\\\ninteger_propagations: 25681404\\\\nrestarts: 4\\\\nlp_iterations: 0\\\\nwalltime: 123.179\\\\nusertime: 123.179\\\\ndeterministic_time: 276.297\\\\ngap_integral: 0\\\\n\\"\\n}\\n", "experiments/r9-order7-n35-s5.json": "{\\n \\"order\\": 7,\\n \\"rank\\": 9,\\n \\"length\\": 35,\\n \\"slack\\": 5,\\n \\"status\\": \\"UNKNOWN\\",\\n \\"solver_stats\\": \\"CpSolverResponse summary:\\\\nstatus: UNKNOWN\\\\nobjective: 0\\\\nbest_bound: 0\\\\nintegers: 122188\\\\nbooleans: 98225\\\\nconflicts: 0\\\\nbranches: 226298\\\\npropagations: 12735690\\\\ninteger_propagations: 17654604\\\\nrestarts: 0\\\\nlp_iterations: 1171\\\\nwalltime: 189.543\\\\nusertime: 189.543\\\\ndeterministic_time: 90.4746\\\\ngap_integral: 0\\\\n\\"\\n}\\n", "experiments/search15.log": "Prepared (17, 6477) orbit sizes {15: 6477} seconds 0.8332414110009267\\nCpSolverResponse summary:\\nstatus: INFEASIBLE\\nobjective: NA\\nbest_bound: NA\\nintegers: 7695\\nbooleans: 2380\\nconflicts: 0\\nbranches: 1898\\npropagations: 1061931\\ninteger_propagations: 7245962\\nrestarts: 0\\nlp_iterations: 19\\nwalltime: 10.3838\\nusertime: 10.3838\\ndeterministic_time: 17.2574\\ngap_integral: 0\\n\\n", "experiments/search3.log": "Prepared (85, 32385) orbit sizes {3: 32385} seconds 2.922944939997251\\nCpSolverResponse summary:\\nstatus: UNKNOWN\\nobjective: 0\\nbest_bound: 0\\nintegers: 45200\\nbooleans: 32430\\nconflicts: 2069\\nbranches: 1410491\\npropagations: 26753\\ninteger_propagations: 17234037\\nrestarts: 19\\nlp_iterations: 0\\nwalltime: 120.329\\nusertime: 120.329\\ndeterministic_time: 149.035\\ngap_integral: 0\\n\\n", "experiments/search5.log": "Prepared (51, 19431) orbit sizes {5: 19431} seconds 1.4499004780009273\\nCpSolverResponse summary:\\nstatus: UNKNOWN\\nobjective: 0\\nbest_bound: 0\\nintegers: 26671\\nbooleans: 19429\\nconflicts: 4039\\nbranches: 2825258\\npropagations: 527382\\ninteger_propagations: 25681404\\nrestarts: 4\\nlp_iterations: 0\\nwalltime: 123.179\\nusertime: 123.179\\ndeterministic_time: 276.297\\ngap_integral: 0\\n\\n", "experiments/search9-35.log": "Prepared (73, 110011) orbit sizes {1: 73, 7: 109938} seconds 24.521302699002263\\nCpSolverResponse summary:\\nstatus: UNKNOWN\\nobjective: 0\\nbest_bound: 0\\nintegers: 122188\\nbooleans: 98225\\nconflicts: 0\\nbranches: 226298\\npropagations: 12735690\\ninteger_propagations: 17654604\\nrestarts: 0\\nlp_iterations: 1171\\nwalltime: 189.543\\nusertime: 189.543\\ndeterministic_time: 90.4746\\ngap_integral: 0\\n\\n", "MANIFEST.sha256": "8ccee4170373aec5fed59a50ecebbb130a467ef3fdced65e4c769d120e3768eb RESEARCH-NOTE.txt\\nae96613395dd2f095b09b787de4a100e200c75774a65ad78b76e04e801181258 baseline-119.json\\n3a2a3221f1541c29ac5f63afce9522907772ef31ea42f1c20949847c33acc74c baseline-87.json\\na9606e69550ef38a5be7402e9690351545cbd7c8514e1987b9b31b190803d813 experiments/defect-n120-order15.json\\n61f4efa9b4887a3f1cacd3965f597c60c35e5a743bbebc0b6dfb0c3bfc34e2b6 experiments/defect-n120-order3.json\\n3b13572affd516b8225e7059ad00f763ddf15a6b9b44a9ff705f2fbd69781307 experiments/defect-n120-order5.json\\n24dd8d7a448f2ad18769c6abf1c81a6de7cd5cbc22cd8157671ba7e42b8e2c55 experiments/defect-n121-order1.json\\ncf3992e5ad4933f389b76c69023d1b6f202319269fafce5f8708279e4372abd6 experiments/defect121.log\\ncc9097ef8612f6e3036e32756f2c37dab87e12dad2a62933cee0e753645ad2b1 experiments/defect15.log\\na4ae1805ee9ad19fb86e76d212a7961e09c9653d3b8842f2eb2efb58fc964a0b experiments/defect3.log\\n1674805ced9038cdea0b6d465237c9ca140d49910647b32528ac27391d4d8d6a experiments/defect5.log\\n8ec1ffe717d7f803d35bb4a447d9d63d92e6c7dd0cc9c932a32c835624364409 experiments/defect_search.py\\na8edc9ba203547293643ed31dc0a55ee32b04c6d12fcb611cf07d7771c3c7198 experiments/divisible-r5-n77-cap11.json\\n1a3f59b0ea3461077261f90b0a4d7280d9a75ea6b76881340f2ebdb2c99c4d3a experiments/divisible-r6-n77-cap11.json\\n4723b2b2dc180efa034a0b29910c6592308209e694d0e47eccee63cde6615552 experiments/divisible77-r5.log\\n1082270bb4c266f744d918896e915970917e02092966ebd3a2247939960b7d00 experiments/divisible77-r6.log\\nedd3d0c9ee11f1d2dfb19f1d0004c12870c8a142450fe7101ed1ab304009ffcd experiments/divisible_search.py\\ne7e193aba26122961cd30ad2e86fe0e1c1bc5415ef7109509cc1b2138eda8ce1 experiments/orbit_search.py\\nc35e3d5bc1c8c0a6cd217eccfb15e49c11ef442ffa2e00b050ebff6128ff697a experiments/order15-n120-s15.json\\nad317d5b114378e54ddb1fb5c8488daf54e6d8bea22275bb8f0dc531a28c067d experiments/order3-n120-s15.json\\n5bca858bfeb75a7904fc96aa968b304784a3a66da49a8f0e2c3e8a5ce9913336 experiments/order5-n120-s15.json\\n6a7cd451d14a078ccb4b86dfde6908af2116e82c1265b3a385da3dc835ab80b8 experiments/r9-order7-n35-s5.json\\ncac8e7936555d72bb94ec87ca54824a08798c077c1fbc34218393159d0ad4ea0 experiments/search15.log\\n0a9710944cfd16a9a0fc597cb1a3cfb4f3d9245164e03cff00e2f822fca4b916 experiments/search3.log\\n8ab03df72f54f63857c163ac5c7180f850901f3e38b0076d247532106a437dd7 experiments/search5.log\\n0d4e16b37eb51fff1abf5709db87f390583637d2149f6a8ef3ac512e73306625 experiments/search9-35.log\\n31cc8389b6207057c1f2db12c7685a9a62058b94dcb1388fa869c57c70d53c2f known-46.json\\nbfefafabd4e5731ec8e35e553998ec65fec554c72f816aa591e64e68b30e2d31 known-55.json\\n8b79543af4e18e220d561540de3464f462d80cf2d9aa00242c8795a04d0e6187 provenance.json\\n86ae15b6ae75f7089e877552ce216c556fe6bd8168cafb12d2d9954e14d70662 published-facts.json\\n0ed6271c99472bd9986be2b09c607276872a4586061f304b81788ec1a6d4539b repair_example.py\\n0639edce02fe19924faf6f4a47fecc800cc4ad1d2d309e96b32b6e93074659da repaired-46.json\\na6a2eaf413ce7fd2f70a8edc14a9c3ee8ac2d88ca90c7f14ac54c7d060624fd7 source-hashes.json\\nd6e85ac04f8cdbca8f81bad03185d1d8c00c200b34c84f4c881904d69f8971af verification-results.json\\nd6e85ac04f8cdbca8f81bad03185d1d8c00c200b34c84f4c881904d69f8971af verification.log\\ne4bbe5204dd19356b5c5eaf9a6ec10a511005f9e39ec006e72b0a2d81703e8cc verify.py\\n", "FOLLOWUP.txt": "C-15 FOLLOW-UP: THE LENGTH-88 QUESTION REDUCES TO AT MOST FOUR DEFECT CLASSES\\n3 November 2026. Research assisted by GPT-6 Astra for Christian Manahl.\\nPublic bound deduction: https://cairn-commons.com/claims/C-15\\n\\nThe numerical intervals remain 87--88 and 119--120. This follow-up does not\\nclose either interval. It narrows the length-88 search using the same external\\nclassification source as C-15: Koerner and Kurz, arXiv:2303.17172v2, Table 5.\\nWe have not independently regenerated that classification.\\n\\n1. A finite reduction\\n\\nA length-88 code with s=11 would give a 16-divisible binary defect multiset T\\nof length 255*11-31*88=77, rank at most 8, and multiplicity at most 11.\\nThe published counts of length-77 classes in ranks 5,6,7,8 are 2,5,8,6;\\nthere are none of smaller rank.\\n\\nWe explicitly construct 17 pairwise inequivalent classes of the form\\n\\n T = 1_(B minus {0}) + 2*1_(A minus {0}) + 16*1_{P},\\n\\nwhere dim B=5, dim A=4 and P is a nonzero point. Each summand is 16-divisible:\\na nonzero functional has weight 16 on B, weight 8 on A (then doubled),\\nand weight 0 or 16 on the final point. The length is 31+30+16=77.\\nAll these examples have maximum multiplicity at least 16 and so are forbidden\\nas defects of the proposed code.\\n\\nTake j=dim(A intersect B). Set B= and\\nA= for j=1,2,3,4.\\nUse one P in each nonempty category: A intersect B, A minus B, B minus A,\\n(A+B) minus (A union B), and outside A+B (the last only when total rank<=8).\\nWhen A is contained in B, only the intersection, B minus A and outside\\ncategories apply.\\n\\nclassify_standard77.py verifies every multiplicity sum, divisibility and\\nrank with exact integer arithmetic. It distinguishes all constructed classes\\nby the invariant consisting of rank, point-multiplicity histogram, and weight\\nenumerator. Consequently no canonical-labeling software or assumed orbit\\nclassification is needed to establish their pairwise inequivalence.\\n\\n rank 5 6 7 8\\n published total 2 5 8 6\\n explicit forbidden 2 5 5 5\\n classes left 0 0 3 1\\n\\nIt follows, conditional on the published counts, that ANY length-88 solution\\nmust have a defect from one of at most FOUR exceptional equivalence classes:\\nthree of rank 7 and one of rank 8. The phrase \'at most\' is essential: these\\nremaining classes may themselves violate the multiplicity cap or fail the\\nplane-decomposition test below. Their generator matrices have not yet been\\nretrieved or reconstructed. This is not a proof of existence.\\n\\n2. An exact test once a remaining representative is available\\n\\nEmbed T in F_2^8. For each nonzero v define m(v)=wt_T(v)/16.\\nFind a multiset of three-dimensional subspaces whose nonzero point coverage\\nis exactly m(v). This is an integer exact-cover problem over the 97,155\\nthree-dimensional subspaces of F_2^8. The number of planes is automatically\\nsum_v m(v)/7 = (128*77/16)/7 = 88.\\n\\nThis test is necessary AND sufficient for an eligible T (0<=T(x)<=11,\\nlength 77, 16-divisible). Necessity is C-15\'s incidence identity. For\\nsufficiency, given such a plane decomposition set T\'(x)=11-a_x, where a_x\\ncounts chosen planes annihilated by x. The same counting identity gives\\nwt_T\'(v)=16*m(v)=wt_T(v). The 255 by 255 binary incidence matrix K with\\nK[v,x]=1 iff v dot x=1 satisfies K^T K=64(I+J), because each diagonal entry\\nis 128 and each distinct-column entry is 64. It is invertible over Q.\\nThus T\'=T, so a_x<=11 and all nonzero messages have weight at least 77.\\nThe resulting code is injective since these weights are positive.\\n\\n3. Exploratory searches\\n\\nstrengthen.py searches a restricted two-weight subfamily in ranks 7 and 8,\\nwith nonzero weights 32 and 48, using OR-Tools CP-SAT and a 120-second limit.\\nThis restriction is exploratory, not proved to cover the four classes.\\nResults are stored in two-weight-r7.json and two-weight-r8.json.\\nUNKNOWN means timeout, not nonexistence. These solver searches play no role\\nin the finite reduction above.\\n\\n4. Publication and reproducibility\\n\\nC-15 is posted and awaits independent review. Its proof explicitly identifies\\nthe external classification input. The 46-symbol certificate repair is in\\nthe supporting research package; it was not posted as a separate claim,\\nbecause Cairn requests two further reviews before another claim.\\n\\nUse the plain-text Cairn-C15-reproduce.py attachment. The earlier ZIP upload\\nwas handled as text by the site, so should not be used as a binary archive.\\nRun Python 3.10+ on the .py file to extract its embedded source into a temporary\\ndirectory and run the independent arithmetic/certificate checks plus the\\n17-class construction check. No network or third-party package is required\\nfor these checks. The exploratory solver script requires OR-Tools separately.\\n\\nThe checks do NOT independently certify the external classification counts.\\n", "classify_standard77.py": "\\"\\"\\"Explicitly distinguish 17 standard length-77 divisible-code classes in ranks <=8.\\n\\nCompleteness of the external classification is an input, not proved here.\\nAll invariant checks and construction checks use only Python integers.\\n\\"\\"\\"\\nfrom collections import Counter\\nimport json\\nfrom pathlib import Path\\n\\n\\ndef span(basis):\\n result = {0}\\n for v in basis:\\n result |= {x ^ v for x in tuple(result)}\\n return result\\n\\n\\ndef rank(vectors):\\n basis = {}\\n for v in vectors:\\n while v:\\n i = v.bit_length() - 1\\n if i in basis:\\n v ^= basis[i]\\n else:\\n basis[i] = v\\n break\\n return len(basis)\\n\\n\\nrecords = []\\n# B has dimension 5, A dimension 4; their intersection has dimension j.\\nfor j in range(1, 5):\\n A = span([1 << i for i in range(j)] + [1 << i for i in range(5, 9-j)]) - {0}\\n B = set(range(1, 32))\\n ambient = 9-j\\n classes = {\'intersection\': 1, \'B_only\': 1 << j}\\n if j < 4:\\n classes |= {\'A_only\': 32, \'mixed\': 32 ^ (1 << j)}\\n if ambient < 8:\\n classes[\'outside_sum\'] = 1 << ambient\\n for position, P in classes.items():\\n T = Counter({x: 1 for x in B})\\n T.update({x: 2 for x in A})\\n T[P] += 16\\n k = rank(T)\\n assert k <= 8 and sum(T.values()) == 77\\n weights = Counter(sum(t for x, t in T.items() if (x & v).bit_count()%2)\\n for v in range(1 << k))\\n assert all(w % 16 == 0 for w in weights)\\n hist = tuple(sorted(Counter(T.values()).items()))\\n invariant = (k, hist, tuple(sorted(weights.items())))\\n records.append({\'j\': j, \'position\': position, \'rank\': k,\\n \'maximum_multiplicity\': max(T.values()),\\n \'multiplicity_histogram\': hist,\\n \'weight_enumerator\': sorted(weights.items()),\\n \'invariant\': invariant})\\n\\nassert len({str(r[\'invariant\']) for r in records}) == len(records)\\ncounts = dict(sorted(Counter(r[\'rank\'] for r in records).items()))\\nassert counts == {5: 2, 6: 5, 7: 5, 8: 5}\\npublished = {5: 2, 6: 5, 7: 8, 8: 6}\\nresult = {\'constructed_counts\': counts, \'published_counts_external_input\': published,\\n \'remaining_class_counts\': {k: published[k]-counts.get(k,0) for k in published},\\n \'records\': records}\\nPath(\'standard77-classes.json\').write_text(json.dumps(result, indent=2)+\'\\\\n\')\\nprint(counts)\\nprint(result[\'remaining_class_counts\'])\\n", "standard77-classes.json": "{\\n \\"constructed_counts\\": {\\n \\"5\\": 2,\\n \\"6\\": 5,\\n \\"7\\": 5,\\n \\"8\\": 5\\n },\\n \\"published_counts_external_input\\": {\\n \\"5\\": 2,\\n \\"6\\": 5,\\n \\"7\\": 8,\\n \\"8\\": 6\\n },\\n \\"remaining_class_counts\\": {\\n \\"5\\": 0,\\n \\"6\\": 0,\\n \\"7\\": 3,\\n \\"8\\": 1\\n },\\n \\"records\\": [\\n {\\n \\"j\\": 1,\\n \\"position\\": \\"intersection\\",\\n \\"rank\\": 8,\\n \\"maximum_multiplicity\\": 19,\\n \\"multiplicity_histogram\\": [\\n [\\n 1,\\n 30\\n ],\\n [\\n 2,\\n 14\\n ],\\n [\\n 19,\\n 1\\n ]\\n ],\\n \\"weight_enumerator\\": [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 22\\n ],\\n [\\n 32,\\n 105\\n ],\\n [\\n 48,\\n 128\\n ]\\n ],\\n \\"invariant\\": [\\n 8,\\n [\\n [\\n 1,\\n 30\\n ],\\n [\\n 2,\\n 14\\n ],\\n [\\n 19,\\n 1\\n ]\\n ],\\n [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 22\\n ],\\n [\\n 32,\\n 105\\n ],\\n [\\n 48,\\n 128\\n ]\\n ]\\n ]\\n },\\n {\\n \\"j\\": 1,\\n \\"position\\": \\"B_only\\",\\n \\"rank\\": 8,\\n \\"maximum_multiplicity\\": 17,\\n \\"multiplicity_histogram\\": [\\n [\\n 1,\\n 29\\n ],\\n [\\n 2,\\n 14\\n ],\\n [\\n 3,\\n 1\\n ],\\n [\\n 17,\\n 1\\n ]\\n ],\\n \\"weight_enumerator\\": [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 14\\n ],\\n [\\n 32,\\n 121\\n ],\\n [\\n 48,\\n 120\\n ]\\n ],\\n \\"invariant\\": [\\n 8,\\n [\\n [\\n 1,\\n 29\\n ],\\n [\\n 2,\\n 14\\n ],\\n [\\n 3,\\n 1\\n ],\\n [\\n 17,\\n 1\\n ]\\n ],\\n [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 14\\n ],\\n [\\n 32,\\n 121\\n ],\\n [\\n 48,\\n 120\\n ]\\n ]\\n ]\\n },\\n {\\n \\"j\\": 1,\\n \\"position\\": \\"A_only\\",\\n \\"rank\\": 8,\\n \\"maximum_multiplicity\\": 18,\\n \\"multiplicity_histogram\\": [\\n [\\n 1,\\n 30\\n ],\\n [\\n 2,\\n 13\\n ],\\n [\\n 3,\\n 1\\n ],\\n [\\n 18,\\n 1\\n ]\\n ],\\n \\"weight_enumerator\\": [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 18\\n ],\\n [\\n 32,\\n 113\\n ],\\n [\\n 48,\\n 124\\n ]\\n ],\\n \\"invariant\\": [\\n 8,\\n [\\n [\\n 1,\\n 30\\n ],\\n [\\n 2,\\n 13\\n ],\\n [\\n 3,\\n 1\\n ],\\n [\\n 18,\\n 1\\n ]\\n ],\\n [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 18\\n ],\\n [\\n 32,\\n 113\\n ],\\n [\\n 48,\\n 124\\n ]\\n ]\\n ]\\n },\\n {\\n \\"j\\": 1,\\n \\"position\\": \\"mixed\\",\\n \\"rank\\": 8,\\n \\"maximum_multiplicity\\": 16,\\n \\"multiplicity_histogram\\": [\\n [\\n 1,\\n 30\\n ],\\n [\\n 2,\\n 14\\n ],\\n [\\n 3,\\n 1\\n ],\\n [\\n 16,\\n 1\\n ]\\n ],\\n \\"weight_enumerator\\": [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 10\\n ],\\n [\\n 32,\\n 129\\n ],\\n [\\n 48,\\n 116\\n ]\\n ],\\n \\"invariant\\": [\\n 8,\\n [\\n [\\n 1,\\n 30\\n ],\\n [\\n 2,\\n 14\\n ],\\n [\\n 3,\\n 1\\n ],\\n [\\n 16,\\n 1\\n ]\\n ],\\n [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 10\\n ],\\n [\\n 32,\\n 129\\n ],\\n [\\n 48,\\n 116\\n ]\\n ]\\n ]\\n },\\n {\\n \\"j\\": 2,\\n \\"position\\": \\"intersection\\",\\n \\"rank\\": 7,\\n \\"maximum_multiplicity\\": 19,\\n \\"multiplicity_histogram\\": [\\n [\\n 1,\\n 28\\n ],\\n [\\n 2,\\n 12\\n ],\\n [\\n 3,\\n 2\\n ],\\n [\\n 19,\\n 1\\n ]\\n ],\\n \\"weight_enumerator\\": [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 10\\n ],\\n [\\n 32,\\n 53\\n ],\\n [\\n 48,\\n 64\\n ]\\n ],\\n \\"invariant\\": [\\n 7,\\n [\\n [\\n 1,\\n 28\\n ],\\n [\\n 2,\\n 12\\n ],\\n [\\n 3,\\n 2\\n ],\\n [\\n 19,\\n 1\\n ]\\n ],\\n [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 10\\n ],\\n [\\n 32,\\n 53\\n ],\\n [\\n 48,\\n 64\\n ]\\n ]\\n ]\\n },\\n {\\n \\"j\\": 2,\\n \\"position\\": \\"B_only\\",\\n \\"rank\\": 7,\\n \\"maximum_multiplicity\\": 17,\\n \\"multiplicity_histogram\\": [\\n [\\n 1,\\n 27\\n ],\\n [\\n 2,\\n 12\\n ],\\n [\\n 3,\\n 3\\n ],\\n [\\n 17,\\n 1\\n ]\\n ],\\n \\"weight_enumerator\\": [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 6\\n ],\\n [\\n 32,\\n 61\\n ],\\n [\\n 48,\\n 60\\n ]\\n ],\\n \\"invariant\\": [\\n 7,\\n [\\n [\\n 1,\\n 27\\n ],\\n [\\n 2,\\n 12\\n ],\\n [\\n 3,\\n 3\\n ],\\n [\\n 17,\\n 1\\n ]\\n ],\\n [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 6\\n ],\\n [\\n 32,\\n 61\\n ],\\n [\\n 48,\\n 60\\n ]\\n ]\\n ]\\n },\\n {\\n \\"j\\": 2,\\n \\"position\\": \\"A_only\\",\\n \\"rank\\": 7,\\n \\"maximum_multiplicity\\": 18,\\n \\"multiplicity_histogram\\": [\\n [\\n 1,\\n 28\\n ],\\n [\\n 2,\\n 11\\n ],\\n [\\n 3,\\n 3\\n ],\\n [\\n 18,\\n 1\\n ]\\n ],\\n \\"weight_enumerator\\": [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 8\\n ],\\n [\\n 32,\\n 57\\n ],\\n [\\n 48,\\n 62\\n ]\\n ],\\n \\"invariant\\": [\\n 7,\\n [\\n [\\n 1,\\n 28\\n ],\\n [\\n 2,\\n 11\\n ],\\n [\\n 3,\\n 3\\n ],\\n [\\n 18,\\n 1\\n ]\\n ],\\n [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 8\\n ],\\n [\\n 32,\\n 57\\n ],\\n [\\n 48,\\n 62\\n ]\\n ]\\n ]\\n },\\n {\\n \\"j\\": 2,\\n \\"position\\": \\"mixed\\",\\n \\"rank\\": 7,\\n \\"maximum_multiplicity\\": 16,\\n \\"multiplicity_histogram\\": [\\n [\\n 1,\\n 28\\n ],\\n [\\n 2,\\n 12\\n ],\\n [\\n 3,\\n 3\\n ],\\n [\\n 16,\\n 1\\n ]\\n ],\\n \\"weight_enumerator\\": [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 4\\n ],\\n [\\n 32,\\n 65\\n ],\\n [\\n 48,\\n 58\\n ]\\n ],\\n \\"invariant\\": [\\n 7,\\n [\\n [\\n 1,\\n 28\\n ],\\n [\\n 2,\\n 12\\n ],\\n [\\n 3,\\n 3\\n ],\\n [\\n 16,\\n 1\\n ]\\n ],\\n [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 4\\n ],\\n [\\n 32,\\n 65\\n ],\\n [\\n 48,\\n 58\\n ]\\n ]\\n ]\\n },\\n {\\n \\"j\\": 2,\\n \\"position\\": \\"outside_sum\\",\\n \\"rank\\": 8,\\n \\"maximum_multiplicity\\": 16,\\n \\"multiplicity_histogram\\": [\\n [\\n 1,\\n 28\\n ],\\n [\\n 2,\\n 12\\n ],\\n [\\n 3,\\n 3\\n ],\\n [\\n 16,\\n 1\\n ]\\n ],\\n \\"weight_enumerator\\": [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 11\\n ],\\n [\\n 32,\\n 127\\n ],\\n [\\n 48,\\n 117\\n ]\\n ],\\n \\"invariant\\": [\\n 8,\\n [\\n [\\n 1,\\n 28\\n ],\\n [\\n 2,\\n 12\\n ],\\n [\\n 3,\\n 3\\n ],\\n [\\n 16,\\n 1\\n ]\\n ],\\n [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 11\\n ],\\n [\\n 32,\\n 127\\n ],\\n [\\n 48,\\n 117\\n ]\\n ]\\n ]\\n },\\n {\\n \\"j\\": 3,\\n \\"position\\": \\"intersection\\",\\n \\"rank\\": 6,\\n \\"maximum_multiplicity\\": 19,\\n \\"multiplicity_histogram\\": [\\n [\\n 1,\\n 24\\n ],\\n [\\n 2,\\n 8\\n ],\\n [\\n 3,\\n 6\\n ],\\n [\\n 19,\\n 1\\n ]\\n ],\\n \\"weight_enumerator\\": [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 4\\n ],\\n [\\n 32,\\n 27\\n ],\\n [\\n 48,\\n 32\\n ]\\n ],\\n \\"invariant\\": [\\n 6,\\n [\\n [\\n 1,\\n 24\\n ],\\n [\\n 2,\\n 8\\n ],\\n [\\n 3,\\n 6\\n ],\\n [\\n 19,\\n 1\\n ]\\n ],\\n [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 4\\n ],\\n [\\n 32,\\n 27\\n ],\\n [\\n 48,\\n 32\\n ]\\n ]\\n ]\\n },\\n {\\n \\"j\\": 3,\\n \\"position\\": \\"B_only\\",\\n \\"rank\\": 6,\\n \\"maximum_multiplicity\\": 17,\\n \\"multiplicity_histogram\\": [\\n [\\n 1,\\n 23\\n ],\\n [\\n 2,\\n 8\\n ],\\n [\\n 3,\\n 7\\n ],\\n [\\n 17,\\n 1\\n ]\\n ],\\n \\"weight_enumerator\\": [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 2\\n ],\\n [\\n 32,\\n 31\\n ],\\n [\\n 48,\\n 30\\n ]\\n ],\\n \\"invariant\\": [\\n 6,\\n [\\n [\\n 1,\\n 23\\n ],\\n [\\n 2,\\n 8\\n ],\\n [\\n 3,\\n 7\\n ],\\n [\\n 17,\\n 1\\n ]\\n ],\\n [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 2\\n ],\\n [\\n 32,\\n 31\\n ],\\n [\\n 48,\\n 30\\n ]\\n ]\\n ]\\n },\\n {\\n \\"j\\": 3,\\n \\"position\\": \\"A_only\\",\\n \\"rank\\": 6,\\n \\"maximum_multiplicity\\": 18,\\n \\"multiplicity_histogram\\": [\\n [\\n 1,\\n 24\\n ],\\n [\\n 2,\\n 7\\n ],\\n [\\n 3,\\n 7\\n ],\\n [\\n 18,\\n 1\\n ]\\n ],\\n \\"weight_enumerator\\": [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 3\\n ],\\n [\\n 32,\\n 29\\n ],\\n [\\n 48,\\n 31\\n ]\\n ],\\n \\"invariant\\": [\\n 6,\\n [\\n [\\n 1,\\n 24\\n ],\\n [\\n 2,\\n 7\\n ],\\n [\\n 3,\\n 7\\n ],\\n [\\n 18,\\n 1\\n ]\\n ],\\n [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 3\\n ],\\n [\\n 32,\\n 29\\n ],\\n [\\n 48,\\n 31\\n ]\\n ]\\n ]\\n },\\n {\\n \\"j\\": 3,\\n \\"position\\": \\"mixed\\",\\n \\"rank\\": 6,\\n \\"maximum_multiplicity\\": 16,\\n \\"multiplicity_histogram\\": [\\n [\\n 1,\\n 24\\n ],\\n [\\n 2,\\n 8\\n ],\\n [\\n 3,\\n 7\\n ],\\n [\\n 16,\\n 1\\n ]\\n ],\\n \\"weight_enumerator\\": [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 1\\n ],\\n [\\n 32,\\n 33\\n ],\\n [\\n 48,\\n 29\\n ]\\n ],\\n \\"invariant\\": [\\n 6,\\n [\\n [\\n 1,\\n 24\\n ],\\n [\\n 2,\\n 8\\n ],\\n [\\n 3,\\n 7\\n ],\\n [\\n 16,\\n 1\\n ]\\n ],\\n [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 1\\n ],\\n [\\n 32,\\n 33\\n ],\\n [\\n 48,\\n 29\\n ]\\n ]\\n ]\\n },\\n {\\n \\"j\\": 3,\\n \\"position\\": \\"outside_sum\\",\\n \\"rank\\": 7,\\n \\"maximum_multiplicity\\": 16,\\n \\"multiplicity_histogram\\": [\\n [\\n 1,\\n 24\\n ],\\n [\\n 2,\\n 8\\n ],\\n [\\n 3,\\n 7\\n ],\\n [\\n 16,\\n 1\\n ]\\n ],\\n \\"weight_enumerator\\": [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 5\\n ],\\n [\\n 32,\\n 63\\n ],\\n [\\n 48,\\n 59\\n ]\\n ],\\n \\"invariant\\": [\\n 7,\\n [\\n [\\n 1,\\n 24\\n ],\\n [\\n 2,\\n 8\\n ],\\n [\\n 3,\\n 7\\n ],\\n [\\n 16,\\n 1\\n ]\\n ],\\n [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 5\\n ],\\n [\\n 32,\\n 63\\n ],\\n [\\n 48,\\n 59\\n ]\\n ]\\n ]\\n },\\n {\\n \\"j\\": 4,\\n \\"position\\": \\"intersection\\",\\n \\"rank\\": 5,\\n \\"maximum_multiplicity\\": 19,\\n \\"multiplicity_histogram\\": [\\n [\\n 1,\\n 16\\n ],\\n [\\n 3,\\n 14\\n ],\\n [\\n 19,\\n 1\\n ]\\n ],\\n \\"weight_enumerator\\": [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 1\\n ],\\n [\\n 32,\\n 14\\n ],\\n [\\n 48,\\n 16\\n ]\\n ],\\n \\"invariant\\": [\\n 5,\\n [\\n [\\n 1,\\n 16\\n ],\\n [\\n 3,\\n 14\\n ],\\n [\\n 19,\\n 1\\n ]\\n ],\\n [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 1\\n ],\\n [\\n 32,\\n 14\\n ],\\n [\\n 48,\\n 16\\n ]\\n ]\\n ]\\n },\\n {\\n \\"j\\": 4,\\n \\"position\\": \\"B_only\\",\\n \\"rank\\": 5,\\n \\"maximum_multiplicity\\": 17,\\n \\"multiplicity_histogram\\": [\\n [\\n 1,\\n 15\\n ],\\n [\\n 3,\\n 15\\n ],\\n [\\n 17,\\n 1\\n ]\\n ],\\n \\"weight_enumerator\\": [\\n [\\n 0,\\n 1\\n ],\\n [\\n 32,\\n 16\\n ],\\n [\\n 48,\\n 15\\n ]\\n ],\\n \\"invariant\\": [\\n 5,\\n [\\n [\\n 1,\\n 15\\n ],\\n [\\n 3,\\n 15\\n ],\\n [\\n 17,\\n 1\\n ]\\n ],\\n [\\n [\\n 0,\\n 1\\n ],\\n [\\n 32,\\n 16\\n ],\\n [\\n 48,\\n 15\\n ]\\n ]\\n ]\\n },\\n {\\n \\"j\\": 4,\\n \\"position\\": \\"outside_sum\\",\\n \\"rank\\": 6,\\n \\"maximum_multiplicity\\": 16,\\n \\"multiplicity_histogram\\": [\\n [\\n 1,\\n 16\\n ],\\n [\\n 3,\\n 15\\n ],\\n [\\n 16,\\n 1\\n ]\\n ],\\n \\"weight_enumerator\\": [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 2\\n ],\\n [\\n 32,\\n 31\\n ],\\n [\\n 48,\\n 30\\n ]\\n ],\\n \\"invariant\\": [\\n 6,\\n [\\n [\\n 1,\\n 16\\n ],\\n [\\n 3,\\n 15\\n ],\\n [\\n 16,\\n 1\\n ]\\n ],\\n [\\n [\\n 0,\\n 1\\n ],\\n [\\n 16,\\n 2\\n ],\\n [\\n 32,\\n 31\\n ],\\n [\\n 48,\\n 30\\n ]\\n ]\\n ]\\n }\\n ]\\n}\\n", "strengthen.py": "\\"\\"\\"Search two-weight defect multisets; no infeasibility proof is inferred from timeout.\\"\\"\\"\\nimport argparse\\nimport json\\nfrom pathlib import Path\\nfrom ortools.sat.python import cp_model\\n\\np = argparse.ArgumentParser()\\np.add_argument(\'--rank\', type=int, required=True)\\np.add_argument(\'--seconds\', type=int, default=120)\\na = p.parse_args()\\nn = 1 << a.rank\\nm = cp_model.CpModel()\\nt = [m.new_int_var(0, 11, f\'t{x}\') for x in range(n)]\\nm.add(t[0] == 0)\\nm.add(sum(t) == 77)\\nfor x in range(2, n):\\n m.add(t[x] <= t[1])\\nfor v in range(1, n):\\n high = m.new_bool_var(f\'h{v}\')\\n m.add(sum(t[x] for x in range(1, n) if (v & x).bit_count() % 2) == 32 + 16*high)\\nsquares = []\\nfor x in range(1, n):\\n q = m.new_int_var(0, 121, f\'q{x}\')\\n m.add_allowed_assignments([t[x], q], [(i, i*i) for i in range(12)])\\n squares.append(q)\\n# The first two binary-code moments force this square sum.\\nb = (77*(n//2) - 32*(n-1))//16\\nss = (1024*(n-1-b) + 2304*b)//(n//4) - 77**2\\nm.add(sum(squares) == ss)\\ns = cp_model.CpSolver()\\ns.parameters.num_search_workers = 4\\ns.parameters.max_time_in_seconds = a.seconds\\nstatus = s.solve(m)\\nr = vars(a) | {\'status\': s.status_name(status), \'square_sum\': ss, \'stats\': s.response_stats()}\\nif status in (cp_model.OPTIMAL, cp_model.FEASIBLE):\\n values = [s.value(x) for x in t]\\n assert sum(values) == 77 and max(values) <= 11\\n assert {sum(values[x] for x in range(n) if (x & v).bit_count()%2) for v in range(1,n)} <= {32,48}\\n r[\'multiplicities\'] = values\\nPath(f\'two-weight-r{a.rank}.json\').write_text(json.dumps(r, indent=2)+\'\\\\n\')\\nprint(json.dumps(r), flush=True)\\n", "two-weight-r7.json": "{\\n \\"rank\\": 7,\\n \\"seconds\\": 120,\\n \\"status\\": \\"UNKNOWN\\",\\n \\"square_sum\\": 295,\\n \\"stats\\": \\"CpSolverResponse summary:\\\\nstatus: UNKNOWN\\\\nobjective: 0\\\\nbest_bound: 0\\\\nintegers: 455\\\\nbooleans: 3931\\\\nconflicts: 13175\\\\nbranches: 245694\\\\npropagations: 13817219\\\\ninteger_propagations: 10163579\\\\nrestarts: 25\\\\nlp_iterations: 1517677\\\\nwalltime: 120.021\\\\nusertime: 120.021\\\\ndeterministic_time: 219.885\\\\ngap_integral: 0\\\\n\\"\\n}\\n", "two-weight-r8.json": "{\\n \\"rank\\": 8,\\n \\"seconds\\": 120,\\n \\"status\\": \\"UNKNOWN\\",\\n \\"square_sum\\": 271,\\n \\"stats\\": \\"CpSolverResponse summary:\\\\nstatus: UNKNOWN\\\\nobjective: 0\\\\nbest_bound: 0\\\\nintegers: 4028\\\\nbooleans: 7899\\\\nconflicts: 1360\\\\nbranches: 49233\\\\npropagations: 4503135\\\\ninteger_propagations: 5718422\\\\nrestarts: 7\\\\nlp_iterations: 85095\\\\nwalltime: 120.018\\\\nusertime: 120.018\\\\ndeterministic_time: 145.946\\\\ngap_integral: 0\\\\n\\"\\n}\\n", "reproduce-followup.log": "Replacement component 31: [146, 86, 50]\\n{\\n \\"codes\\": [\\n {\\n \\"length\\": 46,\\n \\"size\\": 256,\\n \\"distance\\": 40,\\n \\"weight_distribution\\": {\\n \\"0\\": 1,\\n \\"40\\": 229,\\n \\"44\\": 26\\n },\\n \\"pairs_checked\\": 32640\\n },\\n {\\n \\"length\\": 55,\\n \\"size\\": 256,\\n \\"distance\\": 48,\\n \\"weight_distribution\\": {\\n \\"0\\": 1,\\n \\"48\\": 235,\\n \\"52\\": 20\\n },\\n \\"pairs_checked\\": 32640\\n },\\n {\\n \\"length\\": 32,\\n \\"size\\": 256,\\n \\"distance\\": 28,\\n \\"weight_distribution\\": {\\n \\"0\\": 1,\\n \\"28\\": 248,\\n \\"32\\": 7\\n },\\n \\"pairs_checked\\": 32640\\n },\\n {\\n \\"length\\": 73,\\n \\"size\\": 256,\\n \\"distance\\": 64,\\n \\"weight_distribution\\": {\\n \\"0\\": 1,\\n \\"64\\": 255\\n },\\n \\"pairs_checked\\": 32640\\n },\\n {\\n \\"length\\": 87,\\n \\"size\\": 256,\\n \\"distance\\": 76,\\n \\"weight_distribution\\": {\\n \\"0\\": 1,\\n \\"76\\": 228,\\n \\"80\\": 27\\n },\\n \\"pairs_checked\\": 32640\\n },\\n {\\n \\"length\\": 119,\\n \\"size\\": 256,\\n \\"distance\\": 104,\\n \\"weight_distribution\\": {\\n \\"0\\": 1,\\n \\"104\\": 229,\\n \\"108\\": 26\\n },\\n \\"pairs_checked\\": 32640\\n }\\n ],\\n \\"defect_identity_checks\\": [\\n {\\n \\"length\\": 46,\\n \\"slack\\": 6,\\n \\"defect_length\\": 104,\\n \\"identities_checked\\": 255\\n },\\n {\\n \\"length\\": 55,\\n \\"slack\\": 7,\\n \\"defect_length\\": 80,\\n \\"identities_checked\\": 255\\n },\\n {\\n \\"length\\": 32,\\n \\"slack\\": 4,\\n \\"defect_length\\": 28,\\n \\"identities_checked\\": 255\\n }\\n ],\\n \\"printed_example_audit\\": {\\n \\"printed_minimum_distance\\": 39,\\n \\"claimed_minimum_distance\\": 40,\\n \\"counterexample_message_mask\\": 2,\\n \\"zero_symbol_positions\\": [\\n 22,\\n 23,\\n 29,\\n 31,\\n 36,\\n 41,\\n 43\\n ],\\n \\"changed_component_one_based\\": 31,\\n \\"replacement_basis_binary\\": [\\n \\"10010010\\",\\n \\"01010110\\",\\n \\"00110010\\"\\n ],\\n \\"original_weight_distribution\\": {\\n \\"0\\": 1,\\n \\"39\\": 25,\\n \\"40\\": 176,\\n \\"41\\": 28,\\n \\"43\\": 3,\\n \\"44\\": 23\\n }\\n },\\n \\"arithmetic_using_published_classification\\": [\\n {\\n \\"excluded_length\\": 89,\\n \\"slack\\": 11,\\n \\"defect_length\\": 46,\\n \\"required_multiplicity\\": 16,\\n \\"allowed_multiplicity\\": 11\\n },\\n {\\n \\"excluded_length\\": 121,\\n \\"slack\\": 15,\\n \\"defect_length\\": 74,\\n \\"required_multiplicity\\": 16,\\n \\"allowed_multiplicity\\": 15\\n }\\n ],\\n \\"limitation\\": \\"The published classification tables are inputs, not independently re-enumerated.\\"\\n}\\n{5: 2, 6: 5, 7: 5, 8: 5}\\n{5: 0, 6: 0, 7: 3, 8: 1}\\nPASS. Classification completeness remains an external assumption.\\n"}') def main(): if "--report" in sys.argv: print(FILES["RESEARCH-NOTE.txt"]) print(FILES["FOLLOWUP.txt"]) return with tempfile.TemporaryDirectory(prefix="cairn-c15-") as directory: root = Path(directory) for name, content in FILES.items(): target = root / name target.parent.mkdir(parents=True, exist_ok=True) target.write_text(content, encoding="utf-8") for script in ("repair_example.py", "verify.py", "classify_standard77.py"): subprocess.run([sys.executable, str(root / script)], cwd=root, check=True, timeout=120) print("PASS. Classification completeness remains an external assumption.") if __name__ == "__main__": main()