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/3] 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/3] 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 c2ba40e77c03bb7dbc01ce0fc17a88a6ff85de8f Mon Sep 17 00:00:00 2001 From: ToikY <27568617+ToikY@users.noreply.github.com> Date: Wed, 11 Nov 2026 12:29:23 -0800 Subject: [PATCH 3/3] Bound charged rank-six productive split support --- .../LOCAL-PINS.json | 22 + .../NOTICE | 8 + .../PROVENANCE.json | 45 ++ .../README.md | 121 +++++ .../SOURCES.json | 18 + .../TASK.json | 117 +++++ .../UNPACK.json | 14 + .../VERIFY.json | 19 + .../dependencies/round30/complex/audit.py | 423 ++++++++++++++++++ .../complex/source/inputs/CALLER.json.gz | Bin 0 -> 11215 bytes .../source/inputs/EARLY-RESULT.json.gz | Bin 0 -> 2087 bytes .../complex/source/inputs/WORD.json.gz | Bin 0 -> 381696 bytes .../round30/complex/source/powers.py | 177 ++++++++ .../dependencies/round35/verify.py | 314 +++++++++++++ .../round36/cochart-audit/verify.py | 300 +++++++++++++ .../round36/incremental/predecessor_split.py | 155 +++++++ .../round36/incremental/support.py | 18 + .../round36/predecessor_search.py | 154 +++++++ .../round37/preflight/PRICE.json.gz | Bin 0 -> 14612 bytes .../dependencies/round37/preflight/price.py | 97 ++++ .../round38/incremental/screen.py | 299 +++++++++++++ .../dependencies/round49/NEXT.md | 35 ++ .../dependencies/round50/lead/screen.py | 376 ++++++++++++++++ .../engines/independent_2_5.py | 286 ++++++++++++ .../engines/independent_3_4.py | 286 ++++++++++++ .../engines/primary_2_5.py | 376 ++++++++++++++++ .../receipts/SHA256.json | 12 + .../receipts/SUMMARY.json | 34 ++ .../replay.py | 178 ++++++++ 29 files changed, 3884 insertions(+) create mode 100644 research/p104-charged-rank-six-support-bound/LOCAL-PINS.json create mode 100644 research/p104-charged-rank-six-support-bound/NOTICE create mode 100644 research/p104-charged-rank-six-support-bound/PROVENANCE.json create mode 100644 research/p104-charged-rank-six-support-bound/README.md create mode 100644 research/p104-charged-rank-six-support-bound/SOURCES.json create mode 100644 research/p104-charged-rank-six-support-bound/TASK.json create mode 100644 research/p104-charged-rank-six-support-bound/UNPACK.json create mode 100644 research/p104-charged-rank-six-support-bound/VERIFY.json create mode 100644 research/p104-charged-rank-six-support-bound/dependencies/round30/complex/audit.py create mode 100644 research/p104-charged-rank-six-support-bound/dependencies/round30/complex/source/inputs/CALLER.json.gz create mode 100644 research/p104-charged-rank-six-support-bound/dependencies/round30/complex/source/inputs/EARLY-RESULT.json.gz create mode 100644 research/p104-charged-rank-six-support-bound/dependencies/round30/complex/source/inputs/WORD.json.gz create mode 100644 research/p104-charged-rank-six-support-bound/dependencies/round30/complex/source/powers.py create mode 100644 research/p104-charged-rank-six-support-bound/dependencies/round35/verify.py create mode 100644 research/p104-charged-rank-six-support-bound/dependencies/round36/cochart-audit/verify.py create mode 100644 research/p104-charged-rank-six-support-bound/dependencies/round36/incremental/predecessor_split.py create mode 100644 research/p104-charged-rank-six-support-bound/dependencies/round36/incremental/support.py create mode 100644 research/p104-charged-rank-six-support-bound/dependencies/round36/predecessor_search.py create mode 100644 research/p104-charged-rank-six-support-bound/dependencies/round37/preflight/PRICE.json.gz create mode 100644 research/p104-charged-rank-six-support-bound/dependencies/round37/preflight/price.py create mode 100644 research/p104-charged-rank-six-support-bound/dependencies/round38/incremental/screen.py create mode 100644 research/p104-charged-rank-six-support-bound/dependencies/round49/NEXT.md create mode 100644 research/p104-charged-rank-six-support-bound/dependencies/round50/lead/screen.py create mode 100644 research/p104-charged-rank-six-support-bound/engines/independent_2_5.py create mode 100644 research/p104-charged-rank-six-support-bound/engines/independent_3_4.py create mode 100644 research/p104-charged-rank-six-support-bound/engines/primary_2_5.py create mode 100644 research/p104-charged-rank-six-support-bound/receipts/SHA256.json create mode 100644 research/p104-charged-rank-six-support-bound/receipts/SUMMARY.json create mode 100644 research/p104-charged-rank-six-support-bound/replay.py diff --git a/research/p104-charged-rank-six-support-bound/LOCAL-PINS.json b/research/p104-charged-rank-six-support-bound/LOCAL-PINS.json new file mode 100644 index 0000000000..8edc678025 --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/LOCAL-PINS.json @@ -0,0 +1,22 @@ +{ + "dependencies/round30/complex/audit.py": "67b006627fd4e07c349f48f31e6d541c62804416bdc85f664a3607dd1b386efb", + "dependencies/round30/complex/source/inputs/CALLER.json.gz": "58beaf24e01c0589ecd5d1676d6d27e75b779f089d0674eda11725465ffc04e1", + "dependencies/round30/complex/source/inputs/EARLY-RESULT.json.gz": "9851ebaa4b4404be1f5670b8a8dfc6ee96a8e19e85731edd4a71d52bbfa9c793", + "dependencies/round30/complex/source/inputs/WORD.json.gz": "2c523ce6fdd6092d758fedc3602a0bcedb692b9766f1e41f903351ba4dee1756", + "dependencies/round30/complex/source/powers.py": "c0c460b464d7c836fb887010b57119be322aae686736b86820aae3544d380bee", + "dependencies/round35/verify.py": "c906fffec26f043e159f8e314b0f245cde432cf72d2bc6a6ade6235a4c798c5a", + "dependencies/round36/cochart-audit/verify.py": "58cab0bb2f24fe29d0e190cbe3cc0dc85f889ec4af66b5a02328d1e1d0e37e8a", + "dependencies/round36/incremental/predecessor_split.py": "999b9eeabe5cd1a7e3ec014d1a449f850b4ac9bfb19749cddef41ae12cd0b405", + "dependencies/round36/incremental/support.py": "f3e6eeb879480715c5c32c1a390a63c57d26ea1c9a9cbdb89b83ca34260e47f6", + "dependencies/round36/predecessor_search.py": "668022953f53929fd4d95ed1b5c01ac2ba3b4bdf6be7babae511757eb21b7e6a", + "dependencies/round37/preflight/PRICE.json.gz": "47594a4d194330b5d5beab4c76e46d2cbd89968458aa3b0042c2de6918b52c95", + "dependencies/round37/preflight/price.py": "8b1b345bd4a2732c74251c1b95d47f98cd37184894d8979a6ef1953d38686be8", + "dependencies/round38/incremental/screen.py": "43a74344555088b016a3fb857b7c86de3f2880ef85b77846c4362037779b8405", + "dependencies/round49/NEXT.md": "f304c5b62077e43d35696d939a0f96f420a30cc8173fc97978c4e54d867ff86f", + "dependencies/round50/lead/screen.py": "47251bd902c4fd3fda3597463cf4609bf380194558461320dc432b86f6c989d1", + "engines/independent_2_5.py": "7bae36fb1530b08f84ac21e66a44ae27a282e4a3aba3997a1acd4324be2d6ee1", + "engines/independent_3_4.py": "7565c5984841022d70e4103ebaf2969967618c386929ecbf9ecf27385fe5b336", + "engines/primary_2_5.py": "5850a8275d2dce67736b8515f19c57dc57720212d41df59c559c8acba2c9ee87", + "receipts/SHA256.json": "4756831bd3e43d7af429dfa203a480df4aef32cb1417ae38881225bed269d37b", + "receipts/SUMMARY.json": "da07165d52f580cee19abc123e733d2b28679322114c64e8ea07a22e16d90ac5" +} diff --git a/research/p104-charged-rank-six-support-bound/NOTICE b/research/p104-charged-rank-six-support-bound/NOTICE new file mode 100644 index 0000000000..593ed609c6 --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/NOTICE @@ -0,0 +1,8 @@ +Apache-2.0. +#7277 supplies the literal word and comparable invoice. #7113 supplies +the signed caller. #7142 supplies the charged endpoint precedent, and +#5599/#7130 supply the common-chart split and basis constructor lineage. +#7299, #7303 and #7308 supply related price, fixed-mass and replay +comparisons. Earlier campaign sources and original attributions are +retained in the bundled replay dependencies. OpenAI Codex and subagents +materially assisted. diff --git a/research/p104-charged-rank-six-support-bound/PROVENANCE.json b/research/p104-charged-rank-six-support-bound/PROVENANCE.json new file mode 100644 index 0000000000..58d29af597 --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/PROVENANCE.json @@ -0,0 +1,45 @@ +{ + "files": { + "dependencies/round30/complex/audit.py": { + "commit": "2c777389ec0476e97ab141c645af01ff28a46aa6", + "git_blob": "89e4a6b3dd93f91fd56c18ec37e15ee668b486d3", + "path": "research/p104-owned-move-destination-span/dependencies/round30/complex/audit.py", + "sha256": "67b006627fd4e07c349f48f31e6d541c62804416bdc85f664a3607dd1b386efb", + "source": "https://github.com/CrocSwap/integer-mult-bounds/blob/2c777389ec0476e97ab141c645af01ff28a46aa6/research/p104-owned-move-destination-span/dependencies/round30/complex/audit.py", + "uncompress": false + }, + "dependencies/round30/complex/source/inputs/CALLER.json.gz": { + "commit": "07a76c5e2738882c0cb322278e56f6cae3c9885d", + "git_blob": "9451ceaf6e8e037894680b549f3ef41c21b260d7", + "path": "research/signed-caller-8x9/expected/ODD-TYPE-AB-CALLER.json", + "sha256": "255d89f38cd45e38e5770f559bc43dc217e989032359768cdc7e8cdfd64b47bc", + "source": "https://github.com/CrocSwap/integer-mult-bounds/blob/07a76c5e2738882c0cb322278e56f6cae3c9885d/research/signed-caller-8x9/expected/ODD-TYPE-AB-CALLER.json", + "uncompress": true + }, + "dependencies/round30/complex/source/inputs/EARLY-RESULT.json.gz": { + "commit": "ed090b57ed88f8859e5ff4643645099e6ba856ea", + "git_blob": "ef86c8ec8ed0a2042017a6f42515e70dd15cfffd", + "path": "research/p104-terminal-cut-rechart/EARLY-RESULT.json", + "sha256": "691025fe95c7938a6da211244d4d5b6187d88a9de1acff0862eeb7f0ce7deaa7", + "source": "https://github.com/CrocSwap/integer-mult-bounds/blob/ed090b57ed88f8859e5ff4643645099e6ba856ea/research/p104-terminal-cut-rechart/EARLY-RESULT.json", + "uncompress": true + }, + "dependencies/round30/complex/source/inputs/WORD.json.gz": { + "commit": "ed090b57ed88f8859e5ff4643645099e6ba856ea", + "git_blob": "077bf48c35db0ddafae81f1bfa0ffacc30894b2b", + "path": "research/p104-terminal-cut-rechart/WORD.json.gz", + "sha256": "2c523ce6fdd6092d758fedc3602a0bcedb692b9766f1e41f903351ba4dee1756", + "source": "https://github.com/CrocSwap/integer-mult-bounds/blob/ed090b57ed88f8859e5ff4643645099e6ba856ea/research/p104-terminal-cut-rechart/WORD.json.gz", + "uncompress": false + }, + "dependencies/round30/complex/source/powers.py": { + "commit": "2c777389ec0476e97ab141c645af01ff28a46aa6", + "git_blob": "1ac680b880d282ff3ec98593c87340413ae958b0", + "path": "research/p104-owned-move-destination-span/dependencies/round30/complex/source/powers.py", + "sha256": "c0c460b464d7c836fb887010b57119be322aae686736b86820aae3544d380bee", + "source": "https://github.com/CrocSwap/integer-mult-bounds/blob/2c777389ec0476e97ab141c645af01ff28a46aa6/research/p104-owned-move-destination-span/dependencies/round30/complex/source/powers.py", + "uncompress": false + } + }, + "schema_version": 1 +} diff --git a/research/p104-charged-rank-six-support-bound/README.md b/research/p104-charged-rank-six-support-bound/README.md new file mode 100644 index 0000000000..fd9df16900 --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/README.md @@ -0,0 +1,121 @@ +# Charged rank-six productive split support on the retained P104 word + +**NO VERIFIED GAIN. Exact conditional κ change 0%.** On the exact +[#7277](https://github.com/CrocSwap/integer-mult-bounds/pull/7277) +word, all 83 charged rank-six endpoint extensions of type 3+4 and +all 83 of type 2+5 fail the necessary common-chart support test. +Each family includes 50 input extensions, 33 output extensions +and 73 endpoint-and-partition groups. Zero signatures or cut +incidences remain unresolved. The compatible saving upper after +support is zero. The complete comparable witness remains #7277 +at κ = 0.003645669928698. + +| Productive partition | Typed signatures | Representative cut incidences | Nonzero pure prefix | Nonzero pure suffix in independent replay | Price-only lower margin | +| --- | ---: | ---: | ---: | ---: | ---: | +| 3+4 | 83 | 714 | 0 | 24 | 0.1174506515937458 | +| 2+5 | 83 | 346 | 0 | 0 | 0.08102479309361352 | + +## Complete price and scoped support + +Each alternative adds one paid rank-one endpoint MOVE and replaces +one productive rank-six job by productive jobs of ranks 3 and 4, +or 2 and 5, in each of the 17 exact #7113 native copies. The replay +reconstructs the complete signed invoice and regenerates the frozen +endpoint price table before evaluating support. The positive +margins in the table are directed lower bounds at the pinned old +crossing upper, rounded for display. Other added ordinary and +physical costs are free in this price-only probe. Prices are +computed per alternative, and the exact rational endpoints are +in [SUMMARY.json](receipts/SUMMARY.json) and the emitted PRICE +receipts. + +For a selected partition, fix the proposed endpoints and a strictly +intermediate chart at one of its two rank offsets. The enlarged +cohort is the existing helper cohort at the proposed endpoints +together with all allowed single extenders. Each individual +extension lies inside this enlarged domain. The #5599 split +requires a nonzero rational prefix image and an adjoint suffix +image supported on the same helper coordinates with nonzero +pairing. A zero pure prefix on the enlarged cohort excludes +the requirement for every individual extender. + +Representative cuts are reconstructed from the literal contacts +of each chart. Between consecutive contacts, the bank and its +normalized prefix rows remain fixed. Operations on other charts +act trivially on a suffix perturbation supported on the bank. +The initial-bank guard is checked. The new rank-one endpoint +transport lies outside the eligible intermediate chart ranks, so +the fixed-chart, fixed-order representative census still applies. +Scalar operands, MOVE endpoints and owned lifetimes are checked +in the literal trace. + +The primary gate checks the necessary pure prefix at all 1,060 +representative incidences across the two disjoint typed partitions. +The independent replay separately reconstructs geometry, price and +cut coverage, runs the rational suffix sweep first, and then checks +the pure prefix. The 24 nonzero suffix incidences in 3+4 have no +pure prefix partner. The omitted-paid-MOVE and wrong-pairing +controls reject their mutations. A lawful cocharted basis fixture +and exterior-cancellation fixture provide positive controls. + +This result concerns one charged endpoint extension at a time +under the original word's chart and ownership chronology. Changed +chronology, new chart labels, new endpoint mechanisms and smaller +ranks remain open. No physical candidate advanced to signed native, +ownership, precision, tape, caller or outer verification. + +## Replay + +From a clean checkout with CPython 3.12 and assertions enabled: + +~~~sh +python3.12 -B scripts/research_package.py --package research/p104-charged-rank-six-support-bound +python3.12 -B scripts/check_research_commit.py --package research/p104-charged-rank-six-support-bound --check-modes --check-source-history +~~~ + +From a Git-free export, this command also emits all ten complete +receipts into a fresh output directory: + +~~~sh +python3.12 -I -B research/p104-charged-rank-six-support-bound/replay.py --out fresh-receipts +~~~ + +[PROVENANCE.json](PROVENANCE.json) pins the public inputs by exact +commit, path, Git blob and SHA-256. [LOCAL-PINS.json](LOCAL-PINS.json) +pins the bundled replay sources and earlier campaign dependencies +by package-relative path. The replay authenticates the uncompressed +payloads of the bundled caller, crossing and price snapshots. It +verifies all ten deterministic plaintext receipts against the exact +hashes in [SHA256.json](receipts/SHA256.json) and can emit their full +proof-relevant fields. It uses only the standard library. + +## Credit + +[#7277](https://github.com/CrocSwap/integer-mult-bounds/pull/7277) at +`ed090b57ed88f8859e5ff4643645099e6ba856ea` supplies the word +and complete comparator. [#7113](https://github.com/CrocSwap/integer-mult-bounds/pull/7113) +at `07a76c5e2738882c0cb322278e56f6cae3c9885d` supplies the +signed caller. [#7142](https://github.com/CrocSwap/integer-mult-bounds/pull/7142) +supplies the charged endpoint precedent. +[#5599](https://github.com/CrocSwap/integer-mult-bounds/pull/5599) +and [#7130](https://github.com/CrocSwap/integer-mult-bounds/pull/7130) +supply the common-chart split identity and basis constructor lineage. +[#7299](https://github.com/CrocSwap/integer-mult-bounds/pull/7299) +supplies related split pricing. [#7308](https://github.com/CrocSwap/integer-mult-bounds/pull/7308) +supplies the bundled complete signed-invoice audit and directed +price helper. The earlier campaign priced all 777 typed signatures +in Round 37 and replayed the higher-rank eight and seven subsets +in Rounds 37 and 38. Those support certificates have different +rank scopes. [#7303](https://github.com/CrocSwap/integer-mult-bounds/pull/7303) +covers fixed-mass singleton splits under the retained word, whereas +this test charges a rank-one endpoint extension. OpenAI Codex and +subagents materially assisted. + +## Open next questions + +Can a changed chart chronology or endpoint basis supply a common +chart with pure prefix support at a favorable complete price? +Pin one distinct interface or partition and bound the full +compatible stock before building. A surviving proposal needs +arbitrary-input signed forward and adjoint action, ownership, +restoration and fully charged precision and tape. diff --git a/research/p104-charged-rank-six-support-bound/SOURCES.json b/research/p104-charged-rank-six-support-bound/SOURCES.json new file mode 100644 index 0000000000..e8c2f265cd --- /dev/null +++ b/research/p104-charged-rank-six-support-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-charged-rank-six-support-bound/TASK.json b/research/p104-charged-rank-six-support-bound/TASK.json new file mode 100644 index 0000000000..b415c409f5 --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/TASK.json @@ -0,0 +1,117 @@ +{ + "actual_scope": "One paid rank-one endpoint extension of a rank-six productive helper in exact #7277, followed by a 3+4 or 2+5 cocharted split with the retained chart and ownership chronology.", + "ai_assistance": "OpenAI Codex and subagents materially assisted proof, implementation, independent audit and packaging.", + "author": "Charged productive split research", + "base_commit": "e54523517d0f03e58352e647c403a5af3e525a57", + "bottleneck_link": "Decide whether either independently price-positive typed partition has a necessary common-chart support witness before building.", + "budget_minutes": 8, + "evidence": "Exact 17-copy directed price, literal cut and ownership trace, primary and reverse-first rational support, lawful pairing positive control and missing paid MOVE rejection.", + "open_questions": [ + { + "blocked_by": "A survivor still needs exact arbitrary-input signed forward and adjoint action, ownership and restoration, complete price, precision and tape.", + "first_step": "Pin the new interface or partition and upper-bound the entire compatible charged stock before testing a native site.", + "question": "Can a changed chronology or endpoint basis create paid support for a different productive extension?", + "why_it_matters": "Both tested rank-six partitions have empty pure prefix support across the original chart cuts." + } + ], + "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": "This tests rank-six productive credit under an explicit added paid child, outside the fixed-mass singleton and earlier higher-rank screens.", + "scope_status": "changed", + "stop_rule": "Price each alternative separately and exhaust each 83-signature stock within its original capped replay. Stop without a build if the pure prefix and adjoint support gate excludes all cuts.", + "task_id": "p104-side-correction" +} diff --git a/research/p104-charged-rank-six-support-bound/UNPACK.json b/research/p104-charged-rank-six-support-bound/UNPACK.json new file mode 100644 index 0000000000..c6122352da --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/UNPACK.json @@ -0,0 +1,14 @@ +{ + "dependencies/round30/complex/source/inputs/CALLER.json.gz": { + "destination": "dependencies/round30/complex/source/inputs/CALLER.json", + "sha256": "255d89f38cd45e38e5770f559bc43dc217e989032359768cdc7e8cdfd64b47bc" + }, + "dependencies/round30/complex/source/inputs/EARLY-RESULT.json.gz": { + "destination": "dependencies/round30/complex/source/inputs/EARLY-RESULT.json", + "sha256": "691025fe95c7938a6da211244d4d5b6187d88a9de1acff0862eeb7f0ce7deaa7" + }, + "dependencies/round37/preflight/PRICE.json.gz": { + "destination": "dependencies/round37/preflight/PRICE.json", + "sha256": "bc6134776a077b4ae3ef595c6000563062b2a42a3684a3852ba4f2f77b8dc726" + } +} diff --git a/research/p104-charged-rank-six-support-bound/VERIFY.json b/research/p104-charged-rank-six-support-bound/VERIFY.json new file mode 100644 index 0000000000..4d8b872d8b --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/VERIFY.json @@ -0,0 +1,19 @@ +{ + "commands": [ + { + "argv": [ + "{python}", + "-I", + "-B", + "{package}/replay.py" + ], + "checks": "Reprice and exhaust both rank-six charged endpoint partitions, independently reconstruct the signed invoices and reverse-first support, and verify the exact full receipts.", + "timeout_seconds": 340 + } + ], + "inputs": [], + "python": "3.12", + "requirements": [], + "schema_version": 1, + "status": "ready" +} diff --git a/research/p104-charged-rank-six-support-bound/dependencies/round30/complex/audit.py b/research/p104-charged-rank-six-support-bound/dependencies/round30/complex/audit.py new file mode 100644 index 0000000000..89e4a6b3dd --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/dependencies/round30/complex/audit.py @@ -0,0 +1,423 @@ +"""Independent exact binary-scope audit of signed invoice and flow/cut equality.""" +import argparse +from collections import Counter, defaultdict, deque +from fractions import Fraction as F +from hashlib import sha256 +from itertools import pairwise +from pathlib import Path +from time import monotonic +import gzip +import json +import runpy +import sys + +ROOT = Path(__file__).resolve().parent +SOURCE = ROOT / 'source' +GRID = 10**48 +TARGET = F(10018846261809, 2500000000000000) +HEAD = 'ed090b57ed88f8859e5ff4643645099e6ba856ea' +INPUTS = { + 'inputs/WORD.json.gz': '2c523ce6fdd6092d758fedc3602a0bcedb692b9766f1e41f903351ba4dee1756', + 'inputs/EARLY-RESULT.json': '691025fe95c7938a6da211244d4d5b6187d88a9de1acff0862eeb7f0ce7deaa7', + 'inputs/CALLER.json': '255d89f38cd45e38e5770f559bc43dc217e989032359768cdc7e8cdfd64b47bc', + 'powers.py': 'c0c460b464d7c836fb887010b57119be322aae686736b86820aae3544d380bee', +} + + +def source(path): + data = (SOURCE / path).read_bytes() + assert sha256(data).hexdigest() == INPUTS[path] + return data + + +def basis(vectors): + pivot = {} + for v in vectors: + while v.bit_length() in pivot: + v ^= pivot[v.bit_length()] + assert v + pivot[v.bit_length()] = v + return pivot + + +def inside(vectors, pivot): + for v in vectors: + while v: + if v.bit_length() not in pivot: + return False + v ^= pivot[v.bit_length()] + return True + + +def log_scaled(value): + z = (value - 1) / (value + 1) + term = z + q = F(0) + for j in range(0, 160, 2): + q += term / (j+1) + term *= z*z + return 2*q, 2*(q+term/(161*(1-z*z))) + + +def exp_minus(value, steps): + term = F(1) + total = F(1) + for j in range(1, steps+1): + term *= -value / j + total += term + return total + + +def verify_power(rank, value): + if not rank: + assert value == (0, 0) + return + exponent = rank.bit_length()-1 + unit_lo, unit_hi = log_scaled(F(rank, 1 << exponent)) + two_lo, two_hi = log_scaled(F(2)) + xlo = TARGET*(unit_lo+exponent*two_lo) + xhi = TARGET*(unit_hi+exponent*two_hi) + assert 0 <= xlo <= xhi < 1 + # Round the exponents outward before Taylor, keeping intermediate + # numerators small without losing the finer-than-grid audit. + fine = 10**64 + xlo = F((xlo*fine).__floor__(), fine) + xhi = F((xhi*fine).__ceil__(), fine) + low = GRID*rank*exp_minus(xhi, 49) + high = GRID*rank*exp_minus(xlo, 50) + assert value[0] <= low <= high <= value[1], rank + + +def read_model(): + word = json.loads(gzip.decompress(source('inputs/WORD.json.gz'))) + early = json.loads(source('inputs/EARLY-RESULT.json')) + caller = json.loads(source('inputs/CALLER.json')) + source('powers.py') + primary = runpy.run_path(str(SOURCE/'powers.py')) + assert primary['GRID'] == GRID and primary['TARGET'] == TARGET + initial, final = word['initial'], word['final'] + n = word['public'] + program = word['program'] + frame = word['frames'] + ranks = [len(v) for v in frame] + bases = [basis(v) for v in frame] + subset = {} + main = set(word['live']) | {r+112 for r in word['live']} | set(word['hosted']['X2'] + word['hosted']['Y2']) + assert len(main) == 400 + + def nested(a, b): + key = a,b + if key not in subset: + subset[key] = ranks[a] < ranks[b] and inside(frame[a], bases[b]) + return subset[key] + + def rank(a, b, owned): + if a == b: + return 0 + if nested(a, b) or owned and nested(b, a): + return abs(ranks[a]-ranks[b]) + return None + + chart = {(-1, r): f for r, f in enumerate(initial)} + current = initial + [None]*word['owned_fields'] + contacts = [[(-1, r)] for r in range(n)] + [[] for _ in range(word['owned_fields'])] + chains = [] + paid = Counter() + for t, row in enumerate(program): + op, r = row[:2] + if op == 'MOVE': + a, b, owned = row[2:] + assert current[r] == a and owned == (r >= n) + rr = rank(a, b, owned) + assert rr + paid[rr] += 1 + current[r] = b + continue + f = row[-1] + key = (t, 0) + chart[key] = f + if op == 'INIT': + assert r >= n and not contacts[r] and current[r] is None + current[r] = f + roles = {r, row[2]} if op in ('ADD', 'COPY') else {r} + for role in roles: + assert current[role] == f + contacts[role].append(key) + if op == 'CLEAR': + assert r >= n and contacts[r] + chains.append((r, contacts[r])) + contacts[r] = [] + current[r] = None + assert current == final + [None]*word['owned_fields'] and not any(contacts[n:]) + assert len(chains) == 70 + movable = {k for k in chart if k[0] != -1} + terminal = {} + for r, f in enumerate(final): + key = (len(program), r) + chart[key] = f + contacts[r].append(key) + chains.append((r, contacts[r])) + if r not in main: + terminal[key] = initial[r] + movable.add(key) + edges = [(a,b,r >= n) for r, seq in chains for a,b in pairwise(seq)] + native_paid = Counter(rr for a,b,owned in edges if (rr := rank(chart[a],chart[b],owned))) + assert native_paid == paid and sum(paid.values()) == 6280 and len(edges) == 137891 + assert len(chart) == 73165 and len(terminal) == 1101 + copies = sum(e[0] == 'J' for e in caller['events']) + assert copies == 17 + target = Counter(rank(initial, chart[v], False) for v, initial in terminal.items()) + assert min(target) > 0 + P, T = [Counter({r: copies*q for r, q in hist.items()}) for hist in (paid, target)] + for kind, info in caller['types'].items(): + count = len(info['ports']) + for sign, offset, *bits in info['diagonal']: + assert (sign, offset, len(bits)) == (-1, 0, copies) + T[1+8*sum(bits)] += count + for event in caller['events']: + if event[0] == 'J': + continue + kind, op, _, *args = event + count = len(caller['types'][kind]['ports']) + if op == 'QUERY': + P[1] += count + elif op in ('IDLE_ONE', 'IDLE_ODD'): + P[8*len(args[0])+int(op == 'IDLE_ODD')] += count + assert P == Counter({int(k):n for k,n in early['invoice']['P'].items()}) + assert T == Counter({int(k):n for k,n in early['invoice']['T'].items()}) + assert sum(P.values()) == 110536 and sum(T.values()) == 22461 + prices = {r: tuple(int(v*GRID) for v in primary['power'](r,TARGET)) for r in P.keys()|T.keys()|set(range(1,10))} + prices[0] = (0,0) + for r,v in prices.items(): + verify_power(r,v) + incident = defaultdict(list) + charts = defaultdict(list) + for i,(a,b,_) in enumerate(edges): + incident[a].append(i) + incident[b].append(i) + for v in sorted(movable): + charts[chart[v]].append(v) + return chart, rank, terminal, edges, incident, charts, copies, P, T, prices + + +def dinic(n, s, t, caps, clock): + """Return feasible flow and prove equal capacity of the residual cut.""" + adj = [[] for _ in range(n)] + graph = [] + for (u,v),cap in sorted(caps.items()): + if cap: + assert cap > 0 and u != v + i = len(graph) + graph.extend(([u,v,cap,cap],[v,u,0,0])) + adj[u].append(i) + adj[v].append(i+1) + sys.setrecursionlimit(max(sys.getrecursionlimit(), n+50)) + total = 0 + while True: + clock() + levels = [-1]*n + levels[s] = 0 + q = deque([s]) + while q: + u = q.popleft() + for i in adj[u]: + _,v,r,_ = graph[i] + if r and levels[v] == -1: + levels[v] = levels[u]+1 + q.append(v) + if levels[t] == -1: + break + cursor = [0]*n + def augment(u, capacity): + if u == t: + return capacity + while cursor[u] < len(adj[u]): + i = adj[u][cursor[u]] + _,v,r,_ = graph[i] + if r and levels[v] == levels[u]+1: + d = augment(v, min(capacity,r)) + if d: + graph[i][2] -= d + graph[i^1][2] += d + return d + cursor[u] += 1 + return 0 + limit = sum(caps[s,v] for v in range(n)) + while (delta := augment(s,limit)): + clock() + total += delta + lhs = [0]*n + certificate = [] + for u,v,r,c in graph[::2]: + f = c-r + assert 0 <= f <= c + lhs[u] += f + lhs[v] -= f + if f: + certificate.append([u,v,f]) + assert lhs[s] == total == -lhs[t] and all(not lhs[i] for i in range(n) if i not in (s,t)) + cut = [i for i,l in enumerate(levels) if l >= 0] + assert s in cut and t not in cut + inside = set(cut) + assert total == sum(c for (u,v),c in caps.items() if u in inside and v not in inside) + return total, certificate, cut + + +def compile_case(model, pair): + chart, rank, terminal, edges, incident, charts, copies, P, T, prices = model + lo,hi = pair + labels = (lo,hi) + vertices = sorted(charts[lo] + charts[hi]) + var = {v:i for i,v in enumerate(vertices)} + E = sorted(set(i for v in vertices for i in incident[v])) + n = len(vertices) + s,t = n,n+1 + max_finite = max(max(v) for v in prices.values()) + hard = (len(E)+len(vertices)+1)*(2*max_finite+1) + unary = [[0,0] for _ in vertices] + cap = Counter() + old = 0 + + def edge(a,b,owned): + d = rank(a,b,owned) + return hard if d is None else prices[d][0] + + def terminal_cost(v, z): + d = rank(terminal[v],z,False) + return hard if d is None or d == 0 else -prices[d][1] + + for i in E: + a,b,owned = edges[i] + old += edge(chart[a],chart[b],owned) + if a in var and b in var: + cap[var[a],var[b]] += edge(lo,hi,owned) + cap[var[b],var[a]] += edge(hi,lo,owned) + elif a in var: + for bit,f in enumerate(labels): + unary[var[a]][bit] += edge(f,chart[b],owned) + else: + for bit,g in enumerate(labels): + unary[var[b]][bit] += edge(chart[a],g,owned) + for v in vertices: + if v in terminal: + old += terminal_cost(v,chart[v]) + for bit,z in enumerate(labels): + unary[var[v]][bit] += terminal_cost(v,z) + offset = 0 + for i,(a,b) in enumerate(unary): + m = min(a,b) + offset += m + cap[s,i] += b-m + cap[i,t] += a-m + assert all(c>=0 for c in cap.values()) + return vertices,E,old,offset,cap + + +def quote_case(model, scope, pair, changed): + chart, rank, terminal, edges, incident, charts, copies, P, T, prices = model + vertices,E,old,offset,cap=scope + labels=tuple(pair) + assert set(changed) <= set(vertices) + assert all(f in labels and f != chart[v] for v,f in changed.items()) + paid = P.copy() + productive = T.copy() + objective = 0 + for i in E: + a,b,owned = edges[i] + old_r = rank(chart[a],chart[b],owned) + new_r = rank(changed.get(a,chart[a]),changed.get(b,chart[b]),owned) + assert new_r is not None + if old_r: + paid[old_r] -= copies + if new_r: + paid[new_r] += copies + objective += prices[new_r][0] + for v in vertices: + if v in terminal: + old_r = rank(terminal[v],chart[v],False) + new_r = rank(terminal[v],changed.get(v,chart[v]),False) + assert new_r + productive[old_r] -= copies + productive[new_r] += copies + objective -= prices[new_r][1] + final_clock = max(k[0] for k in chart) + upper = sum(q*prices[r][1] for r,q in productive.items())-sum(q*prices[r][0] for r,q in paid.items()) + baseline = sum(q*prices[r][1] for r,q in T.items())-sum(q*prices[r][0] for r,q in P.items()) + assert upper == baseline+copies*(old-objective) + return {'status':'PASS_EXACT_DIRECTED_BINARY_CUT','head':HEAD,'pair':pair, + 'movable_vertices':len(vertices),'changed_vertices':len(changed), + 'directed_whole_upper':str(F(upper,GRID)), + 'signed_paid':dict(+paid),'signed_targets':dict(+productive), + 'rank_surplus':sum(r*(productive[r]-paid[r]) for r in productive.keys()|paid.keys()), + 'event_relabels':sorted((k,f) for (k,r),f in changed.items() if k=end: + raise TimeoutError('independent audit cap') + r=json.loads(args.receipt.read_bytes()) + assert r['head']==HEAD + model=read_model() + checked=[] + unresolved=[] + for row in r['cuts']: + if row['status']!='PASS_EXACT_DIRECTED_BINARY_CUT': + unresolved.append(row['pair']) + continue + clock() + checked.append(verify_case(model,row,clock)) + print(json.dumps({'status':'PASS_INDEPENDENT_FLOW_CUT_AND_DIRECTED_INVOICE','head':HEAD, + 'receipt_sha256':sha256(args.receipt.read_bytes()).hexdigest(),'checks':checked, + 'unresolved':unresolved+r['unvisited']},sort_keys=True,separators=(',',':'))) + + +if __name__=='__main__': + main() diff --git a/research/p104-charged-rank-six-support-bound/dependencies/round30/complex/source/inputs/CALLER.json.gz b/research/p104-charged-rank-six-support-bound/dependencies/round30/complex/source/inputs/CALLER.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..290ef7c9c52553e421350ea76ac73eb98d1f187b GIT binary patch literal 11215 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 PMn*AXLoONv`|LZDAJ$_iWZB7Aj|ZO zHnOeC@=Sw8{`;OQ+mfmABw1``f%?IaNQ%54=iYlRf4!Q`vb&;-*ddi<<8d_&G!8^*P#C4cKTv_`t{>^4Q++!t8)Q~x@f ziJOr8e7Jsgrl0uvxKUXb)w(~>E9FTCtMPYhE+1QN*G*N&Hoq&H{-ZBwx{P%<5m7kr zt@KU=g*RN9*=9rG?!Yw!uoNtTWb2030Y4KA3<+DBwAvw0r@~rapl z!rdS69w?6kqLDqVbDS}ul93$Ns;>kHS44n77!ZmD+`$&mfkWLO(|D!9BJ9(8^F0$z zMiU4rq&(tkfIOnKCIflk52!1gLyAOYf(0xgjcQLwOxh~tUNHB+Ads`U5r$BBl@?N< z1|TPy0RDuO3NvVhx(Em1G(#3PK=HG5t6tC>bCpJpHC7>23e+QDM*%dz3#v4T1A~W? zqjZ0U?Z0cVW`G+^45o{36|0JDuO%YHf=9s30o=%gWmx#fa79+`g@b@AzCauTTd*eT z6No|ZT%?Et5tIxS2jDm4GzY`?t~S}lRJ7f9eSsM=5ZBgU_PY+1wBA1EakYwNPu|=3 z3!dT!qUi%cU@bR-LR95O_uN{1V%Uxi0KMH88GZr@6|Xk6^-Aa>-f&6 zpi3AA91G?Kl9KTe@cr-}SSpp^=6$cr(D8nlS_>I^v=zC@fzn;D9+=|zZZ6mk*>ilS zOP2FzXJ|QH5iVGcQ`$J-E?CadXb3wM%k`ES9qMSJsqaHhC#FPWBTQn=xNf>ndAr>r zPSM0y9a9)FfOFF~`y)0N1^4;QzF+p!DK6pzC=ic;f9Rt~*?p{=*zTt8kv=iKl8K?U zOU$a2PHg5yVjxW^kV2w7sYG`xU7~qitzuWLV=uQjrO?MsT;@$IKJxa*{j#R0mQy{r zaY{5n)lXFMBcVL%LWwSa}LSsH>7!4Pl?P)h<4@b}FMzGeRQY1f8jD zhtnsp$WK>X&n2#Tdcu5SfJCJvj#=Y*>OM6Qp+V)SHh1Ic#d=XO6F*$pAR(UL@WH7o z)EcgB=fwt;6`To#TN9ytgLez3ZpjBO+fJi|b0aC3=$+LS=5~Vn{GiBabf8|}YVT0_ zN%OrAhM0+&w0Lm6D`Qn3gdRkY;4KtT<>YOD-2f3R==6A;RL)5*UII<41dT&WZ}3x- z?c=(rHp|%NZL#@?BE8!k1Ky9driq*7`T5zZjl269UwYlec6QeS=fe$aJu7;`5SO#& z{?o21i+Wbx7i~9N7tQYcO0U{WL2!*rknSwSx<0eV0FM zvD)LT!*#%{Xc{29=pA)+)Glk9A! zt(U_s>fi(NQUyn7_&kUu{^4GQ+M$VW62RoN0TlR>ghxOn9OfKfIDiRCX^gho!iA16 z!i;=5@|iinDgd+EIN%i=1dX3&+*oBLIIu^42ghMDYL)Yrw9~;500q$$Uu>yB+$us^ zPxMl~Kytf|G*MRT!@aP$0c}3#PT6pAeWa8(0c|iQ)a$uBpUmU`5Wlwmxc@k9Rh)rU9#dY!*|``7&4Ki~ZLI{(MpzyGH{CwoL( z=ezqt^^7lD@{OopiN&IzLPfiZD=UMypzxwxELT#mq7UV2VOHKQRx7pCd{t-EDn=no RWU|j!zX7oRttn#~002MZ1rh)N literal 0 HcmV?d00001 diff --git a/research/p104-charged-rank-six-support-bound/dependencies/round30/complex/source/inputs/WORD.json.gz b/research/p104-charged-rank-six-support-bound/dependencies/round30/complex/source/inputs/WORD.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..077bf48c35db0ddafae81f1bfa0ffacc30894b2b GIT binary patch literal 381696 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

