/machines/1RB0RD_1LC0RA_---1RD_1RA1LE_1RC0LF_1LE0LB/notes.md · raw

C2-552 1RB0RD_1LC0RA_---1RD_1RA1LE_1RC0LF_1LE0LB

740 list line 552 (778 list line 587), sheet class "Skelet 1-like Class 2". Singleton: no other holdout in the 740 list or the 1590 equivalence file is this table from another start state, mirrored or renamed.

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

Stage 1 = PLAN §6 "Observe". Outcome: progress. The bottom level is an exact binary counter (rule M, exact step formula). The full machine is a multi-level structure whose fossil zone is Pascal's triangle. Neither #3's nor #11's architecture covers it as is.

Checks

Halting condition (from the table alone)

Wall view (the representation that works)

Read the tape left of the head at a right record (state A on the blank cell). - A wall is a run of ≥ 2 equal symbols: 00, 11, 1111, 1^5, 1^n. - A gap is the number of cells between two walls; those cells alternate. - The 11 walls cut the tape into units. A unit is 11 x M m_1 P m_2 … P y: - lead marker M ∈ {00, 1111} (the bit: 00 = 0, 1111 = 1); - k − 1 passive walls P = 1111, so k markers in all; - gaps x (left), m_i (inside), y (right, the fuel). - The tail is 11 t (t = 2a − 1 odd, a = number of increments since the last reset). - Left of the first 11 is the prefix (the fossil zone). - In pair notation a k = 1 unit is (10)^p [1111] (01)^q, #11's digit shape with marker 1111 instead of 00. - Tools: work/walls.py, work/unitlib.py, work/build.py (builds a tape from wall tokens).

Rule M (one increment = one right record in state A): exact

The carry runs from the right. Every unit with lead 1111 is passed; the first unit with lead 00 stops it. - Passed unit: 1111 → 00, x += 3. - Stopping unit: 00 → 1111, x −= 1. - Every touched unit, k = 1: y −= 1. - Every touched unit, k ≥ 2: m_1 += 1, y −= 2. - Untouched units and the prefix are unchanged; t += 2. - Steps (old values; for k = 1 there are no m terms): - 2t; - plus, per passed unit, 20 + 16(k−1) + 2(x + Σm + y); - plus, for the stopping unit, 16 + 16(k−1) + 2(Σm + y).

Validated: - 27,033 / 27,033 orbit increments to 1e9 whose shape M covers: exact wall lists, 0 mismatches (work/unitcheck.py; 14,702/14,702 to 3e8, 4,530/4,530 to 3e7). - 3,000 / 3,000 random constructed instances (work/randM.py): 1–6 units, up to 3 markers each, random leads, random stop unit, a fossil-like prefix. - The step formula fits all 3,000 exactly (work/fitsteps.py, exact rational fit, max error 0).

So level 0 is #11's per-carry M macro with a different encoding. Every touch burns fuel, and the bit sense matches #11 (00 = 0).

The other events (785 of 27,818 increments to 1e9)

Fossil zone = Pascal's triangle

The prefix is a list of rows. Row k is a block 1^{n_k}, then k passive walls, with inner gaps 2·C(k,i) − 1 (i = 1..k−1).

At 2.73e9 the prefix reads:

1^690 | 1^526 P | 1^283 P 3 P | 1^151 P 5 P 5 P | 1^82 P 7 P 11 P 7 P | 1^46 P 9 P 19 P 19 P 9 P | 1^25 P 11 P 29 P 7 …

Cryptid check

