From af7cb6c67f8fc7d82a2e4aee2dd2f07481bf6690 Mon Sep 17 00:00:00 2001 From: Ali Romman <226877337+aliromman@users.noreply.github.com> Date: Sun, 1 Nov 2026 19:24:28 -0600 Subject: [PATCH] Add four native helper input lifts for conditional kappa 0.003129111 --- research/p104-native-input-lifting/NOTICE | 139 ++++++ .../PRICING-EDITS.json | 18 + research/p104-native-input-lifting/PROOF.md | 231 +++++++++ research/p104-native-input-lifting/README.md | 94 ++++ .../p104-native-input-lifting/RESULT.json | 468 ++++++++++++++++++ .../p104-native-input-lifting/SOURCES.json | 48 ++ research/p104-native-input-lifting/TASK.json | 123 +++++ .../p104-native-input-lifting/VERIFY.json | 38 ++ .../p104-native-input-lifting/WORD.json.gz | Bin 0 -> 84197 bytes .../p104-native-input-lifting/construct.py | 91 ++++ research/p104-native-input-lifting/pricing.py | 184 +++++++ research/p104-native-input-lifting/support.py | 70 +++ research/p104-native-input-lifting/verify.py | 209 ++++++++ 13 files changed, 1713 insertions(+) create mode 100644 research/p104-native-input-lifting/NOTICE create mode 100644 research/p104-native-input-lifting/PRICING-EDITS.json create mode 100644 research/p104-native-input-lifting/PROOF.md create mode 100644 research/p104-native-input-lifting/README.md create mode 100644 research/p104-native-input-lifting/RESULT.json create mode 100644 research/p104-native-input-lifting/SOURCES.json create mode 100644 research/p104-native-input-lifting/TASK.json create mode 100644 research/p104-native-input-lifting/VERIFY.json create mode 100644 research/p104-native-input-lifting/WORD.json.gz create mode 100644 research/p104-native-input-lifting/construct.py create mode 100644 research/p104-native-input-lifting/pricing.py create mode 100644 research/p104-native-input-lifting/support.py create mode 100644 research/p104-native-input-lifting/verify.py diff --git a/research/p104-native-input-lifting/NOTICE b/research/p104-native-input-lifting/NOTICE new file mode 100644 index 0000000000..038cff9afd --- /dev/null +++ b/research/p104-native-input-lifting/NOTICE @@ -0,0 +1,139 @@ +Native helper input lifting +Copyright 2026 Ali Romman. Apache-2.0. + +New construction, code, calculations and prose: Ali Romman with substantial +OpenAI Codex assistance. No subagents. All new checks are author checks. + +The direct source is PR6314 at 36533d4d1b4e2dd8672427461b12de3001b85810, +by DreamingOfClouds with Claude Opus 5.5 (Anthropic), via Claude Code. +It compresses the scalar word of PR6167 without a kappa change. +The four native input lifts and their complete conditional price are new here. +The basis identity is elementary linear algebra; no new general theorem +for that identity is claimed. + +The PR6167 source notice follows unchanged. Its nested source archive also +retains the earlier notices. + +Retained-operand descent: Ali Romman, with substantial OpenAI Codex assistance. +Apache-2.0. + +The exact source word and price are from DreamingOfClouds, PR6144 and PR6143, +with Claude Opus 5.5 (Anthropic), via Claude Code. They extend PR6030 and PR5907. +The source reader is adapted from that work. The gzip portability controls +retain Douglas Colkitt and Maxime Fleury credit. + +The pinned PR5827 checker and all earlier source notices are retained below. + +Unread-register path resynthesis +Copyright 2026 Ali Romman. Apache-2.0. + +New construction, code, calculations and prose: Ali Romman with substantial +OpenAI Codex assistance. No subagents. All new checks are author-side. + +Mason Hale supplied PR5811, the complete two-block composition and the exact +role92 remapping and fourth accumulation. The earlier elementary accumulation, +retained-copy and second-block work is by Ali Romman. Joel Pulikkan supplied +R22. Dugongue supplied the concurrent baseline composition proof. Their source +notice and proof are retained byte for byte under inputs/pr5811-*. + +The source closure retains flyingviper, Cinna Davis, David Arias, Gareth +Davidson, Jacob Alan Sussman, zxv, Cao Yifan, Pierre-Loic Doulcet, thu-nmrc, +Scratch-net and all native/helper/controller/compiler/geometry/analytic +predecessors. The exact PR5786 source archive and its nested notices remain. +This package does not claim any predecessor construction as new. + +Exact PR5811 vendor/accumulated/NOTICE follows. Source head: +33d7760d0a6fea6394aefd014eea68f0af02a92e + +Accumulated native updates +New work: Ali Romman with substantial OpenAI Codex assistance. Apache-2.0. +No subagents. The same assistant made the construction and the author checks. + +Concurrent scope: Discussion5125 now tests retained copies in the transposed +supplier. That route uses the same source/destination duality. This package +claims the three fixed forward-supplier groups and their complete result, +not the elementary accumulation identity or the broader transposed search. + +Exact source: PR5786 at 6b936acd68a7e0f9062037900f0fe9bc4b6fdd25. +The complete predecessor notice follows unchanged. + +Asynchronous helper hubs +New work: Ali Romman with substantial OpenAI Codex assistance. Apache-2.0. + +Retained native copies from PR5774 at 7d6ec0cdef31d0c37b7d2563e709979caa0d5eae. +All prior credit follows unchanged. + +Paid intermediate meetings and collective helper splits. +Ali Romman, with substantial OpenAI Codex assistance. Apache-2.0. +No subagents. All checks are author-side calculations. + +The complete PR5718 notice follows unchanged. + +Four paid interior public-basis changes. +Ali Romman, with substantial OpenAI Codex assistance. Apache-2.0. +No subagents. + +The following exact notice is retained from PR5660. + +New helper-subspace construction, proof and replay: +Ali Romman with substantial OpenAI Codex assistance. Apache-2.0. +The same assistant performed the construction and author-side checks. + +Retained contributions: +flyingviper: PR5605 shared relay, PR5612 delayed relay, and the PR5608/PR5613 +relay/split compositions. +Scratch-net: PR5606 prepared-helper identities and target debit. +Pierre-Loic Doulcet (hexapode): PR5565 commuting-contact construction, used as the exact source. +Ali Romman: PR5602 fixed boundary relations, PR5601 three-contact frame +change, PR5580 contact step, +and PR5544/5545 complete P104 caller. +Joel Pulikkan (GamingPuzzled): PR5569 priced helper handoff. +DreamingOfClouds: PR5561 free helper endpoints and PR5568 search tools. +thu-nmrc: PR5551 contact improvements. +Gareth Davidson (bitplane): PR2305 source composition. +David Arias: PR2152 coalesced P104 word. +Cinna Davis: PR2219 private reuse and the controller lineage. +Jacob Alan Sussman: productive mixed-target recursion. +zxv and Cao Yifan: exact intervals, compiler and native/pricing lineage. +GamingPuzzled: PR5472 successor handoff, a predecessor to the split concept. +The retained source notices preserve earlier geometry, BIT and analytic credit. + +The elementary rank-one basis identity is not claimed as a new general +linear-algebra theorem. The contribution is its explicit independent-target +use on this P104 word and the complete conditional kappa improvement. + +New contribution: Ali Romman, with substantial OpenAI Codex assistance. +The four-gate source-version rewrite composes zxv PR5643 and Ali Romman PR5644. +The A2 method retains Chris R/Clear1nsight PR3998 and ToikY PR4019 credit. +The compensated triangle method retains Cinna Davis PR4692 credit. +No subagents were used for this contribution. Apache-2.0. + +Concurrent PR5650 by zxv publishes the PR5643/PR5644 composition. PR5651 by +Ali Romman corroborates it. This package credits that released composition +and contributes the further four-gate placement. + +New work: distributed scalar updates on an unobserved public field interval, the exact witness and complete conditional price. Prepared for Ali Romman with substantial OpenAI Codex assistance. No subagents. Apache-2.0. The source archive retains all predecessor notices. + +Two-boundary main-assisted helper split and early cleanup: flyingviper with substantial +OpenAI Codex assistance, including independent AI review agents. Apache-2.0. + +Retained native-copy construction +Prepared by Ali Romman with substantial OpenAI Codex assistance. No subagents. +The paid-meeting source is PR5751 by Ali Romman with OpenAI Codex assistance. +The dimension-four span [265,194,164,75] is from Joel Pulikkan / GamingPuzzled +PR5739, with Claude Opus 5.5 assistance. The R22 block edits are not included. +The retained-copy mechanism, exact constructor, source-specific verification, +new price and proof are the contribution of this package. Apache-2.0. + +Exact PR5811 vendor/blocks/NOTICE follows. Source head: +33d7760d0a6fea6394aefd014eea68f0af02a92e + +The second block is PR5796 at4b30391e633ba0c7c674f03586ae97d443e9bc9c, by Ali Romman with substantial OpenAI Codex assistance, following Joel Pulikkan/GamingPuzzled R22. Exact notice, plan, proof and source words are retained in source/SECOND-* unchanged. + +The final immediate source is PR5786 asynchronous helper hubs by Ali Romman with substantial OpenAI Codex assistance. Its three temporal helper splits and complete completion parameters are retained and credited. The earlier PR5774-only composition is a superseded checkpoint, not a separate contribution. + +New complete retained-copy and R22 composition: Ali Romman with substantial OpenAI Codex assistance. No subagents. Apache-2.0. + +The thirteen retained native conversions and changed helper targets are by Ali Romman with OpenAI Codex assistance in PR5774. The R22 block and rank-four basis are by Joel Pulikkan (GamingPuzzled), with Claude Opus5.5 assistance, in PR5739/5756. The complete source archive and R22 notice remain unchanged. + +The construction retains Ali Romman PR5751 paid intermediate meetings, flyingviper PR5718 boundary splits, Cinna Davis's productive controller, Jacob Alan Sussman's productive recursion, zxv and Cao Yifan's interval/compiler line, and every P104/native/BIT predecessor in the source notices. The source engines are reused under exact byte bindings, not claimed as new implementations. diff --git a/research/p104-native-input-lifting/PRICING-EDITS.json b/research/p104-native-input-lifting/PRICING-EDITS.json new file mode 100644 index 0000000000..28f5322788 --- /dev/null +++ b/research/p104-native-input-lifting/PRICING-EDITS.json @@ -0,0 +1,18 @@ +[ + [ + "KAPPA, TESTED = Q('0.003128645'), Q('0.003128650')", + "KAPPA, TESTED = Q('0.003129111'), Q('0.003129116')" + ], + [ + "PREVIOUS = Q('0.003128386')", + "PREVIOUS = Q('0.003128645')" + ], + [ + "sum(paid.values()) == 66762", + "sum(paid.values()) == 66780" + ], + [ + "'kappa_decimal':'0.003128645','previous_pr6144':PREVIOUS", + "'kappa_decimal':'0.003129111','previous_pr6167':PREVIOUS" + ] +] diff --git a/research/p104-native-input-lifting/PROOF.md b/research/p104-native-input-lifting/PROOF.md new file mode 100644 index 0000000000..85499c9eb7 --- /dev/null +++ b/research/p104-native-input-lifting/PROOF.md @@ -0,0 +1,231 @@ +# Native helper input lifting + +## Claim and source + +Under the five inherited framework assumptions, the emitted supplier and +the unchanged p16/a7 caller give kappa `0.003129111`. The comparison is +PR6167's complete claim `0.003128645`. The direct word is PR6314's scalar +compression of PR6167. The source has 17,445 events. The new word has 17,452. + +Write `Z` for the zero subspace, frame ID 3, and `Omega` for the full +nine-dimensional space, frame ID 127. Frame ID 0 is not `Z`. +All frame labels below are literal IDs in the emitted word. +Let `H_r = r^(1-kappa)` and `H_0 = 0`. + +## Basis identity + +Let `A` be the source preparation map from the inputs in `Z` to their scalar +values at their first departures. A helper direction `h` has support only on +helpers that start in `Z` and finish in `Omega`. Choose a primary helper `p` +with `h_p = 1`. In each construction, the preparation never writes to `p`. +Let `a = A h`. Suppose the first destination frame for each nonzero component +of `a` contains one subspace `F`. + +Define + +```text +B = I + (h - e_p) e_p^T. +B^-1 = I - (h - e_p) e_p^T. +``` + +The square of `(h - e_p) e_p^T` is zero. Thus `B` is invertible and has +determinant one. It changes only helper inputs. The source endpoint is the +identity on these helpers, so it commutes with `B`. + +Start the existing independent input `x_p` in frame `F`. Omit its uses in the +initial preparation. This gives the response `A(x - e_p x_p)`. Deliver the +response `a x_p` at the stated later common frames. The sum is `A B x`. +Apply `B^-1` at the full output frame. This restores the source endpoint for +every input. No helper input is set to zero or replaced by a copy. + +This identity alone does not establish a legal schedule. The constructor +states every delivery, move and output correction. The replay checks the +actual source frame of every operand and all independent input columns. + +## Four directions and schedules + +The four supports of `h` are disjoint. Their basis matrices commute. +Every coefficient is dyadic. + +| Primary | New initial frame and basis | Input direction `h` | Departure response `a` | +| --- | --- | --- | --- | +| 496 | 595, `[52]` | `e496 - e639 - e643/2` | `h` | +| 649 | 597, `[82]` | `e649 - e648` | `h + e198` | +| 663 | 105, `[51]` | `e663 - e665` | `h + e179/2` | +| 508 | 1093, `[30,42,384]` | `e508 - e631 - e635/2` | `h` | + +The verifier computes each response from the full scalar chronology. +It does not accept the displayed responses without a check. +Frame 1093 is the intersection of frames 118 and 733. It has dimension three. +Each other listed common frame has dimension one. + +For primary 496, roles 639 and 643 first move from `Z` to frame 1027. +Role 496 first reaches frame 595 in the source. Replace these movements by: + +```text +at Z: 639 -= 2 * 643 + move 639 from Z to 1027 + move 643 from Z to 595 +at 595: 643 -= 496 / 2 + move 643 from 595 to 1027 +at 1027: 639 += 2 * 643 +``` + +Role 496 now starts at 595, so its old `Z -> 595` move is removed. +If roles 639 and 643 hold arbitrary values `v` and `z`, the displayed block +leaves `v - x496` and `z - x496/2`. The subtraction at `Z` removes the +carrier's old value from the later delivery. That value is not assumed zero. + +Use the same block for primary 508 with roles `(631,635)`, destination 118 +and intermediate frame 1093. Role 508 starts at 1093 and then moves to its +old first destination 733. No new owned field is used. + +For primary 649, add its value to role 198 when role 198 reaches frame 597. +Move role 648 to frame 120 before role 649 arrives there. Move 649 from 597 +to 120 and subtract it from 648. The original later move of 648 is removed. +The value of 649 is still its independent input at this subtraction. + +For primary 663, move role 179 to frame 105 before role 663 leaves it and +add half of 663 to 179. Move role 665 to frame 1051, then move 663 from 105 +to 1051 and subtract it from 665. Remove the two original later moves. +All later reads of roles 179 and 665 remain in their source order. + +At frame 127, emit the six inverse-basis additions: + +```text +639 += 496; 643 += 496/2; 648 += 649; +665 += 663; 631 += 508; 635 += 508/2. +``` + +`construct.py` guards all source event indices and all ten omitted initial +uses. It changes four initial frame declarations, appends frame 1093, +replaces twelve movement sites and appends the six output additions. +Every other event is copied. Protected contact events and frames 1091/1092 +remain fixed. + +## Exact scalar and native checks + +The unchanged checker replays all 770 arbitrary public inputs and all 29 owned +columns. Each helper has its required independent output. Each main output +has its required input and shear contribution. Every owned lifetime is +initialized and cleared at its declared frame. Peak ownership is 13. + +A separate reverse-chronology checker uses dense integer rows with binary +denominators. It checks all 799 columns and 638,401 endpoint coefficients. +The source and dense checks use different representations and directions. +Both are author checks made with credited predecessor code. + +The native checker lowers every distinct chart change to a signed Clifford +recipe. A separate exact phase representation checks its signed Pauli images +and global phase. The 2,930 distinct maps include the changed helper +normalizers. It also checks 208 free main adapters and 1,124 helper +normalizers. Its tensor argument applies at each positive tensor width. +No free native transition is inferred from scalar endpoint equality. + +Negative controls omit a carrier subtraction, reverse an injection, omit an +output correction, use the wrong input chart or intersection, or omit a +carrier move. Each fails the scalar or frame check. Native phase, caller +translation, missing price, missing target debit and damaged source controls +also fail. Explicit checks remain active with Python `-O`. + +## Paid and productive profiles + +Each of the three one-dimensional lifts has paid change `H4 - H5` and +target change `H8 - H9`. Its signed margin gain is + +```text +H5 + H8 - H4 - H9. +``` + +This is positive for `0 < kappa < 1`: strict concavity gives +`H5 - H4 > H9 - H8`. + +The three-dimensional lift has paid change +`H1 + H2 + H3 - H4 - H5` and target change `H6 - H9`. +Its signed margin gain is + +```text +H4 + H5 + H6 - H1 - H2 - H3 - H9. +``` + +The exact complete price establishes the required total gain at the tested +kappa. No claim of positivity for this last expression at every kappa is needed. + +The combined local paid change is +`H1 + H2 + H3 + 2 H4 - 4 H5`. The target change is +`H6 + 3 H8 - 4 H9`. Both rank totals decrease by six. +The general concave-order preflight is inconclusive for the complete bill: +its paid-minus-target hinge change is 18 at cap 1 and -108 at cap 5. +The claim therefore uses the exact power-moment checks below. + +| Rank | Local paid jobs | Local productive targets | +| --- | ---: | ---: | +| 1 | 2217 | 14 | +| 2 | 457 | 8 | +| 3 | 497 | 4 | +| 4 | 100 | 107 | +| 5 | 161 | 14 | +| 6 | 8 | 3 | +| 7 | 9 | 9 | +| 8 | 1 | 22 | +| 9 | 0 | 381 | + +The paid rank total is 5946. The scalar allowance is 127088. There are +770 independent public inputs, 29 owned labels and 32 owned lifetimes. + +## Complete caller and price + +The source p16/a7 caller is unchanged. Its literal Laurent replay checks all +boundary programs and all 18 forward local calls. The physical replay checks +7,488 contacts, all 53,248 central-square columns, main target phases and +every whole idle. Let `P_local` and `T_local` denote the table above. The +complete invoice is + +```text +P = 18 P_local + 1560 H1 + + 208 sum_(l in {7,8}) sum_(j=1..l) H_(8(j+1)), +T = 18 T_local + 208 H145 + + 208 sum_(l in {7,8}) sum_(j=1..l) H_(1+8(j+1)). +``` + +It has 66,780 paid calls and 13,444 productive fields. Its rank surplus is +760. The maximum paid and productive ranks are 72 and 145. Two independent +censuses agree with the emitted caller. The target debit is included in both. + +The strict raw crossing is in +`(0.00312911821812, 0.00312911821813)`. A rational derivative bound gives +uniqueness below the retained BIT cap `0.0034`. Two rational moment engines +give compatible intervals and a strict positive margin at +`TESTED = 0.003129116`. The old complete profile has a negative margin at +`KAPPA = 0.003129111`. + +The inherited strictification uses power 1024, cutoff 16, floor 17, tail +offset `1/7`, reserve `10^-12` and decay `125/128`. All completion, tail, +splitting and rounding inequalities pass with the new invoice. The compiler +gap is `1/1400000000`. The integer threshold exponent is 47005 and +`H = 65807000000000`, so its declared uniform threshold is `N = 2^H`. +The predecessor integer threshold fails the same test. No such large word +is materialized. + +The local scalar allowance plus the route and adapter allowance is below +`10^7`. The complete nonrecursive bound is 184647552, below the funded +budget `10^9`. It includes native helpers, adapters, routes, owned operations, +queries and caller boundaries. All 54 strict and four functional outer +predicates pass with the retained BIT admission. + +`pricing.py` is the exact PR6167 price program with four declared text edits: +the two new kappa constants, the previous claim, the paid call count and the +result labels. `PRICING-EDITS.json` binds these edits. The verifier rejects +any other price-program change. + +## Remaining obligations + +The five framework assumptions remain `native_all_columns`, `owned_erasure`, +`compiler`, `precision_tape` and `analytic_recovery`. Native replay verifies +this finite construction inside that framework. It does not remove those +assumptions. The rounded integer multiplier is not constructed or benchmarked. +No independent scientific review or selected-frontier change is claimed. + +The small gain does not establish that this mechanism scales to a large gain. +The published word and exact checks are the contribution. Finite discovery +screens are not lower bounds or proofs that other lifts are impossible. diff --git a/research/p104-native-input-lifting/README.md b/research/p104-native-input-lifting/README.md new file mode 100644 index 0000000000..cce28939e2 --- /dev/null +++ b/research/p104-native-input-lifting/README.md @@ -0,0 +1,94 @@ +# Four native helper input lifts + +This package gives conditional **kappa 0.003129111**, up from PR6167's +**0.003128645**. The increase is **0.000000466**, or about **0.0149%**. +This is a small gain. It does not meet the donor's request for a large gain. + +Four existing helper inputs start at later native frames. Exact scalar +corrections carry their correlated input directions to the source word. +An inverse helper basis at the output restores every independent input. +The four reduced productive targets are charged. The word still has +770 public inputs, 29 owned labels, 32 owned lifetimes and peak ownership 13. + +The exact source is the compressed PR6167 word in +[PR6314](https://github.com/CrocSwap/integer-mult-bounds/pull/6314), head +`36533d4d1b4e2dd8672427461b12de3001b85810`. PR6314 changes scalar cost but +does not change kappa. This package starts from canonical main +`626e936ce4d61f2584316914fc71baf96940c512`, priority revision 8. +[SOURCES.json](SOURCES.json) pins all five live inputs. The source reader +authenticates them before it imports any predecessor code. + +## Evidence and limits + +[PROOF.md](PROOF.md) gives the basis identity, each native edit, the complete +invoice and the inherited assumptions. [construct.py](construct.py) regenerates +all 17,452 events from the pinned source. [RESULT.json](RESULT.json) records +the exact scalar replay, a separate dense transpose, all 2,930 native maps +with absolute phases, the physical caller, two rational price engines, +compiler bounds and 54 strict plus four functional outer predicates. + +The raw crossing lies strictly in +`(0.00312911821812, 0.00312911821813)`. The previous complete profile fails +at the new claimed kappa. Thus the gain comes from the changed invoice. +It does not come from a smaller safety margin or omitted helper credit. + +All five framework assumptions remain: `native_all_columns`, `owned_erasure`, +`compiler`, `precision_tape` and `analytic_recovery`. The large uniform word +and rounded integer multiplier are not materialized. These are author checks; +they do not establish independent acceptance or practical speed. The selected +frontier remains unchanged. + +Coordination is in the +[canonical Discussion claim](https://github.com/CrocSwap/integer-mult-bounds/discussions/5645#discussioncomment-19205459). +The latest direct checks distinguish this input-boundary change from +Discussion5600's fixed-boundary public-prefix rewrite and Discussion5593's +tree caller. Protected contact events and frames 1091/1092 remain fixed. +The overlap cache had complete remote pagination; sparse local notes and +unpublished work remain coverage limits. + +## Reproduce + +Use Python 3.12 and the standard library. From the repository root: + +```sh +python3.12 -W error -B research/p104-native-input-lifting/verify.py +python3.12 -O -W error -B research/p104-native-input-lifting/verify.py +python3.12 scripts/research_package.py --package research/p104-native-input-lifting --check-only +python3.12 scripts/research_package.py --package research/p104-native-input-lifting +``` + +The final status is `PASS_P104_NATIVE_INPUT_LIFTING_KAPPA_003129111`. +The direct verifier creates a fresh bytecode-cache namespace before it imports +package or source modules. It writes no package files unless `--write` is +specified. It checks the decompressed word bytes, so gzip header differences +do not affect the certificate. `--build-only` checks the construction, exact +scalar endpoint, ownership and scalar controls; it does not check the full claim. + +An official export needs this package and the five inputs in +[VERIFY.json](VERIFY.json). The direct verifier also works without Git or +network access. The registered runner needs Git for provenance checks. + +## Open next questions + +Can several new correlated directions share one native input lift? Start with +one exact helper group and its departure map, then emit every correction and +charge the complete bill. The present finite searches do not prove optimality. + +Can a helper output basis support an extra native exit reduction? A bounded +output-direction screen found no accepted word. A new test needs a different +explicit basis or correction, an arbitrary-input proof and full pricing. +Check the live Discussion claims before work. [TASK.json](TASK.json) gives +the first steps and missing obligations for both questions. + +## Credit + +New work: Ali Romman with substantial OpenAI Codex assistance. No subagents. +The same assistant made the construction and the author checks. Apache-2.0. + +The direct word is by DreamingOfClouds, with Claude Opus 5.5 assistance, in +PR6314. It retains Ali Romman's PR6167 and the PR6144/6143 source work. +The unchanged checker and price chain retain Cinna Davis, David Arias, +Gareth Davidson, Jacob Alan Sussman, zxv, Cao Yifan, flyingviper, +Pierre-Loic Doulcet, Joel Pulikkan, Scratch-net and all earlier source credit. +[NOTICE](NOTICE) retains the source notice. No predecessor construction or +general basis identity is claimed as new. diff --git a/research/p104-native-input-lifting/RESULT.json b/research/p104-native-input-lifting/RESULT.json new file mode 100644 index 0000000000..467f941331 --- /dev/null +++ b/research/p104-native-input-lifting/RESULT.json @@ -0,0 +1,468 @@ +{ + "base_commit": "626e936ce4d61f2584316914fc71baf96940c512", + "complete_cost": { + "compiler": { + "H": 65807000000000, + "N": "2^65807000000000", + "eta": { + "lower": "0.000000118345460840316825594594", + "upper": "0.000000118345460840316825594595" + }, + "gap": "1/1400000000", + "integer_test_exponent": 47005, + "logarithm_power": 1024, + "theta": "63/64", + "uniform_saving": "21903807/7000000000", + "word_materialized": false + }, + "full_forward_calls": 18, + "gain": "233/500000000", + "kappa": "3129111/1000000000", + "kappa_decimal": "0.003129111", + "margin_at_previous": { + "lower": "0.114166232020664834808227839008", + "upper": "0.114166232020664834808227839009" + }, + "negative_controls": { + "old_BIT": "Rejected by outer inequalities", + "old_cutoff": "Rejected by completion-tail ratio greater than one", + "source_completion": "Rejected at cutoff17, floor18 and decay39/40", + "source_offset": "Rejected at cutoff16 with tail offset1/5" + }, + "nonrecursive": { + "fixed_scalar_growth_bound": "At most 2^(16*26000) before native factors; a declared constant, not an attained norm.", + "local_paid_rank_mass": 5946, + "local_routes": 5326000, + "local_scalar": 127088, + "peak_owned_fields": 13, + "raw_budget": 1000000000, + "raw_scalar_upper": 184647552, + "tensor_native_growth_bound": "Each rank-r Gaussian has row l1 norm at most 2^(rf); use local_paid_rank_mass for the whole word." + }, + "ordinary_BIT": { + "admitted": "17/5000", + "after_cover": "69/20000", + "atom": "1/250", + "before_cover": "3459/1000000", + "ordinary_saving": "8590884599/2500000000000", + "prime_rule": "odd q > 2^26*N^5 avoiding all fixed denominators and rank witnesses" + }, + "outer": { + "functional_checks": { + "actual_new_BIT_stock_sublinear": "348599999253/350000000000", + "fixed_halo_explicit_metadata_branch": "26950000001/350000000", + "new_BIT_row_stock_sublinear_in_active_group": "1395799997009/1400000000000", + "new_semantic_group_guard": "3/1400000000" + }, + "margins": { + "boundary_algebraic_matrix": "1916582236131013/612500000000000000", + "fused_gaussian": "1916582233393039/612500000000000000", + "global_coordinate_router": "21903797/7000000000", + "group_bit_router": "30665322734288609/9800000000000000000", + "group_scans": "699999999/700000000", + "main_transform": "1916581798631013/612500000000000000", + "microbox_face_corrections": "26950000001/350000000", + "polynomial_products": "1399999999/1400000000", + "sparse_union_movement": "250744707236131013/612500000000000000" + }, + "parameters": { + "a": "21903797/7000000000", + "b": "10951901/3500000000", + "beta": "1399999997/1400000000", + "bit_saving": "17/5000", + "cap_xi": "556994706798631013/612500000000000000", + "complex_uniform_saving": "21903807/7000000000", + "d": "1/1400000000", + "epsilon": "1399999999/1400000000", + "kappa": "3129111/1000000000", + "lambda_": "1993741773/2000000000", + "lambda_prime": "436131013/437500000", + "layout": "1/1400000000", + "q": "1368987/437500000", + "r0": "1/14000000000", + "stop": "1/1400000000", + "tested_saving": "782279/250000000" + }, + "strict_checks": { + "actual_bit_above_effective": "1896203/7000000000", + "actual_logarithmic_gamma_guard": "1/1400000000", + "actual_logarithmic_group_guard": "55505293857618987/306250000000000000", + "alpha_logarithm_absorption": "1/14000000000", + "boundary_algebraic_matrix_above_kappa": "1748631013/612500000000000000", + "cap_above_band": "250744706798631013/612500000000000000", + "cap_below_cell": "55505292763868987/612500000000000000", + "cap_below_phase_cell_power": "668005293201368987/612500000000000000", + "complex_above_effective": "1/1400000000", + "complex_below_one_over_32": "98423099/3500000000", + "complex_endpoint": "1/700000000", + "epsilon_below_one": "1/1400000000", + "epsilon_positive": "1399999999/1400000000", + "fine_prime_halo_umbrella": "7/2", + "fused_gaussian_above_kappa": "1745893039/612500000000000000", + "gaussian_above_main": "217381013/306250000000000000", + "global_coordinate_router_above_kappa": "1/350000000", + "global_gamma_power_slack": "9/14000000000", + "group_below_dimension": "1/700000000", + "group_bit_router_above_kappa": "34934288609/9800000000000000000", + "group_gauge_power_slack": "55505293835743987/306250000000000000", + "group_key_fits_record": "1/700000000", + "group_positive": "1399999997/1400000000", + "group_scans_above_kappa": "6978096213/7000000000", + "halo_covers_generic_inverse_radius": "5", + "improvement_over_user_baseline": "699070290400418148631/500000000000000000000000", + "lambda_above_internal": "1/2800000000", + "lambda_above_sigma": "3/2800000000", + "lambda_above_tau": "1/2800000000", + "lambda_prime_above_lambda": "1/2800000000", + "lambda_prime_above_leaf": "6989048099/4900000000000000000", + "leaf_saving_above_effective": "3489048099/4900000000000000000", + "main_transform_above_kappa": "1311131013/612500000000000000", + "membership_arithmetic_fits_record": "1/1400000000", + "microbox_face_corrections_above_kappa": "538978096243/7000000000", + "microbox_halo_volume": "110600000003/1400000000", + "new_complex_uniform_saving_above_b": "1/1400000000", + "new_semantic_guard_with_C1_one": "1/1400000000", + "polynomial_products_above_kappa": "3489048109/3500000000", + "positive_layout_slack": "1/1400000000", + "q_below_effective": "1/1400000000", + "q_below_internal": "1/1400000000", + "q_below_leaf": "6989048099/4900000000000000000", + "q_positive": "1368987/437500000", + "short_record_fallback": "3489048099/3500000000", + "source_axis_superpolynomial": "1/1400000000", + "sparse_union_movement_above_kappa": "248828126748631013/612500000000000000", + "stop_below_one": "1399999999/1400000000", + "stop_positive": "1/1400000000", + "strassen_integer_power_gap": "1951441519231", + "support_router_span": "3/1400000000", + "theta_positive_polynomial_power": "2", + "union_header_fits_record": "3/1400000000", + "union_tag_work_per_visit_fits_record": "3/1400000000" + } + }, + "paid": { + "1": 41466, + "16": 416, + "2": 8226, + "24": 416, + "3": 8946, + "32": 416, + "4": 1800, + "40": 416, + "48": 416, + "5": 2898, + "56": 416, + "6": 144, + "64": 416, + "7": 162, + "72": 208, + "8": 18 + }, + "paid_calls": 66780, + "previous_pr6167": "625729/200000000", + "productive_fields": 13444, + "query_shears": 15, + "rank_mass_surplus": 760, + "raw_ceiling": { + "derivative_upper": "-183709566445935704978840182941609952096373888509850921830221383/784637716923335095479473677900958302012794430558004314112", + "interval": [ + "0", + "17/5000" + ] + }, + "raw_headroom": [ + "180453/25000000000000", + "721813/100000000000000" + ], + "raw_root_interval": [ + "78227955453/25000000000000", + "312911821813/100000000000000" + ], + "relative_gain_percent": "9320/625729", + "strictification": { + "alpha": { + "lower": "0.999999997753741211225010509708", + "upper": "0.999999997753741211225010509709" + }, + "cutoff": 16, + "delta": { + "lower": "0.951057530932807200661841013951", + "upper": "0.951057530932807200661841013952" + }, + "floor": 17, + "gamma": { + "lower": "0.975667744092639322686002893166", + "upper": "0.975667744092639322686002893167" + }, + "normalized_paid_upper": "1048576000976562501/1048576001073741824", + "power": 1024, + "reserve": "1/1000000000000", + "tail_block": 128, + "tail_decay": "125/128", + "tail_offset": "1/7", + "tested": "782279/250000000" + }, + "targets": { + "1": 252, + "145": 208, + "17": 416, + "2": 144, + "25": 416, + "3": 72, + "33": 416, + "4": 1926, + "41": 416, + "49": 416, + "5": 252, + "57": 416, + "6": 54, + "65": 416, + "7": 162, + "73": 208, + "8": 396, + "9": 6858 + }, + "whole_idle_jobs": 3120 + }, + "controls": { + "damaged_research/p104-frontier-compression-2/WORD.json.gz": "Exact source SHA256: research/p104-frontier-compression-2/WORD.json.gz", + "damaged_research/p104-retained-operand-descent/SOURCES.json": "Exact source SHA256: research/p104-retained-operand-descent/SOURCES.json", + "damaged_research/p104-retained-operand-descent/inputs/pr5827-source.tar": "Exact source SHA256: research/p104-retained-operand-descent/inputs/pr5827-source.tar", + "damaged_research/p104-retained-operand-descent/pricing.py": "Exact source SHA256: research/p104-retained-operand-descent/pricing.py", + "damaged_research/p104-retained-operand-descent/sources.py": "Exact source SHA256: research/p104-retained-operand-descent/sources.py", + "missing_carrier_move": "Scalar destination and coefficient", + "missing_central_translation": "Rejected by the complete Laurent endpoint", + "missing_first_carrier_subtraction": "All public and owned rows", + "missing_output_basis": "All public and owned rows", + "missing_second_carrier_subtraction": "All public and owned rows", + "missing_target_debit": "Every productive helper has a native target", + "old_input_chart": "Common scalar chart", + "unpaid_carrier_move": "Complete field and call counts", + "wrong_649_injection": "All public and owned rows", + "wrong_663_injection": "All public and owned rows", + "wrong_intersection": "Nested chronological transport" + }, + "directions": [ + { + "basis": [ + 52 + ], + "departure_response": { + "496": "1", + "639": "-1", + "643": "-1/2" + }, + "frame": 595, + "input_direction": { + "496": "1", + "639": "-1", + "643": "-1/2" + }, + "primary": 496 + }, + { + "basis": [ + 82 + ], + "departure_response": { + "198": "1", + "648": "-1", + "649": "1" + }, + "frame": 597, + "input_direction": { + "648": "-1", + "649": "1" + }, + "primary": 649 + }, + { + "basis": [ + 51 + ], + "departure_response": { + "179": "1/2", + "663": "1", + "665": "-1" + }, + "frame": 105, + "input_direction": { + "663": "1", + "665": "-1" + }, + "primary": 663 + }, + { + "basis": [ + 30, + 42, + 384 + ], + "departure_response": { + "508": "1", + "631": "-1", + "635": "-1/2" + }, + "frame": 1093, + "input_direction": { + "508": "1", + "631": "-1", + "635": "-1/2" + }, + "primary": 508 + } + ], + "events": 17452, + "limits": [ + "All five inherited framework assumptions remain.", + "The uniform word and rounded multiplier are not materialized.", + "Author checks do not establish independent acceptance.", + "The selected frontier is unchanged." + ], + "local": { + "endpoint_coefficients": 638401, + "helpers": { + "1": 14, + "2": 8, + "3": 4, + "4": 107, + "5": 14, + "6": 3, + "7": 9, + "8": 22, + "9": 381 + }, + "owned_fields": 29, + "owned_lifetimes": 32, + "paid": { + "1": 2217, + "2": 457, + "3": 497, + "4": 100, + "5": 161, + "6": 8, + "7": 9, + "8": 1 + }, + "paid_rank_mass": 5946, + "peak_owned_fields": 13, + "public_inputs": 770, + "real_scalar_allowance": 127088 + }, + "native": { + "distinct_maps": 2930, + "helper_normalizers": 1124, + "helpers": { + "1": 14, + "2": 8, + "3": 4, + "4": 107, + "5": 14, + "6": 3, + "7": 9, + "8": 22, + "9": 381 + }, + "main_adapters": 208, + "proof": "Every signed Pauli image and exact global phase; frame induction at every positive tensor width", + "recipe_payload_sha256": "18631697cf96cfcd625fd0210939bc40f095657324730955d15719b9c7385513", + "wrong_phase_rejected": true + }, + "paid_delta": { + "1": 1, + "2": 1, + "3": 1, + "4": 2, + "5": -4 + }, + "physical_caller": { + "central_square_columns": 53248, + "full_calls": 18, + "main_targets": { + "145": 208, + "17": 416, + "25": 416, + "33": 416, + "41": 416, + "49": 416, + "57": 416, + "65": 416, + "73": 208 + }, + "new_paid_jobs": 0, + "physical_contacts": 7488, + "ports": 104, + "route_payload_sha256": "7f4f0ca768ffbc4f93dcff575592c4c67411f46b4289e45b73f715a2ad47b142", + "tensor_rule": "Factorwise native maps; scalar signs stay outside the tensor power.", + "whole_idle_jobs": { + "16": 416, + "24": 416, + "32": 416, + "40": 416, + "48": 416, + "56": 416, + "64": 416, + "72": 208 + }, + "wrapper_sites": [ + 1, + 3, + 5, + 7, + 9, + 11, + 13, + 15, + 17, + 19, + 21, + 23, + 25, + 27, + 29, + 31 + ] + }, + "separate_columns": { + "arithmetic": "Dense integer rows with binary denominators; reverse chronology", + "coefficients": 638401, + "columns": 799 + }, + "source_local": { + "endpoint_coefficients": 638401, + "helpers": { + "1": 14, + "2": 8, + "3": 4, + "4": 107, + "5": 14, + "6": 2, + "7": 9, + "8": 19, + "9": 385 + }, + "owned_fields": 29, + "owned_lifetimes": 32, + "paid": { + "1": 2216, + "2": 456, + "3": 496, + "4": 98, + "5": 165, + "6": 8, + "7": 9, + "8": 1 + }, + "paid_rank_mass": 5952, + "peak_owned_fields": 13, + "public_inputs": 770, + "real_scalar_allowance": 127042 + }, + "source_margin_upper_at_new_claim": "-21724354416852642076420555890660965661122037090691207971/196159429230833773869868419475239575503198607639501078528", + "status": "PASS_P104_NATIVE_INPUT_LIFTING_KAPPA_003129111", + "target_delta": { + "6": 1, + "8": 3, + "9": -4 + } +} diff --git a/research/p104-native-input-lifting/SOURCES.json b/research/p104-native-input-lifting/SOURCES.json new file mode 100644 index 0000000000..bc7876a86e --- /dev/null +++ b/research/p104-native-input-lifting/SOURCES.json @@ -0,0 +1,48 @@ +{ + "schema_version": 1, + "base_commit": "626e936ce4d61f2584316914fc71baf96940c512", + "files": [ + { + "path": "certificates/selected-result.json", + "usage": "provenance", + "git_blob": "d59b5035e7b4cbaa9d688a1d32dd0d6eb79c466a", + "sha256": "9b8d0eea95b3bf0dfcb7938a732a6439b87a2685dec2a5ab9e525b3b34debbfa" + }, + { + "path": "docs/research/agent-task-catalog.json", + "usage": "provenance", + "git_blob": "3404fbdd5e7529a0674eef26114b5071e4586cec", + "sha256": "ead6cdc9d0af6d58e8a49744d8ec8c7c15e13d2ba93c276c434bcf9b51b93a81" + }, + { + "path": "research/p104-frontier-compression-2/WORD.json.gz", + "usage": "input", + "git_blob": "cb3aed1d5604eb290f18759b37becaad428ac27a", + "sha256": "889f0f5d193d993dabee1e20dcfbcf63f9d88cfe5bd6973d564276c744d1e190" + }, + { + "path": "research/p104-retained-operand-descent/SOURCES.json", + "usage": "input", + "git_blob": "0c574b6026a7239aac7365c433d3760928748edb", + "sha256": "7c7b6fac64005eb8932283a902069d672d98c52bda2b63cc7eaa4a2cac13ce8f" + }, + { + "path": "research/p104-retained-operand-descent/inputs/pr5827-source.tar", + "usage": "input", + "git_blob": "1e10936044959f81a4c5fcd5bdb7b9e4c060ec8e", + "sha256": "7af5908a4d83e83e28f59523fd7494841f669b7295311cfdbc3027fa65c5826d" + }, + { + "path": "research/p104-retained-operand-descent/pricing.py", + "usage": "input", + "git_blob": "cd8220ca7a393f03341f08a93b9d1287f0bb3689", + "sha256": "bba1611b05b6cc35279aa1667dcc62ce0e7f27f0ba21f20eb68244fa772e0ae7" + }, + { + "path": "research/p104-retained-operand-descent/sources.py", + "usage": "input", + "git_blob": "bef6542243a082755a881dff42097434e6370609", + "sha256": "a62fefda1709614157ba440d38c164c366a8b3322ab8f866b6b4bd47b9d83dbc" + } + ] +} diff --git a/research/p104-native-input-lifting/TASK.json b/research/p104-native-input-lifting/TASK.json new file mode 100644 index 0000000000..608ca892aa --- /dev/null +++ b/research/p104-native-input-lifting/TASK.json @@ -0,0 +1,123 @@ +{ + "schema_version": 1, + "task_id": "p104-side-correction", + "priority_revision": 8, + "base_commit": "626e936ce4d61f2584316914fc71baf96940c512", + "original_card": { + "id": "p104-side-correction", + "question": "Can joint helper bases and a legal causal split improve the complete P104 productive/paid invoice?", + "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" + ], + "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." + ], + "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.", + "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." + }, + "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.", + "bottleneck_link": "Judge the actual current supplier contract and complete signed target/paid bill; frozen-profile ceilings require an applicability proof.", + "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." + ], + "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." + ], + "overlap_terms": [ + "P104", + "helper basis", + "helper split", + "5718", + "dyadic capacity" + ], + "existing_checks": [ + { + "scope": "PR #4133: literal-slot defect", + "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.", + "status": "author-checked", + "source_commit": "88666f1dee93fbd85b31fd5d6f91a219e111b5f4", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4136: uniform commutation gap", + "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.", + "status": "author-checked", + "source_commit": "281ce601a8be9db470de630759179c23e1dfaa88", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4140: uniform encoding gap", + "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.", + "status": "author-checked", + "source_commit": "de25c6525aa866962309df5d107b32d55e6e5628", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4153: source-chart shortcut exhausts its optimistic allowance", + "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.", + "status": "author-checked", + "source_commit": "9123241fea53df77e51ffe30d9aca1625d4bf3a8", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "PR #4154: fiber-tag seam mismatch", + "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.", + "status": "author-checked", + "source_commit": "4ffcdaee5d6255a9cea1fe53a5424435068089d0", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + }, + { + "scope": "Selected PR5599: complete helper-subspace construction and independent caller replay; five framework assumptions remain.", + "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.", + "status": "reviewed", + "source_commit": "09dd0965711ca7eeb169057a420abab1c9052137", + "selected_record_sha256": "2a0220e866417774606e0f991e41b9c1d26b1f43b97857238cf478dbc7d330b5" + } + ] + }, + "scope_status": "changed", + "actual_scope": "Lift four existing independent helper inputs to native subspaces on the exact PR6314 word; emit the inverse helper basis and charge the reduced targets and complete caller.", + "scope_change_reason": "The retained-operand extension found a distinct boundary mechanism. This preserves all independent inputs but changes four initial native charts. The live claim records the change and excludes concurrent fixed-boundary stop removal and tree callers.", + "bottleneck_link": "The complete signed target and paid invoice improves. Each changed helper target is debited before strictification and compiler checks.", + "budget_minutes": 240, + "stop_rule": "Reject a candidate if any arbitrary-input, native, ownership or complete-cost check fails. Submit one source-bound positive word with all required checks.", + "outcome": "completed", + "evidence": "PROOF.md, WORD.json.gz, RESULT.json and the registered verifier", + "author": "Ali Romman", + "ai_assistance": "Substantial OpenAI Codex assistance. No subagents. The same assistant made the construction and the author checks.", + "open_questions": [ + { + "question": "Can a larger set of correlated helper directions share one native input lift?", + "why_it_matters": "The four present directions give a small improvement. More directions could change the complete invoice further.", + "first_step": "Pin this word, check the live Discussion scopes, and compute exact departure responses for one new helper group. Then construct all scalar corrections and price every target debit.", + "blocked_by": "A complete arbitrary-input word and its full native and caller checks are required." + }, + { + "question": "Can a helper output basis support an additional native exit reduction?", + "why_it_matters": "The source has a separate final scalar map. Its useful directions need not equal the input directions.", + "first_step": "Check the current Discussion5645 claim and test one exact output direction with explicit initial restoration and reduced productive targets.", + "blocked_by": "The bounded output-direction screen found no accepted word. A broader exact exit construction and complete price remain open." + } + ] +} diff --git a/research/p104-native-input-lifting/VERIFY.json b/research/p104-native-input-lifting/VERIFY.json new file mode 100644 index 0000000000..24021f331c --- /dev/null +++ b/research/p104-native-input-lifting/VERIFY.json @@ -0,0 +1,38 @@ +{ + "schema_version": 1, + "status": "ready", + "python": "3.12", + "requirements": [], + "inputs": [ + "research/p104-frontier-compression-2/WORD.json.gz", + "research/p104-retained-operand-descent/SOURCES.json", + "research/p104-retained-operand-descent/inputs/pr5827-source.tar", + "research/p104-retained-operand-descent/pricing.py", + "research/p104-retained-operand-descent/sources.py" + ], + "commands": [ + { + "argv": [ + "{python}", + "-W", + "error", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 600, + "checks": "Exact regeneration and helper bases; all 799 columns; ownership; every native map and phase; full caller; two interval engines; complete costs; compiler; 58 outer predicates; semantic and source controls." + }, + { + "argv": [ + "{python}", + "-O", + "-W", + "error", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 600, + "checks": "Repeat the full check with Python assertions disabled." + } + ] +} diff --git a/research/p104-native-input-lifting/WORD.json.gz b/research/p104-native-input-lifting/WORD.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..f21f7ac451c3f2e1ae8d5ca1dcad839a0b0d844f GIT binary patch literal 84197 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 z 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 kIX@Vr+e{8 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 z 1: + m=(lo+hi)//2 + if margin(Q(m,grid))[0] > 0: + lo=m + else: + hi=m + lower,upper = Q(lo,grid),Q(hi,grid) + signed = Counter(T) + signed.subtract(P) + cap = Q('.0034') + derivative_upper = Q(0) + for rank, count in signed.items(): + logarithm = E.log_bounds(rank) + low = E.mul(E.power(rank, 1-cap), logarithm)[0] + high = rank*logarithm[1] + derivative_upper -= count*(low if count >= 0 else high) + L.need(derivative_upper < 0, 'Unique raw crossing below the retained BIT cap') + L.need(margin(lower)[0] > 0 and margin(upper)[1] < 0, 'Strict rational crossing enclosure') + L.need(PREVIOUS < KAPPA < TESTED < lower and margin(PREVIOUS)[0] > 0, 'Changed complete bill improves the source claim') + t,u,v,c,b = 1-TESTED,Q(1,7),1024,16,17 + target,paid = E.moment(T,t),E.moment(P,t) + tl,th = other.moment(T,TESTED) + pl,ph = other.moment(P,TESTED) + L.need(tl > ph and max(tl,target[0]) <= min(th,target[1]) and max(pl,paid[0]) <= min(ph,paid[1]), 'Two exact moment engines') + alpha = E.divide(paid,target) + gamma = E.divide(E.moment(P,t+u),E.mul(E.power(c,u),target)) + delta = E.divide((Q(sum(T.values())*b),)*2,E.mul(E.power(c,TESTED),target)) + reserve,decay = Q(1,10**12),Q(125,128) + L.need(alpha[1] < 1-reserve and gamma[1] < decay and delta[1] < decay, 'All three charged tail ratios') + L.need(decay**128 < Q(1,16), 'Both tail decay blocks') + normalized = 1/(1+v*reserve)+Q(4,2**32) + L.need(normalized < 1 and c**64 < b**63, 'Full completion, splitting and rounding charges') + theta,power = Q(63,64),1024 + eta = E.scale(E.power(145,-v*TESTED),t) + L.need(2*(c**v)**64 <= (145**v)**63 and eta[0] > theta**power, 'Shifted exits and complement capacity') + L.need(E.power(145,v*TESTED)[1] < 2**power, 'Compiler initial range') + gap = (TESTED-KAPPA)/7 + L.need(gap.numerator == 1, 'Exact compiler integer grid') + step = gap.denominator + def wins(j): + return (step*j+1)**power < 2**j + left,right=1,2 + while not wins(right): + left,right=right,2*right + while right-left > 1: + m=(left+right)//2 + if wins(m): + right=m + else: + left=m + H=step*right + L.need(H > 8*v and wins(right) and not wins(right-1), 'Finite uniform threshold with predecessor rejection') + local_routes = (sum(local['paid'].values())+native['helper_normalizers']+native['main_adapters']+4*104+4*local['owned_lifetimes'])*1000 + L.need(local['real_scalar_allowance']+local_routes < 10**7, 'Every local scalar, route and owned operation is funded') + boundary = sum(len(word['boundaries'][side+'_program']) for side in ('left','right')) + raw = 18*10**7 + 15*1664 + 32*104*(len(word['physical_events'])+boundary) + raw += 32*104*(26+1000) + L.need(raw < 10**9, 'Complete nonrecursive raw bound') + bit = L.read(L.ROOT/'research/query-thinned-controllers/RESULT.json')['ordinary_BIT'] + atom = Q(bit['atom']) + ordinary=(1-atom)*Q(bit['after_cover'])+atom*Q('.0000384599') + admitted=Q(bit['admitted']) + L.need(atom > ordinary > admitted > TESTED and atom < 1-ordinary, 'Retained BIT admission and stock') + outer_module=L.load(L.ROOT/'research/pr4359-p7-padding/dependencies/compiler-refill/endpoint.py','p104_productive_outer') + params={'kappa':KAPPA,'tested_saving':TESTED,'complex_uniform_saving':KAPPA+6*gap, + 'b':KAPPA+5*gap,'a':KAPPA+4*gap,'q':KAPPA+3*gap,'bit_saving':admitted, + 'epsilon':1-gap,'beta':1-3*gap,'r0':gap/10,'stop':gap,'layout':gap,'d':gap} + outer=outer_module.ledger(params) + outer['functional_checks']['actual_new_BIT_stock_sublinear']=params['beta']*(1-atom) + L.need(len(outer['strict_checks']) == 54 and len(outer['functional_checks']) == 4, 'Complete outer predicate inventory') + L.need(all(x > 0 for key in ('strict_checks','functional_checks') for x in outer[key].values()), 'All outer inequalities strict') + wrong_cutoff = E.divide((Q(sum(T.values())*21),)*2,E.mul(E.power(20,TESTED),target)) + L.need(wrong_cutoff[0] > 1, 'Old cutoff fails with this helper inventory') + old_completion = E.divide((Q(sum(T.values())*18),)*2,E.mul(E.power(17,TESTED),target)) + L.need(old_completion[0] > Q(39,40), 'PR5718 completion-tail bound fails with the new target count') + old_offset = E.divide(E.moment(P,t+Q(1,5)),E.mul(E.power(16,Q(1,5)),target)) + L.need(old_offset[0] > decay, 'The old tail offset fails at the new cutoff') + bad=outer_module.ledger(dict(params,bit_saving=Q('.0027'))) + L.need(any(x <= 0 for x in bad['strict_checks'].values()), 'Insufficient BIT contract rejected') + return encode({'kappa':KAPPA,'kappa_decimal':'0.003129111','previous_pr6167':PREVIOUS,'gain':KAPPA-PREVIOUS, + 'relative_gain_percent':100*(KAPPA/PREVIOUS-1),'raw_root_interval':[lower,upper], + 'raw_headroom':[lower-KAPPA,upper-KAPPA], + 'raw_ceiling':{'interval':[Q(0),cap],'derivative_upper':derivative_upper},'margin_at_previous':E.display(margin(PREVIOUS)), + 'targets':T,'paid':P,'productive_fields':sum(T.values()),'paid_calls':sum(P.values()), + 'rank_mass_surplus':760,'full_forward_calls':18,'query_shears':15,'whole_idle_jobs':3120, + 'strictification':{'tested':TESTED,'power':v,'cutoff':c,'floor':b,'tail_offset':u,'reserve':reserve,'tail_decay':decay,'tail_block':128, + 'alpha':E.display(alpha),'gamma':E.display(gamma),'delta':E.display(delta),'normalized_paid_upper':normalized}, + 'compiler':{'theta':theta,'logarithm_power':power,'eta':E.display(eta),'gap':gap,'H':H,'N':'2^'+str(H), + 'integer_test_exponent':right,'uniform_saving':params['complex_uniform_saving'],'word_materialized':False}, + 'nonrecursive':{'local_scalar':local['real_scalar_allowance'],'local_routes':local_routes, + 'raw_scalar_upper':raw,'raw_budget':10**9,'peak_owned_fields':local['peak_owned_fields'], + 'fixed_scalar_growth_bound':'At most 2^(16*26000) before native factors; a declared constant, not an attained norm.', + 'local_paid_rank_mass':local['paid_rank_mass'], + 'tensor_native_growth_bound':'Each rank-r Gaussian has row l1 norm at most 2^(rf); use local_paid_rank_mass for the whole word.'}, + 'ordinary_BIT':bit,'outer':outer, + 'negative_controls':{'source_completion':'Rejected at cutoff17, floor18 and decay39/40', + 'source_offset':'Rejected at cutoff16 with tail offset1/5', + 'old_cutoff':'Rejected by completion-tail ratio greater than one','old_BIT':'Rejected by outer inequalities'}}) diff --git a/research/p104-native-input-lifting/support.py b/research/p104-native-input-lifting/support.py new file mode 100644 index 0000000000..b528d2a451 --- /dev/null +++ b/research/p104-native-input-lifting/support.py @@ -0,0 +1,70 @@ +"""Read the pinned word and open the unchanged checker chain. + +Prepared by Ali Romman with substantial OpenAI Codex assistance. Apache-2.0. +The archive reader and checker chain retain the credits in NOTICE. +""" +from contextlib import ExitStack, contextmanager +from hashlib import sha1, sha256 +from pathlib import Path +import gzip +import importlib.util +import json +import sys + +HERE = Path(__file__).resolve().parent +ROOT = HERE.parents[1] +SOURCE = 'research/p104-retained-operand-descent/' +WORD = 'research/p104-frontier-compression-2/WORD.json.gz' +INPUTS = {WORD, *(SOURCE + name for name in + ('sources.py', 'SOURCES.json', 'inputs/pr5827-source.tar', 'pricing.py'))} + + +def need(ok, message): + if not ok: + raise ValueError(message) + + +def read(path): + raw = Path(path).read_bytes() + return json.loads(gzip.decompress(raw) if str(path).endswith('.gz') else raw) + + +def load(path, name): + spec = importlib.util.spec_from_file_location(name, path) + module = importlib.util.module_from_spec(spec) + sys.modules[name] = module + spec.loader.exec_module(module) + return module + + +def authenticate(raw, pin): + need(sha256(raw).hexdigest() == pin['sha256'], 'Exact source SHA256: ' + pin['path']) + blob = b'blob ' + str(len(raw)).encode() + b'\0' + raw + need(sha1(blob).hexdigest() == pin['git_blob'], 'Exact source Git blob: ' + pin['path']) + + +def inputs(): + pins = [pin for pin in read(HERE / 'SOURCES.json')['files'] if pin['usage'] == 'input'] + need(len(pins) == len(INPUTS) and {p['path'] for p in pins} == INPUTS, + 'Complete live source inventory') + out = {} + for pin in pins: + raw = (ROOT / pin['path']).read_bytes() + authenticate(raw, pin) + out[pin['path']] = raw + return out + + +@contextmanager +def checkers(): + inputs() + source = load(ROOT / SOURCE / 'sources.py', 'lift_source_reader') + with ExitStack() as contexts: + parent = contexts.enter_context(source.sources()) + cursor = contexts.enter_context(load(parent / 'sources.py', 'lift_source_top').sources()) + for depth in range(7): + reader = load(cursor / 'sources.py', 'lift_source_' + str(depth)) + cursor, root = contexts.enter_context(reader.sources()) + local = load(parent / 'local.py', 'local') + local.ROOT = root + yield local, root diff --git a/research/p104-native-input-lifting/verify.py b/research/p104-native-input-lifting/verify.py new file mode 100644 index 0000000000..70b3beae8f --- /dev/null +++ b/research/p104-native-input-lifting/verify.py @@ -0,0 +1,209 @@ +"""Check the four lifts, native maps, complete price and compiler. + +Prepared by Ali Romman with substantial OpenAI Codex assistance. Apache-2.0. +The unchanged proof engines and source word retain the credits in NOTICE. +""" +from collections import Counter +from copy import deepcopy +from fractions import Fraction as Q +from pathlib import Path +import gzip +import json +import sys +import tempfile + +sys.dont_write_bytecode = True +HERE = Path(__file__).resolve().parent +STATUS = 'PASS_P104_NATIVE_INPUT_LIFTING_KAPPA_003129111' +PROTECTED = {41, 42, 65, 106, 240, 400, 401, 403, 405, 410, 741, + 57, 81, 92, 224, 225, 227, 229, 234, 742} +DIRECTIONS = [ + (496, {496: '1', 639: '-1', 643: '-1/2'}, + {496: '1', 639: '-1', 643: '-1/2'}), + (649, {649: '1', 648: '-1'}, {649: '1', 648: '-1', 198: '1'}), + (663, {663: '1', 665: '-1'}, {663: '1', 665: '-1', 179: '1/2'}), + (508, {508: '1', 631: '-1', 635: '-1/2'}, + {508: '1', 631: '-1', 635: '-1/2'}), +] + + +def reject(action): + try: + action() + except ValueError as error: + return str(error) + raise ValueError('Invalid control accepted') + + +def delta(after, before): + out = Counter(after) + out.subtract(before) + return {rank: count for rank, count in out.items() if count} + + +def protected_events(word): + return [e for e in word['program'] if e[1] in PROTECTED or + (e[0] in ('ADD', 'COPY') and e[2] in PROTECTED)] + + +def preparation(L, source, word): + records = [] + occupied = set() + main = set(source['live']) | {r + 112 for r in source['live']} + for primary, h, a in DIRECTIONS: + h, a = ({r: Q(q) for r, q in row.items()} for row in (h, a)) + L.need(h[primary] == a[primary] == 1 and not occupied.intersection(h), + 'Independent unit input directions') + occupied.update(h) + L.need(all(r not in main | PROTECTED and source['initial'][r] == 3 and + source['final'][r] == 127 for r in h), 'Only full helper inputs in each basis') + values = [h.get(r, Q(0)) for r in range(source['public'] + source['owned_fields'])] + departures, first = {}, {} + for event in source['program']: + op, r = event[:2] + if op == 'MOVE' and event[2] == 3 and not event[4]: + L.need(r not in first, 'One departure from the initial chart') + first[r] = event[3] + if values[r]: + departures[r] = values[r] + elif op in ('INIT', 'CLEAR'): + values[r] = Q(0) + elif op == 'SCALE': + values[r] *= Q(event[2]) + elif op == 'COPY': + values[r] = Q(event[3]) * values[event[2]] + elif op == 'ADD': + values[r] += Q(event[3]) * values[event[2]] + L.need(departures == a, 'Exact initial preparation response') + frame = word['initial'][primary] + common = L.span(word['frames'][frame]) + L.need(all(common <= L.span(source['frames'][first[r]]) for r in a), + 'Common native input subspace') + records.append({'primary': primary, 'frame': frame, 'basis': word['frames'][frame], + 'input_direction': h, 'departure_response': a}) + return records + + +def word_controls(L, word): + controls = {} + bad = deepcopy(word) + bad['initial'][496] = 3 + controls['old_input_chart'] = reject(lambda: L.replay(bad)) + edits = [ + ('missing_first_carrier_subtraction', ['ADD', 639, 643, '-2', 3], None), + ('missing_second_carrier_subtraction', ['ADD', 631, 635, '-2', 3], None), + ('wrong_649_injection', ['ADD', 198, 649, '1', 597], ['ADD', 198, 649, '-1', 597]), + ('wrong_663_injection', ['ADD', 179, 663, '1/2', 105], ['ADD', 179, 663, '-1/2', 105]), + ('missing_output_basis', ['ADD', 635, 508, '1/2', 127], None), + ('missing_carrier_move', ['MOVE', 635, 3, 1093, False], None), + ] + for label, event, replacement in edits: + bad = deepcopy(word) + L.need(bad['program'].count(event) == 1, 'Unique control event: ' + label) + i = bad['program'].index(event) + bad['program'][i:i+1] = [] if replacement is None else [replacement] + controls[label] = reject(lambda: L.replay(bad)) + bad = deepcopy(word) + bad['frames'][1093] = [1, 2, 4] + controls['wrong_intersection'] = reject(lambda: L.replay(bad)) + return controls + + +def run(build_only): + from support import SOURCE, WORD, authenticate, checkers, inputs, load, need, read + from construct import construct, payload + + raw = inputs() + source = json.loads(gzip.decompress(raw[WORD])) + word = construct(source) + need(gzip.decompress((HERE / 'WORD.json.gz').read_bytes()) == payload(word), + 'Every regenerated payload byte') + need(all(type(e[4]) is bool for e in word['program'] if e[0] == 'MOVE'), + 'Boolean ownership flags') + need(protected_events(word) == protected_events(source) and + word['frames'][1091:1093] == source['frames'][1091:1093], + 'Protected events and frames unchanged') + text = raw[SOURCE + 'pricing.py'].decode() + for before, after in read(HERE / 'PRICING-EDITS.json'): + need(text.count(before) == 1, 'Unique declared price edit') + text = text.replace(before, after) + need(text == (HERE / 'pricing.py').read_text(), 'Exact declared price edits') + with checkers() as (L, root): + directions = preparation(L, source, word) + baseline, local = L.replay(source), L.replay(word) + paid_delta, target_delta = delta(local['paid'], baseline['paid']), delta(local['helpers'], baseline['helpers']) + need(paid_delta == {1: 1, 2: 1, 3: 1, 4: 2, 5: -4}, 'Exact local paid change') + need(target_delta == {6: 1, 8: 3, 9: -4}, 'Exact productive target debit') + need(tuple(local[k] for k in ('public_inputs', 'owned_fields', 'owned_lifetimes', + 'peak_owned_fields', 'real_scalar_allowance', 'paid_rank_mass')) == + (770, 29, 32, 13, 127088, 5946), 'Exact local inventory') + controls = word_controls(L, word) + print('PASS regeneration, input bases, arbitrary inputs, ownership and controls', flush=True) + if build_only: + return None + columns = L.reverse_columns(word) + need(columns['columns'] == 799 and columns['coefficients'] == 638401, + 'Every input column and output coefficient') + print('PASS separate dense transpose', flush=True) + native = L.native(word) + C = load(root / 'research/p104-productive-controller/caller.py', 'lift_caller') + caller = C.construct() + need(caller == read(root / 'research/p104-productive-controller/CONTROLLER.json'), + 'Exact physical caller') + physical = C.physical(caller, word) + print('PASS native maps, absolute phases and complete physical caller', flush=True) + P = load(HERE / 'pricing.py', 'lift_price') + price = P.run(local, native, caller, physical) + need(price['raw_root_interval'] == + ['78227955453/25000000000000', '312911821813/100000000000000'], + 'Exact rational crossing interval') + E = load(root / 'research/higher-moment-strictification/verify.py', 'lift_comparison') + old_paid = {int(r): n for r, n in price['paid'].items()} + old_targets = {int(r): n for r, n in price['targets'].items()} + for before, change in ((old_paid, paid_delta), (old_targets, target_delta)): + for rank, count in change.items(): + before[rank] -= 18 * count + old_margin = E.moment(old_targets, 1 - P.KAPPA)[1] - E.moment(old_paid, 1 - P.KAPPA)[0] + need(old_margin < 0, 'The full source profile fails at the new claim') + controls.update(C.controls(caller)) + bad = deepcopy(local) + bad['paid'][3] -= 1 + controls['unpaid_carrier_move'] = reject(lambda: P.assemble(bad, native, caller, physical)) + bad = deepcopy(local) + bad['helpers'][9] += 1 + bad['helpers'][6] -= 1 + controls['missing_target_debit'] = reject(lambda: P.assemble(bad, native, caller, physical)) + for pin in read(HERE / 'SOURCES.json')['files']: + if pin['usage'] == 'input': + data = raw[pin['path']] + controls['damaged_' + pin['path']] = reject( + lambda data=data, pin=pin: authenticate(bytes([data[0] ^ 1]) + data[1:], pin)) + print('PASS two interval engines, complete costs, compiler, outer checks and controls', flush=True) + return P.encode(dict( + status=STATUS, base_commit=read(HERE / 'SOURCES.json')['base_commit'], + events=len(word['program']), directions=directions, source_local=baseline, local=local, + paid_delta=paid_delta, target_delta=target_delta, separate_columns=columns, native=native, + physical_caller=physical, complete_cost=price, source_margin_upper_at_new_claim=old_margin, + controls=controls, + limits=['All five inherited framework assumptions remain.', + 'The uniform word and rounded multiplier are not materialized.', + 'Author checks do not establish independent acceptance.', + 'The selected frontier is unchanged.'])) + + +def main(): + with tempfile.TemporaryDirectory(prefix='native-input-lift-cache-') as cache: + sys.pycache_prefix = cache + sys.path.insert(0, str(HERE)) + from support import need, read + result = run('--build-only' in sys.argv) + if result is not None: + if '--write' in sys.argv: + (HERE / 'RESULT.json').write_text(json.dumps(result, sort_keys=True, indent=2) + '\n') + else: + need(read(HERE / 'RESULT.json') == result, 'Exact retained result') + print(STATUS + ('_BUILD' if result is None else ''), flush=True) + + +if __name__ == '__main__': + main()