/machines/1RB1RA_1LC1LE_1RF1LD_1RE0LD_0LB0RA_---0RC/proof.md · raw

1RB1RA_1LC1LE_1RF1LD_1RE0LD_0LB0RA_---0RC (W5-3): never halts (informal proof)

0. Summary

The tape holds two things side by side.

Each count is one round trip of the head from the counter into the word and back. It adds 1 to the counter and changes the defect:

So two counts, INC1 then INC0, move the defect two pairs to the left.

When the defect has left the word, the next round trip finds no defect. It runs into the blank left edge, and a C/F sweep shifts the whole word by one cell into the counter's low end. This is an eat.

The proof is an induction over the eat configurations E(p, N), with the invariant J(p, N): 1 ≤ N ≤ 2p. Five macro rules M1–M5, one per residue class, take E(p, N) to the next eat configuration E(p', N'). Each one is a chain of exact rules, and J holds at the result.

piece status checks (§9)
16 low-level rules (§3.1), exact runs on every context proved (finite runs and shift rules) L0
counter identities for C(n) and Q_k(x, y) (§2, §3.3) proved (string identities) CQ
count rules INC1, INC0, INC011, OVF; eat rules EAT, Y1–Y4 (§3.2, §3.3) derived from §3.1 L1, X
walk lemmas W, W2, W0, B (§3.4) derived by induction W
macro rules M1–M5 and their closed form (§3.5) derived from the above M
invariant J: coverage and closure (§4) proved by hand INV
initial segment, 165 steps (§6) exact Z
step formulas exact on all 2,092 eat configurations (2,091 eat-to-eat transitions) of a stored run to step 99,939,266,761 Z

1. Rule table (busycoq comment-block style)

1RB1RA_1LC1LE_1RF1LD_1RE0LD_0LB0RA_---0RC          (only F0 is undefined; only C0 enters F)

counter    C(0) = 0^inf,  C(2n) = 0 0 C(n),  C(2n+1) = 1 1 C(n)        = BinInc [1;1] n
           t1(n) = number of trailing 1 bits of n
           D_k(x) = the k digits of x < 2^k, lowest first;   Q_k(x, y) = D_k(x) 0 C(y)
configs    G(w, R) = 0^inf w 0 1 1 B> 0 R          (count configuration: w a word, R a right half-tape)
           E(p, N) = G((10)^p, C(N)),  N >= 1       (eat configuration)
           Y(v, R) = 0^inf v 1 1 0 A> R
           R = (11)^k 0 0 R'  has  R+ = (00)^k 1 1 R'
           C(n)+ = C(n+1)  (k = t1(n));   Q_j(x, y)+ = Q_j(x+1, y) if x+1 < 2^j  (k = t1(x))

count rules, for every word u and every R = (11)^k 0 0 R'                               steps
INC1    G(u 1 (10)^b, R)              -> G(u 0 (10)^b, R+)                              6b + 4k + 24
INC0    G(u 0 1 0 0 (10)^b, R)        -> G(u 1 0 1 0 (10)^b, R+)                        6b + 4k + 32
INC011  G(u 1 0 1 1 0 0 (10)^b, R)    -> G(u 0 1 0 1 1 0 (10)^b, R+)                    6b + 4k + 40
OVF     G(u 1 (10)^b, Q_j(2^j-1, 2m+1)) -> G(u 0 (10)^(b+1) 1^(2j+1), C(m+1))           6b + 2j + 4 t1(m) + 29

eat rules, for every u, v, R'
EAT     G(u 0 0 0 (10)^b, R)          -> Y(u (10)^(b+2), R)            (any R)          4b + 17
Y1      Y(v, (11)^s 0 0 R')           -> G(v 1, (00)^(s-1) 1 1 R')     s >= 1           4s + 9
Y2      Y(v, 0 0 0 0 R')              -> G(v 1 1 1, R')                                 7
Y3      Y(v, 0 0 1 1 (11)^s 0 0 R')   -> G(v 1 1, 0^(2s+1) 1 1 R')     s >= 0           4s + 20
Y4      Y(v, 1 1 0 1 1 (11)^i 0 0 R') -> G(v 1 1 0 1, (00)^i 1 1 R')                    4i + 18

walks, for every u
W(a,b)  G((10)^a 1 (10)^b, C(n))      -> E(a+b+[a odd], n+a+1)          a+1 counts INC1, INC0, INC1, ...
W2      G(u (10)^2 1 (10)^b, R)       -> G(u 1 (10)^(b+2), R++)          INC1, INC0
W0      G(u 0 (10)^(2c+1) 0 (10)^d, R) -> G(u (10)^(2c+2+d), R+^(2c+1))  INC0, INC1, ..., INC0
B(t)    G(u 1^(2t+1), R)              -> G(u 0 (10)^t, R+^(t+1))         t+1 times INC1

