From 2b412fb33c983edc495576be692b0601c1d62241 Mon Sep 17 00:00:00 2001 From: Chris R Date: Mon, 19 Oct 2026 19:51:22 +1100 Subject: [PATCH] Prove fixed-boundary R437 carrier source-quotient cut --- .../r437-carrier-quotient-cut/.gitattributes | 1 + research/r437-carrier-quotient-cut/README.md | 165 +++++ .../r437-carrier-quotient-cut/RESULT.json | 567 ++++++++++++++++++ .../r437-carrier-quotient-cut/RETAINED.json | 28 + .../r437-carrier-quotient-cut/SOURCES.json | 18 + research/r437-carrier-quotient-cut/TASK.json | 72 +++ .../r437-carrier-quotient-cut/VALIDATION.json | 35 ++ .../r437-carrier-quotient-cut/VERIFY.json | 29 + .../r437-carrier-quotient-cut/inputs/LICENSE | 201 +++++++ .../inputs/R437-COMPOSED-WORD.json.gz | Bin 0 -> 42280 bytes .../inputs/UPSTREAM-NOTICE.md | 71 +++ .../r437-carrier-quotient-cut/test_package.py | 60 ++ research/r437-carrier-quotient-cut/verify.py | 150 +++++ 13 files changed, 1397 insertions(+) create mode 100644 research/r437-carrier-quotient-cut/.gitattributes create mode 100644 research/r437-carrier-quotient-cut/README.md create mode 100644 research/r437-carrier-quotient-cut/RESULT.json create mode 100644 research/r437-carrier-quotient-cut/RETAINED.json create mode 100644 research/r437-carrier-quotient-cut/SOURCES.json create mode 100644 research/r437-carrier-quotient-cut/TASK.json create mode 100644 research/r437-carrier-quotient-cut/VALIDATION.json create mode 100644 research/r437-carrier-quotient-cut/VERIFY.json create mode 100644 research/r437-carrier-quotient-cut/inputs/LICENSE create mode 100644 research/r437-carrier-quotient-cut/inputs/R437-COMPOSED-WORD.json.gz create mode 100644 research/r437-carrier-quotient-cut/inputs/UPSTREAM-NOTICE.md create mode 100644 research/r437-carrier-quotient-cut/test_package.py create mode 100644 research/r437-carrier-quotient-cut/verify.py diff --git a/research/r437-carrier-quotient-cut/.gitattributes b/research/r437-carrier-quotient-cut/.gitattributes new file mode 100644 index 0000000000..a154a13b7c --- /dev/null +++ b/research/r437-carrier-quotient-cut/.gitattributes @@ -0,0 +1 @@ +inputs/** -text -diff diff --git a/research/r437-carrier-quotient-cut/README.md b/research/r437-carrier-quotient-cut/README.md new file mode 100644 index 0000000000..12b9c3825b --- /dev/null +++ b/research/r437-carrier-quotient-cut/README.md @@ -0,0 +1,165 @@ +# R437 node509: a source-quotient obstruction to a third carrier deletion + +**Scoped negative result; no new κ or physical supplier.** At current R437 +source `a24f9ff95c12fd0b6792e3f710569237efd72db2`, a promising next deletion is +helper469, the SOURCE92 carrier. Even granting a free SOURCE77 read, its +replacement by an early SOURCE92 injection into receiver444 cannot meet the +fixed node509 output contract with an invertible linear register network. +The source quotient has rank two at entry and rank one at the required exit. +The obstruction persists with any number of borrowed registers returned modulo +the allowed external source span. It excludes arbitrarily long networks in this +specified alphabet, rather than only the six two-register matrices tried. + +This informs the next κ search: another GL rewrite at this unchanged boundary +cannot supply the carrier saving. A candidate must change its accessible source +space, retain an additional output dimension, move the receiver/source boundary, +or supply and pay for a different operation. Such changes remain open. + +## Exact scope and evidence + +The verifier reads a byte-exact retained current R437 word. It independently +checks its full 659-column arbitrary-DIRTY XOR identity and the rational closure +of all 636 frames. Five helpers have exactly one single-SOURCE write in A/B, +are not captured, and are otherwise only read: 462, 463, 466, 468 and469. +At the first read of each, the destination's current frame is not contained in +the SOURCE's current frame. Thus the immediate replacement by a read at that +unchanged SOURCE frame fails. This census does not exclude earlier retiming or +a coordinated rewrite. + +The focused cut concerns helper469, SOURCE92, node509 and writable receivers444 +and413. At entry before A1998, their SOURCE rows are respectively zero and +`e87`; SOURCE92 is clean, at frame184. We optimistically replace the deleted +carrier by an injection `444 += SOURCE92` at frame184. Frame184 is contained in +509. The resulting source rows are `(e92,e87)`. + +Scanning all659 registers gives ten other roles whose frames can enter509 and +then rejoin the next unchanged observation: + +`17, 67, 177, 185, 271, 293, 352, 371, 467, 468`. + +Targets177 and185 have zero SOURCE rows here. The inherited H1-H5 alphabet +forbids target readout; allowing them as borrowed banks is an additional +favorable relaxation and adds no quotient dimension. The other eight are +SOURCE/helper roles. + +Their SOURCE rows span coordinates `17,22,33,38,50,60,67`. Add `e77` as an +explicitly **free relaxed channel**, to avoid charging or assuming a solution to +the incompatible early184/186 injection order. This larger span is called E. +The two actual node outputs, modulo E, both equal `e87 + e92`. Hence the input +quotient rank is two and the required output quotient rank is one. + +A second source census covers all 34 insertion cuts A2001 through A2034, +before413 takes its next frame390 gate. The union of all newly eligible +frame509 read channels adds no dimension to E. This is a finite eligibility +fact. The theorem below still fixes the entry and exit SOURCE rows; it does not +claim to rule out arbitrary delayed observations or a two-window program. + +The separately implemented checker propagates SOURCE87/92 one column at a time +and checks all GL(2,2), GL(3,2), GL(4,2) matrices: 6, 168 and20,160 respectively. +The added registers begin and end at zero **in the source quotient**, not with +physically clean payloads. These finite checks support the implementation; the +rank argument proves the arbitrary-register statement. + +## Theorem and proof + +Fix the retained entry/output rows and external space E described above. +The allowed replacement uses any finite sequence of invertible linear updates +among the writable registers, plus reads whose SOURCE row lies in E. Additional +borrowed writable registers may be used if their entry and exit SOURCE rows lie +in E. The replacement does not introduce an erasure, discard, new source +channel, changed observation contract or separate physical primitive. + +Project every register's SOURCE row into `V/E`, where `V=F2^111`. Reads from E +vanish. Every invertible linear register update left-multiplies the row matrix +by an invertible matrix and therefore preserves its rank. Borrowed rows add +zero rows at both boundaries. The initial matrix contains the independent rows +`[e92]` and `[e87]`, so has rank two. The required final rows are both +`[e92+e87]`, with all borrowed rows zero, so have rank one. Contradiction. + +Arbitrary dirty inputs cannot repair this source-column contradiction. Fresh +D compensation only modifies target DIRTY responses; literal C restores the +reversible word after its observations. Neither supplies a missing SOURCE +identity at this fixed node boundary. This is a necessary-condition argument, +not a proof that every source-correct candidate satisfies the full caller. + +The external-role test uses the exact rational closed-frame inclusions +`current_frame <= 509 <= next_unchanged_observation_frame`. Captures are included +before B when finding that next observation. Final frames cover roles with no +later observation. This permits additional frame advances for free and is +therefore favorable to a candidate. Exact closure reconstruction validates the +set-inclusion representation of these retained frames. + +Three escape controls deliberately break the strict-loss certificate: grant +an independent SOURCE87 channel; grant a SOURCE92 channel at the cut; or let a +borrowed register retain the missing SOURCE87 quotient row. They are potential +changes of contract, not free operations admitted by this package. + +## Budget gate, overlap and limits + +Pairing: reversible bit-circuit synthesis with quotient-space rank and frame +partial orders. The initial objective was a fully paid κ improvement. Rohan +Arun's pending PR3959 already realizes the unchanged width-eight pooled slot +optimum supplied by mightyOil's PR1281 theorem, so another unchanged owner +reshuffle was not pursued. The attempted changed local mechanism is an actual +third-carrier deletion at this source. It fails before pricing. All hypothetical +adapter and auxiliary costs were set to zero in the cut relaxation; no saving +is booked when the necessary source contract fails. + +| Component | Status here | +|---|---| +| Current word's complete arbitrary-DIRTY linear identity | Checked, all659 columns | +| Rational frames and this source boundary | Checked, all636 frames; exact ten-role frame cut (two target rows are zero) | +| Immediate persistent-source replacements | Five candidates; all first-read gates fail | +| Fixed node509 deletion with returned borrowed banks | Excluded by rank2-to-rank1 theorem | +| Later eligible frame509 channel growth | 34 cuts checked; no new source dimension | +| Native all-size realization, stock, preparation, tape/precision, full physical cost | Inherited and unresolved; not audited here | +| New κ, a new local word, or a global carrier lower bound | Not established | + +Canonical main is `20ecf2891d80b5acf18d980b2164fb44ea7faa90`, priorities revision6. +The selected κ remains0.001672660197076918. The team claim is +[PR3967 comment](https://github.com/CrocSwap/integer-mult-bounds/pull/3967#issuecomment-6263066320). +Live overlap included PR3647/3700/3950/3958/3959/3967/3982/3995 and the parent +team's Discussion review; coverage is partial. PR1281 already supplies generic +width-seven packing and conditional price tables; this package claims neither. + +## Reproduce + +From the repository root (Python3.12 standard library): + +```sh +python3 -B scripts/research_package.py --package research/r437-carrier-quotient-cut +``` + +The two direct commands are `python3 -I -B research/r437-carrier-quotient-cut/verify.py` +and `python3 -I -B research/r437-carrier-quotient-cut/test_package.py`. +The latter performs an actual optimized Git-free subprocess replay and rejects +changed source bytes, changed certificate bytes and a missing retained notice. +`RESULT.json` is immutable during ordinary verification. `--write NEW_FILE` +regenerates a certificate explicitly. The source export includes its original +license and notice; `RETAINED.json` records exact origin Git blobs and SHA256s. +Those foreign-head origins are documentary pins, not runtime Git dependencies. +The verifier hashes the self-contained retained bytes before using them. + +## Open next questions + +1. Can a paid source87 or source92 channel reach this cut without disturbing + the inherited SOURCE writes and future frames? Start with the exact + `current <= cut <= next` failure and price a changed source/consumer pair. + Its physical preparation, restoration and recursive bill are missing. +2. Can a two-window rewrite retain the missing quotient dimension in an + existing bank and consume it later? Start with a proposed changed future + observation map for413/444 and the borrowed bank. The fixed-output theorem + does not apply, but all subsequent reads, COPY windows and full dirty + cleanup must be checked and charged. +3. Can a different third-carrier construction change the boundary rather than + merely resynthesize this GL network? Use the five-source census as an + entry map, then derive a whole paid profile before an owner search. + +Credit ai-nanachi/PR3647 for R437 and the helper464 GL deletion; Ali Romman/PR1043 +for the retained helper470/SOURCE77 deletion; Sagar Thakrar/PR3700 and PR2423 for +independent checks and OQ4; mightyOil/PR1281 for the slot optimum; Rohan Arun/ +PR3959 for pooled R437; eumemic, DreamingOfClouds, DaysSky, Crow, chafreaky and +the full notices for the original word, geometry, native, hosting and compiler. +New proof, implementation and checks by Chris R / Clear1nsight with substantial +OpenAI Codex assistance. Apache-2.0. No independent human or formal-kernel review +is claimed. diff --git a/research/r437-carrier-quotient-cut/RESULT.json b/research/r437-carrier-quotient-cut/RESULT.json new file mode 100644 index 0000000000..fe1d82e673 --- /dev/null +++ b/research/r437-carrier-quotient-cut/RESULT.json @@ -0,0 +1,567 @@ +{ + "census": [ + { + "direct_current_source_frame_eligible": false, + "first_read": 1992, + "helper": 462, + "receiver": 340, + "receiver_frame": 506, + "source": 47, + "source_frame": 121, + "source_read_count": 2 + }, + { + "direct_current_source_frame_eligible": false, + "first_read": 1991, + "helper": 463, + "receiver": 241, + "receiver_frame": 506, + "source": 52, + "source_frame": 120, + "source_read_count": 3 + }, + { + "direct_current_source_frame_eligible": false, + "first_read": 1996, + "helper": 466, + "receiver": 385, + "receiver_frame": 76, + "source": 27, + "source_frame": 156, + "source_read_count": 1 + }, + { + "direct_current_source_frame_eligible": false, + "first_read": 2035, + "helper": 468, + "receiver": 413, + "receiver_frame": 390, + "source": 50, + "source_frame": 52, + "source_read_count": 1 + }, + { + "direct_current_source_frame_eligible": false, + "first_read": 1999, + "helper": 469, + "receiver": 444, + "receiver_frame": 186, + "source": 92, + "source_frame": 184, + "source_read_count": 2 + } + ], + "controls": [ + "source87_channel_breaks_cut", + "source92_channel_breaks_cut", + "borrowed_bank_keeps_missing_dimension" + ], + "eligible_external_roles": [ + 17, + 67, + 177, + 185, + 271, + 293, + 352, + 371, + 467, + 468 + ], + "frame509_dimension": 4, + "frames": 636, + "free_relaxation_source": 77, + "later_cut_count": 34, + "later_cuts": [ + [ + 2001, + [ + 17, + 67, + 177, + 185, + 271, + 293, + 352, + 371, + 467, + 468 + ] + ], + [ + 2002, + [ + 17, + 67, + 177, + 185, + 271, + 293, + 352, + 371, + 467, + 468 + ] + ], + [ + 2003, + [ + 17, + 67, + 177, + 185, + 271, + 293, + 352, + 371, + 467, + 468 + ] + ], + [ + 2004, + [ + 17, + 67, + 177, + 185, + 271, + 293, + 352, + 371, + 467, + 468 + ] + ], + [ + 2005, + [ + 17, + 67, + 177, + 185, + 271, + 293, + 352, + 371, + 467, + 468 + ] + ], + [ + 2006, + [ + 17, + 67, + 177, + 185, + 271, + 293, + 352, + 371, + 467, + 468 + ] + ], + [ + 2007, + [ + 17, + 67, + 177, + 185, + 271, + 293, + 352, + 371, + 467, + 468 + ] + ], + [ + 2008, + [ + 17, + 67, + 177, + 185, + 271, + 293, + 352, + 371, + 467, + 468 + ] + ], + [ + 2009, + [ + 17, + 67, + 177, + 185, + 271, + 293, + 352, + 371, + 467, + 468 + ] + ], + [ + 2010, + [ + 17, + 67, + 177, + 185, + 271, + 293, + 352, + 371, + 467, + 468 + ] + ], + [ + 2011, + [ + 17, + 67, + 177, + 185, + 271, + 293, + 352, + 371, + 467, + 468 + ] + ], + [ + 2012, + [ + 17, + 67, + 177, + 185, + 271, + 293, + 352, + 371, + 467, + 468 + ] + ], + [ + 2013, + [ + 17, + 67, + 177, + 185, + 271, + 293, + 352, + 371, + 467, + 468 + ] + ], + [ + 2014, + [ + 17, + 67, + 177, + 185, + 271, + 293, + 352, + 371, + 467, + 468 + ] + ], + [ + 2015, + [ + 17, + 67, + 177, + 185, + 271, + 293, + 352, + 371, + 467, + 468 + ] + ], + [ + 2016, + [ + 17, + 67, + 177, + 185, + 271, + 293, + 352, + 371, + 467, + 468 + ] + ], + [ + 2017, + [ + 17, + 67, + 177, + 185, + 271, + 352, + 371, + 467, + 468 + ] + ], + [ + 2018, + [ + 17, + 67, + 177, + 185, + 352, + 371, + 467, + 468 + ] + ], + [ + 2019, + [ + 17, + 67, + 177, + 185, + 352, + 371, + 467, + 468 + ] + ], + [ + 2020, + [ + 17, + 67, + 177, + 185, + 352, + 371, + 467, + 468 + ] + ], + [ + 2021, + [ + 17, + 67, + 177, + 185, + 352, + 371, + 467, + 468 + ] + ], + [ + 2022, + [ + 17, + 67, + 177, + 185, + 352, + 371, + 467, + 468 + ] + ], + [ + 2023, + [ + 17, + 67, + 177, + 185, + 352, + 371, + 467, + 468 + ] + ], + [ + 2024, + [ + 17, + 67, + 177, + 185, + 352, + 371, + 467, + 468 + ] + ], + [ + 2025, + [ + 17, + 67, + 177, + 185, + 352, + 371, + 467, + 468 + ] + ], + [ + 2026, + [ + 17, + 67, + 177, + 185, + 352, + 371, + 467, + 468 + ] + ], + [ + 2027, + [ + 17, + 67, + 177, + 185, + 352, + 371, + 467, + 468 + ] + ], + [ + 2028, + [ + 17, + 67, + 177, + 185, + 352, + 371, + 467, + 468 + ] + ], + [ + 2029, + [ + 17, + 67, + 177, + 185, + 352, + 371, + 467, + 468 + ] + ], + [ + 2030, + [ + 17, + 67, + 177, + 185, + 352, + 371, + 467, + 468 + ] + ], + [ + 2031, + [ + 17, + 67, + 177, + 185, + 352, + 371, + 467, + 468 + ] + ], + [ + 2032, + [ + 17, + 67, + 177, + 185, + 352, + 371, + 467, + 468 + ] + ], + [ + 2033, + [ + 17, + 67, + 177, + 185, + 352, + 371, + 467, + 468 + ] + ], + [ + 2034, + [ + 17, + 67, + 177, + 185, + 352, + 371, + 467, + 468 + ] + ] + ], + "quotient": { + "final": [ + "0x108000000000000000000000", + "0x108000000000000000000000" + ], + "final_rank": 1, + "initial": [ + "0x100000000000000000000000", + "0x8000000000000000000000" + ], + "initial_rank": 2 + }, + "scope": "fixed node509 boundaries, invertible linear register gates, existing external channels plus free SOURCE77, borrowed writable banks returned modulo E; no uniform supplier or new kappa", + "status": "PASS_R437_CARRIER_QUOTIENT_CUT", + "whole_dirty_columns": 659 +} diff --git a/research/r437-carrier-quotient-cut/RETAINED.json b/research/r437-carrier-quotient-cut/RETAINED.json new file mode 100644 index 0000000000..09d16921e7 --- /dev/null +++ b/research/r437-carrier-quotient-cut/RETAINED.json @@ -0,0 +1,28 @@ +{ + "files": [ + { + "path": "inputs/R437-COMPOSED-WORD.json.gz", + "origin_repository": "CrocSwap/integer-mult-bounds", + "origin_commit": "a24f9ff95c12fd0b6792e3f710569237efd72db2", + "origin_path": "research/bit-p111-r437-gl464-470-20261018/data/r0042/R437-COMPOSED-WORD.json.gz", + "git_blob": "c558a221dd44cbdaa732a401f9876de4c096d4a7", + "sha256": "e432182d5b62c8bbefeb871fce30317234d707e5e18d4295e65ac21f7fd8365e" + }, + { + "path": "inputs/LICENSE", + "origin_repository": "CrocSwap/integer-mult-bounds", + "origin_commit": "a24f9ff95c12fd0b6792e3f710569237efd72db2", + "origin_path": "research/bit-p111-r437-gl464-470-20261018/LICENSE", + "git_blob": "261eeb9e9f8b2b4b0d119366dda99c6fd7d35c64", + "sha256": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4" + }, + { + "path": "inputs/UPSTREAM-NOTICE.md", + "origin_repository": "CrocSwap/integer-mult-bounds", + "origin_commit": "a24f9ff95c12fd0b6792e3f710569237efd72db2", + "origin_path": "research/bit-p111-r437-gl464-470-20261018/UPSTREAM-NOTICE.md", + "git_blob": "9b519b904d456b0b5861f7469a66c365e77799a6", + "sha256": "8ed83f2f0bde43a41e44279f44d29efaeae3df44850b86f0e3578edf3ee104e4" + } + ] +} diff --git a/research/r437-carrier-quotient-cut/SOURCES.json b/research/r437-carrier-quotient-cut/SOURCES.json new file mode 100644 index 0000000000..0839f4876a --- /dev/null +++ b/research/r437-carrier-quotient-cut/SOURCES.json @@ -0,0 +1,18 @@ +{ + "schema_version": 1, + "base_commit": "20ecf2891d80b5acf18d980b2164fb44ea7faa90", + "files": [ + { + "path": "certificates/selected-result.json", + "usage": "provenance", + "git_blob": "b1fea0c94436b236cc2b7d41a7be032811b94c81", + "sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "path": "docs/research/agent-task-catalog.json", + "usage": "provenance", + "git_blob": "67f085acd86acd7d4e03922d9cf4b26bca66fed5", + "sha256": "47b42433f5a85809a3aadd29c2c339da2c6ed728e4f7762df6b88bccb7874cf0" + } + ] +} diff --git a/research/r437-carrier-quotient-cut/TASK.json b/research/r437-carrier-quotient-cut/TASK.json new file mode 100644 index 0000000000..6784c9e4d5 --- /dev/null +++ b/research/r437-carrier-quotient-cut/TASK.json @@ -0,0 +1,72 @@ +{ + "schema_version": 1, + "task_id": "selected-packing", + "priority_revision": 6, + "base_commit": "20ecf2891d80b5acf18d980b2164fb44ea7faa90", + "original_card": { + "id": "selected-packing", + "question": "Is there a genuinely unsearched, explicitly bounded improvement to the selected packing?", + "starting_points": [ + "certificates/selected-result.json", + "research/heterogeneous-owner-assembly/README.md", + "research/complex-local-word-ceiling/README.md" + ], + "methods": [ + "Search a named unclaimed canonical candidate domain with a reproducible partition.", + "Prove a stronger scoped relaxation or exact optimum for one named residual subproblem." + ], + "acceptance_gate": "Check live PR overlap first, price both suppliers and distinguish a search best from an optimum. Report the word's packing cap from ceiling.ceiling() and the fraction of it realized; label packing gains as such.", + "first_step": { + "command": [ + "python3", + "-B", + "scripts/research_baseline.py" + ], + "expected": "PASS_RESEARCH_BASELINE_BINDINGS_ONLY", + "inspect": "Locate the selected packing source in the review and check live PRs for the same residual problem.", + "scope": "Positive control / source-bound orientation only; this is not a new construction or full cold replay." + }, + "first_experiment": "Define an unclaimed canonical domain and a favorable bound before starting a new search.", + "bottleneck_link": "An actual paid-profile gain can improve the frontier up to the other supplier cap.", + "allowed_variations": [ + "One bounded residual packing instance or exact relaxation.", + "If the coverage law, template or guard changes, derive an applicable fully charged replacement bound instead of applying the incumbent ceiling outside its scope." + ], + "scope_change_triggers": [ + "Rerunning an existing search with only a different seed as a separate mathematical contribution." + ], + "overlap_terms": [ + "T16", + "owner exchange", + "packing" + ], + "existing_checks": [ + { + "scope": "Packing-independent ceiling for the selected paid profile under the one-unpaid-coordinate coverage and halving guard.", + "evidence": "docs/research/community-efficient1000-review.md", + "remaining": "A changed word or model requires new pricing; a local packing search must name uncovered scope.", + "status": "reviewed", + "source_commit": "836b19bfa309ceafbc8ee32a15e8c4b10dde7e11", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + } + ] + }, + "scope_status": "changed", + "actual_scope": "Exact source-bound quotient-rank obstruction to deleting the current R437 SOURCE92 carrier at fixed node509 boundaries, with returned borrowed registers and free SOURCE77 relaxation.", + "scope_change_reason": "The unchanged pooled slot optimum is already achieved by PR3959 using PR1281. This tests an actual changed local word mechanism before spending on hosting or repricing.", + "bottleneck_link": "A third carrier deletion could improve the bit budget, but this fixed-boundary rewrite fails a necessary source-column condition even with free adapters.", + "budget_minutes": 60, + "stop_rule": "Stop after actual boundary and complete carrier census, source-bound rank proof, independent finite/CLI controls; do not repeat generic packing or invent a new kappa.", + "outcome": "partial", + "evidence": "RESULT.json; fixed-boundary quotient-rank theorem in README; complete GL2/3/4 and actual optimized Git-free failure controls.", + "author": "Chris R / Clear1nsight", + "ai_assistance": "Substantial OpenAI Codex assistance.", + "open_questions": [ + { + "question": "Can a paid source87/92 channel or changed two-window output contract evade the cut?", + "why_it_matters": "This supplies a precise structural change needed before another carrier-deletion search.", + "first_step": "Bind one changed channel to exact source frames and next observations, then derive its whole paid profile.", + "blocked_by": "Physical source delivery, complete future observations, dirty restoration, stock and full cost." + } + ] +} diff --git a/research/r437-carrier-quotient-cut/VALIDATION.json b/research/r437-carrier-quotient-cut/VALIDATION.json new file mode 100644 index 0000000000..fcb73ff514 --- /dev/null +++ b/research/r437-carrier-quotient-cut/VALIDATION.json @@ -0,0 +1,35 @@ +{ + "status": "local_registered_replay_pass", + "utc": "2026-10-19T08:48:30.550838+00:00", + "python": "3.12.3", + "base_commit": "20ecf2891d80b5acf18d980b2164fb44ea7faa90", + "command": [ + "python3", + "-B", + "scripts/research_package.py", + "--package", + "research/r437-carrier-quotient-cut" + ], + "source_review": "Independent reviewer found two omitted zero-SOURCE target rows; all659 census corrected before publication and replay rerun. No earlier receipt claimed for corrected bytes.", + "claims": [ + "659 arbitrary-DIRTY columns", + "636 rational closed frames", + "5 immediate current-SOURCE-frame candidates", + "10 frame-compatible external roles, including 2 zero-SOURCE target rows", + "quotient rank2 to rank1", + "34 later eligibility cuts", + "complete GL2/3/4 counts6,168,20160", + "actual optimized Git-free CLI with3 corruption controls" + ], + "file_sha256": { + "TASK.json": "96a4c3e7632fa168c094d8c9a6822cc3f2c6a25b9abf579690aec72f3aaca437", + "RETAINED.json": "46d27f2225ac6262198bbbd10e7b684452627b37f4551776eed661802fe8a4b4", + ".gitattributes": "a3c414970082c100e8f9cec6d96b7d5eec4c31660d670b50d46f2d8ac53a3b76", + "SOURCES.json": "e5822ba1b619af70e55e88a0b4bf81eddd8497bc98b5aac7b00c9d6b63b64bf9", + "RESULT.json": "57ce9eeb7247525956db5512cc115f457ded1ae7cae55e84f27810b4fbd4474b", + "README.md": "0d9ccaf42d26ca6f52858bce056d790dee03bafd3b2cf18d6f61880816c631e0", + "verify.py": "127c72733f48029bdbd1da77355c5cdbe3c101a1dcc7f3b64bb20a2456134877", + "test_package.py": "456f6304026742e45673f3f8606a63ba89f121a8b594fbd6742fa66a019bff76", + "VERIFY.json": "b081bcf44cef7b84cf0ccad3ba3d1e2b209d4a66bbdcdbdc421b13ee3b6b44f1" + } +} diff --git a/research/r437-carrier-quotient-cut/VERIFY.json b/research/r437-carrier-quotient-cut/VERIFY.json new file mode 100644 index 0000000000..a07b1be0c6 --- /dev/null +++ b/research/r437-carrier-quotient-cut/VERIFY.json @@ -0,0 +1,29 @@ +{ + "schema_version": 1, + "status": "ready", + "python": "3.12", + "requirements": [], + "inputs": [], + "commands": [ + { + "argv": [ + "{python}", + "-I", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 60, + "checks": "Source hashes, 659-column dirty identity, 636 rational frames, complete five-carrier census, exact fixed-boundary quotient cut and 34 later eligibility cuts; three escape controls." + }, + { + "argv": [ + "{python}", + "-I", + "-B", + "{package}/test_package.py" + ], + "timeout_seconds": 60, + "checks": "Independent SOURCE87/92 columns; complete GL2/3/4 checks; actual Git-free optimized CLI plus source/certificate/missing-notice controls." + } + ] +} diff --git a/research/r437-carrier-quotient-cut/inputs/LICENSE b/research/r437-carrier-quotient-cut/inputs/LICENSE new file mode 100644 index 0000000000..261eeb9e9f --- /dev/null +++ b/research/r437-carrier-quotient-cut/inputs/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/research/r437-carrier-quotient-cut/inputs/R437-COMPOSED-WORD.json.gz b/research/r437-carrier-quotient-cut/inputs/R437-COMPOSED-WORD.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..c558a221dd44cbdaa732a401f9876de4c096d4a7 GIT binary patch literal 42280 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 J>(n*j))&((1<>j&1: x ^= piv[j] + return x +def rank(xs): return len(basis(xs)) +def obstruction(initial, final, external): + piv=basis(external) + a=[rem(x,piv) for x in initial]; b=[rem(x,piv) for x in final] + need(rank(a)>rank(b), 'strict quotient rank loss required') + return dict(initial=[hex(x) for x in a],final=[hex(x) for x in b],initial_rank=rank(a),final_rank=rank(b)) +def norm(v): + g=math.gcd(*v) + if not g:return tuple(v) + sign=1 if next(x for x in v if x)>0 else -1 + return tuple(sign*x//g for x in v) +def reduce_q(v,bs): + v=tuple(v) + for j,row in bs: + if v[j]:v=norm([row[j]*x-v[j]*y for x,y in zip(v,row)]) + return v +def basis_q(rows): + bs=[] + for row in rows: + v=reduce_q(row,bs) + if any(v):bs.append((next(i for i,x in enumerate(v) if x),norm(v)));bs.sort() + return bs + +def audit(w): + need(w['R']==437 and w['v']==111,'actual R437 dimensions') + fr=list(map(set,w['frames'])); n=659 + dimensions=[] + for f in fr: + bs=basis_q([w['lines'][j] for j in sorted(f)]) + need({j for j,v in enumerate(w['lines']) if not any(reduce_q(v,bs))}==f,'closed rational frame') + dimensions.append(len(bs)) + # Whole arbitrary-DIRTY linear identity; this does not assert physical realization. + full=[1<=111 or h in w['ret']:continue + s=writes[0][4][0]; reads=[z for z in u if z[3]!=h] + first=reads[0]; sec,i,f,d,ss=first + need(sec=='A','census first observation in A') + raw,frames=states[i] + need(raw[s]==1<1 later_cuts=34 controls=3') +if __name__=='__main__': + try:main() + except (Reject,OSError,ValueError,KeyError) as e:raise SystemExit('FAIL: '+str(e))