/machines/1RB0LE_1RC---_0RD0RB_1RE0LA_1RF0LF_1LD1RF/notes.md · raw

W6-1 · 740 line 10 · 1RB0LE_1RC---_0RD0RB_1RE0LA_1RF0LF_1LD1RF

Observe stage, 2026-10-14 (Claude, Wave 6). Claimed in coord/claims.tsv; Astra told (coord/mailbox/to-astra/20261014-*-claude-w6-1-claim-holdout10.md).

Pre-checks

Frames and words

The state map from ours to SOBCv10 is A,B,C,D,E,F -> D,E,F,A,B,C with a mirror. So our machine is SOBCv10's machine started in SOBCv10's D. Everything below is written in SOBCv10's frame (its wall on the left), because that is how its lemmas read. Our own frame is the mirror image: fossil and counters on the left, the tally growing to the right (Fig 2).

Name SOBCv10 frame our frame (mirrored) role
A 11111011 11011111 binary digit 0
B 11101111 11110111 binary digit 1
C, D, E 11111110, 11101110, 11111010 01111111, 01110111, 01011111 marker words, mixed digits
U 1011 1101 separator / pending signal
X 0100 0010 one unit of the tally
W 10100100 00100101 the wall (SOBCv10 common_left_wall)
t 11 11 the edge mark ([1;1])

A hash is one signal: SOBCv10 B> at the left end of the word region (our <E), returning as SOBCv10 <F (our C>).

Mechanism (same as SOBCv10)

Our opening, exactly (hash-level simulation)

Tool: work/rsim4.c (exact TM simulation; a returning hash at the wall is teleported by the proven left_emit_call, so a hash costs O(1) instead of O(u)). Checked on SOBCv10's own start: it reproduces sobc1_first_half = 2^23+2^22+2^20-2 = 13,631,486 as the n of its third exception (work/hashlevel_run_sobcv10_start.txt). Our run: work/hashlevel_run_ours.txt.

