From 267d3d054067541241590cdc3857868785d02318 Mon Sep 17 00:00:00 2001 From: Cinna Davis <1337isnot1337@users.noreply.github.com> Date: Wed, 14 Oct 2026 14:05:19 -0500 Subject: [PATCH 1/2] Research exact P104 tail side correction --- .../AUGMENTED-WITNESS.json.gz | Bin 0 -> 37311 bytes .../CORRECTION-ROWS.json | 87473 ++++++++++++++++ .../README.md | 74 + .../RESULT.json | 57 + .../SIDE-TRANSPORTS.json.gz | Bin 0 -> 5637 bytes .../SOURCES.json | 102 + .../TASK.json | 105 + .../VERIFY.json | 33 + .../verify.py | 386 + 9 files changed, 88230 insertions(+) create mode 100644 research/p104-tail-side-correction-seed749717/AUGMENTED-WITNESS.json.gz create mode 100644 research/p104-tail-side-correction-seed749717/CORRECTION-ROWS.json create mode 100644 research/p104-tail-side-correction-seed749717/README.md create mode 100644 research/p104-tail-side-correction-seed749717/RESULT.json create mode 100644 research/p104-tail-side-correction-seed749717/SIDE-TRANSPORTS.json.gz create mode 100644 research/p104-tail-side-correction-seed749717/SOURCES.json create mode 100644 research/p104-tail-side-correction-seed749717/TASK.json create mode 100644 research/p104-tail-side-correction-seed749717/VERIFY.json create mode 100644 research/p104-tail-side-correction-seed749717/verify.py diff --git a/research/p104-tail-side-correction-seed749717/AUGMENTED-WITNESS.json.gz b/research/p104-tail-side-correction-seed749717/AUGMENTED-WITNESS.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..7e248e2d263fc6b1b578350a7bbc6d4ad725b106 GIT binary patch literal 37311 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 z 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 bit and ((pivots[other] >> bit) & 1): + pivots[other] ^= pivots[bit] + return tuple(pivots[bit] for bit in sorted(pivots, reverse=True)) + + +def basis_span(vectors): + return canonical(vectors) + + +def load_compiler(): + path = P104 / "compile.py" + spec = importlib.util.spec_from_file_location("p104_tail_source_compiler", path) + module = importlib.util.module_from_spec(spec) + sys.modules[spec.name] = module + spec.loader.exec_module(module) + return module + + +def check_pins(): + for relative, sha in EXPECTED_PINS.items(): + need(digest((ROOT / relative).read_bytes()) == sha, "source pin changed: " + relative) + + +def base_replay(): + run = subprocess.run( + [sys.executable, "-I", "-O", "-B", str(P104 / "verify.py")], + cwd=ROOT, text=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, + timeout=180, check=False, + ) + need(run.returncode == 0, "frozen P104 positive control failed: " + run.stderr[-2000:]) + result = json.loads(run.stdout) + need(result.get("status") == "PASS_CONCRETE_NATIVE_P104_LOW_RANK_CHANNEL", + "frozen P104 replay status") + need(result.get("formal_boundary_columns") == 280 + and result.get("rank_mass") == 2368 + and result.get("scalar_events", {}).get("add") == 2624, + "frozen P104 replay receipt changed") + return result + + +def correction_data(compiler): + transform = compiler.label_isometry()[3] + roots = compiler.root_lines() + fixture = json.loads((INPUTS / "P104-FIXTURE.json").read_text())[ + "section4_explicit_P104"] + removed = {tuple(x) for x in fixture["F0"] + fixture["C"]} + ports = [r for r in roots if r not in removed] + need(len(roots) == 120 and len(ports) == 104, "P104 port inventory") + inner = compiler.inner + gram = [[inner(a, b) for b in ports] for a in ports] + rows = [] + for t, row in enumerate(gram): + sparse = [] + for s, value in enumerate(row): + coefficient = Q((2 * int(t == s) - value), 2) + if coefficient: + sparse.append({"source": s, "source_root": list(ports[s]), + "gram": value, "coefficient": str(coefficient)}) + need(len(sparse) == 48, "each correction row has 48 charged entries") + need(all(entry["gram"] in (-1, 1) for entry in sparse), + "nonzero correction Gram entries are signed unit overlaps") + rows.append({"target": t, "target_root": list(ports[t]), + "nonzero": sparse}) + need(sum(len(row["nonzero"]) for row in rows) == 4992, + "complete correction entry count") + + word = json.loads((INPUTS / "LOWRANK-WITNESS.json").read_text()) + base_n = len(word["program"]) + need(base_n == 4058, "source channel event count") + state, frames = replay_rows(word, roots, ports, gram) + full_key = basis_span(FULL) + for s in range(104): + need(frames["X" + str(s)] == full_key, + "source X register not full-frame at the declared tail cut") + for t in range(104): + target_key = basis_span(word["final_frames"]["Y" + str(t)]) + need(len(target_key) == 8 and frames["Y" + str(t)] == target_key, + "target Y register not at its declared rank-eight frame") + + augmented = copy.deepcopy(word) + new_transports = [] + for row in rows: + t = row["target"] + reg = "Y" + str(t) + old_compressed = list(word["final_frames"][reg]) + old_physical = list(compiler.canon(transform(x) for x in old_compressed)) + full_physical = list(compiler.canon(transform(x) for x in FULL)) + old_chart = compiler.CE.canonical_frame(9, old_physical) + full_chart = compiler.CE.canonical_frame(9, full_physical) + promote_operator = old_chart.adjoint().then(full_chart) + promote_recipe, _ = compiler.CE.lower_child(promote_operator) + promote_expected = compiler.N.adjoint(compiler.N.frame(old_physical, 9)) + compiler.N.frame(full_physical, 9) + need(promote_recipe["rank"] == 1, "rank-one P104 target promotion") + compiler.N.equal(compiler.N.recipe(promote_recipe), promote_expected, + "independent native promotion recipe") + promote_event = ["transport", reg, old_compressed, FULL[:], 1] + augmented["program"].append(promote_event) + new_transports.append({"target": t, "direction": "promote", "rank": 1, + "old_compressed": old_compressed, + "new_compressed": FULL[:], + "old_physical": old_physical, + "new_physical": full_physical, + "recipe": promote_recipe}) + for entry in row["nonzero"]: + augmented["program"].append([ + "add", reg, "X" + str(entry["source"]), + entry["coefficient"], FULL[:]]) + descend_operator = full_chart.adjoint().then(old_chart) + descend_recipe, _ = compiler.CE.lower_child(descend_operator) + descend_expected = compiler.N.adjoint(compiler.N.frame(full_physical, 9)) + compiler.N.frame(old_physical, 9) + need(descend_recipe["rank"] == 1, "rank-one P104 target restoration") + compiler.N.equal(compiler.N.recipe(descend_recipe), descend_expected, + "independent native restoration recipe") + augmented["program"].append(["transport", reg, FULL[:], old_compressed, 1]) + new_transports.append({"target": t, "direction": "restore", "rank": 1, + "old_compressed": FULL[:], + "new_compressed": old_compressed, + "old_physical": full_physical, + "new_physical": old_physical, + "recipe": descend_recipe}) + + need(augmented["program"][:base_n] == word["program"], "source channel prefix changed") + need(augmented["initial_frames"] == word["initial_frames"] + and augmented["final_frames"] == word["final_frames"], + "source endpoints changed") + receipt = replay_rows(augmented, roots, ports, gram, corrected=True) + state, frames = receipt + need(len(augmented["program"]) == base_n + 5200, "augmented event count") + need(sum(e[0] == "add" for e in augmented["program"]) == 7616, + "base and correction scalar addition count") + need(sum(e[0] == "transport" for e in augmented["program"]) + == sum(e[0] == "transport" for e in word["program"]) + 208, + "complete frame-change count") + return word, augmented, rows, new_transports, gram, ports, base_n + + +def replay_rows(word, roots, ports, gram, corrected=False): + initial = word["initial_frames"] + state = {name: {name: Q(1)} for name in initial} + frames = {name: basis_span(frame) for name, frame in initial.items()} + scalar = Counter() + for event_index, event in enumerate(word["program"]): + op = event[0] + if op == "transport": + _, reg, old, new, rank = event + need(reg in frames and frames[reg] == basis_span(old), + "literal transport input frame at event " + str(event_index)) + need(abs(len(canonical(old)) - len(canonical(new))) == rank, + "literal transport rank at event " + str(event_index)) + frames[reg] = basis_span(new) + elif op == "zero": + _, reg, frame = event + need(reg == "C" and reg not in state, "owned private zero") + state[reg] = {} + frames[reg] = basis_span(frame) + scalar[op] += 1 + elif op == "erase": + _, reg, frame = event + need(reg == "C" and reg in state and frames[reg] == basis_span(frame), + "owned private erase") + state.pop(reg) + frames.pop(reg) + scalar[op] += 1 + elif op == "copy": + _, reg, src, frame = event + need(reg in state and not state[reg] and frames[reg] == frames[src] + == basis_span(frame), "common-chart copy") + state[reg] = dict(state[src]) + scalar[op] += 1 + else: + need(op == "add", "unknown scalar event") + _, reg, src, coefficient, frame = event + need(reg != src and reg in state and src in state + and frames[reg] == frames[src] == basis_span(frame), + "common-chart scalar addition") + c = Q(coefficient) + for column, value in list(state[src].items()): + result = state[reg].get(column, Q(0)) + c * value + if result: + state[reg][column] = result + else: + state[reg].pop(column, None) + scalar[op] += 1 + need(set(state) == set(frames) == set(initial), "private storage not restored") + need(set(word["final_frames"]) == set(initial), "endpoint register inventory") + for name in initial: + expected = {name: Q(1)} + if name.startswith("Y"): + t = int(name[1:]) + expected.update({"X" + str(s): Q(gram[t][s], 2) + for s in range(104) if gram[t][s]}) + if corrected: + expected = {name: Q(1), "X" + str(t): Q(1)} + need(state[name] == expected, "exact arbitrary-input row at endpoint " + name) + need(frames[name] == basis_span(word["final_frames"][name]), + "endpoint frame restoration " + name) + return state, frames + + +def negative_controls(word, augmented, rows, gram, ports, roots): + controls = {} + bad = copy.deepcopy(augmented) + first_add = next(i for i, e in enumerate(bad["program"]) if i >= len(word["program"]) and e[0] == "add") + bad["program"][first_add][3] = str(-Q(bad["program"][first_add][3])) + try: + replay_rows(bad, roots, ports, gram, corrected=True) + except (ValueError, StopIteration): + controls["wrong_correction_sign"] = True + else: + raise ValueError("accepted wrong correction sign") + + bad = copy.deepcopy(augmented) + bad["program"].pop(len(word["program"])) + try: + replay_rows(bad, roots, ports, gram, corrected=True) + except (ValueError, StopIteration): + controls["missing_promotion"] = True + else: + raise ValueError("accepted correction without promotion") + + bad = copy.deepcopy(augmented) + last = next(i for i in range(len(word["program"]), len(bad["program"])) + if bad["program"][i][0] == "transport" and bad["program"][i][1] == "Y0" + and bad["program"][i][2] == FULL) + bad["program"].pop(last) + try: + replay_rows(bad, roots, ports, gram, corrected=True) + except (ValueError, StopIteration): + controls["missing_restoration"] = True + else: + raise ValueError("accepted missing target frame restoration") + + bad = copy.deepcopy(augmented) + bad["program"].pop(first_add) + try: + replay_rows(bad, roots, ports, gram, corrected=True) + except (ValueError, StopIteration): + controls["missing_correction_entry"] = True + else: + raise ValueError("accepted missing correction entry") + return controls + + +def write_stable(path, payload): + if path.exists(): + need(path.read_bytes() == payload, "reproducible artifact drift: " + path.name) + else: + path.write_bytes(payload) + + +def main(): + check_pins() + native = base_replay() + compiler = load_compiler() + word, augmented, rows, transports, gram, ports, prefix = correction_data(compiler) + + roots = compiler.root_lines() + controls = negative_controls(word, augmented, rows, gram, ports, roots) + base_result = json.loads((INPUTS / "LOWRANK-RESULT.json").read_text()) + paid = {int(k): int(v) for k, v in base_result["paid_profile"].items()} + native_paid = dict(paid) + paid[1] += len(transports) + need(paid == {1: 1282, 2: 58, 3: 86, 4: 104, 5: 48, 6: 24, 7: 8, 8: 8}, + "augmented native paid profile") + rank_mass = sum(rank * count for rank, count in paid.items()) + need(rank_mass == 2576, "augmented rank mass") + + ceiling_path = ROOT / "research/complex-local-word-ceiling/ceiling.py" + spec = importlib.util.spec_from_file_location("p104_tail_exact_ceiling", ceiling_path) + ceiling = importlib.util.module_from_spec(spec) + spec.loader.exec_module(ceiling) + grid = Q(1, 10**15) + native_interval = ceiling.ceiling(native_paid, 73, 896, 9, 64, grid=grid) + interval = ceiling.ceiling(paid, 73, 896, 9, 64, grid=grid) + shift = [interval[0] - native_interval[1], + interval[1] - native_interval[0]] + moment_at_one_percent = ceiling.relax(paid, 73, 896, 9, 64, Q(1, 99)) + need(moment_at_one_percent[0] > 1, + "exact favorable paid-profile screen should reject one-percent saving") + + witness_bytes = gzip.compress((json.dumps(augmented, sort_keys=True, separators=(",", ":")) + + "\n").encode(), mtime=0) + rows_object = {"formula": "coefficient[t,s] = delta[t,s] - G[t,s]/2", + "gram_matrix": gram, "rows": rows, + "row_count": 104, "nonzero_entries": 4992} + rows_bytes = (json.dumps(rows_object, sort_keys=True, indent=2) + "\n").encode() + transport_object = {"source_native_checker_sha256": EXPECTED_PINS[ + "research/p104-native-channel/vendor/native_verify.py"], + "transports": transports, "rank_one_transport_count": 208} + transport_bytes = gzip.compress((json.dumps(transport_object, sort_keys=True, + separators=(",", ":")) + "\n").encode(), mtime=0) + result = { + "status": "PASS_P104_EXACT_TAIL_SIDE_CORRECTION", + "track": "complex-mechanisms", "seed": "749717109203f916f620456c85e26673", + "priority_revision": 4, "base_commit": "7c1e7811c730b17fe0eeef6c82ef011318b0465e", + "selected_record_sha256": "10b9e340fd8e354a37a0c4813c90e5de1dd42044b5f6aca4a3fc5a42b685fa32", + "native_channel_status": native["status"], "native_prefix_events": prefix, + "formal_columns": 280, "ports": 104, "correction_rows": 104, + "nonzero_scalar_additions": 4992, "rank_one_frame_changes": 208, + "augmented_events": len(augmented["program"]), "paid_profile": paid, + "rank_mass": rank_mass, + "native_channel_local_ceiling_grid_bracket": [str(x) for x in native_interval], + "optimistic_local_ceiling_grid_bracket": [str(x) for x in interval], + "corrected_minus_native_ceiling_interval": [str(x) for x in shift], + "exact_moment_at_a_1_over_99": [str(x) for x in moment_at_one_percent], + "negative_controls": controls, + "native_channel_is_frozen": True, + "scope": "One finite rowwise I-G/2 correction appended at the final source-completed cut. Exact 280-column identity and native rank-one transports are verified. This does not supply global chronological helper hosting, all-size admission, precision accounting, or a new kappa.", + "remaining_obligation": "Prove a globally legal owner/host schedule for the appended source reads and rank-one transports, charge its copied information, and reassess complete supplier cost.", + "artifact_sha256": { + "AUGMENTED-WITNESS.json.gz": digest(witness_bytes), + "CORRECTION-ROWS.json": digest(rows_bytes), + "SIDE-TRANSPORTS.json.gz": digest(transport_bytes), + }, + } + result_bytes = (json.dumps(result, sort_keys=True, indent=2) + "\n").encode() + for name, payload in [ + ("AUGMENTED-WITNESS.json.gz", witness_bytes), + ("CORRECTION-ROWS.json", rows_bytes), + ("SIDE-TRANSPORTS.json.gz", transport_bytes), + ("RESULT.json", result_bytes), + ]: + write_stable(HERE / name, payload) + # Controls use a discarded local root parameter; endpoint verification + # derives all target/source rows directly from the frozen word and G. + print(json.dumps(result, sort_keys=True, indent=2)) + + +if __name__ == "__main__": + main() From 54d4c6f57a155552db7c15bd164d034e707b20b9 Mon Sep 17 00:00:00 2001 From: Cinna Davis <1337isnot1337@users.noreply.github.com> Date: Wed, 14 Oct 2026 14:10:54 -0500 Subject: [PATCH 2/2] Record P104 tail correction handoff links --- research/p104-tail-side-correction-seed749717/README.md | 5 +++++ research/p104-tail-side-correction-seed749717/TASK.json | 7 +++++++ 2 files changed, 12 insertions(+) diff --git a/research/p104-tail-side-correction-seed749717/README.md b/research/p104-tail-side-correction-seed749717/README.md index 7d19a26c2d..de6c267d0c 100644 --- a/research/p104-tail-side-correction-seed749717/README.md +++ b/research/p104-tail-side-correction-seed749717/README.md @@ -45,6 +45,11 @@ and the native Clifford realization accepted in package keeps that witness and its certificates unchanged. Source commit, Git blob, and SHA256 pins are listed in [SOURCES.json](SOURCES.json). +The focused result is under review in [PR #2089](https://github.com/CrocSwap/integer-mult-bounds/pull/2089). +Its canonical investigation thread is +[Discussion #2092](https://github.com/CrocSwap/integer-mult-bounds/discussions/2092); +the completed Cycle 16 claim is linked from the mechanism hub. + ## Reproduce From repository root, with Python 3.12: diff --git a/research/p104-tail-side-correction-seed749717/TASK.json b/research/p104-tail-side-correction-seed749717/TASK.json index 61cbe120f2..769813d3ed 100644 --- a/research/p104-tail-side-correction-seed749717/TASK.json +++ b/research/p104-tail-side-correction-seed749717/TASK.json @@ -91,6 +91,13 @@ "budget_minutes": 60, "stop_rule": "Use only the final cut after the pinned 4,058-event prefix and the literal correction coefficient delta[t,s]-G[t,s]/2. Stop after exact replay of all 104 rows, 4,992 nonzero additions, 208 rank-one transports, and four failure controls; do not search alternative factorizations or cuts in this cycle.", "outcome": "partial", + "publication": { + "submitted_at_utc": "2026-10-14T19:10:37Z", + "pr_url": "https://github.com/CrocSwap/integer-mult-bounds/pull/2089", + "pr_status_at_handoff": "open", + "canonical_discussion_url": "https://github.com/CrocSwap/integer-mult-bounds/discussions/2092", + "completed_hub_claim_url": "https://github.com/CrocSwap/integer-mult-bounds/discussions/1167#discussioncomment-18932282" + }, "evidence": "Registered package replay passes. The 280-column rational induction proves the appended operator changes every Y_t row from y_t+(G/2)x to y_t+x and leaves every other row unchanged. Each of 208 frame changes has an independently interpreted exact native rank-one recipe. The charged local profile is {1:1282,2:58,3:86,4:104,5:48,6:24,7:8,8:8}, rank mass 2576. The exact optimistic local ceiling worsens relative to the uncorrected channel by the interval recorded in RESULT.json. No global owner/host or copied-information schedule is certified, so this is not an admitted supplier or a new kappa. The nearest completed schedule #1940 does not provide these correction or copy obligations, and this package does not claim to resolve its global integration gap.", "author": "Cinna Davis", "ai_assistance": "OpenAI Codex provided substantial assistance with verifier implementation, exact cost screening, and package preparation. The result is limited to the explicit rational identity and native recipes checked by the reproducible package.",