diff --git a/research/p104-fiber-tag-orientation-check/README.md b/research/p104-fiber-tag-orientation-check/README.md new file mode 100644 index 000000000..5ef6500df --- /dev/null +++ b/research/p104-fiber-tag-orientation-check/README.md @@ -0,0 +1,111 @@ +# #4154's P104 fiber-tag seam, checked in its sources' orientation + +**Claim type: an independent finite check with a correction. No new κ.** The +selected conditional κ stays `0.001672660197076918`. + +## Object + +[PR #4154](https://github.com/CrocSwap/integer-mult-bounds/pull/4154) +(unpaidmoon, merged, `research/p104-fiber-tag-seam`) compares #3966's row tag +`z ⊗ q_j` with its column tag `r_i ⊗ z` on the 104 P104 labels, and pins +#3954's witness. The `p104-side-correction` card lists it as still needing +independent validation. + +**The orientation question.** The sources fix which tag is which: + +- **#3966** (`p104-phase-uniform-gauge/PROOF.md` §4) defines the row + correction as `z ⊗ q_j` and the column correction as `r_i ⊗ z`, with + `q_j = O p_j` for the row label and `r_i = O p_i` for the column label. +- **#3954**'s witness lines are `386 ⊗ 386` (row port) and `405 ⊗ 386` + (donor port), decoded from its `RESULT.json`. Both lie in the row fiber + `q = 386`, so the pair is row 386, column 405, on the shared line + `r_i ⊗ q_j = 49 ⊗ 386`. + +#4154's README states that convention. Its code does not: `tags(row_image, +column_image)` returns `z ⊗ column_image` as the row tag and +`row_image ⊗ z` as the column tag. Those are the transposes. + +## Results + +**Confirmed: everything that does not depend on orientation.** + +| Claim | Result | +| --- | --- | +| Labels | `labels.json` equals `physical_labels` in #3966's source `RESULT.json` | +| Gauge | `O` is an orthogonal involution with the weight law, on all of `F₂⁹` | +| Label classes | 56 of class 1 and 48 of class 3; every image is class 3 | +| Full address | no agreement in any of the 10,816 ordered pairs | +| Shared line | 5,440 pairs agree and 5,376 disagree | +| Uniform tag `a` | never a row tag or a column tag | +| Minimum Hamming distance | 6, only at labels 4 and 32 | +| Witness Hamming distance | 20 | + +**Corrected: the witness and one census sentence.** These are in #3966's +orientation, at row 386 and column 405. + +| | #4154 | Source orientation | +| --- | --- | --- | +| Shared-line flips (row, column) | `(0, 1)` | `(1, 0)` | +| Does `a` match the row tag on the shared line? | no | **yes** | +| Separating cell | bit 11 = `(1, 2)` | bit 11 does not separate; bit 19 = `(2, 1)` does | +| Helper matches the row tag on the shared line exactly when | the column label is class 3 | **the row label** is class 3 | + +The count is `104 · 48` ordered pairs either way. + +- **The full-address obstruction stands.** `a` is never a row tag, so a + helper carrying `a` still fails to match a row owner on the full 81-bit + address. +- **The shared-line conclusion does not.** #4154 says that on the witness's + shared line "a helper carrying `a` does not match this row owner". In the + source orientation it does match there. That conclusion is the premise of + #4154's open question 2. + +**Control.** Evaluating #4154's transposed objects reproduces its numbers +exactly: flips `0/1`, the helper mismatch and bit 11. The census is +unchanged. The difference is therefore exactly the transpose. The verifier +also checks the line in #4154's code that builds the row tag from the column +image. + +**Provenance note.** #4154 says #3966's `RESULT.json` "is not a Git object on +this base". It is on main, as +`research/p104-phase-uniform-gauge/source/RESULT.json`, with the pinned SHA256 +`ce05a27e…`. + +## Method and independence + +The verifier imports nothing from #4154. It represents tensors as sets of +`(α, β)` cells rather than packed integers. It reads the labels from #3966's +file, not #4154's copy, and it reads the orientation from #3966's text and +#3954's witness vectors. + +## Not covered + +- Native routing, owners, dirty return, precision and the inherited + 44,096 excess, all of which #4154 also leaves open. +- Which orientation a future P104 caller should use. This package only + matches the sources' definitions. + +## Reproduce + +```sh +python3.12 -B research/p104-fiber-tag-orientation-check/verify.py +``` + +It prints `PASS_P104_FIBER_TAG_ORIENTATION_CHECK` in about 2 seconds, using +only the standard library. + +## Open next questions + +1. **Revisit #4154's open question 2 in the source orientation.** At the + witness, the uniform tag already agrees with the row tag on the shared + line. The remaining question is only full-address agreement, which `a` + can never give. + - *First step:* restate the question for the full address alone. + - *Blocked by:* nothing. + +## Credit + +The seam comparison is unpaidmoon's (#4154). The labels, the gauge and the +corrections are #3966's (ToikY); the witness is #3954's (Clear1nsight). +Prepared by Ryanson Jonathan with substantial Claude Code (Claude Opus 5.5) +assistance. Apache-2.0. diff --git a/research/p104-fiber-tag-orientation-check/SOURCES.json b/research/p104-fiber-tag-orientation-check/SOURCES.json new file mode 100644 index 000000000..6b24ef310 --- /dev/null +++ b/research/p104-fiber-tag-orientation-check/SOURCES.json @@ -0,0 +1,54 @@ +{ + "schema_version": 1, + "base_commit": "12fa8c5c844be21bfefb38a19503fbd867a11244", + "files": [ + { + "path": "certificates/selected-result.json", + "usage": "provenance", + "git_blob": "b1fea0c94436b236cc2b7d41a7be032811b94c81", + "sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "path": "docs/research/agent-task-catalog.json", + "usage": "provenance", + "git_blob": "64bfc5af6709ed9811171e0a2108f05e1219cb65", + "sha256": "352a6184713b8843d96fd2c2071eb7aeaa655906b7c51d45ad444912666c8a96" + }, + { + "path": "research/p104-fiber-tag-seam/README.md", + "usage": "input", + "git_blob": "149821201622a046742baa2df4563296cebe9800", + "sha256": "b0b493d9db3b7c99e8497a761678f11c0e331224d37bf8c9d56747517ff9c2a2" + }, + { + "path": "research/p104-fiber-tag-seam/verify.py", + "usage": "input", + "git_blob": "836a547850b9d8740c99bf0f9f9eaa73afcbf2a2", + "sha256": "81e24ecc7aad4a504efadddb5afe99b371ca93289d2502efee2621208497777a" + }, + { + "path": "research/p104-phase-uniform-gauge/PROOF.md", + "usage": "input", + "git_blob": "fd701d86feaead86d711fa8d25914c68ea70781c", + "sha256": "a0e72e6b48e75edf2948b455ebe59c7d912682204b34d916bfed804cea35c405" + }, + { + "path": "research/p104-phase-uniform-gauge/source/RESULT.json", + "usage": "input", + "git_blob": "c7ed0ea02e8c462694762508b0bdd1dde2e116d0", + "sha256": "ce05a27ebc98677bec4febaa488fa03f5b6fc60216aa43b34298444d12f7ab6c" + }, + { + "path": "research/p104-two-axis-compatibility/PROOF.md", + "usage": "input", + "git_blob": "1d84b2a1188eab6a5c38743cc1eed32d66446a3d", + "sha256": "bdc7d868e4411541a33179af683f48011e66d6446a45bef363f3f3dd5163f717" + }, + { + "path": "research/p104-two-axis-compatibility/RESULT.json", + "usage": "input", + "git_blob": "c7ed0ea02e8c462694762508b0bdd1dde2e116d0", + "sha256": "ce05a27ebc98677bec4febaa488fa03f5b6fc60216aa43b34298444d12f7ab6c" + } + ] +} diff --git a/research/p104-fiber-tag-orientation-check/TASK.json b/research/p104-fiber-tag-orientation-check/TASK.json new file mode 100644 index 000000000..4ca87bc9b --- /dev/null +++ b/research/p104-fiber-tag-orientation-check/TASK.json @@ -0,0 +1,133 @@ +{ + "schema_version": 1, + "task_id": "p104-side-correction", + "priority_revision": 7, + "base_commit": "12fa8c5c844be21bfefb38a19503fbd867a11244", + "original_card": { + "id": "p104-side-correction", + "question": "Can a changed P104 producer/consumer contract escape the scoped slot, chart and completion obstructions with a favorable full bill?", + "starting_points": [ + "docs/research/research-family-status.md", + "certificates/selected-result.json", + "research/p104-literal-slot-defect/README.md", + "research/p104-uniform-commutation-gap/README.md", + "research/p104-uniform-encoding-gap/README.md", + "research/p104-source-chart-shortcut/README.md", + "research/p104-fiber-tag-seam/README.md" + ], + "methods": [ + "Construct one side-correction word at an explicit chronological cut with the needed frames still available.", + "Derive a lower bound on the side correction and hosting costs that decides whether this channel can beat the selected budget." + ], + "acceptance_gate": "An exact arbitrary-input identity, source/target frame availability and restoration at the chosen cut, plus the complete channel+correction+idle/hosting bill or an explicit favorable bound. The native channel alone is not a supplier. A scoped local result may be retained without a complete supplier. Expanding it into further construction rounds requires the family-level budget and obligation gate in research-family-status.md; an optimistic passing relaxation alone is not acceptance.", + "first_step": { + "command": [ + "python3", + "-B", + "scripts/research_baseline.py" + ], + "expected": "PASS_RESEARCH_BASELINE_BINDINGS_ONLY", + "inspect": "Read the named successor obstructions before extending #2981 static flags. Distinguish literal-slot action, commutation, uniform encoding, source-chart shortcut and fiber-tag seam scopes; none excludes all P104 mechanisms.", + "scope": "Source-binding orientation only; no scientific replay, theorem acceptance or supplier admission. Budget any heavy replay separately." + }, + "first_experiment": "Name one hypothesis changed from these exact interfaces. Write a literal producer-to-consumer timeline and an arbitrary-dirty-input positive/control pair, then charge acquisition, coefficients, completion, hosting and restoration. Stop if the same slot/fiber mismatch persists or the favorable full budget already fails. A scoped independent audit remains useful; another static count is not a new completion.", + "bottleneck_link": "Completing an already realized changed channel tests a concrete construction opportunity, instead of refining the incumbent packing. A positive local result still needs global and all-size admission.", + "allowed_variations": [ + "One correction factorization, one chronological cut, or one explicit hosting obstruction.", + "A changed correction schedule with an updated full bill and native frame contract." + ], + "scope_change_triggers": [ + "Recompiling the already certified low-rank channel without closing a new obligation.", + "Treating a pending ancestor, local histogram or unpriced side correction as an admitted global supplier.", + "Repeating a correction or physical conversion already supplied by a pending follow-up without adding independent coverage or a different unresolved obligation.", + "Repeating the 208-flag static matching or calling a static nested cover a chronological correction program. Independent audit of that certificate is distinct and remains useful.", + "Repeating a static cover, source-chart shortcut or fiber-tag seam without changing the hypothesis responsible for its obstruction." + ], + "overlap_terms": [ + "P104", + "I-G/2", + "side correction", + "native channel", + "1972", + "1991", + "2586", + "endpoint transport", + "physical dual", + "relay composition", + "2981", + "joint unit flags", + "acquisition delivery", + "static nesting", + "4133", + "4136", + "4140", + "4153", + "4154", + "p104-literal-slot-defect", + "p104-uniform-commutation-gap", + "p104-uniform-encoding-gap", + "p104-source-chart-shortcut", + "p104-fiber-tag-seam" + ], + "existing_checks": [ + { + "scope": "PR #4133: literal-slot defect", + "evidence": "research/p104-literal-slot-defect/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "88666f1dee93fbd85b31fd5d6f91a219e111b5f4", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4136: uniform commutation gap", + "evidence": "research/p104-uniform-commutation-gap/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "281ce601a8be9db470de630759179c23e1dfaa88", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4140: uniform encoding gap", + "evidence": "research/p104-uniform-encoding-gap/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "de25c6525aa866962309df5d107b32d55e6e5628", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4153: source-chart shortcut exhausts its optimistic allowance", + "evidence": "research/p104-source-chart-shortcut/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "9123241fea53df77e51ffe30d9aca1625d4bf3a8", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4154: fiber-tag seam mismatch", + "evidence": "research/p104-fiber-tag-seam/README.md", + "remaining": "Independently validate the stated scope or change its producer/consumer premise and pay the complete boundary.", + "status": "author-checked", + "source_commit": "4ffcdaee5d6255a9cea1fe53a5424435068089d0", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + } + ] + }, + "scope_status": "refined", + "actual_scope": "Independently validate #4154's fiber-tag seam claims from #3966's labels and corrections and #3954's witness lines, in the sources' orientation.", + "scope_change_reason": "The card lists #4154 as needing independent validation of its stated scope; this does that and no new channel.", + "bottleneck_link": "#4154's helper-mismatch conclusion feeds the P104 side-correction channel; it must hold in the sources' convention before later work builds on it.", + "budget_minutes": 30, + "stop_rule": "Stop once every #4154 claim is confirmed or corrected in the source orientation.", + "outcome": "completed", + "evidence": "verify.py: labels equal #3966's source array; census 10,816 pairs, 0 full-address agreements, shared line 5,440/5,376, min Hamming 6 at labels 4 and 32, witness Hamming 20; in #3966's orientation the witness flips are (1,0), the uniform tag matches the row tag on the shared line, cell (2,1)=bit 19 separates; the helper match depends on the row label's class; the transposed control reproduces #4154's 0/1, helper mismatch and bit 11.", + "author": "Ryanson Jonathan, with Claude Code (Claude Opus 5.5) assistance", + "ai_assistance": "Substantial Claude Code (Claude Opus 5.5) assistance in reading, verifier implementation and writing; no independent human or proof-kernel review.", + "open_questions": [ + { + "question": "Restate #4154's open question 2 for the full address alone.", + "why_it_matters": "In the source orientation the uniform tag already agrees with the witness row tag on the shared line.", + "first_step": "Rewrite the question without the shared-line premise.", + "blocked_by": "None." + } + ] +} diff --git a/research/p104-fiber-tag-orientation-check/VERIFY.json b/research/p104-fiber-tag-orientation-check/VERIFY.json new file mode 100644 index 000000000..16b76ac01 --- /dev/null +++ b/research/p104-fiber-tag-orientation-check/VERIFY.json @@ -0,0 +1,25 @@ +{ + "schema_version": 1, + "status": "ready", + "python": "3.12", + "requirements": [], + "inputs": [ + "research/p104-fiber-tag-seam/README.md", + "research/p104-fiber-tag-seam/verify.py", + "research/p104-phase-uniform-gauge/PROOF.md", + "research/p104-phase-uniform-gauge/source/RESULT.json", + "research/p104-two-axis-compatibility/PROOF.md", + "research/p104-two-axis-compatibility/RESULT.json" + ], + "commands": [ + { + "argv": [ + "{python}", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 120, + "checks": "Pinned #3966 source RESULT.json and #4154 labels; #3966 correction text; #3954 witness lines decoded as 386(x)386 and 405(x)386; gauge facts on F2^9; orientation-free census; witness in source orientation; row-label helper rule; transposed control reproducing #4154's numbers; #4154 code line." + } + ] +} diff --git a/research/p104-fiber-tag-orientation-check/verify.py b/research/p104-fiber-tag-orientation-check/verify.py new file mode 100644 index 000000000..ccc1fc313 --- /dev/null +++ b/research/p104-fiber-tag-orientation-check/verify.py @@ -0,0 +1,163 @@ +#!/usr/bin/env python3 +"""Independent check of #4154's P104 fiber-tag seam, in the orientation of its sources. + +#3966 (PROOF.md section 4) defines the row correction z (x) q_j and the column correction r_i (x) z, +with q_j = O p_j for the row label and r_i = O p_i for the column label. #3954's witness lines are +386 (x) 386 (row port) and 405 (x) 386 (donor port), so its pair is row label 386, column label 405, +shared line r_i (x) q_j. Tensors here are sets of (alpha, beta) cells, not packed integers; no code +from #4154. Standard library only. +Ryanson Jonathan with Claude Code (Claude Opus 5.5) assistance. Apache-2.0. +""" +import hashlib +import json +from pathlib import Path +import sys + +ROOT = Path(__file__).resolve().parents[2] +GAUGE = ROOT / "research/p104-phase-uniform-gauge" +SEAM = ROOT / "research/p104-fiber-tag-seam" +TWO_AXIS = ROOT / "research/p104-two-axis-compatibility" +PINS = { + GAUGE / "source/RESULT.json": "ce05a27ebc98677bec4febaa488fa03f5b6fc60216aa43b34298444d12f7ab6c", + SEAM / "labels.json": "7227a7d6bdb49f36b6e401478034cc542eb887979890c8deda924b8ac0844209", +} +Z, ONES = 420, 511 + + +def need(condition, message): + if not condition: + raise AssertionError(message) + + +def bits(x): + return [(x >> k) & 1 for k in range(9)] + + +def dot(x, y): + return sum(a * b for a, b in zip(bits(x), bits(y))) % 2 + + +def gauge(x): + """O x = x + (x . z) z""" + return x ^ Z if dot(x, Z) else x + + +def cells(u, v): + """u (x) v as its set of nonzero cells (alpha, beta), with entry u_alpha v_beta""" + return frozenset((a, b) for a, ua in enumerate(bits(u)) for b, vb in enumerate(bits(v)) if ua and vb) + + +def add(*tensors): + out = set() + for t in tensors: + out ^= set(t) + return frozenset(out) + + +def pair(s, t): + return len(s & t) % 2 + + +def tags(row_label, col_label): + q, r = gauge(row_label), gauge(col_label) + return cells(Z, q), cells(r, Z), cells(r, q) # row tag, column tag, shared line + + +def census(labels, tag_fn): + out = dict(full_equal=0, agree=0, disagree=0, helper_row_match=0, min_ham=99, min_pairs=set()) + a = add(cells(Z, ONES), cells(ONES, Z)) + for j in labels: # row label + for i in labels: # column label + row, col, line = tag_fn(j, i) + need(pair(line, line) == 1, "shared line is nondegenerate") + need(a != row and a != col, "uniform tag is never a fiber tag") + out["full_equal"] += row == col + same = pair(row, line) == pair(col, line) + out["agree" if same else "disagree"] += 1 + out["helper_row_match"] += pair(a, line) == pair(row, line) + ham = len(row ^ col) + if ham < out["min_ham"]: + out["min_ham"], out["min_pairs"] = ham, set() + if ham == out["min_ham"]: + out["min_pairs"] |= {j, i} + return out + + +def main(): + for path, sha in PINS.items(): + need(hashlib.sha256(path.read_bytes()).hexdigest() == sha, f"pinned {path.name}") + labels = json.loads((GAUGE / "source/RESULT.json").read_text())["physical_labels"] + need(json.loads((SEAM / "labels.json").read_text()) == labels, "#4154's labels.json is #3966's source array") + need(len(set(labels)) == 104 and all(0 < x < 512 for x in labels), "104 distinct labels in F2^9") + proof = (GAUGE / "PROOF.md").read_text() + need("The row correction is `z tensor q_j`; the column correction is `r_i tensor z`." in proof, "#3966 row/column corrections") + need("q_j=Op_j" in proof and "r_i=Op_i" in proof, "#3966 images") + + # #3954's witness lines fix the orientation: row fiber q = p_j = 386, donor column p_i = 405 + w = json.loads((TWO_AXIS / "RESULT.json").read_text())["witness"] + def as_cells(n): + return frozenset((k // 9, k % 9) for k in range(81) if (n >> k) & 1) + need(as_cells(w["u_row"]) == cells(386, 386) and as_cells(w["u_donor"]) == cells(405, 386), "#3954 witness lines are 386(x)386 and 405(x)386") + need((w["p_row"], w["p_donor"], w["q"]) == (386, 405, 386), "#3954 witness labels") + ROW, COL = w["q"], w["p_donor"] + + # gauge facts, on all of F2^9 + need(dot(Z, Z) == 0 and bin(Z).count("1") == 4, "z even of weight 4") + for x in range(512): + need(gauge(gauge(x)) == x and dot(gauge(x), Z) == dot(x, Z), "O involution, z . Ox = z . x") + need((bin(gauge(x)).count("1") - bin(x).count("1") - 2 * dot(x, Z)) % 4 == 0, "weight law") + for y in range(x, 512): + if dot(gauge(x), gauge(y)) != dot(x, y): + raise AssertionError("O orthogonal") + classes = [bin(x).count("1") % 4 for x in labels] + need(classes.count(1) == 56 and classes.count(3) == 48, "56 class-1 and 48 class-3 labels") + need(all(bin(gauge(x)).count("1") % 4 == 3 for x in labels), "every image has weight class 3") + + # orientation-free claims of #4154, in the source orientation + src = census(labels, tags) + need(src["full_equal"] == 0, "no full-address agreement") + need((src["agree"], src["disagree"]) == (5440, 5376), "shared-line split 5440 / 5376") + need(src["min_ham"] == 6 and src["min_pairs"] == {32, 4}, "minimum Hamming 6, only labels 32 and 4") + need(src["helper_row_match"] == 104 * 48, "helper matches the row tag on 104 * 48 ordered pairs") + # ... and it is the ROW label's class that decides it: a.line - row.line = z . q_j + a = add(cells(Z, ONES), cells(ONES, Z)) + for j in labels: + for i in labels: + row, _, line = tags(j, i) + need((pair(a, line) == pair(row, line)) == (bin(j).count("1") % 4 == 3), "helper/row match iff row label class 3") + + # the witness, in the source orientation + row, col, line = tags(ROW, COL) + need((gauge(ROW), gauge(COL)) == (386, 49), "witness images 386 and 49") + flips = (pair(row, line), pair(col, line)) + need(flips == (1, 0), "source orientation: witness shared-line flips are (row 1, column 0)") + need(pair(a, line) == flips[0], "source orientation: the uniform tag agrees with the witness row tag on the shared line") + need(len(row ^ col) == 20, "witness Hamming distance 20") + need((1, 2) not in row ^ col and (2, 1) in row ^ col, "cell (1,2) = bit 11 does not separate; cell (2,1) = bit 19 does") + need(a != row, "the uniform tag still differs from the row tag on the full address") + + # control: #4154's code builds (z (x) O p_col, O p_row (x) z, O p_row (x) O p_col), the transposes + def transposed(j, i): + q, r = gauge(j), gauge(i) + return cells(Z, r), cells(q, Z), cells(q, r) + t = census(labels, transposed) + need({k: t[k] for k in ("full_equal", "agree", "disagree", "min_ham")} == {k: src[k] for k in ("full_equal", "agree", "disagree", "min_ham")}, "control: the census is orientation-free") + row_t, col_t, line_t = transposed(ROW, COL) + need((pair(row_t, line_t), pair(col_t, line_t)) == (0, 1) and pair(a, line_t) == 1, "control: transposed orientation reproduces #4154's flips 0/1 and its helper mismatch") + need((1, 2) in row_t ^ col_t, "control: transposed orientation reproduces #4154's bit 11") + seam_code = (SEAM / "verify.py").read_text() + need("return tensor(Z, column_image), tensor(row_image, Z)" in seam_code, "#4154's row tag is z (x) column image") + + print(json.dumps({ + "status": "PASS_P104_FIBER_TAG_ORIENTATION_CHECK", + "confirmed": {"pairs": 104 * 104, "full_equal": 0, "shared_agree": 5440, "shared_disagree": 5376, + "min_hamming": 6, "min_labels": [4, 32], "witness_hamming": 20, "helper_row_matches": 104 * 48}, + "corrected_at_witness_row386_col405": {"shared_flips_row_col": list(flips), "uniform_tag_matches_row_on_shared_line": True, + "separating_cell": [2, 1], "bit": 19}, + "corrected_census_wording": "the uniform tag matches the row tag on the shared line iff the ROW label is class 3", + "new_kappa_claimed": False, + }, indent=1)) + + +if __name__ == "__main__": + sys.exit(main())