Exception hashes so far n what comes out
1, 2 1, 1 0, 0 start-up
3 58 28 W B> C A U^59 A B B t, i.e. output U^3 A B B t
4 3,221,225,527 n4 = 3·2^29 - 2 = 1,610,612,734 frontier B^30 C t C A A t t (not SOBCv10's B^w t)

Between 3 and 4: cd drains 28 pairs, one more U pair is eaten, and the odd C A U A B B t turns into the frontier above (counter width 30).

Our opening, symbolically (families checked on small instances)

work/opening_checks.py, 40/40 PASS (work/opening_checks.out). Each family was run on small parameters and matched a closed form; the real parameters are m = 30, p = n4.

Step Family Checked on
(a) exception 4 W X^(2n+1) B> B^m C t C A^2 t^2 with n = 3·2^(m-1)-2 gives W B> C A U^(2n) A^(m-1) D^2 A U E A m = 2..5 (full tape)
cd C A U^(2n) drains with 2(2^n-1) hashes (SOBCv10 exception_done_cd) rule 4, 10/10
(b) fossil run A^p C A^m D^2 A U E A (m even) needs H = 2^(p-1)(1292·2^m+4)/3 - 1 hashes to frontier B^(p+m+5) U B t 11 (p, m) pairs
(c) exception 5 input the raw pass turns B^W U B t into E^(W-1) U^3 A W = 3, 4, 5, 6, 8
(d) exception 5 output n5 = 2^p - 2 + 2^(p-2)(1292·2^m+4)/3 hashes into E^(p+m+4) U^3 A give A^(p-2) digits_{m+6}(R) U^3 A t, R = (140·2^m+4)/3 + 4 9 (p, m) pairs

For m = 30, p = n4 this gives:

exception 5 output = A^(n4+2) B B A B A · B A B A B A B A B A B A B A B A B A B A B A B B B A B · U^3 A t

SOBCv10's generic exception_done_ca n5 pairs rest (pairs = n4/2 + 1) then gives

W X^(round_post_unary c p) B>  A^(round_primary_width c p)  U U  [col]  U^3 A t
c = (n5 - 6)/2,  p = n4/2 - 3 = 3·2^28 - 4  (half_parameter c = n5, half_parameter p = n4)
col = B B B A B A B A B A B A B A B A B A B A B A B A B B B A B   (29 digits, LSB first)

Check against sobc1_round_invariant

Condition Value Holds?
shape post_ca_state (round_post_unary c p) (round_primary_width c p) [col] exact, plus a far-end fossil U^3 A t after the column no (fossil)
round_width_dominance 2·29+4 <= n4+1; 2(n4+1+29)+4 <= n5+1 yes
columns_schedule via abstract_singleton_good width 29 = 2·14+1; value 391,468,375 in [3, 2^29-6] yes
columns_head_odd 391,468,375 is odd yes

So the column fits perfectly, and the far-left fossil (our frame) is the one obstacle: the tape is binary_columns_word [col] ++ U^3 ++ A ++ t then blank, not binary_columns_word [col] then blank. This explains why ccz181078 proved SOBCv10/11/12 without this start.

Does the fossil matter? Each round ends with carries reaching the far end (binary_columns_to_frontier appends the edge t). A small round analog (work/rside.c on A^4 U^2 B A B A B U^3 A t) shows the fossil digit is flipped (A -> B) and the round's frontier becomes ... B^w U^3 B t instead of ... B^w t. So the fossil is a live one-digit pseudo-column with a U^3 separator, and it changes the frontier that SOBCv10's exception lemmas expect. SOBCv10's round lemma does not apply verbatim.

Lead for the next stage (crude round analog, work/round_analog_with_fossil.txt; the start W X^5 B> A^4 U^2 B B A B A U^3 A t does not satisfy the round's numeric relations). Across two exceptions the fossil went U^3 A t -> U^5 B -> U^7 D t. The U run grows by one pair per exception, and U is transparent to hashes (hash_U). The working guess is a tail U^(2k+1) x t with k growing by 1 per round and a one-digit x. This must be confirmed on true round states.

Rules validated (work/validate_rules.py, 10 random instances each, on our machine via mirroring)

emit 10/10, d_absorb 10/10, u_pairs 10/10, cd 10/10, all_A_to_exception 10/10, exception (canonical) 10/10 (work/validate_10.txt).

Cryptid check

No pseudo-random arithmetic. Every step is a binary counter or an exact exponential formula. The open question is structural (the fossil), not number-theoretic. Not a cryptid.

qsim

Block size 4, recursive rules on: 1.69e13 steps in 600 s, no rules proved (only chain steps), as the scout said (work/qsim_n4.jsonl).

Next

Study the fossil per round. Run hash-level analogs over 3-5 rounds with small parameters and find how U^k x t evolves: k, the digit x, and whether it ever feeds a carry back. Two outcomes:

Wave 6, stage 1 (2026-10-14)

Goal: find the far-end tail's per-round law (Claude, about 1 h of the 2 h budget).

Result: the law is closed, and it ends the SOBCv10 regime. Four more exceptions after the entry, a carry reaches the tail's edge in the middle of an exception. In every test that event turns the run into a translated cycler. So the machine looks non-halting, by a route quite unlike SOBCv10's.

Everything below is in SOBCv10's frame. Tools and outputs: work/tail/ (build: gcc -O2 -o rside ../rside.c; gcc -O2 -o fsim fsim.c; gcc -O2 -o tcyc tcyc.c; gcc -O2 -o cyccert cyccert.c).

The tail as one digit with levels

The tail is U^(2k+1) y after the last column. U passes hashes through unchanged, so y acts as one more digit. It has six levels:

level -1 0 1 2 3 4
y A (no t) B (no t) E t D t A t B t

A carry into the tail raises the level by one. A carry that arrives at level 4 is the exception trigger.

Three laws

T1, timing. Count the digits as A = 0, B = 1, D = -1, E = -2, with the tail level at weight 2^W (W = number of digits before the tail). Call the total V. Each hash adds 1, and the trigger can only come when everything is B and the tail is at level 4. So the trigger is hash number

5 * 2^W - V        (SOBCv10's own count is 3 * 2^W - V)

modelA.py: 80/80 random instances, including tails at levels -1 and 0.

T2, raw pass. The exception's raw return turns

B^w U^(2k+1) B t   into   E^(w-1) U^(2k+3) y,   level(y) = k - 1   (k = 0..5)

The last column loses its top digit, and the U run grows by one pair. For k >= 6 the return overflows the tail. rawlaw.py: 48/48 for k = 0..5 (1-3 columns, widths 2-9); 16/16 overflow cases for k = 6..9 end in the cycler below.

T3, decode. Let L be the effective tail level: the level minus any deficit left in the last column. By T1 and SOBCv10's frontier count,

n = n_s + (2 - L) * 2^(W-1)

Here n_s is SOBCv10's round_next_half for the same columns. The n_s part decodes exactly as in SOBCv10. Its last column ends below 2^(w-1), so nothing reaches the top digit, which is the eaten one. The extra part gives 2 - L carries into the tail. If L > 2, the truncated last column is instead left short by L - 2 levels (pre-state E/D digits).

modelD.py checks the whole exception (raw pass, launch, decode) against T2 plus a segment decode of n hashes on 25 random cases. 23 match; the other two are not decodes: one decode trigger (see below) and one n = 0.

Per exception, then:

L' = k + 1 - L,   k' = k + 1
last column: width w -> w - 1,  value v -> 2^(w-1) - floor(v/2)
the decode triggers  iff  (k - 1) + (2 - L) >= 5

The chain from the entry (tailchain.py)

exception k L at post_ca last column: width, value tail after the raw pass decode
6 1 3 29, 391,468,375 U^5 B (level 0) deficit 1, so L = -1
7 2 -1 28, 72,701,269 U^7 E t (1) 3 carries, reaching B t: L = 4
8 3 4 27, 97,867,094 U^9 D t (2) deficit 2, so L = 0
9 4 0 26, 18,175,317 U^11 A t (3) 2 carries: the second hits B t, a trigger in the middle of the decode

column_safe holds for the last column in every row. The z-columns born in each round are SOBCv10's, so SOBCv10's invariant covers them; only the round parameters differ, because n differs.

The exit does not hinge on these exact numbers. Even if a level were off by one, k reaches 6 by exception 11 at the latest, and that exit (a raw-pass overflow) gives the same cycler.

The exit: a translated cycler

1000100010001000100010001000100010010001000100010001000100010010100100

with blank to the right. Every 919 steps it moves 3 cells right and never reaches more than 67 cells back. Checked over 2,000 periods with random junk to the left. In our frame it is the mirror image, a cycler running left.

How the toys get there (trigtrace.py and sweeps2.c, k = 4, n = 900, columns 2, 2, 3, 2). This is not a short epilogue: the trigger starts a second counter phase.

  1. The trigger's return turns x x pairs into D going left as far as the 1 0 marker, then comes back.
  2. Phase P1, 256 long sweeps. Each sweep runs from the 1 0 marker to the right end, ticks a counter made of the old columns (now written in B D / U C / B U / U A patterns), takes 2 v from the pending-call block on the left, and adds 2 x.
  3. Phase P2, about 200 shorter sweeps, with the left block frozen.
  4. The counter runs out at the right end, and the 919/3 cycler starts there.

P1's length (256) is the same for n = 874 ... 2,000. At n = 874 the v block runs out exactly at P1's end. That run takes another path through the wall and still reaches the same cycler (sweeps2_n900.out shows the n = 900 run).

P1 law so far (p1fit.py, k = 4, n = trigger + 300): P1 = 2^(W-1) sweeps, W = P + sum of the column widths at post_ca. The layouts tested were 2 | 2,2,3,2 (1,024), 2 | 2,2,2,2 (512), 2 | 2,2,3 (256), 2 | 3,3 (128), 2 | 2,4 (128) and 3 | 2,2,3,2 (2,048). So for k = 4 (the exception-9 case) P1 is one full cycle of the truncated columns. P1 depends on k. For 2 | 2,2,3,2 it is 1,024, 3,072 and 4,096 for k = 4, 2 and 1, so

P1 = (5 - k) * 2^(W-1)

This is what T1 and T2 predict if the decode trigger acts like an ordinary trigger for the tail. Its return grows the U run to U^(2k+3) and leaves the tail at level k, and the counter then needs 5 - k full cycles to trigger again. So the run after a decode trigger looks like a short series of nested triggers, each growing the U run, until a raw pass overflows (k >= 6).

In exception 9 (k = 4) that is one cycle, then a trigger with U^13, so k = 6: overflow. P2, which comes before the cycler in the toys, is not explained yet. P1 uses 2 v per sweep. In the 2 | 2,3,2 runs (W = 9, P1 = 256) the v block at the trigger is 2n - 1,239 = 2^W - 3 + 2 * (pending calls). So it is just enough for P1, except for the last sweep or two when no calls are pending; that run takes the wall path and still reaches the cycler. Whether 2^W - 3 + 2 * (pending) holds in general is not yet checked. P2 (131 ... 1,855 sweeps) has no fitted law yet.

At the real sizes this is a race between the P1/P2 counter (old columns, huge widths), the x fuel (finished calls) and the v block (pending calls). Every small case ends in the cycler, including the boundary ones, but the race is not computed.

What this changes

Still open

Wave 6, stage 2 (2026-10-14)

Goal: explain what happens after the decode trigger in exception 9, then write proof.md (Claude, about 1 h 30 of the 2 h budget).

Result: the exit is closed. Stage 1 read it as two "sweep phases", P1 and P2. They are two nested exceptions, and each one follows the same laws as the rounds. The second one overflows in a purely local way into the 919/3 cycler. proof.md is written (informal, full chain from blank to the cycler).

Tools and outputs: work/s2/ (build: gcc -O2 -o phase phase.c; gcc -O2 -o ywin ywin.c; gcc -O2 -o rside2 rside2.c).

Correction to stage 1

phase.c prints a tokenized tape at every long turn and groups runs by the left signature. Traces: t1.out (2 | 2,3,2) and t2.out (2 | 2,3,3).

The exit, step by step (SOBCv10 frame)

After a raw pass of an all-B counter, the word is E^(P-1) A, then E^(w_j-1) A per middle column, then E^(w_m) for the truncated last column. Its value is 2 - 2^(W+1) + S, with S = sum of 2^(offset) over the non-primary columns. So by T1, with tail level λ, the next trigger is on hash

h(λ) = (7 - λ)·2^W - S - 2
  1. Decode trigger. Exception 9 (λ = 3) triggers on call h_t = 4·2^W - S - 2. By T3, n9 = h_t + c, where c ≥ 0 is SOBCv10's decoded column value, so the trigger always happens, with c calls pending.
  2. E′. The trigger's raw pass is T2 with k = 5: the tail becomes U^13 B t and the last column loses another digit (25 → 24). The return finds 101 ++ X4^(2f+5) = 1010 ++ V4^(2f+4) ++ 010, which is exception_pre_left (f+1) with another far end. So E′ has n′ = f + 1 = h_t calls, and exception 9's pending calls are frozen behind it.
  3. E″. E′'s counter has W - 1 digits and λ = 4, so E″ fires on E′ call h″ = 3·2^(W-1) - S - 2. That is (5/2)·2^W calls before E′ would run out.
  4. Overflow (k = 6). E″'s hash walks right over the all-B counter (raw_B_forward, raw_U_to_X). From l B> B^w U^13 B t 0^inf (w ≥ 1) the machine reaches the cycler window Y in 1208 + 14(w - 1) steps and never visits l.
  5. Cycler. L Y B> 0^inf → L 100 Y B> 0^inf in 919 steps for every L, never visiting L.

Checks (all PASS)

check result file
h_t and h″ formulas against the hash-level simulator; phase runs (calls - 5, the first short sweeps are below the trace's length cut); cycler reached; rem = 0, 1, 2, 50, 300 52/52 (W ≤ 11) nested.py, nested_a.out, nested_b.out
n′ = f + 1: from exception_call_left r f with the counter all B and the tail U^11 B t, the cycler comes iff f + 1 ≥ h″; the step count does not depend on f or r 32/32 eprime.py, eprime.out
overflow lemma O, w = 1..30, random junk on the left (never read) 90/90 overflow_check.py, overflow_check.out
cycler shift rule, random L (never read) 50/50 overflow_check.out
T1 with D/E deficit digits in the columns 120/120 t1_deficit.py, t1_deficit.out
family (a) exactly at m = 30: raw pass gives E^30 D A U E A; n4 = 3·2^29 - 2 hashes give A^29 D^2 A U E A, no trigger PASS (1,610,612,734 hashes, about 7 min) fam_a_m30.py, fam_a_m30.out
deep cascades: decode triggers at k = 0..3 with a wide last column (2-6 nested exceptions) 5/5 reach the cycler cascade.out

A side fact: U^13 B t with no digit before it does not reach the cycler, because the head swings far to the left. U^15 and longer do. In the real run the last column still has 24 digits at E″, so this case does not occur.

Robustness

The levels in the chain (3, -1, 4, 0) decide when the run leaves the rounds, not whether it leaves:

So the exit comes by exception 11 at the latest. Stage 1's decodetrig2 (60/60, k = 0..5) agrees.

Status

Formal planning stage (2026-10-14)

Goal (Dennis answered 'plan'): put the exit in Rocq, state the tail-aware round lemma, and price the full formalization (Claude, one 2 h stage). Plan: rocq/plan.md.

Setup: rocq/cc.sh copies a file into rocq/build/ and compiles it with coqc 8.20.1 (one coqc at a time, only if fewer than 2 run system-wide). The library is the unmodified upstream SOBCv10.v (vendor 0940bb9, identical to cdaf693), compiled as W61.SOBCv10: 84 s, 0.8 GB.

Proved: rocq/W61Exit.v (366 lines, no Admitted, compiles in 2 s)

Stated: rocq/W61Plan.v (4 Admitted, compiles in 2 s)

The precondition tail_round_pre is a draft. It holds at the entry by hand and is consistent with the four rows of proof.md section 4.

Estimate

About 10 stages of 2 h (range 9-12). By stage:

Main risk: the T3 decode with D/E digits, outside SOBCv10's A/B odometer lemmas. Fallback: explicit lemmas for the four rounds.

2026-10-16: completed funded spike

The exact blank-start theorem now passes all three unchanged kill checks, with completed kernel replays and source SHA256 cd0bfee325f897047164a4cc11325ca3e30d2acfadedf4c2abecec0a859327ca. The proof connects the opening to three returning rounds, a nested overflow, and the 919-step translated cycle. The finite safe-column budget replaces the unbounded draft invariant. Earlier proof and status are retained under rocq/. Public package: submission/proof-package.zip. The kill is locally verified; upstream submission and acceptance are separate milestones.