eat to eat                                                                  E(p, N) -> E(p', N')
M1  N odd                EAT,Y1; W(p+2,0)                                   p+2+[p odd],  (N+1)/2 + p + 3
M2  N = 0 (mod 4)        EAT,Y2; INC1; W(p+2,1)                             p+3+[p odd],  N/4 + p + 4
M3  N = 8m+2             EAT,Y3(0); OVF(0,0); W(p+4,0)                      p+4+[p odd],  m + p + 6
M4  N = 16m+6            EAT,Y3(1); INC1; EAT,Y4; INC1; INC011; INC1; INC0  p+7,          m + 5
M5  N = (2m+1)2^(t+3)-2, t >= 1, p+7 >= 2^t
                         EAT,Y3(t+1); INC1; EAT,Y1(1); W2^(2^(t-1)-1);
                         OVF(2^t-2, t); B(t); W0(2^(t-1)-1, t)              p+7+t,        m + 2^t + t + 1

invariant J(p, N):  1 <= N <= 2p.   J(p, N) -> exactly one of M1..M5 applies, and J(p', N')
start      c0 -->(7) G(1, C(0)) -->(24, INC1) E(0,1) -->(134, M1) E(2,4)   (step 165),  J(2,4)
           (H form, §8: S(2,4) = E(2,4) after TS, at step 171)

2. Notation and configurations

2.1 Tapes and rules

2.2 The counter

For n ≥ 0 the right half-tape C(n) is defined by

C(0) = 0^inf,    C(2n) = 0 0 C(n),    C(2n+1) = 1 1 C(n)

For n ≥ 1, C(n) lists the binary digits of n below its leading 1, lowest first, as 11 for 1 and 00 for 0. Then comes 11 for the leading 1, then blanks.

This is busycoq's BinInc [1;1] n. The three equations are BinInc_O, BinInc_mul2 and BinInc_mul2add1 in BinaryCounter_v2.v.

Let t1(n) be the number of trailing 1 bits of n, and n'' = n >> (t1(n)+1). Then

C(n)   = (11)^k 0 0 C(n'')
C(n+1) = (00)^k 1 1 C(n'')         with k = t1(n)

This is the increment R → R+ used by every count: for R = (11)^k 0 0 R', R+ = (00)^k 1 1 R'. So C(n)+ = C(n+1).

2.3 The misaligned counter Q

For k ≥ 0, 0 ≤ x < 2^k and y ≥ 0, let D_k(x) be the k digits of x (lowest first, 11/00), and

Q_k(x, y) = D_k(x) 0 C(y)

This is a fixed-width counter followed by one extra 0 cell and then an ordinary counter. Only odd y = 2m+1 occurs, so Q_k(x, 2m+1) = D_k(x) 0 1 1 C(m).

For odd y, Q_k(x, y) is never a counter word C(n): after its first k digit pairs comes the pair 0 1. (For y = 0 it would be one, since Q_k(x, 0) = D_k(x) 0^inf = C(x), but y = 0 never occurs.)

2.4 Configurations

G(w, R) = 0^inf w 0 1 1 B> 0 R          count configuration
E(p, N) = G((10)^p, C(N)),  N >= 1       eat configuration
Y(v, R) = 0^inf v 1 1 0 A> R             the head after an eat sweep

(10)^a X (10)^b with X ∈ {1, 0} is a word with a one-cell defect.

A count is one G → G transition by INC1, INC0, INC011 or OVF. An eat is one G → G transition by EAT followed by a Y rule.

An eat configuration is a configuration E(p, N). A macro rule (§3.5) goes from one eat configuration to the next. M1–M3 contain one eat and M4–M5 contain two, so the run has more eats than eat configurations. Counts along the run below are always counts of eat configurations, or of eat-to-eat transitions (one fewer).

3. Rules

3.1 Low-level rules

Each rule is an exact run that never reads a cell outside the cells written in it (check L0 runs each one with every outside cell unknown). The five rules with a parameter n are shift rules: one block, then the induction hypothesis.

