/machines/1RB0LD_1RC0RA_1RD1RF_1LA0LE_1RE1LD_0RB---/rocq/log.md · raw

Machine #3 formalization log (rocq/)

Round 1 (2026-10-10)

Layout

Low-level structure found (all proved by plain es, symbolic powers)

A macro step = Start (3 short bounces; A -> B entering pair 1) + one long rightward sweep in state B + a turnaround + one leftward sweep + an end phase at the left edge. - Rightward sweep over a pass pair [p,q+1,0] leaves the region 0 (01)^p 110 (01)^q 11 (left list reg p (q+1) l), the leading 0 being the boundary cell. - Two leftward modes: - Dec mode (state D arrives reading the region's trailing 0): PassL turns the region into [p+1,q,1]; EndPh rebuilds (10)^(h+4) 11001. - Ov mode (D arrives reading the region's last 1, its boundary 0 already on the right): OvL turns reg (p+1) q into (01)^(p+1) 0001 (10)^q (needs p>=1); OvEnd builds (10)^2 11001 (10)^(h+5) (01)^(p1-1) 0010 (needs p1>=2). - Turnarounds: Borrow (d=1, q>=2), MergeB (d=1, q=1, any continuation r: covers DecMerge and DecMergeTail with one lemma), MergeE (q=1, then 0^inf), EndT, EndLastT, OvT, X2T (needs k>=1), and X1Sw (Dec-mode milestone over a q=1 region switches to Ov mode). - List lemmas PassesR, PassesL, OvPasses by induction on the pair list, with LP = left fold of reg, RP = right fold of pair words, OvR = Ov-mode output.

K-level rules proved (proof.md section 2 numbering)

Dec, DecMerge, DecMergeTail, DecMergeEmpty, EndR (End), EndLast, X2, Ov, X1: every rule of the table, each as K h P T -->+ K h' P' T'. Ov/X1 outputs are ovp/ovpX (re-pairing functions). init : c0 -->* K 2 [(11,11,false)] TN by esx (956 steps), compiles.

Pitfalls hit

Kill file state at end of round 1

1RB0LD_1RC0RA_1RD1RF_1LA0LE_1RE1LD_0RB---.v = rules.v + init0 (c0 -> K0, 956 steps) + init (c0 -> base E-start K(2;(95,68,0),(34,33,1),(10,15,1),(1,24,1);-), 78,710 steps, esx, ~30 s) + rule-table comment. No nonhalt yet (check_kill cannot pass). Everything compiles. So the "finite chain K0 -> overflow-6 base" of proof.md 3.7 is not needed: direct execution works.

High-level plan (rounds 2-4): a PER-STEP invariant J, not a per-cycle period lemma

Use progress_nonhalt_cond with index i = (h, P, T, phase, c4) and C i = K h P T, so every macro rule is one -->+ step and J only has to be preserved by single rules. Ghost phase: E1 (regular E-cycle before End), E1t (after X2), T0 (T2 start, before X2), E2/E2t (after End), L1 (EndLast-type L-slot before EndLast), LX (X1-type L-slot), L2 (after EndLast); ghost c4 (L-slot after a T2 start, before its DecMergeTail).

