/machines/1RB0LD_1RC0RA_1RD1RF_1LA0LE_1RE1LD_0RB---/review-invariant.md · raw

Skeptic review of proof.md §3.3–3.5 (class invariant INV), 2026-10-10

Reviewer stance: a skeptical busycoq maintainer. All checks use new code written for this review: a direct TM simulator, a K parser, the abstract map transcribed from the §2 table, an accelerated countdown, block-identity tracking and an INV checker. It does not use check_proof.py or scripts/. The code is in /tmp/claude-1000/-home-dennis/dbf3e2a9-21e7-4eb2-b481-38a0113aca31/scratchpad/m3-skeptic/, which is a session scratchpad and may not persist. Every counterexample below can be replayed by hand from the §2 rule table.

Verdict: the Theorem of §3.3 is false as stated (fatal, repairable). INV is not inductive. Configurations exist that satisfy every clause of INV, yet within one cycle pair they leave D ((o7) L = 0 or (o4) X1 with L ≤ 2), or they break INV(d). The step where this happens is the proof of INV(d), and with it the "k ≥ 3" premise of the fusion bound. Both use lower bounds on the two newest Ep blocks (p_1 and p_2 at the E-start), and those bounds come from earlier cycles; INV does not record them. Everything else I attacked in §3.3–3.5 held: L3, L5, the fusion bound, the head-block bound, the X1/X2 costs, INV(a)/(b)/(c) mechanics, the far-end table and the base case. Adding one clause, (e) below, made INV inductive in every test I ran (1,027,584 exhaustive cases and 70,000 random cycle pairs). Proving that (e) carries over needs one new counter lemma.

Consequence for the Rocq plan (§4): Lemma period: INV K -> exists K', INV K' /\ K -->+ K' cannot be proved with INV as written, because it is false for the K below. The formalizer should switch to INV + (e) now.

Validation of my own tooling (so the findings can be trusted)

Gap list

G1 (FATAL as written; repairable): INV is not inductive. INV(d) and "q_1, q_2 never run out" use history that INV does not carry

Claim attacked: §3.3 Theorem ("If INV holds at an E-start, then every K up to the next E-start is in D, and INV holds again there") and the §3.5 INV(d) paragraph.

Why the argument fails. INV(a) bounds p_1 only by p_1 ≥ 7, and INV puts no lower bound at all on the other Ep blocks (p_j, j ≥ 2). The INV(d) paragraph uses three facts that are not consequences of INV: - q_1 ≥ 11·2^(L*−1) − 4 at the L-start. This needs p_1 ≥ 2^(L*+2) − 1 at the E-start, the value left by the previous slot. - q_2 ≥ 3·2^(L*) − 3. This needs p_2 ≥ 9·2^(L*−2) − 2, which "uses L* ≤ L*_prev + 1", again the previous cycles. - "It is 15·2^(L*−1) − 4 after a regular start". This is exact only when the previous L-slot had no merges.

With small p_1 and p_2, the L-slot's q_1 and/or q_2 run out. That gives merges at k = 1 or 2, which the fusion bound excludes ("k ≥ 3"). The pair list then collapses into the far end.

Concrete counterexamples. Each start satisfies INV(a)–(d), p_1 ≥ 7 and non-empty blocks; my checker reports no violation. 1. (o7). Start: K(2; (7,19,0),(2,10,1),(1,6,1); −). Here L* = 3, r_1 = 20/4 = 5, r_2 = 10/2 = 5, p_1 = 7 is odd with d = 0, and p_2 = 2 with d = 1. - E-cycle: 6 Dec, End, 3 Dec, Ov. The L-start is K(2; (47,16,0),(9,7,1),(5,3,1),(4,2,1); −), with x = 3. - L-slot: after 10 Dec, the x = 3 pair runs out (DecMerge at k = 3, as the table predicts). After 1 more Dec, pair 2's q runs out (DecMerge at k = 2); it was 7 at the L-start, but the INV(d) paragraph claims q_2 ≥ 3·2^3 − 3 = 21. After 1 more Dec, EndLast fires with L = 1, leaving K(62; (62,1,1); T1(37)). - Pair 1's q runs out next (DecMergeTail), leaving K(66; −; T1(102)). This is L = 0, (o7), outside D. 2. (o4). Start: K(2; (7,39,0),(2,20,1),(2,10,1),(2,6,1); −). Here L* = 4 and r = 5, 5, 5. - The L-start is (95,28,0),(17,13,1),(9,7,1),(5,4,1),(4,2,1), with x = 4. - After 24 Dec: DecMerge at k = 2 (pair 2's q, 13 at the L-start), then 1 Dec, then DecMerge at k = 2 again, then DecMerge at k = 1 (pair 1's q). This leaves K(114; (183,1,0),(5,1,0); −): the X1 shape with L = 2, (o4), outside D. 3. INV(d) breaks at a T2 start. Start: K(2; (7,15,0),(8,8,0); T2(4)). - E-cycle: X2, End, Ov. L-slot: EndLast, DecMerge, DecMergeTail, Ov. - The next start is K(2; (83,80,0),(2,18,1); −), which has L* = 2. 4. Not a small-L artifact. Take the all-at-threshold INV configuration with L* = 20: p = (7,2,…,2,1), q = (5·2^19 − 1, 5·2^18, …, 10, 6). One cycle pair later it is at L = 0, (o7). Across 3,000 random INV starts with L* in 20–60, all 984 at-threshold starts went outside D. The random ones survived, but only because a random p_1 is huge.

