BB(6) hunt
Machines / #33

1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---

#33local proof 9Kill claimedSkelet 1-like Class 2bbchallenge ↗Explorer

How we proved it never halts

#11's proof in a mirror, from a different start

#11 is a binary counter whose digits burn a unit of fuel each time a carry touches them, and its proof is an invariant showing that a digit only ever runs dry where that is harmless. This machine is #11's table seen in a mirror, with left and right swapped and the state letters renamed, started in the state that is #11's D. So the same kind of counter runs with the head at the left end of the tape and a fixed marker, 1001, at the right.

The invariant talks only about the digits' lengths and values, never about direction, so it and its proof carry over word for word. Only the small tape lemmas that the two moves (add 1, and overflow) are built from had to be mirrored.

What is new is a 215-step opening. At step 82 the counter has no digits; an overflow of that empty counter creates the first one, and at step 215 the tape is a one-digit counter with fuel to spare, a state the invariant covers. From then on #11's argument applies, so this machine never halts.

The Rocq file re-proves #11's tape lemmas in mirror image and keeps #11's moves, invariant and closure proof word for word. It replays the 215 steps, checks the invariant there, and proves the result for this table directly.

#9local proof number
671lines of Rocq
8 sto compile
6/6automatic checks
space-time diagram, first 10,000 steps from blank
The first 10,000 steps from a blank tape. Time runs down; white is 1.
About this picture