rule statement steps transitions
TS 0 1 1 B> 0 → <E 1 0 1 1 6 B0 C1 D1 D0 E0 B1
EB(n) (10)^n <E → <E (10)^n 2n (E0 B1)^n
X1 1 <E → 0 A> 1 E1
X0 0 1 0 0 <E → 1 0 A> 1 0 5 E0 B0 C1 D0 E1
F011 1 0 1 1 0 0 <E → 0 1 0 1 1 A> 0 14 E0 B0 C1 D1 D0 E0 B1 E1 A1 A0 B1 E1 A1 A1
AS(n) A> (10)^n 1 → (10)^n A> 1 4n (A1 A0 B1 E1)^n
A1s(n) A> 1^n → 1^n A> n A1^n
A01 A> 0 1 → 0 A> 1 3 A0 B1 E1
A0 A> 0 → 1 B> 1 A0
D1s(n) 1^n <D → <D 0^n n D1^n
DE(k), k ≥ 1 0 1^k A> 0 0 → <E 1 0^k 1 1 k+6 A0 B0 C1, D1s(k), D0 E0 B1
CARRY(k), k ≥ 0 1 0 1 1 (11)^k A> 0 0 → 0 1 1 B> 0 (00)^k 1 1 2k+11 DE(2k+2), X1, A1, A0
CF(n) C> (01)^n → (10)^n C> 2n (C0 F1)^n
EAT0(n) 0 0 0 <E (10)^n 1 → (10)^(n+2) C> 2n+6 E0 B0 C0 F1, CF(n+1)
CS 1 0 C> 1 → 1 1 0 A> 3 C1 D0 E1
Z0 0 A> 0 0 → 1 0 1 A> 6 A0 B0 C1 D0 E1 A1

What the main ones do:

3.2 Count rules

INC1. For every word u, b ≥ 0 and R = (11)^k 0 0 R':

G(u 1 (10)^b, R)  -->(6b+4k+24)  G(u 0 (10)^b, R+)
configuration rule
u 1 (10)^b 0 1 1 B> 0 R
u 1 (10)^b <E 1 0 1 1 R TS
u 1 <E (10)^(b+1) 1 1 R EB(b)
u 0 A> (10)^(b+1) 1 1 R X1
u 0 (10)^(b+1) A> 1 1 R AS(b+1)
u 0 (10)^b 1 0 1 1 (11)^k A> 0 0 R' A1s(2k+2)
u 0 (10)^b 0 1 1 B> 0 (00)^k 1 1 R' CARRY(k)

INC0. Same, with X0 and AS(b+2) instead of X1 and AS(b+1):

G(u 0 1 0 0 (10)^b, R)  -->(6b+4k+32)  G(u 1 0 1 0 (10)^b, R+)

After EB(b) the head is at u 0 1 0 0 <E (10)^(b+1) 1 1 R, and X0 gives u 1 0 A> 1 0 (10)^(b+1) 1 1 R. If u is empty, the 0 of 0 1 0 0 is the blank cell left of the word.

INC011. Same, with F011, A01 and AS(b+1):

G(u 1 0 1 1 0 0 (10)^b, R)  -->(6b+4k+40)  G(u 0 1 0 1 1 0 (10)^b, R+)

F011 ends at u 0 1 0 1 1 A> 0 (10)^(b+1) 1 1 R, and A01 moves A past that 0. This rule occurs only in M4 (b = 0).

OVF. For every u, b ≥ 0, j ≥ 0 and m ≥ 0, with i = t1(m):

G(u 1 (10)^b, Q_j(2^j-1, 2m+1))  -->(6b+2j+4i+29)  G(u 0 (10)^(b+1) 1^(2j+1), C(m+1))

The left part is that of INC1. The right part starts at u 0 (10)^(b+1) A> 1 1 (11)^j 0 1 1 C(m).

configuration rule
u 0 (10)^(b+1) 1^(2j+2) A> 0 1 1 C(m) A1s(2j+2)
u 0 (10)^(b+1) 1^(2j+2) 0 A> 1 1 C(m) A01
u 0 (10)^(b+1) 1^(2j+1) 1 0 1 1 (11)^i A> 0 0 C(m'') A1s(2i+2), with C(m) = (11)^i 0 0 C(m'')
u 0 (10)^(b+1) 1^(2j+1) 0 1 1 B> 0 (00)^i 1 1 C(m'') CARRY(i)

The last line is G(u 0 (10)^(b+1) 1^(2j+1), C(m+1)) by §2.2. The overflowed digits stay on the tape as the block 1^(2j+1), and the next counts take it apart (rule B).

In the H form used for Rocq (§8), every count is "left part, then right part". The left part is the same for all R, and the right part is the same for all words.

3.3 Eat rules

EAT. For every word u, b ≥ 0 and right half-tape R:

G(u 0 0 0 (10)^b, R)  -->(4b+17)  Y(u (10)^(b+2), R)
configuration rule
u 0 0 0 (10)^b <E 1 0 1 1 R TS
u 0 0 0 <E (10)^(b+1) 1 1 R EB(b)
u (10)^(b+3) C> 1 R EAT0(b+1)
u (10)^(b+2) 1 1 0 A> R CS

