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

1RB0LE_1LC1RD_1LA0RB_1RC1RB_1LF0LC_---0RC: never halts (CONDITIONAL — STUCK at the edge lemma)

Transitions: A0=1RB A1=0LE · B0=1LC B1=1RD · C0=1LA C1=0RB · D0=1RC D1=1RB · E0=1LF E1=0LC · F0=--- F1=0RC.

1. Families

Words (all fixed):

blk = 1101101101        R1 = 1011110110        G = 11110101
X0 = 110111100110011101100100100111101100100110110111010011           (54)
X1 = 1001001001100100100100110110110011101100100110110111010          (55)
X2 = 11011001001100100100100110110110011101100100110110111010         (56)
X3 = 101110100110110010011101100100100111101100100110110111010        (57)
X4 = 1101001101100100110011101100100100111101100100110110111010       (58)
X5 = 11011011001001100110011101100100100111101100100110110111010      (59)
X6 = 10011100110011101100100100111101100100110110111010               (50)

C_k(a, D) := 0^inf <A blk^a X_k D 0^inf, for k = 0..6 and a ≥ 0.

Tails are normalized. A tail D is a finite 0/1 word that is empty or ends in 1. D and D·0 describe the same tape, so trailing 0s always belong to the 0^inf. Every map on tails, in particular the probe map P of §6, is defined as "read the tape right of the junction and strip trailing 0s". check_proof.py does exactly this, and check NORM confirms that every orbit tail is nonempty and ends in 1. In Coq the issue does not arise: the tail is the side D *> 0inf, a stream, and a language becomes a predicate on sides.

One cycle is 7 bounces: C_0 → C_1 → … → C_6 → C_0. The bulk gains one block per cycle. Only the bounce out of C_0 (the probe) reads D.

2. Rules

Directed-head notation: <X reads the last cell on its left, and X> reads the first cell on its right. Steps are exact.

# statement domain steps proof level
WS 0^inf <A → 0^inf 1 B> — 1 A0 L0
RS B> blk^n → R1^n B> n ≥ 0 12n ind n: [B> blk → R1 B> in 12 steps, IH] L0 shift
LS R1^n G <E 0 → G <E 0 blk^n n ≥ 0 58n ind n: [R1 G <E 0 → G <E 0 blk in 58 steps, IH] L0 shift
WE 0^inf 1 G <E 0 → 0^inf <A blk — 29 execution L0
J1 R1 B> X1 → G <E 0 X2 — 37 execution L0
J2 R1 R1 B> X2 → G <E 0 blk X3 — 559 execution L0
J3 R1 B> X3 → G <E 0 X4 — 83 execution L0
J4 R1 B> X4 → G <E 0 X5 — 77 execution L0
J5 B> X5 → G <E 0 X6 — 47 execution L0
J6 R1 B> X6 011 → G <E 0 X0 — 37 execution L0
P0 R1 B> X0 D 0^inf → G <E 0 X1 011 P(D) 0^inf D ∈ L, edge lemma (E′), §6 j0(D) open —
B_k (k=1..4) C_k(a, D) → C_{k+1}(a, D) a ≥ m_k (m = 1,2,1,1) 70a + β_k [WS, RS(a), J_k, LS(a−m_k), WE] L1
B5 C_5(a, D) → C_6(a+1, D) a ≥ 0 70a + 77 [WS, RS(a), J5, LS(a), WE] L1
B6 C_6(a, 011 D) → C_0(a, D) a ≥ 1 70a + 9 [WS, RS(a), J6, LS(a−1), WE] L1
B0 C_0(a, D) → C_1(a, 011 P(D)) a ≥ 1, D ∈ L 70a + j0(D) − 28 [WS, RS(a), P0, LS(a−1), WE] L1
CYC C_0(a, D) → C_0(a+1, P(D)) a ≥ 2, D ∈ L 490a + 714 + j0(D) [B0, B1, …, B5, B6] L2

β = (β1..β6) = (9, 473, 55, 49, 77, 9), where β_k = 1 + j_k + 29 − 58·m_k (with m_5 = 0 and m_6 = 1).

Every rule except P0 is a context-free fact. Each finite rule (WS, WE, J_k, and the one-block bodies of RS and LS) was executed with every cell outside the displayed window set to UNKNOWN. Reading an unknown cell would fail the check, and none of them does. So each rule holds in every context, and RS and LS hold for all n by induction. J1–J4 and J6 do need their R1 context blocks: with one block fewer, they read an unknown cell. That is where the domain lower bounds on a come from. J5 needs none.

