/machines/1RB1RC_0LC1RE_1RA0LD_1LB0RD_0RF---_0RA0RF/notes.md · raw

W6-8 1RB1RC_0LC1RE_1RA0LD_1LB0RD_0RF---_0RA0RF: observe notes (2026-10-14)

740 line 9. Sheet class: Unknown, note "Code. Binary counting + bouncing" (nerdyjoe, 2025-12-28; Results tab row 24, an analysis note with no status). No Discord file mentions it. Claimed in coord/claims.tsv as Wave 6 W6-8.

Checks

Tape-level rules

Every rule was validated 300/300 by simulation with random surroundings (work/vmicro.py).

Rule From To Steps
Z (zigzag eats a pair) 1 1 <C <C 0 1 4
O2 (odd block, 0^2 gap on its left: carry passes) 0 0 1 <C <C 0 1 0 3
T (turn) 0 <C 1 A> 1
R1 (decode) A> 1 0 1 1 A> 2
R2 (decode a gap) A> 0 1 0 1^m 0 1 1 0^(m+2) A> m+4
R3 (bounce) 1 A> 0 0 <C 0 1 0 6
R5 (bounce) A> 1 1 <C 0 1 5
halt (a) 1 0 1 <C halt 3
halt (b) A> 0 1 1 halt 3

The left sweep writes the same tokens as kill #8's P = 01 and PZ = 010.

Block-level picture

At each right-edge arrival in state A, the tape is

0^inf 1^b0 0^s0 1^b1 0^s1 ... 0^s(n-1) 1^z A> 0^inf      (s_i in {1,2,3}; z may be 0)

One cycle runs from one such arrival to the next. A carry starts at the last block, whose effective length is z-1. It passes every block that is odd and has 0^2 on its left. It stops at the first block that is even, or odd with 0^3 on its left. An odd block with 0^1 on its left halts the machine.

This is a binary counter. The gaps are the digits: 0^2 = 1 and 0^3 = 0, with the least significant digit at the right. The last block z is fuel: it loses 4 every two cycles.

The rules below reproduce all 75,581 cycles between steps 11,118 and 4·10^9 exactly (work/validate.py). Each one was also checked against the TM on 200 random instances: 17 variants, 3,400/3,400 (work/vrules.py).

In the table, the p_i are the passed interior blocks (odd, with 0^2 on their left).

Rule From To
Todd0 1^x 0^3 1^z A>, z even ≥ 2 1^(x+3) 0^2 1^z A>
Todd 1^x 0^3 1^y (0^2 1^p_i)* 0^2 1^z A>, y odd, z even ≥ 4 1^(x+3) 0^2 1^(y+3) (0^3 1^(p_i-1))* 0^3 1^(z-4) A>
ToddZ2 as Todd with z = 2 as Todd, except the last gap stays 0^2 and the last block is empty: ... 0^3 1^(p_k-1) 0^2 A>
Teven s=1 1^x 0^1 1^e (0^2 1^p_i)* 0^2 1^z A>, e even 1^(x+3) 0^3 1^e (0^3 1^(p_i-1))* 0^3 1^(z-4) A>
Teven s=2,3 1^x 0^s 1^e (...), e even 1^x 0^(s-1) 1^3 0^3 1^e (0^3 1^(p_i-1))* 0^3 1^(z-4) A> (a block 1^3 is born)
Z0b 1^x 0^3 A> (empty last block) 1^(x+3) 0^2 A>
Z0a (refill, w even) 1^y 0^s 1^w 0^2 A>, s in {2,3} 1^y 0^(s-1) 1^6 0^2 1^(w-2) A>
Z0c (refill, w odd) X 1^v 0^3 1^w 0^2 A> v becomes v+3, and a carry enters it (passes give -1, a stop applies the Todd/Teven left part). Then 0^3 1^(w-3) A>

The step count per cycle is 3·(cells from the stopping gap to the edge) + O(number of passes). Summing it reproduces the real step count at 4·10^9 to within 0.01%.

Epochs: Collatz-like refill

Let F be the fuel just after each Z0c refill, and write F = 8a + 6. Then

a(n+1) = ceil(3 a(n) / 2) + 1,  a(0) = 7 at step 17,103