An eat configuration has blank cells left of its word, so EAT applies to every E(p, N) with u empty and b = p. It also applies to G((10)^q, Q_s(1, y)) in M4 and M5.

Y rules. Each one starts at Y(v, R) = v 1 1 0 A> R.

rule R result steps chain
Y1(s), s ≥ 1 (11)^s 0 0 R' G(v 1, (00)^(s-1) 1 1 R') 4s+9 A1s(2s), CARRY(s−1)
Y2 0 0 0 0 R' G(v 1 1 1, R') 7 Z0, A0
Y3(s), s ≥ 0 0 0 1 1 (11)^s 0 0 R' G(v 1 1, 0^(2s+1) 1 1 R') 4s+20 Z0, A1s(2s+2), DE(2s+3), X1, A1s(1), A0
Y4(i) 1 1 0 1 1 (11)^i 0 0 R' G(v 1 1 0 1, (00)^i 1 1 R') 4i+18 A1s(2), A01, A1s(2i+2), CARRY(i)

Y1 is CARRY on the last two cells 1 0 of 1 1 0. In Y3, Z0 gives v 1 1 1 0 1 A>; after A1s the 1-run behind the 0 has length 2s+3, and DE(2s+3) ends with E reading the third 1; X1, A1 and A0 then stop at a G configuration.

What the Y rules do to the counter. These are the identities of §2.2 applied to the low digits of C(N) (check CQ).

N C(N) rule result
odd, s = t1(N) (11)^s 0 0 C(N >> (s+1)) Y1(s) G(v 1, C((N+1)/2))
≡ 0 (mod 4) 0 0 0 0 C(N/4) Y2 G(v 1 1 1, C(N/4))
≡ 2 (mod 4), N+2 = (2m+1)2^(s+2) 0 0 1 1 (11)^s 0 0 C(m) Y3(s) G(v 1 1, Q_s(0, 2m+1))

For the misaligned counter:

R rule result
Q_s(1, y) = 1 1 0 0 (00)^(s-2) 0 C(y), s ≥ 2 Y1(1) G(v 1, Q_(s-1)(1, y))
Q_1(1, 2m+1) = 1 1 0 1 1 C(m) Y4(t1(m)) G(v 1 1 0 1, C(m+1))

The cases N ≡ 2 (mod 4) split by s: s = 0 is N ≡ 2 (mod 8), s = 1 is N ≡ 6 (mod 16), and s ≥ 2 is N ≡ 14 (mod 16).

3.4 Walk lemmas

W(a, b). For a, b ≥ 0 and n ≥ 0:

G((10)^a 1 (10)^b, C(n))  -->*  E(a + b + [a odd], n + a + 1)        in a+1 counts INC1, INC0, INC1, ...

Proof. By induction on a, in steps of 2. - a = 0: INC1 with u empty gives G(0 (10)^b) = G((10)^b) = E(b, n+1). - a = 1: INC1 gives G(1 0 0 (10)^b). INC0 with u empty (its 0 is the blank cell) gives G(1 0 1 0 (10)^b) = E(b+2, n+2). - a ≥ 2: W2 with u = (10)^(a−2) gives G((10)^(a-2) 1 (10)^(b+2), C(n+2)), then the induction hypothesis. ∎

W2. For every u, b ≥ 0 and R with two increments:

G(u 1 0 1 0 1 (10)^b, R)  -->  G(u 1 0 1 0 0 (10)^b, R+)  -->  G(u 1 1 0 1 0 (10)^b, R++) = G(u 1 (10)^(b+2), R++)

The first step is INC1. The second is INC0 with the word (u 1) 0 1 0 0 (10)^b.

W0(c, d). For every u, c, d ≥ 0 and R with 2c+1 increments:

G(u 0 (10)^(2c+1) 0 (10)^d, R)  -->*  G(u (10)^(2c+2+d), R+^(2c+1))        counts INC0, INC1, ..., INC0

Proof. By induction on c.

For c = 0 the word is u 0 1 0 0 (10)^d. Its first 0 is the first defect, and the last 0 of 1 0 0 is the second. INC0 cancels both:

G(u 0 1 0 0 (10)^d, R)  -INC0->  G(u 1 0 1 0 (10)^d, R+)

For c ≥ 1, INC0 and INC1 move the second defect two pairs left:

G(u 0 (10)^(2c-1) 1  0 1 0 0  (10)^d, R)  -INC0->  G(u 0 (10)^(2c-1) 1 (10)^(d+2), R+)
                                           -INC1->  G(u 0 (10)^(2c-1) 0 (10)^(d+2), R++)

