tools/rebuild_pages.sh rebuilds the site within 5 minutes of a change; by hand: python3 -B tools/site.py.1RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB---
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. #33 is #11's table in a mirror, and this machine is #33's table with the state letters renamed, started in the state that is #33's D (equivalently, #11 mirrored and started in #11's state C). So you see #33's counter, with the head at the left end, on a run of its own.
Everything in #33's proof except the start carries over unchanged: the two moves (add 1, and overflow), #11's invariant, and the proof that every move keeps it. What is new is a 687-step opening. In it the counter loses its digits to merges until none is left, an overflow builds a new one, and at step 687 the tape is a one-digit counter with fuel to spare, a state the invariant covers. From then on the argument applies, so this machine never halts.
The Rocq file is #33's with the states renamed and a new opening. It replays the 687 steps, checks the invariant there, and proves the result for this table directly.

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.
Overview
In one sentence
Kill #33's table renamed, started in #33's D: same counter; a 687-step init lands in #33's proved invariant
Submitted mechanism Same counter as #33. The head works at the left edge. At each visit the tape is K = 0^inf <D (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)
parent #33; = #11 1RB0LE_1RC0RC_1LD0RB_1LA0LE_1LD1LF_1LD--- mirrored
- Upstream
- Kill claimed · PR #16merged 2026-10-13 12:26 UTC by ccz181078 ·
Sk1Class2_v2.v · TM8· on Submissions → - Rocq proof
- check_kill PASS · first Oct 10 12:23673 lines · 30 KB .v · compile 8.6 s · coqchk pass · 0 axioms · PASS Oct 10 12:23 (re-run Oct 12 18:18)· the .v file
- Automatic review
- 6 of 6 checks passtemplate: #33's kill file (kill 9) (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 #33's table renamed (BCDAEF, no mirror), started in #33's D · high confidence
- On the list
- not on
BB6_holdouts_663.txt(line 366 of the previous list) · historical 740 line 366 · observe.json rank #388 - Derived from
1RB0RE_#33 Kill claimed1LC0RE_ 1LD0LD_ 1RA0LC_ 1RA1RF_ 1RA---
Mechanism
What to check here: the pictures show the mechanism that the rule table describes.
How it works: 3 notes
- Same table as kill #33
1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---: rename its states A,B,C,D -> B,C,D,A (E, F fixed), no mirror. This machine starts in #33's D (= kill #11's table mirrored, started in #11's C). - Tape K =
0^inf <D (01)^b 000 (01)^a+ digits(10)^v [00] (01)^u+1001: #33's binary counter with head state D. M carries to the last 0-bit; O re-pairs every digit when all bits are 1. - From blank, 687 steps reach K((1,1,9); 8, 1), class A of #33's invariant (#33: 215 steps to K((1,1,3); 4, 1)). Rules, INV and closure are #33's unchanged. Orbit = kill #11's with one top-digit exponent +3 from macro step 54 on (not a premise).
Figures for Checkpoint A
The site's own picture. The tape grows to the left; the right end barely moves.
Each row is the whole tape at a new leftmost cell. Watch the vertical walls: where they creep and jump.
The same view of kill #33 itself. Compare the kind of walls with the previous figure, not their positions.
Rules (3/3 validated)exact tape rewrites the proof will formalize, each re-checked by simulation
| rule | from ⟶ to | cases | steps | checked |
|---|---|---|---|---|
| init (blank -> first INV state) | 0∞ A> 0∞ ⟶ 0∞ <D 01 000 (01)8 (10)9 01 1001 0∞ | = K((1,1,9); a=8, b=1), class A. Passes K-configs at 101, 234, 326, 426 (none in INV). Exact by direct simulation; Rocq solve_init in rocq/delta_check.v | 687 | ✓1/1 |
| M_k carry (k = trailing 1-bits) | 0∞ <D (01)b 000 (01)a [(10)v_j (01)u_j]_{j=m..j*+1} (10)v 00 (01)u X ⟶ 0∞ <D (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 | #33's M with <C read as <D; v=1: the flipped digit drops (fuses with the next). check_proof A: 700 random; H: 37,220 link-by-link chains on this table | 32+8a+8b+4v+sum(8u_j+4v_j) | ✓37920/37920 |
| O overflow (all bits 1) | 0∞ <D (01)b 000 (01)a [(10)v_j (01)u_j]_{j=m..1} 1001 0∞ ⟶ 0∞ <D 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∞ | #33's O with <C read as <D; m>=1, all u,v>=1, a>=1. check_proof A: 350 random; H: 9,996 link-by-link chains (m=0 incl.) | 89-4m+8a+20b+4sum(u)+8sum(v) | ✓10346/10346 |
Compressed historythe tape as 0∞ <D (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; abstract model, equal to the real run to 1e9) at 36 moments: where the rules are read off
| step | m | u_1..u_m | v_1..v_m | a | b | INV class |
|---|---|---|---|---|---|---|
| 687 | 1 | 1 | 9 | 8 | 1 | A |
| 1,236 | 1 | 11 | 6 | 6 | 5 | C |
| 1,929 | 2 | 17 | 104 | 10 | 5 | A |
| 3,774 | 2 | 127 | 44 | 14 | 13 | C |
| 6,283 | 3 | 157 | 1,148 | 22 | 13 | A |
| 13,424 | 2 | 1,322 | 28 | 30 | 29 | C |
| 17,877 | 3 | 1,311 | 121,924 | 38 | 13 | A |
| 27,658 | 2 | 3,631 | 424 | 30 | 29 | C |
| 32,983 | 3 | 1,527 | 352,824 | 38 | 13 | A |
| 43,964 | 3 | 373,131 | 22,024 | 30 | 29 | C |
| 56,593 | 4 | 132,331 | 36,282,416 | 46 | 29 | A |
| 89,062 | 3 | 693,131 | 161,616 | 62 | 61 | C |
| 107,803 | 4 | 1,171,923 | 68,282,448 | 78 | 29 | A |
| 148,560 | 4 | 70,313,163 | 1,412,848 | 62 | 61 | C |
| 196,909 | 5 | 115,151,563 | 6,928,244,832 | 94 | 61 | A |
| 324,306 | 4 | 71,319,463 | 1,283,232 | 126 | 125 | C |
| 398,839 | 5 | 113,113,947 | 7,028,874,896 | 158 | 61 | A |
| 562,380 | 5 | 72,319,463,127 | 104,241,696 | 126 | 125 | C |
| 756,185 | 6 | 11,173,131,127 | 712,887,489,664 | 190 | 125 | A |
| 1,267,742 | 4 | 73,125,190,127 | 8,166,464 | 254 | 253 | C |
| 1,406,963 | 5 | 19,197,179 | 7.21·1013 | 286 | 61 | A |
| 1,659,752 | 5 | 7.41·1013 | 6,125,648,224 | 126 | 125 | C |
| 1,917,733 | 6 | 17,156,363,255 | 7.31·1015 | 190 | 125 | A |
| 2,518,538 | 6 | 7.51·1016 | 48,483,219,264 | 254 | 253 | C |
| 3,255,855 | 7 | 1.51·1013 | 7.41·1018 | 382 | 253 | A |
| 5,251,716 | 6 | 7.61·1016 | 244,016,160,128 | 510 | 509 | C |
| 6,470,417 | 7 | 1.37·1012 | 7.51·1019 | 638 | 253 | A |
| 9,142,998 | 4 | 392,382,382,511 | 3,212,864,384 | 510 | 509 | C |
| 9,463,859 | 5 | 13,313,171,399 | 3.91·1014 | 542 | 61 | A |
| 9,967,416 | 5 | 3.93·1014 | 3.01·1012 | 126 | 125 | C |
| 14,422,148 | 6 | 3.95·1017 | 2.61·1015 | 510 | 509 | C |
| 30,572,592 | 7 | 3.97·1020 | 2.21·1018 | 1,022 | 1,021 | C |
| 92,222,268 | 8 | 3.99·1025 | 1.81·1020 | 2,046 | 2,045 | C |
| 222,617,416 | 9 | 4.01·1030 | 1.49·1025 | 2,046 | 2,045 | C |
| 513,032,532 | 9 | 4.03·1031 | 1.08·1025 | 2,046 | 2,045 | C |
| 924,603,323 | 11 | 1.98·1029 | 4.03·1039 | 6,142 | 4,093 | A |
mlast 11u_1..u_mlast 1.98·1029v_1..v_mlast 4.03·1039alast 6,142blast 4,093INV classlast ATemplate comparisonour: applies · the nearest solved proof, what carries over, and the transitions that differ
| 0 | 1 | |
|---|---|---|
| A | 1RB | 0LD |
| B | 1RC | 0RE |
| C | 1LD | 0RE |
| D | 1LA | 0LA |
| E | 1RB | 1RF |
| F | 1RB | --- |
- file
- —
- module
our kill #33 (machines/1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---/, check_kill PASS)- machine
1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---(7 transitions apart)- diff
0 transitions after renaming #33's A,B,C,D,E,F -> B,C,D,A,E,F (no mirror); only the start differs (#33's D)- note
- Same table, so #33's window lemmas, M, O and INV (proved in Rocq) apply verbatim with the K head state C -> D. Only init changes: 687 steps to K [d1 1 9] 8 1. The renamed .v compiles as a scratch file (rocq/delta_check.v, closed); check_kill not run yet.
Proof strategy & riskshow the formal proof will go · 3 risks to watch
Delta proof (proof.md): Lemma R (renaming) + #33's rules and invariant verbatim + a new 687-step init to K((1,1,9);8,1), class A. Formal: #33's .v with {{X}} renamed by sigma, new init/base (rocq/delta_check.v compiles in 8.8 s). Next: copy it to the kill path and run check_kill.
- ▲Duplicate work: unclaimed in the sheet and our Discord lists, but Discord #bb6 was not searched for this string.
- ▲Same family as kills #11 and #33 (and hipparcos's line 541): post them together so the twins paragraphs agree.
- ▲Little math risk: the base is in class A and every INV clause there is a lower bound.
Stats & provenance109 steps simulated · 77,691 cells · the status in full · files
- simulated
- 109 steps
- tape
- 77,691 cells · 38,839 nonzeros
- growth
- left edge ~2.45 t^0.5 (77,517 cells left of the start by 1e9); right edge 173 (+3 cells per overflow, 53 overflows by 1e9)
- status now
- check_kill PASS, independently re-verified (status.json, 2026-10-10)
- observer's note
- Same table as kill #33 (renaming BCDAEF, no mirror, D-start). Rules and INV unchanged; 687-step init to class A; closure exact on the real run. Delta proof.md written (CHECKPOINT_B in status.json).
- files
- observe.json · notes.md · proof.md · how_proved.md · status.json · 1RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB---.v
Proof & checks
Kill 10 · Skelet 1-like Class 2 · the kill file 1RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB---.v: 673 lines, 102 items · the package submission/
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).
1RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB---sha256 f2bc59ed320c2e4f…
| ✓ | 1RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB---.v | f2bc59ed320c2e4f… = checked |
| ✓ | submission/1RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB---.v | f2bc59ed320c2e4f… = checked |
All 17 check_kill checks with their one-line results
| ✓ | args | 6x2 machine, framework module Individual62, mode nonhalt |
| ✓ | input | 30448 bytes, 673 lines, 744 sentences |
| ✓ | framework | HEAD 0940bb9cf434ba68f0c025dabfde45a219999973 == pin; no tracked changes under verify/ |
| ✓ | framework_build | 13 needed framework .vo files present and fresh, with native code no older than the .vo |
| ✓ | forbidden | none of 30 forbidden patterns occur (ground rule 1's words: anywhere; command words: outside comments and strings; comments never split a token) |
| ✓ | structure | 6 Require name(s) allowed; no top-level Variable/Context; no shadowing; Module/Section balanced |
| ✓ | tm_text | line 24: TM_from_str "1RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB---" == <tm> (41 bytes) |
| ✓ | theorem_text | line 641: nonhalt : ~halts tm c0 |
| ✓ | coq | coqc 8.20.1 ([local working file] |
| ✓ | names | halts, c0, TM_from_str resolved inside Individual62 |
| ✓ | compile | compiled in 8.6s with all appended checks |
| ✓ | tm_rocq | BB6Kill.Candidate.tm = BusyCoq.Individual62.TM_from_str "1RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB---" by eq_refl (in-file and isolated) |
| ✓ | theorem_rocq | nonhalt : ~ halts (TM_from_str "1RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB---") c0 with absolute names (in-file and isolated) |
| ✓ | isolation | only stock proof plugins loaded; guard/positivity/universe checking on, definitional UIP off |
| ✓ | assumptions | 0 assumption(s), all in the baseline |
| ✓ | coqchk | coqchk -norec BB6Kill.Candidate ok (1.8s); its context summary lists nothing of the file's own |
| ✓ | integrity | input sha256 and framework HEAD/cleanliness identical before and after |
2Same machine as #33?Check: every row of the table is ✓ under the computed renaming (or the listed differences are what status.json's relation says), the two pictures show the same bands, and the trajectory numbers agree with the claimed relation (a twin keeps a fixed small offset; a sibling's gap grows).
status.json names #33 as the parent (1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---); label: “#33b”; relation: “same transition table as #33 (states renamed), started in a different state; found by the family sweep”; parent_note: “#33; = #11 1RB0LE_1RC0RC_1LD0RB_1LA0LE_1LD1LF_1LD--- mirrored”. Everything below is computed from the two machine strings, not read from notes.
✓ Identical to #33's table under the renaming A→B, B→C, C→D, D→A, E→E, F→F (#33's state → this machine's), no mirror. This machine starts in #33's state D (#33 itself starts in A). The only such map.
| #33 | #33's row (read 0, read 1) | σ | predicted row: renamed by σ | this machine's actual row | ||
|---|---|---|---|---|---|---|
| A | 1RB 0RE | → B | 1RC 0RE | 1RC 0RE | ✓ | start of #33 |
| B | 1LC 0RE | → C | 1LD 0RE | 1LD 0RE | ✓ | |
| C | 1LD 0LD | → D | 1LA 0LA | 1LA 0LA | ✓ | |
| D | 1RA 0LC | → A | 1RB 0LD | 1RB 0LD | ✓ | start of this machine |
| E | 1RA 1RF | → E | 1RB 1RF | 1RB 1RF | ✓ | |
| F | 1RA --- | → F | 1RB --- | 1RB --- | ✓ |
Rows aligned by σ: each of #33's states X sits next to this machine's state σ(X). ✓ = the actual row equals #33's row with every target state renamed by σ; --- (halt) must stay ---. Searched: all 720 renamings × with/without mirror.
Same view, same settings on both sides. Look for the same band structure: it starts in #33's state D, not A, so the first steps differ; the numbers below read: different orbit, so expect the same kind of bands, not the same picture.
The macro behaviour, identical settings on both sides: each picture is its machine's own visited span stretched to 800 px, so compare the shape and order of the bands, not their absolute width. Speed mode samples one cell per column, so a one-cell shift can swap orange and white inside a band; compare band edges, not colours.


Trajectory numbers, from blank (C core)
○ different orbit: 1.9% wider at 1e9 (77,691 vs 76,245 cells; nonzeros 38,839 vs 38,119); not a fixed offset: the cell gap reaches +1,446
| steps | cells visited (hi − lo + 1) | nonzeros | ||||
|---|---|---|---|---|---|---|
| #33 | this | ratio (Δ) | #33 | this | ratio (Δ) | |
| 1e5 | 639 | 653 | 1.0219 (+14) | 319 | 324 | 1.0157 (+5) |
| 1e6 | 2,219 | 2,131 | 0.9603 (-88) | 1,107 | 1,062 | 0.9593 (-45) |
| 1e7 | 7,371 | 7,005 | 0.9503 (-366) | 3,683 | 3,502 | 0.9509 (-181) |
| 1e8 | 22,863 | 24,037 | 1.0513 (+1,174) | 11,432 | 12,018 | 1.0513 (+586) |
| 1e9 | 76,245 | 77,691 | 1.0190 (+1,446) | 38,119 | 38,839 | 1.0189 (+720) |
Each machine from blank in its own start state, sim.py C core. Trajectory twin = cells and nonzeros stay within 16 of the parent's at every checkpoint (a fixed offset from a different start, not a growing gap). Cached in img/vs-parent.json (2026-10-16 10:28 PDT); --force recomputes.
3Where 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).
It extends our kill #33's .v, verify/Skelet1LikeC2_1RB0RE_1LC0RE.v (671 lines). That file ports #11's .v, verify/Skelet1LikeC2_1RB0LE_1RC0RC.v, which follows the architecture of busycoq SBCv6.v Module TM21 (carries plus a re-pairing overflow). A script applied proof.md §5, with no hand edits to the code:
- the TM string;
- σ on every state name:
{{A}}->{{B}}(5),{{C}}->{{D}}(22),{{D}}->{{A}}(18), with{{E}}(18) unchanged; init(687 steps toK [d1 1 9] 8 1, against #33's 215 toK [d1 1 3] 4 1) and the base innonhalt, closed by #33's own tactic line;- the header and the comments.
Every proof script, the three rule specs and the invariant part are #33's text. It compiled on the first try, and no tactic was changed. The file is 673 lines, imports only Individual62 from busycoq, and has one TM_from_str. It is a direct proof on the holdout string, with no Flip/Permute bridge.
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.
Other references found:
- twin: parent kill's .v machines/1RB0LE_1RC0RC_1LD0RB_1LA0LE_1LD1LF_1LD---/1RB0LE_1RC0RC_1LD0RB_1LA0LE_1LD1LF_1LD---.v (named in 1RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB---.v line 7)
- mechanism reference (not named as a code template) vendor/busycoq/verify/SBCv6.v Module TM21 (named in 1RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB---.v line 3)
Side-by-side diff: template (574 lines) vs ours (574 lines), 43 lines differ; runs of identical lines and long template-only runs folded
| template | ours | ||
|---|---|---|---|
| 16 | From BusyCoq Require Import Individual62. | 18 | From BusyCoq Require Import Individual62. |
| 17 | Require Import ZifyNat Lia. | 19 | Require Import ZifyNat Lia. |
| ⋯ 7 identical lines (template 18–26, ours 20–28) | |||
| 28 | Open Scope list. | 30 | Open Scope list. |
| 30 | (* ---------- shift lemmas (one block, then shift_rule_L/R) ---------- *) | 32 | (* ---------- shift lemmas (one block, then shift_rule_L/R) ---------- *) |
| 31 | Lemma S1_1 l r: l <* [0;1] <{{C}} [] *> r -->* l <{{C}} [] *> [0;1] *> r. Proof. es. Qed. | 33 | Lemma S1_1 l r: l <* [0;1] <{{D}} [] *> r -->* l <{{D}} [] *> [0;1] *> r. Proof. es. Qed. |
| 32 | Lemma S2_1 l r: l <* [1;0] <{{D}} [] *> r -->* l <{{D}} [] *> [1;0] *> r. Proof. es. Qed. | 34 | Lemma S2_1 l r: l <* [1;0] <{{A}} [] *> r -->* l <{{A}} [] *> [1;0] *> r. Proof. es. Qed. |
| 33 | Lemma S3_1 l r: l <* [] {{A}}> [1;0] *> r -->* l <* [1;0] <* [] {{A}}> r. Proof. es. Qed. | 35 | Lemma S3_1 l r: l <* [] {{B}}> [1;0] *> r -->* l <* [1;0] <* [] {{B}}> r. Proof. es. Qed. |
| 34 | Lemma S4_1 l r: l <* [] {{E}}> [0;1] *> r -->* l <* [0;1] <* [] {{E}}> r. Proof. es. Qed. | 36 | Lemma S4_1 l r: l <* [] {{E}}> [0;1] *> r -->* l <* [0;1] <* [] {{E}}> r. Proof. es. Qed. |
| 35 | Lemma S6_1 l r: l <* [1;0] <{{C}} [0] *> r -->* l <{{C}} [0] *> [0;1] *> r. Proof. es. Qed. | 37 | Lemma S6_1 l r: l <* [1;0] <{{D}} [0] *> r -->* l <{{D}} [0] *> [0;1] *> r. Proof. es. Qed. |
| 36 | Lemma S5_1 l r: l <* [0;1] <* [1;1] <{{D}} r -->* l <* [1;1] <{{D}} [0;1] *> r. Proof. es. Qed. | 38 | Lemma S5_1 l r: l <* [0;1] <* [1;1] <{{A}} r -->* l <* [1;1] <{{A}} [0;1] *> r. Proof. es. Qed. |
| 38 | Definition S1 := shift_rule_L _ _ _ _ _ S1_1. | 40 | Definition S1 := shift_rule_L _ _ _ _ _ S1_1. |
| 39 | Definition S2 := shift_rule_L _ _ _ _ _ S2_1. | 41 | Definition S2 := shift_rule_L _ _ _ _ _ S2_1. |
| 40 | Definition S3 := shift_rule_R _ _ _ _ _ S3_1. | 42 | Definition S3 := shift_rule_R _ _ _ _ _ S3_1. |
| 41 | Definition S4 := shift_rule_R _ _ _ _ _ S4_1. | 43 | Definition S4 := shift_rule_R _ _ _ _ _ S4_1. |
| 42 | Definition S6 := shift_rule_L _ _ _ _ _ S6_1. | 44 | Definition S6 := shift_rule_L _ _ _ _ _ S6_1. |
| 44 | Lemma S5 n: forall l r, l <* [0;1]^^n <* [1;1] <{{D}} r -->* l <* [1;1] <{{D}} [0;1]^^n *> r. | 46 | Lemma S5 n: forall l r, l <* [0;1]^^n <* [1;1] <{{A}} r -->* l <* [1;1] <{{A}} [0;1]^^n *> r. |
| 45 | Proof. | 47 | Proof. |
| 46 | induction n; intros. | 48 | induction n; intros. |
| ⋯ 2 identical lines (template 47–48, ours 49–50) | |||
| 49 | Qed. | 51 | Qed. |
| 51 | (* ---------- finite turns ---------- *) | 53 | (* ---------- finite turns ---------- *) |
| 52 | Lemma T1 r: 0inf <{{C}} r -->* 0inf <* [0;1] {{E}}> r. Proof. es. Qed. | 54 | Lemma T1 r: 0inf <{{D}} r -->* 0inf <* [0;1] {{E}}> r. Proof. es. Qed. |
| 53 | Lemma T2 l r: l {{E}}> [0;0;0] *> r -->* l <{{C}} [0;0;1] *> r. Proof. es. Qed. | 55 | Lemma T2 l r: l {{E}}> [0;0;0] *> r -->* l <{{D}} [0;0;1] *> r. Proof. es. Qed. |
| 54 | Lemma T3 l r: l {{E}}> [0;0;1] *> r -->* l <* [0;1;1] {{E}}> r. Proof. es. Qed. | 56 | Lemma T3 l r: l {{E}}> [0;0;1] *> r -->* l <* [0;1;1] {{E}}> r. Proof. es. Qed. |
| 55 | Lemma T4 l r: l {{E}}> [1;0] *> r -->* l <* [1;1] {{A}}> r. Proof. es. Qed. | 57 | Lemma T4 l r: l {{E}}> [1;0] *> r -->* l <* [1;1] {{B}}> r. Proof. es. Qed. |
| 56 | Lemma T5 l r: l {{A}}> [0;1] *> r -->* l <* [0;1] {{E}}> r. Proof. es. Qed. | 58 | Lemma T5 l r: l {{B}}> [0;1] *> r -->* l <* [0;1] {{E}}> r. Proof. es. Qed. |
| 57 | Lemma T6 l r: l {{A}}> [0;0] *> r -->* l <{{D}} [0;1] *> r. Proof. es. Qed. | 59 | Lemma T6 l r: l {{B}}> [0;0] *> r -->* l <{{A}} [0;1] *> r. Proof. es. Qed. |
| 58 | Lemma T7 l r: l <* [1;1] <{{D}} r -->* l <{{D}} [0;0] *> r. Proof. es. Qed. | 60 | Lemma T7 l r: l <* [1;1] <{{A}} r -->* l <{{A}} [0;0] *> r. Proof. es. Qed. |
| 59 | Lemma T8 l r: l <* [1;1;0;1;1] <{{D}} r -->* l <{{C}} [0;0;0;0;1] *> r. Proof. es. Qed. | 61 | Lemma T8 l r: l <* [1;1;0;1;1] <{{A}} r -->* l <{{D}} [0;0;0;0;1] *> r. Proof. es. Qed. |
| 60 | Lemma T9 l: l {{E}}> [1;0;0;1] *> 0inf -->* l <{{C}} [0;0;0] *> [1;0;0;1] *> 0inf. Proof. es. Qed. | 62 | Lemma T9 l: l {{E}}> [1;0;0;1] *> 0inf -->* l <{{D}} [0;0;0] *> [1;0;0;1] *> 0inf. Proof. es. Qed. |
| 61 | Lemma T10 l r: l <* [1;1] <{{C}} r -->* l <{{C}} [0;0] *> r. Proof. es. Qed. | 63 | Lemma T10 l r: l <* [1;1] <{{D}} r -->* l <{{D}} [0;0] *> r. Proof. es. Qed. |
| 62 | Lemma T11 l r: l <* [0] <{{C}} r -->* l <{{D}} [1] *> r. Proof. es. Qed. | 64 | Lemma T11 l r: l <* [0] <{{D}} r -->* l <{{A}} [1] *> r. Proof. es. Qed. |
| 63 | Lemma T12 r: 0inf <* [1;1] <{{D}} r -->* 0inf <* [0;1;1;0;1] {{E}}> r. Proof. es. Qed. | 65 | Lemma T12 r: 0inf <* [1;1] <{{A}} r -->* 0inf <* [0;1;1;0;1] {{E}}> r. Proof. es. Qed. |
| 64 | Lemma T13 l r: l {{E}}> [1;0;1] *> r -->* l <* [0;1;1] {{E}}> r. Proof. es. Qed. | 66 | Lemma T13 l r: l {{E}}> [1;0;1] *> r -->* l <* [0;1;1] {{E}}> r. Proof. es. Qed. |
| 65 | Lemma T14 l r: l <* [1;1;0;1] <{{C}} r -->* l <{{C}} [0;1;0;0] *> r. Proof. es. Qed. | 67 | Lemma T14 l r: l <* [1;1;0;1] <{{D}} r -->* l <{{D}} [0;1;0;0] *> r. Proof. es. Qed. |
| 67 | (* ---------- digit lemmas (write-up section 2.1), mirrored from the parent ---------- *) | 69 | (* ---------- digit lemmas (P section 2.1), the parent's renamed by sigma ---------- *) |
| 68 | Lemma rot01 n (Y : side) : [0;1]^^n *> (0 >> Y) = 0 >> ([1;0]^^n *> Y). | 70 | Lemma rot01 n (Y : side) : [0;1]^^n *> (0 >> Y) = 0 >> ([1;0]^^n *> Y). |
| 69 | Proof. induction n; cbn; [reflexivity|]. rewrite IHn. reflexivity. Qed. | 71 | Proof. induction n; cbn; [reflexivity|]. rewrite IHn. reflexivity. Qed. |
| ⋯ 7 identical lines (template 70–77, ours 72–79) | |||
| 79 | Lemma Lf u v l r: | 81 | Lemma Lf u v l r: |
| 80 | l {{E}}> [1;0]^^(S v) *> [0;0] *> [0;1]^^u *> r -->* | 82 | l {{E}}> [1;0]^^(S v) *> [0;0] *> [0;1]^^u *> r -->* |
| 81 | l <* [1;1] <{{D}} [1;0]^^v *> [0;1]^^(S u) *> r. | 83 | l <* [1;1] <{{A}} [1;0]^^v *> [0;1]^^(S u) *> r. |
| 82 | Proof. follow T4. follow S3. follow T6. follow S2. fin. Qed. | 84 | Proof. follow T4. follow S3. follow T6. follow S2. fin. Qed. |
| 84 | Lemma Rb u v l r: | 86 | Lemma Rb u v l r: |
| 85 | l <* [1;1] <* [1;0]^^v <* [0;1]^^u <* [1;1] <{{D}} r -->* | 87 | l <* [1;1] <* [1;0]^^v <* [0;1]^^u <* [1;1] <{{A}} r -->* |
| 86 | l <* [1;1] <{{D}} [1;0]^^v *> [0;0] *> [0;1]^^u *> r. | 88 | l <* [1;1] <{{A}} [1;0]^^v *> [0;0] *> [0;1]^^u *> r. |
| 87 | Proof. follow S5. follow T7. follow S2. fin. Qed. | 89 | Proof. follow S5. follow T7. follow S2. fin. Qed. |
| 89 | Lemma Ro u v l r: | 91 | Lemma Ro u v l r: |
| 90 | l <* [1;1] <* [1;0]^^v <* [0;1]^^(S u) <{{C}} [0;0;0] *> r -->* | 92 | l <* [1;1] <* [1;0]^^v <* [0;1]^^(S u) <{{D}} [0;0;0] *> r -->* |
| 91 | l <{{C}} [0;0;0] *> [0;1]^^v *> [1;0]^^(S u) *> [0;0] *> r. | 93 | l <{{D}} [0;0;0] *> [0;1]^^v *> [1;0]^^(S u) *> [0;0] *> r. |
| 92 | Proof. follow S1. follow S6. follow T10. fin. Qed. | 94 | Proof. follow S1. follow S6. follow T10. fin. Qed. |
| 94 | (* ---------- the family K and the initial segment (write-up sections 1, 4) ---------- *) | 96 | (* ---------- the family K (P section 1) and the initial segment (write-up section 2) ---------- *) |
| 95 | Inductive dg := d0 (u v : nat) | d1 (u v : nat). | 97 | Inductive dg := d0 (u v : nat) | d1 (u v : nat). |
| 97 | (* right-side lists are nearest-cell first: d0 u v reads (10)^v 00 (01)^u from the head side *) | 99 | (* right-side lists are nearest-cell first: d0 u v reads (10)^v 00 (01)^u from the head side *) |
| ⋯ 11 identical lines (template 98–109, ours 100–111) | |||
| 111 | Definition R0 : side := [1;0;0;1] *> 0inf. | 113 | Definition R0 : side := [1;0;0;1] *> 0inf. |
| 113 | Definition K (ds : list dg) (a b : nat) : Q * tape := | 115 | Definition K (ds : list dg) (a b : nat) : Q * tape := |
| 114 | 0inf <{{C}} [0;1]^^b *> [0;0;0] *> [0;1]^^a *> app_ds R0 ds. | 116 | 0inf <{{D}} [0;1]^^b *> [0;0;0] *> [0;1]^^a *> app_ds R0 ds. |
| 116 | Lemma init: c0 -->* K [d1 1 3] 4 1. | 118 | Lemma init: c0 -->* K [d1 1 9] 8 1. |
| 117 | Proof. unfold K, R0. cbn. solve_init. Qed. | 119 | Proof. unfold K, R0. cbn. solve_init. Qed. |
| 119 | (* ---------- the parent's orientation-free list definitions, verbatim ---------- *) | 121 | (* ---------- the parent's orientation-free list definitions, verbatim ---------- *) |
| 120 | Definition map1 (os : list (nat*nat)) := map (fun '(u,v) => d1 (S u) (S v)) os. | 122 | Definition map1 (os : list (nat*nat)) := map (fun '(u,v) => d1 (S u) (S v)) os. |
| 121 | Definition map0 (os : list (nat*nat)) := map (fun '(u,v) => d0 (S u) v) os. | 123 | Definition map0 (os : list (nat*nat)) := map (fun '(u,v) => d0 (S u) v) os. |
| 123 | (* ---------- the list sweeps (mirrors of the parent's LbS, RbS, RoS) ---------- *) | 125 | (* ---------- the list sweeps (the parent's LbS, RbS, RoS, renamed by sigma) ---------- *) |
| 124 | (* left-side accumulator: what Lb leaves behind for each all-ones digit (u+1,1,v+1) *) | 126 | (* left-side accumulator: what Lb leaves behind for each all-ones digit (u+1,1,v+1) *) |
| 125 | Fixpoint rw (os : list (nat*nat)) (l : side) : side := | 127 | Fixpoint rw (os : list (nat*nat)) (l : side) : side := |
| ⋯ 10 identical lines (template 126–137, ours 128–139) | |||
| 138 | - cbn [map1 map app_ds dr rw]. follow Lb. apply IH. | 140 | - cbn [map1 map app_ds dr rw]. follow Lb. apply IH. |
| 139 | Qed. | 141 | Qed. |
| 141 | Lemma RbS os: forall l r, rw os l <* [1;1] <{{D}} r -->* l <* [1;1] <{{D}} app_ds r (map0 os). | 143 | Lemma RbS os: forall l r, rw os l <* [1;1] <{{A}} r -->* l <* [1;1] <{{A}} app_ds r (map0 os). |
| 142 | Proof. | 144 | Proof. |
| 143 | induction os as [|[u v] t IH]; intros. | 145 | induction os as [|[u v] t IH]; intros. |
| ⋯ 6 identical lines (template 144–150, ours 146–152) | |||
| 151 | | (u,v) :: t => [0;1]^^v *> [1;0]^^(S u) *> [0;0] *> ro_out t r | 153 | | (u,v) :: t => [0;1]^^v *> [1;0]^^(S u) *> [0;0] *> ro_out t r |
| 152 | end. | 154 | end. |
| 154 | Lemma RoS os: forall l r, rw os l <{{C}} [0;0;0] *> r -->* l <{{C}} [0;0;0] *> ro_out os r. | 156 | Lemma RoS os: forall l r, rw os l <{{D}} [0;0;0] *> r -->* l <{{D}} [0;0;0] *> ro_out os r. |
| 155 | Proof. | 157 | Proof. |
| 156 | induction os as [|[u v] t IH]; intros. | 158 | induction os as [|[u v] t IH]; intros. |
| ⋯ 17 identical lines (template 157–176, ours 159–178) | |||
| 177 | - cbn [ro_out Oz app_ds dr]. rewrite <- IH. reflexivity. | 179 | - cbn [ro_out Oz app_ds dr]. rewrite <- IH. reflexivity. |
| 178 | Qed. | 180 | Qed. |
| 180 | (* ---------- edge chunks (mirrors of the parent's chunkA, chunkC, chunkO) ---------- *) | 182 | (* ---------- edge chunks (the parent's chunkA, chunkC, chunkO, renamed by sigma) ---------- *) |
| 181 | (* left-edge chunk shared by M and O: <C (01)^b 000 (01)^a -> (10)^(b+2) 110 (10)^a E> *) | 183 | (* left-edge chunk shared by M and O: <D (01)^b 000 (01)^a -> (10)^(b+2) 110 (10)^a E> *) |
| 182 | Lemma chunkA a b r: | 184 | Lemma chunkA a b r: |
| 183 | 0inf <{{C}} [0;1]^^b *> [0;0;0] *> [0;1]^^a *> r -->+ | 185 | 0inf <{{D}} [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. | 186 | 0inf <* [0;1]^^(S (S b)) <* [0;1;1] <* [0;1]^^a {{E}}> r. |
| 185 | Proof. es. Qed. | 187 | Proof. es. Qed. |
| 187 | (* end of M: (10)^(b+2) 110 (10)^a 11 <D -> <C (01)^(b+2) 000 (01)^(a+1) *) | 189 | (* end of M: (10)^(b+2) 110 (10)^a 11 <A -> <D (01)^(b+2) 000 (01)^(a+1) *) |
| 188 | Lemma chunkC a b r: | 190 | Lemma chunkC a b r: |
| 189 | 0inf <* [0;1]^^(S (S b)) <* [0;1;1] <* [0;1]^^a <* [1;1] <{{D}} r -->* | 191 | 0inf <* [0;1]^^(S (S b)) <* [0;1;1] <* [0;1]^^a <* [1;1] <{{A}} r -->* |
| 190 | 0inf <{{C}} [0;1]^^(S (S b)) *> [0;0;0] *> [0;1]^^(S a) *> r. | 192 | 0inf <{{D}} [0;1]^^(S (S b)) *> [0;0;0] *> [0;1]^^(S a) *> r. |
| 191 | Proof. | 193 | Proof. |
| 192 | follow S5. follow T8. follow S1. fin. | 194 | follow S5. follow T8. follow S1. fin. |
| 193 | Qed. | 195 | Qed. |
| 195 | (* end of O: (10)^(b+2) 110 (10)^(a+1) <C 000 -> <C 01 000 (01)^(b+3) (10)^(a+1) 01 *) | 197 | (* end of O: (10)^(b+2) 110 (10)^(a+1) <D 000 -> <D 01 000 (01)^(b+3) (10)^(a+1) 01 *) |
| 196 | Lemma chunkO a b r: | 198 | Lemma chunkO a b r: |
| 197 | 0inf <* [0;1]^^(S (S b)) <* [0;1;1] <* [0;1]^^(S a) <{{C}} [0;0;0] *> r -->* | 199 | 0inf <* [0;1]^^(S (S b)) <* [0;1;1] <* [0;1]^^(S a) <{{D}} [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. | 200 | 0inf <{{D}} [0;1] *> [0;0;0] *> [0;1]^^(S (S (S b))) *> [1;0]^^(S a) *> [0;1] *> r. |
| 199 | Proof. | 201 | Proof. |
| 200 | follow S1. follow T11. follow S5. follow T12. follow S4. follow T13. follow S4. follow T2. follow S1. follow S1_1. | 202 | follow S1. follow T11. follow S5. follow T12. follow S4. follow T13. follow S4. follow T2. follow S1. follow S1_1. |
| ⋯ 42 identical lines (template 201–245, ours 203–247) | |||
| 246 | apply evstep_refl'. cbn [Oout app_ds dr ro_out]. rewrite <- Ozeq. reflexivity. | 248 | apply evstep_refl'. cbn [Oout app_ds dr ro_out]. rewrite <- Ozeq. reflexivity. |
| 247 | Qed. | 249 | Qed. |
| 249 | (* ================= abstract invariant (write-up section 3) ================= *) | 251 | (* ================= abstract invariant (P section 3) ================= *) |
| 250 | Open Scope nat_scope. | 252 | Open Scope nat_scope. |
| 252 | Definition bof d := match d with d0 _ _ => 0 | d1 _ _ => 1 end. | 254 | Definition bof d := match d with d0 _ _ => 0 | d1 _ _ => 1 end. |
| ⋯ 346 identical lines (template 253–639, ours 255–641) | |||
| 640 | Proof. | 642 | Proof. |
| 641 | eapply multistep_nonhalt; [apply init|]. | 643 | eapply multistep_nonhalt; [apply init|]. |
| 642 | change (K [d1 1 3] 4 1) with (Kc ([d1 1 3], 4, 1)). | 644 | change (K [d1 1 9] 8 1) with (Kc ([d1 1 9], 8, 1)). |
| 643 | apply progress_nonhalt_cond with (P := INV). | 645 | apply progress_nonhalt_cond with (P := INV). |
| 644 | - exact macro_step. | 646 | - exact macro_step. |
| ⋯ 4 identical lines (template 645–650, ours 647–652) | |||
| 651 | ``` | 653 | ``` |
| 652 | 1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA--- | 654 | 1RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB--- |
| 654 | K(d_1 .. d_m; a, b) := 0^inf <C (01)^b 000 (01)^a d~_m .. d~_1 1001 0^inf | 656 | K(d_1 .. d_m; a, b) := 0^inf <D (01)^b 000 (01)^a d~_m .. d~_1 1001 0^inf |
| 655 | digit (u,0,v) := (10)^v 00 (01)^u, (u,1,v) := (10)^v (01)^u (d_m least significant) | 657 | digit (u,0,v) := (10)^v 00 (01)^u, (u,1,v) := (10)^v (01)^u (d_m least significant) |
| 656 | start: 0^inf A> 0^inf -->* K((1,1,3); 4, 1) (step 215) | 658 | start: 0^inf A> 0^inf -->* K((1,1,9); 8, 1) (step 687) |
| 658 | M (j* = last bit-0 digit): | 660 | M (j* = last bit-0 digit): |
| 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) | 661 | 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 660–669, ours 662–671) | |||
| 670 | ``` | 672 | ``` |
| 671 | *) | 673 | *) |
4Proof outlineCheck: the new items (green) carry the argument; the names read like the proof.md rules.
102 items in 1RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB---.v (673 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.
| # | kind | name | statement (no proof body) | line | vs template |
|---|---|---|---|---|---|
| 1 | Definition | tm | Definition tm := Eval compute in (TM_from_str "1RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB---"). | L24 | identicalexcept the TM string |
| 2 | Lemma | S1_1 | Lemma S1_1 l r: l <* [0;1] <{{D}} [] *> r -->* l <{{D}} [] *> [0;1] *> r. | L33 | adapted |
| 3 | Lemma | S2_1 | Lemma S2_1 l r: l <* [1;0] <{{A}} [] *> r -->* l <{{A}} [] *> [1;0] *> r. | L34 | adapted |
| 4 | Lemma | S3_1 | Lemma S3_1 l r: l <* [] {{B}}> [1;0] *> r -->* l <* [1;0] <* [] {{B}}> r. | L35 | adapted |
| 5 | Lemma | S4_1 | Lemma S4_1 l r: l <* [] {{E}}> [0;1] *> r -->* l <* [0;1] <* [] {{E}}> r. | L36 | identical |
| 6 | Lemma | S6_1 | Lemma S6_1 l r: l <* [1;0] <{{D}} [0] *> r -->* l <{{D}} [0] *> [0;1] *> r. | L37 | adapted |
| 7 | Lemma | S5_1 | Lemma S5_1 l r: l <* [0;1] <* [1;1] <{{A}} r -->* l <* [1;1] <{{A}} [0;1] *> r. | L38 | adapted |
| 8 | Definition | S1 | Definition S1 := shift_rule_L _ _ _ _ _ S1_1. | L40 | identical |
| 9 | Definition | S2 | Definition S2 := shift_rule_L _ _ _ _ _ S2_1. | L41 | identical |
| 10 | Definition | S3 | Definition S3 := shift_rule_R _ _ _ _ _ S3_1. | L42 | identical |
| 11 | Definition | S4 | Definition S4 := shift_rule_R _ _ _ _ _ S4_1. | L43 | identical |
| 12 | Definition | S6 | Definition S6 := shift_rule_L _ _ _ _ _ S6_1. | L44 | identical |
| 13 | Lemma | S5 | Lemma S5 n: forall l r, l <* [0;1]^^n <* [1;1] <{{A}} r -->* l <* [1;1] <{{A}} [0;1]^^n *> r. | L46 | adapted |
| 14 | Lemma | T1 | Lemma T1 r: 0inf <{{D}} r -->* 0inf <* [0;1] {{E}}> r. | L54 | adapted |
| 15 | Lemma | T2 | Lemma T2 l r: l {{E}}> [0;0;0] *> r -->* l <{{D}} [0;0;1] *> r. | L55 | adapted |
| 16 | Lemma | T3 | Lemma T3 l r: l {{E}}> [0;0;1] *> r -->* l <* [0;1;1] {{E}}> r. | L56 | identical |
| 17 | Lemma | T4 | Lemma T4 l r: l {{E}}> [1;0] *> r -->* l <* [1;1] {{B}}> r. | L57 | adapted |
| 18 | Lemma | T5 | Lemma T5 l r: l {{B}}> [0;1] *> r -->* l <* [0;1] {{E}}> r. | L58 | adapted |
| 19 | Lemma | T6 | Lemma T6 l r: l {{B}}> [0;0] *> r -->* l <{{A}} [0;1] *> r. | L59 | adapted |
| 20 | Lemma | T7 | Lemma T7 l r: l <* [1;1] <{{A}} r -->* l <{{A}} [0;0] *> r. | L60 | adapted |
| 21 | Lemma | T8 | Lemma T8 l r: l <* [1;1;0;1;1] <{{A}} r -->* l <{{D}} [0;0;0;0;1] *> r. | L61 | adapted |
| 22 | Lemma | T9 | Lemma T9 l: l {{E}}> [1;0;0;1] *> 0inf -->* l <{{D}} [0;0;0] *> [1;0;0;1] *> 0inf. | L62 | adapted |
| 23 | Lemma | T10 | Lemma T10 l r: l <* [1;1] <{{D}} r -->* l <{{D}} [0;0] *> r. | L63 | adapted |
| 24 | Lemma | T11 | Lemma T11 l r: l <* [0] <{{D}} r -->* l <{{A}} [1] *> r. | L64 | adapted |
| 25 | Lemma | T12 | Lemma T12 r: 0inf <* [1;1] <{{A}} r -->* 0inf <* [0;1;1;0;1] {{E}}> r. | L65 | adapted |
| 26 | Lemma | T13 | Lemma T13 l r: l {{E}}> [1;0;1] *> r -->* l <* [0;1;1] {{E}}> r. | L66 | identical |
| 27 | Lemma | T14 | Lemma T14 l r: l <* [1;1;0;1] <{{D}} r -->* l <{{D}} [0;1;0;0] *> r. | L67 | adapted |
| 28 | Lemma | rot01 | Lemma rot01 n (Y : side) : [0;1]^^n *> (0 >> Y) = 0 >> ([1;0]^^n *> Y). | L70 | identical |
| 29 | Lemma | rot10 | Lemma rot10 n (Y : side) : [1;0]^^n *> (1 >> Y) = 1 >> ([0;1]^^n *> Y). | L72 | identical |
| 30 | Lemma | Lb | 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. | L76 | identical |
| 31 | Lemma | Lf | Lemma Lf u v l r:
l {{E}}> [1;0]^^(S v) *> [0;0] *> [0;1]^^u *> r -->*
l <* [1;1] <{{A}} [1;0]^^v *> [0;1]^^(S u) *> r. | L81 | adapted |
| 32 | Lemma | Rb | Lemma Rb u v l r:
l <* [1;1] <* [1;0]^^v <* [0;1]^^u <* [1;1] <{{A}} r -->*
l <* [1;1] <{{A}} [1;0]^^v *> [0;0] *> [0;1]^^u *> r. | L86 | adapted |
| 33 | Lemma | Ro | Lemma Ro u v l r:
l <* [1;1] <* [1;0]^^v <* [0;1]^^(S u) <{{D}} [0;0;0] *> r -->*
l <{{D}} [0;0;0] *> [0;1]^^v *> [1;0]^^(S u) *> [0;0] *> r. | L91 | adapted |
| 34 | Inductive | dg | Inductive dg := d0 (u v : nat) | d1 (u v : nat). | L97 | identical |
| 35 | Definition | dr | 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. | L100 | identical |
| 36 | Fixpoint | app_ds | Fixpoint app_ds (r : side) (ds : list dg) : side := match ds with | [] => r | d :: t => dr d (app_ds r t) end. | L107 | identical |
| 37 | Definition | R0 | Definition R0 : side := [1;0;0;1] *> 0inf. | L113 | identical |
| 38 | Definition | K | Definition K (ds : list dg) (a b : nat) : Q * tape :=
0inf <{{D}} [0;1]^^b *> [0;0;0] *> [0;1]^^a *> app_ds R0 ds. | L115 | adapted |
| 39 | Lemma | init | Lemma init: c0 -->* K [d1 1 9] 8 1. | L118 | adapted |
| 40 | Definition | map1 | Definition map1 (os : list (nat*nat)) := map (fun '(u,v) => d1 (S u) (S v)) os. | L122 | identical |
| 41 | Definition | map0 | Definition map0 (os : list (nat*nat)) := map (fun '(u,v) => d0 (S u) v) os. | L123 | identical |
| 42 | Fixpoint | rw | 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. | L127 | identical |
| 43 | Lemma | app_ds_app | Lemma app_ds_app r xs ys : app_ds r (xs ++ ys) = app_ds (app_ds r ys) xs. | L133 | identical |
| 44 | Lemma | LbS | Lemma LbS os: forall l r, l {{E}}> app_ds r (map1 os) -->* rw os l {{E}}> r. | L136 | identical |
| 45 | Lemma | RbS | Lemma RbS os: forall l r, rw os l <* [1;1] <{{A}} r -->* l <* [1;1] <{{A}} app_ds r (map0 os). | L143 | adapted |
| 46 | Fixpoint | ro_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. | L150 | identical |
| 47 | Lemma | RoS | Lemma RoS os: forall l r, rw os l <{{D}} [0;0;0] *> r -->* l <{{D}} [0;0;0] *> ro_out os r. | L156 | adapted |
| 48 | Fixpoint | Oz | 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. | L163 | identical |
| 49 | Definition | Oout | 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. | L169 | identical |
| 50 | Lemma | Ozeq | Lemma Ozeq t: forall u r, [1;0]^^u *> [0;0] *> ro_out t r = app_ds r (Oz t u). | L175 | identical |
| 51 | Lemma | chunkA | Lemma chunkA a b r:
0inf <{{D}} [0;1]^^b *> [0;0;0] *> [0;1]^^a *> r -->+
0inf <* [0;1]^^(S (S b)) <* [0;1;1] <* [0;1]^^a {{E}}> r. | L184 | adapted |
| 52 | Lemma | chunkC | Lemma chunkC a b r:
0inf <* [0;1]^^(S (S b)) <* [0;1;1] <* [0;1]^^a <* [1;1] <{{A}} r -->*
0inf <{{D}} [0;1]^^(S (S b)) *> [0;0;0] *> [0;1]^^(S a) *> r. | L190 | adapted |
| 53 | Lemma | chunkO | Lemma chunkO a b r:
0inf <* [0;1]^^(S (S b)) <* [0;1;1] <* [0;1]^^(S a) <{{D}} [0;0;0] *> r -->*
0inf <{{D}} [0;1] *> [0;0;0] *> [0;1]^^(S (S (S b))) *> [1;0]^^(S a) *> [0;1] *> r. | L198 | adapted |
| 54 | Lemma | M_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)). | L210 | identical |
| 55 | Lemma | Mdrop_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)). | L224 | identical |
| 56 | Lemma | O_spec | Lemma O_spec os a b: os <> [] -> K (map1 os) (S a) b -->+ K (Oout os (S a)) (S (S (S b))) 1. | L238 | identical |
| 57 | Definition | bof | Definition bof d := match d with d0 _ _ => 0 | d1 _ _ => 1 end. | L254 | identical |
| 58 | Definition | vof | Definition vof d := match d with d0 _ v => v | d1 _ v => v end. | L255 | identical |
| 59 | Fixpoint | Rof | Fixpoint Rof (ds : list dg) : nat := match ds with | [] => 0 | d0 _ _ :: t => 2 * Rof t + 1 | d1 _ _ :: t => 2 * Rof t end. | L258 | identical |
| 60 | Definition | Rd | Definition Rd d r := match d with d0 _ _ => 2*r+1 | d1 _ _ => 2*r end. | L266 | identical |
| 61 | Definition | ub | Definition ub d r := match d with d0 u _ => u + r + 1 | d1 u _ => u + r end. | L267 | identical |
| 62 | Fixpoint | AllD | 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. | L269 | identical |
| 63 | Definition | canon | Definition canon d := match d with d0 _ v => v >= 1 | d1 u v => u >= 1 /\ v >= 1 end. | L275 | identical |
| 64 | Definition | PA | 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). | L277 | identical |
| 65 | Definition | PB | 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). | L279 | identical |
| 66 | Definition | LSBok | Definition LSBok ds := match ds with [] => False | d :: _ => vof d >= Rof ds + 1 end. | L282 | identical |
| 67 | Definition | INV | 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 | L284 | identical |
| 68 | Definition | Kc | Definition Kc (s : list dg * nat * nat) : Q * tape := let '(ds, a, b) := s in K ds a b. | L292 | identical |
| 69 | Lemma | pow2S | Lemma pow2S n : 2^(S n) = 2 * 2^n. | L295 | identical |
| 70 | Lemma | pow2pos | Lemma pow2pos n : 2^n >= 1. | L297 | identical |
| 71 | Lemma | Rof_bound | Lemma Rof_bound ds : Rof ds + 1 <= 2^(length ds). | L300 | identical |
| 72 | Lemma | Rof_map1 | Lemma Rof_map1 os X : Rof (map1 os ++ X) = 2^(length os) * Rof X. | L305 | identical |
| 73 | Lemma | Rof_map1' | Lemma Rof_map1' os : Rof (map1 os) = 0. | L312 | identical |
| 74 | Lemma | len_map1 | Lemma len_map1 os : length (map1 os) = length os. | L315 | identical |
| 75 | Lemma | len_map0 | Lemma len_map0 os : length (map0 os) = length os. | L317 | identical |
| 76 | Lemma | AllD_app | Lemma AllD_app P xs ys : AllD P (xs ++ ys) -> AllD P ys. | L320 | identical |
| 77 | Lemma | AllD_last | Lemma AllD_last P xs d : AllD P (xs ++ [d]) -> P d 0 0. | L323 | identical |
| 78 | Lemma | AllD_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. | L326 | identical |
| 79 | Lemma | decomp | Lemma decomp ds : Forall canon ds -> (exists os, ds = map1 os) \/ (exists os u v rest, ds = map1 os ++ d0 u (S v) :: rest). | L332 | identical |
| 80 | Lemma | F1 | 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 | L346 | identical |
| 81 | Lemma | PA_touch0 | Lemma PA_touch0 u v r p : PA (d0 u (S (S v))) r p -> PA (d1 (S u) (S v)) r p. | L362 | identical |
| 82 | Lemma | PA_touch1 | Lemma PA_touch1 u v r p : PA (d1 (S u) (S v)) (S r) p -> PA (d0 (S u) v) r p. | L366 | identical |
| 83 | Lemma | PB_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. | L370 | identical |
| 84 | Lemma | PB_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. | L374 | identical |
| 85 | Definition | Rel | Definition Rel r ro rn := rn + 1 <= ro /\ ro <= 2 * (rn + 1) /\ (r = 0 -> ro = rn + 1). | L379 | identical |
| 86 | Lemma | PB_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. | L381 | identical |
| 87 | Lemma | PB_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. | L393 | identical |
| 88 | Lemma | F2chain | 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')). | L403 | identical |
| 89 | Lemma | F2 | 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 | L423 | identical |
| 90 | Lemma | Oz_len | Lemma Oz_len t u : length (Oz t u) = S (length t). | L452 | identical |
| 91 | Lemma | Oz_R | Lemma Oz_R t u : Rof (Oz t u) + 1 = 2^(S (length t)). | L455 | identical |
| 92 | Lemma | Oz_AB | Lemma Oz_AB t : forall u, AllD PA (map1 t) -> u mod 2 = 1 -> (t = [] -> u = 1) -> AllD (PB 0) (Oz t u). | L462 | identical |
| 93 | Lemma | Oz_CA | Lemma Oz_CA t : forall u, AllD (PB 1) (map1 t) -> u >= 2^(S (length t)) -> AllD PA (Oz t u). | L476 | identical |
| 94 | Lemma | Rof_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)). | L491 | identical |
| 95 | Lemma | len_M | Lemma len_M os u v w x rest : length (map0 os ++ d1 w x :: rest) = length (map1 os ++ d0 u v :: rest). | L497 | identical |
| 96 | Lemma | LSB_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). | L501 | identical |
| 97 | Lemma | Rof_head1 | Lemma Rof_head1 os X : os <> [] -> Rof (map1 os ++ X) mod 2 = 0. | L508 | identical |
| 98 | Lemma | Rof_head0 | Lemma Rof_head0 os x y rest : Rof (map0 os ++ d0 x y :: rest) mod 2 = 1. | L513 | identical |
| 99 | Lemma | LSB_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). | L516 | identical |
| 100 | Lemma | app_cons_ne | Lemma app_cons_ne {A} (xs : list A) y ys : xs ++ y :: ys <> []. | L525 | identical |
| 101 | Lemma | macro_step | Lemma macro_step s : INV s -> exists s', Kc s -->+ Kc s' /\ INV s'. | L531 | identical |
| 102 | Lemma | nonhalt | Lemma nonhalt: ~halts tm c0. | L641 | adapted |
5What a maintainer readsCheck: the rule table below is what the .v proves, and proof.md / README read cleanly for a maintainer.
- submission/proof.md · informal proof (submitted copy)
- submission/README.md · the package README
- submission/discord.md · Discord draft (not posted)
- submission/parent-proof.md · the parent's proof, as shipped
- proof.md (working copy) · differs from the submitted copy
The rules in busycoq comment style, for this machine:
1RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB--- (= sigma of 1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---, sigma = BCDAEF)
K(d_1 .. d_m; a, b) := 0^inf <D (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,9); 8, 1) (step 687, section 2)
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_j, v_j >= 1 (j > j*), a, b >= 0
if v = 1, the digit (u+1,1,0) drops (re-reading, P section 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
O at m = 0: K(; a, b) --> K((1,1,a); b+3, 1) in 89 + 8a + 20b steps (a >= 1); used only inside the initial segment
We write M_k for an M step with k = m − j* trailing bit-1 digits.
6FamilyCheck: 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.
7ChecklistCheck: every ✓ is computed; the two ○ are yours to decide; an amber ! is an optional check that did not finish.
- ✓Machine string exactthe .v literal == holdout list line 388 byte for byte
- ✓Statement is
~halts tm c0parsed from the .v and confirmed by check_kill (theorem_text, theorem_rocq) - ✓No axioms beyond baseline0 assumption(s); tools/assumptions_baseline.txt allows only functional_extensionality_dep
- ✓coqchk finished (optional)coqchk pass in 1.78 s
- ✓.v hash matches the checked hash.v = checked sha256 f2bc59ed320c…; submission/ copy = checked sha256 f2bc59ed320c…
- ✓No repo-local paths in the .vcomments name no path of ours (vendor/, machines/, tools/, rocq/, scripts/, reports/, atlas/, data/, journal/, /home/); busycoq's own
verify/X.vis fine: none in the .v or the submission/ copy - ✓Public write-up is cleantools/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 L57: - 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 L1: # 1RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB---: delta proof from kill #33 (Checkpoint B)
- proof.md L131: **Done as a scratch check.** `check_proof.py`'s `delta_text` applies exactly these edits (each one asserted to match the expected number of times). `rocq/make_delta.py` writes its output to `rocq/delta_check.v`, and `roc
- proof.md L159: ## 7. Checkpoint B (Dennis)
- ○Family posted together?3 other kill(s) in the family: #11, #33, #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.0 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 1RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB---
Files
machines/<tm>/: 14 entries · raw notes, status, scripts, images
| name | size | changed |
|---|---|---|
| notes.md ↓ | 8.3 KB | 2026-10-10 12:26 |
| proof.md ↓ | 17 KB | 2026-10-10 12:17 |
| how_proved.md ↓ | 1.1 KB | 2026-10-14 10:51 |
| status.json ↓ | 627 B | 2026-10-13 06:44 |
| observe.json ↓ | 12 KB | 2026-10-10 12:15 |
| 1RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB---.v ↓ | 30 KB | 2026-10-12 18:18 |
| img/ | 9 items | 2026-10-16 10:28 |
| rocq/ | 7 items | 2026-10-10 12:23 |
| scripts/ | 2 items | 2026-10-10 12:16 |
| submission/ | 6 items | 2026-10-12 17:49 |
| work/ | 2 items | 2026-10-12 17:33 |
| check_proof.out ↓ | 3.9 KB | 2026-10-10 12:15 |
| check_proof.py ↓ | 35 KB | 2026-10-10 12:14 |
| check_proof_long.out ↓ | 3.9 KB | 2026-10-10 12:16 |
status.json in full
{
"tm": "1RB0LD_1RC0RE_1LD0RE_1LA0LA_1RB1RF_1RB---",
"status": "KILLED_NONHALT",
"stage": "done",
"updated": "2026-10-10",
"reason": "check_kill PASS, independently re-verified",
"parent": "1RB0RE_1LC0RE_1LD0LD_1RA0LC_1RA1RF_1RA---",
"parent_note": "#33; = #11 1RB0LE_1RC0RC_1LD0RB_1LA0LE_1LD1LF_1LD--- mirrored",
"label": "#33b",
"relation": "same transition table as #33 (states renamed), started in a different state; found by the family sweep",
"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"
}