Scale of the failure under literal INV.

sweep total breaks INV(d) (o7) (o4) ok
exhaustive, L* = 3, T2 start 73,728 40,320 10,368 0 23,040
exhaustive, L* = 3, regular start 552,960 106,272 10,368 0 436,320
exhaustive, L* = 4, T2 start 69,120 18,360 50,760 0 0
exhaustive, L* = 4, regular start 331,776 187,920 46,008 1,944 95,904
random, L* = 3–12 3,000 262 867 1 1,870

Not a halting witness. None of these starts is reachable: on the orbit, p_1 ≥ 5.94·2^(L*) at regular starts and p_1 ≥ 3.999·2^(L*) at T2 starts. The machine also runs on through both outside configurations above: - the (o4) one reaches K(2; (119,182,0),(3,8,1); −) after 6,445 steps; - the (o7) one reaches K(2; (71,102,0); −) after 3,641 steps.

This is a gap in the proof, not in the machine.

Repair (tested, not proved). Add a clause (e) to INV that records the newest Ep blocks. - (e1) p_1 ≥ 2^(L*+2) − 1. This is the T2-start value; it is tight after a merge-free X1 slot. - (e2) p_2 ≥ 2^(L*).

Why this is enough: - (e1) gives q_1 ≥ 11·2^(L*−1) − 4 > 3·2^(L*) − 2, so pair 1 survives. - (e2) gives q_2 ≥ 7·2^(L*−2) − 1 > 3·2^(L*−1) − 1, so pair 2 survives. - From these, INV(d) and the "k ≥ 3" premise follow exactly as §3.5 argues.

Preservation: - (e2) follows from (e1), from "pair-1 touches in an L-slot ≤ 3·2^(L*) − 2" (merges only lower the counter), and from L*' ≤ L* + 1. The algebra is p_2' = p_1 + τ_1 − 1 − T1 ≥ 5·2^(L*−1) − 2 ≥ 2^(L*+1). - (e1) needs a new lemma: an L-slot that ends with L*' must touch pair 1 at least 2^(L*') − 2 times, because p_1' = 4·T1 + 7. A potential-function argument should work: each merge at k costs H·2^(k−1) < 2^(c−1) decrements and removes one pair. It is not in proof.md and must be written. - Alternative: the text's own numbers also work: p_1 ≥ 3·2^(L*+1) − 1 at regular starts (2^(L*+2) − 1 at T2 starts), and p_2 ≥ 9·2^(L*−2) − 2. Both are exactly tight at the base: 95 = 3·2^5 − 1 and 34 = 9·4 − 2. This version also passed 10,000 random starts.

Evidence that INV + (e1) + (e2) is inductive: - Exhaustive: the same four boxes as above, with p_1 and p_2 raised to their (e) minima. All 1,027,584 cases are in D and satisfy INV + (e) at the next start. - Random single cycle pairs: 20,000 (L* = 3–14). The "text numbers" variant passed a separate 10,000. - Random chains: 3,000 × 6 cycle pairs (L* ≤ 14) and 4,000 × 8 cycle pairs (L* ≤ 40). All chains completed, with no outside case and no INV or (e) failure. - Margins: at later starts, min p_1/(2^(L*+2) − 1) = 1.000 (tight) and min p_2/2^(L*) = 1.125. - Both clauses are needed. With only one of (e1)/(e2), or with the bare "survival" bounds p_1 ≥ 3·2^(L*−1) + 2 and p_2 ≥ 3·2^(L*−2) + 1, the invariant fails within one cycle pair. Example: from K(2; (15,41,0),(8,17,1),(1,9,1); −), the next start has p_2 = 6 < 3·2^1 + 1.

G2 (minor): "After X1 the bound is L* = M ≥ 4" is false when the X1 slot has interior merges

G3 (minor): L5's corollary "with ≥ 1 merge, r' ≥ 2r − 3" does not follow from L5 in an X1 slot

G4 (minor, for the formalizer): L5's "remaining touches in a merge-free continuation" needs a definition

Claims attacked that held (with the reason)