tools/rebuild_pages.sh rebuilds the site within 5 minutes of a change; by hand: python3 -B tools/site.py.1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA---
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 four state letters renamed, started in the state that is #3's B instead of A. Watching it, you see the same countdown on a run of its own: the blocks have other lengths, and it is not a copy of #3's run.
Everything in #3's proof that does not depend on the start carries over unchanged: the nine moves, the checklist, and the argument that once the checklist holds at a checkpoint (every second regrouping of the list), it holds again at the next one. What is new is the opening. After 38,732 steps the run reaches a checkpoint with three pairs, the fewest the checklist allows, and every inequality holds there. From then on #3's argument applies, so this machine never halts either.
The Rocq file is #3's with the states renamed and a new opening. It replays the 38,732 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
Kill #3's table renamed (A->D, B->A, C->B, D->C), started in #3's B: same 9 rules, its own orbit, 3-pair base.
Submitted mechanism Same table as #3, different start. Renaming the states by ρ: A→D, B→A, C→B, D→C (E and F fixed, no mirror) gives #3's table. ρ is the only one of the 720 × 2 maps that does. The machine starts in A = ρ(B), so it runs #3's machine from 0^inf B> 0^inf. (submission/README.md, Mechanism)
parent 1RB0LD_1RC0RA_1RD1RF_1LA0LE_1RE1LD_0RB--- (#3; siblings #25, #24)
- Upstream
- Kill claimed · PR #15merged 2026-10-13 12:25 UTC by ccz181078 ·
Sk1Class2_v1.v · TM3· on Submissions → - Rocq proof
- check_kill PASS · first Oct 10 12:261,309 lines · 63 KB .v · compile 51.2 s · coqchk pass · 0 axioms · PASS Oct 10 12:26 (re-run Oct 10 17:03)· 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 2ours: Skelet 1-like Class 2 (sheet) · ours adds: kill #3's table renamed by DABCEF (no mirror), started in #3's state B · high confidence
- On the list
- not on
BB6_holdouts_663.txt(line 568 of the previous list) · historical 740 line 568 - 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.
How it works: 3 notes
- Every transition is #3's under rho = DABCEF (no mirror); the twin's blank run is #3's run from 0^inf B> 0^inf (lockstep 2e6 steps).
- So #3's binary down-counter on (10)^p (01)^q pairs, its 9 macro rules and INV+(e) apply verbatim, with head state D.
- Different orbit, not coupled to #3: base K(2;(47,32,0),(40,33,1),(13,34,1);-) at step 38,732 has 3 pairs (L*=3), not 4.
Figures for Checkpoint A
Bands are pair blocks. Compare with Fig 2: same window, same sampling, same steps.
Kill #3 from its own blank start, drawn exactly like Fig 1. Compare band shapes and the left edge.
One row per new leftmost cell, so roughly 8 rows per decrement. The base is the last rows (step 38,732).
A slice of Fig 3, one row per decrement, every cell drawn. Follow purple blocks and blue/orange borders down.
More figures (1)Fig 5: bbchallenge default view, first 10,000 steps
The site's view: the tape grows to the left; the right end barely moves.
Rules (9/9 validated)exact tape rewrites the proof will formalize, each re-checked by simulation
| rule | from ⟶ to | cases | steps | checked |
|---|---|---|---|---|
| Dec | K(h; Z ++ (p,q+2,1) :: R; T) ⟶ K(h+4; touch Z ++ (p+1,q+1,0) :: R; T) | K(h;P;T) = 0^inf <D (10)^h 11001 [p_1,q_1,d_1]...[p_L,q_L,d_L] T 0^inf, [p,q,d] = (10)^p (01)^q s(d), s(1)=0001, s(0)=0010. Z = pairs below the first d=1, all d=0, q>=2; touch (p,q,d) = (p+1,q-1,1-d). #3's rule with <A read as <D | — | ✓45/45 |
| DecMerge | K(h; Z ++ (p,1,1) :: (p',q',d') :: R; T) ⟶ K(h+4; touch Z ++ (p+p'+3,q',d') :: R; T) | q runs out on the 1->0 digit: fuse with the next pair | — | ✓45/45 |
| DecMergeTail | K(h; Z ++ [(p,1,1)]; (10)t 1) ⟶ K(h+4; touch Z; (10)p+t+3 1) | the last pair runs out into the T1 tail | — | ✓45/45 |
| DecMergeEmpty | K(h; Z ++ [(p,1,1)]; -) ⟶ K(h+4; touch Z; (10)p+2 1) | the last pair runs out, no tail (never on the orbit) | — | ✓45/45 |
| End | K(h; Z ++ [(p,q+2,0)]; -) ⟶ K(h+4; touch Z ++ [(p+1,q+1,0)]; (10)1 1) | V = 0, no tail: adds tail T1(1) | — | ✓45/45 |
| EndLast | K(h; Z ++ [(p,1,0)]; -) ⟶ K(h+4; touch Z; (10)p+4 1) | V = 0, last q = 1: last pair becomes the tail | — | ✓45/45 |
| Ov | K(h; (p1+2,q1,0) :: Y; (10)t 1) ⟶ K(2; (h+5,p1+1,0) :: ovp q1 Y t; -) | V = 0 with tail: re-pairing (q_j, p_{j+1}), one more pair, h back to 2 | — | ✓45/45 |
| 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) | V = 0, last two q = 1: re-pairing with tail T2 | — | ✓45/45 |
| 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)]; -) | V = 0 with tail T2: End-like, appends pair (3,k+1,1) | — | ✓45/45 |
Compressed historythe tape as 0∞ <D (10)2 11001 [p_1,q_1,0] [p_2,q_2,1] ... [p_L,q_L,1] 0∞ (right after each re-pairing) at 26 moments: where the rules are read off
| step | re-pairing | start type | L | p_1 | q_1 | far pair (p,q) |
|---|---|---|---|---|---|---|
| 1,083 | 1 | L-start | 2 | 11 | 7 | (3,2) |
| 3,520 | 2 | E-start | 2 | 23 | 14 | (3,9) |
| 6,965 | 3 | L-start | 3 | 23 | 26 | (7,2) |
| 17,738 | 4 | E-start | 2 | 47 | 32 | (16,30) |
| 23,871 | 5 | L-start | 3 | 23 | 50 | (28,2) |
| 38,732 | 6 | E-start | 3 | 47 | 32 | (13,34) |
| 56,001 | 7 | L-start | 4 | 47 | 56 | (32,2) |
| 104,510 | 8 | E-start | 4 | 95 | 68 | (10,38) |
| 165,915 | 9 | L-start | 5 | 95 | 116 | (36,2) |
| 348,776 | 10 | E-start | 5 | 191 | 140 | (7,42) |
| 587,421 | 11 | L-start | 6 | 191 | 236 | (40,2) |
| 1,309,178 | 12 | E-start | 6 | 383 | 284 | (4,46) |
| 2,258,535 | 13 | L-start | 7 | 383 | 476 | (44,2) |
| 4,972,332 | 14 | E-start | 6 | 735 | 564 | (1,50) |
| 6,548,081 | 15 | L-start | 7 | 383 | 828 | (48,2) |
| 9,588,566 | 16 | E-start | 6 | 639 | 540 | (12,87) |
| 11,389,963 | 17 | L-start | 7 | 383 | 732 | (85,2) |
| 15,570,400 | 18 | E-start | 7 | 767 | 572 | (9,91) |
| 20,220,557 | 19 | L-start | 8 | 767 | 956 | (89,2) |
| 33,046,258 | 20 | E-start | 8 | 1,535 | 1,148 | (6,95) |
| 49,091,351 | 21 | L-start | 9 | 1,535 | 1,916 | (93,2) |
| 91,111,284 | 22 | E-start | 8 | 2,815 | 2,236 | (3,99) |
| 116,290,881 | 23 | L-start | 9 | 1,535 | 3,196 | (97,2) |
| 177,724,646 | 24 | E-start | 8 | 3,071 | 2,300 | (42,340) |
| 208,390,419 | 25 | L-start | 9 | 1,535 | 3,452 | (338,2) |
| 278,407,760 | 26 | E-start | 9 | 3,071 | 2,300 | (39,344) |
re-pairinglast 26start typelast E-startLlast 9p_1last 3,071q_1last 2,300far pair (p,q)last (39,344)Template comparisontemplate: applies · the nearest solved proof, what carries over, and the transitions that differ
| 0 | 1 | |
|---|---|---|
| A | 1RB | 0RD |
| B | 1RC | 1RF |
| C | 1LD | 0LE |
| D | 1RA | 0LC |
| E | 1RE | 1LC |
| F | 0RA | --- |
- file
- —
- module
- —
- machine
1RB0LD_1RC0RA_1RD1RF_1LA0LE_1RE1LD_0RB---(8 transitions apart)- diff
none under rho = DABCEF: all 12 entries equal after renaming states (no mirror); the start state differs (#3's B)- note
- Template = our kill #3's .v (machines/1RB0LD_1RC0RA_1RD1RF_1LA0LE_1RE1LD_0RB---/, sha256 cfa603a3..., check_kill PASS): rename {{A}}->{{D}}, {{B}}->{{A}}, {{D}}->{{C}}; new 38,732-step esx init and 3-pair base; J, Jstep, J_base script verbatim. Same recipe as #25.
Proof strategy & riskshow the formal proof will go · 3 risks to watch
Delta proof (proof.md): Lemma R (renaming) transports #3's rules, INV+(e) and the period theorem; only init and base change. Formal: #3's .v with rho applied to the state names, init = one esx of 38,732 steps to the 3-pair base, J_base by computation. Then tools/check_kill.sh.
- ▲The base has 3 pairs (L* = 3, INV+(e)'s lower edge); the theorem covers it and J holds there, but it is the one structural difference from #3/#25/#24.
- ▲A 38,732-step esx init; #3's 78,710-step one took about 30 s, so this should be fine.
- ▲Discord #bb6 not searched for this string yet; search before posting.
Stats & provenance109 steps simulated · 79,454 cells · the status in full · files
- simulated
- 109 steps
- tape
- 79,454 cells · 39,718 nonzeros
- growth
- left edge ~ t^0.5 (cells -79,241..212 at 1e9; #3: 67,343 cells, 33,665 nonzeros)
- status now
- check_kill PASS, independently re-verified (status.json, 2026-10-10)
- observer's note
- Card for the delta; the live status is in status.json (CHECKPOINT_B: delta proof.md validated by check_proof.py)
- files
- observe.json · notes.md · proof.md · how_proved.md · status.json · 1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA---.v
Proof & checks
Kill 12 · Skelet 1-like Class 2 · the kill file 1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA---.v: 1309 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).
1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA---sha256 3291d99346a113b4…
| ✓ | 1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA---.v | 3291d99346a113b4… = checked |
| ✓ | submission/1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA---.v | 3291d99346a113b4… = checked |
All 17 check_kill checks with their one-line results
| ✓ | args | 6x2 machine, framework module Individual62, mode nonhalt |
| ✓ | input | 64165 bytes, 1309 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 29: TM_from_str "1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA---" == <tm> (41 bytes) |
| ✓ | theorem_text | line 1274: nonhalt : ~halts tm c0 |
| ✓ | coq | coqc 8.20.1 ([local working file] |
| ✓ | names | halts, c0, TM_from_str resolved inside Individual62 |
| ✓ | compile | compiled in 51.2s with all appended checks |
| ✓ | tm_rocq | BB6Kill.Candidate.tm = BusyCoq.Individual62.TM_from_str "1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA---" by eq_refl (in-file and isolated) |
| ✓ | theorem_rocq | nonhalt : ~ halts (TM_from_str "1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA---") 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 (16.9s); 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---); label: “#3b”; relation: “sibling of #3: #3's table renamed, different start state; its run differs (18% wider at 1e9)”; parent_note: “1RB0LD_1RC0RA_1RD1RF_1LA0LE_1RE1LD_0RB--- (#3; siblings #25, #24)”. Everything below is computed from the two machine strings, not read from notes.
✓ Identical to #3's table under the renaming A→D, B→A, C→B, D→C, E→E, F→F (#3's state → this machine's), no mirror. This machine starts in #3's state B (#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 | → D | 1RA 0LC | 1RA 0LC | ✓ | start of #3 |
| B | 1RC 0RA | → A | 1RB 0RD | 1RB 0RD | ✓ | start of this machine |
| C | 1RD 1RF | → B | 1RC 1RF | 1RC 1RF | ✓ | |
| D | 1LA 0LE | → C | 1LD 0LE | 1LD 0LE | ✓ | |
| E | 1RE 1LD | → E | 1RE 1LC | 1RE 1LC | ✓ | |
| F | 0RB --- | → F | 0RA --- | 0RA --- | ✓ |
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 B, 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: 18% wider at 1e9 (79,454 vs 67,343 cells; nonzeros 39,718 vs 33,665); not a fixed offset: the cell gap reaches +12,111
| steps | cells visited (hi − lo + 1) | nonzeros | ||||
|---|---|---|---|---|---|---|
| #3 | this | ratio (Δ) | #3 | this | ratio (Δ) | |
| 1e5 | 672 | 701 | 1.0432 (+29) | 335 | 348 | 1.0388 (+13) |
| 1e6 | 2,260 | 2,199 | 0.9730 (-61) | 1,125 | 1,094 | 0.9724 (-31) |
| 1e7 | 7,443 | 6,962 | 0.9354 (-481) | 3,716 | 3,478 | 0.9360 (-238) |
| 1e8 | 22,096 | 23,626 | 1.0692 (+1,530) | 11,039 | 11,807 | 1.0696 (+768) |
| 1e9 | 67,343 | 79,454 | 1.1798 (+12,111) | 33,665 | 39,718 | 1.1798 (+6,053) |
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; #3 loosely follows busycoq's verify/SBCv6.v, Module TM21). A script applied proof.md §5, with no hand edits to proof scripts:
- the TM string;
- a simultaneous ρ-rename of the state names in the 14 sweep lemmas and
K({{A}}→{{D}},{{B}}→{{A}},{{D}}→{{C}}); init0with (7,4) at 402 steps (a cross-check, not used bynonhalt);- a 3-pair
base, andinit(now 38,732 steps); - the header and rule-table comments.
Every es proof, the macro rules, J, Jstep, J_base and nonhalt are #3's text, unchanged, and the file compiled on the first attempt. After the renaming, 16 of #3's lines differ. The file is 1,309 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 1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA---.v line 9)
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. | 24 | From BusyCoq Require Import Individual62. |
| 19 | Require Import Arith Lia List. | 25 | Require Import Arith Lia List. |
| ⋯ 12 identical lines (template 20–37, ours 26–43) | |||
| 38 | During the long rightward sweep a passed pair [p,q+1,0] is left behind as | 44 | 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. *) | 45 | 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 -->+ | 47 | Lemma Start h r : 0inf <{{D}} [1;0]^^h *> [1;1;0;0;1] *> r -->+ |
| 42 | 0inf <* <[1;0]^^(4+h) <* <[1;1;1] <* [0] {{B}}> r. | 48 | 0inf <* <[1;0]^^(4+h) <* <[1;1;1] <* [0] {{A}}> r. |
| 43 | Proof. es. Qed. | 49 | 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 -->* | 51 | Lemma PassR l p q r : l <* [0] {{A}}> [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. | 52 | l <* [0] <* <[0;1]^^p <* <[1;1;0] <* <[0;1]^^q <* <[1;1] <* [0] {{A}}> r. |
| 47 | Proof. es. Qed. | 53 | 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 -->* | 55 | Lemma Borrow l p q r : l {{A}}> [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. | 56 | l <{{C}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;1;0] *> r. |
| 51 | Proof. es. Qed. | 57 | 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 -->* | 59 | Lemma PassL l p q r : l <* [0] <* <[0;1]^^p <* <[1;1;0] <* <[0;1]^^(S q) <* <[1;1] <* [0] <{{C}} r -->* |
| 54 | l <* [0] <{{D}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;0;1] *> r. | 60 | l <* [0] <{{C}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;0;1] *> r. |
| 55 | Proof. es. Qed. | 61 | Proof. es. Qed. |
| 57 | Lemma EndPh h r : 0inf <* <[1;0]^^(4+h) <* <[1;1;1] <* [0] <{{D}} r -->* | 63 | Lemma EndPh h r : 0inf <* <[1;0]^^(4+h) <* <[1;1;1] <* [0] <{{C}} r -->* |
| 58 | 0inf <{{A}} [1;0]^^(4+h) *> [1;1;0;0;1] *> r. | 64 | 0inf <{{D}} [1;0]^^(4+h) *> [1;1;0;0;1] *> r. |
| 59 | Proof. es. Qed. | 65 | 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 -->* | 67 | Lemma EndT l p q : l <* <[0;1]^^p <* <[1;1;0] <* <[0;1]^^(S q) <* <[1;1] <* [0] {{A}}> 0inf -->* |
| 62 | l <{{D}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;1;0] *> [1;0;1] *> 0inf. | 68 | l <{{C}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;1;0] *> [1;0;1] *> 0inf. |
| 63 | Proof. es. Qed. | 69 | Proof. es. Qed. |
| 65 | Lemma EndLastT l p : l <* <[0;1]^^p <* <[1;1;0] <* <[1;1] <* [0] {{B}}> 0inf -->* | 71 | Lemma EndLastT l p : l <* <[0;1]^^p <* <[1;1;0] <* <[1;1] <* [0] {{A}}> 0inf -->* |
| 66 | l <{{D}} [1;0]^^(p+4) *> [1] *> 0inf. | 72 | l <{{C}} [1;0]^^(p+4) *> [1] *> 0inf. |
| 67 | Proof. es. Qed. | 73 | 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 -->* | 75 | Lemma MergeB l p p' r : l {{A}}> [1;0]^^p *> [0;1] *> [0;0;0;1] *> [1;0]^^p' *> r -->* |
| 70 | l <{{D}} [1;0]^^(p+p'+3) *> r. | 76 | l <{{C}} [1;0]^^(p+p'+3) *> r. |
| 71 | Proof. es. Qed. | 77 | Proof. es. Qed. |
| 73 | Lemma MergeE l p : l {{B}}> [1;0]^^p *> [0;1] *> [0;0;0;1] *> 0inf -->* | 79 | Lemma MergeE l p : l {{A}}> [1;0]^^p *> [0;1] *> [0;0;0;1] *> 0inf -->* |
| 74 | l <{{D}} [1;0]^^(p+2) *> [1] *> 0inf. | 80 | l <{{C}} [1;0]^^(p+2) *> [1] *> 0inf. |
| 75 | Proof. es. Qed. | 81 | Proof. es. Qed. |
| 77 | Lemma OvT l t : l <* [0] {{B}}> [1;0]^^t *> [1] *> 0inf -->* | 83 | Lemma OvT l t : l <* [0] {{A}}> [1;0]^^t *> [1] *> 0inf -->* |
| 78 | l <{{D}} [0;1]^^(S t) *> [0;0;0;1] *> 0inf. | 84 | l <{{C}} [0;1]^^(S t) *> [0;0;0;1] *> 0inf. |
| 79 | Proof. es. Qed. | 85 | 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 -->* | 87 | Lemma OvL l p q r : l <* [0] <* <[0;1]^^(S p) <* <[1;1;0] <* <[0;1]^^q <* <[1;1] <{{C}} r -->* |
| 82 | l <{{D}} [0;1]^^(S p) *> [0;0;0;1] *> [1;0]^^(S q) *> r. | 88 | l <{{C}} [0;1]^^(S p) *> [0;0;0;1] *> [1;0]^^(S q) *> r. |
| 83 | Proof. es. Qed. | 89 | 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 -->* | 91 | Lemma OvEnd h p r : 0inf <* <[1;0]^^(4+h) <* <[1;1;1] <{{C}} [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. | 92 | 0inf <{{D}} [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. | 93 | Proof. es. Qed. |
| 89 | Lemma X1Sw l p r : l <* [0] <* <[0;1]^^(S p) <* <[1;1;0] <* <[1;1] <* [0] <{{D}} r -->* | 95 | Lemma X1Sw l p r : l <* [0] <* <[0;1]^^(S p) <* <[1;1;0] <* <[1;1] <* [0] <{{C}} r -->* |
| 90 | l <{{D}} [0;1]^^(S p) *> [0;0;1;0;1;0;1] *> r. | 96 | l <{{C}} [0;1]^^(S p) *> [0;0;1;0;1;0;1] *> r. |
| 91 | Proof. es. Qed. | 97 | 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 -->* | 99 | Lemma X2T l p q k : l <* <[0;1]^^p <* <[1;1;0] <* <[0;1]^^(S q) <* <[1;1] <* [0] {{A}}> [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. | 100 | l <{{C}} [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. | 101 | Proof. es. Qed. |
| 97 | (** * The family K (proof.md section 1) *) | 103 | (** * The family K (proof.md section 1) *) |
| ⋯ 12 identical lines (template 99–113, ours 105–119) | |||
| 114 | end. | 120 | end. |
| 116 | Definition K (h : nat) (P : list (nat*nat*bool)) (T : Tl) : Q * tape := | 122 | 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). | 123 | 0inf <{{D}} [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]. | 125 | 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,_) *) | 127 | (** region left behind by the rightward sweep over pair (p,q,_) *) |
| ⋯ 25 identical lines (template 122–152, ours 128–158) | |||
| 153 | Qed. | 159 | Qed. |
| 155 | Lemma PassesR Z : Forall okR Z -> forall l r, | 161 | Lemma PassesR Z : Forall okR Z -> forall l r, |
| 156 | l <* [0] {{B}}> RP Z r -->* LP Z l <* [0] {{B}}> r. | 162 | l <* [0] {{A}}> RP Z r -->* LP Z l <* [0] {{A}}> r. |
| 157 | Proof. | 163 | Proof. |
| 158 | induction Z as [|[[p q] d] Z IH]; intros HZ l r; cbn [RP LP]; [finish|]. | 164 | induction Z as [|[[p q] d] Z IH]; intros HZ l r; cbn [RP LP]; [finish|]. |
| ⋯ 4 identical lines (template 159–162, ours 165–168) | |||
| 163 | Qed. | 169 | Qed. |
| 165 | Lemma PassesL Z : Forall okL Z -> forall l r, | 171 | Lemma PassesL Z : Forall okL Z -> forall l r, |
| 166 | LP Z l <* [0] <{{D}} r -->* l <* [0] <{{D}} RP (map touch Z) r. | 172 | LP Z l <* [0] <{{C}} r -->* l <* [0] <{{C}} RP (map touch Z) r. |
| 167 | Proof. | 173 | Proof. |
| 168 | induction Z as [|[[p q] d] Z IH]; intros HZ l r; cbn [RP LP map]; [finish|]. | 174 | induction Z as [|[[p q] d] Z IH]; intros HZ l r; cbn [RP LP map]; [finish|]. |
| ⋯ 4 identical lines (template 169–172, ours 175–178) | |||
| 173 | Qed. | 179 | Qed. |
| 175 | Lemma OvPasses Z : Forall okO Z -> forall l r, | 181 | Lemma OvPasses Z : Forall okO Z -> forall l r, |
| 176 | LP Z l <{{D}} r -->* l <{{D}} OvR Z r. | 182 | LP Z l <{{C}} r -->* l <{{C}} OvR Z r. |
| 177 | Proof. | 183 | Proof. |
| 178 | induction Z as [|[[p q] d] Z IH]; intros HZ l r; cbn [OvR LP]; [finish|]. | 184 | induction Z as [|[[p q] d] Z IH]; intros HZ l r; cbn [OvR LP]; [finish|]. |
| ⋯ 143 identical lines (template 179–338, ours 185–344) | |||
| 339 | cbn [RP sd]. rewrite ovpX_eq. replace (pb+4) with (S (pb+3)) by lia. rewrite tailB_eq. reflexivity. | 345 | cbn [RP sd]. rewrite ovpX_eq. replace (pb+4) with (S (pb+3)) by lia. rewrite tailB_eq. reflexivity. |
| 340 | Qed. | 346 | Qed. |
| 342 | (** * Start (proof.md 3.7): c0 reaches K0 = K(2; (11,11,0); -) in 956 steps, and the base | 348 | (** * Start (proof.md section 2): c0 reaches K0' = K(2; (7,4,0); -) in 402 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. | 349 | base E-start after overflow 6, K(2; (47,32,0),(40,33,1),(13,34,1); -), in 38,732 steps. |
| 344 | Both by direct execution ([esx]); the second takes about 30 s. *) | ||
| 350 | Both by direct execution ([esx]). *) | ||
| 346 | Lemma init0 : c0 -->* K 2 [(11%nat, 11%nat, false)] TN. | 352 | Lemma init0 : c0 -->* K 2 [(7%nat, 4%nat, false)] TN. |
| 347 | Proof. unfold K. cbn [RP RT sd]. esx. Qed. | 353 | Proof. unfold K. cbn [RP RT sd]. esx. Qed. |
| 349 | Definition base : list (nat*nat*bool) := | 355 | 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)]. | 356 | [(47%nat, 32%nat, false); (40%nat, 33%nat, true); (13%nat, 34%nat, true)]. |
| 352 | Lemma init : c0 -->* K 2 base TN. | 358 | Lemma init : c0 -->* K 2 base TN. |
| 353 | Proof. unfold K, base. cbn [RP RT sd]. esx. Qed. | 359 | Proof. unfold K, base. cbn [RP RT sd]. esx. Qed. |
| ⋯ 824 identical lines (template 356–1273, ours 362–1279) | |||
| 1275 | (* | 1281 | (* |
| 1276 | ``` | 1282 | ``` |
| 1277 | 1RB0LD_1RC0RA_1RD1RF_1LA0LE_1RE1LD_0RB--- | ||
| 1283 | 1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA--- (= rho of 1RB0LD_1RC0RA_1RD1RF_1LA0LE_1RE1LD_0RB---, rho: A->D, B->A, C->B, D->C) | ||
| 1279 | [p,q,d] := (10)^p (01)^q s(d), s(1) = 0001, s(0) = 0010 [RP] | 1285 | [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] | 1286 | K(h; P; T) := 0^inf <D (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] | 1287 | 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) | 1288 | k := least j with d_j = 1; Z := pairs 1..k-1 (all d = 0, q >= 2) |
| ⋯ 15 identical lines (template 1283–1298, ours 1289–1304) | |||
| 1299 | invariant J (per pair, n = pairs to the right, tv = digit value from the pair up, | 1305 | 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). | 1306 | 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); -) | 1307 | start: c0 -->(402) K(2; (7,4,0); -) -->(38,330) K(2; (47,32,0),(40,33,1),(13,34,1); -) |
| 1302 | ``` | 1308 | ``` |
| 1303 | *) | 1309 | *) |
4Proof outlineCheck: the new items (green) carry the argument; the names read like the proof.md rules.
138 items in 1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA---.v (1309 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 "1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA---"). | L29 | identicalexcept the TM string |
| 2 | Lemma | ev_eq | Lemma ev_eq {c1 c2 c2'} : c1 -->* c2 -> c2 = c2' -> c1 -->* c2'. | L36 | identical |
| 3 | Lemma | prog_eq | Lemma prog_eq {c1 c2 c2'} : c1 -->+ c2 -> c2 = c2' -> c1 -->+ c2'. | L39 | identical |
| 4 | Lemma | Start | Lemma Start h r : 0inf <{{D}} [1;0]^^h *> [1;1;0;0;1] *> r -->+
0inf <* <[1;0]^^(4+h) <* <[1;1;1] <* [0] {{A}}> r. | L47 | adapted |
| 5 | Lemma | PassR | Lemma PassR l p q r : l <* [0] {{A}}> [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] {{A}}> r. | L51 | adapted |
| 6 | Lemma | Borrow | Lemma Borrow l p q r : l {{A}}> [1;0]^^p *> [0;1]^^(S (S q)) *> [0;0;0;1] *> r -->*
l <{{C}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;1;0] *> r. | L55 | 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] <{{C}} r -->*
l <* [0] <{{C}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;0;1] *> r. | L59 | adapted |
| 8 | Lemma | EndPh | Lemma EndPh h r : 0inf <* <[1;0]^^(4+h) <* <[1;1;1] <* [0] <{{C}} r -->*
0inf <{{D}} [1;0]^^(4+h) *> [1;1;0;0;1] *> r. | L63 | adapted |
| 9 | Lemma | EndT | Lemma EndT l p q : l <* <[0;1]^^p <* <[1;1;0] <* <[0;1]^^(S q) <* <[1;1] <* [0] {{A}}> 0inf -->*
l <{{C}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;1;0] *> [1;0;1] *> 0inf. | L67 | adapted |
| 10 | Lemma | EndLastT | Lemma EndLastT l p : l <* <[0;1]^^p <* <[1;1;0] <* <[1;1] <* [0] {{A}}> 0inf -->*
l <{{C}} [1;0]^^(p+4) *> [1] *> 0inf. | L71 | adapted |
| 11 | Lemma | MergeB | Lemma MergeB l p p' r : l {{A}}> [1;0]^^p *> [0;1] *> [0;0;0;1] *> [1;0]^^p' *> r -->*
l <{{C}} [1;0]^^(p+p'+3) *> r. | L75 | adapted |
| 12 | Lemma | MergeE | Lemma MergeE l p : l {{A}}> [1;0]^^p *> [0;1] *> [0;0;0;1] *> 0inf -->*
l <{{C}} [1;0]^^(p+2) *> [1] *> 0inf. | L79 | adapted |
| 13 | Lemma | OvT | Lemma OvT l t : l <* [0] {{A}}> [1;0]^^t *> [1] *> 0inf -->*
l <{{C}} [0;1]^^(S t) *> [0;0;0;1] *> 0inf. | L83 | adapted |
| 14 | Lemma | OvL | Lemma OvL l p q r : l <* [0] <* <[0;1]^^(S p) <* <[1;1;0] <* <[0;1]^^q <* <[1;1] <{{C}} r -->*
l <{{C}} [0;1]^^(S p) *> [0;0;0;1] *> [1;0]^^(S q) *> r. | L87 | adapted |
| 15 | Lemma | OvEnd | Lemma OvEnd h p r : 0inf <* <[1;0]^^(4+h) <* <[1;1;1] <{{C}} [0;1]^^(S (S p)) *> [0;0;0;1] *> r -->*
0inf <{{D}} [1;0]^^2 *> [1;1;0;0;1] *> [1;0]^^(h+5) *> [0;1]^^(S p) *> [0;0;1;0] *> r. | L91 | adapted |
| 16 | Lemma | X1Sw | Lemma X1Sw l p r : l <* [0] <* <[0;1]^^(S p) <* <[1;1;0] <* <[1;1] <* [0] <{{C}} r -->*
l <{{C}} [0;1]^^(S p) *> [0;0;1;0;1;0;1] *> r. | L95 | adapted |
| 17 | Lemma | X2T | Lemma X2T l p q k : l <* <[0;1]^^p <* <[1;1;0] <* <[0;1]^^(S q) <* <[1;1] <* [0] {{A}}> [1;0;1;1;0;1] *> [0;1]^^(S k) *> 0inf -->*
l <{{C}} [1;0]^^(S p) *> [0;1]^^(S q) *> [0;0;1;0] *> [1;0]^^3 *> [0;1]^^(S k) *> [0;0;0;1] *> 0inf. | L99 | adapted |
| 18 | Definition | sd | Definition sd (d : bool) : list Sym := if d then [0;0;0;1] else [0;0;1;0]. | L105 | 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. | L107 | identical |
| 20 | Inductive | Tl | Inductive Tl := TN | TA (t : nat) | TB (k : nat). | L113 | 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. | L115 | identical |
| 22 | Definition | K | Definition K (h : nat) (P : list (nat*nat*bool)) (T : Tl) : Q * tape :=
0inf <{{D}} [1;0]^^h *> [1;1;0;0;1] *> RP P (RT T). | L122 | adapted |
| 23 | Definition | pre | Definition pre (h : nat) : side := 0inf <* <[1;0]^^(4+h) <* <[1;1;1]. | L125 | 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]. | L128 | 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. | L131 | 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. | L138 | 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). | L144 | identical |
| 28 | Definition | okR | Definition okR (x : nat*nat*bool) : Prop := let '(p,q,d) := x in d = false /\ 1 <= q. | L147 | identical |
| 29 | Definition | okL | Definition okL (x : nat*nat*bool) : Prop := let '(p,q,d) := x in d = false /\ 2 <= q. | L148 | identical |
| 30 | Definition | okO | Definition okO (x : nat*nat*bool) : Prop := let '(p,q,d) := x in 1 <= p /\ 1 <= q. | L149 | identical |
| 31 | Lemma | RP_app | Lemma RP_app Z W r : RP (Z ++ W) r = RP Z (RP W r). | L151 | identical |
| 32 | Lemma | LP_app | Lemma LP_app Z W l : LP (Z ++ W) l = LP W (LP Z l). | L156 | identical |
| 33 | Lemma | PassesR | Lemma PassesR Z : Forall okR Z -> forall l r,
l <* [0] {{A}}> RP Z r -->* LP Z l <* [0] {{A}}> r. | L161 | adapted |
| 34 | Lemma | PassesL | Lemma PassesL Z : Forall okL Z -> forall l r,
LP Z l <* [0] <{{C}} r -->* l <* [0] <{{C}} RP (map touch Z) r. | L171 | adapted |
| 35 | Lemma | OvPasses | Lemma OvPasses Z : Forall okO Z -> forall l r,
LP Z l <{{C}} r -->* l <{{C}} OvR Z r. | L181 | adapted |
| 36 | Lemma | okL_R | Lemma okL_R Z : Forall okL Z -> Forall okR Z. | L191 | 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. | L198 | 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. | L209 | 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)). | L220 | 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)). | L231 | identical |
| 41 | Lemma | Forall_snoc | Lemma Forall_snoc {A} (P : A -> Prop) Z x : Forall P Z -> P x -> Forall P (Z ++ [x]). | L242 | 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). | L245 | 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)). | L257 | 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. | L269 | 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. | L282 | 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). | L288 | 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. | L294 | 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. | L309 | 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). | L315 | 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). | L321 | 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)). | L329 | identical |
| 52 | Lemma | init0 | Lemma init0 : c0 -->* K 2 [(7%nat, 4%nat, false)] TN. | L352 | adapted |
| 53 | Definition | base | Definition base : list (nat*nat*bool) := [(47%nat, 32%nat, false); (40%nat, 33%nat, true); (13%nat, 34%nat, true)]. | L355 | adapted |
| 54 | Lemma | init | Lemma init : c0 -->* K 2 base TN. | L358 | identical |
| 55 | Definition | bv | Definition bv (d : bool) : nat := if d then 1 else 0. | L370 | identical |
| 56 | Fixpoint | dv | Fixpoint dv (P : list tri) : nat := match P with | [] => 0 | (_,_,d) :: P' => bv d + 2 * dv P' end. | L372 | identical |
| 57 | Definition | dig | Definition dig (x : tri) : bool := let '(_,_,d) := x in d. | L378 | identical |
| 58 | Definition | dig0 | Definition dig0 (x : tri) : Prop := dig x = false. | L379 | identical |
| 59 | Lemma | dv_lt | Lemma dv_lt P : dv P < 2 ^ length P. | L383 | identical |
| 60 | Lemma | dv_zeros | Lemma dv_zeros Z R : Forall dig0 Z -> dv (Z ++ R) = 2 ^ length Z * dv R. | L389 | 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. | L396 | 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. | L404 | identical |
| 63 | Lemma | AllI_app | Lemma AllI_app Pr Z : forall i R, AllI Pr i (Z ++ R) -> AllI Pr (i + length Z) R. | L410 | 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. | L417 | 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. | L425 | 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'). | L434 | identical |
| 67 | Inductive | phase | Inductive phase := E1 | E2 | E1t | E2t | T0 | L1 | L2 | LX. | L455 | 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 | L458 | 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 | L501 | 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. | L522 | 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)). | L525 | identical |
| 72 | Definition | PCx | Definition PCx (ph : phase) (c4 : bool) (h : nat) := Lift (PC ph c4 h). | L528 | identical |
| 73 | Lemma | pow_pos | Lemma pow_pos n : 1 <= 2 ^ n. | L537 | 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). | L541 | identical |
| 75 | Lemma | pow_S | Lemma pow_S n : 2 ^ S n = 2 * 2 ^ n. | L549 | 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). | L557 | 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). | L573 | 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. | L582 | 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. | L591 | identical |
| 80 | Definition | endtr | Definition endtr (ph ph' : phase) : Prop := (ph = E1 /\ ph' = E2) \/ (ph = E1t /\ ph' = E2t). | L599 | 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). | L601 | 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. | L609 | 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). | L618 | 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). | L627 | 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. | L635 | 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. | L643 | 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)). | L651 | 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). | L657 | 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). | L669 | 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. | L685 | 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). | L697 | 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). | L704 | 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. | L712 | identical |
| 94 | Lemma | dv_zero | Lemma dv_zero Z : Forall dig0 Z -> dv Z = 0. | L721 | 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. | L724 | identical |
| 96 | Lemma | ovp_len | Lemma ovp_len q Z t : length (ovp q Z t) = S (length Z). | L727 | identical |
| 97 | Lemma | ovp_dv | Lemma ovp_dv q Z t : dv (ovp q Z t) + 1 = 2 ^ S (length Z). | L730 | identical |
| 98 | Lemma | ovpX_len | Lemma ovpX_len q Z pa : length (ovpX q Z pa) = S (length Z). | L736 | identical |
| 99 | Lemma | ovpX_dv | Lemma ovpX_dv q Z pa : dv (ovpX q Z pa) + 1 = 2 ^ length Z. | L739 | 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. | L745 | 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. | L752 | identical |
| 102 | Lemma | lastOK_dec | Lemma lastOK_dec Z : lastOK (fun x => x = 4) Z \/ lastOK (fun x => x <> 4) Z. | L755 | 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). | L761 | 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)). | L779 | 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. | L801 | 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. | L807 | 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). | L820 | identical |
| 108 | Lemma | even2 | Lemma even2 x : (2 * x) mod 2 = 0. | L834 | identical |
| 109 | Lemma | pc_len | Lemma pc_len (Pr : nat -> tri -> list tri -> Prop) i P : AllI Pr i P -> True. | L837 | 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). | L843 | identical |
| 111 | Lemma | snoc_nn | Lemma snoc_nn (Z : list tri) y : Z ++ [y] <> []. | L864 | identical |
| 112 | Definition | minlen | Definition minlen (ph : phase) : nat := match ph with LX => 3 | L2 => 1 | _ => 2 end. | L867 | identical |
| 113 | Lemma | head_len | Lemma head_len ph c4 h x Y : PCx ph c4 h 1 x Y -> minlen ph <= length Y. | L869 | 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. | L875 | 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. | L880 | 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. | L886 | identical |
| 117 | Lemma | L2_c4_V0 | Lemma L2_c4_V0 h i p q : PC L2 true h i p q 0 0 -> False. | L892 | 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. | L895 | 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). | L903 | 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. | L946 | 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)]). | L964 | 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)]). | L986 | 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. | L1009 | 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). | L1026 | 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)). | L1041 | identical |
| 126 | Record | st | Record st := mkst { sh : nat; sP : list (nat*nat*bool); sT : Tl; sph : phase; sc4 : bool }. | L1060 | identical |
| 127 | Definition | Cf | Definition Cf (s : st) : Q * tape := K (sh s) (sP s) (sT s). | L1062 | 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 | L1064 | 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). | L1073 | 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. | L1076 | 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. | L1088 | identical |
| 132 | Lemma | lastOK_True | Lemma lastOK_True Z : lastOK (fun _ => True) Z. | L1098 | identical |
| 133 | Lemma | Forall_snoc_inv | Lemma Forall_snoc_inv (Pr : tri -> Prop) Z y : Forall Pr (Z ++ [y]) -> Forall Pr Z /\ Pr y. | L1101 | 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. | L1104 | 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. | L1112 | identical |
| 136 | Lemma | Jstep | Lemma Jstep : forall s, J s -> exists s', Cf s -->+ Cf s' /\ J s'. | L1122 | identical |
| 137 | Lemma | J_base | Lemma J_base : J (mkst 2 base TN E1 false). | L1268 | identical |
| 138 | Lemma | nonhalt | Lemma nonhalt : ~ halts tm c0. | L1274 | 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 are below in busycoq comment style, for this machine. They use two abbreviations:
Z := pairs 1..k-1, all d = 0, q >= 2
touch (p,q,d) := (p+1, q-1, 1-d)
1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA--- (= rho of 1RB0LD_1RC0RA_1RD1RF_1LA0LE_1RE1LD_0RB---,
rho: A->D, B->A, C->B, D->C, E, F fixed)
[p,q,d] := (10)^p (01)^q s(d), s(1) = 0001, s(0) = 0010
K(h; P; T) := 0^inf <D (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 -->(402) K(2; (7,4,0); -) -->(38,330) K(2; (47,32,0),(40,33,1),(13,34,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; = #3b's table, run from state D; named in #3b's .v header; named in #3b's proof.md; named in #3b's notes.md · review · compared side by side above · mechanism |
| #25 kill 7 | 1RB1RF_1LC0LE_1RD0LB_1RA0RC_1RE1LB_0RD--- | ✓Killed: never halts | = #3b's table, run from state B; named in #3b's proof.md · review |
| #24 kill 8 | 1RB0RE_1LC0RA_1LD0LB_1LA1LF_1LE1RA_0LC--- | ✓Killed: never halts | = #3b's table mirrored, run from state C; named in #3b's proof.md · review |
| #3b kill 12 | 1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA--- | ✓Killed: never halts | this kill |
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 604 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 16.9 s
- ✓.v hash matches the checked hash.v = checked sha256 3291d99346a1…; submission/ copy = checked sha256 3291d99346a1…
- ✓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 L76: - proof.md, a copy built by `rocq/make_submission_proof.py` (each edit asserts exactly one match; the working proof.md is untouched). Updated: title, header (holdout lists, sheet, parent pointer, status, AI line), §5 hea
- notes.md L84: - proof.md §7 has two open reviewer questions for Checkpoint B (delta form; 3-pair base at L* = 3 versus the 4-pair E-start at step 104,510). No notes from Dennis were on file when this was packaged. If he adds any, fold
- proof.md L1: # 1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA---: delta proof from kill #3 (Checkpoint B)
- proof.md L205: ## 7. Checkpoint B (Dennis)
- ○Family posted together?3 other kill(s) in the family: #3, #25, #24; the Discord draft names 1 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 1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA---
Files
machines/<tm>/: 15 entries · raw notes, status, scripts, images
| name | size | changed |
|---|---|---|
| notes.md ↓ | 9.7 KB | 2026-10-10 17:00 |
| proof.md ↓ | 18 KB | 2026-10-10 12:12 |
| how_proved.md ↓ | 1.1 KB | 2026-10-14 10:51 |
| status.json ↓ | 756 B | 2026-10-13 06:44 |
| observe.json ↓ | 15 KB | 2026-10-10 17:57 |
| 1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA---.v ↓ | 63 KB | 2026-10-10 17:01 |
| img/ | 13 items | 2026-10-16 10:29 |
| rocq/ | 6 items | 2026-10-10 12:26 |
| scripts/ | 1 item | 2026-10-10 17:55 |
| submission/ | 6 items | 2026-10-12 12:56 |
| work/ | 2 items | 2026-10-12 12:41 |
| check_proof.out ↓ | 6.2 KB | 2026-10-10 12:08 |
| check_proof.py ↓ | 21 KB | 2026-10-10 12:07 |
| check_proof_3e8.out ↓ | 5.4 KB | 2026-10-10 12:09 |
| check_proof_l600.out ↓ | 5.4 KB | 2026-10-10 12:11 |
status.json in full
{
"tm": "1RB0RD_1RC1RF_1LD0LE_1RA0LC_1RE1LC_0RA---",
"status": "KILLED_NONHALT",
"stage": "done",
"updated": "2026-10-10",
"reason": "check_kill PASS, independently re-verified",
"parent": "1RB0LD_1RC0RA_1RD1RF_1LA0LE_1RE1LD_0RB---",
"parent_note": "1RB0LD_1RC0RA_1RD1RF_1LA0LE_1RE1LD_0RB--- (#3; siblings #25, #24)",
"label": "#3b",
"relation": "sibling of #3: #3's table renamed, different start state; its run differs (18% wider at 1e9)",
"pr": "https://github.com/ccz181078/busycoq/pull/15",
"pr_file": "verify/Skelet1LikeC2_1RB0RD.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"
}2 contract warnings
- rank: missing
- diagrams: 4 primary (max 3)






