From f4d24e427a9234b199be72c5a0d3a2ad7f4330b3 Mon Sep 17 00:00:00 2001 From: JoyboyBrian <122925040+JoyboyBrian@users.noreply.github.com> Date: Sat, 24 Oct 2026 21:30:30 -0700 Subject: [PATCH 1/2] Close the actual whole-array cell0 carry edge without OLD adapters --- .../bit-cellzero-old-elimination/PROOF.md | 207 +++++++ .../bit-cellzero-old-elimination/README.md | 63 ++ .../bit-cellzero-old-elimination/RESULT.json | 553 ++++++++++++++++++ .../bit-cellzero-old-elimination/SOURCES.json | 60 ++ .../TABLE.json.gz | Bin 0 -> 38615 bytes .../bit-cellzero-old-elimination/TASK.json | 80 +++ .../bit-cellzero-old-elimination/VERIFY.json | 42 ++ .../bit-cellzero-old-elimination/kernel.py | 122 ++++ .../bit-cellzero-old-elimination/loader.py | 48 ++ .../bit-cellzero-old-elimination/verify.py | 150 +++++ 10 files changed, 1325 insertions(+) create mode 100644 research/bit-cellzero-old-elimination/PROOF.md create mode 100644 research/bit-cellzero-old-elimination/README.md create mode 100644 research/bit-cellzero-old-elimination/RESULT.json create mode 100644 research/bit-cellzero-old-elimination/SOURCES.json create mode 100644 research/bit-cellzero-old-elimination/TABLE.json.gz create mode 100644 research/bit-cellzero-old-elimination/TASK.json create mode 100644 research/bit-cellzero-old-elimination/VERIFY.json create mode 100644 research/bit-cellzero-old-elimination/kernel.py create mode 100644 research/bit-cellzero-old-elimination/loader.py create mode 100644 research/bit-cellzero-old-elimination/verify.py diff --git a/research/bit-cellzero-old-elimination/PROOF.md b/research/bit-cellzero-old-elimination/PROOF.md new file mode 100644 index 0000000000..b1e6728c29 --- /dev/null +++ b/research/bit-cellzero-old-elimination/PROOF.md @@ -0,0 +1,207 @@ +# Actual whole-array cell0 carry without the two OLD adapters + +## 1. Exact source and changed premise + +The pinned helper462/frame506 matcher is S8, lifted as A=S8 tensor I_f, +N=8f, D=N², q an odd prime, w>=2, Q=q^(w-1), b=ceil(log2 q). +Exact rational inspection gives + + S8[:,0]=2e5, S8^-1[:,0]=e4, + A[:,0]=2e_(5f), A^-1[:,0]=e_(4f). + +Consequently, in row0, the forward new low cell0 is 2u mod q and its +high carry is floor(2u/q) in {0,1}, u=G0[0,5f]. The inverse low cell0 is +v=G0[0,4f] and its carry is zero. These statements hold for every low matrix, +hence every invertible G0 and every lane count f. No rational-quarter case +occurs in this column. The independent source check computes S8^-1 and checks +the columns; the tensor identity is the all-f proof. Inverse here means the +actual inverse LOW factor; it is not the inverse of the isolated forward carry +layer without that factor's other high operations. + +PR3343 already implements bounded signed one-axis rotation by encoded splits +and two monotone buckets, with a paid source-level O(BQS+I) proof. We reuse that +geometry and credit it. A proposed new arbitrary-offset primitive was withdrawn: +this actual column never has an unbounded carry. The missing task in PR5332 +and PR5487 is the physical source-to-consumer join. This package supplies a +literal whole-T array controller, not a new rotation algorithm. + +## 2. Whole-T contract + +Let T be a positive runtime count, d a fixed positive compile-time fiber depth, +Z a positive runtime spectator extent, S=Q^(d-1)Z, H=QS, V=TH. The compiler +parameters are q,f,d and direction; default d=D. Its input banks are: + +- one marked Boolean payload in lexicographic [T]×[Q]^d×[Z] order, length V; +- one marked old-low cache, T successive row-major N×N low matrices, each digit + encoded in exactly b LSB-first bits, total TDb bits; +- canonical marked positive binary T,Q,Z descriptors; +- distinct owned blank work banks and a blank low0-output bank. + +All input heads start at their first data cell. Marks use the retained literal +machine alphabet. The actual application sets d=D, T=|GL_N(F_q)|, Q=q^(w-1), +and takes the existing complete cache in the same low-type order as its payload. +It does not require per-fiber markers, supplied S/H counts, a free transpose, +a callback, a free gather, a type lookup or an OLD oracle. Each cache record +need only be correctly paired with its payload fiber; GL enumeration is not +performed by the running machine. GL membership is a source premise, not a +validation claim. The generic contract also permits other positive Q and d; +reduced fixtures using it are labelled and do not materialize GL8 payloads. + +The result in the **same original payload owner** is + + out[t,(x+C_t mod Q),z] = in[t,x,z], 0<=z=q, writes its new-low + result to the advancing low0-output bank, and chooses the C=0/1 branch. + Every branch then advances to the next cache record, paying exactly the + fixed record traversal. It neither changes nor retires the old cache. +3. Start split lengths (Q,0). For C=1 one literal transfer gives (Q-1,1). + Split the local bank into its first (Q-C)S and last CS bits. Emit the latter + then the former into a separate local output, consuming the buckets. This + is precisely the bounded PR3343 geometry, implemented by PR2776 microcode. + For C=0 it still makes and accounts for distinct local output. +4. Copy the complete local output to the advancing global output bank. Erase + all local banks, their markers and both split lengths. Advance the type + counter. Global source/cache positions now begin the next paired fiber. + +The loop invariant is: the first t output fibers have the stated permutation, +the first t low0 digits have been emitted, global source/cache heads have moved +by tH and tDb, all earlier private fibers are blank, and old cache/source bytes +are unchanged. Each step preserves it. At t=T the code checks the two global +input endpoints, closes and rewinds the output, cache and low0 result, rewinds +the original source, then overwrites that same source by a sequential consuming +copy of the global output. It erases the global output including its marker, +restores the source head, and erases all persistent counters. The final owner +identity is unchanged; no later owner swap or disposal is left implicit. + +`initialize_actual_T` supplies an optional literal initializer for the actual +fixed T=product_(i=0)^(N-1)(q^N-q^i). It writes that compiled constant into a +blank descriptor using <=4 bit_length(T)+6 transitions and then returns the +head. Since bit_length(T)<=Db, its cost is <=4Db+6. It enumerates no matrices. +Its one tape can be mapped to the controller's T input. If the caller already +owns that descriptor, initialization is not repeated. + +## 4. Complete conservative tariffs + +Let d>=1, V=TQ^d Z, and K=TDb. For the literal table, including descriptor +conversion/product construction, every full-array pass, staging, installation, +rewind and private erasure, the following intentionally loose bounds hold: + + transitions <= 2048(d+1)V + 32K + 256(d+1), + visited cells <= (d+20)V + 2K + 128(d+1). + +These are not measured-fit constants. Here is a sufficient path-count ledger. +The retained converter costs c(n)=24n-7 popcount(n)+15 bit_length(n)+12<=44n. +A retained S-bit record copy costs at most 12S+4; its unary length loop and +rewind add at most 6k+7 to k records, so one segment costs <=22kS+7 for k>0, +and <=7 when k=0. Every rewind of a marked tape at relative position h is +3h transitions. Backward erasure through the origin costs <=4(h+1). + +- All initial unary conversions and the nested suffix construction fit + 256(d+1)V. Each of at most d nesting levels traverses at most the final S + tuples plus its Q or Z counter extents; Q,Z,T,S<=V. Initial markers and + conversions are included. +- Within a fiber, staging and the split/merge together use five segments, + totalling at most 66H+35. Consuming append uses 6H+1. All local resets, + markers, Q conversion, length transfer and erasures bring the total below + 512H, with small constant work absorbed using H>=1. This includes private + bucket regions even though their symbols have already been consumed. +- The digit decoder and fixed-stride movement cost <=8Db+16 per record; + the final whole-cache and low-result rewinds together cost <=4K+8. With + T<=V their aggregate is bounded by 16K+32V+16. +- Final whole-owner installation/erasure and head returns cost <=32V+16. + Persistent counter cleanup fits 64(d+1)V+64(d+1). + +Adding these bounds is below the displayed transition allowance. The optional +actual-T initializer adds <=4Db+6 separately, or may be absorbed by unused +slack in 32K. No data-dependent host step is omitted from these paths. + +For space, the global source/output consume 2V, and local source/output/buckets +at most 3H. The suffix counter has S cells; Q-loop counters have (d-1)Q, +the split counters at most Q+1, type/Z counters T+Z, conversion scratch at +most max(log2 T,log2 Q,log2 Z)+1, and descriptor widths at most T+Q+Z. +The old cache and retained low0 result total K+Tb<=2K. Markers, endpoints, +visited erased tails and the fixed extra cells fit 128(d+1). These pieces fit +(d+20)V+2K+128(d+1); erased cells remain charged. The same upper bound absorbs +actual-T initialization. No numerical work word or recursive child is used. + +Pre-input table size is O(qDb+d), including explicit cache strides per decoded +value, and is independent of T,Q,Z,w. This is a nonzero q,f-dependent compiler +cost. Default depth D can be generated without enumerating GL_N(q). + +## 5. Source invoice and exact boundary + +PR5332's first0 adapter was two completed OLD swaps around the later-target +c=0 shear, with real installation/transport. On T fibers its conditional bill +was 2T A_OLD(H,w)+A_later0+M_adapter. The new whole-array cell0 layer has no +OLD invocations and the explicit A_join above, so under the same source/cache +ordering contract the replacement difference is + + Delta = A_join - (2T A_OLD(H,w)+A_later0+M_adapter). + +This signed equation does not assert Delta<0 for every tariff or size. It +removes two OLD dependencies per fiber from this added repair; it is not a +change to the selected primitive's recursive child profile. No selected +receipt is repriced. If a downstream caller expands these OLDs into recursive +paid calls, it must recompute its **entire signed invoice** with A_join and its +real allocation/preparation costs before claiming any saving or new kappa. + +All other high linear movement, other coordinate carries, complete low-type +commit/cache retirement, caller allocation/backing, native refinement and P3 +remain outside this package. Existing correctly paired full old-cache bytes are +input, not freely generated here. This contribution closes the contiguous-T +cell0 layer including its local fiber boundaries and final installation; it +does not claim the complete LOW route or supplier. + +## Evidence and remaining questions + +Forty full-array fixtures run in two independent interpreters; arbitrary bits, +complete small basis inputs, several T fibers, nonzero spectators, actual +q5/w4 carry1 selection, inverse selection and f2 strides are included. Depth64 +and256 table controls use Q1 and are explicitly not actual odd-q GL payload +replays. No full GL8 or Q^64 array is materialized. The all-size result rests +on the loop invariants and tariff proof above, not these reduced tests. +Source corruption, wrong result writes, wrong selector direction, occupied +workspace and trailing cache controls reject in normal and optimized modes. + +Next: link the remaining high/carry/low-commit layers in source order with their +complete signed invoice and actual backing reserve. Repeating rotation or +bounded-carry arithmetic is unnecessary. A selected-stage gain requires that +larger caller proof, not this component's zero OLD count. + +Credit Tekalign/PR3343 and Jose Manuel/PR2915 for bounded carry geometry; +David Arias/PR2776 for literal machine/counter macros; PR5332/5487 for source +carry and low-commit boundaries; retained BIT/ROW lineage. Loader follows the +authenticated PR5019 loading pattern. Prepared by JoyboyBrian with substantial +OpenAI Codex assistance. Apache-2.0. No independent human/formal acceptance. diff --git a/research/bit-cellzero-old-elimination/README.md b/research/bit-cellzero-old-elimination/README.md new file mode 100644 index 0000000000..adc23b2ca5 --- /dev/null +++ b/research/bit-cellzero-old-elimination/README.md @@ -0,0 +1,63 @@ +# Close the actual whole-array cell0 carry edge + +The actual helper462/frame506 cell0 forward carry is always0 or1; its inverse +carry is0. PR3343 already supplies the bounded rotation geometry. This package +joins the actual low-cache selector to a literal controller across the complete +contiguous T-type payload, paying for nested suffix construction, local fiber +markers/staging, global output, same-owner installation and all private cleanup. +It removes the two completed OLD adapters from this particular carry edge. +It does not introduce a new rotation primitive. + +For N=8f,D=N² and the actual T=|GL_N(F_q)|, the default table accepts a contiguous +[T]×[Q]^D×[Z] payload and paired complete old-low cache. Runtime T,Q,Z stay on +tapes. No S/H descriptor, per-fiber marked bank, GL enumeration, host gather or +OLD callback is supplied. The old cache survives unchanged for later cells; +new low0 digits remain separately owned. A literal initializer can install the +fixed actual T without enumerating matrices. + +[PROOF.md](PROOF.md) proves exact source columns, the all-size layout/lifecycle +and conservative complete bounds. With generic compile-time depth d and V=TQ^dZ: + +- Transitions: at most2048(d+1)V+32TDb+256(d+1). +- Visited cells: at most(d+20)V+2TDb+128(d+1), including erased regions. +- Fixed tape count:17+d; table independent of runtime T,Q,Z,w. + +The signed replacement bill is explicitly A_join−(2T A_OLD+A_later0+M_adapter), +with no assumption that this is numerically negative for all tariffs. Other +high/carry layers, full low commit, enclosing backing/stock, native refinement +and P3 remain. No selected receipt, recursive profile, supplier or kappa changes. + +## Reproduce + +```sh +python3.12 -I -W error -B research/bit-cellzero-old-elimination/verify.py +python3.12 -I -O -W error -B research/bit-cellzero-old-elimination/verify.py +python3.12 -B scripts/research_package.py --package research/bit-cellzero-old-elimination +``` + +Expected `PASS_ACTUAL_CELLZERO_WHOLE_T_JOIN`. Standard library only. SOURCES.json +pins every executable/proof input; the loader authenticates bytes before imports. +TABLE.json.gz pins both actual q5,f1,D64 tables. RESULT.json records40 full-array +fixtures in independent sparse/dense interpreters,668689 transitions,3 literal +actual-T initializers and7 rejecting source/semantic controls. + +Small fixtures vary T, complete payload, spectators, direction and f2 cache +stride. Actual q5,w4 carry1 uses reduced depth1. Actual depth64/256 structural +controls use Q1, not admissible full odd-q GL payloads. No GL8 or Q^64 array is +materialized. The written proof supplies the quantified statement; tests are +corroboration, not independent human or proof-kernel acceptance. + +## Open next questions + +Join the remaining actual high/carry/low-commit layers and derive the entire +signed caller invoice with its backing reserve. This component already pays +its whole-T boundaries; repeating bounded rotations is unnecessary. TASK.json +states the concrete next steps and unresolved dependencies. + +## Credit + +Tekalign/PR3343 and Jose Manuel/PR2915 supply bounded carry geometry; David +Arias/PR2776 supplies literal machine/counter macros; PR5332/5487 identify the +source and low-commit boundary. The authenticated loader follows PR5019. +Retained BIT/ROW lineage and predecessor attribution remain unchanged. +JoyboyBrian, with substantial OpenAI Codex assistance; Apache-2.0. diff --git a/research/bit-cellzero-old-elimination/RESULT.json b/research/bit-cellzero-old-elimination/RESULT.json new file mode 100644 index 0000000000..f55fcfbc0c --- /dev/null +++ b/research/bit-cellzero-old-elimination/RESULT.json @@ -0,0 +1,553 @@ +{ + "actual_T_initializers": [ + { + "bits": 101, + "f": 1, + "q": 3, + "steps": 410 + }, + { + "bits": 595, + "f": 2, + "q": 5, + "steps": 2386 + }, + { + "bits": 180, + "f": 1, + "q": 7, + "steps": 726 + } + ], + "cases": 40, + "cases_detail": [ + { + "Q": 3, + "T": 3, + "Z": 1, + "bits": 9, + "depth": 1, + "f": 1, + "instructions": 1038, + "inverse": false, + "q": 3, + "steps": 3470, + "visited": 468 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 54, + "depth": 2, + "f": 1, + "instructions": 1126, + "inverse": false, + "q": 3, + "steps": 7370, + "visited": 620 + }, + { + "Q": 5, + "T": 3, + "Z": 1, + "bits": 375, + "depth": 3, + "f": 1, + "instructions": 1214, + "inverse": false, + "q": 3, + "steps": 34279, + "visited": 1632 + }, + { + "Q": 3, + "T": 3, + "Z": 1, + "bits": 9, + "depth": 1, + "f": 1, + "instructions": 1042, + "inverse": true, + "q": 3, + "steps": 3463, + "visited": 466 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 54, + "depth": 2, + "f": 1, + "instructions": 1130, + "inverse": true, + "q": 3, + "steps": 7363, + "visited": 613 + }, + { + "Q": 5, + "T": 3, + "Z": 1, + "bits": 375, + "depth": 3, + "f": 1, + "instructions": 1218, + "inverse": true, + "q": 3, + "steps": 34272, + "visited": 1606 + }, + { + "Q": 3, + "T": 5, + "Z": 1, + "bits": 15, + "depth": 1, + "f": 1, + "instructions": 1607, + "inverse": false, + "q": 5, + "steps": 6991, + "visited": 1069 + }, + { + "Q": 3, + "T": 5, + "Z": 2, + "bits": 90, + "depth": 2, + "f": 1, + "instructions": 1695, + "inverse": false, + "q": 5, + "steps": 13291, + "visited": 1281 + }, + { + "Q": 5, + "T": 5, + "Z": 1, + "bits": 625, + "depth": 3, + "f": 1, + "instructions": 1783, + "inverse": false, + "q": 5, + "steps": 57570, + "visited": 2720 + }, + { + "Q": 3, + "T": 5, + "Z": 1, + "bits": 15, + "depth": 1, + "f": 1, + "instructions": 1619, + "inverse": true, + "q": 5, + "steps": 6977, + "visited": 1067 + }, + { + "Q": 3, + "T": 5, + "Z": 2, + "bits": 90, + "depth": 2, + "f": 1, + "instructions": 1707, + "inverse": true, + "q": 5, + "steps": 13277, + "visited": 1274 + }, + { + "Q": 5, + "T": 5, + "Z": 1, + "bits": 625, + "depth": 3, + "f": 1, + "instructions": 1795, + "inverse": true, + "q": 5, + "steps": 57556, + "visited": 2694 + }, + { + "Q": 3, + "T": 7, + "Z": 1, + "bits": 21, + "depth": 1, + "f": 1, + "instructions": 1967, + "inverse": false, + "q": 7, + "steps": 9701, + "visited": 1473 + }, + { + "Q": 3, + "T": 7, + "Z": 2, + "bits": 126, + "depth": 2, + "f": 1, + "instructions": 2055, + "inverse": false, + "q": 7, + "steps": 18401, + "visited": 1745 + }, + { + "Q": 5, + "T": 7, + "Z": 1, + "bits": 875, + "depth": 3, + "f": 1, + "instructions": 2143, + "inverse": false, + "q": 7, + "steps": 80050, + "visited": 3612 + }, + { + "Q": 3, + "T": 7, + "Z": 1, + "bits": 21, + "depth": 1, + "f": 1, + "instructions": 1985, + "inverse": true, + "q": 7, + "steps": 9680, + "visited": 1471 + }, + { + "Q": 3, + "T": 7, + "Z": 2, + "bits": 126, + "depth": 2, + "f": 1, + "instructions": 2073, + "inverse": true, + "q": 7, + "steps": 18380, + "visited": 1738 + }, + { + "Q": 5, + "T": 7, + "Z": 1, + "bits": 875, + "depth": 3, + "f": 1, + "instructions": 2161, + "inverse": true, + "q": 7, + "steps": 80029, + "visited": 3586 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 18, + "depth": 1, + "f": 1, + "instructions": 1038, + "inverse": false, + "q": 3, + "steps": 4254, + "visited": 499 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 18, + "depth": 1, + "f": 1, + "instructions": 1038, + "inverse": false, + "q": 3, + "steps": 4254, + "visited": 499 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 18, + "depth": 1, + "f": 1, + "instructions": 1038, + "inverse": false, + "q": 3, + "steps": 4254, + "visited": 499 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 18, + "depth": 1, + "f": 1, + "instructions": 1038, + "inverse": false, + "q": 3, + "steps": 4254, + "visited": 499 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 18, + "depth": 1, + "f": 1, + "instructions": 1038, + "inverse": false, + "q": 3, + "steps": 4254, + "visited": 499 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 18, + "depth": 1, + "f": 1, + "instructions": 1038, + "inverse": false, + "q": 3, + "steps": 4254, + "visited": 499 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 18, + "depth": 1, + "f": 1, + "instructions": 1038, + "inverse": false, + "q": 3, + "steps": 4254, + "visited": 499 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 18, + "depth": 1, + "f": 1, + "instructions": 1038, + "inverse": false, + "q": 3, + "steps": 4254, + "visited": 499 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 18, + "depth": 1, + "f": 1, + "instructions": 1038, + "inverse": false, + "q": 3, + "steps": 4254, + "visited": 499 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 18, + "depth": 1, + "f": 1, + "instructions": 1038, + "inverse": false, + "q": 3, + "steps": 4254, + "visited": 499 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 18, + "depth": 1, + "f": 1, + "instructions": 1038, + "inverse": false, + "q": 3, + "steps": 4254, + "visited": 499 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 18, + "depth": 1, + "f": 1, + "instructions": 1038, + "inverse": false, + "q": 3, + "steps": 4254, + "visited": 499 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 18, + "depth": 1, + "f": 1, + "instructions": 1038, + "inverse": false, + "q": 3, + "steps": 4254, + "visited": 499 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 18, + "depth": 1, + "f": 1, + "instructions": 1038, + "inverse": false, + "q": 3, + "steps": 4254, + "visited": 499 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 18, + "depth": 1, + "f": 1, + "instructions": 1038, + "inverse": false, + "q": 3, + "steps": 4254, + "visited": 499 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 18, + "depth": 1, + "f": 1, + "instructions": 1038, + "inverse": false, + "q": 3, + "steps": 4254, + "visited": 499 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 18, + "depth": 1, + "f": 1, + "instructions": 1038, + "inverse": false, + "q": 3, + "steps": 4254, + "visited": 499 + }, + { + "Q": 3, + "T": 3, + "Z": 2, + "bits": 18, + "depth": 1, + "f": 1, + "instructions": 1038, + "inverse": false, + "q": 3, + "steps": 4254, + "visited": 499 + }, + { + "Q": 125, + "T": 3, + "Z": 2, + "bits": 750, + "depth": 1, + "f": 1, + "instructions": 1607, + "inverse": false, + "q": 5, + "steps": 83881, + "visited": 3022 + }, + { + "Q": 3, + "T": 3, + "Z": 1, + "bits": 27, + "depth": 2, + "f": 2, + "instructions": 4515, + "inverse": false, + "q": 5, + "steps": 12818, + "visited": 2454 + }, + { + "Q": 1, + "T": 2, + "Z": 2, + "bits": 4, + "depth": 64, + "f": 1, + "instructions": 7151, + "inverse": false, + "q": 5, + "steps": 7241, + "visited": 644 + }, + { + "Q": 1, + "T": 2, + "Z": 2, + "bits": 4, + "depth": 256, + "f": 2, + "instructions": 26867, + "inverse": false, + "q": 5, + "steps": 26057, + "visited": 2372 + } + ], + "dual_interpreter_cases": 40, + "full_GL8_materialized": false, + "max_steps": 83881, + "new_kappa": false, + "rejecting_controls": 7, + "source_columns": "2e5 and e4; tensor lane proven", + "status": "PASS_ACTUAL_CELLZERO_WHOLE_T_JOIN", + "total_steps": 668689 +} diff --git a/research/bit-cellzero-old-elimination/SOURCES.json b/research/bit-cellzero-old-elimination/SOURCES.json new file mode 100644 index 0000000000..07a5ec142e --- /dev/null +++ b/research/bit-cellzero-old-elimination/SOURCES.json @@ -0,0 +1,60 @@ +{ + "schema_version": 1, + "base_commit": "32890bc5de034ab8fc93ac88ead7279a6a416d04", + "files": [ + { + "path": "certificates/selected-result.json", + "usage": "provenance", + "git_blob": "fc3d4ba105e1f097d0d7d051a308281e86ab1446", + "sha256": "66974efdced4083c00025f97d95d83909a226cdf801edb9301c195c6641f6903" + }, + { + "path": "docs/research/agent-task-catalog.json", + "usage": "provenance", + "git_blob": "f126dd2e2dad2b669e75d1d0d0bd05c600725602", + "sha256": "f7a48bfa2659b88378282a8eee7d9fe52cdf505594124c4d1686b58510fffd72" + }, + { + "path": "research/bit-low-carry-lowering/PROOF.md", + "usage": "input", + "git_blob": "26b76b3665c6ff6c85376c43a8d764967e4805f7", + "sha256": "68350bf98ebd512dffcf3ae06a13ff27dc69beec19f15b952f099c55ed13a00a" + }, + { + "path": "research/bit-row-route-generator/PROGRAM.json.gz", + "usage": "input", + "git_blob": "2df37028f46614301118980ad14d2b3f80e43c31", + "sha256": "83448ca22ef773847b748d62f19ea80b2a51c53913ce22624003b6170be7044c" + }, + { + "path": "research/fixed-tape-ordered-shear/counters.py", + "usage": "input", + "git_blob": "c4878a7a7e3f390d193df496a579e4a788f25e32", + "sha256": "2b51181a3efd403be14111ed2d556ba10e63a8939756e69d488d12344d5a7ad1" + }, + { + "path": "research/fixed-tape-ordered-shear/machine.py", + "usage": "input", + "git_blob": "6ed03865cdb646d40573c132f841afbe335daba0", + "sha256": "04b7b76b9f06653d94d2158196cdd1bed7883dd1f59fcbc81a486e3ffb248681" + }, + { + "path": "research/fixed-tape-ordered-shear/shear.py", + "usage": "input", + "git_blob": "b814b6f77b03f12577464df91be6c4f103d1722c", + "sha256": "84d60e552bb35657b3c5e63b4ab21846a90d71dfd22c8a46cd01acba76475818" + }, + { + "path": "research/high-carry-streams/PROOF.md", + "usage": "input", + "git_blob": "2c42df2eb52c9ad66e82b44b69a9c2d6ef97a9a8", + "sha256": "9cd6e413448c5e253ab4771b8cbcbb40baca76450ac3234346b0998a4065479a" + }, + { + "path": "research/high-carry-streams/rotation.py", + "usage": "input", + "git_blob": "12d84ff8ccb7550788ed215502512571c07bff11", + "sha256": "23cad9cae470cc5631a6971fef88ceaa877af2a01224974ba85fbad35357c9bc" + } + ] +} diff --git a/research/bit-cellzero-old-elimination/TABLE.json.gz b/research/bit-cellzero-old-elimination/TABLE.json.gz new file mode 100644 index 0000000000000000000000000000000000000000..5af64555ad7be06c0f995bc6e67514608c21acd3 GIT binary patch literal 38615 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 t&+f#C?$}UJw*QcaLU%t!N^ok9>ieHW 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 literal 0 HcmV?d00001 diff --git a/research/bit-cellzero-old-elimination/TASK.json b/research/bit-cellzero-old-elimination/TASK.json new file mode 100644 index 0000000000..26b11e0674 --- /dev/null +++ b/research/bit-cellzero-old-elimination/TASK.json @@ -0,0 +1,80 @@ +{ + "schema_version": 1, + "task_id": "uniform-transfer-audit", + "priority_revision": 7, + "base_commit": "32890bc5de034ab8fc93ac88ead7279a6a416d04", + "original_card": { + "id": "uniform-transfer-audit", + "question": "Does one quantified step of the proposed #4100 all-size construction hold at its actual caller?", + "starting_points": [ + "docs/research/research-family-status.md", + "certificates/selected-result.json", + "research/unconditional-batched-crt/README.md" + ], + "methods": [ + "Prove one missing implication with explicit quantified hypotheses.", + "Find an exact counterexample at the claimed interface boundary." + ], + "acceptance_gate": "Identify the proposition and what would change downstream; do not equate a finite replay with a universal proof.", + "first_step": { + "command": [ + "python3", + "-B", + "scripts/research_baseline.py" + ], + "expected": "PASS_RESEARCH_BASELINE_BINDINGS_ONLY", + "inspect": "Read PROOF.md and AUDIT.md in #4100. Select one distinct obligation: CRT total repair, native/free-algebra lifting, precision/conditioning, or complete fixed-tape cost. This is an author-submitted proof, not an accepted unconditional theorem.", + "scope": "Source-binding orientation only; no scientific replay, theorem acceptance or supplier admission. Budget any heavy replay separately." + }, + "first_experiment": "Check live handoffs; name one proposition, its caller, quantified domain and dependency closure. Independently prove the implication or exhibit a precise gap/counterexample. Prioritize CRT.md total repair or COMPLEX.md free-algebra lift only if unclaimed. Stop at the chosen obligation; do not substitute finite samples or root arithmetic for an all-size proof, or launch the complete package by default.", + "bottleneck_link": "Finite supplier improvements are useful only under the retained transfer obligations.", + "allowed_variations": [ + "One CRT repair, native lift, precision/conditioning or tape-cost proposition, with its exact caller." + ], + "scope_change_triggers": [ + "Replacing a quantified obligation with another finite smoke test.", + "Treating archive intake, an author PASS receipt or a finite composed fixture as discharge of the universal hypotheses." + ], + "overlap_terms": [ + "uniform transfer", + "all-size", + "precision", + "4100", + "unconditional-batched-crt" + ], + "existing_checks": [ + { + "scope": "PR #4100: proposed unconditional construction and finite checks, without independent acceptance.", + "evidence": "research/unconditional-batched-crt/README.md", + "remaining": "Independent proof audit of one caller-bound all-size implication; all other premises remain explicit.", + "status": "author-checked", + "source_commit": "337d04939571a637aeab54a0f58f54fde811663a", + "selected_record_sha256": "bb2eaa58647b353f88d0aec2eafb9d30df1be53589231b23e12ceef3e4bad129" + } + ] + }, + "scope_status": "changed", + "actual_scope": "Actual helper462/frame506 whole-T cell0 carry layer without the two completed OLD adapters, reusing bounded rotation geometry.", + "scope_change_reason": "Initial unbounded-runtime-carry proposal was withdrawn after PR3343/source comparison: actual column0 carry is only0/1. The new scope closes the source-specific whole-array physical join rather than inventing rotation.", + "bottleneck_link": "Eliminates an explicitly paid cell0 adapter dependency from the partial physical LOW boundary; no selected recursive profile or kappa change.", + "budget_minutes": 60, + "stop_rule": "A column lemma or per-fiber isolated-bank result alone is insufficient; require paid markerless whole-T staging, full source/cache binding, installation and complete bill.", + "outcome": "completed", + "evidence": "PROOF.md; literal kernel.py; authenticated predecessor macros; actual-depth TABLE.json.gz;40 dual-interpreter whole-array fixtures and3 actual-T initializers in RESULT.json.", + "author": "JoyboyBrian, with substantial OpenAI Codex assistance", + "ai_assistance": "OpenAI Codex assisted source comparison, proof, implementation, testing and writing.", + "open_questions": [ + { + "question": "Can the remaining high/carry/low-commit layers be joined in actual source order with a full invoice?", + "why_it_matters": "The cell0 layer alone does not complete LOW or a native supplier.", + "first_step": "Bind one actual complete LOW factor through the remaining paid high routing, cache lifetime and low commit.", + "blocked_by": "Other high operations/OLD implementations and actual backing reserve remain." + }, + { + "question": "Does the complete signed caller invoice improve after this replacement?", + "why_it_matters": "Removing two local OLD dependencies does not imply a selected-stage or kappa gain.", + "first_step": "Expand all affected caller costs including the new whole-array scans and global storage.", + "blocked_by": "No completed enclosing source/native tariff is supplied." + } + ] +} diff --git a/research/bit-cellzero-old-elimination/VERIFY.json b/research/bit-cellzero-old-elimination/VERIFY.json new file mode 100644 index 0000000000..af532b821d --- /dev/null +++ b/research/bit-cellzero-old-elimination/VERIFY.json @@ -0,0 +1,42 @@ +{ + "schema_version": 1, + "status": "ready", + "python": "3.12", + "requirements": [], + "inputs": [ + "research/bit-low-carry-lowering/PROOF.md", + "research/bit-row-route-generator/PROGRAM.json.gz", + "research/fixed-tape-ordered-shear/counters.py", + "research/fixed-tape-ordered-shear/machine.py", + "research/fixed-tape-ordered-shear/shear.py", + "research/high-carry-streams/PROOF.md", + "research/high-carry-streams/rotation.py" + ], + "commands": [ + { + "argv": [ + "{python}", + "-I", + "-W", + "error", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 30, + "checks": "Actual source columns, fixed tables,40 whole-array fixtures in2 interpreters,3 actual-T initializers, source and semantic controls." + }, + { + "argv": [ + "{python}", + "-I", + "-O", + "-W", + "error", + "-B", + "{package}/verify.py" + ], + "timeout_seconds": 30, + "checks": "Same source/endpoint/resource checks with assertions disabled." + } + ] +} diff --git a/research/bit-cellzero-old-elimination/kernel.py b/research/bit-cellzero-old-elimination/kernel.py new file mode 100644 index 0000000000..30eabf2d5f --- /dev/null +++ b/research/bit-cellzero-old-elimination/kernel.py @@ -0,0 +1,122 @@ +# SPDX-License-Identifier: Apache-2.0 +"""Actual whole-T cell0 join; PR3343 split/merge, PR2776 literal macros. +JoyboyBrian, substantial OpenAI Codex assistance. +""" +from math import isqrt + +LOW, CACHE, LOCAL, GLOBAL = 14,15,16,17 + + +def build(modules, q, f=1, inverse=False, depth=None): + if type(q) is not int or q<3 or any(q%a==0 for a in range(2,isqrt(q)+1)): + raise ValueError('fixed odd prime') + if type(f) is not int or f<1 or type(inverse) is not bool: + raise ValueError('fixed lane count/direction') + n=8*f;cells=n*n;bits=(q-1).bit_length() + if depth is None:depth=cells + if type(depth) is not int or depth<1:raise ValueError('positive fiber depth') + # Nonstandard depth is an explicitly labelled generic calibration, not GL_N payload. + b,m,c=(modules[k] for k in ('shear','machine','counters')) + loops=list(range(18,18+depth-1));a=m.Assembler(18+depth-1) + fail=a.fresh('invalid_cellzero_contract') + persistent=[b.P_COUNT,b.G_COUNT,b.S_COUNT,b.BINARY_WORK]+loops + private=[LOCAL,b.OUTPUT,b.SPLIT_A,b.SPLIT_B,b.LEFT_LENGTH,b.RIGHT_LENGTH] + def initialize(tape): + good=a.fresh('blank_origin');a.branch(tape,{m.BLANK:good},fail);a.label(good) + a.write(tape,m.LEFT);a.move(tape,1) + for tape in [LOW,GLOBAL]+persistent:initialize(tape) + for src,dst in [(b.P_INPUT,b.P_COUNT),(b.S_INPUT,b.G_COUNT)]+[(b.Q_INPUT,t) for t in loops]: + c.emit_binary_to_unary(a,src,b.BINARY_WORK,dst,a.fresh('extent')) + def nest(level): + tape=(loops+[b.G_COUNT])[level] + c.emit_rewind(a,tape,a.fresh('product_return')) + loop,body,end=(a.fresh(s) for s in ('product_loop','product_body','product_end')) + a.label(loop);a.branch(tape,{m.UNIT:body,m.RIGHT:end},fail);a.label(body) + if level==len(loops):a.write(b.S_COUNT,m.UNIT);a.move(b.S_COUNT,1) + else:nest(level+1) + a.move(tape,1);a.goto(loop);a.label(end) + nest(0);a.write(b.S_COUNT,m.RIGHT) + outer,body,done,rotate0,rotate1,after=(a.fresh(s) for s in ('types','type','types_done','rotate0','rotate1','after_rotate')) + a.label(outer);a.branch(b.P_COUNT,{m.UNIT:body,m.RIGHT:done},fail);a.label(body) + for tape in private:initialize(tape) + c.emit_binary_to_unary(a,b.Q_INPUT,b.BINARY_WORK,b.LEFT_LENGTH,a.fresh('Q')) + a.write(b.RIGHT_LENGTH,m.RIGHT) + b._segment(a,b.LEFT_LENGTH,b.SOURCE,LOCAL,False,fail,a.fresh('stage_fiber')) + a.write(LOCAL,m.RIGHT);c.emit_rewind(a,LOCAL,a.fresh('local_return')) + selected=(4 if inverse else 5)*f + for _ in range(selected*bits):a.move(CACHE,1) + # A finite radix decoder; the running program reads no host integer. + labels={(k,v):a.fresh('digit') for k in range(bits+1) for v in range(1<=q:a.goto(fail);continue + low=v if inverse else (2*v)%q + carry=0 if inverse else (2*v)//q + for _ in range((cells-selected-1)*bits):a.move(CACHE,1) + for k in range(bits):a.write(LOW,m.ONE if (low>>k)&1 else m.ZERO);a.move(LOW,1) + a.goto(rotate1 if carry else rotate0) + def rotation(carry,label): + a.label(label) + # LEFT_LENGTH already ends at RIGHT after staging the full fiber. + if carry:b._decrease_left_increase_right(a,fail,a.fresh('bounded_one')) + gather=((b.LEFT_LENGTH,LOCAL,b.SPLIT_A,False),(b.RIGHT_LENGTH,LOCAL,b.SPLIT_B,False)) + emit=((b.RIGHT_LENGTH,b.SPLIT_B,b.OUTPUT,True),(b.LEFT_LENGTH,b.SPLIT_A,b.OUTPUT,True)) + for length,src,dst,consume in gather:b._segment(a,length,src,dst,consume,fail,a.fresh('split')) + good=a.fresh('complete_local');a.branch(LOCAL,{m.RIGHT:good},fail);a.label(good) + for tape in (b.SPLIT_A,b.SPLIT_B):a.write(tape,m.RIGHT);c.emit_rewind(a,tape,a.fresh('bucket_return')) + for length,src,dst,consume in emit:b._segment(a,length,src,dst,consume,fail,a.fresh('merge')) + a.write(b.OUTPUT,m.RIGHT);c.emit_rewind(a,b.OUTPUT,a.fresh('output_return'));a.goto(after) + rotation(0,rotate0);rotation(1,rotate1);a.label(after) + def copy_consuming(src,dst,prefix): + loop,z,o,end=(a.fresh(prefix+s) for s in ('loop','zero','one','end')) + a.label(loop);a.branch(src,{m.ZERO:z,m.ONE:o,m.RIGHT:end},fail) + for label,symbol in ((z,m.ZERO),(o,m.ONE)): + a.label(label);a.write(dst,symbol);a.write(src,m.BLANK) + a.move(src,1);a.move(dst,1);a.goto(loop) + a.label(end) + copy_consuming(b.OUTPUT,GLOBAL,'append') + for tape in private:b._erase_back_to_origin(a,tape,a.fresh('clear_fiber')) + a.move(b.P_COUNT,1);a.goto(outer) + a.label(done) + for tape in (b.SOURCE,CACHE): + good=a.fresh('whole_bank_complete');a.branch(tape,{m.RIGHT:good},fail);a.label(good) + for tape in (LOW,GLOBAL):a.write(tape,m.RIGHT);c.emit_rewind(a,tape,a.fresh('owned_return')) + c.emit_rewind(a,CACHE,a.fresh('cache_return'));c.emit_rewind(a,b.SOURCE,a.fresh('owner_return')) + copy_consuming(GLOBAL,b.SOURCE,'install') + b._erase_back_to_origin(a,GLOBAL,a.fresh('retire_global')) + c.emit_rewind(a,b.SOURCE,a.fresh('installed_return')) + # Some persistent counters stop at their ends; move all to ends before erase. + for tape in persistent: + c.emit_rewind(a,tape,a.fresh('cleanup_return')) + if tape!=b.BINARY_WORK:b._seek_right(a,tape,fail,a.fresh('cleanup_end')) + b._erase_back_to_origin(a,tape,a.fresh('cleanup')) + a.halt();a.label(fail);a.reject('valid full T cache/payload, positive extents and owned workspace') + return a.finish() + + +def initialize_actual_T(modules,q,f=1): + """Pre-input finite code installs the fixed GL_(8f)(q) count; no GL enumeration.""" + if type(f) is not int or f<1:raise ValueError('fixed positive f') + n=8*f + if type(q) is not int or q<3 or any(q%a==0 for a in range(2,isqrt(q)+1)) or f<1: + raise ValueError('fixed admitted q,f') + total=1 + for i in range(n):total*=q**n-q**i + m=modules['machine'];a=m.Assembler(1);fail=a.fresh('occupied_count') + good=a.fresh('blank');a.branch(0,{m.BLANK:good},fail);a.label(good) + a.write(0,m.LEFT);a.move(0,1) + for i in range(total.bit_length()): + good=a.fresh('blank');a.branch(0,{m.BLANK:good},fail);a.label(good) + a.write(0,m.ONE if (total>>i)&1 else m.ZERO);a.move(0,1) + good=a.fresh('blank');a.branch(0,{m.BLANK:good},fail);a.label(good);a.write(0,m.RIGHT) + for _ in range(total.bit_length()):a.move(0,-1) + a.halt();a.label(fail);a.reject('owned blank T descriptor') + return a.finish() diff --git a/research/bit-cellzero-old-elimination/loader.py b/research/bit-cellzero-old-elimination/loader.py new file mode 100644 index 0000000000..02aed787cc --- /dev/null +++ b/research/bit-cellzero-old-elimination/loader.py @@ -0,0 +1,48 @@ +# SPDX-License-Identifier: Apache-2.0 +"""Authenticate the actual source bytes before loading the retained macros.""" +import hashlib +import json +from pathlib import Path +import sys +import types + +HERE = Path(__file__).resolve().parent +ROOT = HERE.parents[1] + + +def need(ok, message): + if not ok: + raise ValueError(message) + + +def authenticate(overrides=None): + overrides = overrides or {} + manifest = json.loads((HERE / 'SOURCES.json').read_text()) + contents = {} + for row in manifest['files']: + if row['usage'] != 'input': + continue + raw = overrides.get(row['path'], (ROOT / row['path']).read_bytes()) + need(hashlib.sha256(raw).hexdigest() == row['sha256'], 'source SHA256: ' + row['path']) + need(hashlib.sha1(b'blob ' + str(len(raw)).encode() + b'\0' + raw).hexdigest() == row['git_blob'], + 'source Git blob: ' + row['path']) + contents[row['path']] = raw + return contents + + +def load_macros(contents): + modules = {} + names = ('machine', 'counters', 'shear') + need(all(name not in sys.modules for name in names), 'no preloaded predecessor modules') + try: + for name in names: + path = 'research/fixed-tape-ordered-shear/' + name + '.py' + module = types.ModuleType(name) + module.__file__ = str(ROOT / path) + sys.modules[name] = module + exec(compile(contents[path], module.__file__, 'exec'), module.__dict__) + modules[name] = module + finally: + for name in names: + sys.modules.pop(name, None) + return modules diff --git a/research/bit-cellzero-old-elimination/verify.py b/research/bit-cellzero-old-elimination/verify.py new file mode 100644 index 0000000000..a2ebcb7c8f --- /dev/null +++ b/research/bit-cellzero-old-elimination/verify.py @@ -0,0 +1,150 @@ +# SPDX-License-Identifier: Apache-2.0 +"""Whole-array coordinate oracle and independent literal table execution.""" +from pathlib import Path +import sys,json,gzip,hashlib +from fractions import Fraction +HERE=Path(__file__).resolve().parent +sys.path.insert(0,str(HERE)) +from loader import authenticate,load_macros,need +from kernel import build,initialize_actual_T,LOW,CACHE + + +def invert(a): + n=len(a);r=[list(row)+[Fraction(i==j) for j in range(n)] for i,row in enumerate(a)] + for c in range(n): + pivot=next(i for i in range(c,n) if r[i][c]);r[c],r[pivot]=r[pivot],r[c] + v=r[c][c];r[c]=[x/v for x in r[c]] + for i in range(n): + if i!=c: + v=r[i][c];r[i]=[x-v*y for x,y in zip(r[i],r[c])] + return [row[n:] for row in r] + + +def dense(program,initial,limit): + """Independent expanding-array interpreter; producer Machine is unused.""" + tapes=[];heads=[];visited=[] + for cells,head in initial: + n=max(cells,default=0)+2;t=[0]*n + for k,v in cells.items():t[k]=v + tapes.append(t);heads.append(head);visited.append(set()) + pc=program.entry;steps=0 + while steps=0,'no negative fixture head') + while len(tapes[i])<=h:tapes[i].append(0) + visited[i].add(h) + if op=='branch':pc=dict(row[2]).get(tapes[i][h],row[3]);continue + if op=='write':tapes[i][h]=row[2] + elif op=='move':heads[i]+=row[2];visited[i].add(heads[i]) + else:raise ValueError('unknown instruction') + pc+=1 + else:raise ValueError('dense external step cap') + return [(dict((k,v) for k,v in enumerate(t) if v),h) for t,h in zip(tapes,heads)],steps,sum(map(len,visited)) + + +def fixture(mod, q,f,Q,Z,depth,values,seed,basis=None): + m=mod['machine'];n=8*f;D=n*n;b=(q-1).bit_length();T=len(values);H=Q**depth*Z + cache=[] + for v in values: + row=[int(i==j) for i in range(n) for j in range(n)] + row[5*f]=v;row[4*f]=(v+1)%q + cache.extend(row) + payload=[((i*i+seed+3*i)^(i>>1))&1 for i in range(T*H)] + if basis is not None:payload=[int(i==basis) for i in range(T*H)] + return cache,payload + + +def run_case(mod,q,f,Q,Z,depth,values,inverse=False,seed=1,basis=None,dual=True,mutate=None,dirty=False,trailing=False): + m=mod['machine'];D=(8*f)**2;b=(q-1).bit_length();T=len(values);H=Q**depth*Z;V=T*H + cache,payload=fixture(mod,q,f,Q,Z,depth,values,seed,basis) + program=build(mod,q,f,inverse,depth) + if mutate:program=mutate(program) + bank=[m.Tape() for _ in range(program.tapes)] + bank[0]=m.marked(m.ONE if x else m.ZERO for x in payload) + bank[4]=m.binary(T);bank[5]=m.binary(Q);bank[7]=m.binary(Z) + bank[CACHE]=m.marked(m.ONE if (x>>k)&1 else m.ZERO for x in cache for k in range(b)) + if dirty:bank[17]=m.marked([m.ONE]) + if trailing: + last=max(bank[CACHE].cells);bank[CACHE].cells[last]=m.ZERO;bank[CACHE].cells[last+1]=m.RIGHT + initial=[(dict(t.cells),t.head) for t in bank] + bound=2048*(depth+1)*V+32*T*D*b+256*(depth+1) + space=(depth+20)*V+2*T*D*b+128*(depth+1) + machine=m.Machine(program,bank).run(bound) + result=[(dict(t.cells),t.head) for t in bank] + if dual: + other,steps,visited=dense(program,initial,bound) + need(other==result and steps==machine.steps and visited==sum(map(len,machine.visits)),'independent interpreters agree') + S=Q**(depth-1)*Z;wanted=[0]*V;lows=[] + for t in range(T): + v=cache[t*D+(4 if inverse else 5)*f] + carry=0 if inverse else (2*v)//q;lows.append(v if inverse else 2*v%q) + for x in range(Q): + for z in range(S):wanted[t*H+((x+carry)%Q)*S+z]=payload[t*H+x*S+z] + expected=m.marked(m.ONE if x else m.ZERO for x in wanted) + need(result[0]==(expected.cells,1),'whole T output installed at original owner') + lowout=m.marked(m.ONE if (x>>k)&1 else m.ZERO for x in lows for k in range(b)) + need(result[LOW]==(lowout.cells,1),'actual low0 result retained') + for t in (4,5,7,CACHE):need(result[t]==initial[t],'preserved input/cache/head') + for t in set(range(program.tapes))-{0,4,5,7,CACHE,LOW}: + need(result[t]==({},0),'private erase and origin') + need(machine.steps<=bound and sum(map(len,machine.visits))<=space,'complete tariff envelopes') + return {'q':q,'f':f,'Q':Q,'Z':Z,'depth':depth,'T':T,'inverse':inverse,'bits':V,'steps':machine.steps,'visited':sum(map(len,machine.visits)),'instructions':len(program.instructions)} + + +def main(): + contents=authenticate();mod=load_macros(contents) + source=json.loads(gzip.decompress(contents['research/bit-row-route-generator/PROGRAM.json.gz'])) + S=[[Fraction(v) for v in row] for row in source['matcher']];A=invert(S) + need([row[0] for row in S]==[Fraction(2*(j==5)) for j in range(8)],'actual forward column0') + need([row[0] for row in A]==[Fraction(j==4) for j in range(8)],'actual inverse column0') + tables=json.loads(gzip.decompress((HERE/'TABLE.json.gz').read_bytes())) + expected_tables={str(inverse):json.loads(json.dumps({'tapes':p.tapes,'entry':p.entry,'instructions':p.instructions})) + for inverse in (False,True) for p in [build(mod,5,1,inverse)]} + need(tables==expected_tables,'actual depth64 finite tables match compiler') + initializers=[] + for q,f in [(3,1),(5,2),(7,1)]: + m=mod['machine'];p=initialize_actual_T(mod,q,f);run=m.Machine(p).run() + n=8*f;T=1 + for i in range(n):T*=q**n-q**i + expected=m.binary(T) + need(run.tapes[0].cells==expected.cells and run.tapes[0].head==1,'actual T initializer') + need(run.steps==4*T.bit_length()+6,'initializer exact cost') + other,steps,visited=dense(p,[({},0)],run.steps+1) + need(other==[(expected.cells,1)] and steps==run.steps,'independent T initialization') + initializers.append({'q':q,'f':f,'steps':steps,'bits':T.bit_length()}) + cases=[] + for q in (3,5,7): + for inverse in (False,True): + for Q,Z,depth in [(3,1,1),(3,2,2),(5,1,3)]: + cases.append(run_case(mod,q,1,Q,Z,depth,list(range(q)),inverse)) + for i in range(18):cases.append(run_case(mod,3,1,3,2,1,[0,2,1],basis=i)) + cases.append(run_case(mod,5,1,125,2,1,[3,0,4],False)) + cases.append(run_case(mod,5,2,3,1,2,[3,0,4],False)) + # Actual D compiler depths, Q1 only: structural microcode controls, not actual odd-q payload runs. + for f in (1,2):cases.append(run_case(mod,5,f,1,2,(8*f)**2,[3,0],False)) + controls=0 + raw=contents['research/high-carry-streams/rotation.py'] + try:authenticate({'research/high-carry-streams/rotation.py':raw+b'\n# corruption\n'}) + except ValueError:controls+=1 + else:raise ValueError('source mutation escaped') + for q,f in [(2,1),(5,0)]: + try:build(mod,q,f) + except ValueError:controls+=1 + else:raise ValueError('invalid compiler parameter escaped') + def wrong_payload(program): + code=list(program.instructions) + pos=next(i for i,row in enumerate(code) if row==('write',0,mod['machine'].ZERO)) + code[pos]=('write',0,mod['machine'].ONE) + return mod['machine'].Program(tuple(code),program.tapes,program.entry) + for options in ({'mutate':wrong_payload},{'mutate':lambda p:build(mod,5,1,True,1)}, {'dirty':True},{'trailing':True}): + try:run_case(mod,5,1,5,2,1,[3,0,4],**options) + except ValueError:controls+=1 + else:raise ValueError('semantic mutation escaped') + receipt={'status':'PASS_ACTUAL_CELLZERO_WHOLE_T_JOIN','cases':len(cases),'total_steps':sum(c['steps'] for c in cases),'max_steps':max(c['steps'] for c in cases),'dual_interpreter_cases':len(cases),'source_columns':'2e5 and e4; tensor lane proven','rejecting_controls':controls,'full_GL8_materialized':False,'new_kappa':False,'cases_detail':cases,'actual_T_initializers':initializers} + if (HERE/'RESULT.json').exists():need(receipt==json.loads((HERE/'RESULT.json').read_text()),'committed receipt') + print(json.dumps(receipt,sort_keys=True,indent=2)) + +if __name__=='__main__':main() From 016da03dfffb53f7959631728f7756eff65b769c Mon Sep 17 00:00:00 2001 From: JoyboyBrian <122925040+JoyboyBrian@users.noreply.github.com> Date: Sat, 24 Oct 2026 21:31:40 -0700 Subject: [PATCH 2/2] Remove compiler depth limit and account for retained bucket maxima --- .../bit-cellzero-old-elimination/PROOF.md | 6 ++-- .../bit-cellzero-old-elimination/RESULT.json | 5 +++ .../VALIDATION.md | 36 +++++++++++++++++++ .../bit-cellzero-old-elimination/kernel.py | 11 +++--- .../bit-cellzero-old-elimination/verify.py | 4 ++- 5 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 research/bit-cellzero-old-elimination/VALIDATION.md diff --git a/research/bit-cellzero-old-elimination/PROOF.md b/research/bit-cellzero-old-elimination/PROOF.md index b1e6728c29..13a5f2c0cb 100644 --- a/research/bit-cellzero-old-elimination/PROOF.md +++ b/research/bit-cellzero-old-elimination/PROOF.md @@ -65,7 +65,8 @@ visited cells but does not prove a global recursive allocator. The program has 17+d tapes and seven symbols, independent of runtime T,Q,Z. Each instruction is a local symbol branch/write, unit head move, fixed jump, halt or reject. Pre-input Python assembly resolves labels and finite q-dependent -branches; the running program has no integer addressing or host arithmetic. +branches using iterative pre-input loop assembly (no Python recursion-depth +limit); the running program has no integer addressing or host arithmetic. The authenticated PR2776 counter/shear macros are executed directly as emitted instructions, not invoked as unpriced runtime functions. @@ -148,7 +149,8 @@ actual-T initializer adds <=4Db+6 separately, or may be absorbed by unused slack in 32K. No data-dependent host step is omitted from these paths. For space, the global source/output consume 2V, and local source/output/buckets -at most 3H. The suffix counter has S cells; Q-loop counters have (d-1)Q, +at most 4H. Across different fibers the separate bucket maxima can sum to H+S, so their +visited regions are not bounded by a single live H. The suffix counter has S cells; Q-loop counters have (d-1)Q, the split counters at most Q+1, type/Z counters T+Z, conversion scratch at most max(log2 T,log2 Q,log2 Z)+1, and descriptor widths at most T+Q+Z. The old cache and retained low0 result total K+Tb<=2K. Markers, endpoints, diff --git a/research/bit-cellzero-old-elimination/RESULT.json b/research/bit-cellzero-old-elimination/RESULT.json index f55fcfbc0c..44ebfd1eff 100644 --- a/research/bit-cellzero-old-elimination/RESULT.json +++ b/research/bit-cellzero-old-elimination/RESULT.json @@ -544,6 +544,11 @@ ], "dual_interpreter_cases": 40, "full_GL8_materialized": false, + "large_depth_compile": { + "depth": 1024, + "f": 4, + "instructions": 96762 + }, "max_steps": 83881, "new_kappa": false, "rejecting_controls": 7, diff --git a/research/bit-cellzero-old-elimination/VALIDATION.md b/research/bit-cellzero-old-elimination/VALIDATION.md new file mode 100644 index 0000000000..2cc5926846 --- /dev/null +++ b/research/bit-cellzero-old-elimination/VALIDATION.md @@ -0,0 +1,36 @@ +# Validation and exact limits + +Author checks: macOS, CPython3.12, standard library only. Registered normal and +optimized runs pass, authenticating every declared input before executable +source imports. Exact tables and RESULT.json are read-only comparison inputs. + +-40 complete contiguous-T fixtures, all compared between retained sparse and +independent expanding-array interpreters:668689 transitions total, maximum83881. +The oracle gathers by coordinates without using the split/merge traversal. +-3 actual GL-type-count initializers run in both interpreters with exact +4 bit_length(T)+6 transition counts. No GL matrices are enumerated. +-Actual source S8 and its independently computed rational inverse have the +claimed first columns. f2 fixtures exercise the actual strided cache selector. +-Complete small basis families, zero/nonzero carries, forward/inverse direction, +several low-type fibers, spectators and owner/cache/head restoration are checked. +-7 controls reject: source-byte corruption, two invalid compiler parameters, +wrong payload write, wrong source direction, occupied global workspace and +trailing cache data. These checks use explicit exceptions, not assert. +-Default f4/D1024 builds96762 instructions without Python recursion. This checks +compiler domain, not execution of the astronomical actual odd-Q payload. + +Independent agent review found a recursive pre-input assembly limit and an +understated intermediate bucket-space subtotal. Assembly is now iterative with +identical existing table bytes; the visited subtotal is4H. The displayed +(d+20)V+2TDb+128(d+1) bound already covered this correction. Independent review +is AI-assisted and is not human or proof-kernel acceptance. + +Actual q5,w4 selection is exercised at reduced fiber depth1. Depth64/256 +structural controls use Q1 and are not actual admitted odd-q GL8 executions. +The all-size odd-Q/full-T statement rests on the written proof and source +contract; no full GL8 or Q^64 payload was materialized. No native, Lean, Docker, +complete multiplication, global allocator or P3 replay is claimed. + +Final committed-byte/source-history and explicit-input export checks, followed +by read-only Git-free normal/optimized replay, are performed before handoff. +These checks establish reproducibility and packaging, not scientific admission. diff --git a/research/bit-cellzero-old-elimination/kernel.py b/research/bit-cellzero-old-elimination/kernel.py index 30eabf2d5f..e88db4e9f2 100644 --- a/research/bit-cellzero-old-elimination/kernel.py +++ b/research/bit-cellzero-old-elimination/kernel.py @@ -27,15 +27,16 @@ def initialize(tape): for tape in [LOW,GLOBAL]+persistent:initialize(tape) for src,dst in [(b.P_INPUT,b.P_COUNT),(b.S_INPUT,b.G_COUNT)]+[(b.Q_INPUT,t) for t in loops]: c.emit_binary_to_unary(a,src,b.BINARY_WORK,dst,a.fresh('extent')) - def nest(level): - tape=(loops+[b.G_COUNT])[level] + nested=[] + for tape in loops+[b.G_COUNT]: c.emit_rewind(a,tape,a.fresh('product_return')) loop,body,end=(a.fresh(s) for s in ('product_loop','product_body','product_end')) a.label(loop);a.branch(tape,{m.UNIT:body,m.RIGHT:end},fail);a.label(body) - if level==len(loops):a.write(b.S_COUNT,m.UNIT);a.move(b.S_COUNT,1) - else:nest(level+1) + nested.append((tape,loop,end)) + a.write(b.S_COUNT,m.UNIT);a.move(b.S_COUNT,1) + for tape,loop,end in reversed(nested): a.move(tape,1);a.goto(loop);a.label(end) - nest(0);a.write(b.S_COUNT,m.RIGHT) + a.write(b.S_COUNT,m.RIGHT) outer,body,done,rotate0,rotate1,after=(a.fresh(s) for s in ('types','type','types_done','rotate0','rotate1','after_rotate')) a.label(outer);a.branch(b.P_COUNT,{m.UNIT:body,m.RIGHT:done},fail);a.label(body) for tape in private:initialize(tape) diff --git a/research/bit-cellzero-old-elimination/verify.py b/research/bit-cellzero-old-elimination/verify.py index a2ebcb7c8f..9db6254167 100644 --- a/research/bit-cellzero-old-elimination/verify.py +++ b/research/bit-cellzero-old-elimination/verify.py @@ -115,6 +115,8 @@ def main(): other,steps,visited=dense(p,[({},0)],run.steps+1) need(other==[(expected.cells,1)] and steps==run.steps,'independent T initialization') initializers.append({'q':q,'f':f,'steps':steps,'bits':T.bit_length()}) + large=build(mod,3,4) + need(large.tapes==1041,'default f4/D1024 compiler has no recursion limit') cases=[] for q in (3,5,7): for inverse in (False,True): @@ -143,7 +145,7 @@ def wrong_payload(program): try:run_case(mod,5,1,5,2,1,[3,0,4],**options) except ValueError:controls+=1 else:raise ValueError('semantic mutation escaped') - receipt={'status':'PASS_ACTUAL_CELLZERO_WHOLE_T_JOIN','cases':len(cases),'total_steps':sum(c['steps'] for c in cases),'max_steps':max(c['steps'] for c in cases),'dual_interpreter_cases':len(cases),'source_columns':'2e5 and e4; tensor lane proven','rejecting_controls':controls,'full_GL8_materialized':False,'new_kappa':False,'cases_detail':cases,'actual_T_initializers':initializers} + receipt={'status':'PASS_ACTUAL_CELLZERO_WHOLE_T_JOIN','cases':len(cases),'total_steps':sum(c['steps'] for c in cases),'max_steps':max(c['steps'] for c in cases),'dual_interpreter_cases':len(cases),'source_columns':'2e5 and e4; tensor lane proven','rejecting_controls':controls,'full_GL8_materialized':False,'new_kappa':False,'cases_detail':cases,'actual_T_initializers':initializers,'large_depth_compile':{'f':4,'depth':1024,'instructions':len(large.instructions)}} if (HERE/'RESULT.json').exists():need(receipt==json.loads((HERE/'RESULT.json').read_text()),'committed receipt') print(json.dumps(receipt,sort_keys=True,indent=2))