From bb36fc65ee0b161229169505f4840c436c5ca2b9 Mon Sep 17 00:00:00 2001 From: Clear1nsight <22630354+Clear1nsight@users.noreply.github.com> Date: Wed, 11 Nov 2026 14:22:27 +1100 Subject: [PATCH 1/4] Reuse #7147 selected replay navigation for onboarding This is the exact documentation prerequisite retained by #7156. It points the onboarding check to the selected #7000/#7001 review. Credit to Rohan Arun and the source authors. --- docs/ci-verification.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/docs/ci-verification.md b/docs/ci-verification.md index 63ba3e9aa8..52b62d0481 100644 --- a/docs/ci-verification.md +++ b/docs/ci-verification.md @@ -1,8 +1,25 @@ # CI verification -## Current selected-family replay: #6030 +## Current selected-family replay: #7000 with #7001 The [selected record](../certificates/selected-result.json) binds conditional +κ = 0.00363005817 to the [application review](research/pr-intake-evidence/pr7000-application/PROOF-REVIEW.md), +[validation receipts](research/pr-intake-evidence/pr7000-application/VALIDATION.json), +and [explicit source closure](../certificates/frontier7000-source.json). +`make frontier7000-verify` follows that exact-source selected replay. The review +reuses eleven authenticated preceding executions and records seven fresh serial +application, scalar and complete native-catalogue executions. The earlier +monolithic timeout is retained separately and is not completed coverage. +Consult the receipts for exact commands, source heads and limits. + +The five inherited framework assumptions remain. No complete uniform word, +literal multiplier execution, independent human proof or formal-kernel proof +is asserted. Routine research submissions do not need to rerun this +selected-family replay. The sections below preserve historical checkpoints. + +## Historical selected-family replay: #6030 + +The [historical checkpoint](../certificates/checkpoints/frontier6030.json) binds conditional κ = 0.003125804 to the [proof review](research/pr-intake-evidence/pr6030-audit/PROOF-REVIEW.md), [validation receipts](research/pr-intake-evidence/pr6030-audit/VALIDATION.json), and [explicit source closure](../certificates/frontier6030-source.json). From d2e54af81f9dda6487636b79d4964a2385d89b2b Mon Sep 17 00:00:00 2001 From: Clear1nsight <22630354+Clear1nsight@users.noreply.github.com> Date: Wed, 11 Nov 2026 21:53:51 +1100 Subject: [PATCH 2/4] Replay the historical selected check at its inspected commit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The PR #6292 rejection census and package plan are statements about 2485805. Load its exact sources and planner in a private sparse checkout, keeping all source hashes, 19 expected rejections, nine package selections and the empty-plan control. Subsequent edits to the live Makefile and CI guide no longer invalidate this historical check. The original audit is by unpaidmoon, building on Dennis’s historical replay gate. The pinned repository view follows the precedent of Matarener’s PR #5434. Repair prepared with substantial OpenAI Codex assistance. --- .../historical-selected-replay-gap/README.md | 6 +- .../SOURCES.json | 60 +++++++++--------- .../VERIFY.json | 31 +-------- .../historical-selected-replay-gap/verify.py | 63 ++++++++++++++----- 4 files changed, 82 insertions(+), 78 deletions(-) diff --git a/research/historical-selected-replay-gap/README.md b/research/historical-selected-replay-gap/README.md index 55d8cc3b49..36d9a873ca 100644 --- a/research/historical-selected-replay-gap/README.md +++ b/research/historical-selected-replay-gap/README.md @@ -69,7 +69,11 @@ python3 -B scripts/research_package.py --package research/historical-selected-re The direct command prints `PASS_HISTORICAL_SELECTED_REPLAY_GAP`. A registered replay prints `PASS_REGISTERED_RESEARCH_PACKAGE`. Both require Git history -containing the two inspected commits. +containing the two inspected commits and the source and manifest objects at +`2485805a6d47f36ea83ddde6327d453ac82d44dc`. The verifier uses a temporary +sparse checkout of that commit, checks the declared source digests there, and +uses its planner and manifest inventory. The recorded rejections and selection +therefore remain reproducible after later changes to the live Makefile or CI guide. ## Open next questions diff --git a/research/historical-selected-replay-gap/SOURCES.json b/research/historical-selected-replay-gap/SOURCES.json index c1010eec95..62bb8b3950 100644 --- a/research/historical-selected-replay-gap/SOURCES.json +++ b/research/historical-selected-replay-gap/SOURCES.json @@ -4,13 +4,13 @@ "files": [ { "path": "Makefile", - "usage": "input", + "usage": "provenance", "git_blob": "0d683a06b9e7ee162496108ce9a7c5d2ee94fccf", "sha256": "4f2d4f2dcd15139ec82658a975f85ed300897385f85799218539f4c8d60567da" }, { "path": "certificates/partial-swap-network.json", - "usage": "input", + "usage": "provenance", "git_blob": "eccafa830c16170c36faf93045ddf1f638f7bcd4", "sha256": "4c0b9d37e1034b2076e30a70f8e514416298c462d9ee98bc87fe6556b14df786" }, @@ -22,7 +22,7 @@ }, { "path": "docs/ci-verification.md", - "usage": "input", + "usage": "provenance", "git_blob": "63ba3e9aa8bdc5e942b56e34244b92b16f854085", "sha256": "c7d3027e9ad8bcbff68f07aa9576b30fb2f3c76c44d876d40c7fdbf4a3e2228a" }, @@ -34,163 +34,163 @@ }, { "path": "research/clifford-state-performance/SOURCE.json", - "usage": "input", + "usage": "provenance", "git_blob": "6f98a0061a5104dfab82c9e806f819b41811f684", "sha256": "396d0f08df24952248140d5c65c51b8c902ef1c580892ff7ea182890530f67ee" }, { "path": "research/community-batch1047-audit/CONTENT-COVERAGE.json", - "usage": "input", + "usage": "provenance", "git_blob": "5e0f92af463ec12c5e1dcc3effd44081a88af647", "sha256": "07a9daeaf2bda308a92e9a4684f13d5fc766c7772d74801fceb7f4599fdab226" }, { "path": "research/community-batch1099-audit/CONTENT-COVERAGE.json", - "usage": "input", + "usage": "provenance", "git_blob": "9e13266bf85e627f1b7dc225e9530ea69fd2c7f0", "sha256": "421e1211fb1897c45621dc6801c276e53f2e6f335583c9c9049e535f87c0a3b1" }, { "path": "research/community-batch932-audit/CONTENT-COVERAGE.json", - "usage": "input", + "usage": "provenance", "git_blob": "cc4d03eb59b9ab3f952735f7e88ff18c2d15d7af", "sha256": "184629cac91a5cfaca50330a88596008b824221433867dcf8117539c913c284a" }, { "path": "research/community-batch970-audit/CONTENT-COVERAGE.json", - "usage": "input", + "usage": "provenance", "git_blob": "8b9f4111badf7de5d97684799560b55110e9da79", "sha256": "23188ed920e38a54006cb883e181585620821c63bf7e8b5e05d32719417cc37e" }, { "path": "research/community-frontier741-audit/CONTENT-COVERAGE.json", - "usage": "input", + "usage": "provenance", "git_blob": "a5300d4e7a5381a3f443fc54c768ca6f0f236d68", "sha256": "3c820fb30e1b4d9bcfc6a7ab524375e5b2abd66b940af2c509146104f0bcd79c" }, { "path": "research/community-frontier890-audit/CONTENT-COVERAGE.json", - "usage": "input", + "usage": "provenance", "git_blob": "d7ff6d777b01d69b6ce84caf25d3b7e4a4d2f211", "sha256": "6b185a9902652f893f3ebd8ada92d2f11b6de6533a9a4d11718a8a4496101128" }, { "path": "research/community-hyperplane599-audit/SOURCE.json", - "usage": "input", + "usage": "provenance", "git_blob": "546f37d326d10a99910ae8f908e71ef768524d98", "sha256": "65099d764bfcc39bda5e4d9966783611b094c3522dbdd1435cd498d657a8ef8e" }, { "path": "research/community-k492-audit/SOURCE.json", - "usage": "input", + "usage": "provenance", "git_blob": "e538481e4cb16ed936d3195f2dfb5b5a9ca0a76b", "sha256": "2c0f4fa5bc150d05658af2e7c54c4d2c337dd52b7efd3d69530ae73bcbdf452a" }, { "path": "research/community-reconciliation92-audit/MANIFEST.json", - "usage": "input", + "usage": "provenance", "git_blob": "2a2e93685173d5f13cbb5abe740f5d90352e0228", "sha256": "5f501f3c118131e7d069f30ad77186eb2ad6961f9680a0ef105f4514ed41808a" }, { "path": "research/partial-swap-digest/baseline.py", - "usage": "input", + "usage": "provenance", "git_blob": "a2f0190704db83bd8ef48e46e723c49b925804fe", "sha256": "81e9af92cdf38243a540cdcff2062778e449467848d444da37a9553c12ca4c34" }, { "path": "research/r420-two-sided-basis/SOURCES.json", - "usage": "input", + "usage": "provenance", "git_blob": "5d718e11e62f4bcadecf1e02d6b61f87dbe190b0", "sha256": "d9810b0d139c5a1211fd2c1f0d142187cc1fca30026e1e7bc4f9ecfacf1596d1" }, { "path": "research/skip-clones/SOURCE.json", - "usage": "input", + "usage": "provenance", "git_blob": "8d1bb3b9c8189e35e5d8bfdfa632d7473e8be0d5", "sha256": "0b68e63e35a97ce6b0cdb6e291b88ebaa8f2dd4afb70b2498f10ee89428258dc" }, { "path": "research/split-skip/SOURCE.json", - "usage": "input", + "usage": "provenance", "git_blob": "2ab610b6ea2edd2865fda793ef2168b0c76afb4f", "sha256": "7c2b4646a3ecfef6f881da5c43e4bd0fa9a4d1b00548b8ab458d897e16735134" }, { "path": "scripts/historical-ci-inputs/Makefile", - "usage": "input", + "usage": "provenance", "git_blob": "aff68409021c9d401a6f8013b9dfd7dbcc30f2a8", "sha256": "ea8830dd79da493e2d75baf753d733ff7efbcf2b4794afe41fae0ac8f3055646" }, { "path": "scripts/historical-ci-inputs/ledger-batch932-run_isolated_tests.py", - "usage": "input", + "usage": "provenance", "git_blob": "65db599ab0b1dea0312c4ca048e0bd0f44c3736f", "sha256": "96ea543e6c707424afe247e77bd86c82152f90fc76a0773c4232145da5cdf8d1" }, { "path": "scripts/historical-ci-inputs/ledger-batch932-test_isolated_test_runner.py", - "usage": "input", + "usage": "provenance", "git_blob": "34820a8f24678f918f4d0e7a35380d8013fc3495", "sha256": "628391b6abfbc8674ceec1751867a4392f2cc0b5b66886243e139af86cf355ac" }, { "path": "scripts/historical-ci-inputs/ledger-batch970-verify_selected_result.py", - "usage": "input", + "usage": "provenance", "git_blob": "c755b76e0d44ba4917aa94440ebe54daefce5b2a", "sha256": "d7fd929726b326aeeaf0a3996475adec88eee9aac09ae0bebeeaa0bc1fc8f199" }, { "path": "scripts/historical-ci-inputs/ledger-frontier741-ci-verification.md", - "usage": "input", + "usage": "provenance", "git_blob": "7f3c012504187917a728b9fe87043f0fc8cd006a", "sha256": "a854022e0e1d5d4db4d60e586be3ea56005013ef14a1fc06d02bc06e8529c4b0" }, { "path": "scripts/historical-ci-inputs/partial-swap-context.json", - "usage": "input", + "usage": "provenance", "git_blob": "ad65114886bf34a4fd27e79f3be502389e689faa", "sha256": "833a9642f33aeab2ffea17ec9c6b82e0a953f90192b2c82e10bef21538dccba9" }, { "path": "scripts/historical-ci-inputs/partial-swap-network.json", - "usage": "input", + "usage": "provenance", "git_blob": "52075f2463f60af5e16571347f24274fce73a1ea", "sha256": "f3c4be597b2f2136da4ae2cc80c7454f63c90aa01f84e5b8131cee4dd55de815" }, { "path": "scripts/partial_swap/shared.py", - "usage": "input", + "usage": "provenance", "git_blob": "44a0e454c70f9c4b98e258b8443612e6a119904b", "sha256": "5a0646a50b9f3e8ea55168620a78e8853b0ab810517cefc8cfb8696aedee278a" }, { "path": "scripts/replay_historical_check.py", - "usage": "input", + "usage": "provenance", "git_blob": "1e92fff2782970ef71378f594f2350d245a4db26", "sha256": "5467619c78183d3adc82b0cb55af28e5c1a01fca2b0588677816244b53e2bafd" }, { "path": "scripts/research_package.py", - "usage": "input", + "usage": "provenance", "git_blob": "091b4c8f58bac9a9580d76025b887dc5c873d05f", "sha256": "e1256016e7f51827d04fa2179255989f639ae1d97afaa9c16265f85a0c6abd70" }, { "path": "scripts/run_isolated_tests.py", - "usage": "input", + "usage": "provenance", "git_blob": "a96ab35b315ce492e7fbbfd6c5ae211aa066b541", "sha256": "49eb56dd0fc0d8d8ffdb209970a7adf2176223580646f575d5c22e59543b381c" }, { "path": "scripts/verify_selected_result.py", - "usage": "input", + "usage": "provenance", "git_blob": "6882a4700e410dec569b51ae2eaf1a19cc019195", "sha256": "d6b305eac5b9bdb8172c469ad30a1655a60fa0aceac8b1bf610e1b73f51babd8" }, { "path": "tests/test_isolated_test_runner.py", - "usage": "input", + "usage": "provenance", "git_blob": "343b24abf6719b81805eba5a84c74e57634c8288", "sha256": "3a5470d0b139828b90e19bf9583ddeafcd69f8e34f2824664eb3a2958a52e34d" } diff --git a/research/historical-selected-replay-gap/VERIFY.json b/research/historical-selected-replay-gap/VERIFY.json index 98553e72ed..ab7efa3471 100644 --- a/research/historical-selected-replay-gap/VERIFY.json +++ b/research/historical-selected-replay-gap/VERIFY.json @@ -4,36 +4,7 @@ "python": "3.12", "requirements": [], "inputs": [ - "Makefile", - "certificates/partial-swap-network.json", - "docs/ci-verification.md", - "research/clifford-state-performance/SOURCE.json", - "research/community-batch1047-audit/CONTENT-COVERAGE.json", - "research/community-batch1099-audit/CONTENT-COVERAGE.json", - "research/community-batch932-audit/CONTENT-COVERAGE.json", - "research/community-batch970-audit/CONTENT-COVERAGE.json", - "research/community-frontier741-audit/CONTENT-COVERAGE.json", - "research/community-frontier890-audit/CONTENT-COVERAGE.json", - "research/community-hyperplane599-audit/SOURCE.json", - "research/community-k492-audit/SOURCE.json", - "research/community-reconciliation92-audit/MANIFEST.json", - "research/partial-swap-digest/baseline.py", - "research/r420-two-sided-basis/SOURCES.json", - "research/skip-clones/SOURCE.json", - "research/split-skip/SOURCE.json", - "scripts/historical-ci-inputs/Makefile", - "scripts/historical-ci-inputs/ledger-batch932-run_isolated_tests.py", - "scripts/historical-ci-inputs/ledger-batch932-test_isolated_test_runner.py", - "scripts/historical-ci-inputs/ledger-batch970-verify_selected_result.py", - "scripts/historical-ci-inputs/ledger-frontier741-ci-verification.md", - "scripts/historical-ci-inputs/partial-swap-context.json", - "scripts/historical-ci-inputs/partial-swap-network.json", - "scripts/partial_swap/shared.py", - "scripts/replay_historical_check.py", - "scripts/research_package.py", - "scripts/run_isolated_tests.py", - "scripts/verify_selected_result.py", - "tests/test_isolated_test_runner.py" + "scripts/research_package.py" ], "commands": [ { diff --git a/research/historical-selected-replay-gap/verify.py b/research/historical-selected-replay-gap/verify.py index 83b995941a..9d266c5a4e 100644 --- a/research/historical-selected-replay-gap/verify.py +++ b/research/historical-selected-replay-gap/verify.py @@ -6,8 +6,10 @@ """ import hashlib import importlib.util +import json import subprocess import sys +import tempfile from pathlib import Path ROOT = Path(__file__).resolve().parents[2] @@ -61,31 +63,47 @@ def require(ok, message): raise SystemExit(message) -def load_checker(): - path = ROOT / "scripts/replay_historical_check.py" - spec = importlib.util.spec_from_file_location("historical_selected_replay_gap_checker", path) +def load_module(path): + spec = importlib.util.spec_from_file_location(path.stem, path) module = importlib.util.module_from_spec(spec) spec.loader.exec_module(module) return module +def checkout_snapshot(snapshot, sources, runner, env): + paths = [runner.canonical_relative_path(row["path"]) for row in sources["files"]] + git = ["git", "-c", "maintenance.auto=false", "-c", "gc.auto=0", + "-c", "core.autocrlf=false"] + subprocess.run([*git, "clone", "--quiet", "--shared", "--no-tags", "--no-checkout", + "--", str(ROOT), str(snapshot)], cwd=ROOT, env=env, check=True) + subprocess.run([*git, "update-ref", "--no-deref", "HEAD", INSPECTED], + cwd=snapshot, env=env, check=True) + # The pinned planner reads omitted manifests from the sparse HEAD/index. + patterns = "".join(f"/{path.as_posix()}\n" for path in paths) + subprocess.run([*git, "sparse-checkout", "set", "--no-cone", "--stdin"], + cwd=snapshot, env=env, input=patterns.encode("utf-8"), check=True) + subprocess.run([*git, "read-tree", "-mu", "HEAD"], cwd=snapshot, env=env, check=True) + for path, row in zip(paths, sources["files"], strict=True): + require(hashlib.sha256((snapshot / path).read_bytes()).hexdigest() == row["sha256"], + "historical checkout source digest changed: " + path.as_posix()) + + def entries(checker): for name, config in checker.CONFIG.items(): for entry in [config, *config.get("additional_inputs", [])]: yield name, entry -def reject(checker, entry): +def reject(root, checker, entry): try: - checker.authenticated_input(ROOT, entry) + checker.authenticated_input(root, entry) except ValueError as exc: return str(exc) raise SystemExit("historical input was admitted: " + entry["path"]) -def main(): - require(not sys.flags.optimize, "assertions must stay enabled") - checker = load_checker() +def check_snapshot(root, env): + checker = load_module(root / "scripts/replay_historical_check.py") selected = [entry for name, entry in entries(checker) if name == "tooling-ledger" and entry["path"] == SELECTED_PATH] require(len(selected) == 1, "selected-result checker overlay is not unique") @@ -94,7 +112,7 @@ def main(): require(entry["accepted_live_sha256"] == [SELECTED_ACCEPTED], "accepted selected-checker successors changed") frozen = (checker.INPUTS / entry["input"]).read_bytes() - live = (ROOT / SELECTED_PATH).read_bytes() + live = (root / SELECTED_PATH).read_bytes() require(hashlib.sha256(frozen).hexdigest() == SELECTED_PIN, "frozen selected checker bytes changed") require(hashlib.sha256(live).hexdigest() == SELECTED_LIVE, "live selected checker digest changed") require(SELECTED_LIVE not in (SELECTED_PIN, SELECTED_ACCEPTED), "live checker was already admitted") @@ -102,7 +120,7 @@ def main(): # live successor, not a broken comparison. require(SELECTED_PIN in (SELECTED_PIN, *entry["accepted_live_sha256"]), "pin membership control failed") - require(reject(checker, entry) == REJECTIONS[SELECTED_PATH][1], + require(reject(root, checker, entry) == REJECTIONS[SELECTED_PATH][1], "selected checker rejection text changed") counts = {path: 0 for path in REJECTIONS} @@ -110,7 +128,7 @@ def main(): for _name, item in entries(checker): if item["path"] not in REJECTIONS: continue - message = reject(checker, item) + message = reject(root, checker, item) counts[item["path"]] += 1 messages.setdefault(item["path"], message) for path, (count, message) in REJECTIONS.items(): @@ -118,20 +136,31 @@ def main(): require(messages[path] == message, "rejection text changed for " + path) require(sum(counts.values()) == 19, "rejection total changed") ci = [item for _name, item in entries(checker) if item["path"] == CI_PATH] - require(len(ci) == 1 and hashlib.sha256((ROOT / CI_PATH).read_bytes()).hexdigest() == CI_LIVE, + require(len(ci) == 1 and hashlib.sha256((root / CI_PATH).read_bytes()).hexdigest() == CI_LIVE, "selected CI note digest changed") diff = subprocess.check_output( - ["git", "diff", "--name-only", PARENT, INSPECTED], cwd=ROOT, text=True) + ["git", "diff", "--name-only", PARENT, INSPECTED], cwd=root, env=env, text=True) changed = sorted(name for name in diff.splitlines() if name) require(changed == CHANGED, "inspected commit diff changed") - sys.path.insert(0, str(ROOT / "scripts")) - from research_package import plan_details - details = plan_details(ROOT, set(changed)) + planner = load_module(root / "scripts/research_package.py") + details = planner.plan_details(root, set(changed)) require([row["package"] for row in details] == PLAN_PACKAGES, "helper plan selection changed") matched = {name for row in details for names in row["causes"].values() for name in names} require(sorted(set(changed) - matched) == UNMATCHED, "unmatched plan paths changed") - require(plan_details(ROOT, set()) == [], "empty change set selected a package") + require(planner.plan_details(root, set()) == [], "empty change set selected a package") + + +def main(): + require(not sys.flags.optimize, "assertions must stay enabled") + sources = json.loads(Path(__file__).with_name("SOURCES.json").read_bytes()) + require(sources["base_commit"] == INSPECTED, "historical checkout base changed") + runner = load_module(ROOT / "scripts/research_package.py") + env = runner.git_source_env() + with tempfile.TemporaryDirectory(prefix="historical-selected-replay-") as temporary: + snapshot = Path(temporary) / "snapshot" + checkout_snapshot(snapshot, sources, runner, env) + check_snapshot(snapshot, env) print("PASS_HISTORICAL_SELECTED_REPLAY_GAP") print("selected_checker_live=" + SELECTED_LIVE) print("rejections=19 distinct_paths=7 plan_packages=9") From cb07da25c6cdbd4d9fbb43fdc617fd1797aaf577 Mon Sep 17 00:00:00 2001 From: ToikY <27568617+ToikY@users.noreply.github.com> Date: Wed, 11 Nov 2026 19:50:48 -0800 Subject: [PATCH 3/4] Bound fixed-paid rank-seven P104 prefix banks --- .../COHORT.md | 102 +++ .../LOCAL-PINS.json | 24 + .../p104-rank-seven-prefix-bank-bound/NOTICE | 7 + .../PROOF.md | 76 ++ .../PROVENANCE.json | 61 ++ .../README.md | 72 ++ .../SOURCES.json | 18 + .../TASK.json | 117 +++ .../VERIFY.json | 19 + .../engines/independent/r102_prefix.py | 163 +++++ .../engines/independent/second_prime.py | 339 +++++++++ .../engines/independent/verify.py | 256 +++++++ .../engines/r102/geometry.py | 115 +++ .../engines/r102/prefix.py | 49 ++ .../engines/r102/quote.py | 70 ++ .../engines/r105/alias_rank_seven.py | 104 +++ .../engines/r105/freeze_support.py | 46 ++ .../engines/r105/modular_support.py | 92 +++ .../inputs/7314-HELPERS.json.gz | Bin 0 -> 19158 bytes .../inputs/7334-CHANGED.json | 72 ++ .../inputs/7334-WORD.json.gz | Bin 0 -> 393282 bytes .../inputs/ADMITTED.json | 58 ++ .../inputs/PR7319-SHA256.json | 6 + .../inputs/READBACK.json | 188 +++++ .../inputs/exterior_rank56.py | 179 +++++ .../inputs/pricing.py | 82 +++ .../inputs/reverse_engine.py | 148 ++++ .../receipts/RECONCILED.json | 691 ++++++++++++++++++ .../receipts/SHA256.json | 11 + .../replay.py | 202 +++++ 30 files changed, 3367 insertions(+) create mode 100644 research/p104-rank-seven-prefix-bank-bound/COHORT.md create mode 100644 research/p104-rank-seven-prefix-bank-bound/LOCAL-PINS.json create mode 100644 research/p104-rank-seven-prefix-bank-bound/NOTICE create mode 100644 research/p104-rank-seven-prefix-bank-bound/PROOF.md create mode 100644 research/p104-rank-seven-prefix-bank-bound/PROVENANCE.json create mode 100644 research/p104-rank-seven-prefix-bank-bound/README.md create mode 100644 research/p104-rank-seven-prefix-bank-bound/SOURCES.json create mode 100644 research/p104-rank-seven-prefix-bank-bound/TASK.json create mode 100644 research/p104-rank-seven-prefix-bank-bound/VERIFY.json create mode 100644 research/p104-rank-seven-prefix-bank-bound/engines/independent/r102_prefix.py create mode 100644 research/p104-rank-seven-prefix-bank-bound/engines/independent/second_prime.py create mode 100644 research/p104-rank-seven-prefix-bank-bound/engines/independent/verify.py create mode 100644 research/p104-rank-seven-prefix-bank-bound/engines/r102/geometry.py create mode 100644 research/p104-rank-seven-prefix-bank-bound/engines/r102/prefix.py create mode 100644 research/p104-rank-seven-prefix-bank-bound/engines/r102/quote.py create mode 100644 research/p104-rank-seven-prefix-bank-bound/engines/r105/alias_rank_seven.py create mode 100644 research/p104-rank-seven-prefix-bank-bound/engines/r105/freeze_support.py create mode 100644 research/p104-rank-seven-prefix-bank-bound/engines/r105/modular_support.py create mode 100644 research/p104-rank-seven-prefix-bank-bound/inputs/7314-HELPERS.json.gz create mode 100644 research/p104-rank-seven-prefix-bank-bound/inputs/7334-CHANGED.json create mode 100644 research/p104-rank-seven-prefix-bank-bound/inputs/7334-WORD.json.gz create mode 100644 research/p104-rank-seven-prefix-bank-bound/inputs/ADMITTED.json create mode 100644 research/p104-rank-seven-prefix-bank-bound/inputs/PR7319-SHA256.json create mode 100644 research/p104-rank-seven-prefix-bank-bound/inputs/READBACK.json create mode 100644 research/p104-rank-seven-prefix-bank-bound/inputs/exterior_rank56.py create mode 100644 research/p104-rank-seven-prefix-bank-bound/inputs/pricing.py create mode 100644 research/p104-rank-seven-prefix-bank-bound/inputs/reverse_engine.py create mode 100644 research/p104-rank-seven-prefix-bank-bound/receipts/RECONCILED.json create mode 100644 research/p104-rank-seven-prefix-bank-bound/receipts/SHA256.json create mode 100644 research/p104-rank-seven-prefix-bank-bound/replay.py diff --git a/research/p104-rank-seven-prefix-bank-bound/COHORT.md b/research/p104-rank-seven-prefix-bank-bound/COHORT.md new file mode 100644 index 0000000000..a6aa8b88d1 --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/COHORT.md @@ -0,0 +1,102 @@ +# R102 independent metadata preflight + +The exact comparable native witness is [#7334](https://github.com/CrocSwap/integer-mult-bounds/pull/7334) +`aaeec8c0acf01e99a5f331ef363a698d9c084ace`, κ `0.00364665195644`, +with signed [#7113](https://github.com/CrocSwap/integer-mult-bounds/pull/7113) +`07a76c5e2738882c0cb322278e56f6cae3c9885d`. This preflight only +reads the inherited exact 1,101-helper census for +[#7314](https://github.com/CrocSwap/integer-mult-bounds/pull/7314) +`9d0119eb12fbd9fa534b48cd37b68e7099757b91`, the #7334 changed-role +certificate, the independently admitted invoice, and the #7334 +constructor source. The constructor deep-copies the old word, replaces +only `program`, and checks restoration to the original final chart +array and all owned erasures. The frame and endpoint metadata therefore +transfer. The exact constructor SHA-256 is +`ecb39578063d7f09153a85370a3b9bb7cbf8b36ff9891033a1cce7a2fe7fda`. +The #7334 native word was neither opened nor decoded here. + +## Cohort and price stock + +Of 19 productive rank-seven helpers, the guard excludes role 1355, +leaving 18 in 11 exact ordered endpoint cohorts. Chart 602→127 is the +unique largest group, with roles **1457, 1458, 1474, 1475, 1476**. +The next-largest groups, chart 252→127, 462→127 and 603→127, each +have two. The complete invoice independently counts 323 rank-seven +target occurrences, exactly 19×17. + +The old census measured each productive rank as the difference +between dimensions of strictly nested endpoint spans. Ambient chart +rank is at most nine, and productive rank nine on chart 3→127 forces +dim(3)=0 and dim(127)=9. The rank-seven cohort at chart 602→127 +therefore has dim(602)=2. A 3+4 split cuts at absolute rank five +and a 4+3 split at rank six. In the rank-seven quotient there are +11,811 abstract subspaces of each required dimension, before +restricting to signed catalogue labels, actual occupancy and exact +support. This count does not certify any candidate. + +Grant at most one split per distinct old productive role, even if a +role can be used at multiple clocks or both cut ranks. The optimistic +compatibility cap is five edits, corresponding to at most 85 +replaced rank-seven occurrences across the 17 copies. One edit +changes the complete histogram by ΔT = {3:+17, 4:+17, 7:−17}, +ΔP = {}, with no empty-root credit and conserved signed rank mass. +Even before checking support, five times the per-edit directed +upper bounds the family. Actual compatible edits still require +two-sided support, signed arbitrary-input action and complete +setup/routing/ownership/restoration/precision/tape pricing. + +The exact [chart-207 study #7339](https://github.com/CrocSwap/integer-mult-bounds/pull/7339) +targets a rank-nine chart 3→127 root at an absolute rank-eight cut +near the helper-319 retimed block. R96 targets the rank-eight +chart 3→245 cohort at an absolute rank-four cut, with a 4+4 split. +This family changes the old endpoint class, split ranks, and +intermediate ranks. The common fixed-paid two-sided support +method is inherited. + +## Metadata replay + +From this package directory with CPython 3.12: + +```sh +python3.12 -I -B - <<'PY' +from collections import defaultdict +from gzip import decompress +from hashlib import sha256 +from json import loads +from pathlib import Path + +pins = { + "7314-HELPERS.json": "bf353b3e05d0bf5fe3e49c15673c4cb9203251329bd594009303541cf7fecc09", + "7334-CHANGED.json": "f4d3f6ca2d87f8cd68c01ac9f77b69bd5a796f92bd567cea8afe3ac7c72e8e4b", + "ADMITTED.json": "c95300e9bca27e44a25c82d794f88cbf70757c142806b0e4c590ea29feb81a13", + "READBACK.json": "337668788fb39ec9575887f9c5faf438a880471f78d936357dabf7deeac5de82", +} +data = {} +for name, expected in pins.items(): + path = Path("inputs") / name + raw = decompress(path.with_suffix(".json.gz").read_bytes()) if name == "7314-HELPERS.json" else path.read_bytes() + assert sha256(raw).hexdigest() == expected, name + data[name] = loads(raw) +h, x, a, b = data.values() +assert h["head"] == "9d0119eb12fbd9fa534b48cd37b68e7099757b91" +assert a["head"] == b["head"] == "aaeec8c0acf01e99a5f331ef363a698d9c084ace" +assert h["caller_head"] == a["caller"] == b["caller_head"] == "07a76c5e2738882c0cb322278e56f6cae3c9885d" +assert h["complete"] and len(h["rows"]) == len({r["role"] for r in h["rows"]}) == 1101 +assert a["exit"] == 0 and b["copies"] == 17 and not b["empty_root_credits"] +assert a["inputs"]["WORD.json.gz"] == "4b9fd1187b34ed97c3ac0c760d73531735a5d0ebc5b4d4ab4377160b20d9bb2a" +assert x["word_sha256"][1] == "9aa8d6b054ba7eb2289d052c1079b16be518d2f0fbfb244569fa18e3733acdac" +assert len(x["roles"]) == len(set(x["roles"])) == 14 +protected = set(x["roles"]) | {863, 1355, 1531, 1567, 1568} +groups = defaultdict(list) +rank_seven = [r for r in h["rows"] if r["old_productive_rank"] == 7] +assert len(rank_seven) == 19 and b["targets"]["7"] == 17 * len(rank_seven) +assert [r["role"] for r in rank_seven if r["role"] in protected] == [1355] +for r in rank_seven: + if r["role"] not in protected: + groups[r["initial"], r["final"]].append(r["role"]) +assert groups[602, 127] == [1457, 1458, 1474, 1475, 1476] +assert sorted(map(len, groups.values()), reverse=True) == [5,2,2,2,1,1,1,1,1,1,1] +assert any((r["initial"], r["final"], r["old_productive_rank"]) == (3,127,9) for r in h["rows"]) +print("PASS_R102_COHORT roles=1457,1458,1474,1475,1476 eligible_rank7=18 groups=11") +PY +``` diff --git a/research/p104-rank-seven-prefix-bank-bound/LOCAL-PINS.json b/research/p104-rank-seven-prefix-bank-bound/LOCAL-PINS.json new file mode 100644 index 0000000000..92b5d101ce --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/LOCAL-PINS.json @@ -0,0 +1,24 @@ +{ + "PROVENANCE.json": "ccfa38b1f7095bd5a3db5e04d8f18727ad38fc550224c9cafa4d4aa99de28713", + "engines/independent/r102_prefix.py": "505eca6677cc4e905494bdbf027d23c7ad288aa26889443db5d99d3ec41488f5", + "engines/independent/second_prime.py": "21dbd96192e1f60c00ceddba01a7e8d0ddd7d6ad7da4ad3ed22ef2e47cc589c4", + "engines/independent/verify.py": "79bcc7d741f3e0c791901cda3a4c859296affbc84c55cde3c1bb271225ba8aae", + "engines/r102/geometry.py": "dba4588b3360ab9fc162736b5933b208e6c1395fd172a9d8cf0114247beb60d9", + "engines/r102/prefix.py": "7a29fb100262030ebb1601a2eec0a5f021bf92c0a0bc28d1445e9cfbf0e2e7d3", + "engines/r102/quote.py": "a60e221ebf42995dd285ed8b1c0c30016657cb34fd16d933089fab86d8c67c9e", + "engines/r105/alias_rank_seven.py": "64163173dbfa26637a319d2ae1b2f8602b053526c5d4e4c065b84d8d862301f7", + "engines/r105/freeze_support.py": "8d2ab192d4863f7895b0a6ce69f34bd0c03c590b5541064b909e7d3ba41dc4b8", + "engines/r105/modular_support.py": "7c5dc578e846f3509aea9637d5b378b15c926a35d6b6cd78c2f5ac488f5ea66d", + "inputs/7314-HELPERS.json.gz": "e817ac36ffd85b5b8ad7320daf57bedfa5692b4a0f2990570008afe4888bca6d", + "inputs/7334-CHANGED.json": "f4d3f6ca2d87f8cd68c01ac9f77b69bd5a796f92bd567cea8afe3ac7c72e8e4b", + "inputs/7334-WORD.json.gz": "4b9fd1187b34ed97c3ac0c760d73531735a5d0ebc5b4d4ab4377160b20d9bb2a", + "inputs/ADMITTED.json": "c95300e9bca27e44a25c82d794f88cbf70757c142806b0e4c590ea29feb81a13", + "inputs/PR7319-SHA256.json": "ca3ed296a19bdd7b2b37608e93d1763d97c7620ac9faef732a01bae4f485114c", + "inputs/READBACK.json": "337668788fb39ec9575887f9c5faf438a880471f78d936357dabf7deeac5de82", + "inputs/exterior_rank56.py": "9fceafc627fe3781bcb8d5229eaefebc557de613f0d4723aa1d36ce4ab9954ac", + "inputs/pricing.py": "f4d0b6c9314b838d882d6d06020f24881c19a3fda97a7c00df87b1e920785182", + "inputs/reverse_engine.py": "751d5d0c4c665c8768ff69bcf939700d3be2f989c59f09af3a4aa14d3c1ebbc4", + "receipts/RECONCILED.json": "fa7b8bba9ae88cb6d66b41b1e28d70d46289e1853da9c8f8f1b52071eb8159bc", + "receipts/SHA256.json": "a4fe2ea47920e3548bc8eabca34f69a60e2dcde3da6c650d9138e255d9fde4d2", + "replay.py": "7ff83be28b29af51fe812581cc97ef4d8aea771a57f98fd9e8427b009a8dade4" +} diff --git a/research/p104-rank-seven-prefix-bank-bound/NOTICE b/research/p104-rank-seven-prefix-bank-bound/NOTICE new file mode 100644 index 0000000000..708dc8941f --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/NOTICE @@ -0,0 +1,7 @@ +Apache-2.0. + +#7334 supplies the exact native word, #7113 the signed caller, #7314 +and #7319 the inherited helper census, and #7338 and #7298 the +admitted invoice and directed tariff. #5718 and #6040 supply the +chart-602 lineage. #7363 supplies the distinct rank-eight exterior +method. OpenAI Codex and subagents materially assisted. diff --git a/research/p104-rank-seven-prefix-bank-bound/PROOF.md b/research/p104-rank-seven-prefix-bank-bound/PROOF.md new file mode 100644 index 0000000000..0217e0057f --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/PROOF.md @@ -0,0 +1,76 @@ +# Fixed-paid rank-seven cochart proof + +The exact #7334 constructor preserves the original endpoint charts and +frame catalogue. The independently reproduced #7314 helper census and +the guarded #7334 changed-role certificate identify the chart 602→127 +cohort as roles 1457, 1458, 1474, 1475 and 1476. The endpoint chart ranks +are two and nine. An intermediate rank-five chart gives 3+4 and +rank six gives 4+3. Replaying all 76,466 native events finds five +eligible rank-six charts and 65 occupied-bank representatives with +a cohort pivot. There is no eligible rank-five bank in this exact +catalogue and itinerary. The independently reconstructed reverse +walk validates every frozen public and owned bank and its pivots. +A key `[cut,chart]` uses the state after exactly `cut` literal events. + +## Direct exterior exclusions + +Let (P) be the matrix of normalized input prefix rows of the +public roles in the bank and let (E) project input coordinates to +the complement of the five-role cohort. A nonzero pure public-bank +prefix would require a nonzero row (a) with (aPE=0). Thus a +nonzero full-row-rank minor of (PE) excludes that bank. The signed +native coefficients are reduced only after the engines verify unit +denominators for their respective primes, 65521 and 65537. Each +nonzero modular determinant implies a nonzero rational determinant. +Both engines reconstruct the same public and owned occupancy and +verify 16 original and 16 continuation exclusions. No suffix or +rational pairing is necessary for those 32 direct prefix exclusions. + +## Transfer through an unchanged bank + +For adjacent frozen keys in the same chart, both chronology engines +verify equal public, owned and pivot sets and inspect every intervening +literal event. A MOVE incident to the bank, owner initialization or +erasure, COPY, or public/owned ADD mixing blocks the conservative +transfer. A signed nonzero SCALE is invertible. A public ADD whose +two distinct public roles are both in the unchanged bank is an +invertible elementary row update. Owned-only ADD or SCALE and +events disjoint from the bank leave its public rows fixed. + +Consequently, across a proved link the public prefix rows satisfy +(P_{2}=UP_{1}) with (U) invertible over the rationals. For the +same exterior coordinate columns, the square minor is multiplied +by (det U), so nonzero rank certificates transfer in either +direction. Transfer requires no new arithmetic support query. The +60 adjacent links yield 20 proved edges and 45 components. Each +certified edge spans one literal event, and chains compose these +edges. A separate fixed-public-row diagnostic found no additional +links. No cross-chart transfer was claimed. + +Sixteen original directly checked components contain nine extra +keys. The next 16 selected components contain eleven more extra keys. +Their selection takes the widest previously unresolved public bank +first within each chart, round-robin across the five charts, with +the earliest cut breaking ties. Thus the two bounded stages exclude +16 + 9 + 16 + 11 = 52 of 65 keys. The exact remaining 13 singleton +keys were outside the second support cap. No κ improvement follows +from these exclusions and no signed physical candidate was built. + +## Directed complete cost + +The unchanged exact native and caller ledger has 110,519 paid and +22,461 productive positions, rank surplus 1,424, and zero empty +credit. The speculative one-edit delta is +ΔT = {3:+17, 4:+17, 7:−17}, ΔP = {}. It retains the signed rank +surplus and would make 22,478 productive positions. Its direct credit +is (17(3^{1-kappa}+4^{1-kappa}-7^{1-kappa})). One edit per +distinct old productive helper bounds the family even when all five +edits are granted compatibility and free ancillary work. The +directed one-edit upper at the incumbent crossing upper is about +0.294636248924991 raw, the five-edit upper about 1.473181244624955, +and the relaxed complete margin upper at κ = 0.0040075385047236 is +about −138.148881688689. An additional raw paid rank-one position +overruns the one-edit margin. Native all-column action, owned erasure, +compiler, precision/tape and analytic recovery remain inherited +comparator premises. No new routing, compiler or tape contract is +asserted here. diff --git a/research/p104-rank-seven-prefix-bank-bound/PROVENANCE.json b/research/p104-rank-seven-prefix-bank-bound/PROVENANCE.json new file mode 100644 index 0000000000..1e1294f097 --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/PROVENANCE.json @@ -0,0 +1,61 @@ +{ + "derived_inputs": { + "inputs/7314-HELPERS.json.gz": { + "compression": "gzip", + "keys": [ + "REVERSE.json" + ], + "receipt": "inputs/PR7319-SHA256.json" + }, + "inputs/7334-CHANGED.json": { + "keys": [ + "receipt", + "peer-prep/IDENTITIES.json" + ], + "receipt": "inputs/ADMITTED.json" + } + }, + "files": { + "inputs/7334-WORD.json.gz": { + "commit": "aaeec8c0acf01e99a5f331ef363a698d9c084ace", + "git_blob": "73f43007192eb5a38eb5abb591b871df3e52c7cd", + "path": "research/p104-helper-319-fused-return/WORD.json.gz", + "sha256": "4b9fd1187b34ed97c3ac0c760d73531735a5d0ebc5b4d4ab4377160b20d9bb2a", + "source": "https://github.com/Clear1nsight/integer-mult-bounds/blob/aaeec8c0acf01e99a5f331ef363a698d9c084ace/research/p104-helper-319-fused-return/WORD.json.gz", + "uncompress": false + }, + "inputs/ADMITTED.json": { + "commit": "349996445176e934ffb3c76813adcd230ca8f783", + "git_blob": "464c89e45c4eca230c099e8bac784a90200a5069", + "path": "research/p104-compensated-fusion-readout-bound/inputs/ADMITTED.json", + "sha256": "c95300e9bca27e44a25c82d794f88cbf70757c142806b0e4c590ea29feb81a13", + "source": "https://github.com/CrocSwap/integer-mult-bounds/blob/349996445176e934ffb3c76813adcd230ca8f783/research/p104-compensated-fusion-readout-bound/inputs/ADMITTED.json", + "uncompress": false + }, + "inputs/PR7319-SHA256.json": { + "commit": "b2d3bc4dd584f8d3aacd244505b12286db4d4875", + "git_blob": "3a28905e8d69888617b56578761c16d39fcdf7a6", + "path": "research/p104-helper-entrance-first-contact-bound/receipts/SHA256.json", + "sha256": "ca3ed296a19bdd7b2b37608e93d1763d97c7620ac9faef732a01bae4f485114c", + "source": "https://github.com/CrocSwap/integer-mult-bounds/blob/b2d3bc4dd584f8d3aacd244505b12286db4d4875/research/p104-helper-entrance-first-contact-bound/receipts/SHA256.json", + "uncompress": false + }, + "inputs/READBACK.json": { + "commit": "349996445176e934ffb3c76813adcd230ca8f783", + "git_blob": "625b508eead24b4428253bd257620b7e775800c1", + "path": "research/p104-compensated-fusion-readout-bound/price/READBACK.json", + "sha256": "337668788fb39ec9575887f9c5faf438a880471f78d936357dabf7deeac5de82", + "source": "https://github.com/CrocSwap/integer-mult-bounds/blob/349996445176e934ffb3c76813adcd230ca8f783/research/p104-compensated-fusion-readout-bound/price/READBACK.json", + "uncompress": false + }, + "inputs/pricing.py": { + "commit": "c522451caf287bb3c16eaece72be4c263315dca4", + "git_blob": "40ec194017bda1d524bba4f07b188c53281419d0", + "path": "research/adjacent-owned-add-exchange-bound/pricing.py", + "sha256": "f4d0b6c9314b838d882d6d06020f24881c19a3fda97a7c00df87b1e920785182", + "source": "https://github.com/CrocSwap/integer-mult-bounds/blob/c522451caf287bb3c16eaece72be4c263315dca4/research/adjacent-owned-add-exchange-bound/pricing.py", + "uncompress": false + } + }, + "schema_version": 1 +} diff --git a/research/p104-rank-seven-prefix-bank-bound/README.md b/research/p104-rank-seven-prefix-bank-bound/README.md new file mode 100644 index 0000000000..8260b8bf78 --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/README.md @@ -0,0 +1,72 @@ +# Fixed-paid rank-seven prefix exclusions on chart 602→127 + +**NO VERIFIED GAIN.** Exact Δκ = 0, a 0% change from conditional +κ = `0.00364665195644` on independently reproduced +[#7334](https://github.com/CrocSwap/integer-mult-bounds/pull/7334) +head `aaeec8c0acf01e99a5f331ef363a698d9c084ace), with signed +[#7113](https://github.com/CrocSwap/integer-mult-bounds/pull/7113) +head `07a76c5e2738882c0cb322278e56f6cae3c9885d`. + +The proposed fixed-paid change splits one of five rank-seven productive +targets into 3+4 or 4+3 at an existing intermediate chart. Exhaustive +geometry finds 65 occupied rank-six bank keys on five charts and zero +eligible rank-five keys. Two exact prime-field engines agree on 32 +direct exterior-prefix exclusions. Independent literal continuity +replay transfers those exclusions to 20 additional keys, for **52 +excluded and 13 unresolved**. All unresolved keys are singletons in +the proved equivalence partition. [Exact key receipt](receipts/RECONCILED.json). + +The fixed paid bill has 110,519 positions across 17 signed caller +copies. The relaxed directed upper is 0.294636248924991 raw units +per edit, or 1.473181244624955 across five distinct targets if all +can coexist. One new paid rank-one position defeats a single edit. +[Proof and price](PROOF.md). + +## Replay + +From a clean checkout, use CPython 3.12 with assertions enabled: + +```sh +python3.12 -I -B research/p104-rank-seven-prefix-bank-bound/replay.py +``` + +The replay authenticates the native word and the inherited helper +census, rebuilds the directed price and full geometry, checks both +primes for the two frozen 16-key sets, and reconstructs all 60 adjacent +links in both directions. It rejects altered price and word inputs +and reproduces the exact 65-key disposition. Use `--out fresh-directory` +to retain all ten receipts. The standard-library replay needs no Git +metadata, network, external root or prior temporary state. +[Source provenance](PROVENANCE.json) · [Path-keyed pins](LOCAL-PINS.json) · +[Receipt hashes](receipts/SHA256.json) · [Cohort preflight](COHORT.md). + +## Open next questions + +Test exactly the 13 unresolved keys from the reconciliation in one +25-second two-sided modular pass. If both sides drop rank, choose at +most four exact rational pairing tests under a 35-second cap and +preserve any remaining keys. A pair that survives still requires +signed arbitrary-input forward and adjoint action, ownership, +restoration, compiler, precision and tape checks, complete repricing +and independent caller and outer replay. The package tested the +fixed public bank and the existing chart catalogue on the pinned +word. + +## Credit + +[#7334](https://github.com/CrocSwap/integer-mult-bounds/pull/7334) +supplies the exact current word and comparable result, and +[#7113](https://github.com/CrocSwap/integer-mult-bounds/pull/7113) +the signed caller. [#7314](https://github.com/CrocSwap/integer-mult-bounds/pull/7314) +supplies the parent native word. [#7319](https://github.com/CrocSwap/integer-mult-bounds/pull/7319) +supplies the independent helper census. [#7338](https://github.com/CrocSwap/integer-mult-bounds/pull/7338) +supplies the independently admitted price inputs and +[#7298](https://github.com/CrocSwap/integer-mult-bounds/pull/7298) +the directed tariff. [#5718](https://github.com/CrocSwap/integer-mult-bounds/pull/5718) +uses chart 602 as a productive insertion in an older rank-nine +construction, and [#6040](https://github.com/CrocSwap/integer-mult-bounds/pull/6040) +reproduces that calibration and tests a later older-word domain. +[#7363](https://github.com/CrocSwap/integer-mult-bounds/pull/7363) +supplies the exact-word modular exterior method for a distinct +rank-eight cohort. OpenAI Codex and subagents materially assisted +proof, implementation, independent verification and packaging. diff --git a/research/p104-rank-seven-prefix-bank-bound/SOURCES.json b/research/p104-rank-seven-prefix-bank-bound/SOURCES.json new file mode 100644 index 0000000000..e8c2f265cd --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/SOURCES.json @@ -0,0 +1,18 @@ +{ + "base_commit": "e54523517d0f03e58352e647c403a5af3e525a57", + "files": [ + { + "git_blob": "75d77b328ea02ded535e7f23aee5b1e55d0bb1a8", + "path": "certificates/selected-result.json", + "sha256": "154c3d30455d778fd3343b6b4851f0fa4665f0f7625b0adb3675e2bafbbf6bf1", + "usage": "provenance" + }, + { + "git_blob": "3404fbdd5e7529a0674eef26114b5071e4586cec", + "path": "docs/research/agent-task-catalog.json", + "sha256": "ead6cdc9d0af6d58e8a49744d8ec8c7c15e13d2ba93c276c434bcf9b51b93a81", + "usage": "provenance" + } + ], + "schema_version": 1 +} diff --git a/research/p104-rank-seven-prefix-bank-bound/TASK.json b/research/p104-rank-seven-prefix-bank-bound/TASK.json new file mode 100644 index 0000000000..2479cbb746 --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/TASK.json @@ -0,0 +1,117 @@ +{ + "actual_scope": "On exact #7334, test fixed-paid rank-seven 3+4 or 4+3 splits for the five chart602\u2192127 helpers and 65 original frozen public-bank keys.", + "ai_assistance": "OpenAI Codex and subagents materially assisted proof, implementation, independent verification and packaging.", + "author": "P104 rank-seven split research", + "base_commit": "e54523517d0f03e58352e647c403a5af3e525a57", + "bottleneck_link": "A fixed-paid productive split has positive relaxed complete cost only if exact cochart prefix and suffix support can supply a unit pair while keeping the signed caller and supplier contract.", + "budget_minutes": 15, + "evidence": "Two primes agree on 32 direct prefix exclusions. Two literal chronology engines agree on 60 adjacent links and transfer exclusions to 20 more keys. The exact 52 exclusions and 13 remaining singleton keys are reconciled.", + "open_questions": [ + { + "blocked_by": "Both exterior kernels and compatible rational pairing are required. A survivor also needs physical signed assembly, full cost, and complete replay.", + "first_step": "Replay exactly the 13 unresolved keys from receipts/RECONCILED.json in a 25-second two-sided modular gate and take up to four dual drops to a 35-second exact gate.", + "question": "Can one of the 13 remaining singleton banks admit two-sided pure support and an exact unit pair?", + "why_it_matters": "A valid 3+4 or 4+3 split can improve the complete directed complex invoice with every paid position held fixed." + } + ], + "original_card": { + "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.", + "allowed_variations": [ + "One exact source head, helper/cut region or quantified proposition and changed hypothesis; check live handoffs first. Different seeds are not different scopes." + ], + "bottleneck_link": "Judge the actual current supplier contract and complete signed target/paid bill; frozen-profile ceilings require an applicability proof.", + "existing_checks": [ + { + "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.", + "scope": "PR #4133: literal-slot defect", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129", + "source_commit": "88666f1dee93fbd85b31fd5d6f91a219e111b5f4", + "status": "author-checked" + }, + { + "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.", + "scope": "PR #4136: uniform commutation gap", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129", + "source_commit": "281ce601a8be9db470de630759179c23e1dfaa88", + "status": "author-checked" + }, + { + "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.", + "scope": "PR #4140: uniform encoding gap", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129", + "source_commit": "de25c6525aa866962309df5d107b32d55e6e5628", + "status": "author-checked" + }, + { + "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.", + "scope": "PR #4153: source-chart shortcut exhausts its optimistic allowance", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129", + "source_commit": "9123241fea53df77e51ffe30d9aca1625d4bf3a8", + "status": "author-checked" + }, + { + "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.", + "scope": "PR #4154: fiber-tag seam mismatch", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129", + "source_commit": "4ffcdaee5d6255a9cea1fe53a5424435068089d0", + "status": "author-checked" + }, + { + "evidence": "docs/research/pr-intake-evidence/pr5599-completion/PROOF-REVIEW.md", + "remaining": "The next experiment must identify uncovered source-specific work. Successor archive intake does not transfer this admission.", + "scope": "Selected PR5599: complete helper-subspace construction and independent caller replay; five framework assumptions remain.", + "selected_record_sha256": "2a0220e866417774606e0f991e41b9c1d26b1f43b97857238cf478dbc7d330b5", + "source_commit": "09dd0965711ca7eeb169057a420abab1c9052137", + "status": "reviewed" + } + ], + "first_experiment": "Start with the selected #5599 emitted word and review pending #5718 distinct input/output bases plus #5717/#5719 coverage before claiming work. Pick one uncovered source word, helper group and cut region. Prove the arbitrary-input relation and legal entry/exit corrections, then compare full target and paid profiles. Reject if completion, owned lifetimes or consumer costs repay the gain. A static pairing rank alone is not a physical split.", + "first_step": { + "command": [ + "python3", + "-B", + "scripts/research_selected_baseline.py" + ], + "expected": "PASS_RESEARCH_BASELINE_BINDINGS_ONLY", + "inspect": "Read revision 8, the selected review and live exact-source handoffs. Then follow this card's bounded first_experiment.", + "scope": "Source-bound orientation only, not a supplier replay or theorem proof." + }, + "id": "p104-side-correction", + "methods": [ + "Construct and independently check one source-bound instance of the stated first experiment.", + "Seek an exact counterexample or target-specific complete-budget obstruction to that same proposed change." + ], + "overlap_terms": [ + "P104", + "helper basis", + "helper split", + "5718", + "dyadic capacity" + ], + "question": "Can joint helper bases and a legal causal split improve the complete P104 productive/paid invoice?", + "scope_change_triggers": [ + "Changing source head, helper/cut domain, operation alphabet or caller boundary without recording the new scope.", + "Treating an archived proposal or local numerical pass as complete supplier admission." + ], + "starting_points": [ + "docs/research/current-priorities.md", + "docs/research/research-family-status.md", + "certificates/selected-result.json", + "docs/research/pr-intake-evidence/pr5599-completion/PROOF-REVIEW.md", + "research/p104-helper-subspace-splits/README.md", + "research/dyadic-helper-channel-capacity/README.md" + ] + }, + "outcome": "negative-result", + "priority_revision": 8, + "schema_version": 1, + "scope_change_reason": "Use the distinct chart602\u2192127 endpoint group and rank-five/rank-six intermediate classes. Reuse exact prefix minors only through proved literal bank equivalence.", + "scope_status": "changed", + "stop_rule": "One 76,466-event geometry pass, up to 65 frozen alias keys in 20 seconds, and two separately frozen sets of 16 modular prefix keys in 25 seconds per gate. No suffix or exact pair test for full-prefix-rank exclusions.", + "task_id": "p104-side-correction" +} diff --git a/research/p104-rank-seven-prefix-bank-bound/VERIFY.json b/research/p104-rank-seven-prefix-bank-bound/VERIFY.json new file mode 100644 index 0000000000..1e422d55a1 --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/VERIFY.json @@ -0,0 +1,19 @@ +{ + "commands": [ + { + "argv": [ + "{python}", + "-I", + "-B", + "{package}/replay.py" + ], + "checks": "Authenticate exact inputs, reproduce price and complete geometry, independent bounded prefix checks at both primes, literal alias classification and all 65 key dispositions, and changed-input rejection.", + "timeout_seconds": 180 + } + ], + "inputs": [], + "python": "3.12", + "requirements": [], + "schema_version": 1, + "status": "ready" +} diff --git a/research/p104-rank-seven-prefix-bank-bound/engines/independent/r102_prefix.py b/research/p104-rank-seven-prefix-bank-bound/engines/independent/r102_prefix.py new file mode 100644 index 0000000000..4299e0810a --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/engines/independent/r102_prefix.py @@ -0,0 +1,163 @@ +"""Verify only the 16 frozen R102 prefix keys at a second exact prime.""" +from argparse import ArgumentParser +from collections import Counter, defaultdict +from gzip import decompress +from hashlib import sha256 +from json import dumps, loads +from pathlib import Path +from runpy import run_path +from signal import SIGALRM, alarm, signal +from time import monotonic +import sys + +ROOT = Path(__file__).resolve().parent +HEAD = "aaeec8c0acf01e99a5f331ef363a698d9c084ace" +CALLER = "07a76c5e2738882c0cb322278e56f6cae3c9885d" +WORD = "4b9fd1187b34ed97c3ac0c760d73531735a5d0ebc5b4d4ab4377160b20d9bb2a" +PAYLOAD = "9aa8d6b054ba7eb2289d052c1079b16be518d2f0fbfb244569fa18e3733acdac" +PINS = { + "inputs/PRICE.json": "4e0d6436eb4fc6a9dfa34c05ba98aacc63e3a8bf7214145dd9f9254763c5a13e", + "inputs/GEOMETRY.json": "2d0dee60998d168d2eff4c16794176c5ec3b4d18ffa8bde247602035f1b68129", + "inputs/PREFIX.json": "65c11b0a42092557fe1c64b4feb2f61e2d16c636cfcaddf7f95ec09dbdd27452", + "inputs/7334-WORD.json.gz": WORD, + "inputs/second_prime.py": "21dbd96192e1f60c00ceddba01a7e8d0ddd7d6ad7da4ad3ed22ef2e47cc589c4", +} +PRIME, CAP, SECONDS, EVENTS = 65537, 16, 25, 76466 + + +def unique(items): + result = dict(items) + if len(result) != len(items): + raise ValueError("duplicate JSON key") + return result + + +def pinned(root, name): + raw = (root / name).read_bytes() + if sha256(raw).hexdigest() != PINS[name]: + raise ValueError(f"changed dependency: {name}") + return raw + + +def freeze(raw): + price, geom, primary = [loads(raw[f"inputs/{name}.json"], object_pairs_hook=unique) + for name in ("PRICE", "GEOMETRY", "PREFIX")] + assert price["head"] == geom["head"] == primary["head"] == HEAD + assert price["caller"] == CALLER and price["word_sha256"] == geom["word_sha256"] == WORD + assert geom["price_sha256"] == primary["pins"]["lead/PRICE.json"] == PINS["inputs/PRICE.json"] + assert primary["pins"]["lead/GEOMETRY.json"] == PINS["inputs/GEOMETRY.json"] + assert primary["pins"]["inputs/7334-WORD.json.gz"] == WORD + assert geom["status"] == "EXHAUSTED" and geom["visited_events"] == primary["event_count"] == EVENTS + assert geom["bank_cap"] == price["support_cap"] == primary["case_cap"] == CAP + assert primary["runner_seconds"] == price["support_runner_seconds"] == SECONDS + assert geom["ranks"] == price["cut_ranks"] == [5, 6] and price["endpoint_charts"] == [602, 127] + assert primary["counts"] == {"excluded": CAP} and not primary["unvisited"] + cohort = set(price["cohort"]) + assert cohort == {1457, 1458, 1474, 1475, 1476} + selected = {tuple(row["key"]): row for row in geom["selected"]} + assert len(selected) == len(geom["selected"]) == CAP + earlier = {tuple(row["key"]): row for row in primary["rows"]} + assert list(selected) == list(earlier) + unselected = list(map(tuple, geom["unvisited_keys"])) + assert list(map(tuple, primary["unselected"])) == unselected and len(set(unselected)) == 49 + assert set(unselected).isdisjoint(selected) and len(geom["all_representative_keys"]) == 65 + assert set(unselected) | selected.keys() == set(map(tuple, geom["all_representative_keys"])) + for key in selected: + a, b = selected[key], earlier[key] + assert all(a[field] == b[field] for field in ("public", "owned", "pivots")) + assert b["exterior_rank"] == len(a["public"]) and b["determinant"] + return cohort, selected, earlier, unselected + + +def sweep(word, cohort, selected, earlier, engine, deadline, progress, results): + n, owned, tape = (word[k] for k in ("public", "owned_fields", "program")) + assert (n, owned, len(tape)) == (1501, 68, EVENTS) + assert all((word["initial"][r], word["final"][r]) == (602, 127) for r in cohort) + frames = word["frames"] + span = engine["span"] + low, high = span(frames[602]), span(frames[127]) + assert len(low) == 4 and len(high) == 512 and low < high + requests = defaultdict(list) + for cut, chart in selected: + assert 0 <= cut <= EVENTS and len(frames[chart]) in (5, 6) and low < span(frames[chart]) < high + requests[cut].append(chart) + + active = word["initial"] + [None] * owned + vectors = [{r: 1} for r in range(n)] + [None] * owned + fresh, denoms = set(), set() + progress.update(events=0, first_unvisited_cut=0) + for cut in range(EVENTS + 1): + progress["first_unvisited_cut"] = cut + if (cut % 128 == 0 or cut in requests) and monotonic() >= deadline: + break + for chart in requests.get(cut, ()): + key = cut, chart + bank = [r for r in range(n) if active[r] == chart] + owners = [r for r in range(n, n + owned) if active[r] == chart] + pivots = sorted(set(bank) & cohort) + assert pivots and bank == selected[key]["public"] and owners == selected[key]["owned"] + assert pivots == selected[key]["pivots"] + if cut: + last = tape[cut - 1] + assert chart in (last[2:4] if last[0] == "MOVE" else last[-1:]) + proof = engine["classify"](bank, vectors, cohort) + primary_columns = earlier[key]["columns"] + assert len(primary_columns) == len(set(primary_columns)) == len(bank) + assert cohort.isdisjoint(primary_columns) + determinant = engine["verify_minor"]([vectors[r] for r in bank], primary_columns) + results[key] = dict(key=key, chart_rank=len(frames[chart]), public=bank, owned=owners, pivots=pivots, + independent_minor=proof, primary_minor_axes=primary_columns, + primary_minor_det_mod_65537=determinant, + disposition="excluded" if not proof["kernel"] else "modular_rank_drop") + if cut == EVENTS: + assert active == word["final"] + [None] * owned and not fresh + assert len(results) == CAP + progress["first_unvisited_cut"] = None + break + engine["apply"](tape[cut], active, vectors, fresh, n, denoms, False) + progress["events"] += 1 + progress["denominator_units"] = sorted(denoms) + + +def main(): + parser = ArgumentParser(description=__doc__) + parser.add_argument("--root", type=Path, default=ROOT) + args = parser.parse_args() + assert __debug__ and sys.version_info[:2] == (3, 12) + + def stop(*_): + raise TimeoutError("hard 25-second cap") + + signal(SIGALRM, stop) + alarm(SECONDS) + deadline = monotonic() + SECONDS - 2 + selected, unselected, result, progress, checks = {}, [], {}, {}, [] + timeout = None + try: + raw = {rel: pinned(args.root, rel) for rel in PINS} + cohort, selected, earlier, unselected = freeze(raw) + engine = run_path(str(args.root / "inputs/second_prime.py")) + assert engine["PRIME"] == PRIME + checks = engine["controls"]() + payload = decompress(raw["inputs/7334-WORD.json.gz"]) + assert sha256(payload).hexdigest() == PAYLOAD + word = loads(payload, object_pairs_hook=unique) + sweep(word, cohort, selected, earlier, engine, deadline, progress, result) + except TimeoutError as error: + timeout = str(error) + finally: + alarm(0) + + rows = [result[k] for k in selected if k in result] + visited_all = timeout is None and progress.get("first_unvisited_cut", 0) is None + agreement = visited_all and all(row["disposition"] == "excluded" for row in rows) + print(dumps(dict(head=HEAD, caller=CALLER, pins=PINS, modulus=PRIME, cap_cases=CAP, cap_seconds=SECONDS, + progress=progress, controls=checks, complete=visited_all, primary_agreement=agreement, timeout=timeout, + counts=Counter(row["disposition"] for row in rows), rows=rows, + unvisited_selected=[k for k in selected if k not in result], unselected=unselected), indent=2, sort_keys=True)) + if not agreement: + raise SystemExit(2) + + +if __name__ == "__main__": + main() diff --git a/research/p104-rank-seven-prefix-bank-bound/engines/independent/second_prime.py b/research/p104-rank-seven-prefix-bank-bound/engines/independent/second_prime.py new file mode 100644 index 0000000000..0be5407fe6 --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/engines/independent/second_prime.py @@ -0,0 +1,339 @@ +"""Independently verify R97's 310 frozen R96 bank keys modulo 65537.""" + +from argparse import ArgumentParser +from collections import Counter, defaultdict +from fractions import Fraction +from functools import cache +from gzip import decompress +from hashlib import sha256 +from json import dumps, loads +from math import isqrt +from pathlib import Path +from signal import SIGALRM, alarm, signal +from time import monotonic +import sys + +ROOT = Path(__file__).resolve().parent +HEAD = "aaeec8c0acf01e99a5f331ef363a698d9c084ace" +CALLER = "07a76c5e2738882c0cb322278e56f6cae3c9885d" +WORD = "4b9fd1187b34ed97c3ac0c760d73531735a5d0ebc5b4d4ab4377160b20d9bb2a" +PAYLOAD = "9aa8d6b054ba7eb2289d052c1079b16be518d2f0fbfb244569fa18e3733acdac" +PINS = { + "inputs/PRICE.json": "a78be64c3e3ae8a0e532237c4dd3541aa9ad3fcbbc3c25d79c8a03fb7e07c525", + "inputs/GEOMETRY.json": "c6f9f018df8b58fcdf4f44356bd59bcac6d411b7845104ff4ad372ed4a95cfbd", + "inputs/REMAINING.json": "3597499663a57702856945e91214a65e1d0f94db8643b93c0234c2bbf9291b1a", + "inputs/7334-WORD.json.gz": WORD, +} +PRIME = 65537 +CASES = 310 +SECONDS = 25 +EVENTS = 76466 + + +def unique(items): + data = dict(items) + if len(items) != len(data): + raise ValueError("duplicate JSON key") + return data + + +def authenticate(root): + raw = {} + for rel, expected in PINS.items(): + data = (root / rel).read_bytes() + if sha256(data).hexdigest() != expected: + raise ValueError(f"changed dependency: {rel}") + raw[rel] = data + return raw + + +@cache +def coefficient(value): + q = Fraction(value) + if not q or q.denominator % PRIME == 0: + raise ValueError("zero scalar or denominator divisible by modulus") + return q.numerator * pow(q.denominator, -1, PRIME) % PRIME, q.denominator + + +def axpy(target, source, scale): + if scale: + for role, old in source.items(): + current = (target.get(role, 0) + scale * old) % PRIME + if current: + target[role] = current + else: + target.pop(role, None) + + +def scaled(vector, scale): + return {i: y for i, x in vector.items() if (y := x * scale % PRIME)} + + +def verify_minor(vectors, columns): + """Independently recompute a minor on the original projected rows.""" + matrix = [[row.get(c, 0) for c in columns] for row in vectors] + determinant = 1 + for c in range(len(matrix)): + pivot = next((r for r in range(c, len(matrix)) if matrix[r][c]), None) + if pivot is None: + return 0 + if pivot != c: + matrix[c], matrix[pivot] = matrix[pivot], matrix[c] + determinant = -determinant + diag = matrix[c][c] + determinant = determinant * diag % PRIME + inverse = pow(diag, -1, PRIME) + for r in range(c + 1, len(matrix)): + factor = matrix[r][c] * inverse % PRIME + if factor: + for k in range(c + 1, len(matrix)): + matrix[r][k] = (matrix[r][k] - factor * matrix[c][k]) % PRIME + matrix[r][c] = 0 + return determinant % PRIME + + +def classify(bank, vectors, cohort): + full_rows = [vectors[r] for r in bank] + exterior = [{i: x for i, x in row.items() if i not in cohort} for row in full_rows] + basis, kernel = [], [] + determinant = 1 + for index, vector in enumerate(exterior): + work = vector.copy() + combination = {index: 1} + for col, known, combo in basis: + factor = -work.get(col, 0) + axpy(work, known, factor) + axpy(combination, combo, factor) + if not work: + image = {} + for i, factor in combination.items(): + axpy(image, full_rows[i], factor) + assert image.keys() <= cohort + kernel.append(dict(cut={bank[i]: x for i, x in combination.items()}, endpoint=image)) + continue + col = max(work) + pivot = work[col] + determinant = determinant * pivot % PRIME + inverse = pow(pivot, -1, PRIME) + basis.append((col, scaled(work, inverse), scaled(combination, inverse))) + rank = len(basis) + assert rank + len(kernel) == len(bank) + columns = [col for col, _, _ in basis] + if kernel: + return dict(rank=rank, kernel=kernel, minor_axes=None, determinant=None) + assert columns and verify_minor(exterior, columns) == determinant != 0 + return dict(rank=rank, kernel=[], minor_axes=columns, determinant=determinant) + + +def apply(event, state, vectors, fresh, n, denominators, backward): + op, r, *args = event + current = state[r] + if op == "MOVE": + old, new, owned = args + assert owned == (r >= n) + assert current == (new if backward else old) + state[r] = old if backward else new + fresh.discard(r) + return + if op in ("INIT", "CLEAR"): + assert r >= n + c, = args + entering = (op == "CLEAR") if backward else (op == "INIT") + if entering: + assert current is None and vectors[r] is None + state[r], vectors[r] = c, {} + if not backward: + fresh.add(r) + else: + assert current == c and vectors[r] is not None + state[r] = vectors[r] = None + fresh.discard(r) + return + assert op in ("SCALE", "ADD", "COPY") and current == args[-1] and vectors[r] is not None + factor, denominator = coefficient(args[-2]) + denominators.add(denominator) + if op == "SCALE": + vectors[r] = scaled(vectors[r], factor) + else: + src = args[0] + assert src != r and state[src] == current and vectors[src] is not None + if backward: + axpy(vectors[src], vectors[r], factor) + if op == "COPY": + assert r >= n + vectors[r] = {} + elif op == "COPY": + assert r >= n and r in fresh and not vectors[r] + vectors[r] = scaled(vectors[src], factor) + else: + axpy(vectors[r], vectors[src], factor) + fresh.discard(r) + + +def controls(): + assert all(PRIME % i for i in range(2, isqrt(PRIME) + 1)) + witness = classify([0, 1], [{3: 2, 8: 1}, {3: 3, 8: 4}], set()) + assert witness["minor_axes"] == [8, 3] and witness["determinant"] == PRIME - 5 + dropped = classify([0, 1], [{0: 1, 8: 1}, {1: 1, 8: 1}], {0, 1}) + assert dropped["kernel"] == [dict(cut={0: PRIME - 1, 1: 1}, endpoint={0: PRIME - 1, 1: 1})] + tape = [("ADD", 1, 0, "-3/2", 4), ("SCALE", 0, "2", 4), ("INIT", 2, 4), + ("COPY", 2, 1, "1", 4), ("ADD", 0, 2, "5", 4), ("CLEAR", 2, 4)] + result = [] + for backward in (False, True): + state, vectors, fresh, denoms = [4, 4, None], [{0: 1}, {1: 1}, None], set(), set() + for event in reversed(tape) if backward else tape: + apply(event, state, vectors, fresh, 2, denoms, backward) + assert state == [4, 4, None] and not fresh and denoms == {1, 2} + result.append(vectors) + assert result[0] == [{0: coefficient("-11/2")[0], 1: 5}, {0: coefficient("-3/2")[0], 1: 1}, None] + assert result[1] == [{0: coefficient("-11/2")[0], 1: coefficient("-3/2")[0]}, {0: 5, 1: 1}, None] + try: + coefficient("1/65537") + except ValueError: + pass + else: + raise AssertionError("nonunit denominator admitted") + return ["prime and signed nonzero minor", "planted pure kernel", "owned COPY forward and adjoint", + "nonunit denominator rejection"] + + +def span(frame): + vectors = {0} + for v in frame: + assert v not in vectors + vectors |= {v ^ w for w in vectors} + return vectors + + +def sweep(word, keys, cohort, deadline, result, progress, backward, previous=None): + tape, n, owned = (word[k] for k in ("program", "public", "owned_fields")) + assert (len(tape), n, owned) == (EVENTS, 1501, 68) + origin, target = ("final", "initial") if backward else ("initial", "final") + state = word[origin] + [None] * owned + vectors = [{r: 1} for r in range(n)] + [None] * owned + fresh, denoms = set(), set() + request = defaultdict(list) + frames = word["frames"] + low, high = span(frames[3]), span(frames[245]) + for cut, chart in keys: + assert 0 <= cut <= EVENTS and len(frames[chart]) == 4 and low < span(frames[chart]) < high + request[cut].append(chart) + boundaries = range(EVENTS, -1, -1) if backward else range(EVENTS + 1) + progress.update(events=0, first_unvisited_cut=boundaries.start, denominator_units=[]) + for cut in boundaries: + progress["first_unvisited_cut"] = cut + if (cut % 128 == 0 or cut in request) and monotonic() >= deadline: + break + for chart in request.get(cut, []): + key = (cut, chart) + public_bank = [r for r in range(n) if state[r] == chart] + owned_bank = [r for r in range(n, n + owned) if state[r] == chart] + pivots = sorted(set(public_bank) & cohort) + assert public_bank and pivots + if cut: + event = tape[cut - 1] + assert chart in (event[2:4] if event[0] == "MOVE" else event[-1:]) + bank = dict(public=public_bank, owned=owned_bank, pivots=pivots) + if previous is not None: + assert bank == previous[key]["bank"] + result[key] = dict(bank=bank, **classify(public_bank, vectors, cohort)) + if cut == (0 if backward else EVENTS): + assert state == word[target] + [None] * owned and not fresh + assert set(result) == set(keys) + progress["first_unvisited_cut"] = None + break + apply(tape[cut - 1 if backward else cut], state, vectors, fresh, n, denoms, backward) + progress["events"] += 1 + progress["denominator_units"] = sorted(denoms) + + +def pairing(prefix, suffix): + def dot(left, right): + return sum(v * right.get(i, 0) for i, v in left.items()) % PRIME + + return [[dict(cut=dot(a["cut"], b["cut"]), endpoint=dot(a["endpoint"], b["endpoint"])) + for b in suffix["kernel"]] for a in prefix["kernel"]] + + +def main(): + parser = ArgumentParser(description=__doc__) + parser.add_argument("--root", type=Path, default=ROOT) + parser.add_argument("--controls-only", action="store_true") + args = parser.parse_args() + assert __debug__ and sys.version_info[:2] == (3, 12) + checks = controls() + if args.controls_only: + print(dumps(checks)) + return + + def stop(*_): + raise TimeoutError("hard 25-second cap") + + start = monotonic() + signal(SIGALRM, stop) + alarm(SECONDS) + timeout = None + keys, prior, prefix, suffix = [], [], {}, {} + prefix_progress, suffix_progress = {}, {} + try: + raw = authenticate(args.root) + price, geom, remaining = [loads(raw[f"inputs/{name}.json"], object_pairs_hook=unique) + for name in ("PRICE", "GEOMETRY", "REMAINING")] + assert price["head"] == geom["head"] == remaining["head"] == HEAD and price["caller"] == CALLER + assert price["word_sha256"] == geom["word_sha256"] == WORD + assert geom["price_sha256"] == PINS["inputs/PRICE.json"] + assert remaining["input_sha256"]["lead/GEOMETRY.json"] == PINS["inputs/GEOMETRY.json"] + assert geom["status"] == "EXHAUSTED" and geom["visited_events"] == EVENTS + keys = list(map(tuple, remaining["unvisited_prefix"])) + prior = remaining["dual_drops_requiring_rational"] + assert len(keys) == len(set(keys)) == remaining["next_modular_cases"] == CASES + assert remaining["next_modular_runner_seconds"] == SECONDS + assert keys == list(map(tuple, geom["unvisited_keys"])) + selected = {tuple(row["key"]) for row in geom["selected"]} + assert len(selected) == 16 and not set(keys) & selected and set(map(tuple, prior)) <= selected + assert set(keys) | selected == set(map(tuple, geom["all_representative_keys"])) + assert prior == [[41740, 242], [45266, 242]] + payload = decompress(raw["inputs/7334-WORD.json.gz"]) + assert sha256(payload).hexdigest() == PAYLOAD + word = loads(payload, object_pairs_hook=unique) + cohort = set(price["cohort"]) + assert len(cohort) == 15 and all((word["initial"][r], word["final"][r]) == (3, 245) for r in cohort) + deadline = start + SECONDS - 2 + sweep(word, keys, cohort, deadline, prefix, prefix_progress, False) + candidates = [key for key in keys if key in prefix and prefix[key]["kernel"]] + if candidates: + sweep(word, candidates, cohort, deadline, suffix, suffix_progress, True, prefix) + else: + suffix_progress.update(events=0, first_unvisited_cut=None, denominator_units=[]) + except TimeoutError as error: + timeout = str(error) + finally: + alarm(0) + + results = [] + for key in keys: + left, right = prefix.get(key), suffix.get(key) + pair = None + if left and not left["kernel"]: + status = "prefix_exclusion" + elif right and not right["kernel"]: + status = "suffix_exclusion" + elif right: + status = "dual_drop" + pair = pairing(left, right) + else: + status = "unvisited" + results.append(dict(key=key, status=status, prefix=left, suffix=right, modular_pairings=pair)) + complete = (timeout is None and prefix_progress.get("first_unvisited_cut", 0) is None + and suffix_progress.get("first_unvisited_cut", 0) is None) + print(dumps(dict(head=HEAD, caller=CALLER, pins=PINS, modulus=PRIME, controls=checks, + cap_cases=CASES, cap_seconds=SECONDS, prefix_progress=prefix_progress, suffix_progress=suffix_progress, + timeout=timeout, complete=complete, results=results, + counts=Counter(row["status"] for row in results), previously_frozen_exact_keys=prior), + indent=2, sort_keys=True)) + if not complete: + raise SystemExit(2) + + +if __name__ == "__main__": + main() diff --git a/research/p104-rank-seven-prefix-bank-bound/engines/independent/verify.py b/research/p104-rank-seven-prefix-bank-bound/engines/independent/verify.py new file mode 100644 index 0000000000..93ec575302 --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/engines/independent/verify.py @@ -0,0 +1,256 @@ +"""Reverse chart continuity or second-prime checks on the exact R105 key sets.""" +from argparse import ArgumentParser +from bisect import bisect_left +from collections import Counter, defaultdict +from fractions import Fraction +from gzip import decompress +from hashlib import sha256 +from json import dumps, loads +from pathlib import Path +from runpy import run_path +from signal import SIGALRM, alarm, signal +from time import monotonic +import sys + +ROOT = Path(__file__).resolve().parent +HEAD = "aaeec8c0acf01e99a5f331ef363a698d9c084ace" +PAYLOAD = "9aa8d6b054ba7eb2289d052c1079b16be518d2f0fbfb244569fa18e3733acdac" +EVENTS = 76466 +PINS = { + "inputs/GEOMETRY.json": "2d0dee60998d168d2eff4c16794176c5ec3b4d18ffa8bde247602035f1b68129", + "inputs/PRICE.json": "4e0d6436eb4fc6a9dfa34c05ba98aacc63e3a8bf7214145dd9f9254763c5a13e", + "inputs/PREFIX.json": "65c11b0a42092557fe1c64b4feb2f61e2d16c636cfcaddf7f95ec09dbdd27452", + "inputs/PREFIX-SECOND-PRIME.json": "51c9eb3af7b4d5ff60daef468f3bf262cb485bb88f4d0394d91b83d7eba2bffd", + "inputs/ALIASES.json": "ba0120da7b05b948b1e8294c6b3844deade2c40be1f2e0abf4e0beef395f5c85", + "inputs/7334-WORD.json.gz": "4b9fd1187b34ed97c3ac0c760d73531735a5d0ebc5b4d4ab4377160b20d9bb2a", +} +MOD_PINS = { + "inputs/SELECTION.json": "3bd7bdc9859436ef1d75d011e09d9dfc43a731c5b0a8e9c42fc96d9a6481a30c", + "inputs/MODULAR.json": "1d99a9842dc8c42395878eb0c14b0027656041f150672491d65d3f023d9df23d", + "inputs/r102_prefix.py": "505eca6677cc4e905494bdbf027d23c7ad288aa26889443db5d99d3ec41488f5", + "inputs/second_prime.py": "21dbd96192e1f60c00ceddba01a7e8d0ddd7d6ad7da4ad3ed22ef2e47cc589c4", +} + + +def unique(items): + d = dict(items) + if len(d) != len(items): + raise ValueError("duplicate JSON key") + return d + + +def blocked(event, public): + op, dst, *args = event + if op in ("MOVE", "INIT", "CLEAR", "COPY"): + return op + assert op in ("ADD","SCALE") and Fraction(args[-2]) + return "public/owned" if op == "ADD" and ((dst < public) != (args[0] < public)) else None + + +def prefix_blocked(event, roles): + op, dst, *args = event + if dst not in roles: + return False + return not (op == "SCALE" or op == "ADD" and args[0] in roles) + + +def controls(): + assert blocked(["ADD",1,2,"-1/2",8],5) is None + assert blocked(["ADD",7,1,"-1/2",8],5) == "public/owned" + assert not prefix_blocked(["ADD",7,1,"-1/2",8],{1,2}) + assert prefix_blocked(["ADD",1,7,"-1/2",8],{1,2}) + assert prefix_blocked(["MOVE",1,8,9,False],{1,2}) + return ["invertible signed ADD", "owned reads preserve public prefix", "owned writes and public MOVE block"] + + +def span(frame): + xs = {0} + for v in frame: + assert v not in xs + xs |= {v ^ w for w in xs} + return xs + + +def reverse(word, rows, cohort, deadline, state): + n, owned, tape = (word[k] for k in ("public","owned_fields","program")) + assert (n,owned,len(tape)) == (1501,68,EVENTS) + frames=word["frames"] + low,high=span(frames[602]),span(frames[127]) + charts={c for _,c in rows} + assert len(charts)==5 and all(len(frames[c])==6 and low=deadline: + raise TimeoutError("reverse chronology cap") + for c in requests.get(cut,[]): + p=[r for r in range(n) if live[r]==c] + o=[r for r in range(n,n+owned) if live[r]==c] + assert rows[cut,c]==dict(key=[cut,c],public=p,owned=o,pivots=sorted(set(p)&cohort)) + state["checked"].append([cut,c]) + if cut==0: + assert live==word["initial"]+[None]*owned + state["first_unvisited_event"]=None + break + t=cut-1 + op,d,*a=e=tape[t] + if op=="MOVE": + f,z,flag=a + assert live[d]==z and flag==(d>=n) + live[d]=f + incident=f,z + elif op in ("INIT","CLEAR"): + c,=a + assert d>=n and live[d]==(c if op=="INIT" else None) + live[d]=None if op=="INIT" else c + incident=(c,) + else: + assert op in ("ADD","COPY","SCALE") and live[d]==a[-1] + if op!="SCALE": + assert d!=a[0] and live[a[0]]==live[d] + assert op!="COPY" or d>=n + incident=(a[-1],) + if d in public_union: + writes[d].append((t,e)) + for c in incident: + if c in charts: + contacts[c].append((t,e)) + state["events"]+=1 + return n, {c:list(reversed(v)) for c,v in contacts.items()}, {r:list(reversed(v)) for r,v in writes.items()} + + +def between(values,lo,hi): + key=lambda row:row[0] + return values[bisect_left(values,lo,key=key):bisect_left(values,hi,key=key)] + + +def component_summary(groups,known): + return [dict(keys=g,reuses=[k for k in g if k in known]) for g in groups] + + +def alias(word,rows,cohort,known,prior,deadline,state): + n, contacts, writes=reverse(word,rows,cohort,deadline,state) + ordered=sorted(rows,key=lambda k:(k[1],k[0])) + groups, public_groups, links, diagnostic=[],[],[],[] + last=None + for key in ordered: + if monotonic()>=deadline: + raise TimeoutError("alias key cap") + strict_ok=public_ok=False + if last is not None and last[1]==key[1]: + lo,c=last + hi=key[0] + a,b=rows[last],rows[key] + same=all(a[f]==b[f] for f in ("public","owned","pivots")) + events=between(contacts.get(c,[]),lo,hi) + blockers=[t for t,e in events if blocked(e,n)] + strict_ok=same and not blockers + fixed=set(a["public"]) + public_ok=a["public"]==b["public"] and not any( + prefix_blocked(e,fixed) for r in fixed for _,e in between(writes.get(r,[]),lo,hi)) + assert not strict_ok or public_ok + links.append(dict(left=last,right=key,same_bank=same,blockers=blockers,alias=strict_ok)) + if public_ok and not strict_ok: + diagnostic.append(dict(left=last,right=key,events=events,strict_blockers=blockers)) + if not strict_ok: + groups.append([]) + if not public_ok: + public_groups.append([]) + groups[-1].append(key) + public_groups[-1].append(key) + last=key + strict=component_summary(groups,known) + public_only=component_summary(public_groups,known) + assert len(links)==60 and prior["timeout"] is None and not prior["unvisited"] + assert dumps(links,sort_keys=True)==dumps(prior["links"],sort_keys=True) + assert dumps(strict,sort_keys=True)==dumps(prior["classes"],sort_keys=True) + def reuse(components): + return sorted(k for cls in components if cls["reuses"] for k in cls["keys"] if k not in known) + return dict(agreement=True,links=links,strict_classes=strict,strict_new_reuses=reuse(strict), + fixed_public_only_classes=public_only,fixed_public_new_reuses=reuse(public_only), + diagnostic_additional_links=diagnostic) + + +def modular(root,word,rows,cohort,selection,prior,deadline,state): + assert selection["head"]==prior["head"]==HEAD and prior["prime"]==65521 + assert prior["counts"]=={"prefix exclusion":16} + cases={tuple(r["key"]):r for r in selection["selected"]} + primary={tuple(r["key"]):r["prefix"] for r in prior["results"]} + assert list(cases)==list(primary) and len(cases)==16 + assert cases.keys()<=rows.keys() + for k,r in cases.items(): + assert all(r[f]==rows[k][f]==primary[k][f] for f in ("public","owned","pivots")) + engine=run_path(str(root/"inputs/second_prime.py")) + adapter=run_path(str(root/"inputs/r102_prefix.py")) + assert engine["PRIME"]==65537 + checks=engine["controls"]() + result={} + adapter["sweep"](word,cohort,cases,primary,engine,deadline,state,result) + assert len(result)==16 and state["first_unvisited_cut"] is None + assert all(r["disposition"]=="excluded" for r in result.values()) + return dict(agreement=True,modulus=65537,rows=list(result.values()),controls=checks, + certified_primary_axes=sum(bool(r["primary_minor_det_mod_65537"]) for r in result.values()), + counts={"prefix exclusion":16}) + + +def main(): + p=ArgumentParser(description=__doc__) + p.add_argument("mode",choices=("alias","modular","controls")) + p.add_argument("--root",type=Path,default=ROOT) + a=p.parse_args() + assert __debug__ and sys.version_info[:2]==(3,12) + if a.mode=="controls": + print(dumps(controls())) + return + seconds,cap=(20,65) if a.mode=="alias" else (25,16) + pins=PINS if a.mode=="alias" else PINS|MOD_PINS + def stop(*_): + raise TimeoutError("hard runner cap") + signal(SIGALRM,stop) + alarm(seconds) + deadline=monotonic()+seconds-2 + result,reason,state={},None,{} + try: + raw={} + for rel,h in pins.items(): + data=(a.root/rel).read_bytes() + if sha256(data).hexdigest()!=h: + raise ValueError(f"changed dependency: {rel}") + raw[rel]=data + def read(name): + return loads(raw[f"inputs/{name}.json"],object_pairs_hook=unique) + price,geom,old,second=(read(name) for name in ("PRICE","GEOMETRY","PREFIX","PREFIX-SECOND-PRIME")) + assert price["head"]==geom["head"]==old["head"]==second["head"]==HEAD + rows={tuple(r["key"]):r for r in geom["all_representatives"]} + assert len(rows)==len(geom["all_representatives"])==65 and geom["visited_events"]==EVENTS + known={tuple(r["key"]) for r in old["rows"] if r["determinant"]} + assert known=={tuple(r["key"]) for r in second["rows"] if r["independent_minor"]["determinant"]} + assert len(known)==16 and old["counts"]==second["counts"]=={"excluded":16} + cohort=set(price["cohort"]) + assert cohort=={1457,1458,1474,1475,1476} + payload=decompress(raw["inputs/7334-WORD.json.gz"]) + assert sha256(payload).hexdigest()==PAYLOAD + word=loads(payload,object_pairs_hook=unique) + if a.mode=="alias": + result=alias(word,rows,cohort,known,read("ALIASES"),deadline,state) + else: + result=modular(a.root,word,rows,cohort,read("SELECTION"),read("MODULAR"),deadline,state) + except TimeoutError as exc: + reason=str(exc) + finally: + alarm(0) + print(dumps(dict(head=HEAD,pins=pins,mode=a.mode,cap_cases=cap,cap_seconds=seconds,progress=state, + new_support_cases=0 if a.mode=="alias" else 16,complete=reason is None, + timeout=reason,alias_controls=controls(),**result),indent=2,sort_keys=True)) + if reason: + raise SystemExit(2) + + +if __name__=="__main__": + main() diff --git a/research/p104-rank-seven-prefix-bank-bound/engines/r102/geometry.py b/research/p104-rank-seven-prefix-bank-bound/engines/r102/geometry.py new file mode 100644 index 0000000000..2d50a022f9 --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/engines/r102/geometry.py @@ -0,0 +1,115 @@ +"""Exact full-word occupied rank-five/six cochart bank census.""" +from collections import defaultdict +from gzip import decompress +from hashlib import sha256 +from pathlib import Path +from time import monotonic +import json +import sys + +PRICE="4e0d6436eb4fc6a9dfa34c05ba98aacc63e3a8bf7214145dd9f9254763c5a13e" +WORD="4b9fd1187b34ed97c3ac0c760d73531735a5d0ebc5b4d4ab4377160b20d9bb2a" + + +def checked(path,pin): + b=path.read_bytes() + if sha256(b).hexdigest()!=pin: + raise ValueError(f"changed dependency: {path.name}") + return b + + +def span(frame): + result={0} + for v in frame: + assert v not in result + result|={w^v for w in result} + return result + + +def main(): + root=Path(sys.argv[1]) + price=json.loads(checked(root/"lead/PRICE.json",PRICE)) + word=json.loads(decompress(checked(root/"inputs/7334-WORD.json.gz",WORD))) + assert price["word_sha256"]==WORD and price["support_cap"]==16 + n=word["public"] + cohort=set(price["cohort"]) + source, target = price["endpoint_charts"] + assert len(cohort)==5 and all(word["initial"][r]==source and word["final"][r]==target for r in cohort) + spaces=list(map(span,word["frames"])) + intermediate={i for i,w in enumerate(spaces) if len(w) in (32,64) and spaces[source]=n),pivots=sorted(pivots))) + for c in sorted(bank): + save(0,c) + until=monotonic()+18 + visited=0 + for t,e in enumerate(word["program"]): + if t%128==0 and monotonic()>=until: + break + op,r,*args=e + old=chart[r] + if op=="MOVE": + assert old==args[0] and args[2]==(r>=n) + new=args[1] + elif op=="INIT": + assert old is None and r>=n + new=args[0] + elif op=="CLEAR": + assert old==args[0] and r>=n + new=None + else: + assert old==args[-1] and op in ("ADD","COPY","SCALE") + if op in ("ADD","COPY"): + assert chart[args[0]]==old + new=old + if old in intermediate: + bank[old].remove(r) + if new in intermediate: + bank[new].add(r) + chart[r]=new + for c in sorted({v for v in (old,new) if v in intermediate}): + save(t+1,c) + visited=t+1 + complete=visited==len(word["program"]) + if complete: + assert chart==word["final"]+[None]*word["owned_fields"] + def score(r): + return (bool(r["owned"]),len(r["pivots"])<2,len(r["public"])-len(r["pivots"]), + len(r["public"]),r["key"]) + selected=[] + bank_shapes=set() + selected_clocks=set() + if complete: + for row in sorted(rows,key=score): + shape=row["key"][1],tuple(row["public"]),tuple(row["owned"]) + if shape in bank_shapes or row['key'][0] in selected_clocks: + continue + bank_shapes.add(shape) + selected_clocks.add(row['key'][0]) + selected.append(row) + if len(selected)==16: + break + assert len({tuple(row["key"]) for row in rows})==len(rows) + picked={tuple(r["key"]) for r in selected} + print(json.dumps(dict(head=price["head"],word_sha256=WORD,price_sha256=PRICE,visited_events=visited, + status="EXHAUSTED" if complete else "CAPPED",ranks=[5,6],intermediate_charts=sorted(intermediate),bank_cap=16, + eligible_bank_count=len(rows),eligible_chart_count=len({r["key"][1] for r in rows}), + selected=selected,unvisited_keys=[r["key"] for r in rows if tuple(r["key"]) not in picked], + all_representative_keys=[r["key"] for r in rows],all_representatives=rows,scope="Representatives after each chart incident event; grouping for selection only."), + indent=2,sort_keys=True)) + + +if __name__=="__main__": + main() diff --git a/research/p104-rank-seven-prefix-bank-bound/engines/r102/prefix.py b/research/p104-rank-seven-prefix-bank-bound/engines/r102/prefix.py new file mode 100644 index 0000000000..0ae58990c2 --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/engines/r102/prefix.py @@ -0,0 +1,49 @@ +"""Test the frozen sixteen rank-seven-cohort banks by exact exterior minors.""" +from collections import Counter +from gzip import decompress +from hashlib import sha256 +import json +from pathlib import Path +from runpy import run_path +import sys +from time import monotonic + +PINS = { + "lead/PRICE.json": "4e0d6436eb4fc6a9dfa34c05ba98aacc63e3a8bf7214145dd9f9254763c5a13e", + "lead/GEOMETRY.json": "2d0dee60998d168d2eff4c16794176c5ec3b4d18ffa8bde247602035f1b68129", + "inputs/7334-WORD.json.gz": "4b9fd1187b34ed97c3ac0c760d73531735a5d0ebc5b4d4ab4377160b20d9bb2a", + "inputs/exterior_rank56.py": "9fceafc627fe3781bcb8d5229eaefebc557de613f0d4723aa1d36ce4ab9954ac", +} + + +def main(): + assert __debug__ + deadline = monotonic() + 22 + root = Path(sys.argv[1]) + raw = {} + for name, digest in PINS.items(): + raw[name] = (root/name).read_bytes() + if sha256(raw[name]).hexdigest() != digest: + raise ValueError(f"changed dependency: {name}") + engine = run_path(str(root/"inputs/exterior_rank56.py")) + unique = engine["unique"] + price = json.loads(raw["lead/PRICE.json"], object_pairs_hook=unique) + geometry = json.loads(raw["lead/GEOMETRY.json"], object_pairs_hook=unique) + word = json.loads(decompress(raw["inputs/7334-WORD.json.gz"]), object_pairs_hook=unique) + assert geometry["head"] == price["head"] == engine["HEAD"] + assert geometry["status"] == "EXHAUSTED" and geometry["eligible_bank_count"] == 65 + assert len(geometry["selected"]) == 16 and len(price["cohort"]) == 5 + selected = {tuple(row["key"]): row for row in geometry["selected"]} + controls = engine["controls"]() + result, events = engine["sweep"](word, list(selected), set(price["cohort"]), deadline) + assert all(all(row[k] == selected[key][k] for k in ("key","public","owned","pivots")) + for key,row in result.items()) + rows = [result[k] for k in selected if k in result] + print(json.dumps({"head":price["head"],"pins":PINS,"event_count":events,"case_cap":16,"runner_seconds":25, + "controls":controls,"rows":rows,"counts":Counter(row["disposition"] for row in rows), + "unvisited":[list(k) for k in selected if k not in result], + "unselected":geometry["unvisited_keys"]},indent=2,sort_keys=True)) + + +if __name__ == "__main__": + main() diff --git a/research/p104-rank-seven-prefix-bank-bound/engines/r102/quote.py b/research/p104-rank-seven-prefix-bank-bound/engines/r102/quote.py new file mode 100644 index 0000000000..c295764e6c --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/engines/r102/quote.py @@ -0,0 +1,70 @@ +"""Preprice fixed-paid rank-seven splits for the 602-to-127 helper cohort.""" +from collections import Counter +from fractions import Fraction as Q +from hashlib import sha256 +import json +from pathlib import Path +from runpy import run_path + +ROOT = Path(__file__).resolve().parents[1] +PINS = { + "inputs/ADMITTED.json": "c95300e9bca27e44a25c82d794f88cbf70757c142806b0e4c590ea29feb81a13", + "inputs/READBACK.json": "337668788fb39ec9575887f9c5faf438a880471f78d936357dabf7deeac5de82", + "inputs/pricing.py": "f4d0b6c9314b838d882d6d06020f24881c19a3fda97a7c00df87b1e920785182", + "inputs/7314-HELPERS.json": "bf353b3e05d0bf5fe3e49c15673c4cb9203251329bd594009303541cf7fecc09", + "inputs/7334-CHANGED.json": "f4d3f6ca2d87f8cd68c01ac9f77b69bd5a796f92bd567cea8afe3ac7c72e8e4b", +} + + +def unique(pairs): + out = dict(pairs) + if len(out) != len(pairs): + raise ValueError("duplicate input key") + return out + + +def main(): + assert __debug__ + data = {} + for name, pin in PINS.items(): + raw = (ROOT / name).read_bytes() + if sha256(raw).hexdigest() != pin: + raise ValueError(f"changed dependency {name}") + if name.endswith(".json"): + data[Path(name).stem] = json.loads(raw, object_pairs_hook=unique) + a, b, h, x = (data[k] for k in ("ADMITTED", "READBACK", "7314-HELPERS", "7334-CHANGED")) + assert a["head"] == b["head"] == "aaeec8c0acf01e99a5f331ef363a698d9c084ace" + assert a["exit"] == 0 and a["caller"] == b["caller_head"] and b["copies"] == 17 + assert len(h["rows"]) == 1101 and h["complete"] and len(x["roles"]) == 14 + protected = set(x["roles"]) | {863, 1355, 1531, 1567, 1568} + cohort = sorted(r["role"] for r in h["rows"] if r["role"] not in protected + and (r["initial"], r["final"], r["old_productive_rank"]) == (602, 127, 7)) + assert len(cohort) == len(set(cohort)) == 5 + paid, target = [Counter({int(k): v for k, v in b[name].items()}) for name in ("paid", "targets")] + old = target.copy() + old.subtract(paid) + assert (sum(paid.values()),sum(target.values()),sum(k*v for k,v in old.items())) == (110519,22461,1424) + assert target[7] >= 17*len(cohort) and not b["empty_root_credits"] + change = {3:17,4:17,7:-17} + new = old.copy() + new.update(change) + cost = run_path(str(ROOT/"inputs/pricing.py"))["cost"] + crossing = Q(a["crossing"][1]) + probe = crossing + Q(1,10**9) + moonshot = Q("0.0040075385047236") + assert cost(old,probe)[1] < 0 < cost(new,probe)[0] + def price(k): + delta = cost(change,k) + incumbent = cost(old,k) + return {"old_margin":list(map(str,incumbent)), "gross_one":list(map(str,delta)), + "whole_5_upper":str(5*delta[1]),"complete_5_upper":str(incumbent[1]+5*delta[1])} + print(json.dumps({"head":a["head"],"caller":a["caller"],"pins":PINS,"cohort":cohort, + "word_sha256":a["inputs"]["WORD.json.gz"],"productive_delta":change,"paid_delta":{}, + "endpoint_charts":[602,127],"cut_ranks":[5,6],"incumbent":str(crossing),"probe":str(probe),"moonshot":str(moonshot), + "at_incumbent":price(crossing),"at_target":price(moonshot), + "event_cap":76466,"geometry_runner_seconds":20,"support_cap":16,"support_runner_seconds":25, + "exact_cap":4,"exact_runner_seconds":35,"build_cap":1},indent=2,sort_keys=True)) + + +if __name__ == "__main__": + main() diff --git a/research/p104-rank-seven-prefix-bank-bound/engines/r105/alias_rank_seven.py b/research/p104-rank-seven-prefix-bank-bound/engines/r105/alias_rank_seven.py new file mode 100644 index 0000000000..eff76de947 --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/engines/r105/alias_rank_seven.py @@ -0,0 +1,104 @@ +"""Classify proven equivalences of the 65 frozen rank-seven bank keys.""" +from collections import defaultdict +from fractions import Fraction +from gzip import decompress +from hashlib import sha256 +import json +from pathlib import Path +from signal import SIGALRM, alarm, signal +import sys +from time import monotonic + +PINS = { + "lead/PRICE.json": "4e0d6436eb4fc6a9dfa34c05ba98aacc63e3a8bf7214145dd9f9254763c5a13e", + "lead/GEOMETRY.json": "2d0dee60998d168d2eff4c16794176c5ec3b4d18ffa8bde247602035f1b68129", + "lead/PREFIX.json": "65c11b0a42092557fe1c64b4feb2f61e2d16c636cfcaddf7f95ec09dbdd27452", + "inputs/7334-WORD.json.gz": "4b9fd1187b34ed97c3ac0c760d73531735a5d0ebc5b4d4ab4377160b20d9bb2a", +} + + +def checked(root): + items = {} + for path,pin in PINS.items(): + raw = (root/path).read_bytes() + if sha256(raw).hexdigest()!=pin: + raise ValueError(f"changed dependency {path}") + items[path] = json.loads(decompress(raw) if path.endswith(".gz") else raw) + return items + + +def harmless(event,chart,public): + op,d,*args = event + if op=="MOVE": + return chart not in args[:2] + if op in ("INIT","CLEAR"): + return chart!=args[0] + assert op in ("ADD","COPY","SCALE") + if chart!=args[-1]: + return True + if op=="COPY": + return False + assert Fraction(args[-2]) + return op=="SCALE" or (d=deadline: + raise TimeoutError("cooperative alias classification cap") + key = row["key"] + ok = False + if last is not None: + t0,t1 = last["key"][0],key[0] + same = all(last[f]==row[f] for f in ("public","owned","pivots")) + blockers = [j for j in range(t0,t1) if not harmless(word["program"][j],chart,word["public"])] + ok = same and not blockers + links.append({"left":last["key"],"right":key,"same_bank":same,"blockers":blockers,"alias":ok}) + if not ok: + classes.append([]) + classes[-1].append(key) + unvisited.remove(key) + last=row + assert sum(map(len,classes))==65 and len(links)==60 + except TimeoutError as exc: + reason = str(exc) + finally: + alarm(0) + results = [{"keys":keys,"reuses":sorted(k for k in keys if tuple(k) in passed)} for keys in classes] + print(json.dumps({"pins":PINS,"cap_cases":65,"cap_seconds":20,"classes":results, + "links":links,"unvisited":unvisited,"timeout":reason},indent=2,sort_keys=True)) + if reason: + raise SystemExit(2) + + +if __name__=="__main__": + main() diff --git a/research/p104-rank-seven-prefix-bank-bound/engines/r105/freeze_support.py b/research/p104-rank-seven-prefix-bank-bound/engines/r105/freeze_support.py new file mode 100644 index 0000000000..da83747e9c --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/engines/r105/freeze_support.py @@ -0,0 +1,46 @@ +"""Select sixteen previously unresolved rank-seven bank classes.""" +from collections import Counter, defaultdict +from hashlib import sha256 +import json +from pathlib import Path + +ROOT = Path(__file__).resolve().parent +PINS = { + "ALIASES.json":"ba0120da7b05b948b1e8294c6b3844deade2c40be1f2e0abf4e0beef395f5c85", + "round102-input/lead/GEOMETRY.json":"2d0dee60998d168d2eff4c16794176c5ec3b4d18ffa8bde247602035f1b68129", +} + + +def main(): + inputs = {} + for path,pin in PINS.items(): + raw = (ROOT/path).read_bytes() + if sha256(raw).hexdigest()!=pin: + raise ValueError(f"changed dependency {path}") + inputs[path] = json.loads(raw) + alias,geo = inputs.values() + assert alias["timeout"] is None and not alias["unvisited"] + assert len(alias["classes"])==45 and len(geo["all_representatives"])==65 + bank_by_key = {tuple(r["key"]):r for r in geo["all_representatives"]} + by_chart = defaultdict(list) + for cls in alias["classes"]: + if not cls["reuses"]: + row=bank_by_key[tuple(cls["keys"][0])] + assert not row["owned"] + by_chart[row["key"][1]].append(row|{"aliases":cls["keys"][1:]}) + assert len(by_chart)==5 and sum(map(len,by_chart.values()))==29 + for group in by_chart.values(): + group.sort(key=lambda r:(-len(r["public"]),r["key"])) + order = [group[i] for i in range(max(map(len,by_chart.values()))) + for _,group in sorted(by_chart.items()) if i=deadline: + break + for row in requests.get(t,()): + chart=row["key"][1] + bank=[r for r in range(n) if state[r]==chart] + owners=[r for r in range(n,len(state)) if state[r]==chart] + assert bank==row["public"] and owners==row["owned"] + out[tuple(row["key"])]=engine["exterior_minor"](bank,cols,cohort) + if not t: + assert state==word["initial"]+[None]*word["owned_fields"] + break + reverse["reverse_event"](tape[t-1],state,cols,n,engine["scalar"],engine["plus"],engine["P"]) + return out + + +def main(): + assert __debug__ + deadline=monotonic()+22 + docs=checked() + price=json.loads(docs["round102-input/lead/PRICE.json"]) + selection=json.loads(docs["SELECTION.json"]) + word=json.loads(decompress(docs["round102-input/inputs/7334-WORD.json.gz"])) + engine=run_path(str(ROOT/"round102-input/inputs/exterior_rank56.py")) + reverse=run_path(str(ROOT/"round102-input/inputs/reverse_engine.py")) + controls=reverse["controls"](engine) + cohort=set(price["cohort"]) + rows=selection["selected"] + assert len(rows)==16 and selection["head"]==price["head"]==engine["HEAD"] + keys=[tuple(r["key"]) for r in rows] + prefix,n=engine["sweep"](word,keys,cohort,deadline) + for row in rows: + k=tuple(row["key"]) + if k in prefix: + assert all(row[f]==prefix[k][f] for f in ("public","owned","pivots")) + open_rows=[r for r,k in zip(rows,keys,strict=True) if k in prefix and prefix[k]["disposition"]=="rank drop"] + suffix=reverse_side(word,open_rows,cohort,engine,reverse,deadline) if open_rows else {} + results=[] + for row,k in zip(rows,keys,strict=True): + f,s=prefix.get(k),suffix.get(k) + if f and f["disposition"]=="excluded": + status="prefix exclusion" + elif s: + status="suffix exclusion" if s["disposition"]=="excluded" else "dual drop" + else: + status="capped" + results.append(row|dict(status=status,prefix=f,suffix=s)) + print(json.dumps(dict(head=price["head"],pins=PINS,prime=engine["P"],controls=controls,caps=selection["caps"], + prefix_events=n,results=results,counts=Counter(r["status"] for r in results),unselected=selection["unselected"]), + indent=2,sort_keys=True)) + + +if __name__=="__main__": + main() diff --git a/research/p104-rank-seven-prefix-bank-bound/inputs/7314-HELPERS.json.gz b/research/p104-rank-seven-prefix-bank-bound/inputs/7314-HELPERS.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..04698c94591c494881add22d169c0ecfa4785d0f GIT binary patch literal 19158 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 literal 0 HcmV?d00001 diff --git a/research/p104-rank-seven-prefix-bank-bound/inputs/7334-CHANGED.json b/research/p104-rank-seven-prefix-bank-bound/inputs/7334-CHANGED.json new file mode 100644 index 0000000000..b1644106d9 --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/inputs/7334-CHANGED.json @@ -0,0 +1,72 @@ +{ + "body_clocks": [ + 40222, + 40840, + 42609, + 43022, + 43023, + 43024, + 43025, + 43026, + 43028, + 43030, + 43403, + 43491, + 43535, + 43696, + 43698, + 43887, + 45365, + 45396 + ], + "copy_and_chart_local_ownership_checked": true, + "dirty_readout": { + "319": 1 + }, + "exact_basis_columns": 14, + "forward_direction": { + "1081": -1, + "1467": 1 + }, + "literal_candidate_clocks": [ + 44588, + 44627 + ], + "paid_delta_per_word": { + "1": -1, + "5": -1, + "6": 1 + }, + "ranks": [ + 3, + 8, + 9 + ], + "roles": [ + 198, + 205, + 319, + 532, + 652, + 654, + 962, + 969, + 1081, + 1250, + 1303, + 1305, + 1453, + 1467 + ], + "scope": "Local normalized rational block, literal chart availability and nesting. Absolute Gaussian phase and whole caller separate.", + "status": "PASS_INDEPENDENT_319_BLOCK", + "window": [ + 44616, + 45718 + ], + "word_sha256": [ + "0358b9f6e0340fb3e5aa46c747c558b32a5280cbf9cd92c3b9de627dd18a9a4f", + "9aa8d6b054ba7eb2289d052c1079b16be518d2f0fbfb244569fa18e3733acdac" + ], + "wrong_sign_and_omitted_readout_rejected": true +} diff --git a/research/p104-rank-seven-prefix-bank-bound/inputs/7334-WORD.json.gz b/research/p104-rank-seven-prefix-bank-bound/inputs/7334-WORD.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..73f43007192eb5a38eb5abb591b871df3e52c7cd GIT binary patch literal 393282 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%0D>(h9A<5KmxPj0RM7Ow%Cdd&-_N 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 )p`f7wfFJ;xD;q5C(yNi0mCa{0f9A&w$ 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î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 literal 0 HcmV?d00001 diff --git a/research/p104-rank-seven-prefix-bank-bound/inputs/ADMITTED.json b/research/p104-rank-seven-prefix-bank-bound/inputs/ADMITTED.json new file mode 100644 index 0000000000..464c89e45c --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/inputs/ADMITTED.json @@ -0,0 +1,58 @@ +{ + "assumptions": [ + "native_all_columns", + "owned_erasure", + "compiler", + "precision_tape", + "analytic_recovery" + ], + "base": "e54523517d0f03e58352e647c403a5af3e525a57", + "caller": "07a76c5e2738882c0cb322278e56f6cae3c9885d", + "caller_sha256": "255d89f38cd45e38e5770f559bc43dc217e989032359768cdc7e8cdfd64b47bc", + "crossing": [ + "0.00364665195644044790699554028334161", + "0.00364665195644044790699554028334162" + ], + "end": "2026-11-11T23:04:43Z", + "exit": 0, + "head": "aaeec8c0acf01e99a5f331ef363a698d9c084ace", + "hosted_at_admission": "plan and historical success; candidate replay in progress", + "inputs": { + "EARLY-RESULT.json": "ad1ca9b2e2febbf80d9bf8b6ceef14ff90fcc29ef9358310e551628eb1706649", + "INPUTS.json": "abedac59097a1c35c27d91cbdb07207bc562a64743bc406d13c94a8bc970592d", + "NATIVE-RESULT.json": "c6d1b00a83185ab0062397b363258b1f3f6685d755e9c1d4f7d3e7e511240812", + "PROPOSED-CLAIM.json": "6e31241944c123d2bd4aa8bc94d833b44b3d889bd6d9aafc579108f416b45f03", + "RESULT.json": "7f2d587c59f063b01f1e8b320084a7f0943f2f05d65e3e0f5e80448c6c8e8194", + "SOURCES.json": "ac7b4473035af648d6073e78b6c39675e706e8194b346bb55ed62a0adc81d593", + "VERIFY.json": "ede7dd2dd3733b9a73f72af9dd7edfe819b49b859c5c76e227ec82cb9c220513", + "WORD.json.gz": "4b9fd1187b34ed97c3ac0c760d73531735a5d0ebc5b4d4ab4377160b20d9bb2a" + }, + "kappa": "0.00364665195644", + "ours": "0", + "peer_gain": "0.000000430519994", + "prior_kappa": "0.003646221436446", + "receipt": { + "peer-prep/IDENTITIES.json": "f4d3f6ca2d87f8cd68c01ac9f77b69bd5a796f92bd567cea8afe3ac7c72e8e4b", + "peer-prep/STATIC.json": "500cc563b7dac8b1de1faf1dee9b820e73152dfddc15a650cd1191edd39e8c79", + "peer-price/RANK-STOCK.json": "4a7841699dd17688f6aada5c902a2a91e94558b2b1b4460c46b0e55aa95b3f9f", + "peer-price/READBACK.json": "337668788fb39ec9575887f9c5faf438a880471f78d936357dabf7deeac5de82", + "peer/COMMAND.txt": "714bfab024155d8216f3ef99f3ee7627ddc35ab341c486ac6bd53c476b757130", + "peer/COMMIT.stdout": "597470d8132a3812deb3624a859546c0c13d52b094fd6fc61e7416941130bd70", + "peer/END-UTC.txt": "9c46923c616c14da5b8ed503e1652021d7bd409a10ec91a78a03263013fba08a", + "peer/METADATA.stdout": "5873404cb4424dca918a00d503569f3c29a3190fd029a007e1afb2006399f647", + "peer/RUN.exit": "9a271f2a916b0b6ee6cecb2426f0b3206ef074578be55d9bc94f6f3fe3ab86aa", + "peer/RUN.stderr": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "peer/RUN.stdout": "d589626c7581fbb9928bc615364cfee49deb62dfc0a39a903417ca62be89cf8c", + "peer/START-UTC.txt": "5b78fd6d42a2b42206891318c08e6014de57d7ca46b0201cd11a166f452210f7" + }, + "source_history": "exact anchored base and recursive package provenance, sparse shallow stock wrapper not executed", + "stages": { + "caller": "PASS_HELPER_319_FUSED_CALLER 91166298911/25000000000000", + "early": "PASS_HELPER_319_EXACT_NATIVE_AND_SIGNED_PRICE 0.00364665195644", + "frontier": "PASS_HELPER_319_FUSED_FRONTIER_PROPOSAL 91166298911/25000000000000", + "native": "PASS_HELPER_319_FUSED_NATIVE 3646017316711/1000000000000000" + }, + "start": "2026-11-11T22:54:48Z", + "status": "independently_reproduced_comparable", + "tree": "fa98712a459b20c10240450097c87de433f8a750" +} diff --git a/research/p104-rank-seven-prefix-bank-bound/inputs/PR7319-SHA256.json b/research/p104-rank-seven-prefix-bank-bound/inputs/PR7319-SHA256.json new file mode 100644 index 0000000000..3a28905e8d --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/inputs/PR7319-SHA256.json @@ -0,0 +1,6 @@ +{ + "COMPARE.json": "58d851ca486ec84ea0d1f063eb427ed0204b1b1e49219376d0ab20f6692e043e", + "CONTACT.json": "6d6cb681db29501aec002bd620514b4c48db03424243bf71686ba023dd8d6507", + "PRICE.json": "8d70669e720faabc932366dafbc1bd1fdaef6f088c4eb02b0ea3707ba309ab53", + "REVERSE.json": "bf353b3e05d0bf5fe3e49c15673c4cb9203251329bd594009303541cf7fecc09" +} diff --git a/research/p104-rank-seven-prefix-bank-bound/inputs/READBACK.json b/research/p104-rank-seven-prefix-bank-bound/inputs/READBACK.json new file mode 100644 index 0000000000..625b508eea --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/inputs/READBACK.json @@ -0,0 +1,188 @@ +{ + "assumptions": [ + "native_all_columns", + "owned_erasure", + "compiler", + "precision_tape", + "analytic_recovery" + ], + "bit_admitted": "12039/3125000", + "bit_claim_headroom": "3000951089/25000000000000", + "bit_premise": "376669/100000000", + "caller_head": "07a76c5e2738882c0cb322278e56f6cae3c9885d", + "claim": "91166298911/25000000000000", + "context_c": 2430, + "context_headroom": 1666, + "copies": 17, + "directed_bounds": { + "new_at_claim": [ + "347195197206460540909548691538238227127/2000000000000000000000000000000000000000000000000", + "1735975986032302704547743457691191192207/10000000000000000000000000000000000000000000000000" + ], + "new_at_old_crossing_upper": [ + "333717954993733063339209580360321337006028706669/2000000000000000000000000000000000000000000000000", + "1668589774968665316696047901801606685030143589709/10000000000000000000000000000000000000000000000000" + ], + "new_at_raw_lower": [ + "8890529086421014119/10000000000000000000000000000000000000000000000000", + "8890529086421080299/10000000000000000000000000000000000000000000000000" + ], + "new_at_raw_upper": [ + "-29866980917152322049/10000000000000000000000000000000000000000000000000", + "-29866980917152266101/10000000000000000000000000000000000000000000000000" + ], + "new_at_tested": [ + "1464673416007288863003441470091977383033/10000000000000000000000000000000000000000000000000", + "1464673416007288863003441470091977438357/10000000000000000000000000000000000000000000000000" + ], + "old_at_claim": [ + "-1668785950738799647054310634446839861363893886031/10000000000000000000000000000000000000000000000000", + "-66751438029551985882172425377873594454555753177/400000000000000000000000000000000000000000000000" + ], + "old_at_old_crossing_upper": [ + "-357270001119021587349/10000000000000000000000000000000000000000000000000", + "-357270001119021530951/10000000000000000000000000000000000000000000000000" + ] + }, + "empty_root_credits": 0, + "exact_gain": "215259997/500000000000000", + "exact_relative_percent": "21525999700/1823110718223", + "head": "aaeec8c0acf01e99a5f331ef363a698d9c084ace", + "incumbent": "1823110718223/500000000000000", + "main_boundaries": 104, + "native_grid": [ + 1125, + 25 + ], + "native_ingredient_claim": "3646017316711/1000000000000000", + "new_raw_interval": [ + "364665195644044790699554028334161/100000000000000000000000000000000000", + "182332597822022395349777014167081/50000000000000000000000000000000000" + ], + "old_raw_upper": "36462214364462343366888845568981/10000000000000000000000000000000000", + "ordinary": 782715464, + "ordinary_delta": 52088, + "ordinary_headroom": 217284536, + "outer_functional": 4, + "outer_strict": 54, + "outer_strict_slack": "299635334804355997/10000000000000000000000000000000000", + "owned_lifetimes": 73, + "owned_peak": 50, + "paid": { + "1": 68384, + "2": 14501, + "3": 14093, + "4": 3791, + "5": 5865, + "6": 238, + "7": 170, + "8": 741, + "9": 32, + "16": 416, + "24": 416, + "32": 416, + "40": 416, + "48": 416, + "56": 416, + "64": 208 + }, + "paid_delta": { + "1": -17, + "5": -17, + "6": 17 + }, + "paid_positions": 110519, + "parent": "9d0119eb12fbd9fa534b48cd37b68e7099757b91", + "path_pins": { + "dependencies/7298/pricing.py": { + "sha256": "f4d0b6c9314b838d882d6d06020f24881c19a3fda97a7c00df87b1e920785182" + }, + "dependencies/7314/NATIVE-RESULT.json": { + "sha256": "336f463da5afe5b60bfd3b9f0ce8aeea5a5feb1f854613bf4218ba0b28b3371b" + }, + "dependencies/7314/PROPOSED-CLAIM.json": { + "sha256": "41a08c4b7d0b2de4af22bc778948a143027eb3065fff47b0400b6ded1cc52778" + }, + "dependencies/7314/RESULT.json": { + "sha256": "432191ca572c9221935787ebe392699e3a1ef4512b0bf4fbc704657321cc87ca" + }, + "dependencies/round65/price.json": { + "sha256": "25205ad2cf4230bd2b2b704eec9f96ec4a5486fd575b5599861b28ffdd15b00b" + }, + "receipts/EARLY-RESULT.json": { + "git_blob": "675d6cf2374f3384019dfd53b2bdffd845005f13", + "sha256": "ad1ca9b2e2febbf80d9bf8b6ceef14ff90fcc29ef9358310e551628eb1706649" + }, + "receipts/INPUTS.json": { + "git_blob": "95c53f4594287a72d9b586f10ee136d0a1686984", + "sha256": "abedac59097a1c35c27d91cbdb07207bc562a64743bc406d13c94a8bc970592d" + }, + "receipts/NATIVE-RESULT.json": { + "git_blob": "eb101307d4d0399efed96d88cf6d4c01ec9c7369", + "sha256": "c6d1b00a83185ab0062397b363258b1f3f6685d755e9c1d4f7d3e7e511240812" + }, + "receipts/PROOF.md": { + "git_blob": "7644e5571d583183ee93b686612b5ec4555f6911", + "sha256": "560de573bfd4563c16ca3c7308fa729b4188fabe802d8830f343c3873f75b59d" + }, + "receipts/PROPOSED-CLAIM.json": { + "git_blob": "6b491894580741e3e2c11a453722a0302db7b5d6", + "sha256": "6e31241944c123d2bd4aa8bc94d833b44b3d889bd6d9aafc579108f416b45f03" + }, + "receipts/README.md": { + "git_blob": "b3a055f4e0d334ce2e7df3310caaa0849eb3eba1", + "sha256": "b4db0eb83ab6a2f7151bed2da955a487f4816ec9d1976eccc21e54c2725490b0" + }, + "receipts/REFERENCE.json": { + "git_blob": "8859e243cc39546bcb1e257d95c19a658c455dc7", + "sha256": "3e66e054b803551f18b8670da0b2990a7d0eeb689dfc45b56dbcba295551da70" + }, + "receipts/REPLAY.txt": { + "git_blob": "0b8d8048c18740060f4b7f6d380a5f3a0f30ee53", + "sha256": "230984f4b8206ae4d0c0f18fbba86ff43a1a9623f8ed337cf1285360f9a67c0c" + }, + "receipts/RESULT.json": { + "git_blob": "3034a490f5b0656ae71495c99493c4ab1ac1f5c6", + "sha256": "7f2d587c59f063b01f1e8b320084a7f0943f2f05d65e3e0f5e80448c6c8e8194" + }, + "receipts/SOURCES.json": { + "git_blob": "6b97e903a6df8de437068a0e2907823885928053", + "sha256": "ac7b4473035af648d6073e78b6c39675e706e8194b346bb55ed62a0adc81d593" + }, + "receipts/VERIFY.json": { + "git_blob": "cc98ee2a5c5a79e670094a6f55c7cacda8fd330c", + "sha256": "ede7dd2dd3733b9a73f72af9dd7edfe819b49b859c5c76e227ec82cb9c220513" + }, + "receipts/construct.py": { + "git_blob": "89e923bd738dfc404ca76b7ae36f13844ac4bfbb", + "sha256": "ecb39578063d7f09153a85370a3b9bb7cbf8b36ff9891033a1cce7a2fe7f7fda" + } + }, + "physical_maps": 3037, + "productive_fields": 22461, + "rank_surplus": 1424, + "raw_strict_separation": "43051999421357030665572644351/100000000000000000000000000000000000", + "scope": "Exact receipt and directed-price readback. No native or caller execution in this audit.", + "source_archive_sha256": "0589953b3886d96eacf3bda3d38d8d574bb739fba1056af7f32f56047b6061e2", + "targets": { + "1": 306, + "2": 357, + "3": 799, + "4": 3825, + "5": 1360, + "6": 731, + "7": 323, + "8": 544, + "9": 10888, + "17": 416, + "25": 416, + "33": 416, + "41": 416, + "49": 416, + "57": 416, + "65": 416, + "73": 208, + "137": 208 + }, + "tested": "364665195644007/100000000000000000" +} diff --git a/research/p104-rank-seven-prefix-bank-bound/inputs/exterior_rank56.py b/research/p104-rank-seven-prefix-bank-bound/inputs/exterior_rank56.py new file mode 100644 index 0000000000..427845137e --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/inputs/exterior_rank56.py @@ -0,0 +1,179 @@ +"""Exact modular exterior minors for the frozen rank-four/five banks.""" +from collections import Counter, defaultdict +from fractions import Fraction +from functools import cache +from gzip import decompress +from hashlib import sha256 +import json +from math import isqrt +from pathlib import Path +import sys +from time import monotonic + +HEAD = "aaeec8c0acf01e99a5f331ef363a698d9c084ace" +P = 65521 +PINS = { + "inputs/GEOMETRY.json": "238135413a5646cb39b34dd65dad73b3032f28352f114da9d67b854ffff39250", + "inputs/PRICE.json": "b4bf8e00a8289f03b1da731fb3ab563a771d88d875e0da73acf70954df2f2c56", + "inputs/7334-WORD.json.gz": "4b9fd1187b34ed97c3ac0c760d73531735a5d0ebc5b4d4ab4377160b20d9bb2a", +} + + +def unique(items): + d = dict(items) + if len(d) != len(items): + raise ValueError("duplicate JSON key") + return d + + +def checked(root, name): + raw = (root / name).read_bytes() + if sha256(raw).hexdigest() != PINS[name]: + raise ValueError(f"changed dependency: {name}") + return json.loads(decompress(raw) if name.endswith(".gz") else raw, + object_pairs_hook=unique) + + +@cache +def scalar(x): + q = Fraction(x) + if q.denominator % P == 0: + raise ValueError("nonunit native denominator") + return q.numerator * pow(q.denominator, -1, P) % P + + +def plus(row, other, c): + if c: + for k, x in other.items(): + y = (row.get(k, 0) + c * x) % P + if y: + row[k] = y + else: + row.pop(k, None) + + +def exterior_minor(bank, rows, allowed): + """Use the discovered pivot order as the column order of the minor.""" + basis = [] + determinant = 1 + for role in bank: + row = {i: x for i, x in rows[role].items() if i not in allowed} + for k, vector in basis: + plus(row, vector, -row.get(k, 0)) + if row: + k = min(row) + pivot = row[k] + determinant = determinant * pivot % P + scale = pow(pivot, -1, P) + basis.append((k, {i: x * scale % P for i, x in row.items()})) + rank = len(basis) + full = rank == len(bank) + return dict(exterior_rank=rank, columns=[k for k, _ in basis], + determinant=determinant if full else None, + disposition="excluded" if full else "rank drop") + + +def controls(): + bank = [0, 1] + rows = [{0: 2, 1: 3}, {0: 5, 1: 7}] + x = exterior_minor(bank, rows, set()) + assert x["determinant"] == P - 1 and x["columns"] == [0, 1] + rows = [{0: 1, 2: 1}, {1: 1, 2: 1}] + assert exterior_minor(bank, rows, {0, 1})["disposition"] == "rank drop" + try: + scalar(f"1/{P}") + except ValueError: + pass + else: + raise AssertionError("nonunit denominator admitted") + return ["determinant sign", "planted nonzero pure prefix", "nonunit denominator rejection"] + + +def sweep(word, keys, allowed, deadline): + n = word["public"] + active = word["initial"] + [None] * word["owned_fields"] + rows = [{i: 1} for i in range(n)] + [None] * word["owned_fields"] + requests = defaultdict(list) + for t, c in keys: + requests[t].append(c) + requested = set(keys) + out = {} + finished = 0 + for t, e in enumerate(word["program"]): + if (t % 128 == 0 or t in requests) and monotonic() >= deadline: + break + for c in requests.get(t, ()): + public = [i for i in range(n) if active[i] == c] + owned = [i for i in range(n, len(active)) if active[i] == c] + pivots = sorted(set(public) & allowed) + assert pivots and len(word["frames"][c]) in (5, 6) + if t: + prior = word["program"][t - 1] + charts = prior[2:4] if prior[0] == "MOVE" else prior[-1:] + assert c in charts + out[t, c] = dict(key=[t, c], public=public, owned=owned, pivots=pivots, + **exterior_minor(public, rows, allowed)) + op, r, *a = e + if op == "MOVE": + assert active[r] == a[0] and a[2] == (r >= n) + active[r] = a[1] + elif op == "INIT": + assert active[r] is None and r >= n and rows[r] is None + active[r], rows[r] = a[0], {} + elif op == "CLEAR": + assert active[r] == a[0] and r >= n and rows[r] is not None + active[r] = rows[r] = None + elif op == "SCALE": + assert active[r] == a[1] + c = scalar(a[0]) + rows[r] = {i: c * x % P for i, x in rows[r].items()} if c else {} + else: + s, c, f = a + assert active[r] == active[s] == f and r != s and op in ("ADD", "COPY") + if op == "COPY": + assert r >= n and not rows[r] + plus(rows[r], rows[s], scalar(c)) + finished = t + 1 + if finished == len(word["program"]): + assert active == word["final"] + [None] * word["owned_fields"] + assert requested == out.keys() + return out, finished + + +def main(): + deadline = monotonic() + 32 + root = Path(sys.argv[1]) + geom = checked(root, "inputs/GEOMETRY.json") + price = checked(root, "inputs/PRICE.json") + word = checked(root, "inputs/7334-WORD.json.gz") + assert geom["head"] == price["head"] == HEAD + assert geom["price_sha256"] == PINS["inputs/PRICE.json"] + assert all(P % i for i in range(2, isqrt(P) + 1)) + allowed = set(price["endpoint_cohort"]) + assert len(allowed) == 615 + chosen = {tuple(r["key"]): r for r in geom["selected"]} + keys = [tuple(k) for k in geom["unvisited_keys"]] + assert len(chosen) == 24 and len(set(keys)) == len(keys) == 4183 + assert set(keys) | chosen.keys() == {tuple(k) for k in geom["all_representative_keys"]} + checks = controls() + out, finished = sweep(word, list(chosen) + keys, allowed, deadline) + control_records = [] + for k, earlier in chosen.items(): + if k in out: + r = out[k] + assert r["disposition"] == "excluded" + assert all(r[f] == earlier[f] for f in ("public", "owned", "pivots")) + control_records.append(r) + tested = [out[k] for k in keys if k in out] + missing = [k for k in keys if k not in out] + print(json.dumps(dict(head=HEAD, pins=PINS, prime=P, phase="normalized rational cocharts", + limit_cases=4183, limit_seconds=32, events_processed=finished, + status="CAPPED" if missing or len(control_records) != 24 else "EXHAUSTED", + controls=checks, prior_controls=control_records, results=tested, + counts=Counter(r["disposition"] for r in tested), unvisited=missing, + rank_drops=[r["key"] for r in tested if r["disposition"] == "rank drop"]), + separators=(",", ":"), sort_keys=True)) + + +if __name__ == "__main__": + main() diff --git a/research/p104-rank-seven-prefix-bank-bound/inputs/pricing.py b/research/p104-rank-seven-prefix-bank-bound/inputs/pricing.py new file mode 100644 index 0000000000..40ec194017 --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/inputs/pricing.py @@ -0,0 +1,82 @@ +"""Directed interval arithmetic and the retained signed BIT invoice.""" +from collections import Counter +from fractions import Fraction +from functools import cache + +TARGET = "10018846261809/2500000000000000" +SCALE = 10**49 + + +def rounded(x, upper): + scaled = SCALE*x + if upper: + return Fraction(-((-scaled.numerator) // scaled.denominator), SCALE) + return Fraction(scaled.numerator // scaled.denominator, SCALE) + + +@cache +def log_bounds(x): + z = (x-1)/(x+1) + terms = 60 + exact_partial = 2*sum(z**(2*i+1)/(2*i+1) for i in range(terms)) + tail = 2*z**(2*terms+1)/((2*terms+1)*(1-z*z)) + return rounded(exact_partial, False), rounded(exact_partial+tail, True) + + +@cache +def power_bounds(rank, k): + binary = 2**(rank.bit_length()-1) + shift = binary.bit_length()-1 + l2, u2 = log_bounds(Fraction(2)) + lo, hi = log_bounds(Fraction(rank, binary)) + lo, hi = k*(lo+shift*l2), k*(hi+shift*u2) + assert 0 <= lo <= hi < 1 + + def exponential(z, terms): + total = term = Fraction(1) + for i in range(1, terms+1): + term *= -z/i + total += term + return total + + return rounded(rank*exponential(hi, 35), False), rounded(rank*exponential(lo, 34), True) + + +def cost(hist, k): + lower = upper = Fraction(0) + for r, n in hist.items(): + a, b = (n*x for x in power_bounds(r, k)) + lower += min(a, b) + upper += max(a, b) + return lower, upper + + +def profile(invoice, native, word, ranks): + copies = invoice["native_calls"] + assert copies == len(invoice["native_instances"]) == 36 + assert {tuple((r["stage"], r["copy"])) for r in invoice["native_instances"]} == { + (stage, which) for stage in range(1, 19) for which in (0, 1) + } + assert all(r["ports"] == 111 for r in invoice["native_instances"]) + assert native == Counter({int(r): n for r, n in invoice["native_paid"].items()}) + assert sum(native.values()) == 2871 + caller_paid = {1: 444, **{r: 444 for r in range(7, 57, 7)}} + assert invoice["event_counts"]["QUERY"]*111 == caller_paid[1] + assert invoice["event_counts"]["IDLE_ONE"]*111 == 8*444 + full_paid = Counter({r: copies*n for r, n in native.items()}) + full_paid.update(caller_paid) + + helpers = Counter(ranks[word["final"][j]]-ranks[word["start"][j]] + for j in range(222, word["public"])) + assert helpers == Counter({int(r): n for r, n in invoice["native_helpers"].items()}) + caller_targets = {**{r: 444 for r in range(8, 65, 7)}, 127: 222} + full_targets = Counter({r: copies*n for r, n in helpers.items()}) + full_targets.update(caller_targets) + assert full_paid == Counter({int(r): n for r, n in invoice["paid"].items()}) + assert full_targets == Counter({int(r): n for r, n in invoice["targets"].items()}) + assert sum(full_paid.values()) == invoice["paid_jobs"] + assert sum(full_targets.values()) == invoice["productive_fields"] + signed = full_targets.copy() + signed.subtract(full_paid) + assert sum(r*n for r, n in signed.items()) == invoice["rank_surplus"] + return signed, copies diff --git a/research/p104-rank-seven-prefix-bank-bound/inputs/reverse_engine.py b/research/p104-rank-seven-prefix-bank-bound/inputs/reverse_engine.py new file mode 100644 index 0000000000..ebfc82f83f --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/inputs/reverse_engine.py @@ -0,0 +1,148 @@ +"""Check the 2,128 frozen public banks by exact modular suffix minors.""" +from collections import Counter, defaultdict +from gzip import decompress +from hashlib import sha256 +import json +from pathlib import Path +from runpy import run_path +import sys +from time import monotonic + +HEAD = "aaeec8c0acf01e99a5f331ef363a698d9c084ace" +PINS = { + "price/KEYS.json": "a131ec5bf96baac89f0f6623cf7d9dff06601b36ea720474311ee7ecb394f6e2", + "inputs/PRICE.json": "b4bf8e00a8289f03b1da731fb3ab563a771d88d875e0da73acf70954df2f2c56", + "inputs/7334-WORD.json.gz": "4b9fd1187b34ed97c3ac0c760d73531735a5d0ebc5b4d4ab4377160b20d9bb2a", + "inputs/exterior_minor.py": "b25fef5432d8ea9cff9eecc422cf07ccf7473568084de3e8d3d1b5224793504d", +} + + +def authenticated(root): + raw = {} + for path, expected in PINS.items(): + raw[path] = (root / path).read_bytes() + if sha256(raw[path]).hexdigest() != expected: + raise ValueError(f"changed dependency: {path}") + return raw + + +def reverse_event(event, active, columns, public, scalar, plus, prime): + op, dst, *args = event + if op == "MOVE": + old, new, owned = args + assert active[dst] == new and owned == (dst >= public) + active[dst] = old + elif op == "CLEAR": + assert dst >= public and active[dst] is None and columns[dst] is None + active[dst], columns[dst] = args[0], {} + elif op == "INIT": + assert dst >= public and active[dst] == args[0] + active[dst] = columns[dst] = None + elif op == "SCALE": + coefficient, chart = args + assert active[dst] == chart + factor = scalar(coefficient) + columns[dst] = {k: factor * v % prime for k, v in columns[dst].items() + if factor * v % prime} + else: + src, coefficient, chart = args + assert op in ("ADD", "COPY") and dst != src + assert active[dst] == active[src] == chart + # The source contributes to both post-event fields. A guarded COPY + # replaces the destination, whose required pre-event value is zero. + plus(columns[src], columns[dst], scalar(coefficient)) + if op == "COPY": + assert dst >= public + columns[dst] = {} + + +def controls(engine): + scalar, plus, prime = (engine[name] for name in ("scalar", "plus", "P")) + active = [4, 4, None] + cols = [{0: 1}, {1: 1}, None] + tape = [ + ("ADD", 1, 0, "-3/2", 4), + ("SCALE", 0, "2", 4), + ("INIT", 2, 4), + ("COPY", 2, 1, "1", 4), + ("ADD", 0, 2, "5", 4), + ("CLEAR", 2, 4), + ] + for event in reversed(tape): + reverse_event(event, active, cols, 2, scalar, plus, prime) + assert cols == [{0: scalar("-11/2"), 1: scalar("-3/2")}, {0: 5, 1: 1}, None] + assert active == [4, 4, None] + minor = engine["exterior_minor"] + assert minor([0, 1], cols, set())["disposition"] == "excluded" + assert minor([0, 1], cols, {0})["disposition"] == "rank drop" + return ["signed two-output impulse with owned COPY and CLEAR", + "full exterior rank", "planted pure suffix", *engine["controls"]()] + + +def sweep(word, records, cohort, engine, deadline): + public = word["public"] + active = word["final"] + [None] * word["owned_fields"] + columns = [{i: 1} for i in range(public)] + [None] * word["owned_fields"] + requests = defaultdict(list) + for record in records: + requests[record["key"][0]].append(record) + scalar, plus, prime, minor = (engine[name] for name in ("scalar", "plus", "P", "exterior_minor")) + seen, visited = {}, 0 + for cut in range(len(word["program"]), -1, -1): + if (cut % 128 == 0 or cut in requests) and monotonic() >= deadline: + break + for record in requests.get(cut, ()): + chart = record["key"][1] + public_bank = [r for r in range(public) if active[r] == chart] + owned_bank = [r for r in range(public, len(active)) if active[r] == chart] + assert public_bank == record["public"] and owned_bank == record["owned"] + assert sorted(set(public_bank) & cohort) == record["pivots"] + result = minor(public_bank, columns, cohort) + seen[tuple(record["key"])] = { + "key": record["key"], "public": public_bank, "owned": owned_bank, + "pivots": record["pivots"], "prefix_rank_mod_65521": record["exterior_rank"], + "suffix_rank_mod_65521": result["exterior_rank"], "output_minor_rows": result["columns"], + "determinant_mod_65521": result["determinant"], "disposition": result["disposition"], + } + if not cut: + assert active == word["initial"] + [None] * word["owned_fields"] + break + reverse_event(word["program"][cut - 1], active, columns, public, scalar, plus, prime) + visited += 1 + return seen, visited + + +def main(): + assert __debug__ + deadline = monotonic() + 32 + root = Path(sys.argv[1]) + raw = authenticated(root) + engine = run_path(str(root / "inputs/exterior_minor.py")) + unique = engine["unique"] + frozen = json.loads(raw["price/KEYS.json"], object_pairs_hook=unique) + price = json.loads(raw["inputs/PRICE.json"], object_pairs_hook=unique) + word = json.loads(decompress(raw["inputs/7334-WORD.json.gz"]), object_pairs_hook=unique) + assert frozen["head"] == price["head"] == HEAD + assert frozen["source_sha256"]["inputs/7334-WORD.json.gz"] == PINS["inputs/7334-WORD.json.gz"] + assert frozen["source_sha256"]["inputs/PRICE.json"] == PINS["inputs/PRICE.json"] + records = frozen["keys"] + keys = [tuple(row["key"]) for row in records] + assert len(keys) == len(set(keys)) == frozen["reverse_case_cap"] == 2128 + cohort = set(price["endpoint_cohort"]) + assert len(cohort) == 615 + checks = controls(engine) + found, visited = sweep(word, records, cohort, engine, deadline) + results = [found[k] for k in keys if k in found] + pending = [list(k) for k in keys if k not in found] + print(json.dumps({ + "head": HEAD, "pins": PINS, "scope": "normalized suffix on the frozen public bank only", + "prime": engine["P"], "cases_cap": 2128, "seconds_cap": 32, "events_processed": visited, + "status": "CAPPED" if pending or visited != len(word["program"]) else "EXHAUSTED", + "controls": checks, "counts": Counter(row["disposition"] for row in results), + "results": results, "unvisited": pending, + "rank_drops": [row["key"] for row in results if row["disposition"] == "rank drop"], + }, separators=(",", ":"), sort_keys=True)) + + +if __name__ == "__main__": + main() diff --git a/research/p104-rank-seven-prefix-bank-bound/receipts/RECONCILED.json b/research/p104-rank-seven-prefix-bank-bound/receipts/RECONCILED.json new file mode 100644 index 0000000000..b160f432e5 --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/receipts/RECONCILED.json @@ -0,0 +1,691 @@ +{ + "counts": { + "continuation direct minor": 16, + "continuation minor via alias": 11, + "original direct minor": 16, + "original minor via alias": 9, + "unresolved after cap": 13 + }, + "excluded": 52, + "head": "aaeec8c0acf01e99a5f331ef363a698d9c084ace", + "original": 65, + "rows": [ + { + "disposition": "original direct minor", + "key": [ + 40313, + 647 + ], + "witness": [ + 40313, + 647 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40314, + 647 + ], + "witness": [ + 40314, + 647 + ] + }, + { + "disposition": "original minor via alias", + "key": [ + 40315, + 647 + ], + "witness": [ + 40314, + 647 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40316, + 647 + ], + "witness": [ + 40316, + 647 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40317, + 647 + ], + "witness": [ + 40316, + 647 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40319, + 647 + ], + "witness": [ + 40319, + 647 + ] + }, + { + "disposition": "unresolved after cap", + "key": [ + 40322, + 647 + ], + "witness": null + }, + { + "disposition": "original direct minor", + "key": [ + 40332, + 647 + ], + "witness": [ + 40332, + 647 + ] + }, + { + "disposition": "original minor via alias", + "key": [ + 40333, + 647 + ], + "witness": [ + 40332, + 647 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40338, + 645 + ], + "witness": [ + 40338, + 645 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40339, + 645 + ], + "witness": [ + 40339, + 645 + ] + }, + { + "disposition": "original minor via alias", + "key": [ + 40340, + 645 + ], + "witness": [ + 40339, + 645 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40341, + 645 + ], + "witness": [ + 40341, + 645 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40342, + 645 + ], + "witness": [ + 40341, + 645 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40344, + 645 + ], + "witness": [ + 40344, + 645 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40347, + 645 + ], + "witness": [ + 40347, + 645 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40348, + 645 + ], + "witness": [ + 40347, + 645 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40352, + 645 + ], + "witness": [ + 40352, + 645 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40353, + 645 + ], + "witness": [ + 40352, + 645 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40372, + 647 + ], + "witness": [ + 40372, + 647 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40373, + 647 + ], + "witness": [ + 40372, + 647 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40374, + 645 + ], + "witness": [ + 40374, + 645 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40637, + 645 + ], + "witness": [ + 40637, + 645 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40715, + 694 + ], + "witness": [ + 40715, + 694 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40716, + 694 + ], + "witness": [ + 40716, + 694 + ] + }, + { + "disposition": "original minor via alias", + "key": [ + 40717, + 694 + ], + "witness": [ + 40716, + 694 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40718, + 694 + ], + "witness": [ + 40718, + 694 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40719, + 694 + ], + "witness": [ + 40718, + 694 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40721, + 694 + ], + "witness": [ + 40721, + 694 + ] + }, + { + "disposition": "unresolved after cap", + "key": [ + 40724, + 694 + ], + "witness": null + }, + { + "disposition": "original direct minor", + "key": [ + 40730, + 695 + ], + "witness": [ + 40730, + 695 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40731, + 695 + ], + "witness": [ + 40731, + 695 + ] + }, + { + "disposition": "original minor via alias", + "key": [ + 40732, + 695 + ], + "witness": [ + 40731, + 695 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40733, + 695 + ], + "witness": [ + 40733, + 695 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40734, + 695 + ], + "witness": [ + 40733, + 695 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40736, + 695 + ], + "witness": [ + 40736, + 695 + ] + }, + { + "disposition": "unresolved after cap", + "key": [ + 40742, + 695 + ], + "witness": null + }, + { + "disposition": "original direct minor", + "key": [ + 40751, + 693 + ], + "witness": [ + 40751, + 693 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40752, + 693 + ], + "witness": [ + 40752, + 693 + ] + }, + { + "disposition": "original minor via alias", + "key": [ + 40753, + 693 + ], + "witness": [ + 40752, + 693 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40754, + 693 + ], + "witness": [ + 40754, + 693 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40755, + 693 + ], + "witness": [ + 40754, + 693 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40757, + 693 + ], + "witness": [ + 40757, + 693 + ] + }, + { + "disposition": "unresolved after cap", + "key": [ + 40762, + 693 + ], + "witness": null + }, + { + "disposition": "original direct minor", + "key": [ + 40768, + 695 + ], + "witness": [ + 40768, + 695 + ] + }, + { + "disposition": "original minor via alias", + "key": [ + 40769, + 695 + ], + "witness": [ + 40768, + 695 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40772, + 693 + ], + "witness": [ + 40772, + 693 + ] + }, + { + "disposition": "original minor via alias", + "key": [ + 40773, + 693 + ], + "witness": [ + 40772, + 693 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40774, + 693 + ], + "witness": [ + 40774, + 693 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40775, + 693 + ], + "witness": [ + 40774, + 693 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40776, + 694 + ], + "witness": [ + 40776, + 694 + ] + }, + { + "disposition": "original minor via alias", + "key": [ + 40777, + 694 + ], + "witness": [ + 40776, + 694 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40779, + 695 + ], + "witness": [ + 40779, + 695 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40780, + 695 + ], + "witness": [ + 40779, + 695 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40781, + 694 + ], + "witness": [ + 40781, + 694 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40782, + 694 + ], + "witness": [ + 40781, + 694 + ] + }, + { + "disposition": "unresolved after cap", + "key": [ + 40783, + 693 + ], + "witness": null + }, + { + "disposition": "unresolved after cap", + "key": [ + 40787, + 695 + ], + "witness": null + }, + { + "disposition": "unresolved after cap", + "key": [ + 40796, + 694 + ], + "witness": null + }, + { + "disposition": "unresolved after cap", + "key": [ + 40802, + 645 + ], + "witness": null + }, + { + "disposition": "unresolved after cap", + "key": [ + 40840, + 695 + ], + "witness": null + }, + { + "disposition": "unresolved after cap", + "key": [ + 41059, + 694 + ], + "witness": null + }, + { + "disposition": "unresolved after cap", + "key": [ + 42156, + 693 + ], + "witness": null + }, + { + "disposition": "unresolved after cap", + "key": [ + 42192, + 647 + ], + "witness": null + }, + { + "disposition": "unresolved after cap", + "key": [ + 42279, + 647 + ], + "witness": null + } + ], + "unresolved": 13 +} diff --git a/research/p104-rank-seven-prefix-bank-bound/receipts/SHA256.json b/research/p104-rank-seven-prefix-bank-bound/receipts/SHA256.json new file mode 100644 index 0000000000..653bb906ce --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/receipts/SHA256.json @@ -0,0 +1,11 @@ +{ + "R102-GEOMETRY.json": "2d0dee60998d168d2eff4c16794176c5ec3b4d18ffa8bde247602035f1b68129", + "R102-PREFIX.json": "65c11b0a42092557fe1c64b4feb2f61e2d16c636cfcaddf7f95ec09dbdd27452", + "R102-PRICE.json": "4e0d6436eb4fc6a9dfa34c05ba98aacc63e3a8bf7214145dd9f9254763c5a13e", + "R102-SECOND.json": "51c9eb3af7b4d5ff60daef468f3bf262cb485bb88f4d0394d91b83d7eba2bffd", + "R105-ALIASES.json": "ba0120da7b05b948b1e8294c6b3844deade2c40be1f2e0abf4e0beef395f5c85", + "R105-MODULAR.json": "1d99a9842dc8c42395878eb0c14b0027656041f150672491d65d3f023d9df23d", + "R105-REVERSE.json": "ec0e9e642e8525f8d9d91e481e3f03a73539f3683b3adffef8cb399fcc7e13bf", + "R105-SECOND.json": "86dc10932eae8abebf8e122bfcb5d96209a1f9e61838f6f6d55f6e9c4ade1ce6", + "R105-SELECTION.json": "3bd7bdc9859436ef1d75d011e09d9dfc43a731c5b0a8e9c42fc96d9a6481a30c" +} diff --git a/research/p104-rank-seven-prefix-bank-bound/replay.py b/research/p104-rank-seven-prefix-bank-bound/replay.py new file mode 100644 index 0000000000..9c97d70b12 --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/replay.py @@ -0,0 +1,202 @@ +"""Replay the fixed-paid rank-seven bank and prefix exclusion receipts.""" +from argparse import ArgumentParser +from collections import Counter +from fractions import Fraction +from gzip import decompress +from hashlib import sha1, sha256 +from json import dumps, loads +from pathlib import Path, PurePosixPath +from shutil import copyfile +from subprocess import run +import sys +from tempfile import TemporaryDirectory + +ROOT = Path(__file__).resolve().parent +HEAD = "aaeec8c0acf01e99a5f331ef363a698d9c084ace" + + +def unique(items): + result = dict(items) + if len(result) != len(items): + raise ValueError("duplicate JSON key") + return result + + +def decode(data): + return loads(data, object_pairs_hook=unique) + + +def digest(data): + return sha256(data).hexdigest() + + +def relative(name): + path = PurePosixPath(name) + if path.is_absolute() or path.as_posix() != name or ".." in path.parts: + raise ValueError(f"invalid relative path: {name}") + return path + + +def authenticate(): + pins = decode((ROOT / "LOCAL-PINS.json").read_bytes()) + for path, expected in pins.items(): + if digest((ROOT / relative(path)).read_bytes()) != expected: + raise ValueError(f"changed package dependency: {path}") + provenance = decode((ROOT / "PROVENANCE.json").read_bytes()) + for path, record in provenance["files"].items(): + raw = (ROOT / relative(path)).read_bytes() + assert digest(raw) == record["sha256"] == pins[path] + assert sha1(f"blob {len(raw)}\0".encode() + raw).hexdigest() == record["git_blob"] + for path, record in provenance["derived_inputs"].items(): + raw = (ROOT / relative(path)).read_bytes() + if record.get("compression") == "gzip": + raw = decompress(raw) + expected = decode((ROOT / relative(record["receipt"])).read_bytes()) + for key in record["keys"]: + expected = expected[key] + assert digest(raw) == expected + + +def command(script, *args, timeout=25, check=True): + result = run([sys.executable, "-I", "-B", str(script), *map(str,args)], capture_output=True, timeout=timeout) + if check and result.returncode: + sys.stderr.write(result.stderr.decode(errors="replace")) + result.check_returncode() + return result + + +def materialize(scratch): + r102 = scratch / "round102-input" + ind = scratch / "independent" + for d in (r102/"inputs",r102/"lead",ind/"inputs"): + d.mkdir(parents=True) + for name in ("7334-CHANGED.json", "7334-WORD.json.gz", "ADMITTED.json", "READBACK.json", + "exterior_rank56.py", "pricing.py", "reverse_engine.py"): + copyfile(ROOT/"inputs"/name,r102/"inputs"/name) + (r102/"inputs/7314-HELPERS.json").write_bytes(decompress((ROOT/"inputs/7314-HELPERS.json.gz").read_bytes())) + for name in ("quote.py","geometry.py","prefix.py"): + copyfile(ROOT/"engines/r102"/name,r102/"lead"/name) + for name in ("alias_rank_seven.py","freeze_support.py","modular_support.py"): + copyfile(ROOT/"engines/r105"/name,scratch/name) + for name in ("verify.py","r102_prefix.py"): + copyfile(ROOT/"engines/independent"/name,ind/name) + for name in ("r102_prefix.py","second_prime.py"): + copyfile(ROOT/"engines/independent"/name,ind/"inputs"/name) + copyfile(ROOT/"inputs/7334-WORD.json.gz",ind/"inputs/7334-WORD.json.gz") + return r102,ind + + +def reconcile(geometry,old,old_second,alias,reverse,selection,modular,second): + all_keys = {tuple(k) for k in geometry["all_representative_keys"]} + assert len(all_keys) == geometry["eligible_bank_count"] == 65 + assert geometry["eligible_chart_count"] == 5 and geometry["status"] == "EXHAUSTED" + old_keys = {tuple(r["key"]) for r in old["rows"] if r["determinant"]} + assert old_keys == {tuple(r["key"]) for r in old_second["rows"] if r["independent_minor"]["determinant"]} + assert len(old_keys) == 16 and old["counts"] == old_second["counts"] == {"excluded":16} + assert all(r["chart_rank"] == 6 for r in old_second["rows"] + second["rows"]) + assert alias["classes"] == reverse["strict_classes"] == reverse["fixed_public_only_classes"] + assert not reverse["diagnostic_additional_links"] and len(alias["classes"]) == 45 + assert len(alias["links"]) == 60 and sum(r["alias"] for r in alias["links"]) == 20 + chosen = {tuple(r["key"]):r for r in selection["selected"]} + left = {tuple(r["key"]) for r in selection["unselected"]} + assert chosen.keys() == {tuple(r["key"]) for r in modular["results"] if r["status"] == "prefix exclusion"} + assert chosen.keys() == {tuple(r["key"]) for r in second["rows"] if r["independent_minor"]["determinant"]} + assert len(chosen) == second["certified_primary_axes"] == 16 + assert modular["counts"] == second["counts"] == {"prefix exclusion":16} + assert not old_keys & chosen.keys() + disposition = {} + for component in alias["classes"]: + keys = list(map(tuple,component["keys"])) + original = list(map(tuple,component["reuses"])) + new = [k for k in keys if k in chosen] + assert not (original and new) and len(original) <= 1 and len(new) <= 1 + if original: + witness = original[0] + for key in keys: + disposition[key] = ("original direct minor" if key == witness else "original minor via alias",witness) + elif new: + witness = new[0] + assert chosen[witness]["aliases"] == [list(k) for k in keys if k != witness] + for key in keys: + disposition[key] = ("continuation direct minor" if key == witness else "continuation minor via alias",witness) + else: + assert len(keys) == 1 and keys[0] in left + disposition[keys[0]] = ("unresolved after cap",None) + assert disposition.keys() == all_keys + assert left == {k for k,(status,_) in disposition.items() if status == "unresolved after cap"} + counts = Counter(s for s,_ in disposition.values()) + assert counts == {"original direct minor":16,"original minor via alias":9,"continuation direct minor":16, + "continuation minor via alias":11,"unresolved after cap":13} + rows = [dict(key=k,disposition=disposition[k][0],witness=disposition[k][1]) for k in sorted(disposition)] + return dict(head=HEAD,counts=counts,original=65,excluded=52,unresolved=13,rows=rows) + + +def replay(scratch,out): + authenticate() + expected = decode((ROOT / "receipts/SHA256.json").read_bytes()) + r102,ind = materialize(scratch) + produced = {} + + def record(name, target, response): + raw = response.stdout + assert digest(raw) == expected[name], ("changed receipt",name) + target.write_bytes(raw) + produced[name] = raw + return decode(raw) + + price = record("R102-PRICE.json",r102/"lead/PRICE.json",command(r102/"lead/quote.py")) + assert price["head"] == HEAD and price["paid_delta"] == {} and price["productive_delta"] == {"3":17,"4":17,"7":-17} + one = list(map(Fraction,price["at_incumbent"]["gross_one"])) + margin = list(map(Fraction,price["at_incumbent"]["old_margin"])) + assert 0 < one[0] <= one[1] < 1 and one[1]+margin[1] < 1 + assert Fraction(price["at_incumbent"]["whole_5_upper"]) == 5*one[1] + assert Fraction(price["at_target"]["complete_5_upper"]) < 0 + geometry = record("R102-GEOMETRY.json",r102/"lead/GEOMETRY.json", + command(r102/"lead/geometry.py",r102,timeout=20)) + old = record("R102-PREFIX.json",r102/"lead/PREFIX.json",command(r102/"lead/prefix.py",r102)) + for name in ("PRICE.json","GEOMETRY.json","PREFIX.json"): + copyfile(r102/"lead"/name,ind/"inputs"/name) + old_second = record("R102-SECOND.json",ind/"inputs/PREFIX-SECOND-PRIME.json",command(ind/"r102_prefix.py")) + alias = record("R105-ALIASES.json",scratch/"ALIASES.json",command(scratch/"alias_rank_seven.py",r102,timeout=20)) + copyfile(scratch/"ALIASES.json",ind/"inputs/ALIASES.json") + reverse = record("R105-REVERSE.json",scratch/"REVERSE.json",command(ind/"verify.py","alias",timeout=20)) + selection = record("R105-SELECTION.json",scratch/"SELECTION.json",command(scratch/"freeze_support.py")) + modular = record("R105-MODULAR.json",scratch/"MODULAR.json",command(scratch/"modular_support.py")) + for name in ("SELECTION.json","MODULAR.json"): + copyfile(scratch/name,ind/"inputs"/name) + second = record("R105-SECOND.json",scratch/"SECOND.json",command(ind/"verify.py","modular")) + summary = reconcile(geometry,old,old_second,alias,reverse,selection,modular,second) + raw = (dumps(summary,indent=2,sort_keys=True)+"\n").encode() + assert raw == (ROOT/"receipts/RECONCILED.json").read_bytes() + assert set(produced) == set(expected) + produced["RECONCILED.json"] = raw + + for victim,script,args in ( + (ind/"inputs/PRICE.json",ind/"verify.py",("alias",)), + (r102/"inputs/7334-WORD.json.gz",r102/"lead/geometry.py",(r102,)), + ): + before = victim.read_bytes() + victim.write_bytes(before+b"\n") + failure = command(script,*args,check=False) + assert failure.returncode == 1 and not failure.stdout + assert b"changed dependency" in failure.stderr and victim.name.encode() in failure.stderr + victim.write_bytes(before) + + if out is not None: + out.mkdir(parents=True) + for name,content in produced.items(): + (out / relative(name)).write_bytes(content) + print("PASS_RANK_SEVEN_PREFIX_BANK_BOUND original=65 direct=32 transfers=20 excluded=52 unresolved=13") + + +def main(): + assert sys.version_info[:2] == (3,12) and __debug__ + parser = ArgumentParser(description=__doc__) + parser.add_argument("--out",type=Path,help="new directory for the ten regenerated receipts") + args = parser.parse_args() + with TemporaryDirectory() as directory: + replay(Path(directory),args.out) + + +if __name__ == "__main__": + main() From f320c86dd51c760537c6b91f57b49fc88496404e Mon Sep 17 00:00:00 2001 From: ToikY <27568617+ToikY@users.noreply.github.com> Date: Wed, 11 Nov 2026 20:12:36 -0800 Subject: [PATCH 4/4] Exhaust the thirteen residual rank-seven banks --- .../LOCAL-PINS.json | 8 +- .../PROOF.md | 14 +- .../README.md | 37 +- .../TASK.json | 12 +- .../VERIFY.json | 4 +- .../engines/r109/freeze.py | 35 + .../engines/r109/modular_support.py | 92 +++ .../engines/r109/prefix_second_prime.py | 110 +++ .../engines/r109/sweep.py | 55 ++ .../receipts/CLOSED.json | 730 ++++++++++++++++++ .../receipts/R109-SHA256.json | 5 + .../replay.py | 75 +- 12 files changed, 1145 insertions(+), 32 deletions(-) create mode 100644 research/p104-rank-seven-prefix-bank-bound/engines/r109/freeze.py create mode 100644 research/p104-rank-seven-prefix-bank-bound/engines/r109/modular_support.py create mode 100644 research/p104-rank-seven-prefix-bank-bound/engines/r109/prefix_second_prime.py create mode 100644 research/p104-rank-seven-prefix-bank-bound/engines/r109/sweep.py create mode 100644 research/p104-rank-seven-prefix-bank-bound/receipts/CLOSED.json create mode 100644 research/p104-rank-seven-prefix-bank-bound/receipts/R109-SHA256.json diff --git a/research/p104-rank-seven-prefix-bank-bound/LOCAL-PINS.json b/research/p104-rank-seven-prefix-bank-bound/LOCAL-PINS.json index 92b5d101ce..5ba6a5531c 100644 --- a/research/p104-rank-seven-prefix-bank-bound/LOCAL-PINS.json +++ b/research/p104-rank-seven-prefix-bank-bound/LOCAL-PINS.json @@ -9,6 +9,10 @@ "engines/r105/alias_rank_seven.py": "64163173dbfa26637a319d2ae1b2f8602b053526c5d4e4c065b84d8d862301f7", "engines/r105/freeze_support.py": "8d2ab192d4863f7895b0a6ce69f34bd0c03c590b5541064b909e7d3ba41dc4b8", "engines/r105/modular_support.py": "7c5dc578e846f3509aea9637d5b378b15c926a35d6b6cd78c2f5ac488f5ea66d", + "engines/r109/freeze.py": "3ab4e63dab5c34dffedc21a8ba710448a222a6299dc67ab4359fc9beedd335a2", + "engines/r109/modular_support.py": "6396fbc47ed18e197d5da38d2e3edc096adf17ea46beb79cacad7cdcbbddda4a", + "engines/r109/prefix_second_prime.py": "502b1544934e701793b6758a2f22320b639a05d7e7c71b3ade3416bb4a52314b", + "engines/r109/sweep.py": "089192d85154c1f8ff1d1cf6329397fe9d40b3e4b09c18dd9c90eda169f09fd9", "inputs/7314-HELPERS.json.gz": "e817ac36ffd85b5b8ad7320daf57bedfa5692b4a0f2990570008afe4888bca6d", "inputs/7334-CHANGED.json": "f4d3f6ca2d87f8cd68c01ac9f77b69bd5a796f92bd567cea8afe3ac7c72e8e4b", "inputs/7334-WORD.json.gz": "4b9fd1187b34ed97c3ac0c760d73531735a5d0ebc5b4d4ab4377160b20d9bb2a", @@ -18,7 +22,9 @@ "inputs/exterior_rank56.py": "9fceafc627fe3781bcb8d5229eaefebc557de613f0d4723aa1d36ce4ab9954ac", "inputs/pricing.py": "f4d0b6c9314b838d882d6d06020f24881c19a3fda97a7c00df87b1e920785182", "inputs/reverse_engine.py": "751d5d0c4c665c8768ff69bcf939700d3be2f989c59f09af3a4aa14d3c1ebbc4", + "receipts/CLOSED.json": "b3e9f0dca3b11d231dbb26650a479e31fcc4e7bc51ef0d108922dcee7bde0e58", + "receipts/R109-SHA256.json": "93368e1f41a2f324b5f614fc9b1cde3675030c22b418a32159701df13f3ddcb3", "receipts/RECONCILED.json": "fa7b8bba9ae88cb6d66b41b1e28d70d46289e1853da9c8f8f1b52071eb8159bc", "receipts/SHA256.json": "a4fe2ea47920e3548bc8eabca34f69a60e2dcde3da6c650d9138e255d9fde4d2", - "replay.py": "7ff83be28b29af51fe812581cc97ef4d8aea771a57f98fd9e8427b009a8dade4" + "replay.py": "ab8fe90e4d741e4c7ba9d52c3ec60ec969bf58f37d638ddd3a85290711c4f766" } diff --git a/research/p104-rank-seven-prefix-bank-bound/PROOF.md b/research/p104-rank-seven-prefix-bank-bound/PROOF.md index 0217e0057f..458d366013 100644 --- a/research/p104-rank-seven-prefix-bank-bound/PROOF.md +++ b/research/p104-rank-seven-prefix-bank-bound/PROOF.md @@ -23,8 +23,9 @@ native coefficients are reduced only after the engines verify unit denominators for their respective primes, 65521 and 65537. Each nonzero modular determinant implies a nonzero rational determinant. Both engines reconstruct the same public and owned occupancy and -verify 16 original and 16 continuation exclusions. No suffix or -rational pairing is necessary for those 32 direct prefix exclusions. +verify 16 original, 16 continuation and 13 residual exclusions. +No suffix or rational pairing is necessary for these 45 direct +prefix exclusions. ## Transfer through an unchanged bank @@ -53,7 +54,14 @@ Their selection takes the widest previously unresolved public bank first within each chart, round-robin across the five charts, with the earliest cut breaking ties. Thus the two bounded stages exclude 16 + 9 + 16 + 11 = 52 of 65 keys. The exact remaining 13 singleton -keys were outside the second support cap. No κ improvement follows +keys were outside the second support cap. They consist of nine +one-role banks and four two-role banks, with no owned roles. A +separately frozen 13-case replay exhausts them in each prime +field under the same 25-second limit. Both engines independently +verify nonzero full-row-rank prefix minors on all 13. The original +65521 minor column choices also give nonzero determinants when +recomputed at 65537 on each key. The final receipt certifies +65 of 65 keys, with zero unresolved. No κ improvement follows from these exclusions and no signed physical candidate was built. ## Directed complete cost diff --git a/research/p104-rank-seven-prefix-bank-bound/README.md b/research/p104-rank-seven-prefix-bank-bound/README.md index 8260b8bf78..e3fc28ed78 100644 --- a/research/p104-rank-seven-prefix-bank-bound/README.md +++ b/research/p104-rank-seven-prefix-bank-bound/README.md @@ -10,11 +10,12 @@ head `07a76c5e2738882c0cb322278e56f6cae3c9885d`. The proposed fixed-paid change splits one of five rank-seven productive targets into 3+4 or 4+3 at an existing intermediate chart. Exhaustive geometry finds 65 occupied rank-six bank keys on five charts and zero -eligible rank-five keys. Two exact prime-field engines agree on 32 +eligible rank-five keys. Two exact prime-field engines agree on 45 direct exterior-prefix exclusions. Independent literal continuity -replay transfers those exclusions to 20 additional keys, for **52 -excluded and 13 unresolved**. All unresolved keys are singletons in -the proved equivalence partition. [Exact key receipt](receipts/RECONCILED.json). +replay transfers 32 of those certificates to 20 additional keys. +The original two selections excluded 52 keys. A third selection closes +the exact 13 remaining singleton keys at both primes, for **all 65 +excluded and zero unresolved**. [Final key receipt](receipts/CLOSED.json). The fixed paid bill has 110,519 positions across 17 signed caller copies. The relaxed directed upper is 0.294636248924991 raw units @@ -32,25 +33,25 @@ python3.12 -I -B research/p104-rank-seven-prefix-bank-bound/replay.py The replay authenticates the native word and the inherited helper census, rebuilds the directed price and full geometry, checks both -primes for the two frozen 16-key sets, and reconstructs all 60 adjacent -links in both directions. It rejects altered price and word inputs -and reproduces the exact 65-key disposition. Use `--out fresh-directory` -to retain all ten receipts. The standard-library replay needs no Git +primes for the two frozen 16-key sets and the exact 13-key residual, +and reconstructs all 60 adjacent links in both directions. It rejects +altered price, word and residual selection inputs. Use +`--out fresh-directory` to retain the ten predecessor receipts and +the four new residual and closure receipts. The standard-library replay needs no Git metadata, network, external root or prior temporary state. [Source provenance](PROVENANCE.json) · [Path-keyed pins](LOCAL-PINS.json) · -[Receipt hashes](receipts/SHA256.json) · [Cohort preflight](COHORT.md). +[Predecessor receipt hashes](receipts/SHA256.json) · +[Residual receipt hashes](receipts/R109-SHA256.json) · [Cohort preflight](COHORT.md). ## Open next questions -Test exactly the 13 unresolved keys from the reconciliation in one -25-second two-sided modular pass. If both sides drop rank, choose at -most four exact rational pairing tests under a 35-second cap and -preserve any remaining keys. A pair that survives still requires -signed arbitrary-input forward and adjoint action, ownership, -restoration, compiler, precision and tape checks, complete repricing -and independent caller and outer replay. The package tested the -fixed public bank and the existing chart catalogue on the pinned -word. +Could a different chart or a changed paid itinerary supply a new +eligible public bank? Start by specifying one exact change and +pricing its complete bill before a support test. The fixed public +bank, existing catalogue and pinned word in this package are +exhausted. A different mechanism would still need signed +arbitrary-input forward and adjoint action, ownership, restoration, +compiler, precision, tape and independent caller and outer replay. ## Credit diff --git a/research/p104-rank-seven-prefix-bank-bound/TASK.json b/research/p104-rank-seven-prefix-bank-bound/TASK.json index 2479cbb746..08a226d8f1 100644 --- a/research/p104-rank-seven-prefix-bank-bound/TASK.json +++ b/research/p104-rank-seven-prefix-bank-bound/TASK.json @@ -5,13 +5,13 @@ "base_commit": "e54523517d0f03e58352e647c403a5af3e525a57", "bottleneck_link": "A fixed-paid productive split has positive relaxed complete cost only if exact cochart prefix and suffix support can supply a unit pair while keeping the signed caller and supplier contract.", "budget_minutes": 15, - "evidence": "Two primes agree on 32 direct prefix exclusions. Two literal chronology engines agree on 60 adjacent links and transfer exclusions to 20 more keys. The exact 52 exclusions and 13 remaining singleton keys are reconciled.", + "evidence": "Two independent prime-field implementations agree on 45 direct prefix exclusions across three frozen selections. Two literal chronology engines agree on 60 links and 20 additional transfers. The residual 13-key replay closes all 65 keys with zero unresolved.", "open_questions": [ { - "blocked_by": "Both exterior kernels and compatible rational pairing are required. A survivor also needs physical signed assembly, full cost, and complete replay.", - "first_step": "Replay exactly the 13 unresolved keys from receipts/RECONCILED.json in a 25-second two-sided modular gate and take up to four dual drops to a 35-second exact gate.", - "question": "Can one of the 13 remaining singleton banks admit two-sided pure support and an exact unit pair?", - "why_it_matters": "A valid 3+4 or 4+3 split can improve the complete directed complex invoice with every paid position held fixed." + "blocked_by": "The exact fixed-paid and existing-catalogue public bank scope is exhausted. Any changed route needs signed and full-cost verification.", + "first_step": "Choose one explicit new chart or itinerary change, and price its full signed invoice before selecting a bounded support test.", + "question": "Could a different chart or paid itinerary create an eligible bank outside the fixed path scope?", + "why_it_matters": "A legally realized 3+4 or 4+3 target split can improve the complete directed complex invoice." } ], "original_card": { @@ -112,6 +112,6 @@ "schema_version": 1, "scope_change_reason": "Use the distinct chart602\u2192127 endpoint group and rank-five/rank-six intermediate classes. Reuse exact prefix minors only through proved literal bank equivalence.", "scope_status": "changed", - "stop_rule": "One 76,466-event geometry pass, up to 65 frozen alias keys in 20 seconds, and two separately frozen sets of 16 modular prefix keys in 25 seconds per gate. No suffix or exact pair test for full-prefix-rank exclusions.", + "stop_rule": "One 76,466-event geometry pass, up to 65 frozen alias keys in 20 seconds, then frozen sets of 16, 16 and 13 modular keys with 25 seconds per gate. No suffix or exact pairing when full prefix rank excludes each tested key.", "task_id": "p104-side-correction" } diff --git a/research/p104-rank-seven-prefix-bank-bound/VERIFY.json b/research/p104-rank-seven-prefix-bank-bound/VERIFY.json index 1e422d55a1..600727c4f5 100644 --- a/research/p104-rank-seven-prefix-bank-bound/VERIFY.json +++ b/research/p104-rank-seven-prefix-bank-bound/VERIFY.json @@ -7,8 +7,8 @@ "-B", "{package}/replay.py" ], - "checks": "Authenticate exact inputs, reproduce price and complete geometry, independent bounded prefix checks at both primes, literal alias classification and all 65 key dispositions, and changed-input rejection.", - "timeout_seconds": 180 + "checks": "Authenticate exact sources; reproduce complete price and geometry, independent exterior minors at both primes for frozen 16+16+13 keys, literal alias classification, all 65 closed dispositions, and changed price, word and residual selection rejection.", + "timeout_seconds": 240 } ], "inputs": [], diff --git a/research/p104-rank-seven-prefix-bank-bound/engines/r109/freeze.py b/research/p104-rank-seven-prefix-bank-bound/engines/r109/freeze.py new file mode 100644 index 0000000000..090f39e888 --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/engines/r109/freeze.py @@ -0,0 +1,35 @@ +"""Freeze exactly the 13 still-unvisited #7367 bank keys.""" +from collections import Counter +from hashlib import sha256 +import json +from pathlib import Path + +ROOT=Path(__file__).resolve().parents[1] +PINS={ + "inputs/R105-SELECTION.json":"3bd7bdc9859436ef1d75d011e09d9dfc43a731c5b0a8e9c42fc96d9a6481a30c", + "inputs/R105-MODULAR.json":"1d99a9842dc8c42395878eb0c14b0027656041f150672491d65d3f023d9df23d", +} + + +def main(): + assert __debug__ + docs=[] + for path,pin in PINS.items(): + raw=(ROOT/path).read_bytes() + if sha256(raw).hexdigest()!=pin: + raise ValueError(f"changed dependency {path}") + docs.append(json.loads(raw)) + select,mod=docs + assert select["head"]==mod["head"] and mod["counts"]=={"prefix exclusion":16} + assert [r["key"] for r in mod["results"]]==[r["key"] for r in select["selected"]] + keys=select["unselected"] + assert keys==mod["unselected"] and len(keys)==13 + assert all(not r["aliases"] and not r["owned"] for r in keys) + assert Counter(len(r["public"]) for r in keys)=={1:9,2:4} + print(json.dumps(dict(head=select["head"],pins=PINS,selected=keys,unselected=[], + caps={"modular_cases":13,"modular_seconds":25,"exact_cases":4,"exact_seconds":35}), + indent=2,sort_keys=True)) + + +if __name__=="__main__": + main() diff --git a/research/p104-rank-seven-prefix-bank-bound/engines/r109/modular_support.py b/research/p104-rank-seven-prefix-bank-bound/engines/r109/modular_support.py new file mode 100644 index 0000000000..a7455aa93b --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/engines/r109/modular_support.py @@ -0,0 +1,92 @@ +"""Reconstruct two-sided exterior minors for 13 frozen residual quotient classes.""" +from collections import Counter, defaultdict +from gzip import decompress +from hashlib import sha256 +import json +from pathlib import Path +from runpy import run_path +from time import monotonic + +ROOT = Path(__file__).resolve().parent +PINS = { + "SELECTION.json":"d2b40a0130616e378bf2d35e12805c647a1132230b632fe3adc3449bc2778dad", + "round102-input/lead/PRICE.json":"4e0d6436eb4fc6a9dfa34c05ba98aacc63e3a8bf7214145dd9f9254763c5a13e", + "round102-input/inputs/7334-WORD.json.gz":"4b9fd1187b34ed97c3ac0c760d73531735a5d0ebc5b4d4ab4377160b20d9bb2a", + "round102-input/inputs/exterior_rank56.py":"9fceafc627fe3781bcb8d5229eaefebc557de613f0d4723aa1d36ce4ab9954ac", + "round102-input/inputs/reverse_engine.py":"751d5d0c4c665c8768ff69bcf939700d3be2f989c59f09af3a4aa14d3c1ebbc4", +} + + +def checked(): + output={} + for path,digest in PINS.items(): + raw=(ROOT/path).read_bytes() + if sha256(raw).hexdigest()!=digest: + raise ValueError(f"changed dependency {path}") + output[path]=raw + return output + + +def reverse_side(word,rows,cohort,engine,reverse,deadline): + n=word["public"] + state=word["final"]+[None]*word["owned_fields"] + cols=[{i:1} for i in range(n)]+[None]*word["owned_fields"] + requests=defaultdict(list) + for row in rows: + requests[row["key"][0]].append(row) + out={} + tape=word["program"] + for t in range(len(tape),-1,-1): + if (t%128==0 or t in requests) and monotonic()>=deadline: + break + for row in requests.get(t,()): + chart=row["key"][1] + bank=[r for r in range(n) if state[r]==chart] + owners=[r for r in range(n,len(state)) if state[r]==chart] + assert bank==row["public"] and owners==row["owned"] + out[tuple(row["key"])]=engine["exterior_minor"](bank,cols,cohort) + if not t: + assert state==word["initial"]+[None]*word["owned_fields"] + break + reverse["reverse_event"](tape[t-1],state,cols,n,engine["scalar"],engine["plus"],engine["P"]) + return out + + +def main(): + assert __debug__ + deadline=monotonic()+22 + docs=checked() + price=json.loads(docs["round102-input/lead/PRICE.json"]) + selection=json.loads(docs["SELECTION.json"]) + word=json.loads(decompress(docs["round102-input/inputs/7334-WORD.json.gz"])) + engine=run_path(str(ROOT/"round102-input/inputs/exterior_rank56.py")) + reverse=run_path(str(ROOT/"round102-input/inputs/reverse_engine.py")) + controls=reverse["controls"](engine) + cohort=set(price["cohort"]) + rows=selection["selected"] + assert len(rows)==13 and selection["head"]==price["head"]==engine["HEAD"] + keys=[tuple(r["key"]) for r in rows] + prefix,n=engine["sweep"](word,keys,cohort,deadline) + for row in rows: + k=tuple(row["key"]) + if k in prefix: + assert all(row[f]==prefix[k][f] for f in ("public","owned","pivots")) + open_rows=[r for r,k in zip(rows,keys,strict=True) if k in prefix and prefix[k]["disposition"]=="rank drop"] + suffix=reverse_side(word,open_rows,cohort,engine,reverse,deadline) if open_rows else {} + results=[] + for row,k in zip(rows,keys,strict=True): + f,s=prefix.get(k),suffix.get(k) + if f and f["disposition"]=="excluded": + status="prefix exclusion" + elif s: + status="suffix exclusion" if s["disposition"]=="excluded" else "dual drop" + else: + status="capped" + results.append(row|dict(status=status,prefix=f,suffix=s)) + print(json.dumps(dict(head=price["head"],pins=PINS,prime=engine["P"],controls=controls,caps=selection["caps"], + prefix_events=n,results=results,counts=Counter(r["status"] for r in results),unselected=selection["unselected"]), + indent=2,sort_keys=True)) + + +if __name__=="__main__": + main() diff --git a/research/p104-rank-seven-prefix-bank-bound/engines/r109/prefix_second_prime.py b/research/p104-rank-seven-prefix-bank-bound/engines/r109/prefix_second_prime.py new file mode 100644 index 0000000000..af7215d614 --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/engines/r109/prefix_second_prime.py @@ -0,0 +1,110 @@ +"""Check exactly the 13 frozen R109 prefix banks at prime 65537.""" +from argparse import ArgumentParser +from collections import Counter +from gzip import decompress +from hashlib import sha256 +from json import dumps, loads +from pathlib import Path +from runpy import run_path +from signal import SIGALRM, alarm, signal +from time import monotonic +import sys + +ROOT=Path(__file__).resolve().parent +HEAD="aaeec8c0acf01e99a5f331ef363a698d9c084ace" +WORD="4b9fd1187b34ed97c3ac0c760d73531735a5d0ebc5b4d4ab4377160b20d9bb2a" +PAYLOAD="9aa8d6b054ba7eb2289d052c1079b16be518d2f0fbfb244569fa18e3733acdac" +PINS={ + "inputs/SELECTION.json":"d2b40a0130616e378bf2d35e12805c647a1132230b632fe3adc3449bc2778dad", + "inputs/MODULAR.json":"792eeb7e32a9e4c980bbf4597cd166bc92cf6c25aac0ba12faeb45b26bb49199", + "inputs/R105-SELECTION.json":"3bd7bdc9859436ef1d75d011e09d9dfc43a731c5b0a8e9c42fc96d9a6481a30c", + "inputs/R105-MODULAR.json":"1d99a9842dc8c42395878eb0c14b0027656041f150672491d65d3f023d9df23d", + "inputs/GEOMETRY.json":"2d0dee60998d168d2eff4c16794176c5ec3b4d18ffa8bde247602035f1b68129", + "inputs/PRICE.json":"4e0d6436eb4fc6a9dfa34c05ba98aacc63e3a8bf7214145dd9f9254763c5a13e", + "inputs/sweep.py":"089192d85154c1f8ff1d1cf6329397fe9d40b3e4b09c18dd9c90eda169f09fd9", + "inputs/second_prime.py":"21dbd96192e1f60c00ceddba01a7e8d0ddd7d6ad7da4ad3ed22ef2e47cc589c4", + "inputs/7334-WORD.json.gz":WORD, +} +CAP, SECONDS, EVENTS, PRIME=13,25,76466,65537 + + +def unique(items): + d=dict(items) + if len(d)!=len(items): + raise ValueError("duplicate JSON key") + return d + + +def freeze(raw): + def read(name): + return loads(raw[f"inputs/{name}.json"],object_pairs_hook=unique) + price,geom,selection,primary,prior_s,prior_m=(read(k) for k in + ("PRICE","GEOMETRY","SELECTION","MODULAR","R105-SELECTION","R105-MODULAR")) + assert all(d["head"]==HEAD for d in (price,geom,selection,primary,prior_s,prior_m)) + assert geom["price_sha256"]==PINS["inputs/PRICE.json"] and geom["word_sha256"]==price["word_sha256"]==WORD + assert geom["eligible_bank_count"]==65 and geom["visited_events"]==primary["prefix_events"]==EVENTS + assert primary["prime"]==65521 and primary["counts"]=={"prefix exclusion":CAP} + assert primary["caps"]==selection["caps"] and selection["caps"]["modular_cases"]==CAP + assert selection["caps"]["modular_seconds"]==SECONDS and not selection["unselected"] and not primary["unselected"] + assert all(selection["pins"][k]==PINS[k] for k in ("inputs/R105-SELECTION.json","inputs/R105-MODULAR.json")) + assert primary["pins"]["SELECTION.json"]==PINS["inputs/SELECTION.json"] + assert selection["selected"]==prior_s["unselected"]==prior_m["unselected"] + assert len(selection["selected"])==CAP and all(not row["aliases"] for row in selection["selected"]) + assert prior_m["counts"]=={"prefix exclusion":16} + chosen={tuple(r["key"]):r for r in selection["selected"]} + earlier={tuple(r["key"]):r["prefix"] for r in primary["results"]} + geometry={tuple(r["key"]):r for r in geom["all_representatives"]} + assert list(chosen)==list(earlier) and len(chosen)==CAP + for k,r in chosen.items(): + assert earlier[k]["determinant"] and earlier[k]["exterior_rank"]==len(r["public"]) + assert all(r[f]==earlier[k][f]==geometry[k][f] for f in ("public","owned","pivots")) + cohort=set(price["cohort"]) + assert cohort=={1457,1458,1474,1475,1476} + return cohort,chosen,earlier + + +def main(): + p=ArgumentParser(description=__doc__) + p.add_argument("--root",type=Path,default=ROOT) + args=p.parse_args() + assert __debug__ and sys.version_info[:2]==(3,12) + def stop(*_): + raise TimeoutError("hard 25-second cap") + signal(SIGALRM,stop) + alarm(SECONDS) + deadline=monotonic()+23 + chosen,out,progress,checks={},{},{},[] + timeout=None + try: + raw={} + for rel,digest in PINS.items(): + data=(args.root/rel).read_bytes() + if sha256(data).hexdigest()!=digest: + raise ValueError(f"changed dependency: {rel}") + raw[rel]=data + cohort,chosen,earlier=freeze(raw) + engine=run_path(str(args.root/"inputs/second_prime.py")) + sweep=run_path(str(args.root/"inputs/sweep.py")) + assert engine["PRIME"]==PRIME + checks=engine["controls"]() + payload=decompress(raw["inputs/7334-WORD.json.gz"]) + assert sha256(payload).hexdigest()==PAYLOAD + word=loads(payload,object_pairs_hook=unique) + sweep["sweep"](word,cohort,chosen,earlier,engine,deadline,progress,out) + except TimeoutError as exc: + timeout=str(exc) + finally: + alarm(0) + rows=[out[k] for k in chosen if k in out] + complete=timeout is None and progress.get("first_unvisited_cut",0) is None and len(rows)==CAP + agreement=complete and all(r["disposition"]=="excluded" for r in rows) + print(dumps(dict(head=HEAD,pins=PINS,prime=PRIME,controls=checks,cap_cases=CAP,cap_seconds=SECONDS, + counts=Counter(r["disposition"] for r in rows),rows=rows,complete=complete,agreement=agreement, + progress=progress,timeout=timeout,original_minor_axes_nonzero=sum(bool(r["primary_minor_det_mod_65537"]) for r in rows), + remaining=[k for k in chosen if k not in out or out[k]["disposition"]!="excluded"]),indent=2,sort_keys=True)) + if not agreement: + raise SystemExit(2) + + +if __name__=="__main__": + main() diff --git a/research/p104-rank-seven-prefix-bank-bound/engines/r109/sweep.py b/research/p104-rank-seven-prefix-bank-bound/engines/r109/sweep.py new file mode 100644 index 0000000000..a9f8541c4d --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/engines/r109/sweep.py @@ -0,0 +1,55 @@ +"""Literal prefix walk reused from the first bounded chart-602 gate.""" +from collections import defaultdict +from time import monotonic + +EVENTS = 76466 + + +def sweep(word, cohort, selected, earlier, engine, deadline, progress, results): + n, owned, tape = (word[k] for k in ("public", "owned_fields", "program")) + assert (n, owned, len(tape)) == (1501, 68, EVENTS) + assert all((word["initial"][r], word["final"][r]) == (602, 127) for r in cohort) + frames = word["frames"] + span = engine["span"] + low, high = span(frames[602]), span(frames[127]) + assert len(low) == 4 and len(high) == 512 and low < high + requests = defaultdict(list) + for cut, chart in selected: + assert 0 <= cut <= EVENTS and len(frames[chart]) in (5, 6) and low < span(frames[chart]) < high + requests[cut].append(chart) + + active = word["initial"] + [None] * owned + vectors = [{r: 1} for r in range(n)] + [None] * owned + fresh, denoms = set(), set() + progress.update(events=0, first_unvisited_cut=0) + for cut in range(EVENTS + 1): + progress["first_unvisited_cut"] = cut + if (cut % 128 == 0 or cut in requests) and monotonic() >= deadline: + break + for chart in requests.get(cut, ()): + key = cut, chart + bank = [r for r in range(n) if active[r] == chart] + owners = [r for r in range(n, n + owned) if active[r] == chart] + pivots = sorted(set(bank) & cohort) + assert pivots and bank == selected[key]["public"] and owners == selected[key]["owned"] + assert pivots == selected[key]["pivots"] + if cut: + last = tape[cut - 1] + assert chart in (last[2:4] if last[0] == "MOVE" else last[-1:]) + proof = engine["classify"](bank, vectors, cohort) + primary_columns = earlier[key]["columns"] + assert len(primary_columns) == len(set(primary_columns)) == len(bank) + assert cohort.isdisjoint(primary_columns) + determinant = engine["verify_minor"]([vectors[r] for r in bank], primary_columns) + results[key] = dict(key=key, chart_rank=len(frames[chart]), public=bank, owned=owners, pivots=pivots, + independent_minor=proof, primary_minor_axes=primary_columns, + primary_minor_det_mod_65537=determinant, + disposition="excluded" if not proof["kernel"] else "modular_rank_drop") + if cut == EVENTS: + assert active == word["final"] + [None] * owned and not fresh + assert len(results) == len(selected) + progress["first_unvisited_cut"] = None + break + engine["apply"](tape[cut], active, vectors, fresh, n, denoms, False) + progress["events"] += 1 + progress["denominator_units"] = sorted(denoms) diff --git a/research/p104-rank-seven-prefix-bank-bound/receipts/CLOSED.json b/research/p104-rank-seven-prefix-bank-bound/receipts/CLOSED.json new file mode 100644 index 0000000000..c099783cc7 --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/receipts/CLOSED.json @@ -0,0 +1,730 @@ +{ + "counts": { + "continuation direct minor": 16, + "continuation minor via alias": 11, + "original direct minor": 16, + "original minor via alias": 9, + "residual direct minor": 13 + }, + "excluded": 65, + "head": "aaeec8c0acf01e99a5f331ef363a698d9c084ace", + "original": 65, + "rows": [ + { + "disposition": "original direct minor", + "key": [ + 40313, + 647 + ], + "witness": [ + 40313, + 647 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40314, + 647 + ], + "witness": [ + 40314, + 647 + ] + }, + { + "disposition": "original minor via alias", + "key": [ + 40315, + 647 + ], + "witness": [ + 40314, + 647 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40316, + 647 + ], + "witness": [ + 40316, + 647 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40317, + 647 + ], + "witness": [ + 40316, + 647 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40319, + 647 + ], + "witness": [ + 40319, + 647 + ] + }, + { + "disposition": "residual direct minor", + "key": [ + 40322, + 647 + ], + "witness": [ + 40322, + 647 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40332, + 647 + ], + "witness": [ + 40332, + 647 + ] + }, + { + "disposition": "original minor via alias", + "key": [ + 40333, + 647 + ], + "witness": [ + 40332, + 647 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40338, + 645 + ], + "witness": [ + 40338, + 645 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40339, + 645 + ], + "witness": [ + 40339, + 645 + ] + }, + { + "disposition": "original minor via alias", + "key": [ + 40340, + 645 + ], + "witness": [ + 40339, + 645 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40341, + 645 + ], + "witness": [ + 40341, + 645 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40342, + 645 + ], + "witness": [ + 40341, + 645 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40344, + 645 + ], + "witness": [ + 40344, + 645 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40347, + 645 + ], + "witness": [ + 40347, + 645 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40348, + 645 + ], + "witness": [ + 40347, + 645 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40352, + 645 + ], + "witness": [ + 40352, + 645 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40353, + 645 + ], + "witness": [ + 40352, + 645 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40372, + 647 + ], + "witness": [ + 40372, + 647 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40373, + 647 + ], + "witness": [ + 40372, + 647 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40374, + 645 + ], + "witness": [ + 40374, + 645 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40637, + 645 + ], + "witness": [ + 40637, + 645 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40715, + 694 + ], + "witness": [ + 40715, + 694 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40716, + 694 + ], + "witness": [ + 40716, + 694 + ] + }, + { + "disposition": "original minor via alias", + "key": [ + 40717, + 694 + ], + "witness": [ + 40716, + 694 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40718, + 694 + ], + "witness": [ + 40718, + 694 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40719, + 694 + ], + "witness": [ + 40718, + 694 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40721, + 694 + ], + "witness": [ + 40721, + 694 + ] + }, + { + "disposition": "residual direct minor", + "key": [ + 40724, + 694 + ], + "witness": [ + 40724, + 694 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40730, + 695 + ], + "witness": [ + 40730, + 695 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40731, + 695 + ], + "witness": [ + 40731, + 695 + ] + }, + { + "disposition": "original minor via alias", + "key": [ + 40732, + 695 + ], + "witness": [ + 40731, + 695 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40733, + 695 + ], + "witness": [ + 40733, + 695 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40734, + 695 + ], + "witness": [ + 40733, + 695 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40736, + 695 + ], + "witness": [ + 40736, + 695 + ] + }, + { + "disposition": "residual direct minor", + "key": [ + 40742, + 695 + ], + "witness": [ + 40742, + 695 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40751, + 693 + ], + "witness": [ + 40751, + 693 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40752, + 693 + ], + "witness": [ + 40752, + 693 + ] + }, + { + "disposition": "original minor via alias", + "key": [ + 40753, + 693 + ], + "witness": [ + 40752, + 693 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40754, + 693 + ], + "witness": [ + 40754, + 693 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40755, + 693 + ], + "witness": [ + 40754, + 693 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40757, + 693 + ], + "witness": [ + 40757, + 693 + ] + }, + { + "disposition": "residual direct minor", + "key": [ + 40762, + 693 + ], + "witness": [ + 40762, + 693 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40768, + 695 + ], + "witness": [ + 40768, + 695 + ] + }, + { + "disposition": "original minor via alias", + "key": [ + 40769, + 695 + ], + "witness": [ + 40768, + 695 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40772, + 693 + ], + "witness": [ + 40772, + 693 + ] + }, + { + "disposition": "original minor via alias", + "key": [ + 40773, + 693 + ], + "witness": [ + 40772, + 693 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40774, + 693 + ], + "witness": [ + 40774, + 693 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40775, + 693 + ], + "witness": [ + 40774, + 693 + ] + }, + { + "disposition": "original direct minor", + "key": [ + 40776, + 694 + ], + "witness": [ + 40776, + 694 + ] + }, + { + "disposition": "original minor via alias", + "key": [ + 40777, + 694 + ], + "witness": [ + 40776, + 694 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40779, + 695 + ], + "witness": [ + 40779, + 695 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40780, + 695 + ], + "witness": [ + 40779, + 695 + ] + }, + { + "disposition": "continuation direct minor", + "key": [ + 40781, + 694 + ], + "witness": [ + 40781, + 694 + ] + }, + { + "disposition": "continuation minor via alias", + "key": [ + 40782, + 694 + ], + "witness": [ + 40781, + 694 + ] + }, + { + "disposition": "residual direct minor", + "key": [ + 40783, + 693 + ], + "witness": [ + 40783, + 693 + ] + }, + { + "disposition": "residual direct minor", + "key": [ + 40787, + 695 + ], + "witness": [ + 40787, + 695 + ] + }, + { + "disposition": "residual direct minor", + "key": [ + 40796, + 694 + ], + "witness": [ + 40796, + 694 + ] + }, + { + "disposition": "residual direct minor", + "key": [ + 40802, + 645 + ], + "witness": [ + 40802, + 645 + ] + }, + { + "disposition": "residual direct minor", + "key": [ + 40840, + 695 + ], + "witness": [ + 40840, + 695 + ] + }, + { + "disposition": "residual direct minor", + "key": [ + 41059, + 694 + ], + "witness": [ + 41059, + 694 + ] + }, + { + "disposition": "residual direct minor", + "key": [ + 42156, + 693 + ], + "witness": [ + 42156, + 693 + ] + }, + { + "disposition": "residual direct minor", + "key": [ + 42192, + 647 + ], + "witness": [ + 42192, + 647 + ] + }, + { + "disposition": "residual direct minor", + "key": [ + 42279, + 647 + ], + "witness": [ + 42279, + 647 + ] + } + ], + "unresolved": 0 +} diff --git a/research/p104-rank-seven-prefix-bank-bound/receipts/R109-SHA256.json b/research/p104-rank-seven-prefix-bank-bound/receipts/R109-SHA256.json new file mode 100644 index 0000000000..6b94fea6d3 --- /dev/null +++ b/research/p104-rank-seven-prefix-bank-bound/receipts/R109-SHA256.json @@ -0,0 +1,5 @@ +{ + "R109-MODULAR.json": "792eeb7e32a9e4c980bbf4597cd166bc92cf6c25aac0ba12faeb45b26bb49199", + "R109-SECOND.json": "aa1213904c70a852a4b65053ea27d97a8b374d5aeccc9fe0832fdf4fb13268d1", + "R109-SELECTION.json": "d2b40a0130616e378bf2d35e12805c647a1132230b632fe3adc3449bc2778dad" +} diff --git a/research/p104-rank-seven-prefix-bank-bound/replay.py b/research/p104-rank-seven-prefix-bank-bound/replay.py index 9c97d70b12..a518a2b399 100644 --- a/research/p104-rank-seven-prefix-bank-bound/replay.py +++ b/research/p104-rank-seven-prefix-bank-bound/replay.py @@ -131,6 +131,76 @@ def reconcile(geometry,old,old_second,alias,reverse,selection,modular,second): return dict(head=HEAD,counts=counts,original=65,excluded=52,unresolved=13,rows=rows) + +def close_residual(previous,selection,primary,second): + chosen={tuple(r["key"]):r for r in selection["selected"]} + first={tuple(r["key"]):r for r in primary["results"]} + other={tuple(r["key"]):r for r in second["rows"]} + pending={tuple(r["key"]) for r in previous["rows"] if r["disposition"]=="unresolved after cap"} + assert len(chosen)==len(pending)==13 and pending==chosen.keys()==first.keys()==other.keys() + assert not selection["unselected"] and not primary["unselected"] and not second["remaining"] + assert primary["prime"]==65521 and second["prime"]==65537 and second["agreement"] + assert primary["prefix_events"]==second["progress"]["events"]==76466 + assert second["original_minor_axes_nonzero"]==13 + for key in chosen: + a,b,c=chosen[key],first[key],other[key] + assert not a["owned"] and not a["aliases"] and c["chart_rank"]==6 + assert all(a[field]==b[field]==c[field] for field in ("public","owned","pivots")) + assert b["status"]=="prefix exclusion" and c["disposition"]=="excluded" + assert b["prefix"]["determinant"] and c["independent_minor"]["determinant"] + rows=[] + for row in previous["rows"]: + if tuple(row["key"]) in pending: + row=dict(row,disposition="residual direct minor",witness=row["key"]) + rows.append(row) + counts=Counter(r["disposition"] for r in rows) + assert counts=={"original direct minor":16,"original minor via alias":9, + "continuation direct minor":16,"continuation minor via alias":11, + "residual direct minor":13} + return dict(head=HEAD,counts=counts,original=65,excluded=65,unresolved=0,rows=rows) + + +def replay_residual(scratch,r102,ind,prior,produced): + expected=decode((ROOT/"receipts/R109-SHA256.json").read_bytes()) + r109=scratch/"r109" + for target in ("inputs","lead","round102-input/inputs","round102-input/lead","independent/inputs"): + (r109/target).mkdir(parents=True) + for rel in ("lead/PRICE.json","inputs/7334-WORD.json.gz","inputs/exterior_rank56.py","inputs/reverse_engine.py"): + copyfile(r102/rel,r109/"round102-input"/rel) + for filename,target in (("freeze.py","lead/freeze.py"),("modular_support.py","modular_support.py"), + ("prefix_second_prime.py","independent/prefix_second_prime.py"), + ("sweep.py","independent/inputs/sweep.py")): + copyfile(ROOT/"engines/r109"/filename,r109/target) + for filename in ("PRICE.json","GEOMETRY.json","7334-WORD.json.gz","second_prime.py"): + copyfile(ind/"inputs"/filename,r109/"independent/inputs"/filename) + for name in ("SELECTION.json","MODULAR.json"): + copyfile(scratch/name,r109/"inputs"/f"R105-{name}") + copyfile(scratch/name,r109/"independent/inputs"/f"R105-{name}") + + def record(name,response,target=None): + raw=response.stdout + assert digest(raw)==expected[name],("changed residual receipt",name) + produced[name]=raw + if target is not None: + target.write_bytes(raw) + return decode(raw) + + chosen=record("R109-SELECTION.json",command(r109/"lead/freeze.py"),r109/"SELECTION.json") + mod=record("R109-MODULAR.json",command(r109/"modular_support.py"),r109/"MODULAR.json") + for name in ("SELECTION.json","MODULAR.json"): + copyfile(r109/name,r109/"independent/inputs"/name) + second=record("R109-SECOND.json",command(r109/"independent/prefix_second_prime.py")) + closed=close_residual(prior,chosen,mod,second) + raw=(dumps(closed,indent=2,sort_keys=True)+"\n").encode() + assert raw==(ROOT/"receipts/CLOSED.json").read_bytes() + produced["CLOSED.json"]=raw + + selection=r109/"independent/inputs/SELECTION.json" + selection.write_bytes(selection.read_bytes()+b"\n") + rejection=command(r109/"independent/prefix_second_prime.py",check=False) + assert rejection.returncode==1 and not rejection.stdout + assert b"changed dependency: inputs/SELECTION.json" in rejection.stderr + def replay(scratch,out): authenticate() expected = decode((ROOT / "receipts/SHA256.json").read_bytes()) @@ -170,6 +240,7 @@ def record(name, target, response): assert raw == (ROOT/"receipts/RECONCILED.json").read_bytes() assert set(produced) == set(expected) produced["RECONCILED.json"] = raw + replay_residual(scratch,r102,ind,summary,produced) for victim,script,args in ( (ind/"inputs/PRICE.json",ind/"verify.py",("alias",)), @@ -186,13 +257,13 @@ def record(name, target, response): out.mkdir(parents=True) for name,content in produced.items(): (out / relative(name)).write_bytes(content) - print("PASS_RANK_SEVEN_PREFIX_BANK_BOUND original=65 direct=32 transfers=20 excluded=52 unresolved=13") + print("PASS_RANK_SEVEN_PREFIX_BANK_BOUND original=65 direct=45 transfers=20 excluded=65 unresolved=0") def main(): assert sys.version_info[:2] == (3,12) and __debug__ parser = ArgumentParser(description=__doc__) - parser.add_argument("--out",type=Path,help="new directory for the ten regenerated receipts") + parser.add_argument("--out",type=Path,help="new directory for the fourteen regenerated receipts") args = parser.parse_args() with TemporaryDirectory() as directory: replay(Path(directory),args.out)