/machines/1RB1RC_1LC1LE_1RD0RA_1LB0RA_0LD1LF_1LD---/proof.md · raw

W7-1: the table of lines 75, 179, 265, 597 — informal proof, revision 2 (STUCK)

State of the argument (2026-10-14, revision 2).

0. Machine and the halting transition

0 1
A 1RB 1RC
B 1LC 1LE
C 1RD 0RA
D 1LB 0RA
E 0LD 1LF
F 1LD ---

F is entered only by E1 → 1LF, and E only by B1 → 1LE. So the machine halts exactly when B reads a 1 whose two left neighbours are 1 1 (B1, then E1, then F1).

The four listed strings are this table under a renaming of the states (check_proof.py §E checks each map):

740 line string start renaming ABCDEF → mirrored
75 1RB1RC_1LC1LE_1RD0RA_1LB0RA_0LD1LF_1LD--- A ABCDEF no
597 1RB1RE_1LC0LD_1RA0LD_1LA1LB_0RC1RF_1RC--- B DABCEF yes
265 1RB0RE_1LC0RE_1LA1LD_0LB1LF_1RC1RA_1LB--- C ECABDF no
179 1RB0LD_1RC1RE_1LA0LD_1LB1LC_0RA1RF_1RA--- D DBCAEF yes

Renaming and mirroring do not change halting. So each listed line halts iff the line-75 table halts from the blank tape in the start state of that row. The rest of this file works with the line-75 table and a start state s ∈ {A, B, C, D}.

1. The configuration family

A field of size f ≥ 0 is the word

[f] := 1 (01)^f          (2f+1 cells; f gaps of one 0 between its 1s)

Fields are joined by separators, the runs of 0s between two fields:

separator cells name
\| 00 pipe (normal)
+ (none) plus: the two fields touch, …1 1…
# 000 hash: left behind by a dead field

A token list is T = f_1 s_1 f_2 s_2 … s_{k−1} f_k. The last field L := f_k is the growing end. The family is the set of configurations

X(T) := 0^inf [f_1] s_1 [f_2] … s_{k-1} [f_k] 0 0 1 1 D> 0^inf

with the head on the blank cell right of 0011, in state D. The machine enters X(T) by C0 → 1RD at the right end. A half-cycle is the run from one X(T) to the next configuration of the form X(T′). Some half-cycles pass through other D:R configurations that are not of the form X(T) (the re-pairings do).

2. Sweep lemmas

Each lemma is an exact run on the cells shown. The head never reads a cell outside them, except that the last move may land on the cell named x. Notation: D> u means the head is in state D on the first cell of u.

lemma before after steps
R (right end) 0 0 1 1 D> 0 D> 0 1 1 1 1 4
S (sweep chunk) x 1 0 1 D> 0 D> x 1 1 1 1 8
P (pass a pipe) 0 0 1 D> 0 D> 0 0 1 1 3
T (turn) 1 0 D> 0 1 0 1 0 A> 1 5
A (rightward pair) A> 1 1 1 0 A> 2
H (hole) 1 0 A> 0 1 0 1 0 A> 1 7
E (end) 1 0 A> 0 0 0 0 1 0 0 1 1 D> 0 5

Corollaries (induction on f with S).

1 (01)^f D> 0 --> 1 D> 0 1^(2f) in 4f steps

x 1 (01)^f D> 0 --> D> x 1^(2f+2) in 4f+4 steps

So the leftward sweep converts fields into runs of 1s. After an even field it lands on the field's own leading 1 and crosses a pipe by P. After an odd field it lands on the separator itself, out of phase.

The ODD half-cycle, composed. Let the scan (below) stop at an odd field j whose left separator is a pipe, and let d := f_{j−1} ≥ 1.

  1. R enters the sweep.
  2. L and every even field between j and L are swept (even corollary), each followed by P across its pipe. Each pipe leaves one single 0, a hole, behind.
  3. j is swept (odd corollary). The head lands out of phase, on the second cell of the pipe left of j.
  4. T writes 0 on the last cell of d (d loses one unit) and turns the head into state A.
  5. The A sweep rewrites the 1-runs as (10)^m. H rebuilds a 00 pipe at every hole, and E closes the right end with 0011 D>.