The hypothesis applies with (c−1, d+2). ∎

B(t), the block stage. For every u, t ≥ 0 and R with t+1 increments:

G(u 1^(2t+1), R)  -->*  G(u 0 (10)^t, R+^(t+1))        t+1 counts INC1, with b = 0, 1, ..., t

Proof. For 0 ≤ j < t, INC1 with b = j takes (u 1^(2t-2j)) 1 (10)^j to u 1^(2t-2j) 0 (10)^j = u 1^(2t-2j-1) (10)^(j+1). At j = t, INC1 takes u 1 (10)^t to u 0 (10)^t. ∎

3.5 Eat-to-eat macro rules

Each macro rule goes from E(p, N) to the next eat configuration E(p', N'). The table of §1 gives the chains and the results. Here are the chains in full.

M1 (N odd).

E(p, N)  -EAT,Y1->  G((10)^(p+2) 1, C((N+1)/2))  -W(p+2,0)->  E(p+2+[p odd], (N+1)/2 + p + 3)

M2 (N ≡ 0 mod 4). INC1 with u = (10)^(p+2) 1 1 and b = 0:

E(p, N)  -EAT,Y2->  G((10)^(p+2) 1 1 1, C(N/4))  -INC1->  G((10)^(p+2) 1 (10), C(N/4+1))
         -W(p+2,1)->  E(p+3+[p odd], N/4 + p + 4)

M3 (N = 8m+2). OVF with j = 0, u = (10)^(p+2) 1 and b = 0. Note Q_0(0, 2m+1) = 0 1 1 C(m).

E(p, N)  -EAT,Y3(0)->  G((10)^(p+2) 1 1, Q_0(0, 2m+1))  -OVF->  G((10)^(p+2) 1 0 1 0 1, C(m+1)) = G((10)^(p+4) 1, C(m+1))
         -W(p+4,0)->  E(p+4+[p odd], m + p + 6)

M4 (N = 16m+6).

step rule G configuration reached
1 EAT, Y3(1) G((10)^(p+2) 1 1, Q_1(0, 2m+1))
2 INC1 (u = (10)^(p+2) 1, b = 0) G((10)^(p+3), Q_1(1, 2m+1))
3 EAT (b = p+3), Y4 G((10)^(p+5) 1 1 0 1, C(m+1))
4 INC1 (b = 0) G((10)^(p+5) 1 1 0 0, C(m+2))
5 INC011 (u = (10)^(p+4), b = 0) G((10)^(p+4) 0 1 0 1 1 0, C(m+3))
6 INC1 (b = 1) G((10)^(p+4) 0 1 0 0 1 0, C(m+4))
7 INC0 (u = (10)^(p+4), b = 1) G((10)^(p+7), C(m+5)) = E(p+7, m+5)

M5 (N = (2m+1)·2^(t+3) − 2, t ≥ 1, precondition p + 7 ≥ 2^t). Here s = t+1 ≥ 2.

phase rule G configuration reached counts
(a) EAT, Y3(t+1) G((10)^(p+2) 1 1, Q_(t+1)(0, 2m+1)) 1
(b) INC1 G((10)^(p+3), Q_(t+1)(1, 2m+1)) 1
(c) EAT (b = p+3), Y1(1) G((10)^(p+5) 1, Q_t(1, 2m+1)) 1
(d) W2, 2^(t−1) − 1 times G((10)^(p+7-2^t) 1 (10)^(2^t-2), Q_t(2^t-1, 2m+1)) 2^t − 2
(e) OVF (b = 2^t − 2, j = t) G((10)^(p+7-2^t) 0 (10)^(2^t-1) 1^(2t+1), C(m+1)) 1
(f) B(t) G((10)^(p+7-2^t) 0 (10)^(2^t-1) 0 (10)^t, C(m+t+2)) t+1
(g) W0(2^(t−1) − 1, t) G((10)^(p+7+t), C(m+2^t+t+1)) = E(p+7+t, m+2^t+t+1) 2^t − 1

Notes on M5:

The closed form. The counter value is f = (N+1)/2, N/4, (N+6)/8 for M1–M3, and the number of low digits eaten is e = 1, 2, 3. Then

p' = p + 1 + e + [p odd],    N' = f + p' + [p even]

Where a macro rule ends. The induction does not need this paragraph: it only uses that each macro rule takes E(p, N) →+ E(p', N'). The paragraph explains why the eat configurations of the run are exactly the ones on the macro-rule orbit, which check Z compares with a direct run.

So the next eat configuration after E(p, N) is the end of its macro rule.

4. Invariant, coverage, closure