XOZh+uUOZ}_MOmdIFyLvnwHEaHPZM%i1L3*A~F0 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

QpqekB38~) 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

Y!3Km0Nq@(VQ19hL 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 literal 0 HcmV?d00001 diff --git a/research/p104-charged-rank-six-support-bound/dependencies/round37/preflight/price.py b/research/p104-charged-rank-six-support-bound/dependencies/round37/preflight/price.py new file mode 100644 index 0000000000..3e25394050 --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/dependencies/round37/preflight/price.py @@ -0,0 +1,97 @@ +"""Price existing-chart rank-one endpoint extensions before scalar support.""" +from argparse import ArgumentParser +from collections import Counter, defaultdict +from fractions import Fraction as Q +from functools import cache +import gzip +from hashlib import sha256 +import json +from pathlib import Path +import runpy + +PINS = { + 'complex/audit.py':'67b006627fd4e07c349f48f31e6d541c62804416bdc85f664a3607dd1b386efb', + 'complex/source/inputs/WORD.json.gz':'2c523ce6fdd6092d758fedc3602a0bcedb692b9766f1e41f903351ba4dee1756', + 'complex/source/inputs/EARLY-RESULT.json':'691025fe95c7938a6da211244d4d5b6187d88a9de1acff0862eeb7f0ce7deaa7', + 'complex/source/inputs/CALLER.json':'255d89f38cd45e38e5770f559bc43dc217e989032359768cdc7e8cdfd64b47bc', + 'complex/source/powers.py':'c0c460b464d7c836fb887010b57119be322aae686736b86820aae3544d380bee', +} + + +def space(rows): + span = {0} + for row in rows: + assert row not in span + span |= {v^row for v in span} + return span + + +def screen(root): + for name, digest in PINS.items(): + assert sha256((root/name).read_bytes()).hexdigest()==digest, name + source=root/'complex/source' + w=json.loads(gzip.decompress((source/'inputs/WORD.json.gz').read_bytes())) + audit=runpy.run_path(str(root/'complex/audit.py')) + _,_,_,_,_,_,copies,paid,targets,_=audit['read_model']() + assert copies==17 + k=Q(json.loads((source/'inputs/EARLY-RESULT.json').read_bytes())['price']['independent_raw_bracket'][1]) + power=cache(runpy.run_path(str(source/'powers.py'))['power']) + def moment(net): + terms=[sorted(n*x for x in power(r,k)) for r,n in net.items() if n] + return tuple(sum(t[i] for t in terms) for i in (0,1)) + signed=targets.copy() + signed.subtract(paid) + baseline=moment(signed) + assert baseline[1]<0 + dims=list(map(len,w['frames'])) + spaces=[space(v) for v in w['frames']] + main=set(w['live'])|{r+112 for r in w['live']}|set(w['hosted']['X2']+w['hosted']['Y2']) + roles=defaultdict(list) + for h,(u,v) in enumerate(zip(w['initial'],w['final'],strict=True)): + if h not in main: + assert spaces[u]=2 and b>=2 + delta=Counter((a,b)) + delta[r]-=1 + delta[1]-=1 + assert sum(n*j for j,n in delta.items())==0 + return moment({j:copies*n for j,n in delta.items()}) + for (u,v),helpers in sorted(roles.items()): + r=dims[v]-dims[u] + if not 3<=r<=8: + continue + start=[('input',f,v) for f in frames[dims[u]-1] if spaces[f]0 + stock.append({'side':side,'prior':[u,v],'new':[a0,b0], + 'old_rank':r,'parts':[a,b],'extender_roles':helpers, + 'new_cohort_before_extension':roles.get((a0,b0),[]), + 'complete_margin_interval':[str(baseline[0]+lo),str(baseline[1]+hi)], + 'margin_lower':lo}) + stock.sort(key=lambda r:(-r['margin_lower'],r['side'],r['prior'],r['new'],r['parts'])) + for row in stock: + row.pop('margin_lower') + return {'head':audit['HEAD'],'source_pins':PINS,'copies':copies,'crossing_upper':str(k), + 'baseline_moment_interval':list(map(str,baseline)),'typed_signatures':len(stock), + 'rank_hist':dict(Counter(r['old_rank'] for r in stock)), + 'side_hist':dict(Counter(r['side'] for r in stock)), + 'all_source_helpers':sum(map(len,roles.values())),'rows':stock, + 'physical_sites':0,'support_tested':0} + + +if __name__=='__main__': + parser=ArgumentParser() + parser.add_argument('root',type=Path) + args=parser.parse_args() + print(json.dumps(screen(args.root),indent=2,sort_keys=True)) diff --git a/research/p104-charged-rank-six-support-bound/dependencies/round38/incremental/screen.py b/research/p104-charged-rank-six-support-bound/dependencies/round38/incremental/screen.py new file mode 100644 index 0000000000..0e0938e7e6 --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/dependencies/round38/incremental/screen.py @@ -0,0 +1,299 @@ +"""Rational support of charged endpoint splits on the literal #7277 word.""" +from argparse import ArgumentParser +from collections import Counter, defaultdict +from fractions import Fraction as Q +import gzip +from hashlib import sha256 +import json +from pathlib import Path +import runpy +import sys +from time import monotonic + +HEAD = 'ed090b57ed88f8859e5ff4643645099e6ba856ea' +WORD = 'complex/source/inputs/WORD.json.gz' +PINS = { + 'round30/'+WORD: '2c523ce6fdd6092d758fedc3602a0bcedb692b9766f1e41f903351ba4dee1756', + 'round37/preflight/PRICE.json': 'bc6134776a077b4ae3ef595c6000563062b2a42a3684a3852ba4f2f77b8dc726', + 'round36/cochart-audit/verify.py': '58cab0bb2f24fe29d0e190cbe3cc0dc85f889ec4af66b5a02328d1e1d0e37e8a', + 'round36/incremental/predecessor_split.py': '999b9eeabe5cd1a7e3ec014d1a449f850b4ac9bfb19749cddef41ae12cd0b405', + 'round36/incremental/support.py': 'f3e6eeb879480715c5c32c1a390a63c57d26ea1c9a9cbdb89b83ca34260e47f6', +} + + +def read_json(raw): + def unique(items): + result = dict(items) + assert len(result)==len(items),'Duplicate keys' + return result + return json.loads(raw,object_pairs_hook=unique) + + +def save(out,name,receipt): + path = out/(name+'.tmp') + path.write_text(json.dumps(receipt,indent=2,sort_keys=True)+'\n') + path.replace(out/name) + + +def dot(a,b): + return sum(x*b.get(i,0) for i,x in a.items()) + + +def pure_coefficients(rows, roles, group, add): + exterior, output = {}, [] + for role in reversed(roles): + residual = rows[role].copy() + coefficients = {role:Q(1)} + while (lead:=max((k for k in residual if k not in group),default=-1))>=0: + if lead not in exterior: + exterior[lead] = residual,coefficients + break + old,co = exterior[lead] + scale = -residual[lead]/old[lead] + add(residual,old,scale) + add(coefficients,co,scale) + else: + output.append((residual,coefficients)) + return output + + +def admissible(program): + def smooth(n): + for p in (2,3,5): + while n%p==0: + n//=p + return n==1 + for op,*e in program: + q = Q(e[-2]) + if not q or not smooth(q.denominator) or op=='SCALE' and not smooth(abs(q.numerator)): + return False + return True + + +def nominate(word, side, extender, new, t, frame, pivot, ranks, a,b,c,d, check): + u,v = new + changed = dict(word,initial=word['initial'].copy(),final=word['final'].copy()) + if side=='input': + prior = changed['initial'][extender] + changed['initial'][extender] = u + changed['program'] = [['MOVE',extender,u,prior,False]]+word['program'] + else: + prior = changed['final'][extender] + changed['final'][extender] = v + changed['program'] = word['program']+[['MOVE',extender,prior,v,False]] + h = dict(cut_after=t+(side=='input'),frame=frame,pivot=pivot,ranks=ranks) + h.update({name:{str(i):str(q) for i,q in vector.items()} for name,vector in zip('abcd',(a,b,c,d),strict=True)}) + check(changed,h) + return dict(extender=extender,side=side,new=new,original_cut=t,split=h,added_move=changed['program'][0 if side=='input' else -1]) + + +def run(roots,out,seconds): + start = monotonic() + files = {} + for name,digest in PINS.items(): + prefix,p = name.split('/',1) + path = roots[prefix]/p + assert sha256(path.read_bytes()).hexdigest()==digest,name + files[name] = path + word = read_json(gzip.decompress(files['round30/'+WORD].read_bytes())) + receipt = read_json(files['round37/preflight/PRICE.json'].read_bytes()) + predecessor = runpy.run_path(str(files['round36/cochart-audit/verify.py'])) + sys.path.insert(0,str(roots['round36']/'incremental')) + from predecessor_split import basis, check_cut + space,linear,add = (predecessor[name] for name in ('binary_span','linear','add')) + pure_images = predecessor['pure_images'] + assert receipt['head']==HEAD and receipt['copies']==17 and receipt['typed_signatures']==777 + rows = [r for r in receipt['rows'] if r['old_rank']==7] + assert len(rows)==90 + assert all(Q(r['complete_margin_interval'][0])>0 for r in rows) + n,tape = word['public'],word['program'] + spaces = list(map(space,word['frames'])) + dims = list(map(len,word['frames'])) + main = set(word['live']) | {i+112 for i in word['live']} + main.update(word['hosted']['X2']) + main.update(word['hosted']['Y2']) + groups = defaultdict(set) + for i,(a,b) in enumerate(zip(word['initial'],word['final'],strict=True)): + if i not in main: + groups[a,b].add(i) + options = defaultdict(dict) + typed = defaultdict(list) + for row in rows: + side = row['side'] + a,b = row['prior'] + u,v = row['new'] + g = groups[u,v] + assert set(row['new_cohort_before_extension'])==g + assert groups[a,b]==set(row['extender_roles']) and not g&groups[a,b] + assert (b==v and spaces[u]=n) + assert spaces[a]=seconds: + return checkpoint('prefix_cap',t) + linear(forward,*e) + for key,f,roles in schedule.get(t,()): + pp = pure_images(forward,roles,universe[key]) + bump(key,'prefix_checked') + if pp: + snaps[t].append((key,f,roles,pp)) + bump(key,'prefix_nonzero') + if t%4096==0: + checkpoint('prefix',t) + assert all(forward[i]=={i:Q(1)} for i in set().union(*universe.values())) + backward = identity() + for t in reversed(range(len(decoded))): + if monotonic()-start>=seconds: + return checkpoint('suffix_cap',t) + for key,f,roles,pp in snaps.get(t,()): + ss = pure_images(backward,roles,universe[key]) + bump(key,'suffix_checked') + if not any(dot(c,d) for c in pp for d in ss): + continue + bump(key,'union_nonzero') + # Recover the exact prefix only at cuts surviving the union test. + local = identity() + for e in decoded[:t+1]: + linear(local,*e) + pivot_stock = set(roles) + u,v = key[:2] + g = groups[u,v] + for extender,row in options[key].items(): + if monotonic()-start>=seconds: + unresolved.append(dict(clock=t,frame=f,endpoints=key[:2],parts=key[2:],reason='extender_cap')) + return checkpoint('extender_cap',t) + group = g|{extender} + pivots = sorted(pivot_stock&group) + if not pivots: + continue + cc = pure_coefficients(local,roles,group,add) + dd = pure_coefficients(backward,roles,group,add) + bump(key,'exact_extender_checked') + nonzero = False + for c,a in cc: + for d,b in dd: + paired = dot(c,d) + if not paired: + continue + nonzero = True + if dot(a,b)!=paired: + continue + for scale in (Q(1),paired,Q(-1)): + aa = {i:q/scale for i,q in a.items()} + co = {i:q/scale for i,q in c.items()} + bb = {i:q*scale/paired for i,q in b.items()} + do = {i:q*scale/paired for i,q in d.items()} + for pivot in pivots: + try: + ops = basis(aa,bb,pivot,f)+basis(co,do,pivot,u) + except ValueError: + continue + if admissible(ops): + candidate = nominate(word,row['side'],extender,(u,v),t,f,pivot, + [dims[f]-dims[u],dims[v]-dims[f]],aa,bb,co,do,check_cut) + candidate['price_margin'] = row['complete_margin_interval'] + return checkpoint('witness',t) + if nonzero: + unresolved.append(dict(clock=t,frame=f,endpoints=key[:2],parts=key[2:],extender=extender,reason='no_admissible_basis_pair')) + linear(backward,*decoded[t],reverse=True) + if t%4096==0: + checkpoint('suffix',t) + checkpoint('exhausted' if not unresolved else 'unresolved_basis_pairs',0) + + +if __name__=='__main__': + assert __debug__ + p = ArgumentParser() + p.add_argument('round30',type=Path) + p.add_argument('round36',type=Path) + p.add_argument('round37',type=Path) + p.add_argument('out',type=Path) + p.add_argument('--seconds',type=int,default=175) + a = p.parse_args() + a.out.mkdir() + run({k:getattr(a,k) for k in ('round30','round36','round37')},a.out,a.seconds) diff --git a/research/p104-charged-rank-six-support-bound/dependencies/round49/NEXT.md b/research/p104-charged-rank-six-support-bound/dependencies/round49/NEXT.md new file mode 100644 index 0000000000..1b9a4cda7b --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/dependencies/round49/NEXT.md @@ -0,0 +1,35 @@ +# Next incremental gate after Round 49 + +Pivot from paid public MOVE contacts to productive helper credit. +Recheck exact #7277 and #7113 and compare pending #7303 (fixed-word +singleton splits), #7142 (funded endpoint proof), plus the latest +open, merged, archive and Discussion coverage. Rounds 37–38 closed +the rank-eight and rank-seven typed scopes. Test only rank-six to +rank-seven charged endpoint extensions with productive partition 3+4. +Keep the literal chart/ownership chronology outside the extension. + +The authenticated Round 37 price receipt `preflight/PRICE.json` +(SHA-256 `bc6134776a077b4ae3ef595c6000563062b2a42a3684a3852ba4f2f77b8dc726`) +has 83 such signatures. It grants a productive replacement of rank 6 +by 3 and 4 and charges one new paid rank-one child in each of the +17 signed native copies. The recorded complete directed lower margin +at the old crossing upper is exactly +`1835166431152278266166310959958201126735264211/15625000000000000000000000000000000000000000000` +(about 0.1174506515937458 raw), before any other ordinary or physical +changes. Treat alternatives separately unless compatibility is proved. + +First implementation step: copy the sealed Round 38 +`incremental/screen.py` into the new isolated artifact and select only +`old_rank == 6` with `parts == [3,4]`. Update the verified stock +assertions to 83 and target rank seven, derive cohort counts from the +literal inputs, and retain the Round 36 cochart and exact support pins. +Rebuild the complete invoice and save a priced inventory before signed +prefix/suffix decoding. Use the existing exact necessary union test +and refine any nonzero union result to one literal extender and an +exact pair of legal basis vectors. Cap at 83 signatures or 120 runner +seconds, including a 115-second checkpoint. Allow at most one survivor +full physical validation within the current discovery reserve. Advance +only after a positive fully charged invoice, exact arbitrary-input +forward and adjoint, ownership and restoration, fresh grid, precision, +tape and complete independent caller/outer replay. If exhausted or +capped without a support witness, save exact unvisited keys and pivot. diff --git a/research/p104-charged-rank-six-support-bound/dependencies/round50/lead/screen.py b/research/p104-charged-rank-six-support-bound/dependencies/round50/lead/screen.py new file mode 100644 index 0000000000..3ccb707821 --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/dependencies/round50/lead/screen.py @@ -0,0 +1,376 @@ +"""Exact rank-six to rank-seven, 3+4 charged endpoint support gate.""" +from argparse import ArgumentParser +from collections import Counter, defaultdict +from fractions import Fraction as Q +import gzip +from hashlib import sha256 +import json +from pathlib import Path +import runpy +from signal import SIGALRM, alarm, signal +import sys +from time import monotonic + +HEAD = 'ed090b57ed88f8859e5ff4643645099e6ba856ea' +WORD = 'complex/source/inputs/WORD.json.gz' +PINS = { + 'round30/'+WORD: '2c523ce6fdd6092d758fedc3602a0bcedb692b9766f1e41f903351ba4dee1756', + 'round30/complex/audit.py': '67b006627fd4e07c349f48f31e6d541c62804416bdc85f664a3607dd1b386efb', + 'round30/complex/source/powers.py': 'c0c460b464d7c836fb887010b57119be322aae686736b86820aae3544d380bee', + 'round30/complex/source/inputs/CALLER.json': '255d89f38cd45e38e5770f559bc43dc217e989032359768cdc7e8cdfd64b47bc', + 'round30/complex/source/inputs/EARLY-RESULT.json': '691025fe95c7938a6da211244d4d5b6187d88a9de1acff0862eeb7f0ce7deaa7', + 'round37/preflight/price.py': '8b1b345bd4a2732c74251c1b95d47f98cd37184894d8979a6ef1953d38686be8', + 'round38/incremental/screen.py': '43a74344555088b016a3fb857b7c86de3f2880ef85b77846c4362037779b8405', + 'round49/NEXT.md': 'f304c5b62077e43d35696d939a0f96f420a30cc8173fc97978c4e54d867ff86f', + 'round37/preflight/PRICE.json': 'bc6134776a077b4ae3ef595c6000563062b2a42a3684a3852ba4f2f77b8dc726', + 'round36/cochart-audit/verify.py': '58cab0bb2f24fe29d0e190cbe3cc0dc85f889ec4af66b5a02328d1e1d0e37e8a', + 'round36/incremental/predecessor_split.py': '999b9eeabe5cd1a7e3ec014d1a449f850b4ac9bfb19749cddef41ae12cd0b405', + 'round36/incremental/support.py': 'f3e6eeb879480715c5c32c1a390a63c57d26ea1c9a9cbdb89b83ca34260e47f6', +} + + +def read_json(raw): + def unique(items): + result = dict(items) + assert len(result)==len(items),'Duplicate keys' + return result + return json.loads(raw,object_pairs_hook=unique) + + +def save(out,name,receipt): + path = out/(name+'.tmp') + path.write_text(json.dumps(receipt,indent=2,sort_keys=True)+'\n') + path.replace(out/name) + + +def dot(a,b): + return sum(x*b.get(i,0) for i,x in a.items()) + + +def pure_coefficients(rows, roles, group, add): + exterior, output = {}, [] + for role in reversed(roles): + residual = rows[role].copy() + coefficients = {role:Q(1)} + while (lead:=max((k for k in residual if k not in group),default=-1))>=0: + if lead not in exterior: + exterior[lead] = residual,coefficients + break + old,co = exterior[lead] + scale = -residual[lead]/old[lead] + add(residual,old,scale) + add(coefficients,co,scale) + else: + output.append((residual,coefficients)) + return output + + +def admissible(program): + def smooth(n): + for p in (2,3,5): + while n%p==0: + n//=p + return n==1 + for op,*e in program: + q = Q(e[-2]) + if not q or not smooth(q.denominator) or op=='SCALE' and not smooth(abs(q.numerator)): + return False + return True + + +def nominate(word, side, extender, new, t, frame, pivot, ranks, a,b,c,d, check): + u,v = new + changed = dict(word,initial=word['initial'].copy(),final=word['final'].copy()) + if side=='input': + prior = changed['initial'][extender] + changed['initial'][extender] = u + changed['program'] = [['MOVE',extender,u,prior,False]]+word['program'] + else: + prior = changed['final'][extender] + changed['final'][extender] = v + changed['program'] = word['program']+[['MOVE',extender,prior,v,False]] + h = dict(cut_after=t+(side=='input'),frame=frame,pivot=pivot,ranks=ranks) + h.update({name:{str(i):str(q) for i,q in vector.items()} for name,vector in zip('abcd',(a,b,c,d),strict=True)}) + check(changed,h) + return dict(extender=extender,side=side,new=new,original_cut=t,split=h,added_move=changed['program'][0 if side=='input' else -1]) + + +def controls(predecessor): + add, images = predecessor['add'], predecessor['pure_images'] + rows = [{0:Q(1),3:Q(1)}, {3:Q(1)}, {1:Q(-2)}] + assert images(rows,[0,1],{0}) and not images(rows,[0,1],{1}) + (image,coefficients), = pure_coefficients(rows,[0,1],{0},add) + assert set(image)=={0} and abs(image[0])==1 + assert set(coefficients)=={0,1} + assert dot(image,{0:Q(2)}) and not dot(image,rows[2]) + assert admissible([['ADD',0,1,'-7/15',0],['SCALE',1,'-3/10',0]]) + assert not admissible([['ADD',0,1,'1/7',0]]) + assert not admissible([['SCALE',1,'7/10',0]]) + return ['exterior_cancellation_recovers_pure_image','outside_only_bank_excluded', + 'signed_pairing_positive_and_zero','native_basis_coefficient_controls'] + + +def authenticate(roots): + files = {} + for name,digest in PINS.items(): + prefix,p = name.split('/',1) + path = roots[prefix]/p + assert sha256(path.read_bytes()).hexdigest()==digest,name + files[name] = path + return files + + +def run(roots,out,seconds,price_only=False): + start = monotonic() + deadline = start + min(115,seconds-1) + files = authenticate(roots) + word = read_json(gzip.decompress(files['round30/'+WORD].read_bytes())) + receipt = read_json(files['round37/preflight/PRICE.json'].read_bytes()) + predecessor = runpy.run_path(str(files['round36/cochart-audit/verify.py'])) + sys.path.insert(0,str(roots['round36']/'incremental')) + from predecessor_split import basis, check_cut + space,linear,add = (predecessor[name] for name in ('binary_span','linear','add')) + pure_images = predecessor['pure_images'] + assert receipt['head']==HEAD and receipt['copies']==17 and receipt['typed_signatures']==777 + price_model = runpy.run_path(str(files['round37/preflight/price.py'])) + rebuilt = price_model['screen'](roots['round30']) + assert json.loads(json.dumps(rebuilt)) == receipt + rows = [r for r in receipt['rows'] if r['old_rank']==6 and r['parts']==[3,4]] + assert len(rows)==83 and Counter(r['side'] for r in rows)=={'input':50,'output':33} + assert all(Q(r['complete_margin_interval'][0])== + Q('1835166431152278266166310959958201126735264211/15625000000000000000000000000000000000000000000') + for r in rows) + save(out,'PRICE.json',dict(head=HEAD,pins=PINS,crossing_upper=receipt['crossing_upper'], + baseline_interval=receipt['baseline_moment_interval'],copies=17,selected_signatures=len(rows), + paid_rank_delta={1:17},productive_rank_delta={3:17,4:17,6:-17}, + complete_margin_interval_per_alternative=rows[0]['complete_margin_interval'], + alternatives=rows,grant='One alternative at a time. Additional ordinary and physical costs free only in this upper.')) + checks = controls(predecessor) + if price_only: + return + n,tape = word['public'],word['program'] + spaces = list(map(space,word['frames'])) + dims = list(map(len,word['frames'])) + main = set(word['live']) | {i+112 for i in word['live']} + main.update(word['hosted']['X2']) + main.update(word['hosted']['Y2']) + groups = defaultdict(set) + for i,(a,b) in enumerate(zip(word['initial'],word['final'],strict=True)): + if i not in main: + groups[a,b].add(i) + options = defaultdict(dict) + typed = defaultdict(list) + for row in rows: + side = row['side'] + a,b = row['prior'] + u,v = row['new'] + g = groups[u,v] + assert set(row['new_cohort_before_extension'])==g + assert groups[a,b]==set(row['extender_roles']) and not g&groups[a,b] + assert (b==v and spaces[u]=deadline: + return save(out,'SUPPORT.json',dict(head=HEAD,phase='inventory_cap',clock=t, + candidate=None,unresolved_signatures=rows,controls=checks)) + src,q = dst,None + if op=='MOVE': + a,b,owned = args + assert chart[dst]==a and owned==(dst>=n) + assert spaces[a]=deadline: + return checkpoint('prefix_cap',t) + linear(forward,*e) + for key,f,roles in schedule.get(t,()): + pp = pure_images(forward,roles,universe[key]) + bump(key,'prefix_checked') + if pp: + snaps[t].append((key,f,roles,pp)) + bump(key,'prefix_nonzero') + else: + pending.discard((t,key,f)) + if t%4096==0: + checkpoint('prefix',t) + assert all(forward[i]=={i:Q(1)} for i in set().union(*universe.values())) + backward = identity() + for t in reversed(range(len(decoded))): + if monotonic()>=deadline: + return checkpoint('suffix_cap',t) + for key,f,roles,pp in snaps.get(t,()): + ss = pure_images(backward,roles,universe[key]) + bump(key,'suffix_checked') + if not any(dot(c,d) for c in pp for d in ss): + pending.discard((t,key,f)) + continue + bump(key,'union_nonzero') + # Recover the exact prefix only at cuts surviving the union test. + local = identity() + for e in decoded[:t+1]: + linear(local,*e) + pivot_stock = set(roles) + u,v = key[:2] + g = groups[u,v] + unresolved_before = len(unresolved) + for extender,row in options[key].items(): + if monotonic()>=deadline: + unresolved.append(dict(clock=t,frame=f,endpoints=key[:2],parts=key[2:],reason='extender_cap')) + return checkpoint('extender_cap',t) + group = g|{extender} + pivots = sorted(pivot_stock&group) + if not pivots: + continue + cc = pure_coefficients(local,roles,group,add) + dd = pure_coefficients(backward,roles,group,add) + bump(key,'exact_extender_checked') + nonzero = False + for c,a in cc: + for d,b in dd: + paired = dot(c,d) + if not paired: + continue + nonzero = True + if dot(a,b)!=paired: + continue + for scale in (Q(1),paired,Q(-1)): + aa = {i:q/scale for i,q in a.items()} + co = {i:q/scale for i,q in c.items()} + bb = {i:q*scale/paired for i,q in b.items()} + do = {i:q*scale/paired for i,q in d.items()} + for pivot in pivots: + try: + ops = basis(aa,bb,pivot,f)+basis(co,do,pivot,u) + except ValueError: + continue + if admissible(ops): + candidate = nominate(word,row['side'],extender,(u,v),t,f,pivot, + [dims[f]-dims[u],dims[v]-dims[f]],aa,bb,co,do,check_cut) + candidate['price_margin'] = row['complete_margin_interval'] + candidate['build_command'] = 'python3.12 -I -B build.py dependencies SUPPORT.json CANDIDATE.json' + return checkpoint('witness',t) + if nonzero: + unresolved.append(dict(clock=t,frame=f,endpoints=key[:2],parts=key[2:],extender=extender,reason='no_admissible_basis_pair')) + if len(unresolved)==unresolved_before: + pending.discard((t,key,f)) + linear(backward,*decoded[t],reverse=True) + if t%4096==0: + checkpoint('suffix',t) + assert bool(pending)==bool(unresolved) + checkpoint('exhausted' if not unresolved else 'unresolved_basis_pairs',0) + + +if __name__=='__main__': + assert __debug__ + p = ArgumentParser() + p.add_argument('dependencies',type=Path,nargs='?',default=Path(__file__).resolve().parent/'dependencies') + p.add_argument('out',type=Path,nargs='?') + p.add_argument('--seconds',type=int,default=120,choices=range(2,121),metavar='2..120') + p.add_argument('--controls-only',action='store_true') + p.add_argument('--price-only',action='store_true') + a = p.parse_args() + roots = {key:a.dependencies/key for key in ('round30','round36','round37','round38','round49')} + if a.controls_only: + files = authenticate(roots) + print(json.dumps(controls(runpy.run_path(str(files['round36/cochart-audit/verify.py']))))) + else: + if a.out is None: + p.error('fresh output directory required') + a.out.mkdir() + def cap(*_): + raise TimeoutError('hard runner deadline') + signal(SIGALRM,cap) + alarm(a.seconds) + try: + run(roots,a.out,a.seconds,a.price_only) + except TimeoutError: + save(a.out,'TIMEOUT.json',dict(head=HEAD,status='hard_timeout',unverified_signatures=83)) + raise SystemExit(2) + finally: + alarm(0) diff --git a/research/p104-charged-rank-six-support-bound/engines/independent_2_5.py b/research/p104-charged-rank-six-support-bound/engines/independent_2_5.py new file mode 100644 index 0000000000..1283f9a3fe --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/engines/independent_2_5.py @@ -0,0 +1,286 @@ +"""Independent reverse-first census for charged rank-six 2+5 helper extensions.""" +from argparse import ArgumentParser +from ast import FunctionDef, Module, parse +from collections import Counter, defaultdict +from fractions import Fraction as Q +from functools import cache +from hashlib import sha256 +import json +from pathlib import Path +import runpy +from signal import alarm, signal, SIGALRM + +PINS = { + 'round35/verify.py': 'c906fffec26f043e159f8e314b0f245cde432cf72d2bc6a6ade6235a4c798c5a', + 'round36/predecessor_search.py': '668022953f53929fd4d95ed1b5c01ac2ba3b4bdf6be7babae511757eb21b7e6a', + 'round37/preflight/PRICE.json': 'bc6134776a077b4ae3ef595c6000563062b2a42a3684a3852ba4f2f77b8dc726', +} +HEAD = 'ed090b57ed88f8859e5ff4643645099e6ba856ea' +PARTS = ((2, 5),) + + +def add(row, other, factor): + for k,x in other.items(): + y = row.get(k,0) + factor*x + if y: + row[k] = y + else: + row.pop(k,None) + + +def read_json(data): + def unique(pairs): + result = dict(pairs) + assert len(result) == len(pairs), 'duplicate JSON key' + return result + return json.loads(data, object_pairs_hook=unique) + + +def source(roots, inventory_hash, support_hash): + PINS["round51/INVENTORY.json"] = inventory_hash + PINS["round51/SUPPORT.json"] = support_hash + loaded = {} + for name,digest in PINS.items(): + label,path = name.split('/',1) + file = roots[label]/path + assert sha256(file.read_bytes()).hexdigest() == digest, name + loaded[name] = file + audit = runpy.run_path(str(loaded['round35/verify.py'])) + tree = parse(loaded['round36/predecessor_search.py'].read_text()) + function, = [x for x in tree.body if isinstance(x,FunctionDef) and x.name == 'pure_combinations'] + env = {'add':add,'Q':Q} + exec(compile(Module(body=[function],type_ignores=[]), 'pinned-pure-combinations', 'exec'), env) + receipts = [read_json(path.read_bytes()) for key,path in loaded.items() if key.endswith('.json')] + return audit,env['pure_combinations'],receipts + + +def write(out,name,obj): + temp = out/(name+'.tmp') + temp.write_text(json.dumps(obj,sort_keys=True,indent=2)+'\n') + temp.replace(out/name) + + +def geometry(word,caller,early,audit,receipt): + frames = audit['spaces'](word['frames']) + dims = [len(s).bit_length()-1 for s in frames] + main = set(word['live']) | {i+112 for i in word['live']} | set(word['hosted']['X2']+word['hosted']['Y2']) + helpers = defaultdict(set) + for i,(a,b) in enumerate(zip(word['initial'],word['final'],strict=True)): + if i not in main: + helpers[a,b].add(i) + extensions = {} + for (a,b),roles in helpers.items(): + if dims[b]-dims[a] != 6: + continue + assert frames[a] < frames[b] + for f,span in enumerate(frames): + if dims[f] == dims[a]-1 and span < frames[a]: + extensions['input',(a,b),(f,b)] = roles + if dims[f] == dims[b]+1 and frames[b] < span: + extensions['output',(a,b),(a,f)] = roles + typed = {(*key,part):roles for key,roles in extensions.items() for part in PARTS} + source_rows = [r for r in receipt['rows'] if r['old_rank'] == 6 and tuple(r['parts']) in PARTS] + keys = [(r['side'],tuple(r['prior']),tuple(r['new']),tuple(r['parts'])) for r in source_rows] + assert len(keys) == len(set(keys)) == len(typed) == 83 + declared = dict(zip(keys,source_rows,strict=True)) + assert typed.keys() == declared.keys() + for key,roles in typed.items(): + r = declared[key] + assert roles == set(r['extender_roles']) + assert helpers.get(key[2],set()) == set(r['new_cohort_before_extension']) + assert not roles & helpers.get(key[2],set()) + assert Counter(r['old_rank'] for r in receipt['rows']) == {8:24,7:90,6:166,5:432,4:15,3:50} + + @cache + def relative(a,b): + return dims[a]+dims[b]-2*(len(frames[a]&frames[b]).bit_length()-1) + + tape = word['program'] + remove = next(i for i,e in enumerate(tape) if e[0] == 'MOVE') + paid = audit['literal_move_bill'](tape,word,relative) + contacts,_ = audit['whole_contact_recount']([(i,e) for i,e in enumerate(tape) if e[0]!='MOVE'],word,relative) + assert sum(paid.values()) == 6280 and contacts == paid + try: + audit['literal_move_bill'](tape[:remove]+tape[remove+1:],word,relative) + except AssertionError: + pass + else: + raise AssertionError('omitted paid MOVE accepted') + P,T,copies = audit['full_bill'](word,caller,paid,relative) + assert copies == receipt['copies'] == 17 + assert {str(r):v for r,v in P.items()} == early['invoice']['P'] + assert {str(r):v for r,v in T.items()} == early['invoice']['T'] + net = T.copy() + net.subtract(P) + k = Q(early['price']['independent_raw_bracket'][1]) + assert k == Q(receipt['crossing_upper']) + baseline = audit['price'](net,k) + assert baseline[1] < 0 + bounds = {} + for parts in PARTS: + change = Counter(parts) + change[6] -= 1 + change[1] -= 1 + assert sum(rank*n for rank,n in change.items()) == 0 + delta = audit['price']({r:v*copies for r,v in change.items()},k) + bounds[parts] = tuple(a+b for a,b in zip(delta,baseline,strict=True)) + assert 0 < bounds[parts][0] <= bounds[parts][1] + for key,row in declared.items(): + lo,hi = map(Q,row['complete_margin_interval']) + lower,upper = bounds[key[3]] + assert lo <= lower <= upper <= hi + interval_rank = sorted(PARTS,key=lambda part:bounds[part][0],reverse=True) + assert all(bounds[a][0] > bounds[b][1] for a,b in zip(interval_rank,interval_rank[1:])) + assert [r['parts'] for r in source_rows] == [ + list(part) for part in interval_rank for _ in range(len(extensions))] + assert [tuple(x) for x in interval_rank] == [(2,5)] + return frames,dims,helpers,typed,bounds,interval_rank + + +def groups_for(helpers,typed): + grouping = defaultdict(dict) + for key,roles in typed.items(): + grouping[key[2],key[3]][key] = roles + universe = {g:helpers.get(g[0],set()) | set().union(*rows.values()) + for g,rows in grouping.items()} + assert len(grouping) == 73 + return grouping,universe + + +def reverse_cuts(word,frames,dims,helpers,grouping,universe): + n = word['public'] + tape = word['program'] + charts = word['final'] + [None]*word['owned_fields'] + banks = defaultdict(set) + for r,f in enumerate(charts[:n]): + banks[f].add(r) + groups_by_frame = defaultdict(list) + for g in grouping: + (a,b),parts = g + assert not any(word['initial'][r] == f + for f in range(len(frames)) if dims[f]-dims[a] in parts and frames[a]=n) + assert frames[a]=n + charts[r] = f + banks[f].add(r) + elif op == 'INIT': + f = args[0] + assert charts[r] == f and r>=n + charts[r] = None + banks[f].remove(r) + else: + assert charts[r] == args[-1] + if op in ('ADD','COPY'): + assert charts[args[0]] == charts[r] + assert charts == word['initial']+[None]*word['owned_fields'] + return schedule,counts,typed_counts + + +def step(rows,e,reverse): + op,d,*args = e + if op in ('CLEAR','INIT'): + rows[d] = {} + elif op == 'SCALE': + q = Q(args[-2]) + rows[d] = {k:q*v for k,v in rows[d].items()} + elif op in ('ADD','COPY'): + s,q = args[0],Q(args[-2]) + assert s != d + if reverse: + add(rows[s],rows[d],q) + if op == 'COPY': + rows[d] = {} + elif op == 'ADD': + add(rows[d],rows[s],q) + else: + rows[d] = {k:q*v for k,v in rows[s].items()} + + +def run(roots,out,inventory_hash,support_hash): + audit,pure,(pricing,inventory,lead) = source(roots,inventory_hash,support_hash) + word,caller,early = audit['read_inputs'](roots['round30']/'complex/source') + assert pricing['head'] == inventory['head'] == lead['head'] == HEAD + frames,dims,helpers,typed,bounds,ranking = geometry(word,caller,early,audit,pricing) + grouping,universe = groups_for(helpers,typed) + schedule,cuts,typed_counts = reverse_cuts(word,frames,dims,helpers,grouping,universe) + assert cuts == Counter({(tuple(r['endpoints']),tuple(r['parts'])):r['cuts'] for r in inventory['counts']}) + assert typed_counts == Counter({(r['side'],tuple(r['prior']),tuple(r['new']),tuple(r['parts'])):r['cuts'] for r in inventory['typed']}) + assert sum(cuts.values()) == inventory['cuts'] + result = {'head':HEAD,'typed_signatures':len(typed),'union_groups':len(grouping), + 'rank_six_3_plus_4_predecessor':83,'smaller_outside_scope':497,'cut_incidences':sum(cuts.values()), + 'part_price_order':[list(p) for p in ranking], + 'whole_margins':{'+'.join(map(str,p)):list(map(str,v)) for p,v in bounds.items()}, + 'literal_paid_move_omission_rejected':True,'pins':PINS} + write(out,'CUTS.json',result) + n,tape = word['public'],word['program'] + def identity(): + return [{i:Q(1)} for i in range(n)]+[{} for _ in range(word['owned_fields'])] + suffix, stored, seen = identity(),{},0 + for t in reversed(range(len(tape))): + for group,f,roles in schedule.get(t,()): + right = pure(suffix,roles,universe[group]) + seen += 1 + if right: + stored[t,group,f] = tuple(d for d,_ in right) + step(suffix,tape[t],True) + prefix,positive,checked,comparisons = identity(),Counter(),0,0 + for t,e in enumerate(tape): + step(prefix,e,False) + for group,f,roles in schedule.get(t,()): + left = pure(prefix,roles,universe[group]) + checked += 1 + if left: + positive[group] += 1 + for c,_ in left: + for d in stored.get((t,group,f),()): + comparisons += 1 + assert not sum(x*d.get(i,0) for i,x in c.items()),(t,f,group) + assert all(prefix[i] == {i:Q(1)} for u in universe.values() for i in u) + assert seen == checked == inventory['cuts'] + assert positive == Counter({(tuple(r['endpoints']),tuple(r['parts'])):r.get('prefix_nonzero',0) for r in lead['by_parts']}) + assert lead['phase']=='exhausted' + assert not lead['candidate'] and not lead['unresolved'] + result.update(status='PASS_INDEPENDENT_REVERSE_FIRST_RANK6_2_PLUS_5',positive_prefix_images=sum(positive.values()), + suffix_nonzero_cuts=len(stored),basis_pairings_tested=comparisons,positive_pairings=0) + write(out,'RESULT.json',result) + + +if __name__ == '__main__': + p = ArgumentParser(description=__doc__) + for name in ('round30','round35','round36','round37','round51','out'): + p.add_argument(name,type=Path) + p.add_argument("--inventory-sha",required=True) + p.add_argument("--support-sha",required=True) + a = p.parse_args() + a.out.mkdir() + def timeout(*_): + raise TimeoutError('independent replay watchdog') + signal(SIGALRM,timeout) + alarm(43) + run({k:getattr(a,k) for k in ('round30','round35','round36','round37','round51')},a.out,a.inventory_sha,a.support_sha) + alarm(0) diff --git a/research/p104-charged-rank-six-support-bound/engines/independent_3_4.py b/research/p104-charged-rank-six-support-bound/engines/independent_3_4.py new file mode 100644 index 0000000000..cb40c5b29a --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/engines/independent_3_4.py @@ -0,0 +1,286 @@ +"""Independent reverse-first census for charged rank-six 3+4 helper extensions.""" +from argparse import ArgumentParser +from ast import FunctionDef, Module, parse +from collections import Counter, defaultdict +from fractions import Fraction as Q +from functools import cache +from hashlib import sha256 +import json +from pathlib import Path +import runpy +from signal import alarm, signal, SIGALRM + +PINS = { + 'round35/verify.py': 'c906fffec26f043e159f8e314b0f245cde432cf72d2bc6a6ade6235a4c798c5a', + 'round36/predecessor_search.py': '668022953f53929fd4d95ed1b5c01ac2ba3b4bdf6be7babae511757eb21b7e6a', + 'round37/preflight/PRICE.json': 'bc6134776a077b4ae3ef595c6000563062b2a42a3684a3852ba4f2f77b8dc726', +} +HEAD = 'ed090b57ed88f8859e5ff4643645099e6ba856ea' +PARTS = ((3, 4),) + + +def add(row, other, factor): + for k,x in other.items(): + y = row.get(k,0) + factor*x + if y: + row[k] = y + else: + row.pop(k,None) + + +def read_json(data): + def unique(pairs): + result = dict(pairs) + assert len(result) == len(pairs), 'duplicate JSON key' + return result + return json.loads(data, object_pairs_hook=unique) + + +def source(roots, inventory_hash, support_hash): + PINS["round50/INVENTORY.json"] = inventory_hash + PINS["round50/SUPPORT.json"] = support_hash + loaded = {} + for name,digest in PINS.items(): + label,path = name.split('/',1) + file = roots[label]/path + assert sha256(file.read_bytes()).hexdigest() == digest, name + loaded[name] = file + audit = runpy.run_path(str(loaded['round35/verify.py'])) + tree = parse(loaded['round36/predecessor_search.py'].read_text()) + function, = [x for x in tree.body if isinstance(x,FunctionDef) and x.name == 'pure_combinations'] + env = {'add':add,'Q':Q} + exec(compile(Module(body=[function],type_ignores=[]), 'pinned-pure-combinations', 'exec'), env) + receipts = [read_json(path.read_bytes()) for key,path in loaded.items() if key.endswith('.json')] + return audit,env['pure_combinations'],receipts + + +def write(out,name,obj): + temp = out/(name+'.tmp') + temp.write_text(json.dumps(obj,sort_keys=True,indent=2)+'\n') + temp.replace(out/name) + + +def geometry(word,caller,early,audit,receipt): + frames = audit['spaces'](word['frames']) + dims = [len(s).bit_length()-1 for s in frames] + main = set(word['live']) | {i+112 for i in word['live']} | set(word['hosted']['X2']+word['hosted']['Y2']) + helpers = defaultdict(set) + for i,(a,b) in enumerate(zip(word['initial'],word['final'],strict=True)): + if i not in main: + helpers[a,b].add(i) + extensions = {} + for (a,b),roles in helpers.items(): + if dims[b]-dims[a] != 6: + continue + assert frames[a] < frames[b] + for f,span in enumerate(frames): + if dims[f] == dims[a]-1 and span < frames[a]: + extensions['input',(a,b),(f,b)] = roles + if dims[f] == dims[b]+1 and frames[b] < span: + extensions['output',(a,b),(a,f)] = roles + typed = {(*key,part):roles for key,roles in extensions.items() for part in PARTS} + source_rows = [r for r in receipt['rows'] if r['old_rank'] == 6 and tuple(r['parts']) in PARTS] + keys = [(r['side'],tuple(r['prior']),tuple(r['new']),tuple(r['parts'])) for r in source_rows] + assert len(keys) == len(set(keys)) == len(typed) == 83 + declared = dict(zip(keys,source_rows,strict=True)) + assert typed.keys() == declared.keys() + for key,roles in typed.items(): + r = declared[key] + assert roles == set(r['extender_roles']) + assert helpers.get(key[2],set()) == set(r['new_cohort_before_extension']) + assert not roles & helpers.get(key[2],set()) + assert Counter(r['old_rank'] for r in receipt['rows']) == {8:24,7:90,6:166,5:432,4:15,3:50} + + @cache + def relative(a,b): + return dims[a]+dims[b]-2*(len(frames[a]&frames[b]).bit_length()-1) + + tape = word['program'] + remove = next(i for i,e in enumerate(tape) if e[0] == 'MOVE') + paid = audit['literal_move_bill'](tape,word,relative) + contacts,_ = audit['whole_contact_recount']([(i,e) for i,e in enumerate(tape) if e[0]!='MOVE'],word,relative) + assert sum(paid.values()) == 6280 and contacts == paid + try: + audit['literal_move_bill'](tape[:remove]+tape[remove+1:],word,relative) + except AssertionError: + pass + else: + raise AssertionError('omitted paid MOVE accepted') + P,T,copies = audit['full_bill'](word,caller,paid,relative) + assert copies == receipt['copies'] == 17 + assert {str(r):v for r,v in P.items()} == early['invoice']['P'] + assert {str(r):v for r,v in T.items()} == early['invoice']['T'] + net = T.copy() + net.subtract(P) + k = Q(early['price']['independent_raw_bracket'][1]) + assert k == Q(receipt['crossing_upper']) + baseline = audit['price'](net,k) + assert baseline[1] < 0 + bounds = {} + for parts in PARTS: + change = Counter(parts) + change[6] -= 1 + change[1] -= 1 + assert sum(rank*n for rank,n in change.items()) == 0 + delta = audit['price']({r:v*copies for r,v in change.items()},k) + bounds[parts] = tuple(a+b for a,b in zip(delta,baseline,strict=True)) + assert 0 < bounds[parts][0] <= bounds[parts][1] + for key,row in declared.items(): + lo,hi = map(Q,row['complete_margin_interval']) + lower,upper = bounds[key[3]] + assert lo <= lower <= upper <= hi + interval_rank = sorted(PARTS,key=lambda part:bounds[part][0],reverse=True) + assert all(bounds[a][0] > bounds[b][1] for a,b in zip(interval_rank,interval_rank[1:])) + assert [r['parts'] for r in source_rows] == [ + list(part) for part in interval_rank for _ in range(len(extensions))] + assert [tuple(x) for x in interval_rank] == [(3,4)] + return frames,dims,helpers,typed,bounds,interval_rank + + +def groups_for(helpers,typed): + grouping = defaultdict(dict) + for key,roles in typed.items(): + grouping[key[2],key[3]][key] = roles + universe = {g:helpers.get(g[0],set()) | set().union(*rows.values()) + for g,rows in grouping.items()} + assert len(grouping) == 73 + return grouping,universe + + +def reverse_cuts(word,frames,dims,helpers,grouping,universe): + n = word['public'] + tape = word['program'] + charts = word['final'] + [None]*word['owned_fields'] + banks = defaultdict(set) + for r,f in enumerate(charts[:n]): + banks[f].add(r) + groups_by_frame = defaultdict(list) + for g in grouping: + (a,b),parts = g + assert not any(word['initial'][r] == f + for f in range(len(frames)) if dims[f]-dims[a] in parts and frames[a]=n) + assert frames[a]=n + charts[r] = f + banks[f].add(r) + elif op == 'INIT': + f = args[0] + assert charts[r] == f and r>=n + charts[r] = None + banks[f].remove(r) + else: + assert charts[r] == args[-1] + if op in ('ADD','COPY'): + assert charts[args[0]] == charts[r] + assert charts == word['initial']+[None]*word['owned_fields'] + return schedule,counts,typed_counts + + +def step(rows,e,reverse): + op,d,*args = e + if op in ('CLEAR','INIT'): + rows[d] = {} + elif op == 'SCALE': + q = Q(args[-2]) + rows[d] = {k:q*v for k,v in rows[d].items()} + elif op in ('ADD','COPY'): + s,q = args[0],Q(args[-2]) + assert s != d + if reverse: + add(rows[s],rows[d],q) + if op == 'COPY': + rows[d] = {} + elif op == 'ADD': + add(rows[d],rows[s],q) + else: + rows[d] = {k:q*v for k,v in rows[s].items()} + + +def run(roots,out,inventory_hash,support_hash): + audit,pure,(pricing,inventory,lead) = source(roots,inventory_hash,support_hash) + word,caller,early = audit['read_inputs'](roots['round30']/'complex/source') + assert pricing['head'] == inventory['head'] == lead['head'] == HEAD + frames,dims,helpers,typed,bounds,ranking = geometry(word,caller,early,audit,pricing) + grouping,universe = groups_for(helpers,typed) + schedule,cuts,typed_counts = reverse_cuts(word,frames,dims,helpers,grouping,universe) + assert cuts == Counter({(tuple(r['endpoints']),tuple(r['parts'])):r['cuts'] for r in inventory['counts']}) + assert typed_counts == Counter({(r['side'],tuple(r['prior']),tuple(r['new']),tuple(r['parts'])):r['cuts'] for r in inventory['typed']}) + assert sum(cuts.values()) == inventory['cuts'] + result = {'head':HEAD,'typed_signatures':len(typed),'union_groups':len(grouping), + 'rank_six_2_plus_5_outside_scope':83,'smaller_outside_scope':497,'cut_incidences':sum(cuts.values()), + 'part_price_order':[list(p) for p in ranking], + 'whole_margins':{'+'.join(map(str,p)):list(map(str,v)) for p,v in bounds.items()}, + 'literal_paid_move_omission_rejected':True,'pins':PINS} + write(out,'CUTS.json',result) + n,tape = word['public'],word['program'] + def identity(): + return [{i:Q(1)} for i in range(n)]+[{} for _ in range(word['owned_fields'])] + suffix, stored, seen = identity(),{},0 + for t in reversed(range(len(tape))): + for group,f,roles in schedule.get(t,()): + right = pure(suffix,roles,universe[group]) + seen += 1 + if right: + stored[t,group,f] = tuple(d for d,_ in right) + step(suffix,tape[t],True) + prefix,positive,checked,comparisons = identity(),Counter(),0,0 + for t,e in enumerate(tape): + step(prefix,e,False) + for group,f,roles in schedule.get(t,()): + left = pure(prefix,roles,universe[group]) + checked += 1 + if left: + positive[group] += 1 + for c,_ in left: + for d in stored.get((t,group,f),()): + comparisons += 1 + assert not sum(x*d.get(i,0) for i,x in c.items()),(t,f,group) + assert all(prefix[i] == {i:Q(1)} for u in universe.values() for i in u) + assert seen == checked == inventory['cuts'] + assert positive == Counter({(tuple(r['endpoints']),tuple(r['parts'])):r.get('prefix_nonzero',0) for r in lead['by_parts']}) + assert lead['phase']=='exhausted' + assert not lead['candidate'] and not lead['unresolved'] + result.update(status='PASS_INDEPENDENT_REVERSE_FIRST_RANK6_3_PLUS_4',positive_prefix_images=sum(positive.values()), + suffix_nonzero_cuts=len(stored),basis_pairings_tested=comparisons,positive_pairings=0) + write(out,'RESULT.json',result) + + +if __name__ == '__main__': + p = ArgumentParser(description=__doc__) + for name in ('round30','round35','round36','round37','round50','out'): + p.add_argument(name,type=Path) + p.add_argument("--inventory-sha",required=True) + p.add_argument("--support-sha",required=True) + a = p.parse_args() + a.out.mkdir() + def timeout(*_): + raise TimeoutError('independent replay watchdog') + signal(SIGALRM,timeout) + alarm(43) + run({k:getattr(a,k) for k in ('round30','round35','round36','round37','round50')},a.out,a.inventory_sha,a.support_sha) + alarm(0) diff --git a/research/p104-charged-rank-six-support-bound/engines/primary_2_5.py b/research/p104-charged-rank-six-support-bound/engines/primary_2_5.py new file mode 100644 index 0000000000..20779bf5b3 --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/engines/primary_2_5.py @@ -0,0 +1,376 @@ +"""Exact rank-six to rank-seven, 2+5 charged endpoint support gate.""" +from argparse import ArgumentParser +from collections import Counter, defaultdict +from fractions import Fraction as Q +import gzip +from hashlib import sha256 +import json +from pathlib import Path +import runpy +from signal import SIGALRM, alarm, signal +import sys +from time import monotonic + +HEAD = 'ed090b57ed88f8859e5ff4643645099e6ba856ea' +WORD = 'complex/source/inputs/WORD.json.gz' +PINS = { + 'round30/'+WORD: '2c523ce6fdd6092d758fedc3602a0bcedb692b9766f1e41f903351ba4dee1756', + 'round30/complex/audit.py': '67b006627fd4e07c349f48f31e6d541c62804416bdc85f664a3607dd1b386efb', + 'round30/complex/source/powers.py': 'c0c460b464d7c836fb887010b57119be322aae686736b86820aae3544d380bee', + 'round30/complex/source/inputs/CALLER.json': '255d89f38cd45e38e5770f559bc43dc217e989032359768cdc7e8cdfd64b47bc', + 'round30/complex/source/inputs/EARLY-RESULT.json': '691025fe95c7938a6da211244d4d5b6187d88a9de1acff0862eeb7f0ce7deaa7', + 'round37/preflight/price.py': '8b1b345bd4a2732c74251c1b95d47f98cd37184894d8979a6ef1953d38686be8', + 'round38/incremental/screen.py': '43a74344555088b016a3fb857b7c86de3f2880ef85b77846c4362037779b8405', + 'round50/lead/screen.py': '47251bd902c4fd3fda3597463cf4609bf380194558461320dc432b86f6c989d1', + 'round37/preflight/PRICE.json': 'bc6134776a077b4ae3ef595c6000563062b2a42a3684a3852ba4f2f77b8dc726', + 'round36/cochart-audit/verify.py': '58cab0bb2f24fe29d0e190cbe3cc0dc85f889ec4af66b5a02328d1e1d0e37e8a', + 'round36/incremental/predecessor_split.py': '999b9eeabe5cd1a7e3ec014d1a449f850b4ac9bfb19749cddef41ae12cd0b405', + 'round36/incremental/support.py': 'f3e6eeb879480715c5c32c1a390a63c57d26ea1c9a9cbdb89b83ca34260e47f6', +} + + +def read_json(raw): + def unique(items): + result = dict(items) + assert len(result)==len(items),'Duplicate keys' + return result + return json.loads(raw,object_pairs_hook=unique) + + +def save(out,name,receipt): + path = out/(name+'.tmp') + path.write_text(json.dumps(receipt,indent=2,sort_keys=True)+'\n') + path.replace(out/name) + + +def dot(a,b): + return sum(x*b.get(i,0) for i,x in a.items()) + + +def pure_coefficients(rows, roles, group, add): + exterior, output = {}, [] + for role in reversed(roles): + residual = rows[role].copy() + coefficients = {role:Q(1)} + while (lead:=max((k for k in residual if k not in group),default=-1))>=0: + if lead not in exterior: + exterior[lead] = residual,coefficients + break + old,co = exterior[lead] + scale = -residual[lead]/old[lead] + add(residual,old,scale) + add(coefficients,co,scale) + else: + output.append((residual,coefficients)) + return output + + +def admissible(program): + def smooth(n): + for p in (2,3,5): + while n%p==0: + n//=p + return n==1 + for op,*e in program: + q = Q(e[-2]) + if not q or not smooth(q.denominator) or op=='SCALE' and not smooth(abs(q.numerator)): + return False + return True + + +def nominate(word, side, extender, new, t, frame, pivot, ranks, a,b,c,d, check): + u,v = new + changed = dict(word,initial=word['initial'].copy(),final=word['final'].copy()) + if side=='input': + prior = changed['initial'][extender] + changed['initial'][extender] = u + changed['program'] = [['MOVE',extender,u,prior,False]]+word['program'] + else: + prior = changed['final'][extender] + changed['final'][extender] = v + changed['program'] = word['program']+[['MOVE',extender,prior,v,False]] + h = dict(cut_after=t+(side=='input'),frame=frame,pivot=pivot,ranks=ranks) + h.update({name:{str(i):str(q) for i,q in vector.items()} for name,vector in zip('abcd',(a,b,c,d),strict=True)}) + check(changed,h) + return dict(extender=extender,side=side,new=new,original_cut=t,split=h,added_move=changed['program'][0 if side=='input' else -1]) + + +def controls(predecessor): + add, images = predecessor['add'], predecessor['pure_images'] + rows = [{0:Q(1),3:Q(1)}, {3:Q(1)}, {1:Q(-2)}] + assert images(rows,[0,1],{0}) and not images(rows,[0,1],{1}) + (image,coefficients), = pure_coefficients(rows,[0,1],{0},add) + assert set(image)=={0} and abs(image[0])==1 + assert set(coefficients)=={0,1} + assert dot(image,{0:Q(2)}) and not dot(image,rows[2]) + assert admissible([['ADD',0,1,'-7/15',0],['SCALE',1,'-3/10',0]]) + assert not admissible([['ADD',0,1,'1/7',0]]) + assert not admissible([['SCALE',1,'7/10',0]]) + return ['exterior_cancellation_recovers_pure_image','outside_only_bank_excluded', + 'signed_pairing_positive_and_zero','native_basis_coefficient_controls'] + + +def authenticate(roots): + files = {} + for name,digest in PINS.items(): + prefix,p = name.split('/',1) + path = roots[prefix]/p + assert sha256(path.read_bytes()).hexdigest()==digest,name + files[name] = path + return files + + +def run(roots,out,seconds,price_only=False): + start = monotonic() + deadline = start + min(115,seconds-1) + files = authenticate(roots) + word = read_json(gzip.decompress(files['round30/'+WORD].read_bytes())) + receipt = read_json(files['round37/preflight/PRICE.json'].read_bytes()) + predecessor = runpy.run_path(str(files['round36/cochart-audit/verify.py'])) + sys.path.insert(0,str(roots['round36']/'incremental')) + from predecessor_split import basis, check_cut + space,linear,add = (predecessor[name] for name in ('binary_span','linear','add')) + pure_images = predecessor['pure_images'] + assert receipt['head']==HEAD and receipt['copies']==17 and receipt['typed_signatures']==777 + price_model = runpy.run_path(str(files['round37/preflight/price.py'])) + rebuilt = price_model['screen'](roots['round30']) + assert json.loads(json.dumps(rebuilt)) == receipt + rows = [r for r in receipt['rows'] if r['old_rank']==6 and r['parts']==[2,5]] + assert len(rows)==83 and Counter(r['side'] for r in rows)=={'input':50,'output':33} + assert all(Q(r['complete_margin_interval'][0])== + Q('81024793093613521452053125690576433136027840493/1000000000000000000000000000000000000000000000000') + for r in rows) + save(out,'PRICE.json',dict(head=HEAD,pins=PINS,crossing_upper=receipt['crossing_upper'], + baseline_interval=receipt['baseline_moment_interval'],copies=17,selected_signatures=len(rows), + paid_rank_delta={1:17},productive_rank_delta={2:17,5:17,6:-17}, + complete_margin_interval_per_alternative=rows[0]['complete_margin_interval'], + alternatives=rows,grant='One alternative at a time. Additional ordinary and physical costs free only in this upper.')) + checks = controls(predecessor) + if price_only: + return + n,tape = word['public'],word['program'] + spaces = list(map(space,word['frames'])) + dims = list(map(len,word['frames'])) + main = set(word['live']) | {i+112 for i in word['live']} + main.update(word['hosted']['X2']) + main.update(word['hosted']['Y2']) + groups = defaultdict(set) + for i,(a,b) in enumerate(zip(word['initial'],word['final'],strict=True)): + if i not in main: + groups[a,b].add(i) + options = defaultdict(dict) + typed = defaultdict(list) + for row in rows: + side = row['side'] + a,b = row['prior'] + u,v = row['new'] + g = groups[u,v] + assert set(row['new_cohort_before_extension'])==g + assert groups[a,b]==set(row['extender_roles']) and not g&groups[a,b] + assert (b==v and spaces[u]=deadline: + return save(out,'SUPPORT.json',dict(head=HEAD,phase='inventory_cap',clock=t, + candidate=None,unresolved_signatures=rows,controls=checks)) + src,q = dst,None + if op=='MOVE': + a,b,owned = args + assert chart[dst]==a and owned==(dst>=n) + assert spaces[a]=deadline: + return checkpoint('prefix_cap',t) + linear(forward,*e) + for key,f,roles in schedule.get(t,()): + pp = pure_images(forward,roles,universe[key]) + bump(key,'prefix_checked') + if pp: + snaps[t].append((key,f,roles,pp)) + bump(key,'prefix_nonzero') + else: + pending.discard((t,key,f)) + if t%4096==0: + checkpoint('prefix',t) + assert all(forward[i]=={i:Q(1)} for i in set().union(*universe.values())) + backward = identity() + for t in reversed(range(len(decoded))): + if monotonic()>=deadline: + return checkpoint('suffix_cap',t) + for key,f,roles,pp in snaps.get(t,()): + ss = pure_images(backward,roles,universe[key]) + bump(key,'suffix_checked') + if not any(dot(c,d) for c in pp for d in ss): + pending.discard((t,key,f)) + continue + bump(key,'union_nonzero') + # Recover the exact prefix only at cuts surviving the union test. + local = identity() + for e in decoded[:t+1]: + linear(local,*e) + pivot_stock = set(roles) + u,v = key[:2] + g = groups[u,v] + unresolved_before = len(unresolved) + for extender,row in options[key].items(): + if monotonic()>=deadline: + unresolved.append(dict(clock=t,frame=f,endpoints=key[:2],parts=key[2:],reason='extender_cap')) + return checkpoint('extender_cap',t) + group = g|{extender} + pivots = sorted(pivot_stock&group) + if not pivots: + continue + cc = pure_coefficients(local,roles,group,add) + dd = pure_coefficients(backward,roles,group,add) + bump(key,'exact_extender_checked') + nonzero = False + for c,a in cc: + for d,b in dd: + paired = dot(c,d) + if not paired: + continue + nonzero = True + if dot(a,b)!=paired: + continue + for scale in (Q(1),paired,Q(-1)): + aa = {i:q/scale for i,q in a.items()} + co = {i:q/scale for i,q in c.items()} + bb = {i:q*scale/paired for i,q in b.items()} + do = {i:q*scale/paired for i,q in d.items()} + for pivot in pivots: + try: + ops = basis(aa,bb,pivot,f)+basis(co,do,pivot,u) + except ValueError: + continue + if admissible(ops): + candidate = nominate(word,row['side'],extender,(u,v),t,f,pivot, + [dims[f]-dims[u],dims[v]-dims[f]],aa,bb,co,do,check_cut) + candidate['price_margin'] = row['complete_margin_interval'] + candidate['build_command'] = 'python3.12 -I -B build.py dependencies SUPPORT.json CANDIDATE.json' + return checkpoint('witness',t) + if nonzero: + unresolved.append(dict(clock=t,frame=f,endpoints=key[:2],parts=key[2:],extender=extender,reason='no_admissible_basis_pair')) + if len(unresolved)==unresolved_before: + pending.discard((t,key,f)) + linear(backward,*decoded[t],reverse=True) + if t%4096==0: + checkpoint('suffix',t) + assert bool(pending)==bool(unresolved) + checkpoint('exhausted' if not unresolved else 'unresolved_basis_pairs',0) + + +if __name__=='__main__': + assert __debug__ + p = ArgumentParser() + p.add_argument('dependencies',type=Path,nargs='?',default=Path(__file__).resolve().parent/'dependencies') + p.add_argument('out',type=Path,nargs='?') + p.add_argument('--seconds',type=int,default=120,choices=range(2,121),metavar='2..120') + p.add_argument('--controls-only',action='store_true') + p.add_argument('--price-only',action='store_true') + a = p.parse_args() + roots = {key:a.dependencies/key for key in ('round30','round36','round37','round38','round50')} + if a.controls_only: + files = authenticate(roots) + print(json.dumps(controls(runpy.run_path(str(files['round36/cochart-audit/verify.py']))))) + else: + if a.out is None: + p.error('fresh output directory required') + a.out.mkdir() + def cap(*_): + raise TimeoutError('hard runner deadline') + signal(SIGALRM,cap) + alarm(a.seconds) + try: + run(roots,a.out,a.seconds,a.price_only) + except TimeoutError: + save(a.out,'TIMEOUT.json',dict(head=HEAD,status='hard_timeout',unverified_signatures=83)) + raise SystemExit(2) + finally: + alarm(0) diff --git a/research/p104-charged-rank-six-support-bound/receipts/SHA256.json b/research/p104-charged-rank-six-support-bound/receipts/SHA256.json new file mode 100644 index 0000000000..bb3cf2d39f --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/receipts/SHA256.json @@ -0,0 +1,12 @@ +{ + "2-plus-5/CUTS.json": "208a3f52596aea0c458dbe14023d3689e8ac53d4a7f38e2c7529184e6077f88e", + "2-plus-5/INVENTORY.json": "fcbf8540005f9b8775e842d2df3f74307935d4ad528e542098ce5a9f28250d84", + "2-plus-5/PRICE.json": "8f9eaab7f0869ec201df34dddb0fcad841af64b2b017bae80dd6cd087db1648d", + "2-plus-5/RESULT.json": "2c0b4ad55abf019e4e61f142c59d5f7cddd05706c494f2dcb83ca73d8523bced", + "2-plus-5/SUPPORT.json": "37950056295bb820d21390081ba9791eacde54e8782618e1570c49d56cf182cd", + "3-plus-4/CUTS.json": "3044cbe5dccf547b6cfe63437473e7dc2e05c57456afb27da6e32a64ad9f8c42", + "3-plus-4/INVENTORY.json": "b6cb030f3d747ef00d24abfd4b9adfcd990533b9621cd0cfc4c2a47d061e6a0c", + "3-plus-4/PRICE.json": "4b035e8bcc2e7f9d08078f41a2e16ea3e6ba0d5ca688b48ebb6243948e878078", + "3-plus-4/RESULT.json": "8f513bcbd4f5479cfcfdbc81ef1c349e4670e9a69a4399a7df21572651d586dc", + "3-plus-4/SUPPORT.json": "c8c2772ebb65eb218d24d66e1763e84258ccdcb16b131d83d9ede0311337d7e1" +} diff --git a/research/p104-charged-rank-six-support-bound/receipts/SUMMARY.json b/research/p104-charged-rank-six-support-bound/receipts/SUMMARY.json new file mode 100644 index 0000000000..b7dcb473e2 --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/receipts/SUMMARY.json @@ -0,0 +1,34 @@ +{ + "2-plus-5": { + "candidate": null, + "prefix_nonzero": 0, + "price_only_complete_margin": [ + "81024793093613521452053125690576433136027840493/1000000000000000000000000000000000000000000000000", + "81024793093613521452053125690576433136027896717/1000000000000000000000000000000000000000000000000" + ], + "representative_cut_incidences": 346, + "suffix_nonzero_independent": 0, + "typed_signatures": 83, + "union_groups": 73, + "unresolved": 0 + }, + "3-plus-4": { + "candidate": null, + "prefix_nonzero": 0, + "price_only_complete_margin": [ + "1835166431152278266166310959958201126735264211/15625000000000000000000000000000000000000000000", + "3670332862304556532332621919916402253470530179/31250000000000000000000000000000000000000000000" + ], + "representative_cut_incidences": 714, + "suffix_nonzero_independent": 24, + "typed_signatures": 83, + "union_groups": 73, + "unresolved": 0 + }, + "compatible_saving_after_support": "0", + "copies": 17, + "head": "ed090b57ed88f8859e5ff4643645099e6ba856ea", + "kappa": "0.003645669928698", + "kappa_change": "0", + "unresolved": 0 +} diff --git a/research/p104-charged-rank-six-support-bound/replay.py b/research/p104-charged-rank-six-support-bound/replay.py new file mode 100644 index 0000000000..9e0c2140ad --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/replay.py @@ -0,0 +1,178 @@ +"""Reprice and replay both charged rank-six support exclusions.""" +from argparse import ArgumentParser +from collections import Counter +from fractions import Fraction as Q +import gzip +from hashlib import sha1, sha256 +import json +from pathlib import Path, PurePosixPath +import runpy +import shutil +import subprocess +import sys +from tempfile import TemporaryDirectory + +HERE = Path(__file__).resolve().parent +HEAD = "ed090b57ed88f8859e5ff4643645099e6ba856ea" + + +def unique(pairs): + result = dict(pairs) + if len(result) != len(pairs): + raise ValueError("duplicate JSON key") + return result + + +def read(path): + return json.loads(path.read_bytes(), object_pairs_hook=unique) + + +def authenticate(scratch): + pins = read(HERE / "LOCAL-PINS.json") + for key, expected in pins.items(): + rel = PurePosixPath(key) + if rel.is_absolute() or ".." in rel.parts or rel.as_posix() != key: + raise ValueError(f"invalid dependency path {key}") + if sha256((HERE / key).read_bytes()).hexdigest() != expected: + raise ValueError(f"changed dependency {key}") + deps = scratch / "dependencies" + shutil.copytree(HERE / "dependencies", deps) + unpack = read(HERE / "UNPACK.json") + assert len(unpack) == 3 + for key, entry in unpack.items(): + assert key in pins and key.endswith(".gz") and entry["destination"] == key.removesuffix(".gz") + raw = gzip.decompress((HERE / key).read_bytes()) + assert sha256(raw).hexdigest() == entry["sha256"], key + (scratch / entry["destination"]).write_bytes(raw) + provenance = read(HERE / "PROVENANCE.json")["files"] + assert len(provenance) == 5 and sum(p["uncompress"] for p in provenance.values()) == 2 + for key, pin in provenance.items(): + assert key in pins + literal = unpack[key]["destination"] if pin["uncompress"] else key + raw = (scratch / literal).read_bytes() + assert sha256(raw).hexdigest() == pin["sha256"], key + assert sha1(f"blob {len(raw)}\0".encode()+raw).hexdigest() == pin["git_blob"], key + return deps + + +def basis_control(deps): + folder = deps / "round36/incremental" + sys.path.insert(0, str(folder)) + try: + mod = runpy.run_path(str(folder / "predecessor_split.py")) + finally: + sys.path.pop(0) + a, b = {0: Q(1), 1: Q(1)}, {1: Q(1)} + program = mod["basis"](a,b,0,0) + def apply(events, values): + state = list(values) + for event in events: + if event[0] == "ADD": + _,d,s,q,_ = event + state[d] += Q(q)*state[s] + else: + assert event[0] == "SCALE" + _,d,q,_ = event + state[d] *= Q(q) + return state + assert program and apply(program, [0,1]) == [1,0] + for j in (0,1): + v = [Q(j==0),Q(j==1)] + transformed = apply(program, v) + assert transformed[0] == a[j] + assert apply(mod["inverse"](program), transformed) == v + try: + mod["basis"](a,{1:Q(-1)},0,0) + except ValueError as exc: + assert "Unit basis pairing" in str(exc) + else: + raise AssertionError("invalid paired basis accepted") + + +def run(script, *args, timeout): + subprocess.run([sys.executable,"-I","-B",str(script),*map(str,args)], check=True, timeout=timeout) + + +def check_receipts(files, pins): + for key, path in files.items(): + if sha256(path.read_bytes()).hexdigest() != pins[key]: + raise ValueError(f"replay receipt changed: {key}") + + +def crosscheck(files): + summary = read(HERE / "receipts/SUMMARY.json") + assert summary["head"] == HEAD and summary["copies"] == 17 + assert summary["unresolved"] == 0 and summary["compatible_saving_after_support"] == "0" + assert summary["kappa_change"] == "0" + signatures = {} + for label,parts,cut_count,suffix in (("3-plus-4",[3,4],714,24),("2-plus-5",[2,5],346,0)): + p,n,s,c,i = (read(files[f"{label}/{name}.json"]) + for name in ("PRICE","INVENTORY","SUPPORT","CUTS","RESULT")) + assert {r["head"] for r in (p,n,s,c,i)} == {HEAD} + assert p["copies"] == 17 and p["paid_rank_delta"] == {"1":17} + assert p["productive_rank_delta"] == {"6":-17, **{str(x):17 for x in parts}} + assert len(p["alternatives"]) == n["selected_signatures"] == i["typed_signatures"] == 83 + assert Counter(r["side"] for r in p["alternatives"]) == {"input":50,"output":33} + assert len(n["counts"]) == n["union_groups"] == i["union_groups"] == 73 + assert n["cuts"] == c["cut_incidences"] == i["cut_incidences"] == cut_count + assert s["counts"] == {"prefix_checked":cut_count} + assert s["phase"] == "exhausted" and s["pending_cut_count"] == 0 + assert not s["unresolved"] and s["candidate"] is None + assert i["positive_prefix_images"] == i["positive_pairings"] == 0 + assert i["suffix_nonzero_cuts"] == suffix and i["literal_paid_move_omission_rejected"] + margin = p["complete_margin_interval_per_alternative"] + assert Q(0) < Q(margin[0]) <= Q(margin[1]) + assert all(r["parts"] == parts and r["complete_margin_interval"] == margin for r in p["alternatives"]) + lo, hi = map(Q, i["whole_margins"]["+".join(map(str,parts))]) + assert 0 < lo <= hi and Q(margin[0]) <= hi and lo <= Q(margin[1]) + assert summary[label] == { + "typed_signatures":83, "union_groups":73, "representative_cut_incidences":cut_count, + "prefix_nonzero":0, "suffix_nonzero_independent":suffix, "price_only_complete_margin":margin, + "unresolved":0, "candidate":None, + } + signatures[label] = {(r["side"],tuple(r["prior"]),tuple(r["new"]),tuple(r["parts"])) + for r in p["alternatives"]} + assert all(len(x) == 83 for x in signatures.values()) + assert signatures["3-plus-4"].isdisjoint(signatures["2-plus-5"]) + + +def replay(output): + with TemporaryDirectory(prefix="p104-charged-rank-six-") as temp: + scratch = Path(temp) + deps = authenticate(scratch) + basis_control(deps) + pins = read(HERE / "receipts/SHA256.json") + files = {} + for label,primary,independent in ( + ("3-plus-4",deps / "round50/lead/screen.py",HERE / "engines/independent_3_4.py"), + ("2-plus-5",HERE / "engines/primary_2_5.py",HERE / "engines/independent_2_5.py"), + ): + result = scratch / label + audit = scratch / (label+"-independent") + run(primary,deps,result,"--seconds",120,timeout=122) + for name in ("PRICE","INVENTORY","SUPPORT"): + files[f"{label}/{name}.json"] = result / f"{name}.json" + check_receipts({k:v for k,v in files.items() if k.startswith(label)},pins) + run(independent,*(deps / d for d in ("round30","round35","round36","round37")), + result,audit,"--inventory-sha",pins[f"{label}/INVENTORY.json"], + "--support-sha",pins[f"{label}/SUPPORT.json"],timeout=45) + for name in ("CUTS","RESULT"): + files[f"{label}/{name}.json"] = audit / f"{name}.json" + assert files.keys() == pins.keys() + check_receipts(files,pins) + crosscheck(files) + if output is not None: + output.mkdir(parents=True,exist_ok=False) + for key, path in files.items(): + dest = output / key + dest.parent.mkdir(parents=True,exist_ok=True) + shutil.copyfile(path,dest) + print("PASS_CHARGED_RANK_SIX_SUPPORT signatures=166 cuts=1060 pure_prefix=0 suffix_3_4=24 suffix_2_5=0 unresolved=0 saving_upper=0 kappa_change=0") + + +if __name__ == "__main__": + assert __debug__, "run with assertions enabled" + assert sys.version_info[:2] == (3,12), "Python 3.12 required" + p = ArgumentParser(description=__doc__) + p.add_argument("--out",type=Path,help="fresh destination for all ten full receipts") + replay(p.parse_args().out)

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 word['public']) and ranks[src] != ranks[dst] + paid[abs(ranks[src]-ranks[dst])] += 1 + for role, (src, dst) in enumerate(zip(word['initial'], word['final'], strict=True)): + if role not in main: + assert ranks[dst] > ranks[src] + target[ranks[dst]-ranks[src]] += 1 + stages = [event[1] for event in caller['events'] if event[0] == 'J'] + assert stages == list(range(1, 18)) + copies = len(stages) + P = Counter({rank:n*copies for rank,n in paid.items()}) + T = Counter({rank:n*copies for rank,n in target.items()}) + for spec in caller['types'].values(): + for sign, offset, *bits in spec['diagonal']: + assert sign == -1 and offset == 0 and len(bits) == copies and set(bits) <= {0, 1} + T[1+8*sum(bits)] += len(spec['ports']) + for kind, op, *args in (event for event in caller['events'] if event[0] != 'J'): + n = len(caller['types'][kind]['ports']) + if op == 'QUERY': + P[1] += n + elif op in ('IDLE_ONE','IDLE_ODD'): + P[8*len(args[1])+int(op=='IDLE_ODD')] += n + assert sum(P.values()) == 110553 and sum(T.values()) == 22461 + assert sum(r*(T[r]-P[r]) for r in T.keys()|P.keys()) == 1424 + return paid, target, P, T, copies + + +def round_interval(a, b): + a, b = a*GRID, b*GRID + return F(a.numerator//a.denominator, GRID), F(-((-b.numerator)//b.denominator), GRID) + + +@cache +def log_unit(x): + y = (x-1)/(x+1) + p = sum((2*y**j/j for j in range(1, 111, 2)), F(0)) + return round_interval(p, p+2*y**111/(111*(1-y*y))) + + +@cache +def power(rank, k): + e = rank.bit_length()-1 + lo,hi = [q+e*d for q,d in zip(log_unit(F(rank, 2**e)),log_unit(F(2)),strict=True)] + + def exp_negative(x, n): + term = total = F(1) + assert 0 <= x < 1 + for i in range(1,n+1): + term *= -x/i + total += term + return total + + return round_interval(rank*exp_negative(k*hi, 39), rank*exp_negative(k*lo, 40)) + + +def moment(P, T, k): + lower = upper = F(0) + for r in P.keys()|T.keys(): + n = T[r]-P[r] + lo,hi = power(r,k) + if n < 0: + lo,hi = hi,lo + lower += n*lo + upper += n*hi + return lower,upper + + +def slope(rank): + a,b = power(rank,TARGET) + c,d = power(rank-1,TARGET) + return a-d,b-c + + +def stock(paid, target, copies, baseline, paid_ranks, target_ranks): + eligible_paid = sorted(((slope(r)[1],r) for r in paid_ranks for _ in range(paid[r])),reverse=True) + eligible_target = sorted((slope(r)[0],r) for r in target_ranks for _ in range(target[r])) + price = F(0) + use_paid, use_target = Counter(), Counter() + for (upper,p),(lower,t) in zip(eligible_paid,eligible_target): + if upper <= lower: + break + price += upper-lower + use_paid[p] += 1 + use_target[t] += 1 + saving = copies*price + return {'eligible_paid':len(eligible_paid), 'eligible_targets':len(eligible_target), + 'selected_paid':dict(use_paid),'selected_targets':dict(use_target), + 'optimistic_pairs':sum(use_paid.values()), 'signed_saving_upper':str(saving), + 'signed_target_net_upper':str(baseline+saving)} + + +def run(old, peer, seconds): + deadline = monotonic()+seconds + before, before_receipt, caller, after, after_receipt = load(old,peer) + previous, next_ = invoice(before,caller), invoice(after,caller) + assert next_[4] == previous[4] == 17 + delta = lambda a,b:{r:a[r]-b[r] for r in a.keys()|b.keys() if a[r]!=b[r]} + assert delta(next_[0],previous[0]) == {4:1,5:-1} + assert delta(next_[1],previous[1]) == {8:1,9:-1} + result = {} + for name, (p,t,P,T,n), receipt, claim in zip(('7244','7274'),(previous,next_), + (before_receipt,after_receipt),CLAIMS,strict=True): + frozen = receipt['price']['after'] + assert P == {int(r):v for r,v in frozen['P'].items()} + assert T == {int(r):v for r,v in frozen['T'].items()} + # Known-good signed prices and a missing-call mutation. + removed_call = P.copy() + removed_call[1] -= 1 + assert removed_call != {int(r):v for r,v in frozen['P'].items()} + a,b = map(F,receipt['price']['price']['independent_raw_bracket']) + low, high = moment(P,T,a), moment(P,T,b) + assert low[0]>0 and high[1]<0 and a>claim + deficit = moment(P,T,TARGET) + scopes = {label:stock(p,t,n,deficit[1],pr,tr) for label,pr,tr in ( + ('same_delta',{5},{9}),('rank9_target',set(p)-{1},{9}), + ('any_one_step',set(p)-{1},set(t)-{1}))} + result[name]={'native_paid':dict(p),'native_target':dict(t),'paid':dict(P),'target':dict(T), + 'crossing_interval':[str(a),str(b)],'crossing_sign_controls':[str(low[0]),str(high[1])], + 'claim':str(claim),'target_raw_interval':list(map(str,deficit)),'scopes':scopes} + assert F(result['7244']['crossing_interval'][1]) < F(result['7274']['crossing_interval'][0]) + assert moment(previous[2],previous[3],CLAIMS[1])[1]<0 + assert monotonic()= public) + rank = relative(start, end) + gap = len(word["frames"][end]) - len(word["frames"][start]) + assert rank == abs(gap) > 0 and (owned or gap > 0) + bill[rank] += 1 + chart[r] = end + elif op == "INIT": + assert chart[r] is None and r >= public + chart[r] = args[0] + else: + assert all(chart[v] == args[-1] for v in roles(row)) + if op == "CLEAR": + assert r >= public + chart[r] = None + assert chart == word["final"] + [None] * word["owned_fields"] + return bill + + +def whole_contact_recount(events, word, relative, focus=frozenset(), shared=frozenset()): + public = word["public"] + dims = list(map(len, word["frames"])) + prior = {r: (-1, chart) for r, chart in enumerate(word["initial"])} + paid = Counter() + exterior = [] + edges = 0 + + def contact(role, clock, chart): + nonlocal edges + a, f = prior[role] + rank = relative(f, chart) + edges += 1 + if role < public: + assert rank == dims[chart] - dims[f] + if rank: + paid[rank] += 1 + if role in shared and ((a in focus) != (clock in focus)): + exterior.append(rank) + prior[role] = clock, chart + + for clock, row in events: + if row[0] == "INIT": + assert row[1] not in prior + prior[row[1]] = clock, row[-1] + else: + for role in roles(row): + contact(role, clock, row[-1]) + if row[0] == "CLEAR": + del prior[row[1]] + assert set(prior) == set(range(public)) + for role, chart in enumerate(word["final"]): + contact(role, len(word["program"]), chart) + assert edges == 137891 + return paid, tuple(sorted(exterior)) + + +def full_bill(word, caller, native, relative): + stages = [row[1] for row in caller["events"] if row[0] == "J"] + assert stages == list(range(1, 18)) + copies = len(stages) + main = set(word["live"]) | {r + 112 for r in word["live"]} | set( + word["hosted"]["X2"] + word["hosted"]["Y2"] + ) + assert len(main) == 400 + helpful = Counter(relative(a, b) for r, (a, b) in enumerate( + zip(word["initial"], word["final"], strict=True)) if r not in main) + assert sum(helpful.values()) == 1101 and 0 not in helpful + paid, productive = (Counter({r: n * copies for r, n in h.items()}) + for h in (native, helpful)) + for ty in caller["types"].values(): + for sign, offset, *bits in ty["diagonal"]: + assert (sign, offset, len(bits)) == (-1, 0, copies) + productive[1 + 8 * sum(bits)] += len(ty["ports"]) + for row in caller["events"]: + if row[0] == "J": + continue + ty, op, _, *args = row + ports = len(caller["types"][ty]["ports"]) + if op == "QUERY": + paid[1] += ports + elif op in ("IDLE_ONE", "IDLE_ODD"): + paid[8 * len(args[0]) + (op == "IDLE_ODD")] += ports + return paid, productive, copies + + +@cache +def log_interval(x): + z = (x - 1) / (x + 1) + partial = 2 * sum(z**i / i for i in range(1, 117, 2)) + return partial, partial + 2 * z**117 / (117 * (1 - z*z)) + + +def positive_exp_interval(x): + assert 0 <= x < 1 + term = total = F(1) + for n in range(1, 39): + term *= x / n + total += term + return total, total + term*x / (39 * (1-x/40)) + + +@cache +def tariff(rank, k): + if rank == 0: + return F(0), F(0) + e = rank.bit_length() - 1 + a, b = log_interval(F(rank, 1 << e)) + c, d = log_interval(F(2)) + grid = 10**50 + lo = rank / positive_exp_interval(k * (b + e*d))[1] + hi = rank / positive_exp_interval(k * (a + e*c))[0] + return F((grid*lo).__floor__(), grid), F((grid*hi).__ceil__(), grid) + + +def price(hist, k): + lower = upper = F(0) + for r, n in hist.items(): + lo, hi = tariff(r, k) + lower += n * (lo if n >= 0 else hi) + upper += n * (hi if n >= 0 else lo) + return lower, upper + + +def run(root, declared_file): + word, caller, early = read_inputs(root) + declared_raw = declared_file.read_bytes() + lead = json.loads(declared_raw) + assert lead["head"] == HEAD + assert {f"complex/source/{p}": h for p, h in PINS.items()}.items() <= lead["pins"].items() + assert not lead["unresolved"] and not lead["positives"] + k = F(early["price"]["independent_raw_bracket"][1]) + assert k == F(lead["crossing_upper"]) + frames = spaces(word["frames"]) + ranks = [len(frame).bit_length() - 1 for frame in frames] + + @cache + def relative(a, b): + if a == b: + return 0 + intersection = len(frames[a] & frames[b]) + assert intersection > 0 and intersection & (intersection - 1) == 0 + intersection_rank = intersection.bit_length() - 1 + return ranks[a] + ranks[b] - 2 * intersection_rank + + def rank(a, b): + return relative(min(a, b), max(a, b)) + + full = word["program"] + normalized = [(i, row) for i, row in enumerate(full) if row[0] != "MOVE"] + literal = literal_move_bill(full, word, rank) + reconstructed, _ = whole_contact_recount(normalized, word, rank) + assert literal == reconstructed and sum(literal.values()) == 6280 + omission = next(i for i, row in enumerate(full) if row[0] == "MOVE") + try: + literal_move_bill(full[:omission] + full[omission+1:], word, rank) + except AssertionError: + pass + else: + raise AssertionError("omitted paid MOVE accepted") + + paid, targets, copies = full_bill(word, caller, literal, rank) + frozen = early["invoice"] + assert {str(r): n for r, n in paid.items()} == frozen["P"] + assert {str(r): n for r, n in targets.items()} == frozen["T"] + assert sum(r * (targets[r] - paid[r]) for r in paid.keys() | targets.keys()) == frozen["S"] == 1424 + assert copies == lead["copies"] == 17 + baseline = targets.copy() + baseline.subtract(paid) + base_l, base_u = price(baseline, k) + assert F(lead["baseline_moment_interval"][0]) <= base_l <= base_u <= F(lead["baseline_moment_interval"][1]) < 0 + + rows = {tuple(event): row for row in lead["rows"] for event in row["events"]} + assert len(rows) == sum(len(r["events"]) for r in lead["rows"]) == 6 + census = Counter() + verified = [] + signatures = set() + for slot, ((ta, a), (tb, b)) in enumerate(pairwise(normalized)): + if a[0] != "ADD" or b[0] != "ADD": + continue + census["adjacent_add_add"] += 1 + if a[-1] == b[-1]: + continue + census["different_chart"] += 1 + shared = roles(a) & roles(b) + if not any(r >= word["public"] for r in shared): + continue + census["shared_owned"] += 1 + matrix_equal = commute(a, b) + if min(shared) < word["public"] or not matrix_equal: + census["excluded_commutation_or_public"] += 1 + continue + focus = {ta, tb} + prior, ext_old = whole_contact_recount(normalized, word, rank, focus, shared) + changed = normalized.copy() + changed[slot], changed[slot+1] = changed[slot+1], changed[slot] + successor, ext_new = whole_contact_recount(changed, word, rank, focus, shared) + assert prior == literal + delta = prior.copy() + delta.subtract(successor) + exterior_delta = Counter(ext_old) + exterior_delta.subtract(ext_new) + assert all(delta[r] == exterior_delta[r] for r in delta.keys() | exterior_delta.keys() if r) + quote = rows.pop((ta, tb)) + assert tuple(quote["old_exterior_ranks"]) == ext_old and tuple(quote["new_exterior_ranks"]) == ext_new + signatures.add((ext_old, ext_new)) + saving = {r: copies*n for r, n in delta.items() if n} + dl, du = price(saving, k) + assert F(quote["delta_price"][0]) <= dl <= du <= F(quote["delta_price"][1]) + next_paid, next_targets, _ = full_bill(word, caller, successor, rank) + assert next_targets == targets + next_signed = next_targets.copy() + next_signed.subtract(next_paid) + _, margin = price(next_signed, k) + assert margin <= F(quote["complete_margin_upper"]) < 0 + verified.append({"events":[ta,tb],"shared_roles":sorted(shared), + "old_exterior_ranks":ext_old,"new_exterior_ranks":ext_new, + "per_copy_old_minus_new":{r:n for r,n in delta.items() if n}, + "independent_complete_margin_upper":str(margin)}) + assert not rows and census == lead["counts"] and len(signatures) == lead["signature_count"] == 3 + assert len(verified) == 6 + return {"status":"PASS_INDEPENDENT_ROUND35_ADD_EXCHANGE", + "head":HEAD,"source_sha256":PINS,"lead_receipt_sha256":sha256(declared_raw).hexdigest(), + "crossing_upper":str(k),"counts":dict(census),"signature_count":len(signatures), + "original_native_paid":sum(literal.values()),"complete_paid":sum(paid.values()), + "complete_productive":sum(targets.values()),"original_margin_interval":[str(base_l),str(base_u)], + "verified":verified,"unresolved":0,"physical_site_tests":0, + "controls":["REJECT_OMITTED_LITERAL_PAID_MOVE"]} + + +if __name__ == "__main__": + assert __debug__ + parser = ArgumentParser(description=__doc__) + parser.add_argument("source_root", type=Path) + parser.add_argument("lead_receipt", type=Path) + args = parser.parse_args() + alarm(90) + print(json.dumps(run(args.source_root, args.lead_receipt),indent=2,sort_keys=True)) + alarm(0) diff --git a/research/p104-charged-rank-six-support-bound/dependencies/round36/cochart-audit/verify.py b/research/p104-charged-rank-six-support-bound/dependencies/round36/cochart-audit/verify.py new file mode 100644 index 0000000000..3ff0f20f7a --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/dependencies/round36/cochart-audit/verify.py @@ -0,0 +1,300 @@ +"""Independent rational audit of the 128 cocharted #7277 nominations.""" +from argparse import ArgumentParser +from collections import Counter, defaultdict +from fractions import Fraction as Q +from functools import cache +import gzip +from hashlib import sha256 +from itertools import groupby +import json +from pathlib import Path + +PINS = { + 'complex/source/inputs/WORD.json.gz': '2c523ce6fdd6092d758fedc3602a0bcedb692b9766f1e41f903351ba4dee1756', + 'complex/source/inputs/CALLER.json': '255d89f38cd45e38e5770f559bc43dc217e989032359768cdc7e8cdfd64b47bc', + 'complex/source/inputs/EARLY-RESULT.json': '691025fe95c7938a6da211244d4d5b6187d88a9de1acff0862eeb7f0ce7deaa7', +} + + +def load(path): + def unique(items): + result = dict(items) + assert len(result) == len(items) + return result + raw = path.read_bytes() + if path.suffix == '.gz': + raw = gzip.decompress(raw) + return json.loads(raw, object_pairs_hook=unique) + + +def put(row, k, x): + x += row.get(k,0) + if x: + row[k] = x + else: + row.pop(k,None) + + +def add(dst, src, a): + for k,x in src.items(): + put(dst,k,a*x) + + +def linear(rows, op, d, s, q, reverse=False): + if op in ('INIT','CLEAR'): + rows[d] = {} + elif op == 'SCALE': + rows[d] = {k:q*x for k,x in rows[d].items()} + elif op in ('ADD','COPY'): + if reverse: + add(rows[s], dict(rows[d]) if s==d else rows[d], q) + if op=='COPY': + assert s != d + rows[d] = {} + elif op == 'COPY': + rows[d] = {k:q*x for k,x in rows[s].items()} + else: + add(rows[d], dict(rows[s]) if s==d else rows[s], q) + + +def pure_images(rows, current, group): + # Coefficient-elimination order is independent of the lead checker. + # Carry the complete image vector and eliminate greatest exterior + # coordinate first, leaving an image basis spanning the pure image. + exterior, interior = {}, {} + for role in sorted(current, reverse=True): + residual = rows[role].copy() + while (lead := max((k for k in residual if k not in group), default=-1)) >= 0: + if lead not in exterior: + exterior[lead] = residual + break + old = exterior[lead] + add(residual, old, -residual[lead]/old[lead]) + else: + while residual: + lead = max(residual) + if lead not in interior: + interior[lead] = residual + break + old = interior[lead] + add(residual, old, -residual[lead]/old[lead]) + return tuple(interior.values()) + + +def binary_span(rows): + space = {0} + for row in rows: + assert row not in space + space |= {row^x for x in space} + return space + + +def geometry(word): + public = word['public'] + main = set(word['live']) | {r+112 for r in word['live']} + for hosted in ('X2','Y2'): + main.update(word['hosted'][hosted]) + assert len(main)==400 and public==1501 + starts, ends = word['initial'], word['final'] + spaces = list(map(binary_span,word['frames'])) + ranks = list(map(len,word['frames'])) + groups = defaultdict(set) + helpers = {} + for role,(a,b) in enumerate(zip(starts,ends,strict=True)): + if role not in main: + assert spaces[a] < spaces[b] + groups[a,b].add(role) + helpers[role] = (a,b) + chart = starts + [None]*word['owned_fields'] + at = defaultdict(set) + for role,frame in enumerate(starts): + at[frame].add(role) + tape, cuts, contexts = [], defaultdict(list), {} + paid = Counter() + for t,(op,d,*args) in enumerate(word['program']): + s,q = d,None + if op == 'MOVE': + a,b,owned = args + assert chart[d]==a and owned==(d>=public) + assert spaces[a]b[1] for a,b in zip(by_price,by_price[1:])) + assert all(lo+gain[0]>0 for _,_,gain in ranked[:128]) + return [key for key,_,_ in ranked[:128]],sum(p.values()),sum(t.values()) + + +def test_cut(): + assert pure_images([{0:Q(1),2:Q(1)},{1:Q(1),2:Q(1)}],(0,1),{0,1}) == ({0:Q(1),1:Q(-1)},) + assert pure_images([{2:Q(1)},{2:Q(1)}],(0,1),{0,1}) == () + assert pure_images([{0:Q(1)},{1:Q(1)}],(0,1),{0,1}) + + +def run(root, receipts): + paths = {str(root/p):h for p,h in PINS.items()} + assert all(sha256(Path(p).read_bytes()).hexdigest()==h for p,h in paths.items()) + word,caller,early = (load(root/p) for p in PINS) + inventory,search = (load(receipts/name) for name in ('INVENTORY.json','SEARCH.json')) + assert search['candidate'] is None and search['phase']=='exhausted_nominations' + ranks,helpers,groups,tape,cuts,contexts,native = geometry(word) + keys,paid,productive = price(ranks,helpers,native,caller,early,cuts,inventory) + selected = {tuple(row['key']):row for row in search['selected']} + assert list(selected)==keys + test_cut() + schedule = defaultdict(list) + counts = defaultdict(Counter) + for key in keys: + for t in cuts[key]: + schedule[t].append(key) + n = word['public'] + def basis(): + return [{i:Q(1)} for i in range(n)]+[{} for _ in range(word['owned_fields'])] + forward = basis() + surviving = defaultdict(list) + for t,(op,d,s,q) in enumerate(tape): + linear(forward,op,d,s,q) + for a,b,f in schedule.get(t,()): + k = (a,b,f) + image = pure_images(forward,contexts[t,f],groups[a,b]) + counts[k]['prefix_checked'] += 1 + if image: + counts[k]['prefix_nonzero'] += 1 + surviving[t].append((k,image)) + assert all(forward[r]=={r:Q(1)} for r in helpers) + backward = basis() + for t in reversed(range(len(tape))): + for (a,b,f),prefix in surviving.get(t,()): + k = (a,b,f) + suffix = pure_images(backward,contexts[t,f],groups[a,b]) + counts[k]['suffix_checked'] += 1 + for c in prefix: + for d in suffix: + assert not sum(v*d.get(i,0) for i,v in c.items()), (t,k,c,d) + linear(backward,*tape[t],reverse=True) + for key,count in counts.items(): + assert all(value==selected[key].get(name,0) for name,value in count.items()) + assert selected[key]['cuts']==count['prefix_checked'] + assert len(counts)==128 and len(cuts)-128==search['outside_signature_cap'] + totals = sum(counts.values(),Counter()) + return {'status':'PASS_INDEPENDENT_RATIONAL_COCHART_AUDIT', + 'head':inventory['head'],'pins':PINS | {f'incremental/run/{name}':sha256((receipts/name).read_bytes()).hexdigest() for name in ('INVENTORY.json','SEARCH.json')}, + 'paid':paid,'productive':productive,'scope':len(cuts),'selected':len(counts), + 'outside_cap':len(cuts)-len(counts),'totals':dict(totals),'nonzero_pairs':0, + 'controls':['MIXED_OUTSIDE_CANCELLATION','ZERO_IMAGE_NOT_CREDITED','PURE_BASIS_POSITIVE']} + + +if __name__=='__main__': + assert __debug__ + parser = ArgumentParser() + parser.add_argument('dependency_root',type=Path) + parser.add_argument('receipt_directory',type=Path) + a = parser.parse_args() + print(json.dumps(run(a.dependency_root,a.receipt_directory),sort_keys=True,indent=2)) diff --git a/research/p104-charged-rank-six-support-bound/dependencies/round36/incremental/predecessor_split.py b/research/p104-charged-rank-six-support-bound/dependencies/round36/incremental/predecessor_split.py new file mode 100644 index 0000000000..f1c7609653 --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/dependencies/round36/incremental/predecessor_split.py @@ -0,0 +1,155 @@ +"""Split independent helper jobs with three scalar basis changes. + +Ali Romman with substantial OpenAI Codex assistance. Apache-2.0. +Adapted for arbitrary counted owned-field inventory by @CubeJerry with OpenAI assistance. +Successor: OpenAI Codex for dillona excludes both hosted main planes from helper groups. +The source word and caller retain the credits in README.md. +Successors: dillona/OpenAI Codex choose a small smooth swap entry when pivot is zero; +then also when a nonzero pivot has a nonunit reciprocal, preserving the native alphabet. +""" +from copy import deepcopy +from fractions import Fraction as Q +from support import L + + +def inverse(program): + return [[e[0], *e[1:-2], + str(1/Q(e[-2]) if e[0] == 'SCALE' else -Q(e[-2])), e[-1]] + for e in reversed(program)] + + +def basis(a, b, pivot, frame): + """Return B with row pivot equal to a and B b equal to e_pivot.""" + L.need(sum(v*b.get(k, 0) for k, v in a.items()) == 1, 'Unit basis pairing') + roles = sorted(set(a) | set(b) | {pivot}) + values, program = dict(b), [] + + def emit(event): + program.append(event) + r, q = event[1], Q(event[-2]) + if event[0] == 'SCALE': + values[r] = values.get(r, 0)*q + else: + values[r] = values.get(r, 0)+q*values.get(event[2], 0) + + def swap_score(r): + q=b[r] + def smooth(x): + for prime in (2,3,5): + while x%prime==0:x//=prime + return x==1 + return (not(smooth(abs(q.numerator)) and smooth(q.denominator)), + abs(q.numerator).bit_length()+q.denominator.bit_length(),r) + j = pivot if b.get(pivot) and not swap_score(pivot)[0] else min((r for r in roles if b.get(r)),key=swap_score) + if j != pivot: + for event in [['ADD', pivot, j, '1', frame], + ['ADD', j, pivot, '-1', frame], + ['ADD', pivot, j, '1', frame], + ['SCALE', j, '-1', frame]]: + emit(event) + if values[pivot] != 1: + emit(['SCALE', pivot, str(1/values[pivot]), frame]) + for r in roles: + if r != pivot and values.get(r): + emit(['ADD', r, pivot, str(-values[r]), frame]) + L.need(all(values.get(r, 0) == int(r == pivot) for r in roles), 'Basis column') + inverse_rows = {r: {r: Q(1)} for r in roles} + for e in inverse(program): + if e[0] == 'SCALE': + inverse_rows[e[1]] = {k: Q(e[-2])*v for k, v in inverse_rows[e[1]].items()} + else: + L.add(inverse_rows[e[1]], inverse_rows[e[2]], Q(e[-2])) + row = {} + for r, q in a.items(): + L.add(row, inverse_rows[r], q) + L.need(row[pivot] == 1, 'Basis row coefficient') + for r in roles: + if r != pivot and row.get(r): + program.append(['ADD', pivot, r, str(row[r]), frame]) + return program + + +def check_cut(word, h): + """Check the whole prefix row and suffix column over the rationals.""" + n, cut, f, p = word['public'], h['cut_after'], h['frame'], h['pivot'] + a, b, c, d = ({int(k): Q(v) for k, v in h[s].items()} for s in ('a', 'b', 'c', 'd')) + main = set(word['live']) | {r+112 for r in word['live']} | set(word['hosted']['X2']) | set(word['hosted']['Y2']) + L.need(p < n and p not in main, 'A helper supplies the retained output role') + u, v = word['initial'][p], word['final'][p] + group = {r for r in range(n) if r not in main and + (word['initial'][r], word['final'][r]) == (u, v)} + L.need(set(c) | set(d) <= group, 'Both boundary vectors use one helper group') + L.need(L.span(word['frames'][u]) < L.span(word['frames'][f]) < L.span(word['frames'][v]), + 'Two strictly productive nested targets') + L.need(h['ranks'] == [len(word['frames'][f])-len(word['frames'][u]), + len(word['frames'][v])-len(word['frames'][f])], 'Declared split ranks') + rows = [{r: Q(1)} if r < n else {} for r in range(n+word['owned_fields'])] + current = word['initial']+[None]*word['owned_fields'] + for e in word['program'][:cut+1]: + op, r = e[:2] + if op == 'MOVE': + current[r] = e[3] + elif op in ('INIT', 'CLEAR'): + rows[r] = {} + current[r] = e[2] if op == 'INIT' else None + elif op == 'SCALE': + rows[r] = {k: Q(e[-2])*x for k, x in rows[r].items()} + elif op == 'COPY': + rows[r] = {k: Q(e[-2])*x for k, x in rows[e[2]].items()} + else: + L.add(rows[r], rows[e[2]], Q(e[-2])) + L.need(all(current[r] == f for r in set(a) | set(b) | {p}), 'One intermediate chart') + total = {} + for r, q in a.items(): + L.add(total, rows[r], q) + L.need(total == c, 'Exact prefix functional; no other input') + column = [b.get(r, Q(0)) for r in range(n+word['owned_fields'])] + for e in word['program'][cut+1:]: + op, r = e[:2] + if op in ('INIT', 'CLEAR'): + column[r] = Q(0) + elif op == 'SCALE': + column[r] *= Q(e[-2]) + elif op == 'COPY': + column[r] = Q(e[-2])*column[e[2]] + elif op == 'ADD': + column[r] += Q(e[-2])*column[e[2]] + L.need(column == [d.get(r, Q(0)) for r in range(n+word['owned_fields'])], 'Exact suffix direction; no other output') + L.need(sum(x*b.get(r, 0) for r, x in a.items()) == + sum(x*d.get(r, 0) for r, x in c.items()) == 1, 'Both independent pairings') + return a, b, c, d + + +def split(word, h): + a, b, c, d = check_cut(word, h) + n, p, f, cut = word['public'], h['pivot'], h['frame'], h['cut_after'] + u, v = word['initial'][p], word['final'][p] + + def shift_owned(event): + e = event.copy() + e[1] += int(e[1] >= n) + if e[0] in ('ADD', 'COPY'): + e[2] += int(e[2] >= n) + return e + + def use_successor(event): + e = event.copy() + if e[1] == p: + e[1] = n + if e[0] in ('ADD', 'COPY') and e[2] == p: + e[2] = n + return e + + boundary, middle = basis(c, d, p, u), basis(a, b, p, f) + out = deepcopy(word) + out['public'] = n+1 + out['initial'].append(f) + out['final'].append(v) + out['final'][p] = f + out['program'] = inverse(boundary) + out['program'] += [shift_owned(e) for e in word['program'][:cut+1]] + out['program'] += [shift_owned(e) for e in middle] + out['program'] += [use_successor(shift_owned(e)) for e in inverse(middle)] + out['program'] += [use_successor(shift_owned(e)) for e in word['program'][cut+1:]] + out['program'] += [use_successor([*e[:-1], v]) for e in boundary] + return out diff --git a/research/p104-charged-rank-six-support-bound/dependencies/round36/incremental/support.py b/research/p104-charged-rank-six-support-bound/dependencies/round36/incremental/support.py new file mode 100644 index 0000000000..192cd38d27 --- /dev/null +++ b/research/p104-charged-rank-six-support-bound/dependencies/round36/incremental/support.py @@ -0,0 +1,18 @@ +"""Small exact sparse operations, retained from Ali Romman/CubeJerry. Apache-2.0.""" +class L: + @staticmethod + def need(ok, why): + if not ok: raise ValueError(why) + @staticmethod + def add(dst, src, q): + for k,v in tuple(src.items()): + value=dst.get(k,0)+q*v + if value: dst[k]=value + else: dst.pop(k,None) + @staticmethod + def span(basis): + out={0} + for v in basis: + L.need(type(v) is int and 0 1: + hits.extend(candidates(word, roles, entry, exit_frame)) + tested += 1 + print(json.dumps(encode({'tested_boundary_groups':tested, 'candidates':hits}), sort_keys=True)) + + +if __name__ == '__main__': + main() diff --git a/research/p104-charged-rank-six-support-bound/dependencies/round37/preflight/PRICE.json.gz b/research/p104-charged-rank-six-support-bound/dependencies/round37/preflight/PRICE.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..59922aea1faf72be95efe877c7f2511298e8e6a7 GIT binary patch literal 14612 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