Equivalently, F' = (3F+10)/2 when F ≡ 6 (mod 16), and F' = (3F+18)/2 when F ≡ 14 (mod 16). This holds for all 14 real refills up to 4·10^9 and all 28 refills in the 2·10^7-cycle block run.

F ≡ 6 (mod 8) is invariant. The next bit (the parity of a) chooses between two epoch shapes:

That choice looks pseudo-random.

Does halting depend on the Collatz-like part? Evidence says no

The block map raises Halt / Unknown on any case it does not cover.

Conclusion: the run seems safe for every refill path. What safety needs looks like the gap pattern plus the block lengths mod 8, not the orbit of a. This is a cryptid check that does not fire, but the invariant is not yet found. 3-gap windows (gap, length mod 8, gap) are not closed (work/local.py), so the invariant needs longer context or an automaton.

Local facts seen in every cycle (work/inv.py style tables):

Long-run shape

Template check

The nearest proved neighbour as experience is kill #8 1RB0LF_0RC---_1RD0RA_1LE0RC_0LA0LE_1LE1LB (sync bouncer counter); I read its .v.

Discord

Not needed now. If Dennis wants to check nerdyjoe's interest first, ready to paste:

Hi @nerdyjoe, are you still working on 1RB1RC_0LC1RE_1RA0LD_1LB0RD_0RF---_0RA0RF (your sheet note "Code. Binary counting + bouncing")? We have exact block rules for it (binary counter in the 00/000 gaps, with fuel refilled about x1.5 each epoch) and are looking for an invariant. Happy to leave it to you if you're on it.

Files

Wave 6, stage 1 (2026-10-14)

Goal: a regular invariant over the block rules. Not found yet, but three things changed the picture.

1. The left edge is harmless

The old block map stopped with Unknown when a carry reached block 0. The TM does not halt there. It grows a new top digit:

Rule Block 0 (value y, 0^inf on its left) Result
Lodd y odd 1^3 0^2 1^(y+3) ... (like Todd with an empty block on the left)
Leven y even 1^3 0^3 1^y ... (like Teven with an infinite gap)

Passed blocks and the fuel change as usual.

So the counter extends itself at the top. A single huge epoch is safe (work/bigfuel.py: fuel + 8·10^6 from step 11,118, 2·10^6 cycles, no stop).

The frozen left part also survives carries. work/prefixstress.py keeps the real first 17, 20 or 25 blocks at cycle 3·10^6, joins on the last 3-4 blocks with a huge fuel, and runs 3·10^6 cycles. The old digits get rewritten and nothing halts. (One run with 38 blocks halted at once, but only because the join put an odd block right after a 0^1 gap.)

2. Small refills really halt

work/fuzz4.py replaces 30% of refill fuels by the smallest value in their residue class mod 8:

Refilled fuel Result (200 runs × 2·10^4 cycles)
2, 4 or 6 199 halts (odd block after 0^1)
≥ 8 + r 0 halts

So "fuel mod 8" alone is too coarse. An invariant must also know that the refilled fuel is at least 8. That means size classes for the fuel and the last blocks: exact below a threshold T, residue mod 8 above it.

Real fuels are at least 62, so this costs nothing in the real run.

3. A cleaner picture of the counter

Each block acts as a small transducer. It has a state (gap on its left, parity) and gets two kinds of input from its right neighbour:

State On R
(2, odd) pass: becomes (3, even), sends R left
(3, odd) Todd: becomes (2, even), sends N left
(1, even) Teven1: becomes (3, even), sends N left
(2, even) becomes (3, even) and inserts (1, 3) on its left
(3, even) becomes (3, even) and inserts (2, 3) on its left
(1, odd) halt

The steady life of a block, mod 8, is

(3,6) -N-> (3,1) -R-> (2,4) -N-> (2,7) -R-> (3,6)

That is a binary digit: the left neighbour gets N on 0→1 and R on 1→0.

Phase consistency. Call a pair of neighbours consistent when the left block's expected input matches the right block's next output:

Over 10^6 cycles (work/cons.py), every pair right of the 17-block frozen prefix is consistent in 98% of the samples. The rest have one inconsistent pair, or two next to each other.