Cell bookkeeping: d ends 2 cells shorter, every field and pipe from j to the field before L is rebuilt 2 cells further left, and the closing 0011 D> lands 4 cells further right than before. So L gains 6 cells: L grows by 3. Total: 6S + 12n + 12 steps, where S is the sum of the fields from j to L and n is their number (§3).

All other rules are compositions of the same lemmas, plus the variants at + and # (the sweep hits 1 1 or 000 instead of 00). check_proof.py §A checks the seven lemmas and both corollaries (f = 0..29). §B checks every composed rule on random instances, with exact tokens and step counts.

3. Macro rules

3.1 The scan

The sweep reads fields from L leftwards. It passes an even field followed by a pipe on its left (even corollary + P). It stops at the first of:

Let S be the sum of the fields from the stopping field to L, and n their number. At a stop of type (b), the stopping field is the one right of the separator. For the two OVERFLOWs, S and n are over all fields.

3.2 The rules

Each rule is an exact run from X(T) to X(T′). check_proof.py §B checks 18 cases × 150 random instances. It also checks exhaustively every token list with ≤ 4 fields, values 0..5 and the three separators on which a rule applies: 26,681 instances, 53 more than in revision 1 (the far-end 0 + lists). The other 4,194 are outside cases. All agree with direct simulation, tokens and step counts.

stop condition name T → T′ (all rules also do L := L + 3 unless they create a new L) steps
(a) odd j, pipe left d = f_{j−1} ≥ 1 ODD d → d − 1 6S+12n+12
(a) odd j, pipe left d = 0, pipe left of d DEATH a \| 0 \| j → a # j 6S+12n+12
(a) odd j, pipe left d = 0, + left of d, j ≠ L DEATH-MERGE a + 0 \| j → (a+j+1) 6S+12n+12
(a) odd j, pipe left d = 0 is the first field DEATH-FAR 0 \| j … → j … 6S+12n+12
(a) odd j, + left d ≥ 1 ODD-PLUS d + j → (d−1) \| (j−1) 6S+12n+8
(a) odd j, + left d = 0 is the first field FAR-0-PLUS-ODD 0 + j \| e_2 \| … \| L → (j−1) \| e_2 \| … \| L 6S+12n+8
(a) odd j, # left — BOUNCE a # j \| e_1 \| … \| e_m \| L → a + (j+2) + (e_1+1) + … + (e_m+1) + (L+1) \| 1 (j = L: a + (L+2) \| 1) 6S+6n+28
(a) j = f_1 — OVERFLOW-ODD f_1 \| f_2 \| … \| L → (f_1+2) + (f_2+1) + … + (L+1) \| 1 6S+6n+28
(b) +, x left of it x ≥ 2 PLUS x + e → (x−2) \| e 6S+12n+10
(b) + x = 1 is the first field PLUS-FAR-1 1 + e … → e … 6S+12n+10
(b) + x = 1, + left of x, e ≠ L PLUS-MERGE-1 y + 1 + e → (y+e+1) 6S+12n+10
(b) + x = 0 is the first field FAR-0-PLUS-EVEN 0 + e_1 \| e_2 \| … \| L → (e_1+3) + (e_2+1) + … + (L+1) \| 1 6S+6n+30
(b) #, a left of it a ≥ 1 HASH-ODD a # e → (a−1) # e 6S+12n+18
(b) # a = 0 is the first field HASH-FAR-0 0 # e … → e … 6S+12n+18
(c) — OVERFLOW-EVEN f_1 \| … \| L → 1 + (f_1+1) + … + (L+1) \| 1 6S+6n+28

Every rule takes at least 8 steps.

The re-pairings are BOUNCE, the two OVERFLOWs and FAR-0-PLUS-EVEN. In each of them, every field right of the stop gains 1, and the stopping field gains 2 (3 for FAR-0-PLUS-EVEN, where the 0 is absorbed). All their separators become +, the old L becomes an ordinary field, and a new L = 1 is born. The two FAR-0-PLUS rules are new in revision 2. In both of them, S and n are over the fields right of the 0.

3.3 Outside cases

A token list on which no rule of §3.2 applies is outside:

situation what the machine does (examples: check_proof.py §C)
(o1) stop (b) at + with x = 0, x not the first field halts when x has + on its left (the scan reaches a 0 between two +; 3 + 0 + 20 \| 14 \| 8 \| 22 halts after 272 steps, and 300 of 300 random lists of this shape halt). With a pipe or # left of x it leaves the rule set; it halts too when the scan then reaches an earlier + 0 + (0 + 0 + 2 \| 0 + 2: 27 steps)
(o2) stop (b) at + with x = 1 and a pipe or # left of x y \| 1 + e → y # e (not a rule here)
(o3) stop (b) at + with x = 1, + left of x, and e = L (y + 1 + L) not covered
(o4) HASH-ODD with a = 0 not first gap-4 separator (5 \| 0 # 20 → 5 <4> 20)
(o5) DEATH with # left of d gap-4 separator (a # 0 \| j → a <4> j)
(o6) DEATH-MERGE with j = L a + 0 \| L → (a+L+4), other step count
(o7) ODD-PLUS with d = 0, d not the first field not covered (5 + 0 + 21 \| 14 \| 22 → 26 \| 14 \| 25)
(o8) any separator other than \|, +, # not covered

The proof has to keep the orbit out of (o1)–(o8). It never uses what the machine does there. (o5) and then (o8) occur once in each opening run (§5.1), before the base.

4. The region counter

4.1 Regions

Cut the token list at every + and #. The pieces are regions. The last region, the one that contains L, is the active region. Every other region is frozen until the active region reaches its left end.

Write the active region as g_1 | g_2 | … | g_n | L, with left boundary X ∈ {+, #, far end}. Define

b_i := g_i mod 2,  b_L := L mod 2
B_i := b_1 + … + b_i  (mod 2),  for i = 1..n
P   := B_n + b_L      (mod 2)          (the region's direction)
N   := sum_i B_i 2^(n-i)               (the region's counter, 0 <= N < 2^n)

The depth of g_i is n − i. The field next to L has depth 0.

4.2 Counter lemma

Lemma C1. Suppose the scan of a half-cycle stops inside the active region and does not reach X. That is, (N, P) is neither (0, 0) nor (2^n − 1, 1). Then the half-cycle acts on exactly one field g_i and adds 3 to L, and

P = 1:  N' = N + 1,  and g_i has depth v2(N+1)
P = 0:  N' = N - 1,  and g_i has depth v2(N)
P' = P

If g_i ≥ 1, the rule is ODD and g_i loses 1. If g_i = 0, the field dies: by DEATH (pipes on both sides), DEATH-MERGE (+ on its left), DEATH-FAR (it is the first field), or the outside cases (o5) (# on its left) and (o6). After a death, N and P are those of the new active region (C4, C5). The formulas above are for ODD.

Proof. Let j be the last odd field (L counts as field n+1). The rule flips the parity of g_{j−1} and of L. So it flips B_{j−1}, …, B_n and leaves P unchanged.

A field is reached by a carry only when every bit below it equals P and its own bit is 1 − P. A field of value 0 has b = 0, so the region's top field g_1 (B_1 = b_1 = 0) can die only in an up-run (P = 1).

Corollary C2 (runs and ruler counts). Suppose no field dies. From (N, P = 1), the region runs 2^n − 1 − N half-cycles to the top. From (N, P = 0), it runs N half-cycles to the bottom. In a run between counter values N₀ and N₁, the field at depth u loses one unit for every x in the run with v2(x) = u: that is, once per odd multiple of 2^u. The fields are budgets, and their parities are the bits of a binary counter, whose direction P is fixed for the whole run. A full run of 2^m − 1 steps takes 2^(m−1−u) from the field at depth u. (check_proof.py §D: exhaustive on bit patterns for n ≤ 10, and on random regions of the abstract map.)

4.3 Boundary events

At the end of a run, the scan reaches X. At the bottom (N = 0, P = 0), every field of the region is even and L is even. At the top (N = 2^n − 1, P = 1), g_1 is odd, the other fields are even, and L is even.

X (z := the field left of X) at the bottom at the top
+, z ≥ 2 PLUS: z − 2 (parity kept) ODD-PLUS: z − 1 (parity flipped), and g_1 − 1
+, z = 1, + left of z PLUS-MERGE-1: y + 1 + g_1 → (y+g_1+1) (y's parity flipped, z is gone) ODD-PLUS: z → 0
+, z = 1, z first PLUS-FAR-1: z is removed ODD-PLUS: z → 0
+, z = 1, pipe or # left of z (o2) ODD-PLUS: z → 0
+, z = 0 first field: FAR-0-PLUS-EVEN (re-pairing); otherwise (o1) first field: FAR-0-PLUS-ODD (z is removed, g_1 − 1); otherwise (o7)
#, a := z HASH-ODD (a ≥ 1): a − 1, and now N = 0, P = 1. HASH-FAR-0 (a = 0, first): 0 # is removed. a = 0 otherwise: (o4) BOUNCE (re-pairing)
far end OVERFLOW-EVEN (re-pairing, with the prefix 1 +) OVERFLOW-ODD (re-pairing)

The top field can also die in an up-run (C1). Its death is DEATH-MERGE when X is + (and is (o6) if g_2 = L), DEATH-FAR at the far end, and (o5) when X is #.

Lemma C3 (merged state). Consider one of these events: a boundary event at a + (PLUS, ODD-PLUS, PLUS-MERGE-1), or a DEATH-MERGE of the top field. Afterwards the new active region is

H, x*, e_2, …, e_m | L

Here x is the field the event changed or created, and H is the list of fields left of x in its region. Every e_i is even, and L is odd. So its counter is

(H's bits) B* B* … B*,     P = 1 − B*

where B is the B-bit of x:

event x* B*
PLUS z − 2 B_z (unchanged)
ODD-PLUS z − 1 1 − B_z (flipped)
PLUS-MERGE-1 y + g_1 + 1 1 − B_y (flipped)
DEATH-MERGE (y + 0 \| j) y + j + 1 B_y (unchanged)

After PLUS-FAR-1, the region has no H and no x*. All its fields are even, so N = 0 and P = 1. After DEATH-FAR, the first field is odd and the others are even, so N = 2^n − 1 and P = 0.

Proof. Use the event's row of §3.2 and the parities above.

4.4 The death dance

Lemma C4. Suppose a field at depth w ≥ 1 of the active region is 0 when a carry reaches it, and has pipes on both sides (a | 0 | b …). Then DEATH gives a # b …, and the new active region (b … L, w fields) has N = 2^w − 1 and P = 0. If no further field of that region dies, the next 2^(w+1) half-cycles are

(2^w - 1) x ODD,   HASH-ODD (a -> a-1),   (2^w - 1) x ODD,   BOUNCE

Field b (depth w − 1) loses exactly 1 in each of the two runs. So it reaches the BOUNCE as b − 2, and the BOUNCE gives it back as b. A field at depth u < w − 1 loses 2^(w−u) in all. If a = 0 is the first field, HASH-FAR-0 replaces HASH-ODD: 0 # is removed and the region runs up to the far end, where OVERFLOW-ODD follows.

Proof. At the carry, the bits at depths below w are all equal to P, and the dying field's bit is 1 − P (C1). The dying field is even, so its B equals that of the field before it. After DEATH, b is the only odd field among b … L−1, and L has turned odd. Then C2 and §4.3 give the sequence. ∎

The dance is legal if b ≥ 3 (b is odd at the DEATH, so b − 1 ≥ 2 and b − 2 ≥ 1) and a ≥ 1 or a is the first field.

A death inside the dance. If a field of the region b … L dies before the BOUNCE, C1–C3 still describe every step, with the inner death first. The inner death leaves a second #, and C6 reverses the region (when its climb ends at a PLUS). At the far end this can give BOUNCE with a = 0 as the first field. The result 0 + (b+2) + … is no longer an outside case: the climb then ends with FAR-0-PLUS-EVEN or FAR-0-PLUS-ODD (§3.2). This is the reviewer's case 22 | 59 (half-cycles 6082–8108). Interior inner deaths still leave two #, and only a budget clause can rule them out (§6.3).

4.5 Re-pairing and the climb automaton

After a re-pairing the list is

W  s_1 + s_2 + … + s_r | 1

Here W is Z + for BOUNCE (Z = a, the field left of the old #) and for OVERFLOW-EVEN (Z = the prefix 1, the first field). W is empty for OVERFLOW-ODD and FAR-0-PLUS-EVEN. Every singleton s_i is odd and ≥ 1, because the re-pairing adds 1 to an even field, 2 to an odd one, or 3 to the even field after a far-end 0.

Lemma C5 (climb). While the active region g_1 | … | g_m | L has + or the far end on the left of g_1 (and no field dies):

So a climb starts in D, because s_r = L + 1 and the new L = 1 are odd. It stays in D while the singletons it meets are ≥ 3. It switches to U at a singleton 1, that is, after a re-paired field equal to 0. It goes back to D only through a singleton 1 met in mode U.

In mode D with no singleton 1 (revision 1's case), stage t has t fields and the field at depth u loses 2^(t−1−u) in it. A field keeps its depth once it has joined. So over a climb of T stages, the field at depth u loses 2^(T−u) − 1, plus 2 at its own PLUS.

Proof. Induction on the stages. C3 (H empty, B* = parity of the new g_1) gives the mode after each event, C2 the run, and §4.3 the stage-end event. ∎

On the orbit. The U-branch occurs on the four orbits (4 of the 200 climbs to 10^13). One example is the reviewer's: at step 1.53·10^6 (line 75), OVERFLOW-EVEN of 38 | 42 | 0 | 168 | … gives 1 + 39 + 43 + 1 + 169 + …. The climb then meets the singleton 1: 1 + 39 + 43 + 1 + 166 | … becomes 1 + 39 + 210 | … (PLUS-MERGE-1, mode U). Next come ODD-PLUS on 39, ODD-PLUS on the prefix (1 + 37 | … becomes 0 | 36 | …) and DEATH-FAR, as C5 says. check_proof.py §H replays C5 stage by stage, with the exact token list at every stage end:

4.6 Reflection

Lemma C6. Take a death a | 0 | b … at depth w in a run of direction P. Suppose the dance (C4) and the climb (C5) complete without further deaths. Then the enclosing region comes back with the dying field removed and the w + 1 re-paired fields (the w fields right of the dying field, plus the old L) in its place. H is the list of bits above a. Before the death the counter is

P = 1:  N = H 0 0 1^w        P = 0:  N = H 1 1 0^w        (B_a = 1 − P)

The climb ends on a in one of two ways:

N' = H P^(w+2), P' = 1 − P

N' = H (1−P)^(w+2), P' = P

Proof. Apply C3 to the event on a. HASH-ODD has flipped a's bit once. PLUS keeps it and ODD-PLUS flips it back. Every field after a is even, and L is odd. ∎

So a death is a mirror (D-end) or a rewind (U-end). On line 75's orbit to 10^13, all 31 deaths whose dance and climb complete have a D-end, and check_proof.py §H checks C6 on each one. The 32nd has a nested death. The U-end appears in random climbs (522 of 3,000 meet PLUS-MERGE-1), and on the orbits after OVERFLOW-EVEN (above).

Nested deaths. C4–C6 assume that no second field dies before the climb ends. On line 75's orbit to 10^13, 1 of 32 interior deaths breaks this: a second death comes 2,695 half-cycles into a depth-9 dance and climb. C1–C3 still describe every step. Only the closed-form sequences of C4–C6 need the hypothesis, and they then apply to the inner death first.

5. Starts, opening runs, and the start-parametric lemma

5.1 Opening runs (direct simulation, check_proof.py §E)

line start first token configuration gap-4 configurations (outside cases o5, then o8) base: first configuration K(c) step
75 A step 33: 1 \| 1 steps 17175, 17637 47 \| 66 \| 18 \| 64 30,379
597 B step 8: 0 steps 17470, 17932 51 \| 66 \| 18 \| 64 30,722
265 C step 27: 3 steps 19279, 19741 73 \| 66 \| 18 \| 64 32,795
179 D step 20: 1 steps 19176, 19638 71 \| 66 \| 18 \| 64 32,668

The four bases are one family:

K(c) := X(c | 66 | 18 | 64),     c in {47, 51, 73, 71}  (all odd)

The opening passes once through the outside cases (o5) and (o8): X # 0 | 53 | 70 → X <4> 53 | 73 → (ODD) X <4> 52 | 76 → X + 1 + 53 + 77 | 1, with X = 0, 4, 26, 24. That is why the argument starts at K(c) and treats the opening as a finite computation.

From each base, check_proof.py §E checks every D:R event predicted by the abstract map against direct simulation of the start, to 3·10^7 steps by default. Before this, the observe stage compared the exact accelerated simulator with direct simulation at 10^10 on all four starts. The oracle-checked runs (data/abstract_runs.md) then match the abstract map on every non-ODD/PLUS event to 10^13 for all four starts.

5.2 Start-parametric lemma

Lemma SP. Let T₂ arise from T₁ by adding 2e (e > 0) to one field, so T₁ is the smaller copy. Suppose that field of T₁ is not the value tested by the applicable rule with value ≤ 1: not d of ODD/DEATH or ODD-PLUS, not x of PLUS, and not a of HASH-ODD. Then T₁ and T₂ take the same rule. The results again differ in one field only, by 2e, with T₂ the larger: the same field, the field it was merged into, or its re-paired copy (+1, +2 or +3 on both).

Proof. Every rule tests parities, which an even offset does not change. Besides that, it tests only the values ≥ 1 / ≥ 2 / = 0 / = 1 listed. Since T₁ is the smaller copy and its field passes the test, the larger copy passes the same test. Every rule is affine in each field, with coefficient 1. ∎

So from the bases, the four orbits take the same rules in the same order, with one field offset by 47 − c, until the smallest copy of that field is tested at value ≤ 1 at the far end. check_proof.py §F: the four rule sequences agree on all 2,208,574 half-cycles to 10^13, and Lemma SP holds on 12,435 random paired half-cycles. The abstract runs to 10^16 (data/abstract_runs.md §3) give the first divergences:

After that, the far ends differ. So the four proofs would share everything but the far-end bookkeeping, and that bookkeeping is exactly where §6.4 finds the race.

6. Invariant

6.1 Statement of J (revision 2)

J(T) is the conjunction of:

Lemma LE. If J(T), then a rule of §3.2 applies to T. In particular, the machine does not halt between X(T) and X(T′), and X(T′) is reached in at least 8 steps.

Proof. Go through the outside cases of §3.3:

Every other configuration is covered by a row of §3.2. ∎

check_proof.py §G confirms LE exhaustively: every token list with ≤ 5 fields, values 0..4 and separators | + # that satisfies J has a rule (39,644 lists).

Reduction. Suppose J holds at every X(T) reached by the macro steps from K(c). Then the machine never halts from that start. Each step X(T) → X(T′) is an exact run of at least 8 steps (§3.2, LE), so multistep_nonhalt + progress_nonhalt_cond apply with P := J (as in #3).

6.3 What is open: O1, an inductive J* ⇒ J

J is not inductive. The reviewer's one-step catalogue (all 100,575 J-states with ≤ 5 fields and values ≤ 5) shows that J is left in exactly five ways. check_proof.py §G recomputes it on the LE domain and finds the same five classes:

exit how example
(a) HASH-ODD takes a 1 to 0 left of a # that is not first (J2) 0 \| 1 # 2
(b) BOUNCE with a = 1 after a pipe (J3) 0 \| 1 # 1
(c) ODD takes the field right of # from 1 to 0 (J2) 0 # 1 \| 1
(d) DEATH creates a second #, or a 0 that is not first left of # (J2) 0 # 1 \| 0 \| 1, 0 \| 0 \| 0 \| 1
(e) ODD turns + 1 \| L into + 0 \| L (J5) 0 + 1 \| 1

Revision 2's J3 admits a far-end 0 +, so the old exit 0 # 1 → 0 + 3 | 1 is no longer an exit.

J-members that halt. 2 + 1 # 2 satisfies J and halts after 186 steps (direct simulation). Its path is HASH-ODD 2 + 0 # 5, then BOUNCE 2 + 0 + 7 | 1, then ODD 2 + 0 + 6 | 4, then (o1). The reviewer found 1,675 such halting members among the 9,150 J-states with ≤ 4 fields and values ≤ 5.

What J* must contain. The dance and the climb are deterministic given (N, P) and the field values (C4, C5). So the local clauses can be written exactly, as functions of the counter:

These clauses close the one-step catalogue only if the values they demand are present when each death happens. Those values are fixed by the global budget race: which field runs out first, and what its neighbours hold at that moment. For the bulk of the list this looks tractable: the observed margins are wide (min b = 29 and min a = 6 at interior deaths to 10^16), and no perturbation of the bulk below fails there. The far end is different (§6.4).

6.4 The far-end race (new in revision 2; why the status is STUCK)

Fast exact map. check_proof.py §I runs the abstract map with C1/C2 jumps. A run of ODD half-cycles that meets no zero field is applied in one step: the per-depth carry counts, L + 3s, and the exact machine steps in closed form. Every other event goes through step(). On all four orbits it reproduces the plain map event for event, steps included, to 10^11. With it:

The race. At a prefix such as 1 + 0 | 0 | x …, two events compete. In a down-run of the far region, PLUS-FAR-1 removes the 1 + first. In an up-run, the carry reaches the second 0 first, and DEATH gives 1 + 0 # x. The direction is a parity that the whole history fixes (C1, C6). check_proof.py §C shows both orders on 1 + 0 | 0 | 23 | 86 | 300 | L, a J-member:

Line 75's first window took the safe order. The unsafe order leaves the rule set:

What the machine does after (o4) and (o7) is not in the rule set. (o1) with + on the left halts (§C: every example, and 300 of 300 random lists).

Perturbation evidence (work/rev2/perturb2.py, exact map to 10^100; outputs in work/rev2/). The configuration of line 75 at 10^13 was perturbed 300 times: L redrawn, three fields changed by up to ±50 %, or all fields scaled by 0.5–1.5.

Conclusion.

7. Progress and halting

8. Lemma plan against kill #3

Same architecture as #3: one macro rule per half-cycle, merges, a re-pairing at overflow, a per-step invariant. The digits are different.

#3 here
pair blocks [p,q,d] with an explicit digit block s(d) fields [f]; the digit is the parity of a prefix sum (B_i, §4.1), so there are no digit blocks
Dec_k: one macro rule per decrement; touches pairs 1..k ODD: one field per half-cycle, at carry depth v2 (C1); L + 3
countdown V, F1–F3 touch counts region counter N with direction P; ruler counts (C2)
DecMerge (a good block runs out) DEATH → # dance (C4), DEATH-MERGE, PLUS-MERGE-1
Ov / X1 (re-pairing at overflow) BOUNCE, OVERFLOW-ODD/EVEN, FAR-0-PLUS-EVEN, then the climb automaton (C5)
E-cycle / L-slot alternation reversal (D-end) or rewind (U-end) at every death (C6)
tail T1/T2 the far-end prefix: 1 +, 1 + 1 +, 0 \|, 1 + 0 \|, … — here not a closed finite table, but a race (§6.4)
INV+(e): thresholds on scaled q, Ep parity, pair-1/2 budgets J* = J + (B1)–(B4) with scaled budgets f·2^depth (§6.3), plus a far-end clause that §6.4 shows is not a threshold

Formalization route (only if O1 were closed):

  1. Definition X (T: list (nat * sep)) on the left side of the head. The shift lemmas S and A by ind.
  2. One lemma per rule of §3.2, by follow over the sweep lemmas. The scan is an induction over the even suffix.
  3. init: one es call per start to K(c) (≈ 3·10^4 steps).
  4. nonhalt by progress_nonhalt_cond with P := J*.

Upstream Sk1Machines.v and the Sk1like_TC_v*.v files (mxdys) are not templates: they use different word sets and different digits.

9. Evidence: python3 -B check_proof.py

The script is self-contained: stdlib only, with its own simulator, parser, abstract map and fast map. The SUMMARY is PASS only if A, B, D, E, F, G, H and I pass; C is informational. PASS covers the proved parts; it does not prove O1. The defaults (--direct 3e7 --far 1e13 --fast 1e100) take about 160 s, and the latest run (PASS) is in data/check_proof.out.

§ checks
A the 7 sweep lemmas (head stays in the window); the even and odd field sweeps for f = 0..29
B 18 rule cases × 150 random instances, exact tokens and steps; exhaustive: every token list with ≤ 4 fields, values 0..5 and separators \| + # on which a rule applies
C outside-case examples, including the halting + 0 + (300 random lists), and the J-members that halt (informational)
D counter lemma C1/C2, exhaustive on bits for n ≤ 10; random regions on the abstract map
E the four string maps; the four opening runs to K(c); every predicted D:R from K(c) to --direct steps, against direct simulation
F Lemma SP on random pairs; the four orbits' rule sequences agree to --far
G J at every configuration of the four orbits to --far; LE exhaustive (≤ 5 fields, values 0..4); the one-step exits (a)–(e) from J on the same domain
H C4 on every interior death of line 75; C5 stage by stage after every re-pairing on the four orbits to min(--far, 10^13); C6 (D-end and U-end formulas) on every completed death of line 75; 3,000 random climbs with singletons 1; the reviewer's reproducer
I the fast map equals the plain map event for event to 10^11; the four orbits to --fast steps with no outside case

10. Review log