Composition for B_k (k = 1..6), written out: - Start: 0^inf <A blk^a X_k D. - →WS→ 0^inf 1 B> blk^a X_k D. - →RS(a)→ 0^inf 1 R1^a B> X_k D. - →J_k→ 0^inf 1 R1^(a−m_k) G <E 0 Y_k D. - →LS(a−m_k)→ 0^inf 1 G <E 0 blk^(a−m_k) Y_k D. - →WE→ 0^inf <A blk^(a−m_k+1) Y_k D.

Here Y_1 = X2, Y_2 = blk X3, Y_3 = X4, Y_4 = X5, Y_5 = X6 and Y_6 = X0 (J6 eats the leading 011 of its D). This gives C_{k+1}(a, D) for k ≠ 5, C_6(a+1, D) for k = 5, and C_0(a, D′) for k = 6, where D = 011 D′. B0 is the same composition with P0 in the J slot.

D is untouched by B1–B5. B6 reads only the 011. The probe touches nothing outside the R1 block and the cells to its right.

3. Coverage

The family is visited in the fixed order C_0 → C_1 → … → C_6 → C_0, and each C_k has exactly one rule. Each phase holds the tail its predecessor produced. C_1 to C_6 all hold 011 P(D), so B6's 011 precondition always holds. a never decreases and starts at 59, so every domain bound (a ≥ 0, 1 or 2) holds.

The only uncovered case is C_0(a, D) with D ∉ L. The invariant is Inv(C_0(a, D)) := a ≥ 2 ∧ D ∈ L. CYC preserves the a-part, and (E′) preserves the L-part.

4. Initial segment

0^inf A> 0^inf →(784,041 steps)→ C_0(59, D_0), where D_0 = work/D_cycle0.txt (261 cells, starting 0110010011011011…). This was checked by direct simulation from the blank tape in check_proof.py (INIT).

There is an earlier entry: the run is at C_1(58, 011 D_0) at step 758,939 (check INIT1). From there, B1–B6 lead to C_0(59, D_0) at step 784,041, matching the step formulas exactly (758,939 + 4·70·58 + 9+473+55+49 + 70·58+77 + 70·59+9 = 784,041). This is the earliest left-record moment at which the tape has the full C_k shape. The J rules read only short prefixes of the X_k (the skeptic reports 3 cells of X1 for J1 and 2 of X6 for J6), so trimming the X_k would probably allow an even earlier entry. That is not needed.

The initial segment is routine, not an open issue. Bouncer_v3.v proves c0 -->* S' 23 over 2,964,716,529 steps with eapply without_counter with (n:=…); eapply multistep_c'_spec; native_check_eq, where multistep_c'_spec is a lemma local to that file. 784,041 steps is far below that.

5. Conclusion (conditional on E′)

From C_0(59, D_0), CYC applies forever: C_0(59+n, D_n), with D_{n+1} = P(D_n) ∈ L. Each cycle takes at least 490·59 steps, so progress holds. Hence, if (E′) holds, the machine never halts (progress_nonhalt_cond).

Halting transition. F0 is the only undefined transition, and only E0 (1LF) enters F. So the machine halts exactly when E reads a 0 whose left neighbour is 0 (0 E> 0), for example via 001 C> 0 (C0→A1→E0→F0, as in notes.md). Every rule except P0 is an exact, fully defined run, so it never executes F0. For P0, (E′) itself demands that every excursion return, so the probe never halts either. The whole question of halting therefore sits inside the edge lemma.

6. The open piece: the edge lemma

6.1 What (E) says, honestly

The first version stated:

(E) There is a set L of normalized tails with D_0 ∈ L such that, for every D ∈ L, the run from R1 B> X0 D 0^inf reaches G <E 0 X1 011 P(D) 0^inf in finitely many steps, never reads left of the R1 block, never halts, and P(D) ∈ L.

(E) is not a reduction: it restates the problem. Take L = {D_n : n ≥ 0}, the orbit. It satisfies (E) exactly when the orbit never breaks, and that is non-halting itself. What §2–§5 actually establish is narrower. Non-halting reduces to (E), every other step is routine and checked, and the open content is a closed language L, which nobody has.

