/machines/1RB0RF_1RC0RB_1LD0RA_1LE0LD_1RB0LC_1LA---/notes.md · raw

W4-3 1RB0RF_1RC0RB_1LD0RA_1LE0LD_1RB0LC_1LA---

740 line 341 (778 line 363). Sheet: Results tab, class "Skelet 1-like Class 2"; no status, notes, sources or "done by" (Results, Level 0, Classifications). Not in data/discord/*.txt. Upstream busycoq HEAD 9cf9e88 mentions it only as tm' in Eqv_v2.v / Eqv_v3.v (equivalence targets, no non-halting proof).

     0    1
A   1RB  0RF
B   1RC  0RB
C   1LD  0RA
D   1LE  0LD
E   1RB  0LC
F   1LA  ---      halt: F reads 1 (reached only via A1: A> 11, or C> 111)

Observation

Candidate rules

Family (canon, state renaming + mirror)

740 line string relation evidence
341 1RB0RF_1RC0RB_1LD0RA_1LE0LD_1RB0LC_1LA--- this machine
512 1RB0RA_1LC0RE_1LD0LC_1RA0LB_1RA0RF_1LE--- our table started in our B, rename A->E B->A C->B D->C E->D, no mirror no halt to 2e9; left records 3,4xx steps after ours (114,514,474 vs 114,511,038), same 3-per-epoch triples
588 1RB---_1LC0LA_1LD0LC_1RE0LB_1RF0RE_1LC0RD our table started in our F, mirrored, rename A->B .. F->A no halt to 2e9; left records mirrored (right side), 1,040,780,817 vs 1,041,302,737

These are different orbits of one macro map (same epoch structure, offsets of 1e3-1e5 steps). A proof for 341 would carry over with a new init (the #25/#33b recipe).

Template check

Nearest proved neighbour: kill #11 (1RB0LE_1RC0RC_1LD0RB_1LA0LE_1LD1LF_1LD---.v, TM21 architecture). - Its rule set: S1-S6 shifts, T1-T14 windows, Lb/Lf/Rb/Ro digit lemmas, M_spec / Mdrop_spec / O_spec, and one INV over a single digit list. - What carries over: only the bottom layer, the sweep and turn lemmas. - What #11 lacks: W4-3's counter has an unbounded number of levels (fossil defects with 2-3 states, 3 phases per epoch, a left-end counter). - The nearest open cases are #32/R4 (multi-level counter, parked by Dennis 2026-10-10).

Checkpoint A (Dennis)

(pending; the card has 2 check questions and 1 decision)

Informal proof

(not started; blocked on the level-2 phase rule and the invariant)

Formalization log

(none)

Outcome

Observe done at confidence low. Scratch tools (C loggers for turns and defects, perturbation runner) are in work/.

Decision (2026-10-11)

Question: Fund one ~2 h stage to derive W4-3's phase rule and an exact defect-level model, or park it with #32/R4 as a multi-level counter? Answer: rules_stage (Fund one ~2 h rules stage, with a kill criterion). Dennis: go with recommendations (2026-10-11).

Funded stage (2026-10-10, rules_stage)

Scope (answered decision, now in decisions/2026-10-10-rules_stage.json): derive the phase rule, the left-end counter and the phase-change event, and build a model that keeps fossils mod 4 only. Kill criterion: the model must reproduce every trip to 1e9, or W4-3 is parked.

Result: the kill criterion is passed. The model reproduces every turn and wiggle, with exact step indices, to 2e10 (20x the bar). Scripts are in scripts/rules_stage/ and outputs in scripts/rules_stage/results/.

The defect model (dmodel.py): 8 local rules, exact on every tape

head d=0 d=1 d=2 d=3
leftward pass, phi+1 turn at cell e (C-turn): D ^= {e-1,e} turn at cell e (E-turn): D ^= {e-1,e} pass, phi-1
rightward turn at cell e+1: D ^= {e,e+1} wiggle C1 A1 F0 A0: D ^= {e,e+2}, then e+2 crossed by d=3 (net: defect +2 cells, phi+1, +2 steps) pass, phi-1 pass, phi+1

Phase rule per trip (level 2), bits.py + check_trip_rule.py

Fossils mod 4: now derived

Left end and phase changes: no extra rules

Epoch laws, extended with the model (epochs.py to 1e14, 33 left records, no halt)

Still open (next stage)

Decision (2026-10-12)

Question: Fund one ~2 h stage to derive W4-3's level-3 counter as an exact macro on the defect labels, or park W4-3 now with its exact defect model? Answer: macro_stage (Fund one ~2 h macro stage, with a kill criterion). Dennis: apply recommendations (2026-10-12).

Funded stage (2026-10-10, macro_stage)

Scope (answered decision, now in decisions/2026-10-10-macro_stage.json): derive the counter above the trip rule as a macro on the z/o bit labels, reproduce every left record and epoch-boundary configuration to 1e13 in the model, and give a candidate invariant against the only halting pattern. Park if either fails. Scripts are in scripts/macro_stage/, outputs in scripts/macro_stage/results/.

Kill criterion: passed as stated, at confidence med. The record macro reproduces every left record from record 11 to record 33 (step 6.2e13). The two-part pair invariant holds on every pair crossing to 1e13. Neither one is proved for all u yet.

Record macro on mod-4 label words (record_words.py)

Candidate non-halting invariant (check_invariant.py, every event to 1e13: 24,832,839 events)

Still open

Decision (2026-10-12)

Question: Fund one ~2 h induction stage to prove W4-3's record macro for every u (a finite U-digit transducer plus induction), or park W4-3 with the exact record macro? Answer: induction_stage (Fund one ~2 h induction stage, with a kill criterion). Dennis: b (fund all five), 2026-10-12.

Funded stage (2026-10-10, induction_stage)

Scope (answered decision, now in decisions/2026-10-10-induction_stage.json): enumerate the U-digit transducer (4 defects, positions mod 4), then prove P U^u T_r -> P U^u' T_r+1 for every u as a ternary counter that carries the active X/Y lengths, and derive (I2a)/(I2b) as inductive statements. Stop rule: park if the transducer does not close or the induction needs unbounded state. Scripts are in scripts/induction_stage/, outputs in scripts/induction_stage/results/.

Result: the transducer closes, but the induction is not done; confidence stays med. The record macro turned out not to be a statement about mod-4 words alone. A proof has to carry the exact X/Y lengths in step with the counter. That synchronization is observed as an exact linear recurrence (6/6 epochs) but is not derived.

Compressed defect TM (blocktm.py)

The U-digit transducer (blocktm.table)

Negative result: the macro is not uniform in u

The synchronization, observed (xsync.py, to 1e13)

Still open

Reopened (2026-10-12)

Dennis: close out Skelet 1-like Class 2. The class's 8 kills (#3's and #11's tables) are the templates to learn from.

Class 2 close-out, stage 1 (2026-10-12)

Funded: sync_stage (decision.json answer, Dennis 2026-10-12). Scope: the U-chain counter lemma for every k, then the X/Y synchronization. Scripts in scripts/sync_stage/, outputs in scripts/sync_stage/results/.

Result: the chain lemma is closed for every k, in a corrected and simpler form. The synchronization is located on the counter (both epoch events sit at a regime switch whose position the lemma predicts) but its closed form is not derived. Outcome: progress, confidence med.

1. The right unit is a digit block, not the 4-defect U

2. Eight block states

Offsets from the block base b (b = c - 1 mod 4); for m = 1 only the first two entries exist, and U2 = D0.

state defects value
U0, U1, U2 (-s, g1, g2, g3) s
W0, W1 (-2, g1+1, g2+3-w, g3) w (W2 would be D0)
D2, D1, D0 (-2, g1+1, g2+1, g3+t) 2 - t

3. Mixed chain lemma (all k)

Value of a word = ternary number of the block values, least significant digit on the right. A block is full at U2 or D0.

A visit = the head enters the chain from the right at phase c_K (separator residue of the last block). Claim: - Not all full: the value goes up by 1 and the head leaves to the right. - The turned block (rightmost non-full) moves to its successor: U0>U1>U2, W0>W1>D0, D2>D1>D0. - The full blocks right of it reset to value 0. After a U or W turn they are all U2 and become U0. After a D turn, the D0 blocks become D2, the first U2 becomes W0 (a new wave) and the other U2 become U0. - Exit phase: c_K + 0 if the turned block is D and the last block is D afterwards, else c_K + 2. - All full: the head leaves to the left with the chain unchanged (carry out), at phase c_1 + 2. - Carry back from the left (all full, entry at c_1 + 2): every block resets to value 0 with the D-turn labels.

Proof shape: the 11 single-block entries it uses for m=3 (7 for m=1) are the same for every gap choice and never collide (block_table.py, 206 + 54 gap choices, results/block_table.txt). The phases then compose: a full block passed leftward exits at c+2 = the standard entry of the block on its left; a U/W turn hands c+0 to the right (resets U2 -> U0, each again handing c+0); a D turn hands c+2 (D0 -> D2 keeps c+2; the first U2 -> W0 switches to c+0). That is an induction on the word, and it keeps the shape D^a [W] U^b.

Checks: - Synthetic, compressed TM: every word of the right shape, K <= 5, 0-2 leading m=1 blocks, random gaps including the tight ones: 16,246/16,246 (side, labels, exit phase) (mixed_chain.py, results/mixed_chain.txt). - Blank run, every visit, intervals 16-27: 262,442/262,442 visits from the right enter at c_K and match; 972/972 carry-backs from the left enter at c_1 + 2 and match; no other kind of entry occurs (check_mixed_visits.py, results/mixed_visits_16_27.txt). - An earlier two-frame version (pure U = up, pure D = down) is in chain_lemma.py / check_chain_visits.py. It is a special case.

Consequences: - Between two carry-outs the chain receives exactly 3^K visits. - No collision happens inside the chain, so no halt can start there. The adjacent pairs of the old (I2a) are the U0 blocks with g1 = 1; the lemma covers them. The halting question moves entirely to the two boundaries. - At every left record the chain reads as all-U0 under some grouping (a D-chain regroups as a U-chain). This is why the record words were P U^u T mod 4.

4. The right boundary is a finite automaton per visit

5. Visit counts come from the chain lemma

6. The synchronization, located on the counter (epoch_events.py, results/epoch_events_16_27.txt)

The one non-automatic boundary transition per interval is always one of two epoch events, and both sit right at the end of the first regime:

event intervals visit index what happens
X exhausted 16, 19, 22, 25 first-regime count + 3 W meets the left end of X (annihilation); W's identity jumps by the new fossil (24,912, 74,800, 224,496, 673,552)
X frozen 17, 20, 23, 26 first-regime count + 4 the edge defect stops following hi and becomes the new W; the jump is exactly X_k (6,800, 20,408, 61,232, 183,704)

What is validated / open

Class 2 close-out, stage 2 (2026-10-12)

Funded: sync_stage (same decision as stage 1). Scope: the right-boundary automaton as a lemma, then the X/Y synchronization in closed form. Scripts in scripts/closeout2/, outputs in scripts/closeout2/results/. The episode pickles (23-220 MB) are not kept; results/README.txt lists the commands that regenerate them (1-2 min each) and every check.

Result: the right boundary is closed for every epoch, and the synchronization is derived (an exact cancellation, not a fit). - The record step closes symbolically on the right as well. - The left end is a fixed 81-step finite counter. - At a record, the chain regroups by one defect. - The siblings 512 and 588 follow the same induction from record 16.

What is still open: the record regrouping and frame bookkeeping, stated as one lemma per class; the assembled invariant; and proof.md. Outcome: progress, confidence high.

1. Episodes and the right region

2. The right-region table (81 entries)

3. V1 and the visit count, derived from the chain lemma

4. Symbolic interval map, all epochs (symb.py)

class regime 1 (exit 2) regime 2 (exit 0)
r5 old X eaten 3; exhausted at the switch, old Y becomes fossil 24948w - 36 new X grows 3
r0 X grows 9; frozen at the switch at 6804w - 4 new Y grows 9
r1 Y grows 9 X eaten 1, Y grows 8
r2 X eaten 9; exhausted at the switch, Y becomes fossil 74844w - 36 new X grows 9
r3 X grows 9; frozen at 20412w - 4 new Y grows 9
r4 Y grows 27 X eaten 3, Y grows 24
class trips
r5 (9801w - 61)/4
r0 6561w - 4
r1 (65853w - 21)/4
r2 (29403w - 119)/4
r3 19683w - 3
r4 (197559w - 51)/4

So N(r2) = 3 N(r5) + 16 and N(r5, 9w) = 3 N(r2) + 74. The old 3N + 12/22 used another trip count. The X-exhaustion trip is (1215w - 31)/4 in r5 and (3645w - 313)/4 in r2, of the same 3t + c form.

5. The left end is a finite counter (left_episodes.py, check_left.py)

6. The record is a regrouping (regroup.py, timeline check)

7. The record step closes on the right too (glue.py, link.py)

8. Siblings 512 and 588 ride the same induction (episodes.py ... B 0 / F 1, sib_compare.py)

What is validated / open

Class 2 close-out, stage 3 (2026-10-12)

Funded: sync_stage (same decision as stages 1-2; final stage of the campaign). Scope: the invariant at record exits, the record lemma per class, the base case, proof.md. Scripts in scripts/closeout3/, outputs in scripts/closeout3/results/.

Result: the induction closes. proof.md (machine directory) is written: an invariant C_r(e) at every record exit and a record lemma that maps C_r to C_(r+1) symbolically for every epoch e >= 2, concretely for records 16-27, with the base case at record exit 16 by simulation. It covers 341, 512 and 588. Outcome: proof_ready (informal proof; not a kill), confidence high.

1. Record-exit snapshots (snap.py)

2. The structure of the middle of the tape

Chain gaps at a record exit, left to right (e.g. record 33): 1, 5, 1,4,4,5, 1,4,4,5, ... | 5, 16, 24, 45, 33, 40, 36 | 973, 2733, 8280, 24912 | prefix 74805, 224495, .... - Left-born gaps (one new digit per record): the pattern 1,4,4,5 shifted by one per record. - A fixed start-up segment of 7-8 gaps, which cycles with period 4 records. - Fossils: 969-973, 2733-2737, 8277-8280, 24909-24913, ... (each cycles within 4 cells). - Regrouping shifts each gap to the next role with change +3, 0, +1, -4 (digit -> sep1 -> sep2 -> inter -> digit). The changes sum to 0 over 4 records, which is why every gap cycles with period 4 and the residues and lower bounds of (C) are preserved. - The siblings differ only in the start-up segment (512: 17/20 instead of 13/16; 588: 52, 936 instead of 24-45, 972). This is deep in the chain at e >= 2.

3. Chain lemma with tight gaps (chain_tight.py): 1,432,212 / 1,432,212

4. Left end in context (check_left_ctx.py)

5. The window and the symbolic record step (window.py, symcore.py)

6. Only the stated constraints matter (perturb.py)

7. proof.md

Template comparison (#3, #11)

What is validated / open

Class 2 close-out, completion pass (2026-10-12)

Task (close-out workflow): complete proof.md (rule table, every macro rule with variables, invariant, progress, halting, exact initial segment, lemma plan against #11/TM21 and #3) and validate every claim in one check_proof.py.

Result: proof.md completed; check_proof.py (machine directory) checks every claim, all PASS. Still an informal proof, not a kill (no Coq).

What was added to proof.md

check_proof.py (S1-S12)

Corrections made to proof.md

Open

Class 2 close-out, review pass 1 (2026-10-12)

Task (close-out workflow): fix the six gaps of a referee read of proof.md (verdict: sound; all six minor), re-run, review log. New code: check_proof.py (new claims in S3, S5, S6, S7, S9, S10; new Appendices D-F and the 6.4 formulas, all checked verbatim by S12) and scripts/review1/lo_moves.c (direct simulation: moves of lambda, and the record exit by the operational definition).

Result: every gap fixed; check_proof.py all PASS (see the review log in proof.md). Status CHECKPOINT_B.

Open: Checkpoint B (Dennis, non-blocking). Formalization as in proof.md section 10 (several stages).

Kill

KILLED_NONHALT (2026-10-12). Lemma nonhalt: ~halts tm c0. in 1RB0RF_1RC0RB_1LD0RA_1LE0LD_1RB0LC_1LA---.v (2,583 lines, sha256 7bda36dc…3f4c, Individual62 + stdlib only), proved by rounds 1-2 of the formalization (rocq/log.md). - Verification. check_kill PASS three times on the same sha256: round 2b (56.7 s compile), the independent audit (56.8 s, --json), and a fresh run for the package (75.7 s compile, run alongside other sessions' Coq jobs; raw log rocq/check_kill_final.log). Print Assumptions nonhalt: closed (0 assumptions). coqchk SKIP every time: the 600 s cap is hit (policy A warning), so the 38 native_compute base-case pieces and the vm_compute checks rest on coqc's kernel check at Qed. The unchunked round-2 file died in coqchk with out-of-memory (FAIL); the chunked file has no coqchk error, only the timeout. - What the .v proves vs proof.md. No defect model and no transfer lemma: a symbolic run-length simulator of tm (linear-form lengths, abstract sides) proves every finite run for all gap values at once. The 81-entry right table is not an input; each episode is run symbolically (ep_run), 4-cycles by jump_run/jump_lemma, u = 1 + 8t. The invariant point is one episode after the record exit (start of the interval, Appendix B start vectors). The base case is the direct simulation to record exit 28 (18,571,896 simulator steps), so the record-exit-16 base and the concrete steps 16-27 are not used. Only line 341 is proved; siblings 512 and 588 are not formalized. - Package (submission/, not posted): the .v (byte-identical), proof.md (public write-up; writeup_lint 0 errors, 0 warnings), check_kill.txt (fresh run, local paths replaced by placeholders), README.md, discord.md (1,818 characters without the link; fill <LINK>). - Open (not blocking): the dead helper lemma sum_false_true (line 1720) is still in the file; removing it means a new check_kill. A coqchk that finishes would need a cheaper base case (e.g. start the induction earlier). Checkpoint B on proof.md is still unanswered; fold any notes into both proof.md files before posting.

Class 2 close-out, stage 2 (2026-10-12)

Workflow track "W4-3 table" (740 lines 341, 512, 588), funded sync_stage; this stage was dispatched again after the kill above. Its goal for this machine (X/Y synchronization, U-chain counter lemma, non-halting invariant) is already met: the earlier stages 2-3 derived it, and the formalization proved it (## Kill). So the stage went to the two other starts of the table. Nothing in this directory was changed apart from this section and status.json (siblings_note, funded).

Result: both siblings KILLED_NONHALT (check_kill PASS each). - W4-3b 1RB0RA_1LC0RE_1LD0LC_1RA0LB_1RA0RF_1LE--- (740 line 512): check_kill PASS, compile 71.96 s, coqchk timeout, 0 assumptions. - W4-3c 1RB---_1LC0LA_1LD0LC_1RE0LB_1RF0RE_1LC0RD (740 line 588): check_kill PASS, compile 72.31 s, coqchk timeout, 0 assumptions. - Method. Each file is this machine's kill file verbatim with the table renamed tmP, a new base case and the conjugacy (Perm tm tmP phi for 512; Perm (flip tm) tmP phi + flip_halts for 588; busycoq Permute.v / Flip.v). Our Inv leaves the deep chain free, so only the base case and nus28 change. - Numbers. Record exit 28 (exact right side of our cfg28) from B after 18,571,902 simulator steps, from F after 18,571,554 (ours from A: 18,571,896). Same window, same chain structure; gap variables differ only deep: 512 block 3 [10; 5; 4; 1] (ours [10; 5; 3; 1]); 588 block 2 [233; 8; 9; 8] (ours [242; 8; 9; 8]) and block 3 [12; 1; 0; 0]. This confirms in Coq the stage-3 claims (window V_r5(1) at record exit 28; deep gaps equal mod 4). - Template comparison (#3, #11). As for #7/#30 and #3b/#33b: a sibling of a killed table costs only a base case plus busycoq's Perm/Flip lemmas, because the invariant (like #11's INV over a digit list and #3's J with projected values) quantifies over the part of the tape the start changes. - For this package: submission/discord.md (last paragraph) and submission/README.md (first bullet) say the two starts are not formalized. Not edited here; when posting, change that sentence or post the siblings' combined message (their submission/discord.md) right after. - Open: independent re-verification of the two sibling kills; nothing open for this machine from this stage.

Class 2 close-out, invariant stage (2026-10-12)

Workflow track "W4-3 table", dispatched again after the kill. Computed task: write proof.md for this string (rule table, macro rules, invariant, progress, halting, exact start, lemma plan "this kill file with the table renamed tmP + perm_halts / flip_halts"), validate it in check_proof.py, set status.json to stage informal_proof, status OPEN.

Result: nothing was missing; status.json NOT changed (still KILLED_NONHALT). - Already met: proof.md has every listed part (1 table, 2.2 rules, 3.3 invariant, 4 lemmas C/C'/T/L/R, 5 interval and X/Y sync, 7 progress and halting, 8 + Appendix C base case, 10 lemma plan, review log), and check_proof.py (S1-S12) checks it. The machine is killed (check_kill PASS three times, sha256 7bda36dc...3f4c). The "tmP + Perm/Flip" plan is the siblings' plan, and stage 2 carried it out (512 and 588: check_kill PASS each). - Not done on purpose: status.json was left alone. Setting it to informal_proof / OPEN would overwrite a verified kill. - Added to proof.md: a status line under the header; section 10.3 (where the .v followed the plan and where it took another route: run-length simulator in place of the defect-model interpreter, symbolic episodes in place of the 81-entry table, one interval invariant Inv with a free deep chain in place of a per-visit J, base case at record exit 28); the sibling lemma plan with the real lemma names, phi maps and nus28 differences; a review log entry. - check_proof.py default run after the edit: 68/68 claims PASS, 158 s (output in check_proof.out). - Open, unchanged: Checkpoint B (Dennis); independent re-verification of the two sibling kills (their status.json); this package's README/discord still say the siblings are not formalized (see stage 2 above).