Key quantities (all per pair j, N = #pairs, n = N - j = #pairs to the right): - tv_j := value of digits d_j..d_N (d_j least significant) = touches left in this countdown. dv of the suffix starting at j. Dec_k: tv_j -1 for j <= k, unchanged for j > k. - extra(phase,n) := 2^n (E1, E1t, L1), 52^n (T0), 0 (E2, E2t, L2, LX). - Rt_j := tv_j + extra = touches pair j still gets before the cycle's re-pairing. - Phat_j := p_j + Rt_j, Qhat_j := q_j - Rt_j (as integers). A touch keeps both, and keeps p+d and q+d mod 2. End/X2 touch the last pair without flipping its digit, and End/EndLast/X2 match the extra-term switch exactly (checked by hand: Phat, Qhat unchanged). - hhat := h + 4Rt_1 (every step touches pair 1, so h grows 4 per touch of pair 1). - DecMerge at k (H := tv_{k+1}): fused pair inherits pair k+1's Rt (Qhat_fused = Qhat_{k+1}, Phat_fused = Phat_{k+1} + p_k + 3); pairs j > k+1 unchanged; pairs j < k: Phat drops by 2^(k-j) H + [phase 1] 2^(N-1-j), Qhat rises by the same.

J clauses (validated in rocq/jcheck.py + jrand.py: base orbit 26 overflows incl. X1/X2, and 1,900 random INV+(e)-style starts, many at the thresholds, 4 overflows each: 0 failures): - all p,q >= 1; h = 2 mod 4. - E phases (L = N, or N+1 in T0; interior = j <= N-1, all j in T0): Eq: Qhat_j >= 22^n + 1 (E1,E2,T0) / 2^n + 1 (E1t,E2t); Ep: p_j + d_j odd (T0 top pair: even), Phat_j >= 32^(L-j); far pair Qhat_N >= 1; (e1) Phat_1 >= 2^(L+2) + 32^(L-1) - 3; (e2) Phat_2 >= 2^L + 32^(L-2) - 1; hhat >= 32^(L+1) - 6; L >= 3; T = TN / TA 1 / TB k>=3. - L phases (Lproj = N (L1, LX) or N+1 (L2); f_j = N-j (L1, LX) or N+1-j (L2); c = 4 if c4 or LX else 5): Eq p-blocks: Phat_j >= c2^(f_j); Ep q-blocks (j >= 3): Qhat_j >= 1 or q_j+d_j even; in L1 while the last digit d_N = 1: q_j >= tv_j - 2^(N-j) + 2 (no run-out in the first half); pairs 1,2: Qhat_1 >= 2^Lproj, Qhat_2 >= 1; hhat + 6 >= 2^(Lproj+2); far end: L1 last pair Qhat_N = 0, x-pair Qhat in {-2, 0} or >= 1; LX: Qhat_{N-1} = Qhat_N = 1. Why it closes: merges to the right keep Phat_j >= c2^f for any c >= 3 (loss < 22^(f-1)+2^(f-1)); merges only happen in the second half of L1 (d_N = 0), so H <= 2^(N-k-1) and hhat loses < 2^(N+1) = the drop of 2^(Lproj+2) (this replaces the reviewer's missing "pair 1 gets

= 2^(L*')-2 touches" lemma); the fused block inherits Phat_{k+1}. Ov/X1 map the L2/LX clauses onto the E1/T0 clauses exactly (worked out per pair: new q_{j+1} = old p_{j+1} etc.). Note: this per-step J does NOT need proof.md's r' >= 2r-3 (G3) nor the fusion bound.

Rocq plan: Fixpoint dv, AllSuf (predicate on every suffix: per-pair clauses only depend on the suffix: n = length-1, tv = dv, last digit), lemmas dv_touch, dv_merge, dv_lt (dv S < 2^|S|); then Jstep : J i -> exists i', K.. -->+ K.. /\ J i' by phase/rule case analysis with lia (introduce 2^n as variables + doubling facts), and nonhalt from init + base satisfies J.

Also in round 1

Next steps (round 2)

  1. Define J in Rocq (per-suffix clauses via AllSuf; use nat inequalities like q + 2 >= tv + ex instead of negative Qhat), index type, C i := K h P T.
  2. Decomposition lemma: J -> one of the 9 rules applies (split at the first digit 1).
  3. Preservation per rule (touch/merge lemmas on suffix clauses, Ov/X1 re-pairing by induction on the list), then nonhalt = multistep_nonhalt + init + progress_nonhalt_cond, with J base by vm_compute/lia.

Round 2 (2026-10-10)

J formalized (rocq/J.v, standalone, compiles in ~28 s)

Step lemma and nonhalt (rocq/Jtm.v)

Result (round 2)

Kill packaging (2026-10-10)