6.2 The sharper form: a one-sided protocol system (E′)

The probe splits cleanly at the boundary one cell left of the X0|D cut, between the last two cells of X0: - The left part is R1 X0[0..52] (63 cells; left of that, the context is unknown). - The right part is X0[53] D 0^inf = 1 D 0^inf. Call its cells 0, 1, 2, …

Check IFACE. On every one of 3,000 orbit cycles, the head crosses this boundary in the same sequence: 32 crossings, i.e. 16 round trips. As (state entering the right part, state leaving it) pairs, the sequence is:

(B,C)(D,E)(C,A)(D,C)(B,C)(D,F)(C,A)(B,E)(D,E)(B,C)(B,E)(B,C)(D,A)(C,A)(C,A)(B,C)

At the cut itself (between X0's last cell and D), the sequence is not fixed: there are 2 distinct sequences over the same 3,000 cycles. (notes.md previously said "crosses exactly 16 times"; that was wrong and is now corrected to 16 round trips.)

The left part's content is the same at every probe. It is deterministic, and it hears from the right part only through the states in which the head leaves the right part. So if the right part always answers with the out-states above, the left part always behaves exactly as on the orbit: - it sends the same in-states; - it never reads left of R1; - after the 16th return, it ends at G <E 0 X1[0..53], with the right part's cells 0..3 forming the last 4 cells of X1 011.

That leaves a statement about the right part alone.

(E′) edge lemma. Let in = BDCDBDCBDBBBDCCB and out = CEACCFAEECECAAAC. There is a set L of normalized tails with D_0 ∈ L such that, for every D ∈ L: - Start from the half-tape 1 D 0^inf (cells 0, 1, …). For p = 1..16 in turn, put the head on cell 0 in state in_p and run. The head eventually steps left off cell 0, in state out_p, without halting. - Afterwards, cells 0..3 read 0011. - P(D) := cells 4, 5, … with trailing 0s stripped, and P(D) ∈ L.

So (E′) implies (E). The left part's half is one finite execution, the same for every D, and the orbit run already performs it with the context left of R1 UNKNOWN (edge() in check_proof.py). Check E′ confirms that the right-part system with this protocol reproduces P exactly on the first 500 orbit tails. In busycoq this is exactly the Longitudinal split: - the left part's response to the fixed crossing list is a sideRLs fact (finite, vsideRLs_es_spec + native_check_eq); - the right part's response is (E′); - sideRLs_concat_v2 glues the two, as BigStep does in Bouncer_v3.v.

(E′) is still not proved. It isolates the open problem in a system with no bulk and no unknown context.

6.3 What is known about P (evidence, not proof)

So this is not a cryptid in the ground-rule-6 sense (no pseudo-random arithmetic has been seen), but nothing shows that it is tractable either.

6.4 What has been ruled out

1. SFT_k invariants: refuted for every k ≤ 36 tested. The SFT_k language is L(F, P) = {D : D[:k−1] ∈ P, every k-factor of D·0^k ∈ F}. For it to be an invariant containing the orbit, F must contain all orbit k-factors and P all orbit (k−1)-prefixes.

For k = 36 the chain has two links. The breaking tails are 195–693 cells long, comparable to orbit tails (144–564). scripts/edge_sft/verify_refutations.py re-checks every chain in pure Python: it regenerates the 200,001-tail orbit, checks factor membership, and checks that each link cycles and D breaks. In the sampling, the share of tails drawn this way that break falls only slowly with k: 6–9% at k = 24–30, and 2.5–3.5% at k = 32–36. So no SFT with window ≤ 36 is an invariant, and nothing points to a threshold k. - The observer's SFT* (avoiding {000, 0101, 01101111}) is not closed either (notes.md).

2. Plain n-gram CPS: does not close. These are scratch native tools, scripts/edge_cps/, written this revision and checked only on toy machines. A failure here means only that this abstraction is too coarse. - Whole machine (ngcps.cpp; no history, no LRU). It reaches an abstract halt for radii n = 4, 8, 12, 14, …, 26, and for (left, right) = (8,24), (12,24), (24,12) and (6,28). Radius 28 and (28,8) hit the 6 GB memory cap. - Edge system (E′) (edgecps.cpp). The left side is exact (the protocol), and the right side is an n-gram CPS with a wall-aware left window. It reaches an abstract protocol break for n = 4, 6, …, 24, for (26,24), and for left radius 6–20 with right radius 30 or 40.

3. busycoq CTL62 Nsolve_cert (whole machine): no result. I ran it twice, once with CPS_LRU 10001 2e6 2e6 10 3200 1 3 0 0 and once with NG 0 2e6 2e6 12 1 12 0 true. Each grew to about 10 GB RSS within 5 minutes and was killed to protect the host. That is not evidence either way.

6.5 Routes, with honest costs

  1. A whole-machine CTL certificate (preferred, if one exists). It plugs into CTL62's Nsolve_cert / decide_nonhalt_spec as is: the conclusion is ~halts tm c0, and §2–§5 would become unnecessary. - Cost: a native reimplementation of busycoq's stronger CTL modes (NG with history/LRU, RWL_mod, MITMDFA) to search parameters beyond what mxdys's sweeps already tried. This machine is a holdout, so the standard ranges failed. Expect days of agent time, with an unknown chance of success.
  2. An edge-only closed set, plus custom Coq glue. busycoq has no interface for this. CTL.v's decide_nonhalt_spec concludes only ~DHTMFromTM.TM.halts' tm DHTMFromTM.TM.c0, and CTL_decide_nonhalt_spec concludes ~halts tm config_init. Both are about a closed run from the blank tape; neither takes a custom start, an accept condition, or a protocol. Using an edge-only certificate therefore needs one of: - (a) a new checker for the (E′) protocol system (finite closed set of right-part configurations, with the start "1 D 0^inf, D ∈ L" and the 16 in/out transitions as side conditions), together with its soundness proof, giving (E′) as a Coq lemma; - (b) an adapted CTL closure check with a start-and-target pair.

Either is a new decider-sized development: estimate 1–3 weeks of agent time on top of finding the closed set, which nobody has (6.4). 3. Hand analysis toward a grammar. Treat the probe's excursions as particle rewrites and look for a non-SFT description of L, for example a context-free or counter-like constraint coupling D's prefix to its body. - The refutations hint at the coupling: in every chain, D* is built from orbit factors and fails only through a prefix/body mismatch. - Cost: open-ended research.

Priority call for Dennis. Should more budget go into (E′)? None of the routes is cheap, and whether a regular invariant exists at all is unknown.

7. Mapping to busycoq

proof.md busycoq
family C_k Definition C k a D := const 0 <{{A}} … with lists written outward from the head (left lists reversed, Appendix A). The tail is the side D *> 0inf (§1, normalization)
RS, LS Shift lemmas proved by ind n H (Ltac at Individual62.v line 612) over a one-block lemma proved by es (Individual62.v line 606). Template: 1RB0LD_1RC1RF_1LA0RA_0LA0LE_1LD1LA_0RB---.v (in atlas/examples.jsonl): Inc by es, Incs by ind n Inc. LS is a left-moving gadget rule of the same shape
WS, WE, J1–J6 Proof. es. Qed. (finite; J2 takes 559 steps)
B1–B6, CYC follow WS; follow RS; follow J_k; follow LS; follow WE, using follow (Tactic Notation, Individual.v line 120), plus lpow rewrites of blk^^(a−m+1). Same template file (R0: follow Incs; follow Rst0)
P0 / (E′) New; no template covers it. The split is at the boundary one cell left of the X0|D cut (§6.2). The left part's response to the fixed 16-round-trip crossing list is a Longitudinal sideRLs lemma, proved like Bouncer_v3.v's RInc (rw_sideRLs + vsideRLs_es_spec + native_check_eq) or LIncs (sideRLs_wall; esx; st; er). It is glued to the right part by sideRLs_concat_v2, as in BigStep. The right part's response is (E′) and needs L. Note that in Bouncer_v3.v, RInc/LIncs/BigStep are Longitudinal sideRLs lemmas, not ind/es/follow lemmas; the earlier draft cited them wrongly. The two styles coexist: Bouncer_v3.v imports Individual62 and Longitudinal together
init Lemma init: c0 -->* C 0 59 D0 (784,041 steps) by the Bouncer_v3.v pattern: copy its local multistep_c' / multistep_c'_spec, then eapply without_counter with (n:=7840*100+41); eapply multistep_c'_spec; native_check_eq. Optionally start at C 1 58 (011 D0) (758,939 steps). Routine
nonhalt multistep_nonhalt with init, then progress_nonhalt_cond with P := a ≥ 2 ∧ D ∈ L. Blocked on L

What is new relative to Bouncer_v3.v: the bounce rules have seven junction phases instead of one, and the probe phase is chaotic. Everything except (E′) is routine.

8. Evidence (check_proof.py, 2026-10-10, all PASS)

Not proved: (E′).

9. Review log (skeptic review, 2026-10-10)

# gap (skeptic) resolution
1 Fatal. (E) unproved, so non-halting is conditional. (E) is not a real reduction: L = orbit satisfies it exactly when the edge never breaks. No candidate L; SFT_k for k ≤ 22 refuted Accepted; not resolved. Status stays STUCK. §6.1 now says plainly that (E) restates the problem. §6.2 sharpens it to (E′), a statement about a one-sided system with a fixed 16-round-trip protocol, with the left half reduced to one finite execution (checks IFACE, E′). Within this stage's budget I tried to find L. (i) The SFT refutation now covers k = 24–36: chains in work/sft_refutations/, re-checked in pure Python, which also corrects the old "k = 26 open". (ii) Plain whole-machine n-gram CPS does not close for n ≤ 26. (iii) Edge-system CPS with the exact protocol does not close for n ≤ 24 (right radius up to 40). No closed language and no certificate exist. The skeptic's fix (an explicit L with a finite closure check, or a whole-machine CTL62 certificate) remains the only way forward (§6.5)
2 §7: RInc/LIncs/BigStep are Longitudinal sideRLs lemmas, not ind/es/follow Fixed. Verified in vendor/busycoq/verify/Bouncer_v3.v: RInc = rw_sideRLs + vsideRLs_es_spec + native_check_eq; LIncs = sideRLs_wall; esx; st; er; BigStep = sideRLs_concat_v2. §7 now cites Individual62.v (Ltac es line 606, Ltac ind line 612), Individual.v (follow line 120), and the template 1RB0LD_1RC1RF_1LA0RA_0LA0LE_1LD1LA_0RB---.v (ind n Inc, follow Incs). The rules use ind/es/follow, and only the probe split uses sideRLs
3 Init called heavy and open; it is routine (Bouncer_v3's without_counter + multistep_c'_spec + native_check_eq handles about 3·10⁹ steps); earlier entry C_1(58, ·) at step 758,939 Fixed. §4 and §7 adopt the Bouncer_v3 pattern, and "init" is dropped from the open issues. The earlier entry C_1(58, 011 D_0) at 758,939 was verified by new check INIT1 and by a scan of all left records up to 784,041 (it is the earliest full-word entry). The step arithmetic to 784,041 matches the β formulas
4 Route 2 (edge-only CTL with an accept condition) presented as if busycoq supports it; CTL.v concludes only about the closed run from c0 Fixed. Verified: decide_nonhalt_spec concludes ~DHTMFromTM.TM.halts' tm DHTMFromTM.TM.c0 (CTL.v line 4705), and CTL_decide_nonhalt_spec concludes ~halts tm config_init (line 1555). §6.5 route 2 now says it needs a new checker plus a soundness proof or an adapted closure check, estimated at 1–3 weeks on top of finding the closed set, and prefers route 1
5 "Not a cryptid / missing piece is a closed language" asserted without evidence that a finite-state invariant exists Fixed. §6.3 now reads: no arithmetic counter observed; whether a regular invariant exists is unknown; the data fit equally well with none. The question whether to spend more budget on (E′) is raised with Dennis as a priority call (§6.5, status.json)
6 D vs D·0 ill-posed; check_proof strips trailing 0s silently Fixed. §1 defines tails as normalized (empty or ending in 1), P(D) as the output with trailing 0s stripped, and the Coq view as sides. edge()'s docstring says so, and check NORM asserts it on the orbit
7 "Fixed 16-crossing interface" misstated: it is 16 round trips (32 crossings) one cell left of the cut, and the cut itself has 2 sequences Fixed. Confirmed by new check IFACE (identical 32-crossing sequence on all 3,000 cycles; 2 distinct sequences at the cut). §6.2, §7, notes.md and the card text (card.html, observe.json, scripts/make_observe.py) corrected. The sideRLs split is placed at that boundary