/machines/1RB0RF_1LC0RD_1LA0LD_1LE0RA_0LB---_0LB1RB/notes.md · raw

1RB0RF_1LC0RD_1LA0LD_1LE0RA_0LB---_0LB1RB

Status: SKIPPED (2026-10-14). The CTLv1.v certificate port is refuted at the level of upstream's invariant, as for P-728. The machine and its twin run in lockstep, but upstream's certificate does not contain the condition that keeps them in lockstep. No delta proof.md exists.

Label: P-385 (strategy direction 1, twin ports). 740 line 385, byte for byte. Sheet class: Monotone list. Line 173 has the same table from another start.

Checks: scripts/twin_check.py gives SUMMARY PASS with --long (7 checks, including the 2e9-step run C; output scripts/twin_check.out). Build the native probes first with scripts/build.sh.

The relation

385   = 1RB0RF_1LC0RD_1LA0LD_1LE0RA_0LB---_0LB1RB
twin  = 1RB0RE_1LC0RD_1LA0LD_1LE0RA_0LB0LF_0RA---   (CTLv1.v nonhalt16856)
twin2 = 1RB0RE_1LC0RD_1LA0LD_1LE0RA_0LB1LF_1RC---   (CTLv1.v nonhalt18273)

Upstream proves both twins with the same call, solve_cert (CPS_LRU 1001 100000 100000 2 3200 2 2 0 0). That is a CTL62 decider certificate, not a hand proof.

Event 385 twin
F (A1-entered E) reads 1 at p, t[p-1] = 0 F1 1RB (1 step) E1 F0 A0 (3 steps)
same, t[p-1] = 1 F1 1RB E1 F1: halt
E (D0-entered) reads 1 halt E1 0LF, then F reads t[p-1]

The F branch: exact merge

Let F read 1 at cell p with t[p-1] = 0. Then both machines end with B at p+1, t[p-1] = 0, t[p] = 1, and every other cell unchanged (check M, all windows). Only cells p-1 and p are read.

With t[p-1] = 1 the twin halts. Upstream proves the twin never halts, so this case never occurs in the twin's run. The shortcut is therefore exact on every reachable configuration.

The E branch: the reconvergence condition

E is entered by D0. Say D reads 0 at cell p and writes 1, so E reads t[p-1]. - t[p-1] = 0: both run E0 0LB. No split. - t[p-1] = 1: 385 halts at its second step. The twin halts too if t[p-2] = 1. If t[p-2] = 0 it runs on (check X, 512 tapes, 12 steps, no halt).

So 385 is the twin with one extra halting route:

P: whenever D reads 0, the cell on its left is 0.

385 never halts if and only if the twin's run satisfies P. Two remarks narrow P down: - D0 entered by B1 (0RD) always has a 0 on its left, because B just wrote it. - So P only concerns C1 (0LD): C reads 1 at cell q, and t[q-1] = 0. P says t[q-2] = 0 as well.

P holds in simulation

Upstream's invariant does not contain P

Upstream's certificate is the closed configuration set of busycoq's CTL saturation (CTL.v, module CTL with the CPS_LRU context): - the tape is cut into 2-cell blocks; - each side is a DFA state that remembers the 2 nearest blocks exactly, then an LRU list of at most 2 further block ids.

It was replayed natively with the extracted decider (scripts/bin/ctlx, check U):

Machine nonhalt16856's call
twin true
twin2 true
385 false (0.02 s)

Split-state probe (check S). The twin is run on a 7-state context in which the state entered by D0 is a copy G that halts on reading 1 (D0 -> 1LG, G = 0LB---). - Calibration: the twin padded with an unused 7th state is still proved. - The split twin is not proved. The same holds for twin2.

scripts/bin/ctltrace7 steps the saturation one CTL step at a time. The split twin fails at step 852 of 26,893 (the full twin closure):

left side (DFA state 8), in tape order:  ...(LRU: 10, 01) 00 01 | 01 <C
exact part: blocks 00 01 next to the block 01 that C enters
C1 0LD, D0 1LG, then G reads the right cell of block 01: a 1

So the closed set contains the configuration ... 0 1 0 1 <C. In it, C reads 1, D reads 0 with a 1 on its left, and the D0-entered state then reads that 1. This is exactly a P-violation. In the twin it is harmless (E1 0LF, F0 0RA, ...).

385 under the same call fails at the same pattern: C< reads block 0 1, D0, then E reads a 1 and halts. twin2's split fails the same way, at step 4,151.

In the real run this window never appears: at every C1-entered D0 the left context is 0, never 1 0. The CTL abstraction over-approximates, and its extra configurations include P-violations. The upstream argument therefore does not apply to 385 from any opening. Porting needs a strictly finer invariant, one that proves P.

Searches on 385 itself

Extracted CTL62 deciders on 385 directly (scripts/grid.py, two workers), logs/grid385.jsonl. The cap was 8 s per run (20 s for the first 327 CPS_LRU runs). The whole grid was capped at 50 minutes.

Decider family Configs run True False Timeout
NG (NG_n 1-16; len1 0,1,2,4,6; len2 0,2,4,6; both history kinds), all 640 640 0 473 167
RWL_mod (simT 1001-1002; bsz 1-6, 8; mnc 1-3; mod 1-6; len1 0-3), all 1,008 1,008 0 936 72
CPS_LRU (bsz 1,2,3,4,6; len1 1,2,3,4,6,8; len2 1,2,3,4,6; len3 0-1; LRU_n 0-1): simT 1001 complete, simT 1002 partly (bsz 6 unfinished), simT 1003-1004 not run 1,126 of 2,400 0 730 396

No configuration closes. The timeouts are mostly larger blocks (bsz 3 and up) with long histories. mxdys's own sweeps left this line a holdout, so this was a cheap check, not a promising route.

Formalization route

No port route exists. - Copying CTLv1.v's call, or importing nonhalt16856, gives a theorem about the twin. It would still need a proof of P, and P is equivalent to 385's own non-halting. - nonhalt16856 depends on CTL62 (PArray/Uint63), which the unchanged check_kill baseline rejects. Any CTL-format certificate would go through Astra's package instead. - No Perm or Flip is involved. The states are renamed only in the sense of the split (385's E and F both map to the twin's E). The start is A, and no new opening is needed.

A kill needs either of these: 1. A regular invariant for 385 itself that excludes 0 1 0 1 <C (more precisely, D0 with a 1 on its left) while covering the twin's orbit. It would use the CTL format (left NFA, right NFA, key set) and go through Astra's package (astra/autonomous-20261014/certificate-package/package.py). This is direction 5 (regular-language search), not a port. 2. A hand proof of the machine's "Monotone list" dynamics. That is new work.