tools/rebuild_pages.sh rebuilds the site within 5 minutes of a change; by hand: python3 -B tools/site.py.1RB1RF_1LC0LE_1RD0LB_1RA0RC_1RE1LB_0RD---
How we proved it never halts
#3's proof, from a different start
#3 counts a binary number down on a list of pairs of blocks, like an odometer running backward, and its proof is a checklist of inequalities showing that a block only ever runs out where that is harmless. This machine is #3's table with two pairs of state letters swapped, so it is #3 started in state C instead of A. Watching it, you see #3's countdown with one block at the far end of the list a little longer.
What is new is the opening: after 79,114 steps the run reaches the checkpoint #3's argument starts from (#3 gets there after 78,710 steps), except that the last pair has 26 copies of 01 instead of 24, which the checklist allows. From there #3's argument (the nine moves and the checklist, none of which depends on the start) applies unchanged, so it never halts. Side by side, the two runs then make the same move every time, this one with its far block 2 copies longer and a growing number of steps behind. That explains why nothing else changes, but the proof does not rely on it.
The Rocq file is #3's with the state names swapped and a new opening. It replays the 79,114 steps, checks the checklist 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
Same table as #3, different start. Renaming the states by σ = (A C)(B D), with no mirror, gives #3's table. σ is the only one of the 720 × 2 maps that does. The twin starts in A = σ(C), so it runs #3's machine from 0^inf C> 0^inf: a different orbit of the same macro map. (submission/README.md, Mechanism)
- Upstream
- Kill claimed · PR #15merged 2026-10-13 12:25 UTC by ccz181078 ·
Sk1Class2_v1.v · TM1· on Submissions → - Rocq proof
- check_kill PASS · first Oct 10 10:021,308 lines · 63 KB .v · compile 69.8 s · coqchk pass · 0 axioms · PASS Oct 10 10:02 (re-run Oct 10 17:27) · from #3· the .v file
- Automatic review
- 6 of 6 checks passtemplate: #3's kill file (kill 4) (twin: parent kill's .v) · details in Proof →
- Class
- Skelet 1-like Class 2
- On the list
- not on
BB6_holdouts_663.txt(line 273 of the previous list) · historical 740 line 273 - Derived from
1RB0LD_#3 Kill claimed1RC0RA_ 1RD1RF_ 1LA0LE_ 1RE1LD_ 0RB---
Mechanism
What to check here: the pictures show the mechanism that the rule table describes.
Figures
One row per counter decrement, every 4th cell drawn. Watch the vertical and slanted colour edges, and where they kink.
Every step from counter value 12. Compare how far each long sweep reaches over three decrements.
The top-right corner of Fig 1, every cell drawn. Follow purple blocks and blue/orange borders down the rows.
More figures (3)Fig 4–6: Blaze (speed mode), 100M steps · Snapshot every 1M steps, to 1 billion · bbchallenge default view, first 10,000 steps
Sampling every 16th cell turns the pair list into orange/white bands; band edges are pair boundaries.
The same band picture out to 1e9 steps; the left edge grows like sqrt(t).
The site's view: the tape grows mainly to the left; the right end barely moves.
Rules (6/6 validated)exact tape rewrites the proof will formalize, each re-checked by simulation
| rule | from ⟶ to | cases | steps | checked |
|---|---|---|---|---|
| Dec | 0∞ <A (10)h 11001 Π_{i<k}[(10)a_i (01)b_i+1 0010] (10)p (01)q+1 0001 R ⟶ 0∞ <A (10)h+4 11001 Π_{i<k}[(10)a_i+1 (01)b_i 0001] (10)p+1 (01)q 0010 R | k=0..L-1 (borrow chain); b_i>=1, q>=1; any h mod 4; R = remaining pairs + any tail | — | ✓48/48 |
| DecMerge | 0∞ <A (10)h 11001 Π_{i<k}[(10)a_i (01)b_i+1 0010] (10)p (01) 0001 (10)p2 (01)q2 s R ⟶ 0∞ <A (10)h+4 11001 Π_{i<k}[(10)a_i+1 (01)b_i 0001] (10)p+p2+3 (01)q2 s R | q hits 0 on a 1->0 digit: fuse with next pair; last pair fuses into tail: (10)^p (01) 0001 (10)^t 1 -> (10)^(p+t+3) 1 | — | ✓36/36 |
| End | 0∞ <A (10)h 11001 Π_{i<L}[(10)a_i (01)b_i+1 0010] (10)p (01)q+1 0010 0∞ ⟶ 0∞ <A (10)h+4 11001 Π_{i<L}[(10)a_i+1 (01)b_i 0001] (10)p+1 (01)q 0010 101 0∞ | all digits 0, no tail; b_i>=1, q>=1. q=0 (EndLast): last pair becomes tail (10)^(p+4) 1, validated 36/36 | — | ✓36/36 |
| Ov | 0∞ <A (10)h 11001 (10)a_1+1 (01)b_1 0010 Π_{j=2..L}[(10)a_j (01)b_j 0010] (10)t 1 0∞ ⟶ 0∞ <A (10)2 11001 (10)h+5 (01)a_1 0010 Π_{j<L}[(10)b_j (01)a_(j+1) 0001] (10)b_L (01)t+1 0001 0∞ | all digits 0, tail present; a_1>=1; new counter value 2^(L+1)-2 | — | ✓36/36 |
| X1 | 0∞ <A (10)h 11001 (10)a_1+1 (01)b_1 0010 Π_{j=2..L-2}[(10)a_j (01)b_j 0010] (10)a (01) 0010 (10)b (01) 0010 0∞ ⟶ 0∞ <A (10)2 11001 (10)h+5 (01)a_1 0010 Π_{j<L-2}[(10)b_j (01)a_(j+1) 0001] (10)b_(L-2) (01)a 0010 (101)2 (01)b+3 0∞ | End with the last two q = 1 (seen once, step 251,973,021) | — | ✓30/30 |
| X2 | 0∞ <A (10)h 11001 Π_{j<L}[(10)a_j (01)b_j+1 0010] (10)p (01)q+1 0010 (101)2 (01)k 0∞ ⟶ 0∞ <A (10)h+4 11001 Π_{j<L}[(10)a_j+1 (01)b_j 0001] (10)p+1 (01)q 0010 (10)3 (01)k 0001 0∞ | all digits 0 with tail (101)^2(01)^k; returns to the normal family | — | ✓30/30 |
Compressed historythe tape as 0∞ <A (10)h 11001 (10)p1 (01)q1 s(d1) (10)p2 (01)q2 s(d2) ... (10)pL (01)qL s(dL) T 0∞ [s(1)=0001, s(0)=0010; T = '' | (10)t 1 | (101)2 (01)k] at 24 moments: where the rules are read off
| step | h | L | V=sum d_j 2^(j-1) | p1 | q1 | p2 | q2 | pL | qL | T |
|---|---|---|---|---|---|---|---|---|---|---|
| 1,845 | 2 | 2 | 2 | 11 | 11 | 10 | 2 | 10 | 2 | - |
| 4,610 | 2 | 2 | 2 | 23 | 14 | 7 | 16 | 7 | 16 | - |
| 8,319 | 2 | 3 | 6 | 23 | 26 | 10 | 9 | 14 | 2 | - |
| 19,436 | 2 | 3 | 6 | 47 | 32 | 16 | 15 | 4 | 20 | - |
| 34,137 | 2 | 4 | 14 | 47 | 56 | 22 | 21 | 18 | 2 | - |
| 78,710 | 2 | 4 | 14 | 95 | 68 | 34 | 33 | 1 | 24 | - |
| 137,547 | 2 | 5 | 30 | 95 | 116 | 46 | 45 | 22 | 2 | - |
| 276,384 | 2 | 4 | 14 | 159 | 132 | 78 | 65 | 6 | 43 | - |
| 368,693 | 2 | 5 | 30 | 95 | 180 | 110 | 89 | 41 | 2 | - |
| 598,490 | 2 | 5 | 30 | 191 | 140 | 134 | 133 | 3 | 47 | - |
| 868,551 | 2 | 6 | 62 | 191 | 236 | 94 | 157 | 45 | 2 | - |
| 1,637,772 | 2 | 5 | 30 | 383 | 284 | 142 | 141 | 14 | 84 | - |
| 2,053,945 | 2 | 6 | 62 | 191 | 428 | 238 | 165 | 82 | 2 | - |
| 3,050,262 | 2 | 6 | 62 | 383 | 284 | 334 | 285 | 11 | 88 | - |
| 4,178,299 | 2 | 7 | 126 | 383 | 476 | 190 | 381 | 86 | 2 | - |
| 7,335,144 | 2 | 7 | 126 | 767 | 572 | 286 | 285 | 8 | 92 | - |
| 11,309,893 | 2 | 8 | 254 | 767 | 956 | 382 | 381 | 90 | 2 | - |
| 23,109,954 | 2 | 8 | 254 | 1,535 | 1,148 | 574 | 573 | 5 | 96 | - |
| 38,479,639 | 2 | 9 | 510 | 1,535 | 1,916 | 766 | 765 | 94 | 2 | - |
| 84,867,492 | 2 | 9 | 510 | 3,071 | 2,300 | 1,150 | 1,149 | 2 | 100 | - |
| 145,833,457 | 2 | 10 | 1,022 | 3,071 | 3,836 | 1,534 | 1,533 | 98 | 2 | - |
| 252,225,526 | 2 | 9 | 254 | 4,095 | 4,092 | 2,814 | 2,045 | 28 | 63 | (101)^2 (01)^102 [X1] |
| 277,337,206 | 1,022 | 10 | 767 | 4,350 | 3,837 | 2,942 | 1,917 | 3 | 102 | - [X2] |
| 466,254,879 | 2 | 11 | 2,046 | 6,143 | 5,628 | 2,558 | 3,581 | 100 | 2 | - |
hlast 2Llast 11V=sum d_j 2^(j-1)last 2,046p1last 6,143q1last 5,628p2last 2,558q2last 3,581pLlast 100qLlast 2Tlast -Template comparisonSBCv6.v TM21: partly applies · the nearest solved proof, what carries over, and the transitions that differ
| 0 | 1 | |
|---|---|---|
| A | 1RB | 0LD |
| B | 1RC | 0RA |
| C | 1RD | 1RF |
| D | 1LA | 0LE |
| E | 1RE | 1LD |
| F | 0RB | --- |
- file
SBCv6.v:3702- module
TM21- machine
1RB1LB_0LC1RD_0RA1LC_0RB1RE_0RD0LF_---1LE(11 transitions apart)- diff
8 of 11 defined transitions differ under the best state renaming (no mirror); Sk1like_TC_v1/v2 machines differ in 8-9- note
- Same architecture (pair list + counter sweeps + overflow re-pairing + finite tail states = TM21's LIncs/Ov/LH1-3), but not its shapes: from TM21's init config this machine halts in 4,539 steps. Sk1like_TC (eventual cycler via native_compute) doesn't fit.
Proof & checks
Kill 7 · Skelet 1-like Class 2 · the kill file 1RB1RF_1LC0LE_1RD0LB_1RA0RC_1RE1LB_0RD---.v: 1308 lines, 138 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).
1RB1RF_1LC0LE_1RD0LB_1RA0RC_1RE1LB_0RD---sha256 3f1cd822496258de…
| ✓ | 1RB1RF_1LC0LE_1RD0LB_1RA0RC_1RE1LB_0RD---.v | 3f1cd822496258de… = checked |
| ✓ | submission/1RB1RF_1LC0LE_1RD0LB_1RA0RC_1RE1LB_0RD---.v | 3f1cd822496258de… = checked |
All 17 check_kill checks with their one-line results
| ✓ | args | 6x2 machine, framework module Individual62, mode nonhalt |
| ✓ | input | 64076 bytes, 1308 lines, 1484 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 28: TM_from_str "1RB1RF_1LC0LE_1RD0LB_1RA0RC_1RE1LB_0RD---" == <tm> (41 bytes) |
| ✓ | theorem_text | line 1273: nonhalt : ~halts tm c0 |
| ✓ | coq | coqc 8.20.1 ([local working file] |
| ✓ | names | halts, c0, TM_from_str resolved inside Individual62 |
| ✓ | compile | compiled in 69.8s with all appended checks |
| ✓ | tm_rocq | BB6Kill.Candidate.tm = BusyCoq.Individual62.TM_from_str "1RB1RF_1LC0LE_1RD0LB_1RA0RC_1RE1LB_0RD---" by eq_refl (in-file and isolated) |
| ✓ | theorem_rocq | nonhalt : ~ halts (TM_from_str "1RB1RF_1LC0LE_1RD0LB_1RA0RC_1RE1LB_0RD---") 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 (24.7s); its context summary lists nothing of the file's own |
| ✓ | integrity | input sha256 and framework HEAD/cleanliness identical before and after |
2Same machine as #3?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 #3 as the parent (1RB0LD_1RC0RA_1RD1RF_1LA0LE_1RE1LD_0RB---); relation: “twin of #3: #3's table renamed, different start state, nearly identical run”. Everything below is computed from the two machine strings, not read from notes.
✓ Identical to #3's table under the renaming A→C, B→D, C→A, D→B, E→E, F→F (#3's state → this machine's), no mirror. This machine starts in #3's state C (#3 itself starts in A). The only such map.
| #3 | #3's row (read 0, read 1) | σ | predicted row: renamed by σ | this machine's actual row | ||
|---|---|---|---|---|---|---|
| A | 1RB 0LD | → C | 1RD 0LB | 1RD 0LB | ✓ | start of #3 |
| B | 1RC 0RA | → D | 1RA 0RC | 1RA 0RC | ✓ | |
| C | 1RD 1RF | → A | 1RB 1RF | 1RB 1RF | ✓ | start of this machine |
| D | 1LA 0LE | → B | 1LC 0LE | 1LC 0LE | ✓ | |
| E | 1RE 1LD | → E | 1RE 1LB | 1RE 1LB | ✓ | |
| F | 0RB --- | → F | 0RD --- | 0RD --- | ✓ |
Rows aligned by σ: each of #3's states X sits next to this machine's state σ(X). ✓ = the actual row equals #3'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 #3's state C, not A, so the first steps differ; the numbers below read: trajectory twin, so after the start the bands should match line for line.
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)
✓ trajectory twin: within 0.0089% at 1e9 (cells +4, nonzeros +3); the offset stays within 4 at every checkpoint instead of growing
| steps | cells visited (hi − lo + 1) | nonzeros | ||||
|---|---|---|---|---|---|---|
| #3 | this | ratio (Δ) | #3 | this | ratio (Δ) | |
| 1e5 | 672 | 676 | 1.0060 (+4) | 335 | 335 | 1.0000 (+0) |
| 1e6 | 2,260 | 2,264 | 1.0018 (+4) | 1,125 | 1,128 | 1.0027 (+3) |
| 1e7 | 7,443 | 7,447 | 1.0005 (+4) | 3,716 | 3,717 | 1.0003 (+1) |
| 1e8 | 22,096 | 22,100 | 1.0002 (+4) | 11,039 | 11,042 | 1.0003 (+3) |
| 1e9 | 67,343 | 67,347 | 1.0001 (+4) | 33,665 | 33,668 | 1.0001 (+3) |
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:29 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 kill #3's .v (1,303 lines; in #3's own package). A script applied proof.md §5, with no hand edits:
- the TM string;
- a simultaneous σ-swap of the state names in the 14 sweep lemmas and
K({{A}}→{{C}},{{B}}↔{{D}}); init0with (11,13);basewith last pair (1,26), andinit(now 79,114 steps);- the header and rule-table comments.
Every es proof, the macro rules, J, Jstep and J_base are #3's text, unchanged. The file compiled on the first attempt. Apart from the state names, 36 lines differ. The file is 1,307 lines and imports only Individual62 from busycoq. It is a direct proof on the holdout string, with no equivalence lemma.
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:
- loose template vendor/busycoq/verify/SBCv6.v Module TM21 (named in submission/proof.md line 15)
Side-by-side diff: template (1129 lines) vs ours (1129 lines), 42 lines differ; runs of identical lines and long template-only runs folded
| template | ours | ||
|---|---|---|---|
| 18 | From BusyCoq Require Import Individual62. | 23 | From BusyCoq Require Import Individual62. |
| 19 | Require Import Arith Lia List. | 24 | Require Import Arith Lia List. |
| ⋯ 12 identical lines (template 20–37, ours 25–42) | |||
| 38 | During the long rightward sweep a passed pair [p,q+1,0] is left behind as | 43 | During the long rightward sweep a passed pair [p,q+1,0] is left behind as |
| 39 | region (paper) 0 (01)^p 110 (01)^q 11, the 0 being the boundary cell. *) | 44 | region (paper) 0 (01)^p 110 (01)^q 11, the 0 being the boundary cell. *) |
| 41 | Lemma Start h r : 0inf <{{A}} [1;0]^^h *> [1;1;0;0;1] *> r -->+ | 46 | Lemma Start h r : 0inf <{{C}} [1;0]^^h *> [1;1;0;0;1] *> r -->+ |
| 42 | 0inf <* <[1;0]^^(4+h) <* <[1;1;1] <* [0] {{B}}> r. | 47 | 0inf <* <[1;0]^^(4+h) <* <[1;1;1] <* [0] {{D}}> r. |
| 43 | Proof. es. Qed. | 48 | Proof. es. Qed. |
| 45 | Lemma PassR l p q r : l <* [0] {{B}}> [1;0]^^p *> [0;1]^^(S q) *> [0;0;1;0] *> r -->* | 50 | Lemma PassR l p q r : l <* [0] {{D}}> [1;0]^^p *> [0;1]^^(S q) *> [0;0;1;0] *> r -->* |
| 46 | l <* [0] <* <[0;1]^^p <* <[1;1;0] <* <[0;1]^^q <* <[1;1] <* [0] {{B}}> r. | 51 | l <* [0] <* <[0;1]^^p <* <[1;1;0] <* <[0;1]^^q <* <[1;1] <* [0] {{D}}> r. |
| 47 | Proof. es. Qed. | 52 | Proof. es. Qed. |
| 49 | Lemma Borrow l p q r : l {{B}}> [1;0]^^p *> [0;1]^^(S (S q)) *> [0;0;0;1] *> r -->* | 54 | Lemma Borrow l p q r : l {{D}}> [1;0]^^p *> [0;1]^^(S (S q)) *> [0;0;0;1] *> r -->* |
| 50 | l <{{D}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;1;0] *> r. | 55 | l <{{B}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;1;0] *> r. |
| 51 | Proof. es. Qed. | 56 | Proof. es. Qed. |
| 53 | Lemma PassL l p q r : l <* [0] <* <[0;1]^^p <* <[1;1;0] <* <[0;1]^^(S q) <* <[1;1] <* [0] <{{D}} r -->* | 58 | Lemma PassL l p q r : l <* [0] <* <[0;1]^^p <* <[1;1;0] <* <[0;1]^^(S q) <* <[1;1] <* [0] <{{B}} r -->* |
| 54 | l <* [0] <{{D}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;0;1] *> r. | 59 | l <* [0] <{{B}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;0;1] *> r. |
| 55 | Proof. es. Qed. | 60 | Proof. es. Qed. |
| 57 | Lemma EndPh h r : 0inf <* <[1;0]^^(4+h) <* <[1;1;1] <* [0] <{{D}} r -->* | 62 | Lemma EndPh h r : 0inf <* <[1;0]^^(4+h) <* <[1;1;1] <* [0] <{{B}} r -->* |
| 58 | 0inf <{{A}} [1;0]^^(4+h) *> [1;1;0;0;1] *> r. | 63 | 0inf <{{C}} [1;0]^^(4+h) *> [1;1;0;0;1] *> r. |
| 59 | Proof. es. Qed. | 64 | Proof. es. Qed. |
| 61 | Lemma EndT l p q : l <* <[0;1]^^p <* <[1;1;0] <* <[0;1]^^(S q) <* <[1;1] <* [0] {{B}}> 0inf -->* | 66 | Lemma EndT l p q : l <* <[0;1]^^p <* <[1;1;0] <* <[0;1]^^(S q) <* <[1;1] <* [0] {{D}}> 0inf -->* |
| 62 | l <{{D}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;1;0] *> [1;0;1] *> 0inf. | 67 | l <{{B}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;1;0] *> [1;0;1] *> 0inf. |
| 63 | Proof. es. Qed. | 68 | Proof. es. Qed. |
| 65 | Lemma EndLastT l p : l <* <[0;1]^^p <* <[1;1;0] <* <[1;1] <* [0] {{B}}> 0inf -->* | 70 | Lemma EndLastT l p : l <* <[0;1]^^p <* <[1;1;0] <* <[1;1] <* [0] {{D}}> 0inf -->* |
| 66 | l <{{D}} [1;0]^^(p+4) *> [1] *> 0inf. | 71 | l <{{B}} [1;0]^^(p+4) *> [1] *> 0inf. |
| 67 | Proof. es. Qed. | 72 | Proof. es. Qed. |
| 69 | Lemma MergeB l p p' r : l {{B}}> [1;0]^^p *> [0;1] *> [0;0;0;1] *> [1;0]^^p' *> r -->* | 74 | Lemma MergeB l p p' r : l {{D}}> [1;0]^^p *> [0;1] *> [0;0;0;1] *> [1;0]^^p' *> r -->* |
| 70 | l <{{D}} [1;0]^^(p+p'+3) *> r. | 75 | l <{{B}} [1;0]^^(p+p'+3) *> r. |
| 71 | Proof. es. Qed. | 76 | Proof. es. Qed. |
| 73 | Lemma MergeE l p : l {{B}}> [1;0]^^p *> [0;1] *> [0;0;0;1] *> 0inf -->* | 78 | Lemma MergeE l p : l {{D}}> [1;0]^^p *> [0;1] *> [0;0;0;1] *> 0inf -->* |
| 74 | l <{{D}} [1;0]^^(p+2) *> [1] *> 0inf. | 79 | l <{{B}} [1;0]^^(p+2) *> [1] *> 0inf. |
| 75 | Proof. es. Qed. | 80 | Proof. es. Qed. |
| 77 | Lemma OvT l t : l <* [0] {{B}}> [1;0]^^t *> [1] *> 0inf -->* | 82 | Lemma OvT l t : l <* [0] {{D}}> [1;0]^^t *> [1] *> 0inf -->* |
| 78 | l <{{D}} [0;1]^^(S t) *> [0;0;0;1] *> 0inf. | 83 | l <{{B}} [0;1]^^(S t) *> [0;0;0;1] *> 0inf. |
| 79 | Proof. es. Qed. | 84 | Proof. es. Qed. |
| 81 | Lemma OvL l p q r : l <* [0] <* <[0;1]^^(S p) <* <[1;1;0] <* <[0;1]^^q <* <[1;1] <{{D}} r -->* | 86 | Lemma OvL l p q r : l <* [0] <* <[0;1]^^(S p) <* <[1;1;0] <* <[0;1]^^q <* <[1;1] <{{B}} r -->* |
| 82 | l <{{D}} [0;1]^^(S p) *> [0;0;0;1] *> [1;0]^^(S q) *> r. | 87 | l <{{B}} [0;1]^^(S p) *> [0;0;0;1] *> [1;0]^^(S q) *> r. |
| 83 | Proof. es. Qed. | 88 | Proof. es. Qed. |
| 85 | Lemma OvEnd h p r : 0inf <* <[1;0]^^(4+h) <* <[1;1;1] <{{D}} [0;1]^^(S (S p)) *> [0;0;0;1] *> r -->* | 90 | Lemma OvEnd h p r : 0inf <* <[1;0]^^(4+h) <* <[1;1;1] <{{B}} [0;1]^^(S (S p)) *> [0;0;0;1] *> r -->* |
| 86 | 0inf <{{A}} [1;0]^^2 *> [1;1;0;0;1] *> [1;0]^^(h+5) *> [0;1]^^(S p) *> [0;0;1;0] *> r. | 91 | 0inf <{{C}} [1;0]^^2 *> [1;1;0;0;1] *> [1;0]^^(h+5) *> [0;1]^^(S p) *> [0;0;1;0] *> r. |
| 87 | Proof. es. Qed. | 92 | Proof. es. Qed. |
| 89 | Lemma X1Sw l p r : l <* [0] <* <[0;1]^^(S p) <* <[1;1;0] <* <[1;1] <* [0] <{{D}} r -->* | 94 | Lemma X1Sw l p r : l <* [0] <* <[0;1]^^(S p) <* <[1;1;0] <* <[1;1] <* [0] <{{B}} r -->* |
| 90 | l <{{D}} [0;1]^^(S p) *> [0;0;1;0;1;0;1] *> r. | 95 | l <{{B}} [0;1]^^(S p) *> [0;0;1;0;1;0;1] *> r. |
| 91 | Proof. es. Qed. | 96 | Proof. es. Qed. |
| 93 | Lemma X2T l p q k : l <* <[0;1]^^p <* <[1;1;0] <* <[0;1]^^(S q) <* <[1;1] <* [0] {{B}}> [1;0;1;1;0;1] *> [0;1]^^(S k) *> 0inf -->* | 98 | Lemma X2T l p q k : l <* <[0;1]^^p <* <[1;1;0] <* <[0;1]^^(S q) <* <[1;1] <* [0] {{D}}> [1;0;1;1;0;1] *> [0;1]^^(S k) *> 0inf -->* |
| 94 | l <{{D}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;1;0] *> [1;0]^^3 *> [0;1]^^(S k) *> [0;0;0;1] *> 0inf. | 99 | l <{{B}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;1;0] *> [1;0]^^3 *> [0;1]^^(S k) *> [0;0;0;1] *> 0inf. |
| 95 | Proof. es. Qed. | 100 | Proof. es. Qed. |
| 97 | (** * The family K (proof.md section 1) *) | 102 | (** * The family K (proof.md section 1) *) |
| ⋯ 12 identical lines (template 99–113, ours 104–118) | |||
| 114 | end. | 119 | end. |
| 116 | Definition K (h : nat) (P : list (nat*nat*bool)) (T : Tl) : Q * tape := | 121 | Definition K (h : nat) (P : list (nat*nat*bool)) (T : Tl) : Q * tape := |
| 117 | 0inf <{{A}} [1;0]^^h *> [1;1;0;0;1] *> RP P (RT T). | 122 | 0inf <{{C}} [1;0]^^h *> [1;1;0;0;1] *> RP P (RT T). |
| 119 | Definition pre (h : nat) : side := 0inf <* <[1;0]^^(4+h) <* <[1;1;1]. | 124 | Definition pre (h : nat) : side := 0inf <* <[1;0]^^(4+h) <* <[1;1;1]. |
| 121 | (** region left behind by the rightward sweep over pair (p,q,_) *) | 126 | (** region left behind by the rightward sweep over pair (p,q,_) *) |
| ⋯ 25 identical lines (template 122–152, ours 127–157) | |||
| 153 | Qed. | 158 | Qed. |
| 155 | Lemma PassesR Z : Forall okR Z -> forall l r, | 160 | Lemma PassesR Z : Forall okR Z -> forall l r, |
| 156 | l <* [0] {{B}}> RP Z r -->* LP Z l <* [0] {{B}}> r. | 161 | l <* [0] {{D}}> RP Z r -->* LP Z l <* [0] {{D}}> r. |
| 157 | Proof. | 162 | Proof. |
| 158 | induction Z as [|[[p q] d] Z IH]; intros HZ l r; cbn [RP LP]; [finish|]. | 163 | induction Z as [|[[p q] d] Z IH]; intros HZ l r; cbn [RP LP]; [finish|]. |
| ⋯ 4 identical lines (template 159–162, ours 164–167) | |||
| 163 | Qed. | 168 | Qed. |
| 165 | Lemma PassesL Z : Forall okL Z -> forall l r, | 170 | Lemma PassesL Z : Forall okL Z -> forall l r, |
| 166 | LP Z l <* [0] <{{D}} r -->* l <* [0] <{{D}} RP (map touch Z) r. | 171 | LP Z l <* [0] <{{B}} r -->* l <* [0] <{{B}} RP (map touch Z) r. |
| 167 | Proof. | 172 | Proof. |
| 168 | induction Z as [|[[p q] d] Z IH]; intros HZ l r; cbn [RP LP map]; [finish|]. | 173 | induction Z as [|[[p q] d] Z IH]; intros HZ l r; cbn [RP LP map]; [finish|]. |
| ⋯ 4 identical lines (template 169–172, ours 174–177) | |||
| 173 | Qed. | 178 | Qed. |
| 175 | Lemma OvPasses Z : Forall okO Z -> forall l r, | 180 | Lemma OvPasses Z : Forall okO Z -> forall l r, |
| 176 | LP Z l <{{D}} r -->* l <{{D}} OvR Z r. | 181 | LP Z l <{{B}} r -->* l <{{B}} OvR Z r. |
| 177 | Proof. | 182 | Proof. |
| 178 | induction Z as [|[[p q] d] Z IH]; intros HZ l r; cbn [OvR LP]; [finish|]. | 183 | induction Z as [|[[p q] d] Z IH]; intros HZ l r; cbn [OvR LP]; [finish|]. |
| ⋯ 143 identical lines (template 179–338, ours 184–343) | |||
| 339 | cbn [RP sd]. rewrite ovpX_eq. replace (pb+4) with (S (pb+3)) by lia. rewrite tailB_eq. reflexivity. | 344 | cbn [RP sd]. rewrite ovpX_eq. replace (pb+4) with (S (pb+3)) by lia. rewrite tailB_eq. reflexivity. |
| 340 | Qed. | 345 | Qed. |
| 342 | (** * Start (proof.md 3.7): c0 reaches K0 = K(2; (11,11,0); -) in 956 steps, and the base | 347 | (** * Start (proof.md section 2): c0 reaches K0' = K(2; (11,13,0); -) in 1,088 steps, and the |
| 343 | E-start after overflow 6, K(2; (95,68,0),(34,33,1),(10,15,1),(1,24,1); -), in 78,710 steps. | 348 | base E-start after overflow 6, K(2; (95,68,0),(34,33,1),(10,15,1),(1,26,1); -), in 79,114 |
| 344 | Both by direct execution ([esx]); the second takes about 30 s. *) | ||
| 349 | steps. Both by direct execution ([esx]). *) | ||
| 346 | Lemma init0 : c0 -->* K 2 [(11%nat, 11%nat, false)] TN. | 351 | Lemma init0 : c0 -->* K 2 [(11%nat, 13%nat, false)] TN. |
| 347 | Proof. unfold K. cbn [RP RT sd]. esx. Qed. | 352 | Proof. unfold K. cbn [RP RT sd]. esx. Qed. |
| 349 | Definition base : list (nat*nat*bool) := | 354 | Definition base : list (nat*nat*bool) := |
| 350 | [(95%nat, 68%nat, false); (34%nat, 33%nat, true); (10%nat, 15%nat, true); (1%nat, 24%nat, true)]. | 355 | [(95%nat, 68%nat, false); (34%nat, 33%nat, true); (10%nat, 15%nat, true); (1%nat, 26%nat, true)]. |
| 352 | Lemma init : c0 -->* K 2 base TN. | 357 | Lemma init : c0 -->* K 2 base TN. |
| 353 | Proof. unfold K, base. cbn [RP RT sd]. esx. Qed. | 358 | Proof. unfold K, base. cbn [RP RT sd]. esx. Qed. |
| ⋯ 824 identical lines (template 356–1273, ours 361–1278) | |||
| 1275 | (* | 1280 | (* |
| 1276 | ``` | 1281 | ``` |
| 1277 | 1RB0LD_1RC0RA_1RD1RF_1LA0LE_1RE1LD_0RB--- | ||
| 1282 | 1RB1RF_1LC0LE_1RD0LB_1RA0RC_1RE1LB_0RD--- (= sigma of 1RB0LD_1RC0RA_1RD1RF_1LA0LE_1RE1LD_0RB---, sigma = (A C)(B D)) | ||
| 1279 | [p,q,d] := (10)^p (01)^q s(d), s(1) = 0001, s(0) = 0010 [RP] | 1284 | [p,q,d] := (10)^p (01)^q s(d), s(1) = 0001, s(0) = 0010 [RP] |
| 1280 | K(h; P; T) := 0^inf <A (10)^h 11001 [p_1,q_1,d_1] ... [p_L,q_L,d_L] T 0^inf [K] | 1285 | K(h; P; T) := 0^inf <C (10)^h 11001 [p_1,q_1,d_1] ... [p_L,q_L,d_L] T 0^inf [K] |
| 1281 | T in { -, (10)^t 1, (101)^2 (01)^k } [TN, TA t, TB k] | 1286 | T in { -, (10)^t 1, (101)^2 (01)^k } [TN, TA t, TB k] |
| 1282 | k := least j with d_j = 1; Z := pairs 1..k-1 (all d = 0, q >= 2) | 1287 | k := least j with d_j = 1; Z := pairs 1..k-1 (all d = 0, q >= 2) |
| ⋯ 15 identical lines (template 1283–1298, ours 1288–1303) | |||
| 1299 | invariant J (per pair, n = pairs to the right, tv = digit value from the pair up, | 1304 | invariant J (per pair, n = pairs to the right, tv = digit value from the pair up, |
| 1300 | Rt = tv + phase term): see Definitions PN, PI, TC, J; preserved by every rule (Jstep). | 1305 | Rt = tv + phase term): see Definitions PN, PI, TC, J; preserved by every rule (Jstep). |
| 1301 | start: c0 -->(956) K(2; (11,11,0); -) -->(77,754) K(2; (95,68,0),(34,33,1),(10,15,1),(1,24,1); -) | 1306 | start: c0 -->(1,088) K(2; (11,13,0); -) -->(78,026) K(2; (95,68,0),(34,33,1),(10,15,1),(1,26,1); -) |
| 1302 | ``` | 1307 | ``` |
| 1303 | *) | 1308 | *) |
4Proof outlineCheck: the new items (green) carry the argument; the names read like the proof.md rules.
138 items in 1RB1RF_1LC0LE_1RD0LB_1RA0RC_1RE1LB_0RD---.v (1308 lines): 102 Lemma, 25 Definition, 8 Fixpoint, 2 Inductive, 1 Record. 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 "1RB1RF_1LC0LE_1RD0LB_1RA0RC_1RE1LB_0RD---"). | L28 | identicalexcept the TM string |
| 2 | Lemma | ev_eq | Lemma ev_eq {c1 c2 c2'} : c1 -->* c2 -> c2 = c2' -> c1 -->* c2'. | L35 | identical |
| 3 | Lemma | prog_eq | Lemma prog_eq {c1 c2 c2'} : c1 -->+ c2 -> c2 = c2' -> c1 -->+ c2'. | L38 | identical |
| 4 | Lemma | Start | Lemma Start h r : 0inf <{{C}} [1;0]^^h *> [1;1;0;0;1] *> r -->+
0inf <* <[1;0]^^(4+h) <* <[1;1;1] <* [0] {{D}}> r. | L46 | adapted |
| 5 | Lemma | PassR | Lemma PassR l p q r : l <* [0] {{D}}> [1;0]^^p *> [0;1]^^(S q) *> [0;0;1;0] *> r -->*
l <* [0] <* <[0;1]^^p <* <[1;1;0] <* <[0;1]^^q <* <[1;1] <* [0] {{D}}> r. | L50 | adapted |
| 6 | Lemma | Borrow | Lemma Borrow l p q r : l {{D}}> [1;0]^^p *> [0;1]^^(S (S q)) *> [0;0;0;1] *> r -->*
l <{{B}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;1;0] *> r. | L54 | adapted |
| 7 | Lemma | PassL | Lemma PassL l p q r : l <* [0] <* <[0;1]^^p <* <[1;1;0] <* <[0;1]^^(S q) <* <[1;1] <* [0] <{{B}} r -->*
l <* [0] <{{B}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;0;1] *> r. | L58 | adapted |
| 8 | Lemma | EndPh | Lemma EndPh h r : 0inf <* <[1;0]^^(4+h) <* <[1;1;1] <* [0] <{{B}} r -->*
0inf <{{C}} [1;0]^^(4+h) *> [1;1;0;0;1] *> r. | L62 | adapted |
| 9 | Lemma | EndT | Lemma EndT l p q : l <* <[0;1]^^p <* <[1;1;0] <* <[0;1]^^(S q) <* <[1;1] <* [0] {{D}}> 0inf -->*
l <{{B}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;1;0] *> [1;0;1] *> 0inf. | L66 | adapted |
| 10 | Lemma | EndLastT | Lemma EndLastT l p : l <* <[0;1]^^p <* <[1;1;0] <* <[1;1] <* [0] {{D}}> 0inf -->*
l <{{B}} [1;0]^^(p+4) *> [1] *> 0inf. | L70 | adapted |
| 11 | Lemma | MergeB | Lemma MergeB l p p' r : l {{D}}> [1;0]^^p *> [0;1] *> [0;0;0;1] *> [1;0]^^p' *> r -->*
l <{{B}} [1;0]^^(p+p'+3) *> r. | L74 | adapted |
| 12 | Lemma | MergeE | Lemma MergeE l p : l {{D}}> [1;0]^^p *> [0;1] *> [0;0;0;1] *> 0inf -->*
l <{{B}} [1;0]^^(p+2) *> [1] *> 0inf. | L78 | adapted |
| 13 | Lemma | OvT | Lemma OvT l t : l <* [0] {{D}}> [1;0]^^t *> [1] *> 0inf -->*
l <{{B}} [0;1]^^(S t) *> [0;0;0;1] *> 0inf. | L82 | adapted |
| 14 | Lemma | OvL | Lemma OvL l p q r : l <* [0] <* <[0;1]^^(S p) <* <[1;1;0] <* <[0;1]^^q <* <[1;1] <{{B}} r -->*
l <{{B}} [0;1]^^(S p) *> [0;0;0;1] *> [1;0]^^(S q) *> r. | L86 | adapted |
| 15 | Lemma | OvEnd | Lemma OvEnd h p r : 0inf <* <[1;0]^^(4+h) <* <[1;1;1] <{{B}} [0;1]^^(S (S p)) *> [0;0;0;1] *> r -->*
0inf <{{C}} [1;0]^^2 *> [1;1;0;0;1] *> [1;0]^^(h+5) *> [0;1]^^(S p) *> [0;0;1;0] *> r. | L90 | adapted |
| 16 | Lemma | X1Sw | Lemma X1Sw l p r : l <* [0] <* <[0;1]^^(S p) <* <[1;1;0] <* <[1;1] <* [0] <{{B}} r -->*
l <{{B}} [0;1]^^(S p) *> [0;0;1;0;1;0;1] *> r. | L94 | adapted |
| 17 | Lemma | X2T | Lemma X2T l p q k : l <* <[0;1]^^p <* <[1;1;0] <* <[0;1]^^(S q) <* <[1;1] <* [0] {{D}}> [1;0;1;1;0;1] *> [0;1]^^(S k) *> 0inf -->*
l <{{B}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;1;0] *> [1;0]^^3 *> [0;1]^^(S k) *> [0;0;0;1] *> 0inf. | L98 | adapted |
| 18 | Definition | sd | Definition sd (d : bool) : list Sym := if d then [0;0;0;1] else [0;0;1;0]. | L104 | identical |
| 19 | Fixpoint | RP | Fixpoint RP (P : list (nat*nat*bool)) (r : side) : side := match P with | [] => r | (p,q,d) :: P' => [1;0]^^p *> [0;1]^^q *> sd d *> RP P' r end. | L106 | identical |
| 20 | Inductive | Tl | Inductive Tl := TN | TA (t : nat) | TB (k : nat). | L112 | identical |
| 21 | Definition | RT | Definition RT (T : Tl) : side := match T with | TN => 0inf | TA t => [1;0]^^t *> [1] *> 0inf | TB k => [1;0;1;1;0;1] *> [0;1]^^k *> 0inf end. | L114 | identical |
| 22 | Definition | K | Definition K (h : nat) (P : list (nat*nat*bool)) (T : Tl) : Q * tape :=
0inf <{{C}} [1;0]^^h *> [1;1;0;0;1] *> RP P (RT T). | L121 | adapted |
| 23 | Definition | pre | Definition pre (h : nat) : side := 0inf <* <[1;0]^^(4+h) <* <[1;1;1]. | L124 | identical |
| 24 | Definition | reg | Definition reg (p q : nat) (l : side) : side := l <* [0] <* <[0;1]^^p <* <[1;1;0] <* <[0;1]^^(pred q) <* <[1;1]. | L127 | identical |
| 25 | Fixpoint | LP | Fixpoint LP (Z : list (nat*nat*bool)) (l : side) : side := match Z with | [] => l | (p,q,d) :: Z' => LP Z' (reg p q l) end. | L130 | identical |
| 26 | Fixpoint | OvR | Fixpoint OvR (Z : list (nat*nat*bool)) (r : side) : side := match Z with | [] => r | (p,q,d) :: Z' => [0;1]^^p *> [0;0;0;1] *> [1;0]^^q *> OvR Z' r end. | L137 | identical |
| 27 | Definition | touch | Definition touch (x : nat*nat*bool) : nat*nat*bool := let '(p,q,d) := x in (S p, pred q, negb d). | L143 | identical |
| 28 | Definition | okR | Definition okR (x : nat*nat*bool) : Prop := let '(p,q,d) := x in d = false /\ 1 <= q. | L146 | identical |
| 29 | Definition | okL | Definition okL (x : nat*nat*bool) : Prop := let '(p,q,d) := x in d = false /\ 2 <= q. | L147 | identical |
| 30 | Definition | okO | Definition okO (x : nat*nat*bool) : Prop := let '(p,q,d) := x in 1 <= p /\ 1 <= q. | L148 | identical |
| 31 | Lemma | RP_app | Lemma RP_app Z W r : RP (Z ++ W) r = RP Z (RP W r). | L150 | identical |
| 32 | Lemma | LP_app | Lemma LP_app Z W l : LP (Z ++ W) l = LP W (LP Z l). | L155 | identical |
| 33 | Lemma | PassesR | Lemma PassesR Z : Forall okR Z -> forall l r,
l <* [0] {{D}}> RP Z r -->* LP Z l <* [0] {{D}}> r. | L160 | adapted |
| 34 | Lemma | PassesL | Lemma PassesL Z : Forall okL Z -> forall l r,
LP Z l <* [0] <{{B}} r -->* l <* [0] <{{B}} RP (map touch Z) r. | L170 | adapted |
| 35 | Lemma | OvPasses | Lemma OvPasses Z : Forall okO Z -> forall l r,
LP Z l <{{B}} r -->* l <{{B}} OvR Z r. | L180 | adapted |
| 36 | Lemma | okL_R | Lemma okL_R Z : Forall okL Z -> Forall okR Z. | L190 | identical |
| 37 | Lemma | Dec | Lemma Dec h Z p q R T : Forall okL Z -> K h (Z ++ (p, S (S q), true) :: R) T -->+ K (4+h) (map touch Z ++ (S p, S q, false) :: R) T. | L197 | identical |
| 38 | Lemma | DecMerge | Lemma DecMerge h Z p p' q' d' R T : Forall okL Z -> K h (Z ++ (p, 1%nat, true) :: (p', q', d') :: R) T -->+ K (4+h) (map touch Z ++ (p+p'+3, q', d') :: R) T. | L208 | identical |
| 39 | Lemma | DecMergeTail | Lemma DecMergeTail h Z p t : Forall okL Z -> K h (Z ++ [(p, 1%nat, true)]) (TA t) -->+ K (4+h) (map touch Z) (TA (p+t+3)). | L219 | identical |
| 40 | Lemma | DecMergeEmpty | Lemma DecMergeEmpty h Z p : Forall okL Z -> K h (Z ++ [(p, 1%nat, true)]) TN -->+ K (4+h) (map touch Z) (TA (p+2)). | L230 | identical |
| 41 | Lemma | Forall_snoc | Lemma Forall_snoc {A} (P : A -> Prop) Z x : Forall P Z -> P x -> Forall P (Z ++ [x]). | L241 | identical |
| 42 | Lemma | EndR | Lemma EndR h Z p q : Forall okL Z -> K h (Z ++ [(p, S (S q), false)]) TN -->+ K (4+h) (map touch Z ++ [(S p, S q, false)]) (TA 1). | L244 | identical |
| 43 | Lemma | EndLast | Lemma EndLast h Z p : Forall okL Z -> K h (Z ++ [(p, 1%nat, false)]) TN -->+ K (4+h) (map touch Z) (TA (p+4)). | L256 | identical |
| 44 | Lemma | X2 | Lemma X2 h Z p q k : Forall okL Z -> K h (Z ++ [(p, S (S q), false)]) (TB (S k)) -->+ K (4+h) (map touch Z ++ [(S p, S q, false); (3%nat, S k, true)]) TN. | L268 | identical |
| 45 | Fixpoint | ovp | Fixpoint ovp (q : nat) (Z : list (nat*nat*bool)) (t : nat) : list (nat*nat*bool) := match Z with | [] => [(q, S t, true)] | (p',q',_) :: Z' => (q, p', true) :: ovp q' Z' t end. | L281 | identical |
| 46 | Lemma | ovp_eq | Lemma ovp_eq Z : forall q t, RP (ovp q Z t) 0inf = [1;0]^^q *> OvR Z ([0;1]^^(S t) *> [0;0;0;1] *> 0inf). | L287 | identical |
| 47 | Lemma | Ov | Lemma Ov h p1 q1 Z t : 1 <= q1 -> Forall okR Z -> Forall okO Z -> K h ((S (S p1), q1, false) :: Z) (TA t) -->+ K 2 ((h+5, S p1, false) :: ovp q1 Z t) TN. | L293 | identical |
| 48 | Fixpoint | ovpX | Fixpoint ovpX (q : nat) (Z : list (nat*nat*bool)) (pa : nat) : list (nat*nat*bool) := match Z with | [] => [(q, pa, false)] | (p',q',_) :: Z' => (q, p', true) :: ovpX q' Z' pa end. | L308 | identical |
| 49 | Lemma | ovpX_eq | Lemma ovpX_eq Z : forall q pa r, RP (ovpX q Z pa) r = [1;0]^^q *> OvR Z ([0;1]^^pa *> [0;0;1;0] *> r). | L314 | identical |
| 50 | Lemma | tailB_eq | Lemma tailB_eq n : [0;0;1;0;1;0;1] *> [1;0]^^(S n) *> [1] *> 0inf = [0;0;1;0] *> RT (TB n). | L320 | identical |
| 51 | Lemma | X1 | Lemma X1 h p1 q1 Z pa pb : 1 <= q1 -> Forall okR Z -> Forall okO Z -> K h ((S (S p1), q1, false) :: Z ++ [(S pa, 1%nat, false); (pb, 1%nat, false)]) TN -->+ K 2 ((h+5, S p1, false) :: ovpX q1 Z (S pa)) (TB (pb+3)). | L328 | identical |
| 52 | Lemma | init0 | Lemma init0 : c0 -->* K 2 [(11%nat, 13%nat, false)] TN. | L351 | adapted |
| 53 | Definition | base | Definition base : list (nat*nat*bool) := [(95%nat, 68%nat, false); (34%nat, 33%nat, true); (10%nat, 15%nat, true); (1%nat, 26%nat, true)]. | L354 | adapted |
| 54 | Lemma | init | Lemma init : c0 -->* K 2 base TN. | L357 | identical |
| 55 | Definition | bv | Definition bv (d : bool) : nat := if d then 1 else 0. | L369 | identical |
| 56 | Fixpoint | dv | Fixpoint dv (P : list tri) : nat := match P with | [] => 0 | (_,_,d) :: P' => bv d + 2 * dv P' end. | L371 | identical |
| 57 | Definition | dig | Definition dig (x : tri) : bool := let '(_,_,d) := x in d. | L377 | identical |
| 58 | Definition | dig0 | Definition dig0 (x : tri) : Prop := dig x = false. | L378 | identical |
| 59 | Lemma | dv_lt | Lemma dv_lt P : dv P < 2 ^ length P. | L382 | identical |
| 60 | Lemma | dv_zeros | Lemma dv_zeros Z R : Forall dig0 Z -> dv (Z ++ R) = 2 ^ length Z * dv R. | L388 | identical |
| 61 | Lemma | dv_tz | Lemma dv_tz Z R : Forall dig0 Z -> dv (map touch Z ++ R) + 1 = 2 ^ length Z + 2 ^ length Z * dv R. | L395 | identical |
| 62 | Fixpoint | AllI | Fixpoint AllI (Pr : nat -> tri -> list tri -> Prop) (i : nat) (P : list tri) : Prop := match P with | [] => True | x :: Y => Pr i x Y /\ AllI Pr (S i) Y end. | L403 | identical |
| 63 | Lemma | AllI_app | Lemma AllI_app Pr Z : forall i R, AllI Pr i (Z ++ R) -> AllI Pr (i + length Z) R. | L409 | identical |
| 64 | Lemma | AllI_mono | Lemma AllI_mono (Pr Pr' : nat -> tri -> list tri -> Prop) P : forall i, (forall j x Y, i <= j -> Pr j x Y -> Pr' j x Y) -> AllI Pr i P -> AllI Pr' i P. | L416 | identical |
| 65 | Lemma | AllI_shift | Lemma AllI_shift (Pr Pr' : nat -> tri -> list tri -> Prop) P : forall i, (forall j x Y, i <= j -> Pr (S j) x Y -> Pr' j x Y) -> AllI Pr (S i) P -> AllI Pr' i P. | L424 | identical |
| 66 | Lemma | AllI_touchZ | Lemma AllI_touchZ (Pr Pr' : nat -> tri -> list tri -> Prop) R R' : forall Z i, Forall dig0 Z -> (forall j p q Zr, Forall dig0 Zr -> j + S (length Zr) = i + length Z -> Pr j (p,q,false) (Zr ++ R) -> Pr' j (S p, pred q, true) (map touch Zr ++ R')) -> AllI Pr i (Z ++ R) -> AllI Pr' (i + length Z) R' -> AllI Pr' i (map touch Z ++ R'). | L433 | identical |
| 67 | Inductive | phase | Inductive phase := E1 | E2 | E1t | E2t | T0 | L1 | L2 | LX. | L454 | identical |
| 68 | Definition | PN | Definition PN (ph : phase) (c4 : bool) (p q n tv : nat) : Prop :=
match ph with
| E1 => match n with
| 0 => q >= tv + 2 ^ n + 1 /\ p + tv + 2 ^ n >= 3
| S _ => q >= tv + 3 * 2 ^ n + 1 /\ (p + tv) mod 2 = 1 /\ p + tv + 2 ^ n >= 3 * 2 ^ n
end
… +35 lines | L457 | identical |
| 69 | Definition | PI | Definition PI (ph : phase) (h i p q n tv : nat) : Prop :=
match i with
| 1 => h mod 2 = 0 /\
match ph with
| E1 | E1t => 2 <= n /\ p + tv + 2 ^ n + 3 >= 11 * 2 ^ n /\ h + 4 * (tv + 2 ^ n) + 6 >= 12 * 2 ^ n
| E2 | E2t => 2 <= n /\ p + tv + 3 >= 11 * 2 ^ n /\ h + 4 * tv + 6 >= 12 * 2 ^ n
… +14 lines | L500 | identical |
| 70 | Definition | PC | Definition PC (ph : phase) (c4 : bool) (h i p q n tv : nat) : Prop := 1 <= p /\ 1 <= q /\ PN ph c4 p q n tv /\ PI ph h i p q n tv. | L521 | identical |
| 71 | Definition | Lift | Definition Lift (Pr : nat -> nat -> nat -> nat -> nat -> Prop) (i : nat) (x : tri) (Y : list tri) : Prop := let '(p,q,d) := x in Pr i p q (length Y) (dv (x :: Y)). | L524 | identical |
| 72 | Definition | PCx | Definition PCx (ph : phase) (c4 : bool) (h : nat) := Lift (PC ph c4 h). | L527 | identical |
| 73 | Lemma | pow_pos | Lemma pow_pos n : 1 <= 2 ^ n. | L536 | identical |
| 74 | Lemma | ob_touch | Lemma ob_touch ph c4 h i p q n tv : 1 <= tv -> 2 <= q -> PC ph c4 h i p q n tv -> PC ph c4 (4 + h) i (S p) (pred q) n (tv - 1). | L540 | identical |
| 75 | Lemma | pow_S | Lemma pow_S n : 2 ^ S n = 2 * 2 ^ n. | L548 | identical |
| 76 | Lemma | ob_merge | Lemma ob_merge ph c4 h i p q n u U : (ph = L1 \/ ph = L2 \/ ph = LX) -> 1 <= n -> 2 <= u -> u mod 2 = 0 -> U mod 2 = 0 -> U + u <= 2 * 2 ^ n -> (ph = L1 -> U + u <= 2 ^ n) -> (ph = LX -> 2 <= n) -> (ph = L1 -> c4 = true -> 2 <= n) -> (i = 1 -> 2 <= n) -> (ph = LX -> i = 1 -> 3 <= n) -> 2 <= q -> PC ph c4 h i p q (S n) (u + 2 * U) -> PC ph c4 (4 + h) i (S p) (pred q) n (u - 1 + U). | L556 | identical |
| 77 | Lemma | ob_mt | Lemma ob_mt c4 h i p q n : 2 <= q -> (i = 1 -> 1 <= n) -> PC L2 c4 h i p q (S n) (2 * 2 ^ n) -> PC L2 false (4 + h) i (S p) (pred q) n (2 * 2 ^ n - 1). | L572 | identical |
| 78 | Lemma | ob_fuse | Lemma ob_fuse ph c4 h h' k p p' q' n tv : (ph = L1 \/ ph = L2 \/ ph = LX) -> 3 <= k -> PC ph c4 h (S k) p' q' n tv -> PC ph c4 h' k (p + p' + 3) q' n tv. | L581 | identical |
| 79 | Lemma | ob_far | Lemma ob_far ph c4 h h' i j p q n tv : 3 <= i -> 3 <= j -> PC ph c4 h i p q n tv -> PC ph c4 h' j p q n tv. | L590 | identical |
| 80 | Definition | endtr | Definition endtr (ph ph' : phase) : Prop := (ph = E1 /\ ph' = E2) \/ (ph = E1t /\ ph' = E2t). | L598 | identical |
| 81 | Lemma | ob_end | Lemma ob_end ph ph' h i p q n : endtr ph ph' -> 1 <= n -> 2 <= q -> PC ph false h i p q n 0 -> PC ph' false (4 + h) i (S p) (pred q) n (2 ^ n - 1). | L600 | identical |
| 82 | Lemma | ob_end_top | Lemma ob_end_top ph ph' h i p q : endtr ph ph' -> 3 <= i -> PC ph false h i p (S (S q)) 0 0 -> PC ph' false (4 + h) i (S p) (S q) 0 0. | L608 | identical |
| 83 | Lemma | ob_endlast | Lemma ob_endlast c4 h i p q n : 2 <= q -> PC L1 c4 h i p q (S n) 0 -> PC L2 c4 (4 + h) i (S p) (pred q) n (2 * 2 ^ n - 1). | L617 | identical |
| 84 | Lemma | ob_x2 | Lemma ob_x2 h i p q n : 1 <= n -> 2 <= q -> PC T0 false h i p q n 0 -> PC E1t false (4 + h) i (S p) (pred q) (S n) (3 * 2 ^ n - 1). | L626 | identical |
| 85 | Lemma | ob_x2_top | Lemma ob_x2_top h i p q : 3 <= i -> PC T0 false h i p (S (S q)) 0 0 -> PC E1t false (4 + h) i (S p) (S q) 1 2. | L634 | identical |
| 86 | Lemma | ob_x2_new | Lemma ob_x2_new h i k : 3 <= i -> 3 <= k -> PC E1t false h i 3 k 0 1. | L642 | identical |
| 87 | Definition | ovtr | Definition ovtr (ph ph' : phase) (c4' : bool) (Xp : nat -> Prop) : Prop := (ph = E2 /\ ph' = L1 /\ c4' = false /\ Xp = (fun x => x <> 4)) \/ (ph = E2 /\ ph' = LX /\ c4' = false /\ Xp = (fun x => x = 4)) \/ (ph = E2t /\ ph' = L1 /\ c4' = true /\ Xp = (fun _ => True)) \/ (ph = L2 /\ ph' = E1 /\ c4' = false /\ Xp = (fun _ => True)). | L650 | identical |
| 88 | Lemma | ob_ov_head | Lemma ob_ov_head ph ph' c4' Xp h p1 q1 n : ovtr ph ph' c4' Xp -> PC ph false h 1 (S (S p1)) q1 n 0 -> PC ph' c4' 2 1 (h + 5) (S p1) (S n) (2 * (2 * 2 ^ n) - 2). | L656 | identical |
| 89 | Lemma | ob_ov_step | Lemma ob_ov_step ph ph' c4' Xp h i pp q p' q' m : ovtr ph ph' c4' Xp -> 1 <= i -> PC ph false h i pp q (S m) 0 -> PC ph false h (S i) p' q' m 0 -> (m = 0 -> Xp p') -> PC ph' c4' 2 (S i) q p' (S m) (2 * (2 * 2 ^ m) - 1). | L668 | identical |
| 90 | Lemma | ob_ov_base | Lemma ob_ov_base ph ph' c4' Xp h i pp q t : ovtr ph ph' c4' Xp -> 1 <= i -> (ph = L2 -> 2 <= t) -> (ph <> L2 -> t = 1) -> PC ph false h i pp q 0 0 -> PC ph' c4' 2 (S i) q (S t) 0 1. | L684 | identical |
| 91 | Lemma | ob_x1_head | Lemma ob_x1_head h p1 q1 n : PC LX false h 1 (S (S p1)) q1 (S (S n)) 0 -> PC T0 false 2 1 (h + 5) (S p1) (S n) (2 * 2 ^ n - 2). | L696 | identical |
| 92 | Lemma | ob_x1_step | Lemma ob_x1_step h i pp q p' q' m : 1 <= i -> PC LX false h i pp q (S (S (S m))) 0 -> PC LX false h (S i) p' q' (S (S m)) 0 -> PC T0 false 2 (S i) q p' (S m) (2 * 2 ^ m - 1). | L703 | identical |
| 93 | Lemma | ob_x1_base | Lemma ob_x1_base h i pp q pa : 1 <= i -> PC LX false h i pp q 2 0 -> PC LX false h (S i) (S pa) 1 1 0 -> PC T0 false 2 (S i) q (S pa) 0 0. | L711 | identical |
| 94 | Lemma | dv_zero | Lemma dv_zero Z : Forall dig0 Z -> dv Z = 0. | L720 | identical |
| 95 | Lemma | dv_tz' | Lemma dv_tz' Z R : Forall dig0 Z -> dv (map touch Z ++ R) = 2 ^ length Z - 1 + 2 ^ length Z * dv R. | L723 | identical |
| 96 | Lemma | ovp_len | Lemma ovp_len q Z t : length (ovp q Z t) = S (length Z). | L726 | identical |
| 97 | Lemma | ovp_dv | Lemma ovp_dv q Z t : dv (ovp q Z t) + 1 = 2 ^ S (length Z). | L729 | identical |
| 98 | Lemma | ovpX_len | Lemma ovpX_len q Z pa : length (ovpX q Z pa) = S (length Z). | L735 | identical |
| 99 | Lemma | ovpX_dv | Lemma ovpX_dv q Z pa : dv (ovpX q Z pa) + 1 = 2 ^ length Z. | L738 | identical |
| 100 | Fixpoint | lastOK | Fixpoint lastOK (Xp : nat -> Prop) (Z : list tri) : Prop := match Z with | [] => True | [(p,_,_)] => Xp p | _ :: Z' => lastOK Xp Z' end. | L744 | identical |
| 101 | Lemma | lastOK_cons | Lemma lastOK_cons Xp p q d Z : lastOK Xp ((p,q,d) :: Z) -> (Z = [] -> Xp p) /\ lastOK Xp Z. | L751 | identical |
| 102 | Lemma | lastOK_dec | Lemma lastOK_dec Z : lastOK (fun x => x = 4) Z \/ lastOK (fun x => x <> 4) Z. | L754 | identical |
| 103 | Lemma | AllI_ovp | Lemma AllI_ovp ph ph' c4' Xp h t : ovtr ph ph' c4' Xp -> (ph = L2 -> 2 <= t) -> (ph <> L2 -> t = 1) -> forall Z i pp q, 1 <= i -> Forall dig0 Z -> lastOK Xp Z -> PC ph false h i pp q (length Z) 0 -> AllI (PCx ph false h) (S i) Z -> AllI (PCx ph' c4' 2) (S i) (ovp q Z t). | L760 | identical |
| 104 | Lemma | AllI_ovpX | Lemma AllI_ovpX h pa pb : forall Z i pp q, 1 <= i -> Forall dig0 Z -> PC LX false h i pp q (S (S (length Z))) 0 -> AllI (PCx LX false h) (S i) (Z ++ [(S pa, 1, false); (pb, 1, false)]) -> AllI (PCx T0 false 2) (S i) (ovpX q Z (S pa)). | L778 | identical |
| 105 | Lemma | passq | Lemma passq ph c4 h i p q n tv : PC ph c4 h i p q n tv -> 2 <= tv -> tv mod 2 = 0 -> 2 <= q. | L800 | identical |
| 106 | Lemma | Z_okL | Lemma Z_okL ph c4 h : forall Z i x R, Forall dig0 Z -> dig x = true -> AllI (PCx ph c4 h) i (Z ++ x :: R) -> Forall okL Z. | L806 | identical |
| 107 | Lemma | borrow1 | Lemma borrow1 ph c4 h k p n tv : 1 <= k -> tv mod 2 = 1 -> PC ph c4 h k p 1 n tv -> (ph = L1 \/ ph = L2 \/ ph = LX) /\ 3 <= k /\ (ph = L1 -> 1 <= n /\ tv + 1 <= 2 ^ n /\ (c4 = true -> 2 <= n)) /\ (ph = LX -> 2 <= n). | L819 | identical |
| 108 | Lemma | even2 | Lemma even2 x : (2 * x) mod 2 = 0. | L833 | identical |
| 109 | Lemma | pc_len | Lemma pc_len (Pr : nat -> tri -> list tri -> Prop) i P : AllI Pr i P -> True. | L836 | identical |
| 110 | Lemma | inv_Dec | Lemma inv_Dec ph c4 h Z p q R : Forall dig0 Z -> AllI (PCx ph c4 h) 1 (Z ++ (p, S (S q), true) :: R) -> AllI (PCx ph c4 (4 + h)) 1 (map touch Z ++ (S p, S q, false) :: R). | L842 | identical |
| 111 | Lemma | snoc_nn | Lemma snoc_nn (Z : list tri) y : Z ++ [y] <> []. | L863 | identical |
| 112 | Definition | minlen | Definition minlen (ph : phase) : nat := match ph with LX => 3 | L2 => 1 | _ => 2 end. | L866 | identical |
| 113 | Lemma | head_len | Lemma head_len ph c4 h x Y : PCx ph c4 h 1 x Y -> minlen ph <= length Y. | L868 | identical |
| 114 | Lemma | AllI_len | Lemma AllI_len ph c4 h P : P <> [] -> AllI (PCx ph c4 h) 1 P -> S (minlen ph) <= length P. | L874 | identical |
| 115 | Lemma | q2_V0 | Lemma q2_V0 ph c4 h i p q n : PC ph c4 h i p q n 0 -> 1 <= n -> (ph = LX -> 2 <= n) -> 2 <= q. | L879 | identical |
| 116 | Lemma | p1_V0 | Lemma p1_V0 ph c4 h p q n : PC ph c4 h 1 p q n 0 -> (ph = E2 \/ ph = E2t \/ ph = L2 \/ ph = LX) -> 2 <= p. | L885 | identical |
| 117 | Lemma | L2_c4_V0 | Lemma L2_c4_V0 h i p q : PC L2 true h i p q 0 0 -> False. | L891 | identical |
| 118 | Lemma | AllI_okRO | Lemma AllI_okRO ph c4 h : forall Z i, Forall dig0 Z -> AllI (PCx ph c4 h) i Z -> Forall okR Z /\ Forall okO Z. | L894 | identical |
| 119 | Lemma | inv_Merge | Lemma inv_Merge ph c4 h Z p p' q' d' R0 : Forall dig0 Z -> AllI (PCx ph c4 h) 1 (Z ++ (p, 1, true) :: (p', q', d') :: R0) -> AllI (PCx ph c4 (4 + h)) 1 (map touch Z ++ (p + p' + 3, q', d') :: R0). | L902 | identical |
| 120 | Lemma | inv_MT | Lemma inv_MT c4 h Z p : Forall dig0 Z -> AllI (PCx L2 c4 h) 1 (Z ++ [(p, 1, true)]) -> AllI (PCx L2 false (4 + h)) 1 (map touch Z) /\ 2 <= length Z. | L945 | identical |
| 121 | Lemma | inv_End | Lemma inv_End ph ph' h Z p q : endtr ph ph' -> Forall dig0 Z -> AllI (PCx ph false h) 1 (Z ++ [(p, S (S q), false)]) -> AllI (PCx ph' false (4 + h)) 1 (map touch Z ++ [(S p, S q, false)]). | L963 | identical |
| 122 | Lemma | inv_X2 | Lemma inv_X2 h Z p q k : Forall dig0 Z -> 3 <= k -> AllI (PCx T0 false h) 1 (Z ++ [(p, S (S q), false)]) -> AllI (PCx E1t false (4 + h)) 1 (map touch Z ++ [(S p, S q, false); (3, k, true)]). | L985 | identical |
| 123 | Lemma | inv_EndLast | Lemma inv_EndLast c4 h Z p : Forall dig0 Z -> AllI (PCx L1 c4 h) 1 (Z ++ [(p, 1, false)]) -> AllI (PCx L2 c4 (4 + h)) 1 (map touch Z) /\ 2 <= length Z. | L1008 | identical |
| 124 | Lemma | inv_Ov | Lemma inv_Ov ph ph' c4' Xp h p1 q1 Z t : ovtr ph ph' c4' Xp -> (ph = L2 -> 2 <= t) -> (ph <> L2 -> t = 1) -> Forall dig0 Z -> lastOK Xp Z -> AllI (PCx ph false h) 1 ((S (S p1), q1, false) :: Z) -> AllI (PCx ph' c4' 2) 1 ((h + 5, S p1, false) :: ovp q1 Z t). | L1025 | identical |
| 125 | Lemma | inv_X1 | Lemma inv_X1 h p1 q1 Z pa pb : Forall dig0 Z -> AllI (PCx LX false h) 1 ((S (S p1), q1, false) :: Z ++ [(S pa, 1, false); (pb, 1, false)]) -> AllI (PCx T0 false 2) 1 ((h + 5, S p1, false) :: ovpX q1 Z (S pa)). | L1040 | identical |
| 126 | Record | st | Record st := mkst { sh : nat; sP : list (nat*nat*bool); sT : Tl; sph : phase; sc4 : bool }. | L1059 | identical |
| 127 | Definition | Cf | Definition Cf (s : st) : Q * tape := K (sh s) (sP s) (sT s). | L1061 | identical |
| 128 | Definition | TC | Definition TC (ph : phase) (c4 : bool) (T : Tl) : Prop := match ph with | E1 | E1t | LX => T = TN /\ c4 = false | L1 => T = TN | E2 | E2t => T = TA 1 /\ c4 = false | T0 => (exists k, T = TB k /\ 3 <= k) /\ c4 = false … +2 lines | L1063 | identical |
| 129 | Definition | J | Definition J (s : st) : Prop := sP s <> [] /\ TC (sph s) (sc4 s) (sT s) /\ AllI (PCx (sph s) (sc4 s) (sh s)) 1 (sP s). | L1072 | identical |
| 130 | Lemma | split1 | Lemma split1 (P : list tri) : (exists Z x R, P = Z ++ x :: R /\ Forall dig0 Z /\ dig x = true) \/ Forall dig0 P. | L1075 | identical |
| 131 | Lemma | Z_okL_V0 | Lemma Z_okL_V0 ph c4 h y : ph <> LX -> forall Z i, Forall dig0 (Z ++ [y]) -> AllI (PCx ph c4 h) i (Z ++ [y]) -> Forall okL Z. | L1087 | identical |
| 132 | Lemma | lastOK_True | Lemma lastOK_True Z : lastOK (fun _ => True) Z. | L1097 | identical |
| 133 | Lemma | Forall_snoc_inv | Lemma Forall_snoc_inv (Pr : tri -> Prop) Z y : Forall Pr (Z ++ [y]) -> Forall Pr Z /\ Pr y. | L1100 | identical |
| 134 | Lemma | last_pc | Lemma last_pc ph c4 h Z p q d : Forall dig0 (Z ++ [(p,q,d)]) -> AllI (PCx ph c4 h) 1 (Z ++ [(p,q,d)]) -> d = false /\ PC ph c4 h (1 + length Z) p q 0 0. | L1103 | identical |
| 135 | Lemma | first_pc | Lemma first_pc ph c4 h p q d Z : Forall dig0 ((p,q,d) :: Z) -> AllI (PCx ph c4 h) 1 ((p,q,d) :: Z) -> d = false /\ PC ph c4 h 1 p q (length Z) 0 /\ Forall dig0 Z /\ AllI (PCx ph c4 h) 2 Z. | L1111 | identical |
| 136 | Lemma | Jstep | Lemma Jstep : forall s, J s -> exists s', Cf s -->+ Cf s' /\ J s'. | L1121 | identical |
| 137 | Lemma | J_base | Lemma J_base : J (mkst 2 base TN E1 false). | L1267 | identical |
| 138 | Lemma | nonhalt | Lemma nonhalt : ~ halts tm c0. | L1273 | identical |
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 below are in busycoq comment style. They use two abbreviations:
Z := pairs 1..k-1, all with d = 0 and q >= 2
touch (p,q,d) := (p+1, q-1, 1-d)
1RB1RF_1LC0LE_1RD0LB_1RA0RC_1RE1LB_0RD--- (= sigma of 1RB0LD_1RC0RA_1RD1RF_1LA0LE_1RE1LD_0RB---, sigma = (A C)(B D))
[p,q,d] := (10)^p (01)^q s(d), s(1) = 0001, s(0) = 0010
K(h; P; T) := 0^inf <C (10)^h 11001 [p_1,q_1,d_1] ... [p_L,q_L,d_L] T 0^inf, T in { -, (10)^t 1, (101)^2 (01)^k }
Dec K(h; Z ++ (p,q+2,1) :: R; T) -->+ K(h+4; touch Z ++ (p+1,q+1,0) :: R; T)
DecMerge K(h; Z ++ (p,1,1) :: (p',q',d') :: R; T) -->+ K(h+4; touch Z ++ (p+p'+3,q',d') :: R; T)
DecMergeTail K(h; Z ++ [(p,1,1)]; (10)^t 1) -->+ K(h+4; touch Z; (10)^(p+t+3) 1)
DecMergeEmpty K(h; Z ++ [(p,1,1)]; -) -->+ K(h+4; touch Z; (10)^(p+2) 1)
End K(h; Z ++ [(p,q+2,0)]; -) -->+ K(h+4; touch Z ++ [(p+1,q+1,0)]; (10)^1 1)
EndLast K(h; Z ++ [(p,1,0)]; -) -->+ K(h+4; touch Z; (10)^(p+4) 1)
X2 K(h; Z ++ [(p,q+2,0)]; (101)^2 (01)^(k+1)) -->+ K(h+4; touch Z ++ [(p+1,q+1,0); (3,k+1,1)]; -)
Ov K(h; (p1+2,q1,0) :: Y; (10)^t 1) -->+ K(2; (h+5,p1+1,0) :: ovp q1 Y t; -)
X1 K(h; (p1+2,q1,0) :: Y ++ [(pa+1,1,0); (pb,1,0)]; -)
-->+ K(2; (h+5,p1+1,0) :: ovpX q1 Y (pa+1); (101)^2 (01)^(pb+3))
(Ov, X1: Y all d = 0, all p,q >= 1, q1 >= 1)
ovp q [] t = [(q,t+1,1)], ovp q ((p',q',_) :: Y) t = (q,p',1) :: ovp q' Y t
ovpX q [] pa = [(q,pa,0)], ovpX q ((p',q',_) :: Y) pa = (q,p',1) :: ovpX q' Y pa
start: c0 -->(1,088) K(2; (11,13,0); -) -->(78,026) K(2; (95,68,0),(34,33,1),(10,15,1),(1,26,1); -)
6FamilyCheck: related machines are killed together or have a reason to be left open.
4 machines, 4 killed, 0 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.
| who | machine | status | relation to this kill |
|---|---|---|---|
| #3 kill 4 | 1RB0LD_1RC0RA_1RD1RF_1LA0LE_1RE1LD_0RB--- | ✓Killed: never halts | parent link; = #25's table, run from state C; targeting: follow-on to #3; named in #25's .v header; named in #25's proof.md; named in #25's notes.md; named in #3's notes.md · review · compared side by side above · mechanism |
| #25 kill 7 | 1RB1RF_1LC0LE_1RD0LB_1RA0RC_1RE1LB_0RD--- | ✓Killed: never halts | this kill |
| #24 kill 8 | 1RB0RE_1LC0RA_1LD0LB_1LA1LF_1LE1RA_0LC--- | ✓Killed: never halts | = #25's table mirrored, run from state B; named in #24's proof.md; named in #24's notes.md · review |
| #3b kill 12 | 1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA--- | ✓Killed: never halts | = #25's table, run from state D; named in #3b's proof.md · review · mechanism |
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 293 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 24.7 s
- ✓.v hash matches the checked hash.v = checked sha256 3f1cd8224962…; submission/ copy = checked sha256 3f1cd8224962…
- ✓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 L55: - proof.md, a copy with updated title, header (status, AI line, parent pointer), §5 heading and a "Done as planned" paragraph with a delta-to-lemma map, plus a §7 note that no Checkpoint B notes were on file. The working
- notes.md L63: - No Checkpoint 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: # 1RB1RF_1LC0LE_1RD0LB_1RA0RC_1RE1LB_0RD---: delta proof from kill #3 (Checkpoint B)
- proof.md L168: ## 7. Checkpoint B (Dennis)
- ○Family posted together?3 other kill(s) in the family: #3, #24, #3b; the Discord draft names 2 of them
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 1RB1RF_1LC0LE_1RD0LB_1RA0RC_1RE1LB_0RD---
Files
machines/<tm>/: 12 entries · raw notes, status, scripts, images
| name | size | changed |
|---|---|---|
| notes.md ↓ | 6.5 KB | 2026-10-10 10:04 |
| proof.md ↓ | 14 KB | 2026-10-10 09:52 |
| how_proved.md ↓ | 1.2 KB | 2026-10-14 10:51 |
| status.json ↓ | 637 B | 2026-10-13 06:44 |
| 1RB1RF_1LC0LE_1RD0LB_1RA0RC_1RE1LB_0RD---.v ↓ | 63 KB | 2026-10-10 17:25 |
| img/ | 5 items | 2026-10-16 10:29 |
| rocq/ | 6 items | 2026-10-10 10:02 |
| submission/ | 6 items | 2026-10-12 12:47 |
| work/ | 2 items | 2026-10-12 12:41 |
| check_proof.out ↓ | 5.1 KB | 2026-10-10 09:43 |
| check_proof.py ↓ | 20 KB | 2026-10-10 09:42 |
| check_proof_l600.out ↓ | 5.1 KB | 2026-10-10 09:52 |
status.json in full
{
"tm": "1RB1RF_1LC0LE_1RD0LB_1RA0RC_1RE1LB_0RD---",
"status": "KILLED_NONHALT",
"stage": "done",
"updated": "2026-10-10",
"reason": "check_kill PASS, independently re-verified",
"parent": "1RB0LD_1RC0RA_1RD1RF_1LA0LE_1RE1LD_0RB---",
"relation": "twin of #3: #3's table renamed, different start state, nearly identical run",
"pr": "https://github.com/ccz181078/busycoq/pull/15",
"pr_file": "verify/Skelet1LikeC2_1RB1RF.v",
"pr_state": "merged",
"pr_opened": "2026-10-10",
"posted": "2026-10-10 (bbchallenge Discord #bb6, by Dennis)",
"pr_comments": 0,
"pr_merged_at": "2026-10-13T12:25:47Z",
"pr_merged_by": "ccz181078"
}






