From 61297e09be0725e6de603e0ec39b113ec6edb1cd Mon Sep 17 00:00:00 2001 From: Nick Petalas Date: Wed, 28 Oct 2026 16:15:40 +0000 Subject: [PATCH 1/2] chore(research): retain the root relay descent source word --- .../owned770-descent-pruning/PREDECESSOR.json | 12 ++++++++++++ .../inputs/pr6144-WORD.json.gz | Bin 0 -> 119901 bytes 2 files changed, 12 insertions(+) create mode 100644 research/owned770-descent-pruning/PREDECESSOR.json create mode 100644 research/owned770-descent-pruning/inputs/pr6144-WORD.json.gz diff --git a/research/owned770-descent-pruning/PREDECESSOR.json b/research/owned770-descent-pruning/PREDECESSOR.json new file mode 100644 index 0000000000..25261ef2ba --- /dev/null +++ b/research/owned770-descent-pruning/PREDECESSOR.json @@ -0,0 +1,12 @@ +{ + "author": "DreamingOfClouds", + "credit": "The retained word is DreamingOfClouds' contribution, extending the PR6030/PR5907 words and Ali Romman's PR5827, Mason Hale's PR5811, and the credited P104 lineage. This export preserves the original bytes. Apache-2.0.", + "git_blob": "69b70ee50c697b185ebf585fbe69f2487af32d1d", + "head": "4f3b67e7c37ae270da9584033132866d0cf63e42", + "path": "research/p104-root-relay-descent-2/WORD.json.gz", + "pull_request": "https://github.com/CrocSwap/integer-mult-bounds/pull/6144", + "readme": "https://github.com/DreamingOfClouds/integer-mult-bounds/blob/4f3b67e7c37ae270da9584033132866d0cf63e42/research/p104-root-relay-descent-2/README.md", + "repository": "DreamingOfClouds/integer-mult-bounds", + "sha256": "c71985d96bf3d4a35aae111aaba87e376f7367efb4a5686278ef293732757533", + "size": 119901 +} diff --git a/research/owned770-descent-pruning/inputs/pr6144-WORD.json.gz b/research/owned770-descent-pruning/inputs/pr6144-WORD.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..69b70ee50c697b185ebf585fbe69f2487af32d1d GIT binary patch literal 119901 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 literal 0 HcmV?d00001 From 8fbda6f437e5baaf0ded324ec25e6be7e6cb7cc0 Mon Sep 17 00:00:00 2001 From: Nick Petalas Date: Wed, 28 Oct 2026 16:22:06 +0000 Subject: [PATCH 2/2] feat(research): coalesce a P104 owned copy and save twelve units --- research/owned770-descent-pruning/PROOF.md | 114 +++++++++++++ research/owned770-descent-pruning/README.md | 102 ++++++++++++ research/owned770-descent-pruning/RESULT.json | 110 +++++++++++++ .../owned770-descent-pruning/SOURCES.json | 38 +++++ research/owned770-descent-pruning/TASK.json | 129 +++++++++++++++ research/owned770-descent-pruning/VERIFY.json | 38 +++++ .../owned770-descent-pruning/construct.py | 61 +++++++ research/owned770-descent-pruning/verify.py | 154 ++++++++++++++++++ 8 files changed, 746 insertions(+) create mode 100644 research/owned770-descent-pruning/PROOF.md create mode 100644 research/owned770-descent-pruning/README.md create mode 100644 research/owned770-descent-pruning/RESULT.json create mode 100644 research/owned770-descent-pruning/SOURCES.json create mode 100644 research/owned770-descent-pruning/TASK.json create mode 100644 research/owned770-descent-pruning/VERIFY.json create mode 100644 research/owned770-descent-pruning/construct.py create mode 100644 research/owned770-descent-pruning/verify.py diff --git a/research/owned770-descent-pruning/PROOF.md b/research/owned770-descent-pruning/PROOF.md new file mode 100644 index 0000000000..778ee0e810 --- /dev/null +++ b/research/owned770-descent-pruning/PROOF.md @@ -0,0 +1,114 @@ +# Coalescing the last-read owned copy + +This contribution was produced by Nick Petalas. Apache-2.0. + +## Claim and source + +The claim is a finite exact circuit certificate and a scoped substitution +proof. It does not assert a new exponent saving, a smaller peak-space bound, +or a complete multiplication theorem. + +The input is DreamingOfClouds' PR6144 word at +`4f3b67e7c37ae270da9584033132866d0cf63e42`. `PREDECESSOR.json` records the +original path, Git blob, SHA256 and credit. The byte-identical exported word +is retained in this branch's history. Ali Romman's PR5827 `local.py` is already +on canonical main and is used unchanged. The source word's conditional +supplier and framework claims are cited, not independently audited here. + +All event indices below are zero-based indices in the retained input. + +## General substitution + +Suppose an owned field S contains x, and an initialized owned field D receives +COPY D,S followed by SCALE D,q. Suppose that after this COPY the old S has no +use except a later CLEAR. Replace the COPY and D's initialization by SCALE S,q; +execute D's continuation on S; clear S where D was cleared; delete the old +S CLEAR. Require that S is available before the continuation starts, and that +the continuation does not read the old S separately. + +Immediately after the scaling, the substituted S and old D have equal values +and frames. Every subsequent continuation operation has the same coefficient, +frame and value operands after renaming. Induction over the continuation proves +equality of every other field and the substituted D value. The unread old S +does not influence another field. Both constructions return all owned fields +to the erased state. This is an exact linear argument over any coefficient +field containing q. Its use here is over the dyadic rationals. + +The substituted lifetime starts at the old S initialization and ends at the +old D erasure. While the two lifetimes previously overlapped, the new one +occupies one field. Elsewhere it occupies at most their former union. Thus +this substitution cannot increase live owned occupancy. This statement alone +does not imply that the global peak falls strictly. + +## Literal application + +Old S is role 791, initialized at event 13473 in frame 549 and assigned the +value x of role 173 by event 13474. Its only subsequent reads are + +```text +13475 ADD 121,791,1/2,549 +13659 COPY 770,791,1,549 +``` + +Its only remaining use is CLEAR at event 15591 in frame 549. There are no +hidden reads or writes. `construct.py` checks this complete use list. + +Old D is role 770. The adjacent events at 13658 through 13661 initialize it, +copy x, scale by 1/2 and start its descent from frame 549 to 553. Its +continuation ends with CLEAR in frame 593 at event 15424. It has exactly one +initialization and no use outside that lifetime. The continuation never reads +old 791. Therefore the substitution lemma applies with q = 1/2. The new +scaling occurs just before the old descent, after the retained read at 13475. + +The constructor removes old role 770 from the owned inventory. For every +remaining old role r, the new label is r when r < 770 and r-1 when r > 770. +Uses of old 770 first become old 791, then become new role 790. Only opcode +role positions are renamed; frame IDs and coefficients are unchanged. + +All public initial and final frames, ports, productive outputs and arbitrary +public input coordinates are identical. Initial arbitrary owned contents +cannot affect the result because every reached owned lifetime initializes +before use. The new source-owned lifetime is initialized once and cleared at +the continuation's old endpoint. Both exact row replay and reverse-column +replay check the resulting word in full. + +## Exact account + +The removed INIT costs 2 scalar units, COPY with coefficient 1 costs 8, and +CLEAR costs 2. The same single SCALE by 1/2 remains and costs 2 in either +program. Net savings are 12 scalar units and three events. The original +source-owned CLEAR disappears, and the continuation CLEAR now clears the +substituted field. + +Literal enumeration gives + +```text +events 22818 -> 22815 +local scalar units 189658 -> 189646 +declared owned fields 29 -> 28 +owned lifetimes 31 -> 30 +peak live owned fields 13 -> 13 +``` + +Every MOVE keeps its entry frame, exit frame and ownership flag. Its complete +native operator is therefore the same prescribed operator after role +renaming, including its scalar phase. No new native frame pair is introduced. +Every public endpoint is retained, so every productive rank is retained. +The complete local paid histogram is unchanged and equals +`{1:2215, 2:457, 3:496, 4:99, 5:164, 6:8, 7:9, 8:1}`. +Consequently this edit supplies no new signed-moment or kappa gain. + +## Verification boundary + +The finite checker verifies all 798 columns and 636804 matrix coefficients +of the edited word using the retained sparse forward and dense reverse +implementations. Nine mutation controls cover missing initialization, scaling, +clear, descent and read; wrong scaling sign; hidden source use; a changed COPY; +and incorrect source inventory. Normal and optimized runs retain the checks. + +The semantic native operator list is unchanged; no native operator replay, +complete caller, compiler, outer ledger, rounded error analysis, Lean or Docker +run is part of this result. In particular the retained caller's reserve is +not changed to 28 by this package. All five framework assumptions remain. +The rounded numerical equivalence of copying and subsequently scaling an +existing field is a separate implementation obligation. diff --git a/research/owned770-descent-pruning/README.md b/research/owned770-descent-pruning/README.md new file mode 100644 index 0000000000..37e5bd4ca2 --- /dev/null +++ b/research/owned770-descent-pruning/README.md @@ -0,0 +1,102 @@ +# Coalesce an owned P104 copy and save twelve scalar units + +This contribution was produced by Nick Petalas. Apache-2.0. + +A new exact word coalesces owned register 770 with its source register 791 in +DreamingOfClouds' [PR6144](https://github.com/CrocSwap/integer-mult-bounds/pull/6144) +word. After its last frame-549 read, 791 performs 770's continuation itself. +The duplicate INIT, COPY and CLEAR disappear. The public boundary and every +paid and productive rank remain unchanged. + +```text +Local scalar units 189658 -> 189646 +Events 22818 -> 22815 +Owned fields 29 -> 28 +Owned lifetimes 31 -> 30 +Peak live owned fields 13 -> 13 +``` + +This is a **finite exact circuit certificate and scoped substitution proof**. +There is no new kappa, strict peak-space reduction, supplier admission or +complete multiplication theorem. [PROOF.md](PROOF.md) gives the all-input +substitution argument, exact event anchors, prices and remaining obligations. + +The initial target was an interior descent-stage deletion, taking the +read-rerouting question of JosieElliston's +[PR6136](https://github.com/CrocSwap/integer-mult-bounds/pull/6136). +No paid-profile stage deletion was obtained. The first smaller improvement +was shipped instead. Frames 553 and 1047 remain in the substituted trajectory. +This changes owned lifetime identity, rather than repeating PR6136's chart-only +search or the earlier fixed-word scalar resynthesis. The complete cost profile +and boundary are retained, so no dependent construction expansion is proposed. + +## Reproduction + +From the repository root, with CPython 3.12 and no third-party packages: + +```sh +/Users/nick/git/integer-mult-bounds/.venv/bin/python3.12 -W error -I -B research/owned770-descent-pruning/verify.py +/Users/nick/git/integer-mult-bounds/.venv/bin/python3.12 -W error -I -O -B research/owned770-descent-pruning/verify.py +/Users/nick/git/integer-mult-bounds/.venv/bin/python3.12 -B scripts/research_package.py --package research/owned770-descent-pruning +/Users/nick/git/integer-mult-bounds/.venv/bin/python3.12 -B scripts/check_research_commit.py --package research/owned770-descent-pruning --check-source-history +``` + +A clean `python3.12` may replace that local interpreter path. Direct output is +`PASS_OWNED_LIFETIME_COALESCENCE columns=798 coefficients=636804 controls=9 scalar_saved=12`. +The registered replay runs both ordinary and optimized checks. + +`construct.py` emits the complete word from the unchanged retained input. +The verifier checks all arbitrary-input endpoint and ownership conditions with +Ali Romman's unchanged main-branch checker, including a separate dense reverse +check. It enumerates every literal scalar price and paid rank, compares native +frame-boundary multisets, and rejects nine faults. `RESULT.json` is generated +by this verifier and binds all package files by SHA256. To regenerate a receipt +outside the checkout, pass `--receipt-out /absolute/scratch/RESULT.json`. + +The retained input is byte-identical to the PR6144 word at +`4f3b67e7c37ae270da9584033132866d0cf63e42`. +[PREDECESSOR.json](PREDECESSOR.json) records its original path, blob, size and +hash. It is retained in publication ancestry, so replay does not fetch an +unmerged commit or depend on a shared local object cache. The predecessor's +supplier result is cited; its verifier stack is not rerun as this contribution. + +## Limitations + +The edited word has 798 logical input columns because one owned coordinate is +removed; all 770 public inputs and their exact endpoints are retained. The +existing physical caller's conservative owned reserve is not reduced. Peak +occupancy remains thirteen. There are no new frame pairs, and the formal +native operators are unchanged after renaming, but their actual implementation +is not rerun. Caller/compiler/outer, rounded numerical analysis, the selected +cold replay, Lean and Docker are unrun. The five framework assumptions remain. +Independent human and formal proof-kernel review are unclaimed. + +This verifier uses bounded finite programs and managed Python allocation. +The input has 22818 events and 799 original role coordinates. Its largest dense +matrix has 798 by 798 entries. The one authenticated checker import is the only +dynamic import. These are explicit Python allocation and import deviations +from the Power of Ten rules. The existing frozen checker is unchanged. + +## Open next questions + +- Can a read-rerouting construction actually omit frame 553 or 1047 from this + trajectory? Start with the exact readers 169 and 206, preserve their other + meetings and price the complete changed route. Their current routes do not + permit a direct move to the neighboring owned frame. +- Can the actual caller use the reduced declared inventory? First bind its + alias allocation and lifetime schedule to the 28-field word. The unchanged + global peak and caller reserve prevent claiming physical memory savings here. +- Does a specified rounded implementation admit the same lifetime substitution + with a no-larger error budget? Bind actual COPY/SCALE and erasure semantics; + exact rational equality alone does not settle that numerical question. + +## Credit + +DreamingOfClouds supplies PR6144 and its owned-relay descent, extending that +author's PR6143, PR6030 and PR5907 words. Ali Romman supplies PR5827 and the +unchanged exact checker, building on Mason Hale's PR5811 and the P104 lineage +back through Pierre-Loic Doulcet's PR5565. JosieElliston supplies PR6136's +read-rerouting question. The native, helper, controller and framework +predecessors retain their original credit and notices. Last-read register +coalescence is a standard compiler technique. The contribution here is this +literal legal P104 substitution and its exact complete-word certificate. diff --git a/research/owned770-descent-pruning/RESULT.json b/research/owned770-descent-pruning/RESULT.json new file mode 100644 index 0000000000..849968c014 --- /dev/null +++ b/research/owned770-descent-pruning/RESULT.json @@ -0,0 +1,110 @@ +{ + "after": { + "events": { + "ADD": 18423, + "CLEAR": 30, + "COPY": 22, + "INIT": 30, + "MOVE": 3449, + "SCALE": 861 + }, + "paid": { + "1": 2215, + "2": 457, + "3": 496, + "4": 99, + "5": 164, + "6": 8, + "7": 9, + "8": 1 + }, + "scalar_units": 189646 + }, + "before": { + "events": { + "ADD": 18423, + "CLEAR": 31, + "COPY": 23, + "INIT": 31, + "MOVE": 3449, + "SCALE": 861 + }, + "paid": { + "1": 2215, + "2": 457, + "3": 496, + "4": 99, + "5": 164, + "6": 8, + "7": 9, + "8": 1 + }, + "scalar_units": 189658 + }, + "claim_type": "finite circuit certificate and scoped substitution proof", + "constructed_word_payload_sha256": "27039a0d408cafbe25b7b571dadcfb4f335faab8fab2d276aad1426530ef009a", + "edited_events": 22815, + "limits": [ + "No new kappa or paid-profile improvement.", + "Peak owned occupancy remains thirteen.", + "Rounded, native, physical caller and all-size admission are not replayed." + ], + "local": { + "endpoint_coefficients": 636804, + "helpers": { + "1": 14, + "2": 8, + "3": 4, + "4": 107, + "5": 14, + "6": 2, + "7": 9, + "8": 19, + "9": 385 + }, + "owned_fields": 28, + "owned_lifetimes": 30, + "paid": { + "1": 2215, + "2": 457, + "3": 496, + "4": 99, + "5": 164, + "6": 8, + "7": 9, + "8": 1 + }, + "paid_rank_mass": 5952, + "peak_owned_fields": 13, + "public_inputs": 770, + "real_scalar_allowance": 189646 + }, + "rejection_controls": { + "hidden_source_use": true, + "missing_clear": true, + "missing_descent": true, + "missing_first_read": true, + "missing_half": true, + "missing_source_init": true, + "wrong_copy_anchor": true, + "wrong_half_sign": true, + "wrong_inventory": true + }, + "source_hashes": { + "PREDECESSOR.json": "0e3124a5a565f9252c03bc0b66d890e20a4b93c8dd4f2214e50b47385fee7127", + "PROOF.md": "e0c32bcfa71ee2e21f258311935b5c7c243dd177f555f2ddc860fb2bcef2d105", + "README.md": "54776bf8039dfc2cb96e77cc5bde62d3eca8cbc0c6ac64f9a39d16a5813a5131", + "SOURCES.json": "d3790bfecd02d5d067ad4cae4d532e9e7f883944f12729c7dd0dbc11235cf31a", + "TASK.json": "75c1d3e8a0d98c4400c90b10caea28ae637069d73fde5f38117e6f8d935d913f", + "VERIFY.json": "3fd3ba5ce00eedc9a7377e0a773380068e9129e08ea0778f53bdae6ae825bb06", + "construct.py": "8f498c94e5ffd06b3a7aae5c36f7c47597ccf37ac9eba580ef998dbe905a1809", + "inputs/pr6144-WORD.json.gz": "c71985d96bf3d4a35aae111aaba87e376f7367efb4a5686278ef293732757533", + "verify.py": "df28f65652d4bf00ef7bd918b5a7cc10c2a6d3ef4e7a280875f42713112515e1" + }, + "status": "PASS_OWNED_LIFETIME_COALESCENCE", + "transpose": { + "arithmetic": "Dense integer rows with binary denominators; reverse chronology", + "coefficients": 636804, + "columns": 798 + } +} diff --git a/research/owned770-descent-pruning/SOURCES.json b/research/owned770-descent-pruning/SOURCES.json new file mode 100644 index 0000000000..27e3832152 --- /dev/null +++ b/research/owned770-descent-pruning/SOURCES.json @@ -0,0 +1,38 @@ +{ + "base_commit": "721c03822c421b7f7fcbb2598993b947c4d88419", + "files": [ + { + "git_blob": "d59b5035e7b4cbaa9d688a1d32dd0d6eb79c466a", + "path": "certificates/selected-result.json", + "sha256": "9b8d0eea95b3bf0dfcb7938a732a6439b87a2685dec2a5ab9e525b3b34debbfa", + "usage": "provenance" + }, + { + "git_blob": "3404fbdd5e7529a0674eef26114b5071e4586cec", + "path": "docs/research/agent-task-catalog.json", + "sha256": "ead6cdc9d0af6d58e8a49744d8ec8c7c15e13d2ba93c276c434bcf9b51b93a81", + "usage": "provenance" + }, + { + "git_blob": "b7be846b10c4c54a4e1558d7b563bc8c3a170223", + "path": "research/p104-unread-path-resynthesis/local.py", + "sha256": "7201df8e32f5c99f7403150e8664042322037906088bc754c67293a241368597", + "usage": "input" + }, + { + "git_blob": "69b70ee50c697b185ebf585fbe69f2487af32d1d", + "path": "research/owned770-descent-pruning/inputs/pr6144-WORD.json.gz", + "pin": "head:61297e09be0725e6de603e0ec39b113ec6edb1cd:research/owned770-descent-pruning/inputs/pr6144-WORD.json.gz", + "sha256": "c71985d96bf3d4a35aae111aaba87e376f7367efb4a5686278ef293732757533", + "usage": "input" + }, + { + "git_blob": "25261ef2bae2f6da4441926965a353577636fb8d", + "path": "research/owned770-descent-pruning/PREDECESSOR.json", + "pin": "head:61297e09be0725e6de603e0ec39b113ec6edb1cd:research/owned770-descent-pruning/PREDECESSOR.json", + "sha256": "0e3124a5a565f9252c03bc0b66d890e20a4b93c8dd4f2214e50b47385fee7127", + "usage": "input" + } + ], + "schema_version": 1 +} diff --git a/research/owned770-descent-pruning/TASK.json b/research/owned770-descent-pruning/TASK.json new file mode 100644 index 0000000000..9596eba63b --- /dev/null +++ b/research/owned770-descent-pruning/TASK.json @@ -0,0 +1,129 @@ +{ + "actual_scope": "Coalesce old owned 770 with old owned 791 in the exact PR6144 word; remove one field, one lifetime, three events and twelve scalar units, preserving the full paid/productive profile.", + "ai_assistance": "Independent human and formal proof-kernel review are unclaimed.", + "author": "Nick Petalas", + "base_commit": "721c03822c421b7f7fcbb2598993b947c4d88419", + "bottleneck_link": "Scoped ordinary-work and logical-inventory improvement on a proposed P104 word. Every paid/native boundary and productive endpoint is retained; it is not a moment or kappa improvement.", + "budget_minutes": 60, + "evidence": "PROOF.md; RESULT.json; complete 798-column forward/reverse replay and nine rejection controls.", + "open_questions": [ + { + "blocked_by": "Chronological availability and the complete paid/caller bill.", + "first_step": "Bind readers 169 and 206 and their other meetings to a new legal trajectory.", + "question": "Can owned770 descent omit frame 553 or 1047 through actual read rerouting?", + "why_it_matters": "A strict paid-profile gain needs a different route, not just owned coalescence." + }, + { + "blocked_by": "Peak occupancy remains 13 and the current reserve is unchanged.", + "first_step": "Rebuild one caller alias allocation and compare all lifetimes.", + "question": "Can the actual caller reduce its declared reserve for the new 28-field word?", + "why_it_matters": "Logical inventory reduction does not reduce physical peak space by itself." + }, + { + "blocked_by": "A concrete numerical implementation and erasure contract.", + "first_step": "Price and bound the actual source SCALE and old COPY error.", + "question": "Can a specified rounded COPY/SCALE implementation use this substitution?", + "why_it_matters": "Exact rational equality need not preserve a rounded error bound." + } + ], + "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": "completed", + "priority_revision": 8, + "schema_version": 1, + "scope_change_reason": "Read-rerouting was proposed to remove an interior descent stage. The first verified improvement instead removes a duplicate owned COPY through last-read coalescence. No paid-profile gain was obtained.", + "scope_status": "changed", + "stop_rule": "Ship the first original verified improvement and list further work rather than extending it.", + "task_id": "p104-side-correction" +} diff --git a/research/owned770-descent-pruning/VERIFY.json b/research/owned770-descent-pruning/VERIFY.json new file mode 100644 index 0000000000..46ccb64762 --- /dev/null +++ b/research/owned770-descent-pruning/VERIFY.json @@ -0,0 +1,38 @@ +{ + "commands": [ + { + "argv": [ + "{python}", + "-W", + "error", + "-I", + "-B", + "{package}/verify.py" + ], + "checks": "Exact coalesced-word endpoints/ownership, all 798 transpose columns, literal prices, unchanged native boundary list and nine rejection controls.", + "timeout_seconds": 120 + }, + { + "argv": [ + "{python}", + "-W", + "error", + "-I", + "-O", + "-B", + "{package}/verify.py" + ], + "checks": "Exact coalesced-word endpoints/ownership, all 798 transpose columns, literal prices, unchanged native boundary list and nine rejection controls.", + "timeout_seconds": 120 + } + ], + "inputs": [ + "research/p104-unread-path-resynthesis/local.py", + "research/owned770-descent-pruning/inputs/pr6144-WORD.json.gz", + "research/owned770-descent-pruning/PREDECESSOR.json" + ], + "python": "3.12", + "requirements": [], + "schema_version": 1, + "status": "ready" +} diff --git a/research/owned770-descent-pruning/construct.py b/research/owned770-descent-pruning/construct.py new file mode 100644 index 0000000000..79376a3af4 --- /dev/null +++ b/research/owned770-descent-pruning/construct.py @@ -0,0 +1,61 @@ +"""Coalesce one exact P104 owned lifetime. Produced by Nick Petalas. Apache-2.0.""" +from copy import deepcopy + + +def need(condition, message): + if not condition: + raise ValueError(message) + + +def roles(event): + return event[1:3] if event[0] in ("ADD", "COPY") else event[1:2] + + +def compact(event): + """Delete old role 770 after replacing its uses by old role 791.""" + result = event.copy() + indices = (1, 2) if event[0] in ("ADD", "COPY") else (1,) + for index in indices: + value = 791 if result[index] == 770 else result[index] + result[index] = value - int(value > 770) + return result + + +def construct(source): + need(source["public"] == 770 and source["owned_fields"] == 29, + "Exact predecessor inventory") + program = source["program"] + need(len(program) == 22818, "Exact predecessor length") + anchors = { + 13473: ["INIT", 791, 549], + 13474: ["COPY", 791, 173, "1", 549], + 13475: ["ADD", 121, 791, "1/2", 549], + 13658: ["INIT", 770, 549], + 13659: ["COPY", 770, 791, "1", 549], + 13660: ["SCALE", 770, "1/2", 549], + 13661: ["MOVE", 770, 549, 553, True], + 15424: ["CLEAR", 770, 593], + 15591: ["CLEAR", 791, 549], + } + need(all(program[i] == event for i, event in anchors.items()), + "Exact coalescence anchors") + uses = [i for i, event in enumerate(program) if 791 in roles(event)] + need(uses == [13473, 13474, 13475, 13659, 15591], + "Source lifetime has no hidden use") + uses = [i for i, event in enumerate(program) if 770 in roles(event)] + need(uses[0] == 13658 and uses[-1] == 15424, + "Duplicate role has one enclosed lifetime") + need(sum(program[i][0] == "INIT" for i in uses) == 1, + "No second duplicate initialization") + output = [] + for index, event in enumerate(program): + if index in (13658, 13659, 13660, 15591): + continue + if index == 13661: + output.append(compact(["SCALE", 791, "1/2", 549])) + output.append(compact(event)) + result = deepcopy(source) + result["program"] = output + result["owned_fields"] = 28 + need(len(output) == 22815, "Exact edited length") + return result diff --git a/research/owned770-descent-pruning/verify.py b/research/owned770-descent-pruning/verify.py new file mode 100644 index 0000000000..0a8890332a --- /dev/null +++ b/research/owned770-descent-pruning/verify.py @@ -0,0 +1,154 @@ +"""Check the new coalesced word, not the predecessor's supplier claim. + +Produced by Nick Petalas. Apache-2.0. The imported checker retains its credit. +""" +import argparse +from collections import Counter +from copy import deepcopy +from fractions import Fraction +from hashlib import sha256 +import gzip +import importlib.util +import json +from pathlib import Path +import sys + +HERE = Path(__file__).resolve().parent +ROOT = HERE.parents[1] +sys.path.insert(0, str(HERE)) +from construct import construct, need + +CHECKER = "research/p104-unread-path-resynthesis/local.py" + + +def digest(path): + return sha256(path.read_bytes()).hexdigest() + + +def sources(): + pins = json.loads((HERE / "SOURCES.json").read_text()) + for pin in pins["files"]: + if pin["usage"] == "input": + need(digest(ROOT / pin["path"]) == pin["sha256"], "Source bytes: " + pin["path"]) + path = ROOT / CHECKER + spec = importlib.util.spec_from_file_location("owned_coalescence_checker", path) + need(spec is not None and spec.loader is not None, "Checker import specification") + checker = importlib.util.module_from_spec(spec) + spec.loader.exec_module(checker) + raw = (HERE / "inputs/pr6144-WORD.json.gz").read_bytes() + predecessor = json.loads((HERE / "PREDECESSOR.json").read_text()) + need(len(raw) == predecessor["size"] and sha256(raw).hexdigest() == predecessor["sha256"], + "Exact retained predecessor word") + return checker, json.loads(gzip.decompress(raw)) + + +def inventory(word): + """Count events and literal prices; no predecessor endpoint replay.""" + need(len(word["program"]) <= 26000, "Finite program bound") + scalar = 0 + paid = Counter() + events = Counter() + for event in word["program"]: + op = event[0] + events[op] += 1 + if op == "MOVE": + paid[abs(len(word["frames"][event[2]]) - len(word["frames"][event[3]]))] += 1 + elif op in ("INIT", "CLEAR"): + scalar += 2 + else: + q = Fraction(event[-2]) + n, d = abs(q.numerator), q.denominator + if op == "SCALE": + scalar += 2 * (abs(n.bit_length() - d.bit_length()) + int(q < 0)) + else: + scalar += 2 * (3 + n.bit_length() - 1 + n.bit_count() + d.bit_length() - 1) + return {"scalar_units": scalar, "paid": dict(sorted(paid.items())), + "events": dict(sorted(events.items()))} + + +def rejected(action): + try: + action() + except (ValueError, IndexError, KeyError): + return True + raise ValueError("Fault was accepted") + + +def controls(checker, source, word): + results = {} + sites = { + "missing_source_init": next(i for i, e in enumerate(word["program"]) if e == ["INIT", 790, 549]), + "missing_half": next(i for i, e in enumerate(word["program"]) if e == ["SCALE", 790, "1/2", 549]), + "missing_clear": next(i for i, e in enumerate(word["program"]) if e == ["CLEAR", 790, 593]), + "missing_descent": next(i for i, e in enumerate(word["program"]) if e == ["MOVE", 790, 549, 553, True]), + "missing_first_read": next(i for i, e in enumerate(word["program"]) if e == ["ADD", 169, 790, "-2", 553]), + } + for name, site in sites.items(): + bad = deepcopy(word) + bad["program"].pop(site) + results[name] = rejected(lambda: checker.replay(bad)) + bad = deepcopy(word) + bad["program"][sites["missing_half"]][2] = "-1/2" + results["wrong_half_sign"] = rejected(lambda: checker.replay(bad)) + bad = deepcopy(source) + bad["program"][14000] = ["ADD", 791, 770, "1", 549] + results["hidden_source_use"] = rejected(lambda: construct(bad)) + bad = deepcopy(source) + bad["program"][13659][3] = "2" + results["wrong_copy_anchor"] = rejected(lambda: construct(bad)) + bad = deepcopy(source) + bad["owned_fields"] = 28 + results["wrong_inventory"] = rejected(lambda: construct(bad)) + return results + + +def run(): + checker, source = sources() + word = construct(source) + before, after = inventory(source), inventory(word) + need(before["scalar_units"] == 189658 and after["scalar_units"] == 189646, + "Exactly twelve scalar units saved") + need(before["paid"] == after["paid"], "Every paid rank count preserved") + moves = lambda w: Counter(tuple(e[2:]) for e in w["program"] if e[0] == "MOVE") + need(moves(source) == moves(word), "Every signed native frame boundary preserved") + need(all(source[key] == word[key] for key in source if key not in ("program", "owned_fields")), + "Every public boundary and frame retained") + local = checker.replay(word) + columns = checker.reverse_columns(word) + need((local["owned_fields"], local["owned_lifetimes"], local["peak_owned_fields"]) == (28, 30, 13), + "New complete ownership inventory") + need(local["real_scalar_allowance"] == after["scalar_units"] and + local["paid"] == after["paid"], "Independent literal counts agree") + faults = controls(checker, source, word) + hashes = {str(p.relative_to(HERE)): digest(p) for p in sorted(HERE.rglob("*")) + if p.is_file() and p.name != "RESULT.json" and "__pycache__" not in p.parts} + word_hash = sha256(json.dumps(word, sort_keys=True, separators=(",", ":")).encode()).hexdigest() + return {"status": "PASS_OWNED_LIFETIME_COALESCENCE", "source_hashes": hashes, + "constructed_word_payload_sha256": word_hash, + "before": before, "after": after, "edited_events": len(word["program"]), + "local": local, "transpose": columns, "rejection_controls": faults, + "claim_type": "finite circuit certificate and scoped substitution proof", + "limits": ["No new kappa or paid-profile improvement.", + "Peak owned occupancy remains thirteen.", + "Rounded, native, physical caller and all-size admission are not replayed."]} + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--receipt-out", type=Path) + args = parser.parse_args() + result = run() + payload = (json.dumps(result, sort_keys=True, indent=2) + "\n").encode() + if args.receipt_out: + need(HERE not in args.receipt_out.resolve().parents, "Receipt output belongs outside the package") + args.receipt_out.write_bytes(payload) + else: + need((HERE / "RESULT.json").read_bytes() == payload, "Exact generated receipt") + columns = result["transpose"] + saved = result["before"]["scalar_units"] - result["after"]["scalar_units"] + print(result["status"], f"columns={columns['columns']} coefficients={columns['coefficients']}", + f"controls={len(result['rejection_controls'])} scalar_saved={saved}") + + +if __name__ == "__main__": + main()