The standard picture (bbchallenge.org's Default view): each row is the whole tape at one step, time runs downward, and the head's path draws the pattern.

bbchallenge-defaultStart blankRows steps 0 → 10,000, top to bottomWindow cells −200..199, left to rightColors 1 0 or unvisited

Overview

In one sentence

Kill #11's table mirrored, started in D: same binary counter; a 215-step init lands in #11's proved invariant

Submitted mechanism The head works at the left edge. At each visit the tape is K = 0^inf <C (01)^b 000 (01)^a d~_m .. d~_1 1001 0^inf. Each digit is (10)^v 00 (01)^u (bit 0) or (10)^v (01)^u (bit 1), and d_m, next to the block, is the least significant bit. (submission/README.md, Mechanism)

Upstream
Kill claimed · PR #16merged 2026-10-13 12:26 UTC by ccz181078 · Sk1Class2_v2.v · TM9 · on Submissions →
Rocq proof
check_kill PASS · first Oct 10 10:49
671 lines · 30 KB .v · compile 8.5 s · coqchk pass · 0 axioms · PASS Oct 10 10:49 (re-run Oct 12 18:16)
· the .v file
Automatic review
6 of 6 checks passtemplate: #11's kill file (kill 3) (twin: parent kill's .v) · details in Proof →
Class
Skelet 1-like Class 2ours: sheet Skelet 1-like Class 2 ≠ ours Binary counter with re-pairing overflow: kill #11's table, mirrored and started in #11's D · high confidence
On the list
not on BB6_holdouts_663.txt (line 31 of the previous list) · historical 740 line 31
#33eqv ×1sim 1e15

Mechanism

What to check here: the pictures show the mechanism that the rule table describes.

How it works: 3 notes
  • Same table as our kill #11 1RB0LE_1RC0RC_1LD0RB_1LA0LE_1LD1LF_1LD---: mirror it and rename A,B,C,D -> B,C,D,A (E, F fixed). This machine starts in #11's D.
  • Tape K = 0^inf <C (01)^b 000 (01)^a + digits (10)^v [00] (01)^u + 1001: a binary counter. M_k carries to the last 0-bit (ruler depths); O re-pairs every digit when all bits are 1.
  • From blank, 215 steps reach K((1,1,3); 4, 1), class A of #11's invariant. The real run equals M_k/O exactly for all 18,976 macro steps to 1e9, every K in INV.

Figures for Checkpoint A

Fig 1 · First 10,000 steps (site view)viewer ↗

The site's own picture. The tape grows to the left; the right end barely moves.

First 10,000 steps (site view)
bbchallenge-defaultStart blankRows every step, steps 0..10,000 squeezed into 500 rowsWindow cells -200..199, 1 px = 1 cellColors 1 0 or unvisited head (last move right/left)
Rows: site canvas, bilinear: about 20 steps per row · Window: cell 0 = start cell, at column 200
Fig 2 · One counter cycle from step 10,050Q1

Rows every 20 steps; each phase-shift diagonal is one head sweep. Compare how far right each sweep gets.

One counter cycle from step 10,050
bbchallenge-defaultStart mid-run: step 10,050Rows every 20 stepsWindow cells -66..194, 1 px = 1/2 cellColors 1 0 or unvisited head (last move right/left)
Start: the K-config right after an overflow: 0∞ <C 01 000 (01)16 (10)22 (01)8 (10)15 00 (01)11 (10)3 00 (01)12 10 00 1001 0∞, file img/cycle_from_10050_start.txt · Rows: steps 0..8,100 after the start (406 rows, 2 px each). Carries M1 M0 M2 M0 M1 M0 M3 M0 M1 M0 M2 M0 M1 M0, then the overflow O at steps 6,800..8,009 after the start (run steps 16,850..18,059) · Window: (each cell 2x2 px); cell 0 = the head's start cell (left edge of the tape) · Colors: thick black bars = 00 walls (bit-0 digits)
Fig 3 · Tape at every left-edge visitQ2

Each row is the whole tape at a new left-edge cell. Watch the vertical walls and where they jump.

Tape at every left-edge visit
bbchallenge-defaultStart blankRows left recordsWindow cells -1059..55, 1 px = 1 cellColors 1 0 or unvisited head (last move right/left)
Rows: (each new leftmost cell): 1,060 rows to step 300,000; a visit to the left edge makes 2 records, a counter increment 4
More figures (1)Fig 4: Ten million steps (Blaze)
Fig 4 · Ten million steps (Blaze)

Shape over a long run: left edge on a square-root curve, fixed right end, wall lines between.

Ten million steps (Blaze)
bbchallenge-blazeStart blankRows Blaze time blocks of 16,384 stepsWindow cells -7272..104, 1 px = 8 cellsColors 0 1
Rows: (611 rows, averaged), stretched to 500 px · Window: 922 px stretched to 800 px · Colors: orange: shade = fraction of time the cell held 1; no head
Rules (4/4 validated)exact tape rewrites the proof will formalize, each re-checked by simulation
rulefrom ⟶ tocasesstepschecked
init (blank -> first INV state)
0∞ A> 0∞
⟶ 0∞ <C 01 000 (01)4 (10)3 01 1001 0∞
= K((1,1,3); a=4, b=1), class A. Passes K(; 3, 1) at step 82 (no digits, not in INV). Exact on #33 by direct simulation215✓2/2
M_k carry (k = trailing 1-bits)
0∞ <C (01)b 000 (01)a [(10)v_j (01)u_j]_{j=m..j*+1} (10)v 00 (01)u P 1001 0∞
⟶ 0∞ <C (01)b+2 000 (01)a+1 [(10)v_j-1 00 (01)u_j]_{j=m..j*+1} (10)v-1 (01)u+1 P 1001 0∞
j* = last bit-0 digit, k = m - j*; k = 0..5 tested, 61 of them with v = 1 (the digit drops: same string, re-read). Needs v >= 1, u_j, v_j >= 1 for j > j*, a, b >= 032 + 8a + 8b + 4v + sum_{j>j*} (8u_j + 4v_j)✓240/240
O overflow (all bits 1)
0∞ <C (01)b 000 (01)a [(10)v_j (01)u_j]_{j=m..1} 1001 0∞
⟶ 0∞ <C 01 000 (01)b+3 (10)a (01)v_m [(10)u_j 00 (01)v_(j-1)-1]_{j=m..2} (10)u_1 00 1001 0∞
m = 1..7 tested; needs m >= 1, all u_j, v_j >= 1, a >= 1. New digits (#11 notation): (0,0,u_1), (v_(j-1)-1, 0, u_j), (v_m, 1, a)89 - 4m + 8a + 20b + 4 sum u_j + 8 sum v_j✓120/120
window lemmas (#11's S1-S6, T1-T14, mirrored)
20 windows, e.g. S1m 10 <C, S3m A> 10, T9m E> 1001000, T12m 00011 <D
⟶ S1m <C 01, S3m 01 A>, T9m <C 0001001, T12m 10110 E> (full list in notes.md)
Exact window check on #33's table (head never reads outside the window); F entered only in T4m, T9m, T13m, always reading 0. M and O are #11's chains of these, mirrored2-13 each✓20/20
Compressed historythe tape as 0∞ <C (01)b 000 (01)a [(10)v_j (01)u_j]_{j=m..1} 1001 0∞ (all bits 1: the K just before each overflow) at 36 moments: where the rules are read off
0∞ <C (01)b 000 (01)a [(10)v_j (01)u_j]_{j=m..1} 1001 0∞ (all bits 1: the K just before each overflow)
stepmu_1..u_mv_1..v_mabINV class
21511341A
60415265C
1,18521344105A
2,87011341413C
3,9632151,212185A
6,32021,4152121413C
9,19731,31513,1282213A
16,85023,015883029C
21,42331,911291,2243813A
31,3483311,5316,4243029C
43,225417,73130,122,4164629A
74,6383324,63141,6166261C
93,1314151,92331,432,4487829A
133,584433,463,163212,8486261C
181,685513,151,5633,243,244,8329461A
308,7783809,46383,232126125C
343,5914193,539799,156,11214229A
406,3804819,463,12762,824,1126261C
470,5455173,131,12780,915,611,2329461A
619,974582,946,312,763424,169,632126125C
803,667615,272,311,1638.19·1012190125A
1,301,1125839,463,127,19022,088,064254253C
1,605,35761,323,159,5958.29·1014318125A
2,271,8744178,190,190,255166,432,192254253C
2,437,16751,176,739,2071.77·101428661A
2,726,10051.79·1014146,024,176,224126125C
3,010,15361.15·10121.78·1016190125A
3,647,10261.8·10171.25·1013254253C
4,410,49171.13·10151.79·1019382253A
6,442,49661.81·10171.05·1013510509C
421,432,981101.27·10253.78·10335,1182,045A
592,819,21083.8·10272.48·10224,0944,093C
635,100,56791.25·10233.79·10314,6061,021A
709,411,45293.81·10312.27·10252,0462,045C
782,428,529101.23·10273.8·10353,0702,045A
946,193,350103.82·10352.07·10284,0944,093C
mlast 10
1012159.5e8log xstep 215: m = 1step 604: m = 1step 1185: m = 2step 2870: m = 1step 3963: m = 2step 6320: m = 2step 9197: m = 3step 16850: m = 2step 21423: m = 3step 31348: m = 3step 43225: m = 4step 74638: m = 3step 93131: m = 4step 133584: m = 4step 181685: m = 5step 308778: m = 3step 343591: m = 4step 406380: m = 4step 470545: m = 5step 619974: m = 5step 803667: m = 6step 1301112: m = 5step 1605357: m = 6step 2271874: m = 4step 2437167: m = 5step 2726100: m = 5step 3010153: m = 6step 3647102: m = 6step 4410491: m = 7step 6442496: m = 6step 421432981: m = 10step 592819210: m = 8step 635100567: m = 9step 709411452: m = 9step 782428529: m = 10step 946193350: m = 10
u_1..u_mlast 3.82·1035
3.8e3512159.5e8log-logstep 215: u_1..u_m = 1step 604: u_1..u_m = 5step 1185: u_1..u_m = 13step 2870: u_1..u_m = 13step 3963: u_1..u_m = 15step 6320: u_1..u_m = 1415step 9197: u_1..u_m = 1315step 16850: u_1..u_m = 3015step 21423: u_1..u_m = 1911step 31348: u_1..u_m = 311531step 43225: u_1..u_m = 17731step 74638: u_1..u_m = 324631step 93131: u_1..u_m = 151923step 133584: u_1..u_m = 33463163step 181685: u_1..u_m = 13151563step 308778: u_1..u_m = 809463step 343591: u_1..u_m = 193539step 406380: u_1..u_m = 819463127step 470545: u_1..u_m = 173131127step 619974: u_1..u_m = 82946312763step 803667: u_1..u_m = 15272311163step 1301112: u_1..u_m = 839463127190step 1605357: u_1..u_m = 1323159595step 2271874: u_1..u_m = 178190190255step 2437167: u_1..u_m = 1176739207step 2726100: u_1..u_m = 179190190255255step 3010153: u_1..u_m = 1156331191255step 3647102: u_1..u_m = 180190190255255127step 4410491: u_1..u_m = 1135923175223127step 6442496: u_1..u_m = 181190190255255382step 421432981: u_1..u_m = 12787471596338325515351535step 592819210: u_1..u_m = 3804452558932045307030704095step 635100567: u_1..u_m = 125833914328710876393327step 709411452: u_1..u_m = 38144525589320453070307040954095step 782428529: u_1..u_m = 1237931127255102351130714095step 946193350: u_1..u_m = 382445255893204530703070409540952047
v_1..v_mlast 2.07·1028
3.8e3522159.5e8log-logstep 215: v_1..v_m = 3step 604: v_1..v_m = 2step 1185: v_1..v_m = 44step 2870: v_1..v_m = 4step 3963: v_1..v_m = 1212step 6320: v_1..v_m = 212step 9197: v_1..v_m = 13128step 16850: v_1..v_m = 88step 21423: v_1..v_m = 291224step 31348: v_1..v_m = 6424step 43225: v_1..v_m = 30122416step 74638: v_1..v_m = 41616step 93131: v_1..v_m = 31432448step 133584: v_1..v_m = 212848step 181685: v_1..v_m = 3243244832step 308778: v_1..v_m = 83232step 343591: v_1..v_m = 799156112step 406380: v_1..v_m = 62824112step 470545: v_1..v_m = 80915611232step 619974: v_1..v_m = 424169632step 803667: v_1..v_m = 8191561123264step 1301112: v_1..v_m = 22088064step 1605357: v_1..v_m = 829156112159192step 2271874: v_1..v_m = 166432192step 2437167: v_1..v_m = 177187183240224step 2726100: v_1..v_m = 146024176224step 3010153: v_1..v_m = 17818718324022464step 3647102: v_1..v_m = 12561616019264step 4410491: v_1..v_m = 17918718324022464128step 6442496: v_1..v_m = 10528144160128step 421432981: v_1..v_m = 3784422488784801471896179225593072step 592819210: v_1..v_m = 24803212825610245123072step 635100567: v_1..v_m = 37944224887820143007294338403584step 709411452: v_1..v_m = 22762411222496038428163584step 782428529: v_1..v_m = 380442248878201430072943384035841024step 946193350: v_1..v_m = 20721696192896256256030721024
alast 4,094
5,11842159.5e8log xstep 215: a = 4step 604: a = 6step 1185: a = 10step 2870: a = 14step 3963: a = 18step 6320: a = 14step 9197: a = 22step 16850: a = 30step 21423: a = 38step 31348: a = 30step 43225: a = 46step 74638: a = 62step 93131: a = 78step 133584: a = 62step 181685: a = 94step 308778: a = 126step 343591: a = 142step 406380: a = 62step 470545: a = 94step 619974: a = 126step 803667: a = 190step 1301112: a = 254step 1605357: a = 318step 2271874: a = 254step 2437167: a = 286step 2726100: a = 126step 3010153: a = 190step 3647102: a = 254step 4410491: a = 382step 6442496: a = 510step 421432981: a = 5118step 592819210: a = 4094step 635100567: a = 4606step 709411452: a = 2046step 782428529: a = 3070step 946193350: a = 4094
blast 4,093
4,09312159.5e8log xstep 215: b = 1step 604: b = 5step 1185: b = 5step 2870: b = 13step 3963: b = 5step 6320: b = 13step 9197: b = 13step 16850: b = 29step 21423: b = 13step 31348: b = 29step 43225: b = 29step 74638: b = 61step 93131: b = 29step 133584: b = 61step 181685: b = 61step 308778: b = 125step 343591: b = 29step 406380: b = 61step 470545: b = 61step 619974: b = 125step 803667: b = 125step 1301112: b = 253step 1605357: b = 125step 2271874: b = 253step 2437167: b = 61step 2726100: b = 125step 3010153: b = 125step 3647102: b = 253step 4410491: b = 253step 6442496: b = 509step 421432981: b = 2045step 592819210: b = 4093step 635100567: b = 1021step 709411452: b = 2045step 782428529: b = 2045step 946193350: b = 4093
INV classlast C
not plottable
Template comparisonour: applies · the nearest solved proof, what carries over, and the transitions that differ
01
A1RB0RE
B1LC0RE
C1LD0LD
D1RA0LC
E1RA1RF
F1RA---
file
—
module
our kill #11 (machines/1RB0LE_1RC0RC_1LD0RB_1LA0LE_1LD1LF_1LD---/, check_kill PASS)
machine
1RB0LE_1RC0RC_1LD0RB_1LA0LE_1LD1LF_1LD--- (9 transitions apart)
diff
0 transitions after mirroring + renaming (#11's A,B,C,D,E,F = this machine's B,C,D,A,E,F); only the start state differs (#11's D)
note
Same table, so #11's rules (M, O, the 20 window lemmas) and its Rocq-checked invariant INV = Common and (A or B or C) carry over unchanged. Only the init is new: 215 steps to K((1,1,3);4,1), class A. SBCv6 TM21 / TCv3 (targeting.md) are only loose relatives.
Proof strategy & riskshow the formal proof will go · 3 risks to watch

Reuse kill #11 wholesale: copy its .v and mirror it (states A,B,C,D -> B,C,D,A; tape sides swapped). Replace init (483 steps to K [d1 1 2] 8 5) with 215 steps to K [d1 1 3] 4 1, check INV there by computation, keep the closure proof verbatim. Alternative: keep tm11's lemmas and transport with busycoq's Flip.v + Permute.v.

  • ▲Mirroring 692 lines by hand is error-prone; script it (swap <*/*>, {{X}}>/<{{X}}, rename states) and let Rocq check. Flip/Permute route adds a second TM_from_str (check_kill warns).
  • ▲Duplicate work: hipparcos's Level-1 machine is the B-start of this table (same open question as #11).
  • ▲Proof size is small (init + INV check on top of #11), so the main cost is the mechanical port.
Stats & provenance109 steps simulated · 76,245 cells · the status in full · files
simulated
109 steps
tape
76,245 cells · 38,119 nonzeros
growth
left edge ~2.4 t^0.5 (76,078 cells left of the start by 1e9); right edge +3 cells per overflow (52 overflows by 1e9; rules-only model: 103 by 2.4e13)
status now
check_kill PASS, independently re-verified (status.json, 2026-10-10)
observer's note
Same table as kill #11 (mirror, D-start). M_k/O 360/360 random instances; real run = rules for all 18,976 macro steps to 1e9; INV holds from step 215. Not a cryptid.
files
observe.json · notes.md · proof.md · how_proved.md · status.json · 1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---.v

Proof & checks

6/6 automatic checks pass

Kill 9 · Skelet 1-like Class 2 · the kill file 1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---.v: 671 lines, 102 items · the package submission/

✓ 6/6 automatic checks pass · Checkpoint B: no note from Dennis yet · template (twin: parent kill's .v): #11's kill file (kill 3) · 81% of our lines identical
1What is provedCheck: the string, the theorem and every check_kill line are green, and the .v on disk is the one that was checked (same sha256).
Machine
1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---
vs holdout list
✓ byte-exact: the .v literal (L22) == 2026-10-07_778.txt line 34 (41 bytes, via tools/holdouts.py)
Theorem
✓ Lemma nonhalt: ~halts tm c0. L639
check_kill
✓ PASS · 17/17 checks pass · compile 8.47 s · coqchk pass (1.75 s) · assumptions: 0 (closed) · 2026-10-13 01:16:41 UTC · submission/check_kill.txt
Checked .v
sha256 2dfa4337b76b3b5e…
✓1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---.v2dfa4337b76b3b5e… = checked
✓submission/1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---.v2dfa4337b76b3b5e… = checked
Status
✓Killed: never halts updated 2026-10-10
✓ args✓ input✓ framework✓ framework_build✓ forbidden✓ structure✓ tm_text✓ theorem_text✓ coq✓ names✓ compile✓ tm_rocq✓ theorem_rocq✓ isolation✓ assumptions✓ coqchk✓ integrity
All 17 check_kill checks with their one-line results
✓args6x2 machine, framework module Individual62, mode nonhalt
✓input30232 bytes, 671 lines, 744 sentences
✓frameworkHEAD 0940bb9cf434ba68f0c025dabfde45a219999973 == pin; no tracked changes under verify/
✓framework_build13 needed framework .vo files present and fresh, with native code no older than the .vo
✓forbiddennone of 30 forbidden patterns occur (ground rule 1's words: anywhere; command words: outside comments and strings; comments never split a token)
✓structure6 Require name(s) allowed; no top-level Variable/Context; no shadowing; Module/Section balanced
✓tm_textline 22: TM_from_str "1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---" == <tm> (41 bytes)
✓theorem_textline 639: nonhalt : ~halts tm c0
✓coqcoqc 8.20.1 ([local working file]
✓nameshalts, c0, TM_from_str resolved inside Individual62
✓compilecompiled in 8.5s with all appended checks
✓tm_rocqBB6Kill.Candidate.tm = BusyCoq.Individual62.TM_from_str "1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---" by eq_refl (in-file and isolated)
✓theorem_rocqnonhalt : ~ halts (TM_from_str "1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---") c0 with absolute names (in-file and isolated)
✓isolationonly stock proof plugins loaded; guard/positivity/universe checking on, definitional UIP off
✓assumptions0 assumption(s), all in the baseline
✓coqchkcoqchk -norec BB6Kill.Candidate ok (1.8s); its context summary lists nothing of the file's own
✓integrityinput sha256 and framework HEAD/cleanliness identical before and after
2Where it came fromCheck: the template is the one you expect, and the measured reuse (tiles, the reuse figure, diff) agrees with what the README says was kept and changed (quoted).
twin: parent kill's .v #11's kill file (kill 3) machines/1RB0LE_1RC0RC_1LD0RB_1LA0LE_1LD1LF_1LD---/1RB0LE_1RC0RC_1LD0RB_1LA0LE_1LD1LF_1LD---.v · detected from 1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---.v line 2
81%of our lines identical to the template
36changed lines
74added lines (ours only)
95template lines dropped
52 / 47 / 3items identical / adapted / new
What the package README says it reused and changed (submission/README.md line 19, Template and what changed), quoted:

It extends our kill #11's .v, verify/Skelet1LikeC2_1RB0LE_1RC0RC.v (694 lines), which follows the architecture of SBCv6.v Module TM21 (carries plus a re-pairing overflow). TCv3.v is only a loose relative.

  • Machine part, mirrored by hand. The dictionary is l {{q}}> r -> r <{{pi q}} l, l <* xs -> xs *> l, shift_rule_R <-> _L, with list literals unchanged. #11's rule-spec statements are kept word for word. Beyond the dictionary, the only edits were dl->dr, L0->R0, one unfold R0 and one explicit S6 instance. The rw/ro_out accumulators change side.
  • Abstract part (INV, F1-F3, closure, about 390 lines): #11's text byte for byte, except that step is renamed macro_step so it does not shadow the framework's step.
  • New: init (215 steps to K [d1 1 3] 4 1, against #11's 483 to K [d1 1 2] 8 5) and the base of nonhalt. Everything compiled on the first try.

The file is 671 lines, imports only Individual62 from busycoq, and has one TM_from_str. proof.md is the informal proof; its §6 maps sections to lemma names.

Fig P1 · Reuse of the template, line by line and by name

Top two bars: non-blank lines after the TM string is replaced by <TM> and whitespace is collapsed. Bottom bar: our Definitions/Lemmas/… by name.

ours 574 lines
81% identical · 36 changed · 74 added
template 595 lines
78% kept verbatim · 95 not in ours
our items 102
52 identical · 47 adapted · 3 new · 6 template-only
identicalchanged / adaptedours only (new)template only
Template part: whole file, lines 11–694 (leading comment left out). Ours: lines 15–671 (header comment 1–14 left out). Line diff: Python difflib SequenceMatcher; inside a replaced block, line pairs at least 75% alike count as changed, the rest as removed + added.

Template-only names: lshift, p01, p10, dl, L0, step

Other references found:

  • mechanism reference (not named as a code template) vendor/busycoq/verify/SBCv6.v Module TM21 (named in 1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---.v line 5)
Side-by-side diff: template (595 lines) vs ours (574 lines), 205 lines differ; runs of identical lines and long template-only runs folded
identicalequal once each TM string is <TM>changedours onlytemplate only
templateours
12From BusyCoq Require Import Individual62.16From BusyCoq Require Import Individual62.
13Require Import ZifyNat Lia.17Require Import ZifyNat Lia.
⋯ 6 identical lines (template 14–21, ours 18–25)
22Notation "c -->+ c'" := (c -[ tm ]->+ c') (at level 40).26Notation "c -->+ c'" := (c -[ tm ]->+ c') (at level 40).
24Open Scope list.28Open Scope list.
26(* rotation of a power by one cell *)
30(* ---------- shift lemmas (one block, then shift_rule_L/R) ---------- *)
27Lemma rot01 n (Y : side) : [0;1]^^n *> (0 >> Y) = 0 >> ([1;0]^^n *> Y).
31Lemma S1_1 l r: l <* [0;1] <{{C}} [] *> r -->* l <{{C}} [] *> [0;1] *> r. Proof. es. Qed.
28Proof.
32Lemma S2_1 l r: l <* [1;0] <{{D}} [] *> r -->* l <{{D}} [] *> [1;0] *> r. Proof. es. Qed.
29 induction n; cbn; [reflexivity|].
33Lemma S3_1 l r: l <* [] {{A}}> [1;0] *> r -->* l <* [1;0] <* [] {{A}}> r. Proof. es. Qed.
30 rewrite IHn. reflexivity.
34Lemma S4_1 l r: l <* [] {{E}}> [0;1] *> r -->* l <* [0;1] <* [] {{E}}> r. Proof. es. Qed.
31Qed.
35Lemma S6_1 l r: l <* [1;0] <{{C}} [0] *> r -->* l <{{C}} [0] *> [0;1] *> r. Proof. es. Qed.
33Lemma lshift (xs : list sym) n (l : side) : l <* xs <* xs^^n = l <* xs^^(S n).
36Lemma S5_1 l r: l <* [0;1] <* [1;1] <{{D}} r -->* l <* [1;1] <{{D}} [0;1] *> r. Proof. es. Qed.
34Proof.
38Definition S1 := shift_rule_L _ _ _ _ _ S1_1.
35 cbn. rewrite <-Str_app_assoc, lpow_shift. reflexivity.
39Definition S2 := shift_rule_L _ _ _ _ _ S2_1.
36Qed.
40Definition S3 := shift_rule_R _ _ _ _ _ S3_1.
38(* ---------- one-block lemmas ---------- *)
41Definition S4 := shift_rule_R _ _ _ _ _ S4_1.
39Lemma S1_1 l r: l <* [] {{B}}> [0;1] *> r -->* l <* [0;1] <* [] {{B}}> r. Proof. es. Qed.
42Definition S6 := shift_rule_L _ _ _ _ _ S6_1.
40Lemma S2_1 l r: l <* [] {{C}}> [1;0] *> r -->* l <* [1;0] <* [] {{C}}> r. Proof. es. Qed.
44Lemma S5 n: forall l r, l <* [0;1]^^n <* [1;1] <{{D}} r -->* l <* [1;1] <{{D}} [0;1]^^n *> r.
41Lemma S3_1 l r: l <* [1;0] <{{D}} [] *> r -->* l <{{D}} [] *> [1;0] *> r. Proof. es. Qed.
42Lemma S4_1 l r: l <* [0;1] <{{E}} [] *> r -->* l <{{E}} [] *> [0;1] *> r. Proof. es. Qed.
⋯ 6 template-only lines (template 43–49), not in ours
50Definition S6 := shift_rule_R _ _ _ _ _ S6_1.
52Lemma S5 n: forall l r, l {{C}}> [1;1] *> [0;1]^^n *> r -->* l <* [0;1]^^n {{C}}> [1;1] *> r.
53Proof.45Proof.
54 induction n; intros.46 induction n; intros.
55 - finish.47 - finish.
56 - follow S5_1. follow IHn. rewrite lshift. finish.48 - simpl_tape. follow S5_1. follow IHn. rewrite lpow_shift'. finish.
57Qed.49Qed.
59(* ---------- finite turns ---------- *)51(* ---------- finite turns ---------- *)
60Lemma T1 l: l {{B}}> 0inf -->* l <{{E}} [0;1] *> 0inf. Proof. es. Qed.
52Lemma T1 r: 0inf <{{C}} r -->* 0inf <* [0;1] {{E}}> r. Proof. es. Qed.
61Lemma T2 l r: l <* [0;0;0] <{{E}} r -->* l <* [0;0;1] {{B}}> r. Proof. es. Qed.53Lemma T2 l r: l {{E}}> [0;0;0] *> r -->* l <{{C}} [0;0;1] *> r. Proof. es. Qed.
62Lemma T3 l r: l <* [0;0;1] <{{E}} r -->* l <{{E}} [0;1;1] *> r. Proof. es. Qed.54Lemma T3 l r: l {{E}}> [0;0;1] *> r -->* l <* [0;1;1] {{E}}> r. Proof. es. Qed.
63Lemma T4 l r: l <* [1;0] <{{E}} r -->* l <{{D}} [1;1] *> r. Proof. es. Qed.55Lemma T4 l r: l {{E}}> [1;0] *> r -->* l <* [1;1] {{A}}> r. Proof. es. Qed.
64Lemma T5 l r: l <* [0;1] <{{D}} r -->* l <{{E}} [0;1] *> r. Proof. es. Qed.56Lemma T5 l r: l {{A}}> [0;1] *> r -->* l <* [0;1] {{E}}> r. Proof. es. Qed.
65Lemma T6 l r: l <* [0;0] <{{D}} r -->* l <* [0;1] {{C}}> r. Proof. es. Qed.57Lemma T6 l r: l {{A}}> [0;0] *> r -->* l <{{D}} [0;1] *> r. Proof. es. Qed.
66Lemma T7 l r: l {{C}}> [1;1] *> r -->* l <* [0;0] {{C}}> r. Proof. es. Qed.58Lemma T7 l r: l <* [1;1] <{{D}} r -->* l <{{D}} [0;0] *> r. Proof. es. Qed.
67Lemma T8 l r: l {{C}}> [1;1;0;1;1] *> r -->* l <* [0;0;0;0;1] {{B}}> r. Proof. es. Qed.59Lemma T8 l r: l <* [1;1;0;1;1] <{{D}} r -->* l <{{C}} [0;0;0;0;1] *> r. Proof. es. Qed.
68Lemma T9 r: 0inf <* [1;0;0;1] <{{E}} r -->* 0inf <* [1;0;0;1] <* [0;0;0] {{B}}> r. Proof. es. Qed.
60Lemma T9 l: l {{E}}> [1;0;0;1] *> 0inf -->* l <{{C}} [0;0;0] *> [1;0;0;1] *> 0inf. Proof. es. Qed.
69Lemma T10 l r: l {{B}}> [1;1] *> r -->* l <* [0;0] {{B}}> r. Proof. es. Qed.61Lemma T10 l r: l <* [1;1] <{{C}} r -->* l <{{C}} [0;0] *> r. Proof. es. Qed.
70Lemma T11 l r: l {{B}}> [0] *> r -->* l <* [1] {{C}}> r. Proof. es. Qed.62Lemma T11 l r: l <* [0] <{{C}} r -->* l <{{D}} [1] *> r. Proof. es. Qed.
71Lemma T12 l: l {{C}}> [1;1] *> 0inf -->* l <{{E}} [0;1;1;0;1] *> 0inf. Proof. es. Qed.
63Lemma T12 r: 0inf <* [1;1] <{{D}} r -->* 0inf <* [0;1;1;0;1] {{E}}> r. Proof. es. Qed.
72Lemma T13 l r: l <* [1;0;1] <{{E}} r -->* l <{{E}} [0;1;1] *> r. Proof. es. Qed.64Lemma T13 l r: l {{E}}> [1;0;1] *> r -->* l <* [0;1;1] {{E}}> r. Proof. es. Qed.
73Lemma T14 l r: l {{B}}> [1;1;0;1] *> r -->* l <* [0;1;0;0] {{B}}> r. Proof. es. Qed.65Lemma T14 l r: l <* [1;1;0;1] <{{C}} r -->* l <{{C}} [0;1;0;0] *> r. Proof. es. Qed.
76Lemma p01 n (Y : side) : [0;1]^^n *> 0 >> 1 >> Y = 0 >> 1 >> [0;1]^^n *> Y.
67(* ---------- digit lemmas (write-up section 2.1), mirrored from the parent ---------- *)
77Proof. exact (lpow_shift' _ n [0;1] Y). Qed.
68Lemma rot01 n (Y : side) : [0;1]^^n *> (0 >> Y) = 0 >> ([1;0]^^n *> Y).
78Lemma p10 n (Y : side) : [1;0]^^n *> 1 >> 0 >> Y = 1 >> 0 >> [1;0]^^n *> Y.
69Proof. induction n; cbn; [reflexivity|]. rewrite IHn. reflexivity. Qed.
79Proof. exact (lpow_shift' _ n [1;0] Y). Qed.
81Lemma rot10 n (Y : side) : [1;0]^^n *> (1 >> Y) = 1 >> ([0;1]^^n *> Y).70Lemma rot10 n (Y : side) : [1;0]^^n *> (1 >> Y) = 1 >> ([0;1]^^n *> Y).
82Proof.
71Proof. induction n; cbn; [reflexivity|]. rewrite IHn. reflexivity. Qed.
83 induction n; cbn; [reflexivity|].
84 rewrite IHn. reflexivity.
85Qed.
86Ltac fin := apply evstep_refl'; simpl_tape; repeat (rewrite rot01 || rewrite rot10); try reflexivity.72Ltac fin := apply evstep_refl'; simpl_tape; repeat (rewrite rot01 || rewrite rot10); try reflexivity.
88(* ---------- digit lemmas ---------- *)
89Lemma Lb u v l r:74Lemma Lb u v l r:
90 l <* [0;1]^^(S u) <* [1;0]^^(S v) <{{E}} r -->*
75 l {{E}}> [1;0]^^(S v) *> [0;1]^^(S u) *> r -->*
91 l <{{E}} [0;1]^^(S u) *> [1;0]^^v *> [1;1] *> r.
76 l <* [1;1] <* [1;0]^^v <* [0;1]^^(S u) {{E}}> r.
92Proof.
77Proof. follow T4. follow S3. follow T5. follow S4. fin. Qed.
93 follow T4. follow S3. follow T5. follow S4. fin.
94Qed.
96Lemma Lf u v l r:79Lemma Lf u v l r:
97 l <* [0;1]^^u <* [0;0] <* [1;0]^^(S v) <{{E}} r -->*
80 l {{E}}> [1;0]^^(S v) *> [0;0] *> [0;1]^^u *> r -->*
98 l <* [0;1]^^(S u) <* [1;0]^^v {{C}}> [1;1] *> r.
81 l <* [1;1] <{{D}} [1;0]^^v *> [0;1]^^(S u) *> r.
99Proof.
82Proof. follow T4. follow S3. follow T6. follow S2. fin. Qed.
100 follow T4. follow S3. follow T6. follow S2. fin.
101Qed.
103Lemma Rb u v l r:84Lemma Rb u v l r:
104 l {{C}}> [1;1] *> [0;1]^^u *> [1;0]^^v *> [1;1] *> r -->*
85 l <* [1;1] <* [1;0]^^v <* [0;1]^^u <* [1;1] <{{D}} r -->*
105 l <* [0;1]^^u <* [0;0] <* [1;0]^^v {{C}}> [1;1] *> r.
86 l <* [1;1] <{{D}} [1;0]^^v *> [0;0] *> [0;1]^^u *> r.
106Proof.
87Proof. follow S5. follow T7. follow S2. fin. Qed.
107 follow S5. follow T7. follow S2. fin.
108Qed.
110Lemma Ro u v l r:89Lemma Ro u v l r:
111 l <* [0;0;0] {{B}}> [0;1]^^(S u) *> [1;0]^^v *> [1;1] *> r -->*
90 l <* [1;1] <* [1;0]^^v <* [0;1]^^(S u) <{{C}} [0;0;0] *> r -->*
112 l <* [0;0] <* [1;0]^^(S u) <* [0;1]^^v <* [0;0;0] {{B}}> r.
91 l <{{C}} [0;0;0] *> [0;1]^^v *> [1;0]^^(S u) *> [0;0] *> r.
113Proof.
92Proof. follow S1. follow S6. follow T10. fin. Qed.
114 follow S1.
94(* ---------- the family K and the initial segment (write-up sections 1, 4) ---------- *)
115 follow (S6 (l <* [0;0;0] <* [0;1]^^u <* [1])).
116 follow T10.
⋯ 23 template-only lines (template 117–142), not in ours
143Qed.
145(* ---------- the digit list ---------- *)
146Inductive dg := d0 (u v : nat) | d1 (u v : nat).95Inductive dg := d0 (u v : nat) | d1 (u v : nat).
148(* left-side lists are written nearest-cell first: (10)^u is [0;1]^^u, (01)^v is [1;0]^^v *)
97(* right-side lists are nearest-cell first: d0 u v reads (10)^v 00 (01)^u from the head side *)
149Definition dl (d : dg) (l : side) : side :=98Definition dr (d : dg) (r : side) : side :=
150 match d with99 match d with
151 | d0 u v => l <* [0;1]^^u <* [0;0] <* [1;0]^^v
100 | d0 u v => [1;0]^^v *> [0;0] *> [0;1]^^u *> r
152 | d1 u v => l <* [0;1]^^u <* [1;0]^^v
101 | d1 u v => [1;0]^^v *> [0;1]^^u *> r
153 end.102 end.
155(* digit lists are least significant digit first *)104(* digit lists are least significant digit first, as in the parent *)
156Fixpoint app_ds (l : side) (ds : list dg) : side :=105Fixpoint app_ds (r : side) (ds : list dg) : side :=
157 match ds with106 match ds with
158 | [] => l107 | [] => r
159 | d :: t => dl d (app_ds l t)108 | d :: t => dr d (app_ds r t)
160 end.109 end.
162Definition L0 : side := 0inf <* [1;0;0;1].111Definition R0 : side := [1;0;0;1] *> 0inf.
164Definition K (ds : list dg) (a b : nat) : Q * tape :=113Definition K (ds : list dg) (a b : nat) : Q * tape :=
165 app_ds L0 ds <* [0;1]^^a <* [0;0;0] <* [0;1]^^b {{B}}> 0inf.
114 0inf <{{C}} [0;1]^^b *> [0;0;0] *> [0;1]^^a *> app_ds R0 ds.
116Lemma init: c0 -->* K [d1 1 3] 4 1.
117Proof. unfold K, R0. cbn. solve_init. Qed.
119(* ---------- the parent's orientation-free list definitions, verbatim ---------- *)
167Definition map1 (os : list (nat*nat)) := map (fun '(u,v) => d1 (S u) (S v)) os.120Definition map1 (os : list (nat*nat)) := map (fun '(u,v) => d1 (S u) (S v)) os.
168Definition map0 (os : list (nat*nat)) := map (fun '(u,v) => d0 (S u) v) os.121Definition map0 (os : list (nat*nat)) := map (fun '(u,v) => d0 (S u) v) os.
170Fixpoint rw (os : list (nat*nat)) (r : side) : side :=
123(* ---------- the list sweeps (mirrors of the parent's LbS, RbS, RoS) ---------- *)
124(* left-side accumulator: what Lb leaves behind for each all-ones digit (u+1,1,v+1) *)
125Fixpoint rw (os : list (nat*nat)) (l : side) : side :=
171 match os with126 match os with
172 | [] => r127 | [] => l
173 | (u,v) :: t => rw t ([0;1]^^(S u) *> [1;0]^^v *> [1;1] *> r)
128 | (u,v) :: t => rw t (l <* [1;1] <* [1;0]^^v <* [0;1]^^(S u))
174 end.129 end.
176Lemma app_ds_app l xs ys : app_ds l (xs ++ ys) = app_ds (app_ds l ys) xs.131Lemma app_ds_app r xs ys : app_ds r (xs ++ ys) = app_ds (app_ds r ys) xs.
177Proof. induction xs; cbn; congruence. Qed.132Proof. induction xs; cbn; congruence. Qed.
179Lemma LbS os: forall l r, app_ds l (map1 os) <{{E}} r -->* l <{{E}} rw os r.134Lemma LbS os: forall l r, l {{E}}> app_ds r (map1 os) -->* rw os l {{E}}> r.
180Proof.135Proof.
181 induction os as [|[u v] t IH]; intros.136 induction os as [|[u v] t IH]; intros.
182 - finish.137 - finish.
183 - cbn [map1 map app_ds dl rw]. follow Lb. apply IH.138 - cbn [map1 map app_ds dr rw]. follow Lb. apply IH.
184Qed.139Qed.
186Lemma RbS os: forall l r, l {{C}}> [1;1] *> rw os r -->* app_ds l (map0 os) {{C}}> [1;1] *> r.
141Lemma RbS os: forall l r, rw os l <* [1;1] <{{D}} r -->* l <* [1;1] <{{D}} app_ds r (map0 os).
187Proof.142Proof.
188 induction os as [|[u v] t IH]; intros.143 induction os as [|[u v] t IH]; intros.
189 - finish.144 - finish.
190 - cbn [map0 map app_ds dl rw]. follow IH. apply Rb.145 - cbn [map0 map app_ds dr rw]. follow IH. apply Rb.
191Qed.146Qed.
193Fixpoint ro_out (os : list (nat*nat)) (l : side) : side :=148Fixpoint ro_out (os : list (nat*nat)) (r : side) : side :=
194 match os with149 match os with
195 | [] => l150 | [] => r
196 | (u,v) :: t => ro_out t l <* [0;0] <* [1;0]^^(S u) <* [0;1]^^v
151 | (u,v) :: t => [0;1]^^v *> [1;0]^^(S u) *> [0;0] *> ro_out t r
197 end.152 end.
199Lemma RoS os: forall l r, l <* [0;0;0] {{B}}> rw os r -->* ro_out os l <* [0;0;0] {{B}}> r.
154Lemma RoS os: forall l r, rw os l <{{C}} [0;0;0] *> r -->* l <{{C}} [0;0;0] *> ro_out os r.
200Proof.155Proof.
201 induction os as [|[u v] t IH]; intros.156 induction os as [|[u v] t IH]; intros.
⋯ 11 identical lines (template 202–214, ours 157–169)
215 | (u, v) :: t => d1 (S v) A :: Oz t (S u)170 | (u, v) :: t => d1 (S v) A :: Oz t (S u)
216 end.171 end.
218Lemma Ozeq t: forall u l, ro_out t l <* [0;0] <* [1;0]^^u = app_ds l (Oz t u).
173Lemma Ozeq t: forall u r, [1;0]^^u *> [0;0] *> ro_out t r = app_ds r (Oz t u).
219Proof.174Proof.
220 induction t as [|[a b] t IH]; intros.175 induction t as [|[a b] t IH]; intros.
221 - reflexivity.176 - reflexivity.
222 - cbn [ro_out Oz app_ds dl]. rewrite <- IH. reflexivity.177 - cbn [ro_out Oz app_ds dr]. rewrite <- IH. reflexivity.
223Qed.178Qed.
180(* ---------- edge chunks (mirrors of the parent's chunkA, chunkC, chunkO) ---------- *)
181(* left-edge chunk shared by M and O: <C (01)^b 000 (01)^a -> (10)^(b+2) 110 (10)^a E> *)
182Lemma chunkA a b r:
183 0inf <{{C}} [0;1]^^b *> [0;0;0] *> [0;1]^^a *> r -->+
184 0inf <* [0;1]^^(S (S b)) <* [0;1;1] <* [0;1]^^a {{E}}> r.
185Proof. es. Qed.
187(* end of M: (10)^(b+2) 110 (10)^a 11 <D -> <C (01)^(b+2) 000 (01)^(a+1) *)
188Lemma chunkC a b r:
189 0inf <* [0;1]^^(S (S b)) <* [0;1;1] <* [0;1]^^a <* [1;1] <{{D}} r -->*
190 0inf <{{C}} [0;1]^^(S (S b)) *> [0;0;0] *> [0;1]^^(S a) *> r.
191Proof.
192 follow S5. follow T8. follow S1. fin.
193Qed.
195(* end of O: (10)^(b+2) 110 (10)^(a+1) <C 000 -> <C 01 000 (01)^(b+3) (10)^(a+1) 01 *)
196Lemma chunkO a b r:
197 0inf <* [0;1]^^(S (S b)) <* [0;1;1] <* [0;1]^^(S a) <{{C}} [0;0;0] *> r -->*
198 0inf <{{C}} [0;1] *> [0;0;0] *> [0;1]^^(S (S (S b))) *> [1;0]^^(S a) *> [0;1] *> r.
199Proof.
200 follow S1. follow T11. follow S5. follow T12. follow S4. follow T13. follow S4. follow T2. follow S1. follow S1_1.
201 rewrite (rot01 (S (S b))).
202 follow (S6 (0inf <* [1;1;0;1]) ([1] *> [0;1]^^a *> [0;0;1] *> r) (S (S (S b)))).
203 follow T14. fin.
204Qed.
206(* ---------- the three rules, statements verbatim from the parent ---------- *)
225(* M: carry *)207(* M: carry *)
226Lemma M_spec os u v rest a b:208Lemma M_spec os u v rest a b:
⋯ 4 identical lines (template 227–230, ours 209–212)
231 follow10 chunkA.213 follow10 chunkA.
232 follow LbS.214 follow LbS.
233 cbn [app_ds dl].215 cbn [app_ds dr].
234 follow Lf.216 follow Lf.
235 follow RbS.217 follow RbS.
⋯ 6 identical lines (template 236–242, ours 218–224)
243Proof.225Proof.
244 follow10 (M_spec (os ++ [(u2,v2)]) u 0 rest a b).226 follow10 (M_spec (os ++ [(u2,v2)]) u 0 rest a b).
245 assert (E: app_ds L0 (map0 (os ++ [(u2,v2)]) ++ d1 (S u) 0 :: rest) =227 assert (E: app_ds R0 (map0 (os ++ [(u2,v2)]) ++ d1 (S u) 0 :: rest) =
246 app_ds L0 (map0 os ++ d0 (S u2 + S u) v2 :: rest)).228 app_ds R0 (map0 os ++ d0 (S u2 + S u) v2 :: rest)).
247 { unfold map0. rewrite map_app, <- app_assoc. cbn [map app].229 { unfold map0. rewrite map_app, <- app_assoc. cbn [map app].
248 rewrite !app_ds_app. f_equal. cbn [app_ds dl].230 rewrite !app_ds_app. f_equal. cbn [app_ds dr].
249 rewrite (lpow_add _ (S u2) (S u)), Str_app_assoc. reflexivity. }231 rewrite (lpow_add _ (S u2) (S u)), Str_app_assoc. reflexivity. }
250 unfold K. rewrite E. finish.232 unfold K. rewrite E. finish.
⋯ 7 identical lines (template 251–258, ours 233–240)
259 follow10 chunkA.241 follow10 chunkA.
260 follow LbS.242 follow LbS.
261 follow T9.
243 unfold R0. follow T9.
262 follow RoS.244 follow RoS.
263 follow chunkO.245 follow chunkO.
264 apply evstep_refl'. cbn [Oout app_ds dl ro_out]. rewrite <- Ozeq. reflexivity.246 apply evstep_refl'. cbn [Oout app_ds dr ro_out]. rewrite <- Ozeq. reflexivity.
265Qed.247Qed.
267Lemma init: c0 -->* K [d1 1 2] 8 5.
268Proof. unfold K, L0. cbn. solve_init. Qed.
270(* ================= abstract invariant (write-up section 3) ================= *)249(* ================= abstract invariant (write-up section 3) ================= *)
271Open Scope nat_scope.250Open Scope nat_scope.
⋯ 235 identical lines (template 273–545, ours 252–524)
547Ltac pw := repeat (rewrite pow2S in *).526Ltac pw := repeat (rewrite pow2S in *).
549(* ---------- closure: every INV state takes a macro step into INV ---------- *)528(* ---------- closure: every INV state takes a macro step into INV ---------- *)
550Lemma step s : INV s -> exists s', Kc s -->+ Kc s' /\ INV s'.529Lemma macro_step s : INV s -> exists s', Kc s -->+ Kc s' /\ INV s'.
551Proof.530Proof.
552 destruct s as [[ds a] b]. unfold INV.531 destruct s as [[ds a] b]. unfold INV.
⋯ 107 identical lines (template 553–662, ours 532–639)
663Proof.640Proof.
664 eapply multistep_nonhalt; [apply init|].641 eapply multistep_nonhalt; [apply init|].
665 change (K [d1 1 2] 8 5) with (Kc ([d1 1 2], 8, 5)).642 change (K [d1 1 3] 4 1) with (Kc ([d1 1 3], 4, 1)).
666 apply progress_nonhalt_cond with (P := INV).643 apply progress_nonhalt_cond with (P := INV).
667 - exact step.644 - exact macro_step.
668 - unfold INV. cbn. repeat split; try lia; try discriminate.645 - unfold INV. cbn. repeat split; try lia; try discriminate.
669 left. unfold PA, canon, Rd, ub, vof. cbn. repeat split; lia.646 left. unfold PA, canon, Rd, ub, vof. cbn. repeat split; lia.
⋯ 2 identical lines (template 670–673, ours 647–650)
674```651```
6751RB0LE_1RC0RC_1LD0RB_1LA0LE_1LD1LF_1LD---6521RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---
677K(d_1 .. d_m; a, b) := 0^inf 10 01 d_1 .. d_m (10)^a 000 (10)^b B> 0^inf
654K(d_1 .. d_m; a, b) := 0^inf <C (01)^b 000 (01)^a d~_m .. d~_1 1001 0^inf
678digit (u,0,v) := (10)^u 00 (01)^v, (u,1,v) := (10)^u (01)^v (d_m least significant)655digit (u,0,v) := (10)^v 00 (01)^u, (u,1,v) := (10)^v (01)^u (d_m least significant)
679start: 0^inf A> 0^inf -->* K((1,1,2); 8, 5) (step 483)656start: 0^inf A> 0^inf -->* K((1,1,3); 4, 1) (step 215)
681M (j* = last bit-0 digit):658M (j* = last bit-0 digit):
682 K(.., (u,0,v), (u_j,1,v_j)_{j>j*}; a, b) -->+ K(.., (u+1,1,v-1), (u_j,0,v_j-1)_{j>j*}; a+1, b+2)659 K(.., (u,0,v), (u_j,1,v_j)_{j>j*}; a, b) -->+ K(.., (u+1,1,v-1), (u_j,0,v_j-1)_{j>j*}; a+1, b+2)
⋯ 9 identical lines (template 683–692, ours 660–669)
693```670```
694*)671*)
3Proof outlineCheck: the new items (green) carry the argument; the names read like the proof.md rules.

102 items in 1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---.v (671 lines): 72 Lemma, 23 Definition, 6 Fixpoint, 1 Inductive. Tags against the template: identical = same name and same text once each file's own TM string is <TM> (marked "except the TM string" when that is the only difference); adapted = same name, different text; new = no item of that name in the template part.

#kindnamestatement (no proof body)linevs template
1Definitiontm
Definition tm := Eval compute in (TM_from_str "1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---").
L22identicalexcept the TM string
2LemmaS1_1
Lemma S1_1 l r: l <* [0;1] <{{C}} [] *> r -->* l <{{C}} [] *> [0;1] *> r.
L31adapted
3LemmaS2_1
Lemma S2_1 l r: l <* [1;0] <{{D}} [] *> r -->* l <{{D}} [] *> [1;0] *> r.
L32adapted
4LemmaS3_1
Lemma S3_1 l r: l <* [] {{A}}> [1;0] *> r -->* l <* [1;0] <* [] {{A}}> r.
L33adapted
5LemmaS4_1
Lemma S4_1 l r: l <* [] {{E}}> [0;1] *> r -->* l <* [0;1] <* [] {{E}}> r.
L34adapted
6LemmaS6_1
Lemma S6_1 l r: l <* [1;0] <{{C}} [0] *> r -->* l <{{C}} [0] *> [0;1] *> r.
L35adapted
7LemmaS5_1
Lemma S5_1 l r: l <* [0;1] <* [1;1] <{{D}} r -->* l <* [1;1] <{{D}} [0;1] *> r.
L36adapted
8DefinitionS1
Definition S1 := shift_rule_L _ _ _ _ _ S1_1.
L38adapted
9DefinitionS2
Definition S2 := shift_rule_L _ _ _ _ _ S2_1.
L39adapted
10DefinitionS3
Definition S3 := shift_rule_R _ _ _ _ _ S3_1.
L40adapted
11DefinitionS4
Definition S4 := shift_rule_R _ _ _ _ _ S4_1.
L41adapted
12DefinitionS6
Definition S6 := shift_rule_L _ _ _ _ _ S6_1.
L42adapted
13LemmaS5
Lemma S5 n: forall l r, l <* [0;1]^^n <* [1;1] <{{D}} r -->* l <* [1;1] <{{D}} [0;1]^^n *> r.
L44adapted
14LemmaT1
Lemma T1 r: 0inf <{{C}} r -->* 0inf <* [0;1] {{E}}> r.
L52adapted
15LemmaT2
Lemma T2 l r: l {{E}}> [0;0;0] *> r -->* l <{{C}} [0;0;1] *> r.
L53adapted
16LemmaT3
Lemma T3 l r: l {{E}}> [0;0;1] *> r -->* l <* [0;1;1] {{E}}> r.
L54adapted
17LemmaT4
Lemma T4 l r: l {{E}}> [1;0] *> r -->* l <* [1;1] {{A}}> r.
L55adapted
18LemmaT5
Lemma T5 l r: l {{A}}> [0;1] *> r -->* l <* [0;1] {{E}}> r.
L56adapted
19LemmaT6
Lemma T6 l r: l {{A}}> [0;0] *> r -->* l <{{D}} [0;1] *> r.
L57adapted
20LemmaT7
Lemma T7 l r: l <* [1;1] <{{D}} r -->* l <{{D}} [0;0] *> r.
L58adapted
21LemmaT8
Lemma T8 l r: l <* [1;1;0;1;1] <{{D}} r -->* l <{{C}} [0;0;0;0;1] *> r.
L59adapted
22LemmaT9
Lemma T9 l: l {{E}}> [1;0;0;1] *> 0inf -->* l <{{C}} [0;0;0] *> [1;0;0;1] *> 0inf.
L60adapted
23LemmaT10
Lemma T10 l r: l <* [1;1] <{{C}} r -->* l <{{C}} [0;0] *> r.
L61adapted
24LemmaT11
Lemma T11 l r: l <* [0] <{{C}} r -->* l <{{D}} [1] *> r.
L62adapted
25LemmaT12
Lemma T12 r: 0inf <* [1;1] <{{D}} r -->* 0inf <* [0;1;1;0;1] {{E}}> r.
L63adapted
26LemmaT13
Lemma T13 l r: l {{E}}> [1;0;1] *> r -->* l <* [0;1;1] {{E}}> r.
L64adapted
27LemmaT14
Lemma T14 l r: l <* [1;1;0;1] <{{C}} r -->* l <{{C}} [0;1;0;0] *> r.
L65adapted
28Lemmarot01
Lemma rot01 n (Y : side) : [0;1]^^n *> (0 >> Y) = 0 >> ([1;0]^^n *> Y).
L68identical
29Lemmarot10
Lemma rot10 n (Y : side) : [1;0]^^n *> (1 >> Y) = 1 >> ([0;1]^^n *> Y).
L70identical
30LemmaLb
Lemma Lb u v l r:
l {{E}}> [1;0]^^(S v) *> [0;1]^^(S u) *> r -->*
l <* [1;1] <* [1;0]^^v <* [0;1]^^(S u) {{E}}> r.
L74adapted
31LemmaLf
Lemma Lf u v l r:
l {{E}}> [1;0]^^(S v) *> [0;0] *> [0;1]^^u *> r -->*
l <* [1;1] <{{D}} [1;0]^^v *> [0;1]^^(S u) *> r.
L79adapted
32LemmaRb
Lemma Rb u v l r:
l <* [1;1] <* [1;0]^^v <* [0;1]^^u <* [1;1] <{{D}} r -->*
l <* [1;1] <{{D}} [1;0]^^v *> [0;0] *> [0;1]^^u *> r.
L84adapted
33LemmaRo
Lemma Ro u v l r:
l <* [1;1] <* [1;0]^^v <* [0;1]^^(S u) <{{C}} [0;0;0] *> r -->*
l <{{C}} [0;0;0] *> [0;1]^^v *> [1;0]^^(S u) *> [0;0] *> r.
L89adapted
34Inductivedg
Inductive dg := d0 (u v : nat) | d1 (u v : nat).
L95identical
35Definitiondr
Definition dr (d : dg) (r : side) : side :=
match d with
| d0 u v => [1;0]^^v *> [0;0] *> [0;1]^^u *> r
| d1 u v => [1;0]^^v *> [0;1]^^u *> r
end.
L98new
36Fixpointapp_ds
Fixpoint app_ds (r : side) (ds : list dg) : side :=
match ds with
| [] => r
| d :: t => dr d (app_ds r t)
end.
L105adapted
37DefinitionR0
Definition R0 : side := [1;0;0;1] *> 0inf.
L111new
38DefinitionK
Definition K (ds : list dg) (a b : nat) : Q * tape :=
0inf <{{C}} [0;1]^^b *> [0;0;0] *> [0;1]^^a *> app_ds R0 ds.
L113adapted
39Lemmainit
Lemma init: c0 -->* K [d1 1 3] 4 1.
L116adapted
40Definitionmap1
Definition map1 (os : list (nat*nat)) := map (fun '(u,v) => d1 (S u) (S v)) os.
L120identical
41Definitionmap0
Definition map0 (os : list (nat*nat)) := map (fun '(u,v) => d0 (S u) v) os.
L121identical
42Fixpointrw
Fixpoint rw (os : list (nat*nat)) (l : side) : side :=
match os with
| [] => l
| (u,v) :: t => rw t (l <* [1;1] <* [1;0]^^v <* [0;1]^^(S u))
end.
L125adapted
43Lemmaapp_ds_app
Lemma app_ds_app r xs ys : app_ds r (xs ++ ys) = app_ds (app_ds r ys) xs.
L131adapted
44LemmaLbS
Lemma LbS os: forall l r, l {{E}}> app_ds r (map1 os) -->* rw os l {{E}}> r.
L134adapted
45LemmaRbS
Lemma RbS os: forall l r, rw os l <* [1;1] <{{D}} r -->* l <* [1;1] <{{D}} app_ds r (map0 os).
L141adapted
46Fixpointro_out
Fixpoint ro_out (os : list (nat*nat)) (r : side) : side :=
match os with
| [] => r
| (u,v) :: t => [0;1]^^v *> [1;0]^^(S u) *> [0;0] *> ro_out t r
end.
L148adapted
47LemmaRoS
Lemma RoS os: forall l r, rw os l <{{C}} [0;0;0] *> r -->* l <{{C}} [0;0;0] *> ro_out os r.
L154adapted
48FixpointOz
Fixpoint Oz (t : list (nat*nat)) (u : nat) : list dg :=
match t with
| [] => [d0 0 u]
| (a, b) :: t' => d0 b u :: Oz t' (S a)
end.
L161identical
49DefinitionOout
Definition Oout (os : list (nat*nat)) (A : nat) : list dg :=
match os with
| [] => []
| (u, v) :: t => d1 (S v) A :: Oz t (S u)
end.
L167identical
50LemmaOzeq
Lemma Ozeq t: forall u r, [1;0]^^u *> [0;0] *> ro_out t r = app_ds r (Oz t u).
L173adapted
51LemmachunkA
Lemma chunkA a b r:
0inf <{{C}} [0;1]^^b *> [0;0;0] *> [0;1]^^a *> r -->+
0inf <* [0;1]^^(S (S b)) <* [0;1;1] <* [0;1]^^a {{E}}> r.
L182adapted
52LemmachunkC
Lemma chunkC a b r:
0inf <* [0;1]^^(S (S b)) <* [0;1;1] <* [0;1]^^a <* [1;1] <{{D}} r -->*
0inf <{{C}} [0;1]^^(S (S b)) *> [0;0;0] *> [0;1]^^(S a) *> r.
L188adapted
53LemmachunkO
Lemma chunkO a b r:
0inf <* [0;1]^^(S (S b)) <* [0;1;1] <* [0;1]^^(S a) <{{C}} [0;0;0] *> r -->*
0inf <{{C}} [0;1] *> [0;0;0] *> [0;1]^^(S (S (S b))) *> [1;0]^^(S a) *> [0;1] *> r.
L196adapted
54LemmaM_spec
Lemma M_spec os u v rest a b:
K (map1 os ++ d0 u (S v) :: rest) a b -->+
K (map0 os ++ d1 (S u) v :: rest) (S a) (S (S b)).
L208adapted
55LemmaMdrop_spec
Lemma Mdrop_spec os u2 v2 u rest a b:
K (map1 (os ++ [(u2,v2)]) ++ d0 u 1 :: rest) a b -->+
K (map0 os ++ d0 (S u2 + S u) v2 :: rest) (S a) (S (S b)).
L222adapted
56LemmaO_spec
Lemma O_spec os a b: os <> [] ->
K (map1 os) (S a) b -->+ K (Oout os (S a)) (S (S (S b))) 1.
L236adapted
57Definitionbof
Definition bof d := match d with d0 _ _ => 0 | d1 _ _ => 1 end.
L252identical
58Definitionvof
Definition vof d := match d with d0 _ v => v | d1 _ v => v end.
L253identical
59FixpointRof
Fixpoint Rof (ds : list dg) : nat :=
match ds with
| [] => 0
| d0 _ _ :: t => 2 * Rof t + 1
| d1 _ _ :: t => 2 * Rof t
end.
L256identical
60DefinitionRd
Definition Rd d r := match d with d0 _ _ => 2*r+1 | d1 _ _ => 2*r end.
L264identical
61Definitionub
Definition ub d r := match d with d0 u _ => u + r + 1 | d1 u _ => u + r end.
L265identical
62FixpointAllD
Fixpoint AllD (P : dg -> nat -> nat -> Prop) (ds : list dg) : Prop :=
match ds with
| [] => True
| d :: t => AllD P t /\ P d (Rof t) (length t)
end.
L267identical
63Definitioncanon
Definition canon d := match d with d0 _ v => v >= 1 | d1 u v => u >= 1 /\ v >= 1 end.
L273identical
64DefinitionPA
Definition PA d r p :=
canon d /\ vof d >= Rd d r + 1 /\ ub d r mod 2 = 1 /\ (p = 0 -> ub d r = 1).
L275identical
65DefinitionPB
Definition PB k d r p :=
canon d /\ (vof d + bof d) mod 2 = 1 /\ ub d r >= 2^(p+k) /\ (k = 0 -> p = 0 -> d = d0 0 1).
L277identical
66DefinitionLSBok
Definition LSBok ds := match ds with [] => False | d :: _ => vof d >= Rof ds + 1 end.
L280identical
67DefinitionINV
Definition INV (s : list dg * nat * nat) : Prop :=
let '(ds, a, b) := s in
ds <> [] /\ a >= 1 /\ b mod 2 = 1 /\ (a + Rof ds) mod 2 = 0 /\
a + Rof ds + 2 >= 2^(S (length ds)) /\ b + 3 + 2 * Rof ds >= 2^(S (length ds)) /\ LSBok ds /\
( (AllD PA ds /\ a + Rof ds + 1 >= 2^(S (length ds)))
\/ AllD (PB 0) ds
… +1 lines
L282identical
68DefinitionKc
Definition Kc (s : list dg * nat * nat) : Q * tape := let '(ds, a, b) := s in K ds a b.
L290identical
69Lemmapow2S
Lemma pow2S n : 2^(S n) = 2 * 2^n.
L293identical
70Lemmapow2pos
Lemma pow2pos n : 2^n >= 1.
L295identical
71LemmaRof_bound
Lemma Rof_bound ds : Rof ds + 1 <= 2^(length ds).
L298identical
72LemmaRof_map1
Lemma Rof_map1 os X : Rof (map1 os ++ X) = 2^(length os) * Rof X.
L303identical
73LemmaRof_map1'
Lemma Rof_map1' os : Rof (map1 os) = 0.
L310identical
74Lemmalen_map1
Lemma len_map1 os : length (map1 os) = length os.
L313identical
75Lemmalen_map0
Lemma len_map0 os : length (map0 os) = length os.
L315identical
76LemmaAllD_app
Lemma AllD_app P xs ys : AllD P (xs ++ ys) -> AllD P ys.
L318identical
77LemmaAllD_last
Lemma AllD_last P xs d : AllD P (xs ++ [d]) -> P d 0 0.
L321identical
78LemmaAllD_canon
Lemma AllD_canon (P : dg -> nat -> nat -> Prop) ds :
(forall d r p, P d r p -> canon d) -> AllD P ds -> Forall canon ds.
L324identical
79Lemmadecomp
Lemma decomp ds : Forall canon ds ->
(exists os, ds = map1 os) \/ (exists os u v rest, ds = map1 os ++ d0 u (S v) :: rest).
L330identical
80LemmaF1
Lemma F1 (P : dg -> nat -> nat -> Prop) os u v rest:
(forall u v r p, P (d0 u (S (S v))) r p -> P (d1 (S u) (S v)) r p) ->
(forall u v r p, P (d1 (S u) (S v)) (S r) p -> P (d0 (S u) v) r p) ->
AllD P (map1 os ++ d0 u (S (S v)) :: rest) ->
AllD P (map0 os ++ d1 (S u) (S v) :: rest) /\
Rof (map1 os ++ d0 u (S (S v)) :: rest) = S (Rof (map0 os ++ d1 (S u) (S v) :: rest)) /\
… +1 lines
L344identical
81LemmaPA_touch0
Lemma PA_touch0 u v r p : PA (d0 u (S (S v))) r p -> PA (d1 (S u) (S v)) r p.
L360identical
82LemmaPA_touch1
Lemma PA_touch1 u v r p : PA (d1 (S u) (S v)) (S r) p -> PA (d0 (S u) v) r p.
L364identical
83LemmaPB_touch0
Lemma PB_touch0 k u v r p : PB k (d0 u (S (S v))) r p -> PB k (d1 (S u) (S v)) r p.
L368identical
84LemmaPB_touch1
Lemma PB_touch1 k u v r p : PB k (d1 (S u) (S v)) (S r) p -> PB k (d0 (S u) v) r p.
L372identical
85DefinitionRel
Definition Rel r ro rn := rn + 1 <= ro /\ ro <= 2 * (rn + 1) /\ (r = 0 -> ro = rn + 1).
L377identical
86LemmaPB_chain
Lemma PB_chain k k' r u v ro rn p :
(k' = k \/ (k = 0 /\ k' = 1 /\ r = 0)) -> Rel r ro rn -> p >= 1 ->
PB k (d1 (S u) (S v)) ro (S p) -> PB k' (d0 (S u) v) rn p.
L379identical
87LemmaPB_abs
Lemma PB_abs k k' r p u2 v2 u :
((k' = k /\ (k = 0 -> p >= 1)) \/ (k = 0 /\ k' = 1 /\ p = 0 /\ r = 0)) ->
PB k (d0 u 1) r p -> PB k (d1 (S u2) (S v2)) (2*r+1) (S p) -> PB k' (d0 (S u2 + S u) v2) r p.
L391identical
88LemmaF2chain
Lemma F2chain k k' r os X X' :
(k' = k \/ (k = 0 /\ k' = 1 /\ r = 0)) -> X' <> [] ->
AllD (PB k) (map1 os ++ X) -> AllD (PB k') X' -> Rel r (Rof X) (Rof X') -> length X = S (length X') ->
AllD (PB k') (map0 os ++ X') /\ Rel r (Rof (map1 os ++ X)) (Rof (map0 os ++ X')) /\
length (map1 os ++ X) = S (length (map0 os ++ X')).
L401identical
89LemmaF2
Lemma F2 k k' os u2 v2 u rest:
((k' = k /\ (k = 0 -> rest <> [])) \/ (k = 0 /\ k' = 1 /\ rest = [])) ->
AllD (PB k) (map1 (os ++ [(u2,v2)]) ++ d0 u 1 :: rest) ->
AllD (PB k') (map0 os ++ d0 (S u2 + S u) v2 :: rest) /\
Rel (Rof rest) (Rof (map1 (os ++ [(u2,v2)]) ++ d0 u 1 :: rest))
    (Rof (map0 os ++ d0 (S u2 + S u) v2 :: rest)) /\
… +1 lines
L421identical
90LemmaOz_len
Lemma Oz_len t u : length (Oz t u) = S (length t).
L450identical
91LemmaOz_R
Lemma Oz_R t u : Rof (Oz t u) + 1 = 2^(S (length t)).
L453identical
92LemmaOz_AB
Lemma Oz_AB t : forall u, AllD PA (map1 t) -> u mod 2 = 1 -> (t = [] -> u = 1) -> AllD (PB 0) (Oz t u).
L460identical
93LemmaOz_CA
Lemma Oz_CA t : forall u, AllD (PB 1) (map1 t) -> u >= 2^(S (length t)) -> AllD PA (Oz t u).
L474identical
94LemmaRof_M
Lemma Rof_M os u v rest :
Rof (map1 os ++ d0 u (S v) :: rest) = S (Rof (map0 os ++ d1 (S u) v :: rest)).
L489identical
95Lemmalen_M
Lemma len_M os u v w x rest :
length (map0 os ++ d1 w x :: rest) = length (map1 os ++ d0 u v :: rest).
L495identical
96LemmaLSB_M
Lemma LSB_M os u v rest :
LSBok (map1 os ++ d0 u (S (S v)) :: rest) -> LSBok (map0 os ++ d1 (S u) (S v) :: rest).
L499identical
97LemmaRof_head1
Lemma Rof_head1 os X : os <> [] -> Rof (map1 os ++ X) mod 2 = 0.
L506identical
98LemmaRof_head0
Lemma Rof_head0 os x y rest : Rof (map0 os ++ d0 x y :: rest) mod 2 = 1.
L511identical
99LemmaLSB_drop
Lemma LSB_drop os u2 v2 u rest r :
LSBok (map1 (os ++ [(u2,v2)]) ++ d0 u 1 :: rest) ->
Rel r (Rof (map1 (os ++ [(u2,v2)]) ++ d0 u 1 :: rest)) (Rof (map0 os ++ d0 (S u2 + S u) v2 :: rest)) ->
LSBok (map0 os ++ d0 (S u2 + S u) v2 :: rest).
L514identical
100Lemmaapp_cons_ne
Lemma app_cons_ne {A} (xs : list A) y ys : xs ++ y :: ys <> [].
L523identical
101Lemmamacro_step
Lemma macro_step s : INV s -> exists s', Kc s -->+ Kc s' /\ INV s'.
L529new
102Lemmanonhalt
Lemma nonhalt: ~halts tm c0.
L639adapted
4What a maintainer readsCheck: the rule table below is what the .v proves, and proof.md / README read cleanly for a maintainer.
submission/proof.md line 169: 2. Rules

In busycoq comment-block style:

1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---

K(d_1 .. d_m; a, b) := 0^inf <C (01)^b 000 (01)^a d~_m .. d~_1 1001 0^inf
d~(u,0,v) := (10)^v 00 (01)^u,   d~(u,1,v) := (10)^v (01)^u        (d_m least significant)

start from K((1,1,3); 4, 1)                                   (step 215, §4)

M  (carry; some bit is 0; j* = index of the LAST bit-0 digit, k = m - j*):
   K(.., (u,0,v), (u_j,1,v_j)_{j*<j<=m}; a, b)
     --> K(.., (u+1,1,v-1), (u_j,0,v_j-1)_{j*<j<=m}; a+1, b+2)
   steps 32 + 8a + 8b + 4v + sum_{j>j*} (8 u_j + 4 v_j)
   needs v >= 1 (u >= 0), u_j >= 1 and v_j >= 1 for j > j*, a >= 0, b >= 0
   if v = 1, the digit (u+1,1,0) drops (re-reading, §1)
O  (overflow; all bits 1):
   K((u_1,1,v_1) .. (u_m,1,v_m); a, b)
     --> K((0,0,u_1), (v_1-1,0,u_2), .., (v_{m-1}-1,0,u_m), (v_m,1,a); b+3, 1)
   steps 89 - 4m + 8a + 20b + 4 sum u_j + 8 sum v_j
   needs m >= 1, all u_j, v_j >= 1, a >= 1, b >= 0

On the tape:

M:  0^inf <C (01)^b 000 (01)^a [(10)^v_j (01)^u_j]_{j=m..j*+1} (10)^v 00 (01)^u X
      --> 0^inf <C (01)^(b+2) 000 (01)^(a+1) [(10)^(v_j-1) 00 (01)^u_j]_{j=m..j*+1} (10)^(v-1) (01)^(u+1) X
O:  0^inf <C (01)^b 000 (01)^a [(10)^v_j (01)^u_j]_{j=m..1} 1001 0^inf
      --> 0^inf <C 01 000 (01)^(b+3) (10)^a (01)^v_m [(10)^u_j 00 (01)^(v_(j-1)-1)]_{j=m..2} (10)^u_1 00 1001 0^inf

Here X is everything right of d_{j*}, and M never reads it.

The M and O rules are not taken from simulation. §2.1 lists 20 window lemmas, and §2.2–2.3 derive M and O from them as chains of intermediate configurations. Each step count is the sum along its chain.

The same O chain with no digits (m = 0) gives

K(; a, b) --> K((1,1,a); b+3, 1)        in 89 + 8a + 20b steps   (a ≥ 1)

It occurs once, inside the initial segment (§4), and the invariant argument does not use it.

2.1 Building blocks

A window lemma w → w' says: started on the cells of w, the machine runs the stated number of steps without reading a cell outside w, and leaves w'. The last step may move the head onto a neighbouring cell. Such a lemma holds in every tape context.

  • T1–T14 are exact finite runs on this table.
  • For S1–S6, one block is a finite run, and induction on n gives every n.

For example, S5 is (one block, then the IH):

(10)^(n+1) 11 <D  =  (10)^n 1011 <D  →  (10)^n 11 <D 01  →  11 <D (01)^n 01

Each lemma is the reflection of the parent's lemma of the same name, so the names match the parent's .v (§6.1).

Shift lemmas

lemma steps one block transitions
S1 (10)^n <C → <C (01)^n 2n 10<C → <C01 C0 D1
S2 (01)^n <D → <D (10)^n 2n 01<D → <D10 D1 C0
S3 A> (10)^n → (01)^n A> 2n A>10 → 01A> A1 E0
S4 E> (01)^n → (10)^n E> 2n E>01 → 10E> E0 A1
S5 (10)^n 11 <D → 11 <D (01)^n 6n 1011<D → 11<D01 D1 C1 D0 A0 B0 C1
S6 (01)^n <C 0 → <C 0 (01)^n 6n 01<C0 → <C001 C1 D0 A0 B0 C1 D1

S5 and S6 are the back-bounces. Each block costs 6 steps for a 2-cell advance, because the head doubles back over cells it has just written (S5 moves L L R R L L, S6 moves L R R L L L).

Finite lemmas

lemma steps transitions where
T1 00 <C → 10 E> 3 C0 D0 A1 left-edge turn (on 0^inf)
T2 E> 000 → <C 001 5 E0 A0 B0 C1 D1 turn inside a 000 gap
T3 E> 001 → 110 E> 3 E0 A0 B1
T4 E> 10 → 11 A> 2 E1 F0 start of a digit's (10)^v
T5 A> 01 → 10 E> 2 A0 B1 end of a bit-1 digit's (10)^v
T6 A> 00 → <D 01 3 A0 B0 C1 flips the 00 of a bit-0 digit
T7 11 <D → <D 00 2 D1 C1
T8 11011 <D → <C 00001 9 D1 C1 D0 A0 B0 C1 D1 C1 D1
T9 E> 1001 0^inf → <C 000 1001 0^inf 13 E1 F0 A0 B1 E0 A0 B0 C1 D1 C0 D1 C1 D1 far-right turn (window 1001000)
T10 11 <C → <C 00 2 C1 D1
T11 0 <C → <D 1 1 C0
T12 0^inf 11 <D → 0^inf 10110 E> 13 D1 C1 D0 A0 B0 C1 D1 C0 D0 A1 E0 A0 B1 left-edge turn in O (window 00011)
T13 E> 101 → 110 E> 3 E1 F0 A1
T14 1011 <C → <C 0100 4 C1 D1 C0 D1

Digit lemmas

These are compositions; u, v are those of one digit.

lemma steps made of needs
Lb E> (10)^v (01)^u → 11 (01)^(v−1) (10)^u E> 2u+2v T4, S3(v−1), T5, S4(u−1) u, v ≥ 1
Lf E> (10)^v 00 (01)^u → 11 <D (10)^(v−1) (01)^(u+1) 4v+1 T4, S3(v−1), T6, S2(v−1) v ≥ 1
Rb 11 (01)^(v−1) (10)^u 11 <D → 11 <D (10)^(v−1) 00 (01)^u 6u+2v S5(u), T7, S2(v−1) v ≥ 1
Ro 11 (01)^(v−1) (10)^u <C → <C 000 (01)^(v−1) 1 (01)^(u−1) 2u+6v−4 S1(u), S6(v−1), T10 u, v ≥ 1

In Ro, S6 starts on the first 0 of (01)^u = 0 1 (01)^(u−1).

What each digit lemma does:

  • Lb sweeps a bit-1 digit rightward.
  • Lf flips the bit-0 digit.
  • Rb restores a swept digit as bit 0 on M's way back.
  • Ro does the same in O.

2.2 Derivation of M

Notation:

  • X is everything right of d_{j*}. It is never read.
  • (u*, v*) is d_{j*} = (u*,0,v*).
  • Y = Π_{i=k..1} (10)^v_i (01)^u_i is the trailing bit-1 digits, written left to right. i = k is d_m, and i = 1 is d_{j*+1}.

The chain:

                                                                                        steps
    0^inf <C (01)^b 000 (01)^a Y (10)^v* 00 (01)^u* X
 Phase 1: left-edge preamble with a dip into the 000 gap                                4b+10
T1  0^inf 10 E> (01)^b 000 (01)^a Y ..                                                  3
S4  0^inf (10)^(b+1) E> 000 (01)^a Y ..                                                 2b
T2  0^inf (10)^(b+1) <C 001 (01)^a Y ..                                                 5
S1  0^inf <C (01)^(b+1) 0 (01)^(a+1) Y ..                                               2b+2
 Phase 2: one long right sweep, up to the 00 of d_{j*}                                  2a+2b+9+4v*+Σ(2u_i+2v_i)
T1  0^inf 10 E> (01)^(b+1) 0 (01)^(a+1) Y ..                                            3
S4  0^inf (10)^(b+2) E> 0 (01)^(a+1) Y ..                                               2b+2
T3  0^inf (10)^(b+2) 110 E> (01)^a Y ..                                                 3
S4  0^inf (10)^(b+2) 110 (10)^a E> Y (10)^v* 00 (01)^u* X                               2a
Lb  0^inf (10)^(b+2) 110 (10)^a Y' E> (10)^v* 00 (01)^u* X        (i = k down to 1)     Σ(2u_i+2v_i)
                         Y' = Π_{i=k..1} 11 (01)^(v_i−1) (10)^u_i
Lf  0^inf (10)^(b+2) 110 (10)^a Y' 11 <D (10)^(v*−1) (01)^(u*+1) X                      4v*+1
 Phase 3: leftward pass with 2-cell back-bounces, then a plain run to the edge          6a+2b+13+Σ(6u_i+2v_i)
Rb  0^inf (10)^(b+2) 110 (10)^a 11 <D Y'' (10)^(v*−1) (01)^(u*+1) X   (i = 1 up to k)   Σ(6u_i+2v_i)
                         Y'' = Π_{i=k..1} (10)^(v_i−1) 00 (01)^u_i
S5  0^inf (10)^(b+2) 110 11 <D (01)^a Y'' ..                                            6a
T8  0^inf (10)^(b+2) <C 00001 (01)^a Y'' ..                                             9
S1  0^inf <C (01)^(b+2) 000 (01)^(a+1) Y'' (10)^(v*−1) (01)^(u*+1) X                    2b+4

The last line is

K(.., (u*+1,1,v*−1), (u_i,0,v_i−1)_i; a+1, b+2)

The sum is

(4b+10) + (2a+2b+9+4v*) + (6a+2b+13) + Σ(8u_i+4v_i) = 32 + 8a + 8b + 4v* + Σ(8u_i+4v_i)

Head path

  • Phase 1 runs right only as far as the 000 gap, turns (T2) and returns to the edge.
  • Phase 2 is the only long rightward leg. Its rightmost read is the right 0 of d_{j*}'s 00: T6 reads both cells, then moves left. So M is a side rule, and the tape X right of that 00 is never read.
  • Phase 3 moves left. It doubles back once per 10 block (S5, on the swept digits' (10)^u_i and on (10)^a). It crosses the (01)^(v−1) blocks and the final (10)^(b+2) with plain sweeps (S2, S1).

Drops

When v* = 1, the flipped digit (u*+1,1,0) = (01)^(u*+1) drops (§1).

When some v_i = 1, the result has (u_i,0,0). That can happen only outside INV (§3.3).

2.3 Derivation of O

Let Y = Π_{i=m..1} (10)^v_i (01)^u_i, with all digits bit 1. The chain:

                                                                                        steps
    0^inf <C (01)^b 000 (01)^a Y 1001 0^inf
 Phases 1–2 as in M, with Lb on all m digits and no Lf                                  (4b+10)+(2a+2b+8)+Σ(2u_i+2v_i)
    0^inf (10)^(b+2) 110 (10)^a Y' E> 1001 0^inf              Y' = Π_{i=m..1} 11 (01)^(v_i−1) (10)^u_i
 Phase 3: turn at the far right
T9  0^inf (10)^(b+2) 110 (10)^a Y' <C 000 1001 0^inf                                    13
 Phase 4: leftward pass
Ro  0^inf (10)^(b+2) 110 (10)^a <C Y''' 000 1001 0^inf      (i = 1 up to m)             Σ(2u_i+6v_i−4)
                         Y''' = Π_{i=m..1} 000 (01)^(v_i−1) 1 (01)^(u_i−1)
 Phase 5: left end                                                                      2a+8b+30
S1  0^inf (10)^(b+2) 110 <C (01)^a Y''' ..                                              2a
T11 0^inf (10)^(b+2) 11 <D 1 (01)^a Y''' ..                                             1
S5  0^inf 11 <D (01)^(b+2) 1 (01)^a Y''' ..                                             6b+12
T12 0^inf 10110 E> (01)^(b+2) 1 (01)^a Y''' ..                                          13
S4  0^inf 10110 (10)^(b+2) E> 1 (01)^a Y''' ..                                          2b+4
 Phase 6: short right sweep over the a block, to the 000 that Ro left before d_m        2a+1
T13 0^inf 10110 (10)^(b+2) 110 E> (01)^(a−1) Y''' ..                                    3
S4  0^inf 10110 (10)^(b+2) 1 (10)^a E> 000 (01)^(v_m−1) ..                              2a−2
 Phase 7: turn in that 000, final run to the edge                                       2a+6b+27
T2  0^inf 1011 (01)^(b+3) (10)^a <C 001 (01)^(v_m−1) ..   (0 (10)^(b+2) 1 = (01)^(b+3))   5
S1  0^inf 1011 (01)^(b+3) <C (01)^a 001 (01)^(v_m−1) ..                                 2a
S6  0^inf 1011 <C 0 (01)^(b+3) 1 (01)^(a−1) 001 (01)^(v_m−1) ..                         6b+18
T14 0^inf <C 0100 0 (01)^(b+3) 1 (01)^(a−1) 001 (01)^(v_m−1) ..                         4

Re-read the final tape with the two identities

1 (01)^(n−1) 0 = (10)^n          01 (01)^(n−1) = (01)^n

splitting each 000 of Y''' as 0 | 00:

0^inf <C 0100 0 (01)^(b+3) 1 (01)^(a−1) 001 (01)^(v_m−1) 1 (01)^(u_m−1) [000 (01)^(v_i−1) 1 (01)^(u_i−1)]_{i=m−1..1} 000 1001 0^inf
  = 0^inf <C 01 000 (01)^(b+3) (10)^a (01)^v_m [(10)^u_(i+1) 00 (01)^(v_i−1)]_{i=m−1..1} (10)^u_1 00 1001 0^inf
  = K((0,0,u_1), (v_1−1,0,u_2), .., (v_{m−1}−1,0,u_m), (v_m,1,a); b+3, 1)

The sum is

(4b+10) + (2a+2b+8) + 13 + (2a+8b+30) + (2a+1) + (2a+6b+27) + Σ(4u_i+8v_i−4) = 89 − 4m + 8a + 20b + 4Σu_i + 8Σv_i

Domain

  • Lb and Ro need u_i, v_i ≥ 1.
  • T13 and the S6 of phase 7 use the first 0 1 of (01)^a, so a ≥ 1.
  • T9 needs 0^inf on the right. It reads the three blank cells right of 1001 and moves the marker three cells right, so the rightmost cell visited moves 3 cells per overflow.

O has two long rightward legs: phase 2, and the short phase 6.

O at m = 0 (the init, §4)

The same chain with no digits works: phase 4 is empty, and phase 6 ends on T9's 000. The final tape is

0^inf <C 01 000 (01)^(b+3) 1 (01)^(a−1) 001 1001 0^inf
  = 0^inf <C 01 000 (01)^(b+3) (10)^a 01 1001 0^inf
  = K((1,1,a); b+3, 1)

The step count is 89 + 8a + 20b.

2.4 What the rules do, in words

The digits form a binary counter, and each M is one increment.

  • M flips the trailing 1s to 0 and the last 0 to 1. Every digit it touches pays one 10 from its v, and a digit flipping 0→1 also gains a 01.
  • When all bits are 1, O swaps the two halves of every digit. Each (01)^u becomes the (10)^u fuel of a new bit-0 digit, and each (10)^v becomes the next digit's (01)^(v−1). The counter restarts at value 1 with one more digit.
  • When a digit flipping 0→1 has spent its last 10 (v = 1), it drops: its 01s merge into the next digit, and the counter loses that digit.

The only way the rules can fail is the failure mode: a carry reaches a bit-0 digit with v = 0, where Lf's first lemma T4 has no 10 to read. That happens if a carry flips a bit-1 digit with v = 1 to 0.

Every macro step is an exact run of at least 32 steps, so every macro step makes progress.

5FamilyCheck: related machines are killed together or have a reason to be left open.

6 machines, 4 killed, 2 not. Family links: status.json parent, same transition table with another start (tools/dashboard.py), targeting.md follow-on rows, ledger "= twin" notes. A machine string named in a .v header / proof.md / notes.md is listed but does not make a family.

whomachinestatusrelation to this kill
#11 kill 31RB0LE_1RC0RC_1LD0RB_1LA0LE_1LD1LF_1LD---✓Killed: never halts= #33's table mirrored, run from state B; named in #33's .v header; named in #33's proof.md; named in #33's notes.md · review · mechanism
#33 kill 91RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---✓Killed: never haltsthis kill
#33b kill 101RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB---✓Killed: never haltsparent link; = #33's table, run from state D; named in #33's proof.md; named in #33's notes.md; named in #33b's .v header; named in #33b's proof.md; named in #33b's notes.md · review · same machine as this kill? (same table, started in #33's D; different orbit; tables, pictures and numbers side by side) · mechanism
#11b kill 141RB0RB_1LC0RA_1LE0LD_1LC1LF_1RA0LD_1LC---✓Killed: never halts= #33's table mirrored, run from state C; named in #11b's proof.md; named in #11b's notes.md; named in #33's proof.md; named in #33's notes.md · review
#321RB0LC_1RC0RC_1LD0RB_1LA0LE_1LD1LF_1LD---⚠Cryptid candidatevia #11: parent link; targeting: follow-on to #11; ledger: #32 = twin of #11; named in #32's proof.md; named in #32's notes.md · page
R41RB0RE_1LC0RD_1LD0LD_1RA0LC_1RA1RF_1RA---⚠Cryptid candidatevia #32: = #32's table mirrored, run from state D; named in #32's proof.md; named in #32's notes.md; named in R4's notes.md · mechanism
6ChecklistCheck: every ✓ is computed; the two ○ are yours to decide; an amber ! is an optional check that did not finish.
  • ✓
    Machine string exact
    the .v literal == holdout list line 34 byte for byte
  • ✓
    Statement is ~halts tm c0
    parsed from the .v and confirmed by check_kill (theorem_text, theorem_rocq)
  • ✓
    No axioms beyond baseline
    0 assumption(s); tools/assumptions_baseline.txt allows only functional_extensionality_dep
  • ✓
    coqchk finished (optional)
    coqchk pass in 1.75 s
  • ✓
    .v hash matches the checked hash
    .v = checked sha256 2dfa4337b76b…; submission/ copy = checked sha256 2dfa4337b76b…
  • ✓
    No repo-local paths in the .v
    comments name no path of ours (vendor/, machines/, tools/, rocq/, scripts/, reports/, atlas/, data/, journal/, /home/); busycoq's own verify/X.v is fine: none in the .v or the submission/ copy
  • ✓
    Public write-up is clean
    tools/writeup_lint.py on submission/proof.md: 0 error(s)
  • ○
    proof.md reviewed by Dennis (Checkpoint B)
    no Checkpoint B note from Dennis found
    • notes.md L89: 2026-10-10: `proof.md` written (stage informal_proof, status OPEN; Checkpoint B pending, non-blocking).
    • notes.md L143: - No Checkpoint A or B notes from Dennis were on file when this was packaged. If he adds any, fold them into proof.md and the submission copy first.
    • proof.md L7: - Status: informal proof, revised after the skeptic review (Review log at the end). Stage `informal_proof`; Checkpoint B pending (non-blocking). Not a kill: only `tools/check_kill.sh` PASS counts. Evidence: `check_proof.
    • proof.md L520: It found 0 failures. Dennis's Checkpoint B notes (pending, non-blocking) go into this file before any submission.
    • proof.md L534: | 2 (minor) | §7 Gaps, last bullet | "The skeptic review of this file has not been done" was out of date. | **Fixed.** The bullet now records the review and its independent checks. The reviewer used its own C simulator a
  • ○
    Family posted together?
    3 other kill(s) in the family: #11, #33b, #11b; the Discord draft names 3 of them; 2 member(s) not killed: #32, R4

Generated by tools/killreview.py at 2026-10-16 13:29 PDT in 0.1 s from the files linked above; nothing in this review is hand-written except the box “How we proved it never halts” (above), which quotes how_proved.md. Re-run: python3 -B tools/killreview.py 1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---

Files

machines/<tm>/: 16 entries · raw notes, status, scripts, images

namesizechanged
notes.md ↓15 KB2026-10-10 10:53
proof.md ↓47 KB2026-10-10 10:40
how_proved.md ↓1.2 KB2026-10-14 10:51
status.json ↓353 B2026-10-13 06:44
observe.json ↓14 KB2026-10-10 09:54
1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---.v ↓30 KB2026-10-12 18:16
img/6 items2026-10-10 09:49
rocq/8 items2026-10-10 10:46
scripts/11 items2026-10-10 10:36
submission/5 items2026-10-12 17:49
work/2 items2026-10-12 17:33
check_proof.out ↓3.6 KB2026-10-10 10:38
check_proof.py ↓50 KB2026-10-10 10:37
check_proof_long.out ↓3.6 KB2026-10-10 10:40
qsim.jsonl ↓978 B2026-10-10 09:46
sim_records_1e9.jsonl ↓5.4 GB2026-10-10 09:37
status.json in full
{
 "tm": "1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---",
 "status": "KILLED_NONHALT",
 "stage": "done",
 "updated": "2026-10-10",
 "reason": "check_kill PASS, independently re-verified",
 "pr": "https://github.com/ccz181078/busycoq/pull/16",
 "pr_state": "merged",
 "pr_comments": 0,
 "pr_merged_at": "2026-10-13T12:26:07Z",
 "pr_merged_by": "ccz181078"
}