These defects are waves. A refill launches one, it inserts a new digit at each level it passes, and it dies when it reaches a block that expects R. The blocks that later become fuel are always born near the right end, at depth 2 at most, one epoch earlier (work/depth.py).

The race is comfortable. Per epoch there are 2 to 11 insertions. The deepest block a carry reaches stays 24 or fewer blocks from the right end, while the tape grows from 10 to 97 blocks over 27 epochs (work/race.py).

Why plain window languages fail

work/winfix2.py and work/winfix4.py compute the least k-window language that contains the step-11,118 word and is closed under the abstract step. Words are read from the fuel end. The last D blocks keep length mod 8 (winfix4: size classes with T = 12 or 16) and deeper blocks keep parity only. winfix4 includes the left-edge rules.

Every run (k = 2-5, D = 2-3) ends with a halting word. work/winfix4o.py traces the first bad window. It comes from a 4-window that puts a (3, even) block receiving R (an inconsistent pair) right next to a fresh (1, 3). The Teven3 insertion then places a (2, odd) block right of a (1, odd) one.

Windows cannot say "pairs are consistent except inside at most one wave". So the invariant needs an automaton that carries that relation.

Next

Build a right-to-left automaton:

Check closure with the product search in winfix4.py, which already has every step case including the left edge.

Wave 6, stage 2 (2026-10-14)

Goal: the invariant. Not found. The mechanism is now much sharper, and the obstacle is now a clear, specific one: a timing question between two travelling defects.

1. Each block is a six-state transducer

The interior rules of work/macro2.py say exactly this. A block's state is its left gap and its parity. It gets N (+3) or R (the carry) from its right neighbour.

State (gap, parity) Expects On N On R
A (3, even) N B stays A, inserts D on its left
B (3, odd) R A C, sends N left (Todd)
C (2, even) N D A, inserts F on its left
D (2, odd) R C A, sends R left (pass)
E (1, even) R F A, sends N left (Teven1)
F (1, odd) N E halt

A new block of length 3 is D when the gap is 2 and F when the gap is 1. A block's next output is N if its gap is 3 or 1, and R if its gap is 2.

A normal block cycles A → B → C → D → A on the inputs N R N R. It sends N on B → C and R on D → A. So it divides its input stream by two, like a binary digit.

2. Phase defects, and the only halting route

Call a pair of neighbours in phase when the left block expects what the right block will send next.

In the body, the machine halts only when R reaches an F.

3. The pairing rule that keeps F safe

In the real run, every gap-1 block has one of only four right neighbours (work/s2_p12.py, 10^5 samples):

Gap-1 block Right neighbour
F (1, odd) A or B (gap 3)
E (1, even) C or D (gap 2)

A gap-3 block only ever sends N. So an F whose right neighbour has gap 3 can never get R.

The pairing breaks only if something is inserted between F and its neighbour. That needs an R to reach the neighbour while it is A. In other words, a later defect must catch the F before F has received its first N.

Refill fuzz (work/s2_p12b.py, 60 runs × 3,000 cycles per row; each refill replaced by 8·m + r):

Refill range Pairing broken Halts
real run never 0
24-56 (+r) never 0
16-48 (+r) (E, F) pairs appear 0
2, 4, 6 (stage 1) (F, C) and (F, D) appear yes: "odd block after 0^1"

So the small-refill halts of stage 1 are exactly this: a second defect catches an F.

4. Larger window languages

work/winfix4.py with k = 7 and k = 10 (D = 2, T = 16, seeded with 2·10^5 real cycles) finds no bad word, but it does not close either. It reached 730,000 windows after 67 rounds (k = 7) and 2.2 million after 22 rounds (k = 10), still growing when stopped (logs in the scratchpad, not kept).

5. What an invariant needs

What keeps an F safe is timing. Its right neighbour must send N before any later defect arrives.

A window language glues a defect from one moment next to an F from another, so it cannot see this. The invariant has to relate each F (or live wave) to the next defect on its right, through the digits between them. Those digits decide which one moves first. This is a comparison of two counter values: regular in principle, but not local.

Cryptid question

The answer is still no, and the reason is now sharper. Safety does not depend on the refill orbit a → ceil(3a/2) + 1, only on refills of at least 24 + r, and every real refill is at least 62. What it needs is the defect-timing property above, which is a property of the counter alone.

Next (if funded)