J(p, N):   1 <= N <= 2p

4.1 Coverage: under J, exactly one macro rule applies

The classes N odd, N ≡ 0 (mod 4) and N ≡ 2 (mod 4) partition N ≥ 1. For N ≡ 2 (mod 4) write N + 2 = (2m+1)·2^(s+2), with s, m determined by N. - s = 0 is M3 (m = (N−2)/8). - s = 1 is M4 (m = (N−6)/16). - s ≥ 2 is M5 with t = s − 1.

M5's precondition follows from J:

(2m+1) 2^(t+3) - 2 = N <= 2p    gives    (2m+1) 2^(t+2) <= p + 1,    so    2^t <= p + 1 <= p + 7

M1–M4 have no precondition.

4.2 Closure: J(p, N) implies J(p', N')

In every case N' ≥ 4. It remains to show N' ≤ 2p'.

∎

The bound is used with very little room only in M1 (N' ≤ 2p + 3 against 2p' ≥ 2p + 4). Along the blank-tape orbit, N/p = 2 at the start E(2, 4). After that it stays below 2 and comes close to it: over the next 2,000,000 eat configurations the maximum is 1.9999996, at E(5598694, 11197386).

5. Progress and halting

So the halting transition is reachable only through a C/F sweep that meets C> 0 0. The only C/F sweep in the rules is EAT0 inside EAT, and it runs over (10)^(b+1) 1, which has no 0 0. In every macro rule, EAT's three 0s are the blank cells left of the word.

6. Initial segment (exact)

c0 = 0^inf A> 0^inf  -->(7)   0^inf 1 0 1 1 B> 0 0^inf = G(1, C(0))         A0 B0 C1 D0 E1 A1 A0
                     -->(24)  G(0, C(1)) = E(0, 1)       at step 31          INC1 with u empty, b = 0, k = 0
                     -->(134) E(2, 4)                    at step 165         M1 with p = 0, N = 1

J(2, 4) holds: 1 ≤ 4 ≤ 4. (J(0, 1) does not, so the induction starts at E(2, 4).)

From there the orbit is E(2,4) → E(5,7) → E(8,12) → E(11,15) → E(14,22) → E(21,6) → … , with E(21,6) at step 3,097.

The macro rules, with their step formulas, reproduce a stored direct run to 10^11 steps (check Z). It has 2,092 eat configurations, from E(0,1) at step 31 to E(7367, 197) at step 99,939,266,761, so 2,091 eat-to-eat transitions. Configurations and step numbers all agree.

A second simulator, run fresh from the blank tape, agrees at every eat configuration as well:

Run step by step to step 3,000,000 (20,000,000 in the long run), the blank-tape run meets no eat configuration off the orbit.

7. Conclusion

7.1 Non-halting

  1. The run reaches E(2, 4) at step 165, and J(2, 4) holds (§6).
  2. If J(p, N), exactly one of M1–M5 applies (§4.1). It takes E(p, N) →+ E(p', N') as a finite chain of exact rules (§3), and J(p', N') holds (§4.2).
  3. No rule executes F0 (§5).

By induction the machine runs forever. In busycoq terms this is multistep_nonhalt to E(2, 4) (in the H form of §8, S (2, 4) at step 171), then progress_nonhalt_cond with P := J on pairs (p, N).

7.2 Why it is not a cryptid

The branch taken at each eat depends on N mod 8 and on the 2-adic valuation of N+2. Along the orbit these look pseudo-random. But J is closed under every branch, by linear bounds and one power-of-2 bound in M5. No branch needs to be predicted, and none halts. So the proof rests on no claim about the order in which the branches occur.

8. Lemma plan for Rocq (template: BECv5 TM1, architecture only)

Shared with TM1. - A binary counter BinInc with an increment lemma from BinaryCounter_v2. - A budget word with a one-cell defect, one budget pair per count, and an eat of low counter digits. - BigStep lemmas, multistep_nonhalt with an esx start, and progress_nonhalt_cond with a linear invariant: TM1 has a ≤ 1+b, here N ≤ 2p.

Different from TM1. - The counter sits on the right, so the increment comes from RBinInc_spec (TM1 uses LBinInc_spec). - The defect walks away from the counter. Each count is a full round trip over the word, not a bounce at the counter. - The eat happens at the far, blank edge, through a C/F sweep over the whole word (EAT0). - The eat removes 1–3 digits depending on N mod 8. N ≡ 6 (mod 8) adds the misaligned counter Q and a two-defect transient (M4, M5). - TM1's LIncs' (shifted counter) has no analogue. Here the eat leaves a clean counter, except for Q.

The H form. The Rocq configurations are taken 6 steps later than G, after TS:

H l R     := l <{{E}} [1;0;1;1] *> R                 (G(w, R) after TS, with l = 0inf <* w)
S '(p,N)  := H (0inf <* <[1;0]^^p) (C N)              (the eat configuration E(p, N), after TS)

So S (p, N) is E(p, N) followed by TS: E reads the last cell of the word. It is named S as in TM1, since E is a state name. Steps from S to S are the same as from E to E, so the macro rules are unchanged. Only the start moves: c0 -->(171) S (2, 4), that is 165 steps to E(2, 4) and then the 6 steps of TS.

Every count then splits into two lemmas. - A left lemma holds for every right side r. It goes from H w r to w' <* <[1;0;1;1] {{A}}> r, the head on the right after AS and A1s(2). - A right lemma holds for every left side l. It goes from l <* <[1;0;1;1] {{A}}> R to l <{{E}} [1;0;1;1] *> R+.

proof.md Rocq source
C(n), §2.2 C n := BinInc [1;1] n; BinInc_O, BinInc_mul2, BinInc_mul2add1, BinInc_mulpow2sub1 for the residue splits of §3.3 BinaryCounter_v2.v
CARRY with A1s and TS: the right lemma on C RInc l n : l <* <[1;0;1;1] {{A}}> C n -->+ l <{{E}} [1;0;1;1] *> C (1+n) by RBinInc_spec with qR = <[1;0;1;1] (the list [1;1;0;1]), qL = [1;0;1;1], QR = A, QL = E. Its hypothesis l <* <[1;0;1;1] {{A}}> [1;1]^^k *> [0;0] *> r -->+ l <{{E}} [1;0;1;1] *> [0;0]^^k *> [1;1] *> r is A1s(2k), CARRY(k), TS. Proof: two shift rules (A over 11, D over 1), then es RBinInc_spec; TM1 uses LBinInc_spec
Q_k(x, y), §2.3 Dk k x : list Sym (Fixpoint, low digit first) and RIncQ: x+1 < 2^k → l <* <[1;0;1;1] {{A}}> Dk k x *> [0] *> C y -->+ l <{{E}} [1;0;1;1] *> Dk k (1+x) *> [0] *> C y, by induction on k with the same hypothesis lemma new; the pattern of TM2's LIncs'
INC1, INC0, INC011 left parts LInc1 u b r : H (u <* <[1] <* <[1;0]^^b) r -->+ u <* <[0] <* <[1;0]^^b <* <[1;0;1;1] {{A}}> r (EB(b), X1, AS(b+1), A1s(2)); LInc0 (X0, AS(b+2)); LInc011 (F011, A01, AS(b+1)) new; EB and AS by shift_rule_L/R or ind b
OVF right part ROvf l j m : l <* <[1;0;1;1] {{A}}> [1;1]^^j *> [0;1;1] *> C m -->+ (l <* <[1;0] <* <[1]^^(2j+1)) <{{E}} [1;0;1;1] *> C (1+m): A1s(2j), A01, A1s(2), then RInc new
EAT, §3.3 LEat u b R : H (u <* <[0;0;0] <* <[1;0]^^b) R -->+ u <* <[1;0]^^(b+2) <* <[1;1;0] {{A}}> R (EB(b), EAT0(b+1), CS). On E(p, N), u = 0inf, with 0inf = 0inf <* [0;0;0] (solve_const0_eq, as TM1 does) new; CF by a shift rule
Y1–Y4 Y1 on C(2n+1): A1s(2), then RInc. Y2: es (Z0, A0, TS). Y3(s): Z0, ind s for A1s and D1s, then es (DE, X1, A1, A0, TS). Y4: A1s(2), A01, A1s(2), then RInc. Y1(1) on Q: es new
W(a, b), W2, W0, B(t), §3.4 lemmas on H by lt_wf_ind (W, W0) or plain induction (W2 iterated in M5(d), B(t)), each step a left lemma followed by RInc/RIncQ new
M1–M5 BigStep_odd, BigStep_0mod4, BigStep_2mod8, BigStep_6mod16, BigStep_14mod16: S (p,N) -->+ S (p',N'), each with the §1 precondition as a hypothesis, chained by follow TM1 BigStep
J, §4 progress_nonhalt_cond with P := fun '(p,N) => 1 <= N <= 2*p. Case split: Nat.even N, then N mod 4, then for N ≡ 2 (mod 4) lowbitS_cases ((N-2)/4), which gives (N−2)/4 + 1 = (2m+1)·2^s. Arithmetic by lia after naming 2^t TM1 nonhalt
init multistep_nonhalt with (c' := S (2,4)), then unfold S, H, C; esx: 171 steps (165 to the G form E(2, 4), then TS) TM1 nonhalt

Risks.

List orientation. Left words go in reading order with <[..]. The H form's right list [1;0;1;1] is already in tape order.

M5's exponents. M5 chains three inductions: 2^(t−1) − 1 W2 steps, then B(t), then W0 with c = 2^(t−1) − 1. Name T := 2^t and keep every bound linear in T, so that lia closes them.

The carry hypothesis. RBinInc_spec needs its hypothesis for every n. A single es over a power can overshoot, so prove the A run and the D run as shift lemmas first.

The blank edge. EAT on E(p, N) reads three blank cells left of the word. Rewrite 0inf as three 0 cells followed by 0inf before applying the lemma.

No decider certificates are involved.

9. Machine checks

Every claim above has a named check. The checks are run by one self-contained script with its own simulators. All 108 checks pass in the default run with two random seeds, and in a long run with larger ranges.

A windowed run starts from the cells written in a rule, with every other cell unknown. Reading an unknown cell fails the check, so a rule that passes holds for every left and right context.

section what is checked size (default run, seed 1)
T F0 is the only undefined transition; C0 is the only transition into F
TEETH every single-transition mutation of the table (the 77 that change a used transition) fails some L1 windowed check b, k ≤ 2
L0 every rule of §3.1 by a windowed run, with its exact transition string; no F0. CARRY = DE + X1 + A1 + A0 and DE(1) = A0 + TS. C0 occurs only in EAT0 and CF n, k ≤ 40
CQ the identities of §2.2–2.3 and the counter tables of §3.3; for odd y, Q_k(x, y) is not a counter word (its pair k is 0 1), while Q_k(x, 0) = C(x) n < 4096 plus 3,000 random n < 2^120; every Q_k(x, y) with k ≤ 8
L1 INC1, INC0, INC011, OVF, EAT, Y1–Y4 by windowed runs (any u, any R'), with the step formulas; each one also as the concatenation of its §3.1 chain, transition by transition b, k ≤ 10 exhaustive (484 per count rule), plus 600 random with b ≤ 300
X the rule-level executor (the rules of §3.2–3.3 applied by pattern) against the direct TM at every G configuration, configuration and step count 200 random E(p, N), p ≤ 120 (55,928 G transitions)
W W(a, b); W2, W0 and B(t) for random words u; W2 and OVF on Q_t a ≤ 40; 1,500 random each
M for every E(p, N) with p ≤ 80, N ≤ 2p: the chain of §3.5 equals the executor, in rule names, step counts and end state, and equals the closed form. Also random large states, and the direct TM on random states and on every 6 mod 8 boundary case (t ≤ 6, m ≤ 2, p = 2^t − 7, 2^t − 6, 2^t, (N+1)/2: 66 cases). On each direct run whose chain has at most 300,000 steps, every TM step is tested: the first eat configuration after the start is the end of the chain 6,480 states; 400 random (p ≤ 2000, N < 2^60); 216 direct TM runs, 177 of them watched step by step (10,988,446 TM steps)
INV coverage (M5's precondition and 2^(t+2)(2m+1) ≤ p+1), closure, p' ≥ p + 2 every state with p ≤ 1500 (2,251,500 states; long run: p ≤ 3000), plus 300,000 random up to p ~ 2^80
Z 7 steps to G(1, C(0)) with their transitions; G(1, C(0)) and E(0, 1) are the only G configurations to step 31; E(2, 4) at step 165 and its H form S(2, 4) at step 171; the stored 10^11-step run's 2,092 eat configurations equal the model, step numbers included; a fresh direct run agrees at every eat configuration; every step from blank: the eat configurations met are exactly those of the model orbit; J, and N < 2p after E(2, 4), along the model orbit fresh: 174 eat configurations to step 59,308,869 (long run: 337 to step 399,190,301); every step: to step 3,000,000 (long run: 20,000,000); orbit: 300,000 eat configurations (long run: 2,000,000)
NEG below the precondition (p + 7 < 2^t) the run does not follow M5 t = 4..7

The windowed runs (L0, L1) are proofs of the finite rules. Each parametric rule is proved by the composition written in §3. The windowed runs on parameter ranges and the direct TM runs check that the compositions and step formulas are right.

Appendix (working copy only): evidence and files

This appendix and the review log below are not part of the public write-up. When submission/proof.md is made, it is everything above this heading, with the title shortened to the machine string and ": never halts", the header Status line updated, and §8 rewritten for the finished .v. That part passes tools/writeup_lint.py with 0 errors (only the WARN on the word "plan" in the §8 heading and on the snapshot date in the header).

Review log