Not cryptid-like. - All updates are linear with exact formulas (M; the clean O; the R end shape). - The fossil zone is binomial (Pascal), not pseudo-random. No parity- or mod-driven branching was seen beyond binary carries. - The irregular part is when glue/split events happen (which unit's fuel runs out first). That is fuel arithmetic, the same kind as #11's drops.

Comparison with #3 / #11 / TM21

Open (stages 2–3)

  1. Exact rules for G, S, the prefix-entering carries and R (rule closure). Then validate them all on the orbit, aiming at 27,818/27,818 to 1e9.
  2. An invariant: - every k = 1 fuel ≥ 1; - glue happens only for k ≥ 2; - an inductive description of the rows, with fuel bounds per row derived from the binomial gaps.

Natural route: a per-step INV over the unit list as in #11, plus a recursive row predicate for the prefix. Feasibility is unknown; it is far beyond a delta of #11.

Files

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

Outcome: progress. The rules close: one rule set reproduces every increment from step 342 on. No invariant yet; the open problem is now one precise question, the fuel race of single-marker units.

Result: rule closure

The executable spec is work/rules3.py (parse, step, unparse). One call of step = one increment (A right record to the next). - Orbit: 27,813 / 27,813 consecutive increments from step 342 to step 999,928,220 predicted exactly (full wall lists, 0 mismatches). Only the 5 bootstrap increments before step 342 are outside the rules. - Macro run from step 342 reproduces the orbit configuration at step 999,928,220 exactly (work/macro.py). - Past the dump: 3,000,000 more macro increments, no rule failure: no fuel-out, no unknown shape (work/macrolong.py, log in work/macrolong_3M_log.txt). That covers at least 4.88·10¹² TM steps (lower bound Σ2t, work/steplb.py); the tape is then 6.09M cells. - Independent TM checks past 1e9 (build the tape, run the C simulator to the next A right record, compare walls): - 200 evenly spaced increments up to 600,000 increments past the dump, tapes up to 1.26M cells (work/valfar.py, work/valfar_log.txt); - 400 targeted increments in the first 277,096: every increment that used a rare rule (absorb, stack edge, U₀ rules, resets, unglue with g up to 576, stack glue) plus every 50th overflow (work/valfar2.py, work/valfar2_log.txt). - 600 / 600 match.

Representation

Read the wall tokens left of the head at an A right record (as in stage 1). Every 1-block is classified by its length mod 3:

token class meaning
1^(3g+2): 11, 1^5, 1^8, … boundary a 11 with g passive walls of the left unit glued on (g = 0 is a plain 11)
1^(3j+1): 1111, 1^7, 1^10, … passive Q a stack of j glued 1111 walls
00 / 1111 right after a boundary lead M the bit (00 = 0, 1111 = 1)
the leftmost block 1^e edge E grows at the left end

The tape is

E U_0 b_1 U_1 b_2 … b_N U_N b_T [t] A>

The stage-1 "prefix" is not special: it is E, U₀ and the units whose boundaries are glued blocks (1^5, 1^11, …), and its big blocks are passive stacks.

The rules

The carry runs from the right and treats one unit at a time.

situation rule
tail, boundary 11 t += 2, continue
digit, lead 1111, boundary 11 M pass: lead → 00, x += 3; k = 1: y −= 1; k ≥ 2: m₁ += 1, y −= 2; continue
digit, lead 1111, boundary 1^(3g+2), g ≥ 1 S unglue (below); continue
digit, lead 00 M stop: lead → 1111, x −= 1; fuel as in M; stop
leadless unit every wall +2: x += 2, y −= 2; continue
empty unit continue
U₀ a digit with lead 1111 (E then has e ≡ 1 mod 3) the lead moves like a passive wall: x += 2, y −= 2; continue
edge, e ≡ 0 mod 3 e += 3 (one cell left, two right); U₀'s first gap −2
edge, e ≡ 1 mod 3 E becomes U₀'s first passive wall: U₀ = [1, 1^e, x₀, …]; a new edge 111 starts two cells further left

Unglue S (the left unit's glued walls enter this unit; the first one becomes the lead and is passed at once; the old lead 1111 turns passive; the boundary becomes 11):

g = 1:  [x, 1111, m_1, …, y]  ->  [2, 00, x+1, 1111, m_1, …, y-2]
g ≥ 2:  [x, 1111, m_1, …, y]  ->  [2, 00, 0, 1^(3g-2), x, 1111, m_1, …, y-2]

Glue G: whenever a last gap reaches −1, the last passive wall 1^q merges with the boundary 1^r on its right into 1^(q+r−1). If U₀ is empty and its gap reaches −1, E absorbs b₁ instead (e += r − 1; U₁ becomes U₀).

Reset R (two increments):

… 1^5 [t]          ->  … 11 [2, 00, t+2]            (no tail; the carry continues left)
… 11 [2, 00, t+2]  ->  … 11 [1, 1111, t] 11 [1]     (the digit stops the carry; new tail)

Event counts on the orbit (27,813 increments, step 342 → 1e9): - plain M: 27,255; - overflows: 373 with e ≡ 0, 10 with e ≡ 1; - absorptions: 10; - resets: 17 (16 first halves in the window); - unglue: 202 with g = 1, 47 with g ≥ 2 (g up to 52); - glue: 98 for k ≥ 2 units, 106 for leadless units, 3 in U₀, 22 right after an unglue.

What the rules say

The only danger: the k = 1 fuel race

Under the rules, the machine halts only if a single-marker unit (k = 1) runs out of fuel. Every other precondition held in all 3,000,000 macro increments, for example: - odd last gaps for k ≥ 2; - x ≥ 0; - only 1^5 ever glues to the tail.

A k = 1 unit j waits for its left neighbour i to hand it a wall (the rescue). Write T for the number of touches of i until the rescue, and bit for j's bit. Then: - j gets n_r = 2T − bit touches up to and including the rescue; - its fuel just before the rescue is y − n_r + 1.

So μ = y − n_r must stay ≥ 0. It is constant under ordinary touches: - a stop touch lowers y by 1 and raises bit, so n_r drops by 1; - a pass touch lowers y by 1, T by 1 and bit from 1 to 0, so n_r drops by 1.

T is local:

neighbour i with k ≥ 2 (or leadless), boundary b_j unglued:  T = (y_i + 1)/2 + 1
boundary b_j glued:                                           T = 1
neighbour i with k = 1:                                       T = (y_i + n_r(i))/2 + 1

Comparison with the templates (updated)

Open (stage 3)

  1. Invariant. Turn "μ ≥ 0 for every episode" into a condition on the current configuration that all rules preserve. That needs: - a bound on m₁ at the coming glue of each k = 2 unit relative to its neighbour's T; - the reset ratio a_{n+1}/a_n < 2, which depends on the arrival schedule from U₀/U₁ (the Pascal rows).
  2. Feasibility. This is a renormalization-type statement over an unbounded structure, far beyond #11's three-phase INV. A realistic stage-3 target is an exact invariant candidate, closed under all the rules and tested on the macro simulator, not a Coq proof.

Files (stage 2)

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

Outcome: halt predicted. There is no invariant to find: run far enough, the closed rules of stage 2 reach a single-marker fuel-out, and the TM halts two increments later. This is a prediction from validated rules, not a simulated halt and not a kill.

How we got past 3M increments

work/fast.py is an exact accelerated form of rules3.step. - Between structural events every unit changes linearly in its touch count. - The touch counts follow binary-counter arithmetic: a unit with q digits to its right is touched ((C mod 2^q) + d) >> q times in d increments, where C is the counter value of those digits. - So the simulator jumps to one increment before the next structural event and runs that increment with rules3.step. - Structural events: glue, unglue, k = 1 fuel-out, resets, absorption, and any carry that reaches U₀ while U₀ is a digit or the edge is not ≡ 0 mod 3.

Checks of fast.py against plain rules3.step (work/xval.py, work/xval_log.txt):

start increments units result
step 342 4,027,813 4–9 identical
reset 40 snapshot 2,000,000 12 identical
reset 62 snapshot 2,000,000 19 identical
reset 80 snapshot 2,000,000 24 identical
reset 82, last 2,000,000 increments before the fuel-out plain stepping 23 same fuel-out, same increment

The run from step 342 to the fuel-out takes 91 s (work/longrun.py; every reset is logged in work/resets_long.jsonl).

What the long run shows

Stage 2 saw reset ratios a_{n+1}/a_n of 1.79–1.86 and 8–9 units. That window was too short. The ratio oscillates, and the swings grow:

resets ratio a_{n+1}/a_n
24–37 1.788–1.807
45 (peak) 1.882
53 (trough) 1.818
62 (peak) 1.977
75 (trough) 1.813
82 1.969, still rising

The fuel-out

What the real TM does with this shape (work/runincs.py, a constructed tape with the same right end at small sizes):

['111', 5, '11', 6, '00', 8, '11', 5, '1111', 7, '11', 3, '1111', 1, '11', 3, '1111', 3, '11', 7]
  increment 1 (step 150): unit 3 -> [6, 00, 0], exactly as the rules say
  increment 2 (step 188): LSB stop
  increment 3: HALT at step 228

This matches the halting condition from stage 1: F reads a 1 whose two left neighbours are 0 0.

So, if the rules hold, the TM halts during increment 11,631,266,794,472,450,654,093 counted from the step-342 configuration. Step count (work/stepest.py, which reruns the batched loop with accounting and reaches the same fuel-out increment): - Lower bound: 87,364,406,466,050,439,442,427,007,228,199,699,615,332,500 ≈ 8.74·10⁴³. This is 342 plus the sum of 2t over all increments; each increment sweeps the tail twice. - Estimate: ≈ 2.06·10⁴⁴. This adds 2 × the width of every unit the carry touches, and ignores the O(k) constants per touched unit. - The exact count is not computed: stage 1's exact step formula covers only rule M.

Are the rules still trusted that far out?

Corrections to stage 2

Open

  1. Certify the halt. This needs: - the rules as lemmas about the TM: parametric shift/sweep lemmas, one per rule of rules3.py; - an exact step count: extend stage 1's M formula to every rule, then sum it in fast.py; - a checked computation of the macro run: about 60k structural events plus closed-form batches.

The busycoq-style route for a halting kill would be a Coq development that replays the macro run. 2. An independent confirmation. sligocki's accelerated simulator (tools/qsim.py, recursive prover on) ran about 5 minutes in stage 3 and printed nothing: fewer than 2M loops, and its RSS grew past 1.7 GB. It is not a practical route to 10⁴⁴ steps. - A better independent check is a second implementation of the macro rules, written from the TM rather than from rules3.py. - Or the Coq replay itself.

Files (stage 3)

Halt certification: exact step count (2026-10-12)

Outcome: exact step count computed. Assuming the closed rules hold, the TM halts after exactly

N = 176,522,930,997,643,289,094,015,905,898,381,767,890,130,463  ≈ 1.765·10⁴⁴ steps

N counts the halting transition, as tools/sim does (BB(5) = 47,176,870). In busycoq's convention (halts_in tm c0 n: n defined steps, then a halted configuration) this is n = N − 1 = …130,462.

This is still a prediction from validated rules, not a kill. No Coq was run.

Step formulas (work/steps_exact/costs.py)

An increment costs the sum of its carry actions' costs, computed from the old values. Notation: - Σm is the sum of a unit's inner gaps. - Qc sums (14L − 8)/3 over the unit's passive walls 1^L: 16 for a 1111, 14j + 2 for a stack of j walls.

action (rules3 branch) TM steps
tail 11 [t] 2t + 11
glued tail 1^5 [t] (reset, first half) 2t + 24
no tail: stop on [x, 00, …, y] (reset, second half) 2(Σm + y) + Qc + 12
digit pass, boundary 1^(3g+2) (g = 0: rule M; g ≥ 1: unglue) 2(x + Σm + y) + Qc + 14g + 20
digit stop (any boundary, U₀ included) 2(Σm + y) + Qc + 5
leadless U₀ 2(x + Σm + y) + Qc + 3
empty U₀ [y] 2y + 3
U₀ digit with lead 1111 (edge ≡ 1) 2(x + Σm + y) + Qc + 19
edge e ≡ 0 (growth or absorption) 14e/3
edge e ≡ 1 (fossilization) (14e − 2)/3
glue, absorption 0 extra

Stage 1's M formula is the case g = 0 with the tail's 11 added to the stop constant: 5 + 11 = 16.

Batches (work/steps_exact/stepsexact.py). A batch adds closed-form sums over the touches of each unit: - Tail: 2dt + 2d(d − 1) + 11d. - Digit with m touches: p passes and s stops alternate from its current bit. Σm + y drops by 1 per touch, and x rises by 2 per pass/stop pair. The sum is m·Qc + 2m·S₀ − m(m − 1) + 20p + 2p·x_first + 2p(p − 1) + 5s. - Leadless U₀: every overflow leaves x unchanged and lowers y by 2, so the sum is m·(const) − 2m(m − 1). - Edge: e rises by 3 per overflow, so the sum is m(14e₀/3) + 7m(m − 1).

Last three increments (work/steps_exact/final3.py, certify.py): - 091: unit 21 is passed with fuel 1 → [x+3, 00, 0], and the carry stops at unit 17. The table above applies. - 092: the LSB stops. - 093: the carry passes the LSB and halts in unit 21. It costs t + x₂₂ + 24 (start-of-093 values; the halting step included).

Result

part steps
step-342 config → config before increment 091 (11,631,266,794,472,450,654,090 increments) 176,522,930,997,643,289,093,929,980,567,625,894,149,417,299 (absolute)
increment 091 45,935,618,253,175,602,322,868
increment 092 22,851,264,287,256,079,080,162
increment 093, to the halt (t = 11,425,632,143,628,039,540,073, x₂₂ = 5,712,816,071,814,019,770,037) 17,138,448,215,442,059,310,134
total N 176,522,930,997,643,289,094,015,905,898,381,767,890,130,463

The run reaches the stored fuel-out configuration (work/fuelout_config.json) exactly, at the same increment. The halt is in increment 11,631,266,794,472,450,654,093, as stage 3 predicted.

Cross-checks (all pass)

Per increment on the orbit. A direct 10¹¹ run logged every A right record (work/steps_exact/arec_1e11.jsonl). All 276,427 / 276,427 increments from step 342 to step 99,999,963,828 have exactly the formula's step count.

Cumulative anchors. The batched count from step 342 equals the TM step at the last increment ≤ 10⁹ / 10¹⁰ / 10¹¹:

anchor TM step
≤ 10⁹ 999,928,220
≤ 10¹⁰ 9,999,862,126
≤ 10¹¹ 99,999,963,828

The 10⁹ value matches work/anchors.json, and the 10¹¹ end matches work/sim_1e11.txt (hi 552,893).

Every structural increment of the run, on the TM (surrogate.py, surrogate_log.txt). There are 53,973 single-stepped increments from step 342 to the fuel-out. - Each was replayed on a reduced copy: gaps > 64 become random 40–79 of the same parity; 1-blocks > 64 become random 40–79 of the same residue mod 3. - All took the same rule path, and 53,973 / 53,973 gave exactly the predicted tokens and step count (44 classes). - Large-size version (bigsur.py, every 200th, sizes up to about 1,560): 270 / 270.

Constructed tapes. - The stack-glue tapes (k = 5, 6) of work/ctests.txt: 160 / 160 increments exact in tokens and steps. - The real fuel-out configuration, reduced 60 times: increments 091 and 092 exact, and 093 halts. - H = t + x₂₂ + 24 was fitted on 30 reductions and holds on the 30 others. - It also holds on 12 minimal tapes with t and x₂₂ up to 4·10⁵.

Batched against plain stepping. Identical step totals and configurations: - 4,027,813 increments from step 342; - 2M increments from each of the reset 40 / 62 / 80 snapshots; - 150k increments from each of the 82 reset snapshots.

Bookkeeping. The run's Σ2t plus stepest's end terms reproduces stage 3's lower bound to the digit: 87,364,406,466,050,439,442,427,007,228,199,699,615,332,500.

Bounds. - N / lower bound = 2.02. - N is below stage 3's estimate of 2.06·10⁴⁴, which charged every stopping digit its full width. A stop never crosses its x. - N plus that overcount (Σ 2(x + b) over stop touches, 2.86·10⁴³) gives 2.05·10⁴⁴ (recon.py), which accounts for the estimate.

What is still not proven

Files (work/steps_exact/)

Halt certification: independent re-check (2026-10-12)

Outcome: the predicted halt is confirmed by a second implementation. It was written from the TM table only; work/rules3.py, fast.py, longrun.py and stepest.py were not read or imported. It halts during increment 11,631,266,794,472,450,654,093 after the step-342 record, the same increment as stage 3. The configuration 3 increments earlier, all 82 resets and the reset increments are identical to work/fuelout_config.json and work/resets_long.jsonl. This is still a simulation with validated rules, not a proof.

Representation

Rule G: one rule for a carry (work/indep/rule_g.py)

Classify the walls:

class walls effect of a passing carry
sep 11 fixed
lead (counter bit) the first wall right of a sep, if 00 or 1111; a 00 right of a long wall (touched at most once per batch) pass 1111→00: left edge +3, right edge +1; stop 00→1111: left edge −1, right edge +1
shift other 1111; 1-walls of length ≥ 7 and ≡ 1 mod 3; a 1111 at gap 1 right of such a wall both edges +2
left the leftmost wall: length ≥ 7, ≡ 0 mod 3, gap 0 to the blank, a long wall at gap 1 to its right length +3
irr everything else (1^5 glue, 1^3, other residues, …) must not be reached

Checks

Logs: work/indep/checks_log.txt, tm_checkpoints_log.txt, tm_resets_compare_log.txt, halt_constructed_log.txt, compare_theirs_log.txt.

check result
L1 vs plain TM from blank (test_l1.py) 3,000 increments to 1.15e7 steps: steps, positions, tapes equal
L1 vs real TM (tools/sim.py, both engines) on constructed tapes (check_g.py) 24,000 tapes, 698 of them halting: record tape and exact step count (or halting step) equal
rule G vs real TM on constructed tapes (check_g.py grammar: fossil zones of every residue, O-units, one-shot leads, inner units, k = 1..4, small gaps) 15,259 / 15,259
rule M vs real TM (check_m.py) 9,000 / 9,000 (rule G agrees on all of them)
long-wall shrinking vs plain L1, walls up to ~2,800 (check_shrink.py) 11,977 equal, 23 refused (refusal stops the run; it never happened in the run)
rule G vs exact L1, every increment (xcheck_g.py) 1.6M increments from 4 starts: 1,597,510 agree, the rest outside the domain
batched closed form vs increment-by-increment stepping 0.8M vs plain L1 (2 starts); 6.5M vs stepping my rules, from reset snapshots 20, 33, 35, 45 and 55 (the last three windows end at the next reset)
engine vs real TM (tools/sim/tmsim) to 1e11 steps full tape equal at 9 records (increments 1,000 to 276,427, the last record before 1e11 steps at step 99,999,963,828); all 20 TM resets (the record moves +3) match my resets one increment later
runtime self-check of the long run the first and last increment of every one of the 81,884 batches recomputed by L1: all equal

The run (work/indep/run_to_halt.py, 43 min)

Comparison with stage 3

item stage 3 this re-check
halting increment after the step-342 record 11,631,266,794,472,450,654,093 11,631,266,794,472,450,654,093
fuel-out configuration (fuelout_config.json, increment …090) full wall list identical
resets (resets_long.jsonl) 82 the same 82 increments and full configurations

Files

work/indep/: tm.py, l1.py, walls.py, units.py, rulem.py, engine.py (rules M and O, L1 wrapper with long-wall shrinking), rule_g.py, engine2.py, run_to_halt.py, the check scripts named above, run_resets.jsonl, halt.json and halt_nospot.json. Regenerate the TM record log with tools/sim/tmsim '<tm>' --max-steps 1e11 --on-record.

Kill (halting) (2026-10-12)

Outcome: KILLED_HALT. Lemma halt: halts tm c0. is proved and passes tools/check_kill.sh --halt. This is the first halting kill of the hunt.

The check

What is and is not proved

Package