BB(6) hunt
Machines / W6-1

1RB0LE_1RC---_0RD0RB_1RE0LA_1RF0LF_1LD1RF

W6-1local proof 33PR submittedShift-overflow bouncer counterbbchallenge ↗Explorer

How it was proved

How we proved it never halts

SOBCv10's machine from another start: 4 rounds with a growing tail, then nested exceptions overflow into a cycler

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

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

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

Overview

In one sentence

SOBCv10's machine from another start: 4 rounds with a growing tail, then nested exceptions overflow into a cycler

Upstream
PR submitted · PR #29opened 2026-10-16T19:10:32Z · verify/SOBCv10Tail.v · on Submissions →
Rocq proof
check_kill PASS · first Oct 16 11:52
7,149 lines · 258 KB .v · compile 115.9 s · coqchk pass · 1 axioms · PASS Oct 16 11:52 (re-run Oct 16 11:56)
· the .v file
Automatic review
6 of 6 checks passtemplate: none · details in Proof →
Class
Shift-overflow bouncer counterours: Shift-overflow bouncer counter (sheet) · ours adds: that exits into a translated cycler: SOBCv10's table (its D start, mirrored), with a far-end tail that ends the rounds · high confidence
On the list
line 9 of BB6_holdouts_663.txt · historical 740 line 10 · observe.json rank #10
eqv ×1sim 1e15UBRRBA
Your calls on file 4
funded
option: spike · date: 2026-10-16 · outcome: Complete proof within the funded stage.
next
Await upstream review of PR #29.
2026-10-14 · plan
W6-1 looks non-halting (SOBCv10's machine from another start, ending in a 919-step translated cycler): fund a planning stage for the formal proof, fund the full formalization, or park it?
2026-10-16 · spike
W6-1's exit is proved in Rocq, but the full proof is about 14 x 2 h and one planned lemma needs restating: fund a 1-stage spike first, the full formalization, or park?

Mechanism

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

How it works: 3 notes
  • Same table as SOBCv10.v (ours A..F = its D,E,F,A,B,C, mirrored; rules here use its frame, wall on the left; in our frame all is mirrored, Fig 2). Words: A=11111011 (0), B=11101111 (1), C, D, E markers, U=1011, X=0100, wall W=10100100, edge t=11. A hash = one signal from the wall into the words and back.
  • Each hash adds one X to the wall's tally and increments a binary A/B counter; marker words absorb the carries. When all is B and a carry hits the edge, an exception turns the tally into n fresh hashes and leaves C A U^(2n), which takes 2(2^n-1) hashes to drain: exceptions come at tower-like times.
  • Our run: exceptions at n = 0, 0, 28, 3*2^29-2, then n5 ~ 2^(n4+36.7), giving SOBCv10's post_ca state plus a far-end tail U^3 A t. The tail U^(2k+1) y is one digit with levels -1..4 (A, B, E t, D t, A t, B t). Each exception eats the last column's top digit, adds a U pair and sets the level to k+1-L: 3, -1, 4, 0. In exception 9 a decode carry hits B t: a nested exception E' starts, using exception 9's finished calls as its tally. E' (tail U^13 B t) triggers E'' long before its calls run out. E'''s raw pass overflows at U^13 and, without touching anything to its left, becomes a translated cycler (period 919, shift 3).

Figures for Checkpoint A

Fig 1 · bbchallenge Default view, 10,000 steps

Orientation: the start-up exceptions, then a fixed block at the left and a band growing right.

bbchallenge Default view, 10,000 steps
bbchallenge-defaultStart blankRows every step 0..9,999Window cells -200..199, 1 px = 1 cellColors 1 0 or unvisited head (last move right/left)
Rows: squeezed into 500 px by the site's bilinear filter (about one sample per 20 steps)
Fig 2 · One row per 1,000 steps, 400,000 stepsQ1

Top ~16 rows: exceptions 1-3. Below: the left block (counter + fossil) stays put while the right part grows.

One row per 1,000 steps, 400,000 steps
bbchallenge-defaultStart blankRows every 1000 stepsWindow cells -12..1153, 1 px = 1 cellColors 1 0 or unvisited head (last move right/left)
Rows: steps 0..400,000 (401 rows)
Fig 3 · Exception mechanism, small instance (m=3)Q2

Top: one pass rewrites the right block. Then each zigzag from the right is one of the n=10 hashes.

Exception mechanism, small instance (m=3)
bbchallenge-defaultStart constructed tape (below)Rows every 6 stepsWindow cells -62..101, 1 px = 1 cellColors 1 0 or unvisited head (last move right/left)
Start: 0∞ 11111101111111011111011111111101111111111101111111011111110111 <E 00100010001000100010001000100010001000100010001000100010001000100010001000100010001000100101 0∞ · Rows: steps 0..2,800 (467 rows); ends at exception_done 10 with output A^2 D^2 A U E A (SOBCv10 frame)
More figures (1)Fig 4: bbchallenge Default view, 99,999 steps
Fig 4 · bbchallenge Default view, 99,999 steps

Same view over 10x longer: after exception 3 only the tally band keeps growing.

bbchallenge Default view, 99,999 steps
bbchallenge-defaultStart blankRows every step 0..99,998Window cells -200..199, 1 px = 1 cellColors 1 0 or unvisited head (last move right/left)
Rows: squeezed into 500 px by the site's bilinear filter (about one sample per 200 steps)
Rules (13/13 validated)exact tape rewrites the proof will formalize, each re-checked by simulation
rulefrom ⟶ tocasesstepschecked
emit (left_emit_call)
W X^u <F r
⟶ W X^(u+1) B> r
any u, any r1 hash✓10/10
D absorb (primary_D_absorb)
W X^u B> A^p D R
⟶ W X^(u+2p) B> A^(p+1) R
—2p hashes✓10/10
U pairs (initial_u_pairs)
W X^u B> A^p C A U^(2k) R
⟶ W X^(u+2p+1(2k-1)) B> A^(p+k) C A R
k >= 12p+1(2k-1) hashes✓10/10
cd drain (exception_done_cd)
W B> C A U^(2n) R
⟶ W X^(2(2n-1)) B> A^n C A R
n >= 12(2n-1) hashes✓10/10
frontier to exception (ordinary_all_A_to_exception)
W X^u B> A^m t
⟶ W B> U^(2n+1) B^m t
u + 2^m - 1 = 2n+12m hashes✓10/10
canonical exception (sobc1_exception_from_seg)
W B> U^(2n+1) B^(e+1) t
⟶ W B> C A U^(2n) digits(ds)
n = 2^(e+1)-2+value(ds), |ds| = e+1—✓10/10
(a) exception 4 family (ours)
W X^(2n+1) B> B^m C t C A^2 t2
⟶ W B> C A U^(2n) A^(m-1) D^2 A U E A
n = 3*2^(m-1)-2; real run m = 30—✓4/4
(b) fossil run after cd (ours)
W X^u B> A^p C A^m D^2 A U E A
⟶ W X^(u+H) B> B^(p+m+5) U B t
m even; real run m = 30, p = n4H = 2p-1(1292*2m+4)/3 - 1 hashes✓22/22
(c)+(d) exception 5 (ours)
W X^(2n+1) B> B^W U B t
⟶ W B> C A U^(2n) A^(p-2) digits_(m+6)(R) U^3 A t
W = p+m+5, n = 2^p-2+2^(p-2)(1292*2^m+4)/3, R = (140*2^m+4)/3+4—✓14/14
T1 tail timing (ours)
W X^u B> [digits, total V] U^(2k+1) y
⟶ exception trigger
tail level -1..4, any columns5*2W - V hashes (A=0, B=1, D=-1, E=-2; tail level at weight 2W)✓80/80
T2 raw pass with tail (ours)
W B> U^(2n+1) ... B^w U^(2k+1) B t
⟶ ... E^(w-1) U^(2k+3) y, level(y) = k-1
k = 0..5; k >= 6 overflows into the cycler (16/16)—✓48/48
T3 decode with tail (ours)
exception with n = n_s + (2-L)*2W-1
⟶ SOBCv10's output columns, last one truncated; 2-L carries into the tail (or a deficit of L-2)
full exception vs segment decode, 25 random cases: 23 match; the other 2 are not decodes (one decode trigger, which then reaches the cycler, and one n = 0)—✓23/23
exit: decode trigger, nested exceptions, overflow, translated cycler (ours)
exception 9's decode, call h_t = 4*2W - S - 2: carry reaches B t
⟶ E' (tail U^13 B t) with n' = h_t calls; E'' on E' call h'' = 3*2W-1 - S - 2; its raw pass overflows at B^w U^13 B t into state B right of window 1000100010001000100010001000100010010001000100010001000100010010100100, blank beyond
52 random layouts (h_t, h'' exact against hash-level sim, cycler reached, pending 0-300); 32 n' = f+1 threshold cases; overflow w = 1..30 with junk left (90); shift rule with random left (50)overflow 1208 + 14(w-1) steps, never left of its start; then 919 steps per 3 cells, never reading the left, forever✓224/224
Compressed historythe tape as SOBCv10 frame: W X^u B> [right side]; rows indexed by hash count H (not TM steps), from the exact hash-level run work/hashlevel_run_ours.txt at 28 moments: where the rules are read off
SOBCv10 frame: W X^u B> [right side]; rows indexed by hash count H (not TM steps), from the exact hash-level run work/hashlevel_run_ours.txt
stepu (tally)right side
11B 1^2
11exception 1 fires, n = 0
10exception 2 fires, n = 0
43B U A C U^2
1615B U A B A
5857exception 3 fires, n = 28
646A^2 C A U^55 A B^2 1^2
256198A^3 B A^2 D C A U^45 A B^2 1^2
1,024966A^3 B A^2 B^2 D C A U^41 A B^2 1^2
4,0964,038A^3 B A^2 B^4 D C A U^37 A B^2 1^2
16,38416,326A^3 B A^2 B^6 D C A U^33 A B^2 1^2
65,53665,478A^3 B A^2 B^8 D C A U^29 A B^2 1^2
262,144262,086A^3 B A^2 B^10 D C A U^25 A B^2 1^2
1,048,5761,048,518A^3 B A^2 B^12 D C A U^21 A B^2 1^2
4,194,3044,194,246A^3 B A^2 B^14 D C A U^17 A B^2 1^2
16,777,21616,777,158A^3 B A^2 B^16 D C A U^13 A B^2 1^2
67,108,86467,108,806A^3 B A^2 B^18 D C A U^9 A B^2 1^2
268,435,456268,435,398A^3 B A^2 B^20 D C A U^5 A B^2 1^2
1,073,741,8241,073,741,766A^3 B A^2 B^22 D C A U A B^2 1^2
1,342,177,2801,342,177,222A^3 B A^2 B^22 A C A U A B^2 1^2
1,610,612,7361,610,612,678A^3 B A^2 B^23 C A U A B^2 1^2
1,879,048,1921,879,048,134A^3 B A^2 B^22 A D C 1^2 C A^2 1^4
2,147,483,6482,147,483,590A^3 B A^2 B^23 D C 1^2 C A^2 1^4
2,415,919,1042,415,919,046A^3 B A^2 B^22 A^2 C 1^2 C A^2 1^4
2,684,354,5602,684,354,502A^3 B A^2 B^23 A C 1^2 C A^2 1^4
2,952,790,0162,952,789,958A^3 B A^2 B^22 A B C 1^2 C A^2 1^4
3,221,225,4723,221,225,414A^3 B A^2 B^24 C 1^2 C A^2 1^4
3,221,225,5273,221,225,469exception 4 fires, n = 1610612734
u (tally)last 3,221,225,469
3.2e9013.2e9log-logstep 1: u (tally) = 1step 1: u (tally) = 1step 1: u (tally) = 0step 4: u (tally) = 3step 16: u (tally) = 15step 58: u (tally) = 57step 64: u (tally) = 6step 256: u (tally) = 198step 1024: u (tally) = 966step 4096: u (tally) = 4038step 16384: u (tally) = 16326step 65536: u (tally) = 65478step 262144: u (tally) = 262086step 1048576: u (tally) = 1048518step 4194304: u (tally) = 4194246step 16777216: u (tally) = 16777158step 67108864: u (tally) = 67108806step 268435456: u (tally) = 268435398step 1073741824: u (tally) = 1073741766step 1342177280: u (tally) = 1342177222step 1610612736: u (tally) = 1610612678step 1879048192: u (tally) = 1879048134step 2147483648: u (tally) = 2147483590step 2415919104: u (tally) = 2415919046step 2684354560: u (tally) = 2684354502step 2952790016: u (tally) = 2952789958step 3221225472: u (tally) = 3221225414step 3221225527: u (tally) = 3221225469
right sidelast exception 4 fires, n = 1610612734
not plottable
Template comparisonSOBCv10.v: partly applies · the nearest solved proof, what carries over, and the transitions that differ
01
A1RB0LE
B1RC---
C0RD0RB
D1RE0LA
E1RF0LF
F1LD1RF
file
SOBCv10.v:3847
module
—
machine
1LB0RD_1LC0RC_1RA1LC_1LE0RB_1LF---_0LA0LE (12 transitions apart)
diff
same table: ours A,B,C,D,E,F = SOBCv10 D,E,F,A,B,C, mirrored; ours starts in its D
note
Every SOBCv10 rule we use holds verbatim (same table). Our opening differs: 5 exceptions instead of 4. After exception 5 the run is SOBCv10's post_ca_state(round_post_unary c p, round_primary_width c p, [col]) with c = (n5-6)/2 and p = 3*2^28-4. col has 29 digits (2*14+1), value 391,468,375 (odd, safe), and the width dominance holds. But a far-end fossil U^3 A t follows the column, so sobc1_canonical_nonhalt does not apply as stated.
Proof strategy & riskshow the formal proof will go · 3 risks to watch

No infinite round invariant: the tail ends the SOBCv10 rounds at exception 9. The proof is a finite chain: the opening (families (a)-(d)) to SOBCv10's post_ca state, exceptions 6-9 as SOBCv10 rounds with the tail laws T1-T3, the decode trigger in exception 9, the nested exceptions E' and E'' (exact call counts from T1), a local overflow lemma and the translated cycler. See proof.md.

  • ▲Exceptions 6-9 at real size are a model (T1-T3 plus SOBCv10's round formulas). The robustness argument (k = 6 always overflows into the cycler) makes the outcome safe, but the formal path needs the exact chain.
  • ▲Families (b) and (d) are closed forms checked on small (p, m); at p = n4 they need induction proofs. Family (a) is checked exactly at m = 30.
  • ▲Formalization is large: a tail-aware copy of SOBCv10's round machinery (4,234 lines upstream), used for four rounds.
Stats & provenance1.7·1013 steps simulated · 48,069 cells · the status in full · files
simulated
1.7·1013 steps
tape
48,069 cells · 25,188 nonzeros
growth
direct 1e9 steps (span 48,069); qsim block 4: 1.69e13 steps in 600 s, no rules; hash-level: 3,221,225,527 hashes to exception 4 (n4 = 3*2^29-2), exception 5 at about 2^(n4+36.7) hashes
status now
Complete blank-start nonhalting proof; three unchanged check_kill passes and completed kernel replays on the same source. (status.json, 2026-10-16)
observer's note
Exit closed: decode trigger -> nested exceptions E', E'' -> local overflow -> 919/3 translated cycler. proof.md written; formalization needs funding (decision.json).
files
observe.json · notes.md · proof.md · status.json · 1RB0LE_1RC---_0RD0RB_1RE0LA_1RF0LF_1LD1RF.v

Proof & checks

6/6 automatic checks pass

Kill 33 · Shift-overflow bouncer counter · the kill file ../../astra/decisions-20261016/w61/publication/Nonhalting.v: 7149 lines, 682 items · the package submission/

✓ 6/6 automatic checks pass · Checkpoint B: no note from Dennis yet · no single template
1What is provedCheck: the string, the theorem and every check_kill line are green, and the .v on disk is the one that was checked (same sha256).
Machine
1RB0LE_1RC---_0RD0RB_1RE0LA_1RF0LF_1LD1RF
vs holdout list
✓ byte-exact: the .v literal (L7125) == 2026-10-07_778.txt line 12 (41 bytes, via tools/holdouts.py)
Theorem
✓ Lemma nonhalt : ~ halts tm c0. L7139
check_kill
✓ PASS · 17/17 checks pass · compile 115.93 s · coqchk pass (18.81 s) · assumptions: 1 (Axioms|FunctionalExtensionality.functional_extensionality_dep : forall (A : Type) (B : A -> Type) (f g : forall x : A, B x), (forall x : A, f x = g x) -> f = g) · 2026-10-16 18:56:21 UTC · submission/check_kill.txt · 3 runs on file
Checked .v
sha256 cd0bfee325f89704…
✓1RB0LE_1RC---_0RD0RB_1RE0LA_1RF0LF_1LD1RF.vcd0bfee325f89704… = checked
✓submission/1RB0LE_1RC---_0RD0RB_1RE0LA_1RF0LF_1LD1RF.vcd0bfee325f89704… = checked
Status
✓Killed: never halts updated 2026-10-16
✓ args✓ input✓ framework✓ framework_build✓ forbidden✓ structure✓ tm_text✓ theorem_text✓ coq✓ names✓ compile✓ tm_rocq✓ theorem_rocq✓ isolation✓ assumptions✓ coqchk✓ integrity
All 17 check_kill checks with their one-line results
✓args6x2 machine, framework module Individual62, mode nonhalt
✓input264052 bytes, 7149 lines, 4779 sentences
✓frameworkHEAD 0940bb9cf434ba68f0c025dabfde45a219999973 == pin; no tracked changes under verify/
✓framework_build14 needed framework .vo files present and fresh, with native code no older than the .vo
✓forbiddennone of 30 forbidden patterns occur (ground rule 1's words: anywhere; command words: outside comments and strings; comments never split a token)
✓structure244 Require name(s) allowed; no top-level Variable/Context; no shadowing; Module/Section balanced
✓tm_textline 7124: TM_from_str "1RB0LE_1RC---_0RD0RB_1RE0LA_1RF0LF_1LD1RF" == <tm> (41 bytes)
✓theorem_textline 7139: nonhalt : ~halts tm c0
✓coqcoqc 8.20.1 ([local working file]
✓nameshalts, c0, TM_from_str resolved inside Individual62
✓compilecompiled in 115.9s with all appended checks
✓tm_rocqBB6Kill.Candidate.tm = BusyCoq.Individual62.TM_from_str "1RB0LE_1RC---_0RD0RB_1RE0LA_1RF0LF_1LD1RF" by eq_refl (in-file and isolated)
✓theorem_rocqnonhalt : ~ halts (TM_from_str "1RB0LE_1RC---_0RD0RB_1RE0LA_1RF0LF_1LD1RF") c0 with absolute names (in-file and isolated)
✓isolationonly stock proof plugins loaded; guard/positivity/universe checking on, definitional UIP off
✓assumptions1 assumption(s), all in the baseline
✓coqchkcoqchk -norec BB6Kill.Candidate ok (18.8s); its context summary lists nothing of the file's own
✓integrityinput sha256 and framework HEAD/cleanliness identical before and after
2Where it came fromCheck: the template is the one you expect, and the measured reuse (tiles, the reuse figure, diff) agrees with what the README says was kept and changed (quoted).

No single template: the .v header comment, proof.md and notes.md name no verify/… file as "adapted from" / template / mechanism, and status.json names no parent kill. Everything in section 3 is tagged new.

3Proof outlineCheck: the new items (green) carry the argument; the names read like the proof.md rules.

682 items in ../../astra/decisions-20261016/w61/publication/Nonhalting.v (7149 lines): 390 Lemma, 168 Definition, 83 Theorem, 32 Fixpoint, 4 Inductive, 3 Record, 2 Corollary. No template, so every item is new.

#kindnamestatement (no proof body)linevs template
1Definitionsource_tm
Definition source_tm := Eval compute in (TM_from_str "1LB0RD_1LC0RC_1RA1LC_1LE0RB_1LF---_0LA0LE").
L33new
2Definitionhash
Definition hash : DH0 * DH0 := ((B, []), (F, [])).
L41new
3Lemmahash_U
Lemma hash_U : segRLs source_tm hashes hashes U U.
L46new
4Lemmahash_A
Lemma hash_A : segRLs source_tm hashes [] A8 B8.
L51new
5Lemmahash_B
Lemma hash_B : segRLs source_tm hashes hashes B8 A8.
L56new
6Lemmahash_CAUU
Lemma hash_CAUU :
segRLs source_tm hashes [] (C8 ++ A8 ++ U ++ U) (D8 ++ C8 ++ A8).
L61new
7Lemmahash_E
Lemma hash_E : segRLs source_tm hashes [] E8 D8.
L67new
8Lemmahash_D
Lemma hash_D : segRLs source_tm hashes [] D8 A8.
L72new
9InductiveBDigit
Inductive BDigit := BA | BB.
L76new
10Definitiondigit_word
Definition digit_word (d : BDigit) : list Sym :=
match d with BA => A8 | BB => B8 end.
L77new
11Fixpointdigits_word
Fixpoint digits_word (ds : list BDigit) : list Sym :=
match ds with
| [] => []
| d :: ds' => digit_word d ++ digits_word ds'
end.
L79new
12Fixpointdigits_value
Fixpoint digits_value (ds : list BDigit) : nat :=
match ds with
| [] => 0
| BA :: ds' => 2 * digits_value ds'
| BB :: ds' => 1 + 2 * digits_value ds'
end.
L84new
13Fixpointbfinish_count
Fixpoint bfinish_count (ds : list BDigit) (out : nat) : nat :=
match ds with
| [] => out
| BA :: ds' => 2 * bfinish_count ds' out + 1
| BB :: ds' => 2 * bfinish_count ds' out
end.
L94new
14Lemmabfinish_repeat_BA_formula
Lemma bfinish_repeat_BA_formula w out :
bfinish_count (repeat BA w) out = (out + 1) * 2^w - 1.
L101new
15Lemmahash_A_cycle
Lemma hash_A_cycle : segRLs source_tm (hashes^^2) hashes A8 A8.
L109new
16Lemmahash_B_cycle
Lemma hash_B_cycle : segRLs source_tm (hashes^^2) hashes B8 B8.
L114new
17Lemmahash_A_finish
Lemma hash_A_finish k :
segRLs source_tm (hashes^^(2*k+1)) (hashes^^k) A8 B8.
L119new
18Lemmahash_B_finish
Lemma hash_B_finish k :
segRLs source_tm (hashes^^(2*k)) (hashes^^k) B8 B8.
L128new
19Lemmahash_A_cycles
Lemma hash_A_cycles k :
segRLs source_tm (hashes^^(2*k)) (hashes^^k) A8 A8.
L137new
20Lemmahash_E_even
Lemma hash_E_even n :
segRLs source_tm (hashes^^(2*n+2)) (hashes^^n) E8 A8.
L147new
21Lemmahash_E_odd
Lemma hash_E_odd n :
segRLs source_tm (hashes^^(2*n+3)) (hashes^^n) E8 B8.
L156new
22Lemmabfinish_spec
Lemma bfinish_spec ds out :
segRLs source_tm (hashes^^(bfinish_count ds out)) (hashes^^out)
  (digits_word ds) (B8^^length ds).
L166new
23Lemmahashes_U
Lemma hashes_U n : segRLs source_tm (hashes^^n) (hashes^^n) U U.
L176new
24Lemmahashes_U_run
Lemma hashes_U_run signals width :
segRLs source_tm (hashes^^signals) (hashes^^signals) (U^^width) (U^^width).
L182new
25LemmasegRLs_0inf
Lemma segRLs_0inf {hs input output} :
segRLs source_tm hs [] input output ->
sideRLs source_tm hs (input *> 0inf) (output *> 0inf).
L189new
26Definitioncommon_left_wall
Definition common_left_wall : side :=
0inf <* <[1;0;1;0;0;1;0;0].
L195new
27Lemmasobc1_emit_hash
Lemma sobc1_emit_hash r :
common_left_wall {{{((F, []), L)}}} r -[source_tm]->+
common_left_wall {{{((B, []), R)}}} (U *> r).
L198new
28Lemmasobc1_hash_CABAD
Lemma sobc1_hash_CABAD k :
segRLs source_tm hashes []
  (C8 ++ A8^^k ++ B8 ++ A8 ++ D8)
  (D8 ++ C8^^k ++ B8 ++ U^^2 ++ A8).
L207new
29Lemmasobc1_hash_CAB1110
Lemma sobc1_hash_CAB1110 k :
segRLs source_tm hashes []
  (C8 ++ A8^^k ++ B8 ++ [1;1;1;0])
  (D8 ++ C8^^k ++ B8 ++ U).
L215new
30Lemmasobc1_extra_CC
Lemma sobc1_extra_CC :
segRLs source_tm hashes []
  (C8 ++ C8) (D8 ++ A8).
L223new
31Definitionsobc12_left_wall
Definition sobc12_left_wall : side :=
0inf <* <[1;0;1;0;0;1;0;0].
L229new
32Definitionsobc1_first_word
Definition sobc1_first_word : list Sym :=
U^^22 ++ A8^^3 ++ D8 ++ C8 ++ A8 ++ U^^28 ++
A8 ++ A8 ++ B8 ++ A8.
L232new
33Definitionsobc1_first_call
Definition sobc1_first_call : Q * tape :=
sobc12_left_wall {{{((B, []), R)}}} (sobc1_first_word *> 0inf).
L235new
34Lemmasobc1_first_call_reachable
Lemma sobc1_first_call_reachable :
c0 -[source_tm]->> 24396 / sobc1_first_call.
L238new
35Definitioncentered_step
Definition centered_step (d : Z) : Z := - ((d + 1) / 2).
L244new
36Lemmacentered_step_twice
Lemma centered_step_twice d :
centered_step (centered_step d) = (d + 1) / 4.
L246new
37Definitionpow4
Definition pow4 (k : nat) : Z := Z.of_nat (Nat.pow 4 k).
L251new
38Definitionpow2
Definition pow2 (k : nat) : Z := Z.of_nat (Nat.pow 2 k).
L252new
39Lemmapow4_succ
Lemma pow4_succ k : pow4 (S k) = 4 * pow4 k.
L254new
40Lemmapow2_pos
Lemma pow2_pos k : 0 < pow2 k.
L260new
41Lemmapow2_succ
Lemma pow2_succ k : pow2 (S k) = 2 * pow2 k.
L265new
42Theoremcentered_converges_2w
Theorem centered_converges_2w w d :
(2 <= w)%nat ->
(- pow2 w < d < pow2 w)%Z ->
Nat.iter (2 * w) centered_step d = 0.
L271new
43Definitionstable_column_step
Definition stable_column_step (half v : Z) : Z := half - v / 2.
L282new
44Lemmastable_column_centered
Lemma stable_column_centered half p d :
(2 * half = 3 * p - 1)%Z ->
(p mod 2 = 1)%Z ->
stable_column_step half (p + d) = p + centered_step d.
L287new
45Lemmastable_column_iter_centered
Lemma stable_column_iter_centered half p n d :
(2 * half = 3 * p - 1)%Z ->
(p mod 2 = 1)%Z ->
Nat.iter n (stable_column_step half) (p + d) =
  p + Nat.iter n centered_step d.
L295new
46Theoremstable_column_converges_2w
Theorem stable_column_converges_2w half p w v :
(2 <= w)%nat ->
(2 * half = 3 * p - 1)%Z ->
(p mod 2 = 1)%Z ->
(- pow2 w < v - p < pow2 w)%Z ->
Nat.iter (2 * w) (stable_column_step half) v = p.
L305new
47Definitionodd_column_width
Definition odd_column_width (k : nat) : nat := (2 * k + 1)%nat.
L318new
48Definitionodd_column_half
Definition odd_column_half (k : nat) : Z := pow4 k.
L319new
49Fixpointodd_column_fixed
Fixpoint odd_column_fixed (k : nat) : Z :=
match k with O => 1 | S k' => 4 * odd_column_fixed k' - 1 end.
L320new
50Lemmaodd_column_fixed_pos
Lemma odd_column_fixed_pos k : 0 < odd_column_fixed k.
L323new
51Lemmapow2_even_width
Lemma pow2_even_width k : pow2 (2 * k) = pow4 k.
L328new
52Lemmapow2_odd_width
Lemma pow2_odd_width k :
pow2 (odd_column_width k) = 2 * odd_column_half k.
L336new
53Lemmaodd_column_fixed_equation
Lemma odd_column_fixed_equation k :
2 * odd_column_half k = 3 * odd_column_fixed k - 1.
L344new
54Lemmaodd_column_fixed_odd
Lemma odd_column_fixed_odd k : odd_column_fixed k mod 2 = 1.
L351new
55Theoremodd_column_converges
Theorem odd_column_converges k v :
(1 <= k)%nat ->
(- pow2 (odd_column_width k) < v - odd_column_fixed k <
   pow2 (odd_column_width k))%Z ->
Nat.iter (2 * odd_column_width k) (stable_column_step (odd_column_half k))
  v = odd_column_fixed k.
L356new
56Fixpointinitial_u_pair_calls
Fixpoint initial_u_pair_calls (primary pairs : nat) : nat :=
match pairs with
| O => O
| S pairs' => 2 * 2^primary + initial_u_pair_calls (S primary) pairs'
end.
L371new
57Definitionsobc1_initial_pre_calls
Definition sobc1_initial_pre_calls : nat :=
2^3 + (initial_u_pair_calls 4 14 +
(2^18 + (2^18 + (2^19 + (2^19 +
(2^21 + (2^21 + 2^22))))))).
L376new
58Lemmainitial_u_pair_calls_formula
Lemma initial_u_pair_calls_formula primary pairs :
initial_u_pair_calls primary pairs =
  2^(primary+1) * (2^pairs-1).
L381new
59Definitionsobc1_first_half
Definition sobc1_first_half : nat := 2^23 + 2^22 + 2^20 - 2.
L394new
60Lemmasobc1_initial_total_half
Lemma sobc1_initial_total_half :
22 + sobc1_initial_pre_calls + (2^24-1) =
  2*sobc1_first_half+1.
L399new
61Theoremstandard_mixed_to_binary_out_spec
Theorem standard_mixed_to_binary_out_spec e ds out :
length ds = S e ->
segRLs source_tm
  (hashes ^^ ((out + 1) * 2 ^ (S e) - 2 + digits_value ds))
  (hashes ^^ out)
  (E8^^e ++ A8)
… +1 lines
L407new
62Corollarystandard_mixed_to_binary_spec
Corollary standard_mixed_to_binary_spec e ds :
length ds = S e ->
segRLs source_tm (hashes ^^ (2 ^ (S e) - 2 + digits_value ds)) []
  (E8^^e ++ A8) (digits_word ds).
L443new
63Lemmaprefix_E_even
Lemma prefix_E_even k n input output carries :
segRLs source_tm (hashes^^n) (hashes^^carries) input output ->
segRLs source_tm (hashes^^(2^k*n+2*(2^k-1))) (hashes^^carries)
  (E8^^k ++ input) (A8^^k ++ output).
L453new
64Definitionexception_pre_left
Definition exception_pre_left (n : nat) : side :=
([1;0;1;0] ++ V4^^(2*n+2) ++ [1;0;1]) *> 0inf.
L468new
65Definitionexception_call_left
Definition exception_call_left (remaining finished : nat) : side :=
(X4^^(2*finished+5) ++ V4^^(2*remaining) ++ [1;0;1]) *> 0inf.
L470new
66Definitionexception_raw_source
Definition exception_raw_source (n w : nat) : Q * tape :=
common_left_wall {{{((B, []), R)}}}
  ((U^^(2*n+1) ++ B8^^(S w) ++ [1;1]) *> 0inf).
L472new
67Definitionexception_pre
Definition exception_pre (n w : nat) : Q * tape :=
exception_pre_left n {{{((F, []), L)}}}
  ((E8^^w ++ A8) *> 0inf).
L475new
68Lemmaraw_U_to_X
Lemma raw_U_to_X :
segRR source_tm (B, []) (B, []) U X4.
L479new
69LemmasegRR_lpow_same
Lemma segRR_lpow_same h w v k :
segRR source_tm h h w v -> segRR source_tm h h (w^^k) (v^^k).
L487new
70Lemmaraw_Us_to_Xs
Lemma raw_Us_to_Xs k :
segRR source_tm (B, []) (B, []) (U^^k) (X4^^k).
L498new
71Lemmaraw_B_forward
Lemma raw_B_forward :
segRR source_tm (B, []) (B, []) B8 Q8.
L505new
72Lemmaraw_B_return
Lemma raw_B_return l r :
([1;0;1] *> Q8 *> l) {{{((F, []), L)}}} r -[source_tm]->+
([1;0;1] *> l) {{{((F, []), L)}}} (E8 *> r).
L513new
73Lemmaraw_exception_tail_base
Lemma raw_exception_tail_base l :
l {{{((B, []), R)}}} ((B8 ++ [1;1]) *> 0inf) -[source_tm]->+
([1;0;1] *> l) {{{((F, []), L)}}} (A8 *> 0inf).
L522new
74Lemmaraw_exception_tail
Lemma raw_exception_tail w l :
l {{{((B, []), R)}}}
    ((B8^^(S w) ++ [1;1]) *> 0inf) -[source_tm]->+
([1;0;1] *> l) {{{((F, []), L)}}}
    ((E8^^w ++ A8) *> 0inf).
L531new
75Lemmaexception_pre_left_direct
Lemma exception_pre_left_direct n :
([1;0;1] *> X4^^(2*n+1) *> Q8 *> 0inf) = exception_pre_left n.
L548new
76Lemmaexception_raw_to_pre
Lemma exception_raw_to_pre n w :
exception_raw_source n w -[source_tm]->* exception_pre n w.
L556new
77Definitionleft_hash
Definition left_hash : DH0 * DH0 := ((F, []), (B, [])).
L570new
78Lemmaleft_hash_XX
Lemma left_hash_XX :
segRLs (flip source_tm) [left_hash] [left_hash]
  (X4^^2) (X4^^2).
L572new
79Lemmaleft_relaunch_base
Lemma left_relaunch_base :
segRLs (flip source_tm) [left_hash] []
  (X4^^5 ++ V4^^2) (X4^^7).
L579new
80Lemmaleft_hash_X_pairs
Lemma left_hash_X_pairs k :
segRLs (flip source_tm) [left_hash] [left_hash]
  (X4^^(2*k)) (X4^^(2*k)).
L586new
81Lemmaleft_launch_segment
Lemma left_launch_segment :
segRLs (flip source_tm) [left_hash] []
  ([1;0;1;0] ++ V4^^4) (X4^^5).
L596new
82Lemmaexception_launch
Lemma exception_launch k :
sideRLs (flip source_tm) [left_hash]
  (exception_pre_left (S k)) (exception_call_left k 0).
L603new
83Lemmaexception_relaunch_side
Lemma exception_relaunch_side remaining finished :
sideRLs (flip source_tm) [left_hash]
  (exception_call_left (S remaining) finished)
  (exception_call_left remaining (S finished)).
L616new
84Lemmaexception_relaunches
Lemma exception_relaunches k finished :
sideRLs (flip source_tm) ([left_hash]^^k)
  (exception_call_left k finished)
  (exception_call_left 0 (finished+k)).
L636new
85Lemmaexception_calls
Lemma exception_calls k input output :
segRLs source_tm (hashes^^(S k)) [] input output ->
exception_call_left k 0 {{{((B, []), R)}}} (input *> 0inf)
  -[source_tm]->+
exception_call_left 0 k {{{((F, []), L)}}} (output *> 0inf).
L648new
86Definitionexception_done
Definition exception_done (n : nat) (output : list Sym) : Q * tape :=
common_left_wall {{{((B, []), R)}}}
  ((C8 ++ A8 ++ U^^(2*n) ++ output) *> 0inf).
L664new
87Lemmaexception_exit
Lemma exception_exit k output :
exception_call_left 0 k {{{((F, []), L)}}} (output *> 0inf)
  -[source_tm]->+ exception_done (S k) output.
L668new
88Lemmaexception_launch_progress
Lemma exception_launch_progress k r :
exception_pre_left (S k) {{{((F, []), L)}}} r -[source_tm]->+
exception_call_left k 0 {{{((B, []), R)}}} r.
L678new
89Lemmaexception_exit_zero
Lemma exception_exit_zero output :
exception_pre_left 0 {{{((F, []), L)}}} (output *> 0inf)
  -[source_tm]->+ exception_done 0 output.
L685new
90Lemmaexception_pre_from_seg
Lemma exception_pre_from_seg n input output :
segRLs source_tm (hashes^^n) [] input output ->
exception_pre_left n {{{((F, []), L)}}} (input *> 0inf)
  -[source_tm]->+ exception_done n output.
L693new
91Theoremsobc1_exception_from_seg
Theorem sobc1_exception_from_seg n w output :
segRLs source_tm (hashes^^n) []
  (E8^^w ++ A8) output ->
exception_raw_source n w -[source_tm]->* exception_done n output.
L706new
92Fixpointeven_residue
Fixpoint even_residue (n : nat) : Z :=
match n with
| O => 3
| S n' => 4 * even_residue n' + 1
end.
L722new
93Fixpointodd_residue
Fixpoint odd_residue (n : nat) : Z :=
match n with
| O => 26
| S n' => 4 * odd_residue n' - 2
end.
L727new
94Definitioneven_residue_width
Definition even_residue_width (n : nat) : nat := (2 * n + 4)%nat.
L732new
95Definitionodd_residue_width
Definition odd_residue_width (n : nat) : nat := (2 * n + 5)%nat.
L733new
96Lemmaeven_residue_bounds
Lemma even_residue_bounds n :
3 <= even_residue n <= pow2 (even_residue_width n) - 6.
L735new
97Lemmaeven_residue_S_lower
Lemma even_residue_S_lower n : 13 <= even_residue (S n).
L745new
98Lemmaodd_residue_bounds
Lemma odd_residue_bounds n :
3 <= odd_residue n <= pow2 (odd_residue_width n) - 6.
L751new
99Lemmaodd_residue_complement
Lemma odd_residue_complement n :
odd_residue n =
  2 * (pow2 (even_residue_width n) - even_residue n).
L763new
100Lemmaeven_residue_complement
Lemma even_residue_complement n :
even_residue (S n) =
  2 * (pow2 (odd_residue_width n) - odd_residue n) + 1.
L774new
101Lemmalow_step_odd_to_even
Lemma low_step_odd_to_even n :
pow2 (even_residue_width n) - odd_residue n / 2 =
  even_residue n.
L784new
102Lemmalow_step_even_to_odd
Lemma low_step_even_to_odd n :
pow2 (odd_residue_width n) - even_residue (S n) / 2 =
  odd_residue n.
L791new
103Definitionz_birth_value
Definition z_birth_value (n : nat) : Z :=
2 * (pow2 (even_residue_width (S n)) - even_residue (S n)) + 1.
L799new
104Definitionz_birth_width
Definition z_birth_width (n : nat) : nat := (2 * n + 7)%nat.
L801new
105Lemmaz_birth_complement
Lemma z_birth_complement n :
z_birth_value n =
  2 * (pow2 (even_residue_width (S n)) - even_residue (S n)) + 1.
L803new
106Lemmaz_birth_zero
Lemma z_birth_zero : z_birth_value O = 103.
L810new
107Lemmaz_birth_succ
Lemma z_birth_succ n :
z_birth_value (S n) = 4 * z_birth_value n - 5.
L815new
108Lemmaz_birth_bounds
Lemma z_birth_bounds n :
3 <= z_birth_value n <= pow2 (z_birth_width n) - 6.
L824new
109Lemmaz_birth_first_low_step
Lemma z_birth_first_low_step n :
pow2 (even_residue_width (S n)) - z_birth_value n / 2 =
  even_residue (S n).
L835new
110Definitionlow_slice
Definition low_slice (total : Z) (m : nat) (r v : Z) : Prop :=
exists high capacity,
  total = capacity * pow2 m /\
  v = high * pow2 m + r /\
  (0 <= high < capacity)%Z.
L844new
111Lemmalow_slice_safe
Lemma low_slice_safe total m r v :
low_slice total m r v ->
(3 <= r <= pow2 m - 6)%Z ->
(3 <= v <= total - 6)%Z.
L850new
112Lemmalow_slice_step
Lemma low_slice_step total m r v (right_odd : bool) :
low_slice total (S m) r v ->
(3 <= r < pow2 (S m))%Z ->
low_slice total m (pow2 m - r / 2)
  ((if right_odd then total / 2 else total) - v / 2).
L863new
113Lemmaz_birth_low_slice
Lemma z_birth_low_slice n :
low_slice (pow2 (z_birth_width n)) (z_birth_width n)
  (z_birth_value n) (z_birth_value n).
L882new
114InductiveLineagePhase
Inductive LineagePhase :=
| LBirth (n : nat)
| LEven (n : nat)
| LOdd (n : nat).
L888new
115Definitionlineage_width
Definition lineage_width (p : LineagePhase) : nat :=
match p with
| LBirth n => z_birth_width n
| LEven n => even_residue_width n
| LOdd n => odd_residue_width n
end.
L892new
116Definitionlineage_residue
Definition lineage_residue (p : LineagePhase) : Z :=
match p with
| LBirth n => z_birth_value n
| LEven n => even_residue n
| LOdd n => odd_residue n
end.
L898new
117Inductivelineage_next
Inductive lineage_next : LineagePhase -> LineagePhase -> Prop :=
| lineage_birth n : lineage_next (LBirth n) (LEven (S n))
| lineage_even n : lineage_next (LEven (S n)) (LOdd n)
| lineage_odd n : lineage_next (LOdd n) (LEven n).
L904new
118Definitionarbitrary_column_step
Definition arbitrary_column_step (total : Z) (right_odd : bool) (v : Z) : Z :=
(if right_odd then total / 2 else total) - v / 2.
L908new
119Lemmalineage_residue_bounds
Lemma lineage_residue_bounds p :
(3 <= lineage_residue p <= pow2 (lineage_width p) - 6)%Z.
L911new
120Lemmalineage_next_width
Lemma lineage_next_width p p' :
lineage_next p p' -> lineage_width p = S (lineage_width p').
L920new
121Lemmalineage_next_low_step
Lemma lineage_next_low_step p p' :
lineage_next p p' ->
pow2 (lineage_width p') - lineage_residue p / 2 =
  lineage_residue p'.
L927new
122Lemmalineage_step_preserves_slice
Lemma lineage_step_preserves_slice total p p' v right_odd :
lineage_next p p' ->
low_slice total (lineage_width p) (lineage_residue p) v ->
low_slice total (lineage_width p') (lineage_residue p')
  (arbitrary_column_step total right_odd v).
L938new
123Definitionlineage_fuel
Definition lineage_fuel (p : LineagePhase) : nat :=
match p with
| LBirth n => 2 * n + 3
| LEven n => 2 * n
| LOdd n => 2 * n + 1
end.
L955new
124Fixpointzinputs
Fixpoint zinputs (total : Z) (inputs : list bool) (v : Z) : Z :=
match inputs with
| [] => v
| b::inputs' => zinputs total inputs' (arbitrary_column_step total b v)
end.
L961new
125Theoremlineage_inputs_safe
Theorem lineage_inputs_safe total p v inputs :
(length inputs <= lineage_fuel p)%nat ->
low_slice total (lineage_width p) (lineage_residue p) v ->
(3 <= zinputs total inputs v <= total-6)%Z.
L967new
126Definitionordinary_left
Definition ordinary_left (u : nat) : side := X4^^u *> common_left_wall.
L984new
127Lemmaleft_emit_zero
Lemma left_emit_zero :
sideRLs (flip source_tm) [left_hash]
  (ordinary_left 0) (ordinary_left 1).
L986new
128Lemmaleft_emit_one
Lemma left_emit_one :
sideRLs (flip source_tm) [left_hash]
  (ordinary_left 1) (ordinary_left 2).
L997new
129Lemmanat_ind2
Lemma nat_ind2 (P : nat -> Prop) :
P 0%nat -> P 1%nat ->
(forall n, P n -> P (S (S n))) ->
forall n, P n.
L1008new
130Lemmaleft_emit_call
Lemma left_emit_call u :
sideRLs (flip source_tm) [left_hash]
  (ordinary_left u) (ordinary_left (S u)).
L1019new
131Lemmaleft_emit_calls
Lemma left_emit_calls k u :
sideRLs (flip source_tm) ([left_hash]^^k)
  (ordinary_left u) (ordinary_left (u+k)).
L1033new
132Lemmaordinary_emit_progress
Lemma ordinary_emit_progress u r :
ordinary_left u {{{((F, []), L)}}} r -[source_tm]->+
ordinary_left (S u) {{{((B, []), R)}}} r.
L1044new
133Lemmaordinary_seg_return
Lemma ordinary_seg_return k u input output r :
segRLs source_tm (hashes^^(S k)) [] input output ->
ordinary_left u {{{((B, []), R)}}} (input *> r) -[source_tm]->+
ordinary_left (u + k) {{{((F, []), L)}}} (output *> r).
L1051new
134Lemmaordinary_seg_run
Lemma ordinary_seg_run k u input output r :
segRLs source_tm (hashes^^(S k)) [] input output ->
ordinary_left u {{{((B, []), R)}}} (input *> r) -[source_tm]->+
ordinary_left (u + S k) {{{((B, []), R)}}} (output *> r).
L1068new
135Lemmaordinary_seg_run_pos
Lemma ordinary_seg_run_pos calls u input output r :
1 <= calls -> segRLs source_tm (hashes^^calls) [] input output ->
ordinary_left u {{{((B, []), R)}}} (input *> r) -[source_tm]->+
ordinary_left (u + calls) {{{((B, []), R)}}} (output *> r).
L1079new
136Lemmaraw_X_return
Lemma raw_X_return l r :
(X4 *> l) {{{((F, []), L)}}} r -[source_tm]->+
l {{{((F, []), L)}}} (U *> r).
L1089new
137Lemmaraw_X_returns
Lemma raw_X_returns u l r :
(X4^^u *> l) {{{((F, []), L)}}} r -[source_tm]->*
l {{{((F, []), L)}}} (U^^u *> r).
L1097new
138Lemmaordinary_return_wall
Lemma ordinary_return_wall u r :
ordinary_left u {{{((F, []), L)}}} r -[source_tm]->*
common_left_wall {{{((F, []), L)}}} (U^^u *> r).
L1111new
139Lemmaordinary_seg_to_wall
Lemma ordinary_seg_to_wall k u input output r :
segRLs source_tm (hashes^^(S k)) [] input output ->
ordinary_left u {{{((B, []), R)}}} (input *> r) -[source_tm]->+
common_left_wall {{{((B, []), R)}}}
  ((U^^(u + S k) ++ output) *> r).
L1119new
140Fixpointz_tail_digits
Fixpoint z_tail_digits (n : nat) : list BDigit :=
match n with
| O => [BA; BA; BB; BB]
| S n' => BA :: BB :: z_tail_digits n'
end.
L1134new
141Definitionz_digits
Definition z_digits (n : nat) : list BDigit :=
BB :: BB :: BB :: z_tail_digits n.
L1139new
142Lemmaz_tail_digits_length
Lemma z_tail_digits_length n : length (z_tail_digits n) = 2 * n + 4.
L1142new
143Lemmaz_digits_length
Lemma z_digits_length n : length (z_digits n) = z_birth_width n.
L1147new
144Lemmaz_digits_value_zero
Lemma z_digits_value_zero : digits_value (z_digits O) = 103.
L1154new
145Lemmaz_digits_value_succ
Lemma z_digits_value_succ n :
digits_value (z_digits (S n)) + 5 = 4 * digits_value (z_digits n).
L1159new
146Theoremz_digits_value
Theorem z_digits_value n :
Z.of_nat (digits_value (z_digits n)) = z_birth_value n.
L1165new
147Theoremdigits_exist
Theorem digits_exist width value :
value < 2 ^ width ->
exists ds, length ds = width /\ digits_value ds = value.
L1175new
148Lemmacd_start
Lemma cd_start :
segRLs source_tm (hashes^^2) []
  (C8 ++ A8 ++ U^^2) (A8 ++ C8 ++ A8).
L1202new
149Definitioncd_calls
Definition cd_calls (n : nat) : nat := 2 * (2^n - 1).
L1208new
150Definitioncd_input
Definition cd_input (n : nat) : list Sym := C8 ++ A8 ++ U^^(2*n).
L1209new
151Definitioncd_output
Definition cd_output (n : nat) : list Sym := A8^^n ++ C8 ++ A8.
L1210new
152Lemmacd_batch
Lemma cd_batch n :
segRLs source_tm (hashes^^cd_calls n) []
  (cd_input n) (cd_output n).
L1212new
153Definitionafter_cd
Definition after_cd (n : nat) (tail : list Sym) : Q * tape :=
ordinary_left (cd_calls n) {{{((B, []), R)}}}
  ((cd_output n ++ tail) *> 0inf).
L1229new
154Lemmacd_calls_positive
Lemma cd_calls_positive n :
1 <= n -> 1 <= cd_calls n.
L1233new
155Lemmaexception_done_cd
Lemma exception_done_cd n tail :
1 <= n ->
exception_done n tail -[source_tm]->+ after_cd n tail.
L1241new
156Lemmaall_A_cycles
Lemma all_A_cycles width signals :
segRLs source_tm
  (hashes^^(signals * 2^width))
  (hashes^^signals)
  (A8^^width) (A8^^width).
L1252new
157Lemmaprimary_lift
Lemma primary_lift signals width input output :
segRLs source_tm (hashes^^signals) [] input output ->
segRLs source_tm (hashes^^(signals*2^width)) []
  (A8^^width ++ input) (A8^^width ++ output).
L1266new
158Lemmaprimary_one_rule
Lemma primary_one_rule p w1 w2 :
segRLs source_tm hashes [] w1 w2 ->
segRLs source_tm (hashes^^(2^p)) []
  (A8^^p ++ w1) (A8^^p ++ w2).
L1274new
159Definitionca_pair_calls
Definition ca_pair_calls (width : nat) : nat := 2 * 2^width.
L1284new
160Lemmaca_pair0
Lemma ca_pair0 : segRLs source_tm (hashes^^2) [] (C8 ++ C8) (A8^^2).
L1286new
161Lemmaca_pair
Lemma ca_pair width rest :
segRLs source_tm (hashes^^ca_pair_calls width) []
  (A8^^width ++ C8 ++ C8 ++ rest)
  (A8^^(width+2) ++ rest).
L1291new
162Fixpointc_sweep_calls
Fixpoint c_sweep_calls (width pairs : nat) : nat :=
match pairs with
| O => O
| S pairs' => ca_pair_calls width + c_sweep_calls (width+2) pairs'
end.
L1300new
163Lemmac_sweep
Lemma c_sweep width pairs rest :
segRLs source_tm
  (hashes^^c_sweep_calls width pairs) []
  (A8^^width ++ C8^^(2*pairs+1) ++ rest)
  (A8^^(width+2*pairs) ++ C8 ++ rest).
L1306new
164Definitionca_finish_calls
Definition ca_finish_calls (width : nat) : nat := 4 * 2^width.
L1324new
165Lemmaca_finish0
Lemma ca_finish0 :
segRLs source_tm (hashes^^4) []
  (C8 ++ B8 ++ U ++ [1;1;1;1] ++ A8 ++ B8 ++ A8)
  (A8^^3 ++ U^^2 ++ B8 ++ B8).
L1326new
166Lemmaca_finish
Lemma ca_finish width rest :
segRLs source_tm
  (hashes^^ca_finish_calls width) []
  (A8^^width ++ C8 ++ B8 ++ U ++ [1;1;1;1] ++
    A8 ++ B8 ++ A8 ++ rest)
  (A8^^(width+3) ++ U^^2 ++ B8 ++ B8 ++ rest).
L1334new
167Definitionca_start_calls
Definition ca_start_calls (width : nat) : nat := 2 * 2^width.
L1345new
168Lemmaca_start0
Lemma ca_start0 k :
segRLs source_tm (hashes^^2) []
  (C8 ++ A8^^k ++ B8 ++ B8 ++ A8 ++ B8 ++ A8)
  (A8 ++ C8^^k ++ B8 ++ U ++ [1;1;1;1] ++ A8 ++ B8 ++ A8).
L1347new
169Lemmaca_start
Lemma ca_start width k rest :
segRLs source_tm
  (hashes^^ca_start_calls width) []
  (A8^^width ++ C8 ++ A8^^k ++ B8 ++ B8 ++
    A8 ++ B8 ++ A8 ++ rest)
  (A8^^(width+1) ++ C8^^k ++ B8 ++ U ++ [1;1;1;1] ++
… +1 lines
L1364new
170Definitionca_calls
Definition ca_calls (primary pairs : nat) : nat :=
ca_start_calls primary +
(c_sweep_calls (primary+1) pairs +
 ca_finish_calls (primary+1+2*pairs)).
L1376new
171Lemmaca_batch
Lemma ca_batch primary pairs rest :
segRLs source_tm
  (hashes^^ca_calls primary pairs) []
  (A8^^primary ++ C8 ++ A8^^(2*pairs+1) ++
    B8 ++ B8 ++ A8 ++ B8 ++ A8 ++ rest)
  (A8^^(primary+2*pairs+4) ++ U^^2 ++ B8 ++ B8 ++ rest).
L1381new
172RecordBinaryColumn
Record BinaryColumn := mkBinaryColumn {
  column_e : nat;
  column_digits : list BDigit;
  column_length : length column_digits = S column_e
}.
L1398new
173Definitionmixed_column_word
Definition mixed_column_word (c : BinaryColumn) : list Sym :=
E8^^column_e c ++ A8.
L1403new
174Definitionbinary_column_word
Definition binary_column_word (c : BinaryColumn) : list Sym :=
digits_word (column_digits c).
L1405new
175Definitioncolumn_required
Definition column_required (out : nat) (c : BinaryColumn) : nat :=
(out + 1) * 2 ^ S (column_e c) - 2 +
  digits_value (column_digits c).
L1407new
176Fixpointmixed_columns_required
Fixpoint mixed_columns_required (columns : list BinaryColumn) : nat :=
match columns with
| [] => 0
| c :: columns' => column_required (mixed_columns_required columns') c
end.
L1410new
177Fixpointspaced_words
Fixpoint spaced_words (words : list (list Sym)) : list Sym :=
match words with
| [] => []
| [word] => word
| word :: words' => word ++ U^^2 ++ spaced_words words'
end.
L1415new
178Definitionmixed_columns_word
Definition mixed_columns_word columns :=
spaced_words (map mixed_column_word columns).
L1421new
179Definitionbinary_columns_word
Definition binary_columns_word columns :=
spaced_words (map binary_column_word columns).
L1423new
180Lemmamixed_column_spec
Lemma mixed_column_spec c out :
segRLs source_tm (hashes ^^ column_required out c) (hashes ^^ out)
  (mixed_column_word c) (binary_column_word c).
L1426new
181Theoremmixed_columns_spec
Theorem mixed_columns_spec columns :
segRLs source_tm (hashes ^^ mixed_columns_required columns) []
  (mixed_columns_word columns) (binary_columns_word columns).
L1438new
182Definitionwidths_sum
Definition widths_sum (es : list nat) : nat :=
fold_right (fun e n => S e+n) 0%nat es.
L1459new
183Lemmawidths_sum_nil
Lemma widths_sum_nil : widths_sum [] = 0%nat.
L1462new
184Lemmawidths_sum_cons
Lemma widths_sum_cons e es : widths_sum (e::es) = S e + widths_sum es.
L1467new
185Definitioncolumns_widths
Definition columns_widths columns := map S (map column_e columns).
L1471new
186Definitioncolumns_width_sum
Definition columns_width_sum columns :=
fold_right Nat.add 0%nat (columns_widths columns).
L1472new
187Lemmacolumns_width_sum_cons
Lemma columns_width_sum_cons c columns :
columns_width_sum (c :: columns) = S (column_e c) + columns_width_sum columns.
L1475new
188Lemmacolumns_width_sum_singleton
Lemma columns_width_sum_singleton c :
columns_width_sum [c] = S (column_e c).
L1481new
189Lemmawidths_sum_column_es
Lemma widths_sum_column_es columns :
widths_sum (map column_e columns) = columns_width_sum columns.
L1487new
190Lemmamap_S_injective
Lemma map_S_injective xs ys : map S xs = map S ys -> xs = ys.
L1494new
191Lemmacolumns_width_sum_positive
Lemma columns_width_sum_positive columns :
columns <> [] -> 1 <= columns_width_sum columns.
L1501new
192Fixpointgeom4n
Fixpoint geom4n (n : nat) : nat :=
match n with
| O => O
| S n' => 1 + 4 * geom4n n'
end.
L1506new
193Definitionhalf_parameter
Definition half_parameter (n : nat) : nat := 2*n+6.
L1511new
194Definitionround_primary_width
Definition round_primary_width (current previous : nat) : nat :=
half_parameter current + half_parameter previous + 6.
L1512new
195Definitionround_outer_suffix
Definition round_outer_suffix (previous : nat) : list BDigit :=
[BB; BB; BA; BB; BA; BB] ++ z_tail_digits previous.
L1514new
196Definitionround_outer_digits
Definition round_outer_digits (current previous : nat) : list BDigit :=
repeat BA (half_parameter current + 2) ++
  round_outer_suffix previous.
L1516new
197Definitionround_post_unary
Definition round_post_unary (current previous : nat) : nat :=
cd_calls (half_parameter current) +
  ca_calls (half_parameter current) (previous+4).
L1519new
198Lemmageom4n_succ
Lemma geom4n_succ n : geom4n (S n) = 1 + 4 * geom4n n.
L1523new
199Lemmac_sweep_calls_formula
Lemma c_sweep_calls_formula width pairs :
c_sweep_calls width pairs = 2^(width+1) * geom4n pairs.
L1528new
200Lemmaca_calls_formula
Lemma ca_calls_formula primary pairs :
ca_calls primary pairs =
  2^(primary+1) +
  (2^(primary+2) * geom4n pairs + 2^(primary+2*pairs+3)).
L1540new
201Lemmacd_calls_formula
Lemma cd_calls_formula n :
1 <= n -> cd_calls n = 2^(n+1)-2.
L1557new
202Lemmaround_post_unary_formula
Lemma round_post_unary_formula current previous :
round_post_unary current previous =
  2^(half_parameter current+2) *
    (1 + geom4n (previous+4) + 2^(2*(previous+4)+1)) - 2.
L1564new
203Lemmadigits_value_app
Lemma digits_value_app ds1 ds2 :
digits_value (ds1 ++ ds2) =
  digits_value ds1 + 2^(length ds1) * digits_value ds2.
L1588new
204Lemmadigits_value_repeat_BA
Lemma digits_value_repeat_BA n : digits_value (repeat BA n) = 0%nat.
L1598new
205Lemmaround_outer_suffix_length
Lemma round_outer_suffix_length previous :
length (round_outer_suffix previous) = 2*previous+10.
L1603new
206Lemmaround_outer_digits_length
Lemma round_outer_digits_length current previous :
length (round_outer_digits current previous) =
  round_primary_width current previous.
L1610new
207Lemmaround_outer_suffix_zero
Lemma round_outer_suffix_zero : digits_value (round_outer_suffix 0) = 811.
L1618new
208Lemmaround_outer_suffix_succ
Lemma round_outer_suffix_succ previous :
digits_value (round_outer_suffix (S previous)) + 1 =
  4 * digits_value (round_outer_suffix previous).
L1623new
209Lemmaround_outer_suffix_formula
Lemma round_outer_suffix_formula previous :
2 * digits_value (round_outer_suffix previous) =
  1 + geom4n (previous+4) +
    2^(2*(previous+4)+1) + 2^(2*(previous+4)+2).
L1632new
210Lemmaround_outer_digits_value
Lemma round_outer_digits_value current previous :
digits_value (round_outer_digits current previous) =
  2^(half_parameter current+1) *
    (1 + geom4n (previous+4) +
      2^(2*(previous+4)+1) + 2^(2*(previous+4)+2)).
L1659new
211Theoremround_unary_decodes_outer
Theorem round_unary_decodes_outer current previous :
round_post_unary current previous / 2 + 1 +
    2^(round_primary_width current previous-1) =
  digits_value (round_outer_digits current previous).
L1676new
212Lemmadigits_word_repeat_BA
Lemma digits_word_repeat_BA n : digits_word (repeat BA n) = A8^^(n).
L1702new
213Lemmadigits_word_app
Lemma digits_word_app ds1 ds2 :
digits_word (ds1 ++ ds2) = digits_word ds1 ++ digits_word ds2.
L1709new
214Lemmaround_outer_digits_word
Lemma round_outer_digits_word current previous :
digits_word (round_outer_digits current previous) =
  A8^^(half_parameter current+2) ++
  B8 ++ B8 ++ A8 ++ B8 ++ A8 ++ B8 ++
  digits_word (z_tail_digits previous).
L1718new
215Lemmaz_digits_word_split
Lemma z_digits_word_split previous :
digits_word (z_digits previous) =
  B8 ++ B8 ++ B8 ++ digits_word (z_tail_digits previous).
L1730new
216Lemmasobc1_B_blank
Lemma sobc1_B_blank :
sideRLs source_tm hashes
  (B8 *> 0inf) ((E8 ++ [1;1]) *> 0inf).
L1740new
217Lemmasobc1_Bs_blank
Lemma sobc1_Bs_blank w :
sideRLs source_tm hashes
  ((B8^^(S w)) *> 0inf)
  ((A8^^w ++ E8 ++ [1;1]) *> 0inf).
L1748new
218Lemmasobc1_As_E
Lemma sobc1_As_E w :
sideRLs source_tm (hashes^^(2^w))
  ((A8^^w ++ E8 ++ [1;1]) *> 0inf)
  ((A8^^w ++ D8 ++ [1;1]) *> 0inf).
L1761new
219Lemmasobc1_As_D
Lemma sobc1_As_D w :
sideRLs source_tm (hashes^^(2^w))
  ((A8^^w ++ D8 ++ [1;1]) *> 0inf)
  ((A8^^(S w) ++ [1;1]) *> 0inf).
L1774new
220Lemmasobc1_B_edge
Lemma sobc1_B_edge w :
sideRLs source_tm (hashes^^((2^(S w))+1))
  ((B8^^(S w)) *> 0inf) ((A8^^(S w) ++ [1;1]) *> 0inf).
L1787new
221Lemmaall_B_carry
Lemma all_B_carry w :
segRLs source_tm hashes hashes (B8^^S w) (A8^^S w).
L1798new
222Lemmabinary_column_carry_to_zero
Lemma binary_column_carry_to_zero c out :
segRLs source_tm
  (hashes^^S (bfinish_count (column_digits c) out))
  (hashes^^S out)
  (binary_column_word c) (A8^^S (column_e c)).
L1805new
223Definitionall_A_columns_word
Definition all_A_columns_word columns :=
spaced_words (map (fun c => A8^^S (column_e c)) columns).
L1818new
224Lemmabinary_columns_word_cons2
Lemma binary_columns_word_cons2 c c' columns :
binary_columns_word (c::c'::columns) =
  binary_column_word c ++ U^^2 ++ binary_columns_word (c'::columns).
L1821new
225Lemmaall_A_columns_word_cons2
Lemma all_A_columns_word_cons2 c c' columns :
all_A_columns_word (c::c'::columns) =
  A8^^S (column_e c) ++ U^^2 ++ all_A_columns_word (c'::columns).
L1828new
226Fixpointcolumns_frontier_count
Fixpoint columns_frontier_count (columns : list BinaryColumn) : nat :=
match columns with
| [] => 0
| [c] => bfinish_count (column_digits c) 0 +
    2^S (column_e c) + 1
| c :: columns' =>
… +3 lines
L1834new
227Lemmacolumns_frontier_count_positive
Lemma columns_frontier_count_positive columns :
columns <> [] -> 1 <= columns_frontier_count columns.
L1844new
228Theorembinary_columns_to_frontier
Theorem binary_columns_to_frontier columns :
columns <> [] ->
sideRLs source_tm
  (hashes^^columns_frontier_count columns)
  ((binary_columns_word columns) *> 0inf)
  ((all_A_columns_word columns ++ [1;1]) *> 0inf).
L1851new
229Lemmaraw_separator_return
Lemma raw_separator_return l r :
([1;0;1] *> X4^^2 *> Q8 *> l) {{{((F, []), L)}}} r
  -[source_tm]->+
([1;0;1] *> l) {{{((F, []), L)}}}
  ((A8 ++ U^^2) *> r).
L1886new
230Lemmaraw_Bs_to_Qs
Lemma raw_Bs_to_Qs k :
segRR source_tm (B, []) (B, []) (B8^^k) (Q8^^k).
L1896new
231Lemmaraw_B_returns
Lemma raw_B_returns k l r :
([1;0;1] *> Q8^^k *> l) {{{((F, []), L)}}} r
  -[source_tm]->*
([1;0;1] *> l) {{{((F, []), L)}}} (E8^^k *> r).
L1902new
232Definitionfull_exception_columns
Definition full_exception_columns es :=
spaced_words (map (fun e => B8^^S e) es) ++ [1;1].
L1917new
233Definitioninitialized_mixed_columns
Definition initialized_mixed_columns es :=
spaced_words (map (fun e => E8^^e ++ A8) es).
L1919new
234Lemmafull_exception_columns_cons2
Lemma full_exception_columns_cons2 e e' es :
full_exception_columns (e::e'::es) =
  B8^^S e ++ U^^2 ++ full_exception_columns (e'::es).
L1922new
235Lemmainitialized_mixed_columns_cons2
Lemma initialized_mixed_columns_cons2 e e' es :
initialized_mixed_columns (e::e'::es) =
  (E8^^e ++ A8) ++ U^^2 ++ initialized_mixed_columns (e'::es).
L1930new
236Lemmaraw_exception_columns
Lemma raw_exception_columns es l :
es <> [] ->
l {{{((B, []), R)}}} (full_exception_columns es *> 0inf)
  -[source_tm]->+
([1;0;1] *> l) {{{((F, []), L)}}}
  (initialized_mixed_columns es *> 0inf).
L1938new
237Definitionexception_columns_raw_source
Definition exception_columns_raw_source (n : nat) (es : list nat) : Q * tape :=
common_left_wall {{{((B, []), R)}}}
  ((U^^(2*n+1) ++ full_exception_columns es) *> 0inf).
L1970new
238Definitionexception_columns_pre
Definition exception_columns_pre (n : nat) (es : list nat) : Q * tape :=
exception_pre_left n {{{((F, []), L)}}}
  (initialized_mixed_columns es *> 0inf).
L1973new
239Lemmaexception_columns_raw_to_pre
Lemma exception_columns_raw_to_pre n es :
es <> [] ->
exception_columns_raw_source n es -[source_tm]->*
  exception_columns_pre n es.
L1977new
240Theoremsobc1_exception_columns_from_seg
Theorem sobc1_exception_columns_from_seg n es output :
es <> [] ->
segRLs source_tm (hashes^^n) []
  (initialized_mixed_columns es) output ->
exception_columns_raw_source n es -[source_tm]->*
  exception_done n output.
L1997new
241Lemmainitialized_mixed_columns_eq
Lemma initialized_mixed_columns_eq es columns :
columns_widths columns = map S es ->
initialized_mixed_columns es = mixed_columns_word columns.
L2011new
242Lemmadigits_value_BBBA_pairs
Lemma digits_value_BBBA_pairs k :
digits_value ([BB; BA]^^k) = geom4n k.
L2020new
243Definitionsobc1_second_tail_digits
Definition sobc1_second_tail_digits : list BDigit :=
[BB] ++ ([BB; BA]^^9) ++ [BA; BB; BB; BB; BA].
L2028new
244Lemmasobc1_second_tail_length
Lemma sobc1_second_tail_length :
length sobc1_second_tail_digits = 24.
L2031new
245Lemmasobc1_second_tail_value
Lemma sobc1_second_tail_value :
2 * digits_value sobc1_second_tail_digits =
  1 + geom4n 10 + 7 * 2^21.
L2038new
246Lemmaprimary_D_absorb
Lemma primary_D_absorb primary rest :
segRLs source_tm (hashes^^(2^primary)) []
  (A8^^primary ++ D8 ++ rest)
  (A8^^(S primary) ++ rest).
L2055new
247Lemmainitial_u_pairs
Lemma initial_u_pairs primary pairs rest :
segRLs source_tm
  (hashes^^initial_u_pair_calls primary pairs) []
  (A8^^primary ++ C8 ++ A8 ++ U^^(2*pairs) ++ rest)
  (A8^^(primary+pairs) ++ C8 ++ A8 ++ rest).
L2066new
248Lemmaprimary_one_side_rule
Lemma primary_one_side_rule primary input output :
sideRLs source_tm hashes input output ->
sideRLs source_tm (hashes^^(2^primary))
  ((A8^^primary) *> input) ((A8^^primary) *> output).
L2094new
249Lemmabfinish_count_app
Lemma bfinish_count_app ds1 ds2 out :
bfinish_count (ds1 ++ ds2) out =
  bfinish_count ds1 (bfinish_count ds2 out).
L2107new
250Lemmaprimary_single_B_D
Lemma primary_single_B_D low :
segRLs source_tm (hashes^^(2^low)) []
  (A8^^low ++ B8 ++ D8 ++ [1;1])
  (A8^^(low+2) ++ [1;1]).
L2115new
251Lemmasobc1_initial_pre_side
Lemma sobc1_initial_pre_side :
sideRLs source_tm
  (hashes^^sobc1_initial_pre_calls)
  ((A8^^3 ++ D8 ++ C8 ++ A8 ++ U^^28 ++
    A8 ++ A8 ++ B8 ++ A8) *> 0inf)
  ((A8^^24 ++ [1;1]) *> 0inf).
L2141new
252Lemmazero_primary_finish_seg
Lemma zero_primary_finish_seg width rest :
segRLs source_tm (hashes^^(2^width-1)) []
  (A8^^width ++ rest) (B8^^width ++ rest).
L2176new
253Lemmaordinary_all_A_to_exception
Lemma ordinary_all_A_to_exception width u n :
1 <= width -> u+(2^width-1) = 2*n+1 ->
ordinary_left u {{{((B, []), R)}}}
  ((A8^^width ++ [1;1]) *> 0inf) -[source_tm]->+
exception_raw_source n (width-1).
L2188new
254Lemmasobc1_first_call_to_exception
Lemma sobc1_first_call_to_exception :
sobc1_first_call -[source_tm]->*
  exception_raw_source sobc1_first_half 23.
L2207new
255Lemmabfinish_count_value
Lemma bfinish_count_value ds out :
bfinish_count ds out + digits_value ds + 1 =
  (out+1) * 2^(length ds).
L2227new
256Lemmadigits_value_bound
Lemma digits_value_bound ds :
digits_value ds < 2^(length ds).
L2238new
257Lemmadigits_value_BB_BB_lower
Lemma digits_value_BB_BB_lower ds : 3 <= digits_value (BB :: BB :: ds).
L2246new
258Lemmadigits_value_BB_odd
Lemma digits_value_BB_odd ds : Nat.odd (digits_value (BB :: ds)) = true.
L2251new
259Lemmadigits_value_msb_BA_safe
Lemma digits_value_msb_BA_safe ds :
3 <= length ds ->
digits_value (ds ++ [BA]) <= 2^(length (ds ++ [BA]))-6.
L2256new
260Lemmabinary_column_value_bound
Lemma binary_column_value_bound c :
digits_value (column_digits c) < 2^S (column_e c).
L2276new
261Definitioncolumns_frontier_next
Definition columns_frontier_next (columns : list BinaryColumn) : nat :=
match columns with
| [] => 2
| _ => columns_frontier_count columns
end.
L2282new
262Lemmacolumns_frontier_head_equation
Lemma columns_frontier_head_equation c columns :
columns_frontier_count (c :: columns) +
    digits_value (column_digits c) =
  columns_frontier_next columns * 2^S (column_e c).
L2288new
263Lemmapow2_S_odd_false
Lemma pow2_S_odd_false n : Nat.odd (2^S n) = false.
L2312new
264Lemmacolumns_frontier_head_parity
Lemma columns_frontier_head_parity c columns :
Nat.odd (columns_frontier_count (c :: columns)) =
Nat.odd (digits_value (column_digits c)).
L2318new
265Definitionpost_ca_side
Definition post_ca_side (primary : nat) (columns : list BinaryColumn) : side :=
((A8^^primary ++ U^^2 ++ binary_columns_word columns) *> 0inf).
L2332new
266Definitionall_A_frontier_side
Definition all_A_frontier_side
  (primary : nat) (columns : list BinaryColumn) : side :=
((A8^^primary ++ U^^2 ++ all_A_columns_word columns ++ [1;1]) *>
  0inf).
L2334new
267Definitionpost_ca_state
Definition post_ca_state
  (unary primary : nat) (columns : list BinaryColumn) : Q * tape :=
ordinary_left unary {{{((B, []), R)}}} (post_ca_side primary columns).
L2338new
268Definitionall_A_frontier_state
Definition all_A_frontier_state
  (unary primary : nat) (columns : list BinaryColumn) : Q * tape :=
ordinary_left unary {{{((B, []), R)}}}
  (all_A_frontier_side primary columns).
L2341new
269Definitionpost_to_frontier_calls
Definition post_to_frontier_calls
  (primary : nat) (columns : list BinaryColumn) : nat :=
columns_frontier_count columns * 2^primary.
L2345new
270Lemmapost_ca_to_frontier_side
Lemma post_ca_to_frontier_side primary columns :
columns <> [] ->
sideRLs source_tm
  (hashes^^post_to_frontier_calls primary columns)
  (post_ca_side primary columns)
  (all_A_frontier_side primary columns).
L2349new
271Theorempost_ca_to_frontier
Theorem post_ca_to_frontier unary primary columns :
columns <> [] ->
post_ca_state unary primary columns -[source_tm]->*
all_A_frontier_state
  (unary + post_to_frontier_calls primary columns) primary columns.
L2370new
272Definitionall_A_widths_word
Definition all_A_widths_word es :=
spaced_words (map (fun e => A8^^S e) es).
L2382new
273Lemmaall_A_widths_word_cons2
Lemma all_A_widths_word_cons2 e e' es :
all_A_widths_word (e::e'::es) =
  A8^^S e ++ U^^2 ++ all_A_widths_word (e'::es).
L2385new
274Lemmaall_A_width_finish
Lemma all_A_width_finish e out :
segRLs source_tm (hashes^^((out+1)*2^(S e)-1)) (hashes^^out)
  (A8^^S e) (B8^^S e).
L2392new
275Lemmaall_A_widths_finish
Lemma all_A_widths_finish es :
es <> [] -> segRLs source_tm (hashes^^(2^(widths_sum es)-1)) []
  (all_A_widths_word es ++ [1;1]) (full_exception_columns es).
L2401new
276Lemmaall_A_widths_to_exception
Lemma all_A_widths_to_exception es u n r :
es <> [] -> u + (2^(widths_sum es)-1) = 2*n+1 ->
ordinary_left u {{{((B, []), R)}}}
    ((all_A_widths_word es ++ [1;1]) *> r) -[source_tm]->+
common_left_wall {{{((B, []), R)}}}
    ((U^^(2*n+1) ++ full_exception_columns es) *> r).
L2428new
277Definitionsobc1_middle_width
Definition sobc1_middle_width (n : nat) : nat := n+26.
L2452new
278Definitionsobc1_before_second_finish_calls
Definition sobc1_before_second_finish_calls (n : nat) : nat :=
2^n + (2^n + (c_sweep_calls (n+1) 10 +
(2^(n+21) + (2^(n+21) +
((13*2^(n+22)-1) + (2^(n+26)+1)))))).
L2453new
279Definitionsobc1_middle_index
Definition sobc1_middle_index : nat :=
2^22 + 2^21 + 2^19 - 4.
L2457new
280Lemmasobc1_middle_index_half
Lemma sobc1_middle_index_half :
half_parameter sobc1_middle_index = sobc1_first_half.
L2460new
281Definitionsobc1_second_digits_at
Definition sobc1_second_digits_at (n : nat) : list BDigit :=
repeat BA (n+2) ++ sobc1_second_tail_digits.
L2475new
282Lemmasobc1_second_digits_at_length
Lemma sobc1_second_digits_at_length n :
length (sobc1_second_digits_at n) = sobc1_middle_width n.
L2478new
283Lemmasobc1_second_digits_at_value
Lemma sobc1_second_digits_at_value n :
digits_value (sobc1_second_digits_at n) =
  2^(n+2) * digits_value sobc1_second_tail_digits.
L2485new
284Definitionsobc1_second_digits
Definition sobc1_second_digits : list BDigit :=
sobc1_second_digits_at sobc1_first_half.
L2493new
285Definitionsobc1_second_half
Definition sobc1_second_half : nat :=
2^sobc1_middle_width sobc1_first_half - 2 +
  digits_value sobc1_second_digits.
L2495new
286Lemmasobc1_second_digits_length
Lemma sobc1_second_digits_length :
length sobc1_second_digits = sobc1_middle_width sobc1_first_half.
L2499new
287Lemmasobc1_second_total_general
Lemma sobc1_second_total_general n :
1 <= n ->
cd_calls n + sobc1_before_second_finish_calls n +
    (2^sobc1_middle_width n-1) =
  2*(2^sobc1_middle_width n-2 +
    digits_value (sobc1_second_digits_at n))+1.
L2506new
288Lemmasobc1_second_total_half
Lemma sobc1_second_total_half :
cd_calls sobc1_first_half +
    sobc1_before_second_finish_calls sobc1_first_half +
    (2^sobc1_middle_width sobc1_first_half-1) =
  2*sobc1_second_half+1.
L2553new
289Definitioncolumn_value
Definition column_value (c : BinaryColumn) : nat :=
digits_value (column_digits c).
L2564new
290Definitioncolumn_width
Definition column_width (c : BinaryColumn) : nat := S (column_e c).
L2566new
291Definitioncolumn_safe
Definition column_safe (c : BinaryColumn) : Prop :=
3 <= column_value c /\ column_value c <= 2^(column_width c)-6.
L2567new
292Lemmacolumn_safe_lower
Lemma column_safe_lower c : column_safe c -> 3 <= column_value c.
L2570new
293Definitioncolumn_next_value
Definition column_next_value (right_odd : bool) (c : BinaryColumn) : nat :=
(if right_odd then 2^(column_e c) else 2^(S (column_e c))) -
  column_value c / 2.
L2574new
294Definitioncolumn_step
Definition column_step
  (right_odd : bool) (c c' : BinaryColumn) : Prop :=
column_e c' = column_e c /\
column_value c' = column_next_value right_odd c.
L2577new
295Fixpointcolumns_step
Fixpoint columns_step
  (columns columns' : list BinaryColumn) : Prop :=
match columns, columns' with
| [c], [c'] => column_step true c c'
| c :: d :: tail, c' :: rest' =>
    column_step (Nat.odd (column_value d)) c c' /\
… +3 lines
L2581new
296Lemmacolumn_next_value_bound
Lemma column_next_value_bound right_odd c :
3 <= column_value c ->
column_next_value right_odd c < 2^(column_width c).
L2591new
297Lemmacolumn_step_exists
Lemma column_step_exists right_odd c :
3 <= column_value c ->
exists c', column_step right_odd c c'.
L2599new
298Theoremcolumns_step_exists
Theorem columns_step_exists columns :
columns <> [] ->
Forall column_safe columns ->
exists columns', columns_step columns columns'.
L2614new
299Lemmacolumns_step_nonempty
Lemma columns_step_nonempty columns columns' :
columns_step columns columns' -> columns <> [] /\ columns' <> [].
L2637new
300Lemmacolumns_step_widths
Lemma columns_step_widths columns columns' :
columns_step columns columns' ->
columns_widths columns' = columns_widths columns.
L2646new
301Definitionceil_half
Definition ceil_half (n : nat) : nat := (n+1)/2.
L2662new
302Lemmaodd_true_witness
Lemma odd_true_witness n :
Nat.odd n = true -> exists q, n = 2*q+1.
L2664new
303Lemmaceil_half_odd
Lemma ceil_half_odd q : ceil_half (2*q+1) = q+1.
L2670new
304Lemmaceil_half_scaled_sub
Lemma ceil_half_scaled_sub t w v :
1 <= t -> 1 <= w -> v < 2^w ->
ceil_half (t*2^w-v) = t*2^(w-1)-v/2.
L2675new
305Lemmafrontier_ceil_half
Lemma frontier_ceil_half c columns :
ceil_half (columns_frontier_count (c :: columns)) +
    column_value c / 2 =
  columns_frontier_next columns * 2^(column_e c).
L2686new
306Lemmaodometer_cons_arith
Lemma odometer_cons_arith e s tailF tailR v v' :
1 <= s -> 1 <= tailF -> v < 2^(S e) ->
tailR+2 = 2^(s-1)+ceil_half tailF ->
v' = (if Nat.odd tailF then 2^e else 2^(S e))-v/2 ->
(tailR+1)*2^(S e)-2+v'+2 =
  2^(S e+s-1)+ceil_half (tailF*2^(S e)-v).
L2709new
307Lemmacolumns_step_width_sum
Lemma columns_step_width_sum columns columns' :
columns_step columns columns' ->
columns_width_sum columns' = columns_width_sum columns.
L2764new
308Theoremcolumns_step_required
Theorem columns_step_required columns columns' :
columns_step columns columns' ->
mixed_columns_required columns' + 2 =
  2^(columns_width_sum columns - 1) +
    ceil_half (columns_frontier_count columns).
L2774new
309Lemmaround_primary_width_positive
Lemma round_primary_width_positive current previous :
1 <= round_primary_width current previous.
L2839new
310Definitionround_outer_column
Definition round_outer_column (current previous : nat) : BinaryColumn.
L2844new
311Lemmaround_outer_column_word
Lemma round_outer_column_word current previous :
binary_column_word (round_outer_column current previous) =
  A8^^(half_parameter current+2) ++
  B8 ++ B8 ++ A8 ++ B8 ++ A8 ++ B8 ++
  digits_word (z_tail_digits previous).
L2852new
312Lemmaround_post_unary_half_formula
Lemma round_post_unary_half_formula current previous :
round_post_unary current previous / 2 =
  2^(half_parameter current+1) *
    (1 + geom4n (previous+4) + 2^(2*(previous+4)+1)) - 1.
L2862new
313Definitionround_frontier_unary
Definition round_frontier_unary
  (current previous : nat) (columns : list BinaryColumn) : nat :=
round_post_unary current previous +
  columns_frontier_count columns *
    2^(round_primary_width current previous).
L2879new
314Definitionround_next_half
Definition round_next_half
  (current previous : nat) (columns : list BinaryColumn) : nat :=
round_frontier_unary current previous columns / 2 +
  2^(round_primary_width current previous +
    columns_width_sum columns - 1) - 1.
L2884new
315Lemmaround_frontier_unary_half
Lemma round_frontier_unary_half current previous columns :
round_frontier_unary current previous columns / 2 =
round_post_unary current previous / 2 +
  columns_frontier_count columns *
    2^(round_primary_width current previous-1).
L2890new
316Definitionround_next_index
Definition round_next_index current previous columns : nat :=
(round_next_half current previous columns - 6) / 2.
L2912new
317Lemmaround_next_half_even_ge6
Lemma round_next_half_even_ge6 current previous columns :
columns <> [] ->
exists k, round_next_half current previous columns = 2*k /\ 6 <= 2*k.
L2915new
318Lemmaround_next_half_parameter
Lemma round_next_half_parameter current previous columns :
columns <> [] ->
round_next_half current previous columns =
  half_parameter (round_next_index current previous columns).
L2977new
319Definitioncolumns_head_odd
Definition columns_head_odd (columns : list BinaryColumn) : Prop :=
match columns with
| [] => False
| c :: _ => Nat.odd (column_value c) = true
end.
L2987new
320Theoremround_output_required
Theorem round_output_required current previous columns columns' :
columns <> [] ->
columns_step columns columns' ->
columns_head_odd columns ->
mixed_columns_required
    (round_outer_column current previous :: columns') =
… +1 lines
L2993new
321Definitionfrontier_es
Definition frontier_es
  (current previous : nat) (columns : list BinaryColumn) : list nat :=
(round_primary_width current previous-1) :: map column_e columns.
L3046new
322Definitionround_output_columns
Definition round_output_columns current previous columns' :=
round_outer_column current previous :: columns'.
L3049new
323Lemmaround_frontier_exception_equation
Lemma round_frontier_exception_equation current previous columns :
columns <> [] ->
round_frontier_unary current previous columns+
    (2^(round_primary_width current previous+
      columns_width_sum columns)-1) =
  2*round_next_half current previous columns+1.
L3052new
324Theoremall_A_frontier_to_exception_done
Theorem all_A_frontier_to_exception_done
  current previous columns columns' :
columns <> [] ->
columns_step columns columns' ->
columns_head_odd columns ->
all_A_frontier_state
… +6 lines
L3096new
325Definitionz_column
Definition z_column (previous : nat) : BinaryColumn.
L3153new
326Lemmaz_column_word
Lemma z_column_word previous :
binary_column_word (z_column previous) = digits_word (z_digits previous).
L3159new
327Lemmaz_column_e
Lemma z_column_e previous : column_e (z_column previous) =
half_parameter previous.
L3165new
328Lemmabinary_columns_word_cons
Lemma binary_columns_word_cons c columns :
columns <> [] ->
binary_columns_word (c :: columns) =
  binary_column_word c ++ U^^2 ++ binary_columns_word columns.
L3171new
329Lemmaca_calls_positive
Lemma ca_calls_positive primary pairs : 1 <= ca_calls primary pairs.
L3179new
330Lemmaexception_done_ca
Lemma exception_done_ca n pairs rest :
1 <= n ->
exception_done n
  (A8^^(2*pairs) ++ B8++B8++A8++B8++A8++rest) -[source_tm]->+
ordinary_left (cd_calls n + ca_calls n pairs) {{{((B, []), R)}}}
  ((A8^^(n+2*pairs+4) ++ U^^2 ++ B8++B8++rest) *> 0inf).
L3184new
331Theoremexception_done_to_next_post
Theorem exception_done_to_next_post
  current previous columns columns' :
columns <> [] ->
columns_step columns columns' ->
exception_done (round_next_half current previous columns)
    (binary_columns_word
… +8 lines
L3209new
332Theoremsobc1_canonical_round
Theorem sobc1_canonical_round
  current previous columns columns' :
columns <> [] ->
columns_head_odd columns ->
columns_step columns columns' ->
post_ca_state (round_post_unary current previous)
… +8 lines
L3248new
333Definitionround_width_dominance
Definition round_width_dominance
  (current previous : nat) (columns : list BinaryColumn) : Prop :=
2 * columns_width_sum columns + 4 <= half_parameter previous + 1 /\
2 * (half_parameter previous + 1 + columns_width_sum columns) + 4 <=
  half_parameter current + 1.
L3274new
334Lemmapow2_linear_margin
Lemma pow2_linear_margin n : 2*n+8 <= 2^(n+5).
L3280new
335Lemmaoutput_columns_width_sum
Lemma output_columns_width_sum previous columns columns' :
columns_step columns columns' ->
columns_width_sum (z_column previous :: columns') =
  half_parameter previous + 1 + columns_width_sum columns.
L3287new
336Lemmaround_next_half_growth
Lemma round_next_half_growth current previous columns :
columns <> [] ->
2 * (half_parameter current + 1 +
    (half_parameter previous + 1 + columns_width_sum columns)) + 4 <=
  round_next_half current previous columns + 1.
L3297new
337Theoremround_width_dominance_step
Theorem round_width_dominance_step
  current previous columns columns' :
columns <> [] ->
columns_step columns columns' ->
round_width_dominance current previous columns ->
round_width_dominance
… +2 lines
L3316new
338Lemmaz_column_width
Lemma z_column_width previous :
column_width (z_column previous) = z_birth_width previous.
L3334new
339Lemmaz_column_value
Lemma z_column_value previous :
Z.of_nat (column_value (z_column previous)) = z_birth_value previous.
L3341new
340Lemmaz_birth_value_odd
Lemma z_birth_value_odd n : (z_birth_value n mod 2 = 1)%Z.
L3348new
341LemmaZodd_of_nat
Lemma Zodd_of_nat n : Z.odd (Z.of_nat n) = Nat.odd n.
L3353new
342Lemmaz_column_odd
Lemma z_column_odd previous :
Nat.odd (column_value (z_column previous)) = true.
L3361new
343RecordAbstractColumn
Record AbstractColumn := mkAbstractColumn {
  abstract_width : nat;
  abstract_value : Z;
}.
L3370new
344Definitionabstract_of_column
Definition abstract_of_column (c : BinaryColumn) : AbstractColumn :=
mkAbstractColumn (column_width c) (Z.of_nat (column_value c)).
L3374new
345Definitionabstract_safe
Definition abstract_safe (c : AbstractColumn) : Prop :=
(3 <= abstract_value c <= pow2 (abstract_width c)-6)%Z.
L3376new
346Definitionabstract_step
Definition abstract_step (right_odd : bool) (c : AbstractColumn) : AbstractColumn :=
mkAbstractColumn (abstract_width c)
  (arbitrary_column_step (pow2 (abstract_width c)) right_odd (abstract_value c)).
L3378new
347Fixpointabstract_columns_next
Fixpoint abstract_columns_next (columns : list AbstractColumn) : list AbstractColumn :=
match columns with
| [] => []
| c :: rest =>
    match rest with
    | [] => [abstract_step true c]
… +3 lines
L3381new
348Definitionabstract_columns_iter
Definition abstract_columns_iter n columns :=
Nat.iter n abstract_columns_next columns.
L3390new
349Definitionabstract_head_odd
Definition abstract_head_odd (columns : list AbstractColumn) : Prop :=
match columns with [] => False | c::_ => Z.odd (abstract_value c) = true end.
L3392new
350Definitionabstract_columns_safe
Definition abstract_columns_safe := Forall abstract_safe.
L3394new
351Definitionabstract_suffix_good
Definition abstract_suffix_good (settle : nat) (columns : list AbstractColumn) : Prop :=
columns <> [] /\
(forall n, abstract_columns_safe (abstract_columns_iter n columns)) /\
(forall n, settle <= n -> abstract_head_odd (abstract_columns_iter n columns)).
L3395new
352Lemmahd_nonempty
Lemma hd_nonempty {A} (x y : A) xs : xs <> [] -> hd x xs = hd y xs.
L3400new
353Lemmaabstract_columns_next_nonempty
Lemma abstract_columns_next_nonempty columns : columns <> [] -> abstract_columns_next columns <> [].
L3405new
354Lemmaabstract_columns_iter_nonempty
Lemma abstract_columns_iter_nonempty n columns : columns <> [] -> abstract_columns_iter n columns <> [].
L3410new
355Lemmaabstract_columns_iter_succ_right
Lemma abstract_columns_iter_succ_right n columns : abstract_columns_next (abstract_columns_iter n columns) = abstract_columns_iter (S n) columns.
L3416new
356Lemmaabstract_columns_iter_succ_left
Lemma abstract_columns_iter_succ_left n columns :
abstract_columns_iter n (abstract_columns_next columns) =
abstract_columns_iter (S n) columns.
L3421new
357Lemmaabstract_columns_iter_add
Lemma abstract_columns_iter_add m n columns : abstract_columns_iter (m+n) columns = abstract_columns_iter n (abstract_columns_iter m columns).
L3428new
358Lemmaabstract_columns_next_cons
Lemma abstract_columns_next_cons c columns :
columns <> [] ->
abstract_columns_next (c::columns) =
  abstract_step (Z.odd (abstract_value (hd c columns))) c :: abstract_columns_next columns.
L3433new
359Lemmaabstract_columns_iter_cons
Lemma abstract_columns_iter_cons n c columns :
columns <> [] -> exists c',
  abstract_columns_iter n (c::columns) =
    c'::abstract_columns_iter n columns.
L3441new
360Lemmaabstract_columns_iter_head_width
Lemma abstract_columns_iter_head_width n c columns :
columns <> [] -> abstract_width (hd c (abstract_columns_iter n (c::columns))) = abstract_width c.
L3455new
361Lemmacolumn_safe_abstract
Lemma column_safe_abstract c : column_safe c <-> abstract_safe (abstract_of_column c).
L3470new
362Lemmacolumns_safe_abstract
Lemma columns_safe_abstract columns :
Forall column_safe columns <-> abstract_columns_safe (map abstract_of_column columns).
L3476new
363Lemmaabstract_column_step
Lemma abstract_column_step c c' right_odd :
column_safe c -> column_step right_odd c c' ->
abstract_of_column c' = abstract_step right_odd (abstract_of_column c).
L3484new
364Lemmacolumns_step_abstract
Lemma columns_step_abstract columns columns' :
Forall column_safe columns ->
columns_step columns columns' ->
map abstract_of_column columns' = abstract_columns_next (map abstract_of_column columns).
L3507new
365Fixpointabstract_head_inputs
Fixpoint abstract_head_inputs (n : nat) (columns : list AbstractColumn) : list bool :=
match n with
| O => []
| S n' =>
    match columns with
    | [] => []
… +3 lines
L3531new
366Lemmaabstract_head_inputs_length
Lemma abstract_head_inputs_length n columns :
columns <> [] -> length (abstract_head_inputs n columns) = n.
L3541new
367Definitionabstract_birth
Definition abstract_birth birth := mkAbstractColumn (z_birth_width birth) (z_birth_value birth).
L3550new
368Lemmaabstract_birth_eq
Lemma abstract_birth_eq birth : abstract_birth birth = abstract_of_column (z_column birth).
L3552new
369Lemmaabstract_iter_head_value
Lemma abstract_iter_head_value c columns n :
columns <> [] ->
abstract_value (hd c (abstract_columns_iter n (c::columns))) =
  zinputs (pow2 (abstract_width c)) (abstract_head_inputs n columns) (abstract_value c).
L3557new
370Theoremabstract_birth_early_safe
Theorem abstract_birth_early_safe birth columns n :
columns <> [] -> n <= z_birth_width birth-4 ->
abstract_safe (hd (abstract_birth birth) (abstract_columns_iter n (abstract_birth birth::columns))).
L3576new
371Lemmastable_step_safe_Z
Lemma stable_step_safe_Z width value :
4 <= width ->
(3 <= value <= pow2 width-6)%Z ->
(3 <= stable_column_step (pow2 (width-1)) value <= pow2 width-6)%Z.
L3595new
372Lemmazinputs_repeat_true
Lemma zinputs_repeat_true total n value :
zinputs total (repeat true n) value =
  Nat.iter n (arbitrary_column_step total true) value.
L3611new
373Lemmaarbitrary_true_iter
Lemma arbitrary_true_iter width n value :
1 <= width ->
Nat.iter n (arbitrary_column_step (pow2 width) true) value =
Nat.iter n (stable_column_step (pow2 (width-1))) value.
L3620new
374Lemmaarbitrary_true_iter_safe
Lemma arbitrary_true_iter_safe width n value :
4 <= width ->
(3 <= value <= pow2 width-6)%Z ->
(3 <= Nat.iter n (arbitrary_column_step (pow2 width) true) value <=
  pow2 width-6)%Z.
L3632new
375Theoremz_odd_width_converges_odd
Theorem z_odd_width_converges_odd k value :
2 <= k ->
(3 <= value <= pow2 (odd_column_width k)-6)%Z ->
Z.odd (Nat.iter (2*odd_column_width k)
  (arbitrary_column_step (pow2 (odd_column_width k)) true) value) = true.
L3642new
376Lemmaabstract_suffix_good_inputs
Lemma abstract_suffix_good_inputs settle columns q n :
abstract_suffix_good settle columns -> settle <= q ->
abstract_head_inputs n (abstract_columns_iter q columns) = repeat true n.
L3664new
377Lemmaabstract_safe_width
Lemma abstract_safe_width c : abstract_safe c -> 4 <= abstract_width c.
L3680new
378Theoremabstract_suffix_good_prepend_birth
Theorem abstract_suffix_good_prepend_birth settle columns birth :
abstract_suffix_good settle columns ->
settle <= z_birth_width birth-4 ->
abstract_suffix_good (settle+2*z_birth_width birth) (abstract_birth birth::columns).
L3687new
379Lemmaabstract_singleton_iter
Lemma abstract_singleton_iter n c :
abstract_columns_iter n [c] =
[mkAbstractColumn (abstract_width c)
  (Nat.iter n (arbitrary_column_step (pow2 (abstract_width c)) true) (abstract_value c))].
L3765new
380Theoremabstract_singleton_good
Theorem abstract_singleton_good k c :
abstract_width c = odd_column_width k -> abstract_safe c ->
abstract_suffix_good (2*abstract_width c) [c].
L3776new
381Lemmaabstract_suffix_good_shift
Lemma abstract_suffix_good_shift settle columns :
abstract_suffix_good settle columns ->
abstract_suffix_good (Nat.pred settle) (abstract_columns_next columns).
L3805new
382Definitioncolumns_schedule
Definition columns_schedule (columns : list BinaryColumn) : Prop :=
exists settle,
  abstract_suffix_good settle (map abstract_of_column columns) /\
  settle <= 2 * columns_width_sum columns.
L3815new
383Definitionsobc1_round_invariant
Definition sobc1_round_invariant
  (current previous : nat) (columns : list BinaryColumn) : Prop :=
round_width_dominance current previous columns /\
columns_schedule columns /\
columns_head_odd columns.
L3819new
384Theoremsobc1_round_invariant_progress
Theorem sobc1_round_invariant_progress current previous columns :
sobc1_round_invariant current previous columns ->
exists columns',
  post_ca_state (round_post_unary current previous)
      (round_primary_width current previous) columns
    -[source_tm]->+
… +9 lines
L3825new
385Theoremsobc1_canonical_nonhalt
Theorem sobc1_canonical_nonhalt current previous columns :
sobc1_round_invariant current previous columns ->
~ halts source_tm
  (post_ca_state (round_post_unary current previous)
    (round_primary_width current previous) columns).
L3872new
386Definitionsobc1_second_base
Definition sobc1_second_base : nat :=
2^(sobc1_first_half+25)-1 +
  2^(sobc1_first_half+1) *
    digits_value sobc1_second_tail_digits.
L3892new
387Definitionsobc1_current_index
Definition sobc1_current_index : nat := sobc1_second_base-3.
L3896new
388Lemmadouble_pred_sum_mul
Lemma double_pred_sum_mul a b c :
1 <= a -> 2*a-2+2*b*c = 2*(a-1+b*c).
L3898new
389Lemmasobc1_second_half_double_at
Lemma sobc1_second_half_double_at n :
2^sobc1_middle_width n-2 + digits_value (sobc1_second_digits_at n) =
2*(2^(n+25)-1 + 2^(n+1)*digits_value sobc1_second_tail_digits).
L3904new
390Lemmasobc1_second_half_double
Lemma sobc1_second_half_double :
sobc1_second_half = 2*sobc1_second_base.
L3917new
391Lemmasecond_base_ge3_at
Lemma second_base_ge3_at n v :
3 <= 2^(n+25)-1 + 2^(n+1)*v.
L3924new
392Lemmasobc1_second_base_ge3
Lemma sobc1_second_base_ge3 : 3 <= sobc1_second_base.
L3932new
393Lemmahalf_parameter_pred3
Lemma half_parameter_pred3 n :
3 <= n -> half_parameter (n-3) = 2*n.
L3937new
394Lemmasobc1_current_index_half
Lemma sobc1_current_index_half :
half_parameter sobc1_current_index = sobc1_second_half.
L3943new
395Lemmasobc1_first_half_large
Lemma sobc1_first_half_large : 46 <= sobc1_first_half+1.
L3951new
396Lemmaentry_current_dominance
Lemma entry_current_dominance n v :
2*(n+22)+4 <= 2*(2^(n+25)-1+2^(n+1)*v)+1.
L3960new
397Definitionsobc1_entry_rest
Definition sobc1_entry_rest : list BDigit :=
([BB; BA]^^7) ++ [BA; BB; BB; BB; BA].
L3972new
398Definitionsobc1_entry_digits
Definition sobc1_entry_digits : list BDigit :=
[BB; BB] ++ sobc1_entry_rest.
L3974new
399Lemmasobc1_second_digits_split
Lemma sobc1_second_digits_split :
sobc1_second_digits =
  repeat BA (sobc1_first_half+2) ++
    [BB; BB; BA; BB; BA] ++ sobc1_entry_rest.
L3977new
400Definitionsobc1_entry_column
Definition sobc1_entry_column : BinaryColumn :=
mkBinaryColumn 20 sobc1_entry_digits ltac:(
  unfold sobc1_entry_digits, sobc1_entry_rest;
  rewrite !length_app, lpow_length; reflexivity).
L3989new
401Lemmasobc1_entry_column_facts
Lemma sobc1_entry_column_facts :
column_width sobc1_entry_column = odd_column_width 10 /\
column_safe sobc1_entry_column /\
Nat.odd (column_value sobc1_entry_column) = true.
L3994new
402Theoremsobc1_entry_invariant
Theorem sobc1_entry_invariant :
sobc1_round_invariant sobc1_current_index sobc1_middle_index
  [sobc1_entry_column].
L4014new
403Definitionsobc1_first_output
Definition sobc1_first_output : list Sym :=
A8^^20 ++ B8 ++ A8 ++ D8 ++ A8.
L4038new
404Lemmasobc1_first_exception_seg
Lemma sobc1_first_exception_seg :
segRLs source_tm (hashes^^sobc1_first_half) []
  (E8^^23 ++ A8) sobc1_first_output.
L4041new
405Definitionsobc1_middle_digits
Definition sobc1_middle_digits (n : nat) : list BDigit :=
repeat BA (n+22) ++ [BB; BB; BA; BA].
L4065new
406Lemmasobc1_middle_digits_word
Lemma sobc1_middle_digits_word n :
digits_word (sobc1_middle_digits n) =
  A8^^(n+22) ++ B8 ++ B8 ++ A8 ++ A8.
L4068new
407Lemmasobc1_middle_digits_length
Lemma sobc1_middle_digits_length n :
length (sobc1_middle_digits n) = sobc1_middle_width n.
L4077new
408Lemmasobc1_middle_finish_count
Lemma sobc1_middle_finish_count n :
bfinish_count (sobc1_middle_digits n) 0 =
  13 * 2^(n+22) - 1.
L4084new
409Lemmasobc1_middle_to_zero_edge
Lemma sobc1_middle_to_zero_edge n :
sideRLs source_tm
  (hashes^^
    (13*2^(n+22)-1 + (2^(n+26)+1)))
  ((digits_word (sobc1_middle_digits n)) *> 0inf)
  ((A8^^(n+26) ++ [1;1]%sym) *> 0inf).
L4094new
410Lemmasobc1_initial_blank_bridge
Lemma sobc1_initial_blank_bridge :
sideRLs source_tm hashes
  ((C8 ++ B8 ++ U^^2 ++ A8^^2) *> 0inf)
  ((D8 ++ B8 ++ B8 ++ A8 ++ A8) *> 0inf).
L4115new
411Lemmasobc1_after_cd_to_before_second_finish_side
Lemma sobc1_after_cd_to_before_second_finish_side n :
sideRLs source_tm
  (hashes^^sobc1_before_second_finish_calls n)
  ((A8^^n ++ C8 ++ A8 ++ sobc1_first_output) *> 0inf)
  ((A8^^sobc1_middle_width n ++ [1;1]%sym) *> 0inf).
L4123new
412Lemmasobc1_after_cd_to_before_second_finish
Lemma sobc1_after_cd_to_before_second_finish n :
after_cd n sobc1_first_output -[source_tm]->*
ordinary_left (cd_calls n+sobc1_before_second_finish_calls n)
  {{{((B, []), R)}}}
  ((A8^^sobc1_middle_width n++[1;1]) *> 0inf).
L4155new
413Theoremsobc1_first_done_to_second_exception
Theorem sobc1_first_done_to_second_exception :
exception_done sobc1_first_half sobc1_first_output -[source_tm]->*
  exception_raw_source sobc1_second_half (sobc1_first_half+25).
L4168new
414Lemmasobc1_second_tail_word
Lemma sobc1_second_tail_word :
digits_word sobc1_second_digits =
A8^^(2*(sobc1_middle_index+4)) ++
  B8++B8++A8++B8++A8++digits_word sobc1_entry_rest.
L4189new
415Lemmasobc1_entry_primary_width
Lemma sobc1_entry_primary_width :
sobc1_second_half + 2*(sobc1_middle_index+4)+4 =
  round_primary_width sobc1_current_index sobc1_middle_index.
L4203new
416Theoremsobc1_c0_to_entry_post
Theorem sobc1_c0_to_entry_post :
c0 -[source_tm]->*
post_ca_state
  (round_post_unary sobc1_current_index sobc1_middle_index)
  (round_primary_width sobc1_current_index sobc1_middle_index)
  [sobc1_entry_column].
L4217new
417Theoremsobc1_nonhalt
Theorem sobc1_nonhalt : ~ halts source_tm c0.
L4252new
418Definitiony_after
Definition y_after (k : nat) : list Sym :=
match k with
| 0%nat => A8
| 1%nat => B8
| 2%nat => E8 ++ [1;1]
| 3%nat => D8 ++ [1;1]
… +3 lines
L4298new
419Definitiontail_word
Definition tail_word (k : nat) : list Sym := U^^(2*k+1) ++ B8 ++ [1;1].
L4309new
420Lemmaraw_tail_base
Lemma raw_tail_base k l : k <= 5 ->
l {{{((B, []), R)}}} ((B8 ++ U^^(2*k+1) ++ B8 ++ [1;1]) *> 0inf)
  -[source_tm]->+
([1;0;1] *> l) {{{((F, []), L)}}} ((U^^(2*k+3) ++ y_after k) *> 0inf).
L4311new
421Lemmaraw_tail_column
Lemma raw_tail_column k e l : k <= 5 ->
l {{{((B, []), R)}}} ((B8^^S e ++ tail_word k) *> 0inf)
  -[source_tm]->+
([1;0;1] *> l) {{{((F, []), L)}}}
  ((E8^^e ++ U^^(2*k+3) ++ y_after k) *> 0inf).
L4321new
422Definitionfull_tail
Definition full_tail (es : list nat) (e k : nat) : list Sym :=
spaced_words (map (fun e => B8^^S e) es ++ [B8^^S e]) ++ tail_word k.
L4340new
423Definitionmixed_tail
Definition mixed_tail (es : list nat) (e k : nat) : list Sym :=
spaced_words (map (fun e => E8^^e ++ A8) es ++ [E8^^e]) ++
  U^^(2*k+3) ++ y_after k.
L4345new
424Lemmaspaced_snoc_cons
Lemma spaced_snoc_cons (w : list Sym) ws x :
spaced_words ((w :: ws) ++ [x]) = w ++ U^^2 ++ spaced_words (ws ++ [x]).
L4349new
425Theoremraw_tail_columns
Theorem raw_tail_columns es e k l : k <= 5 ->
l {{{((B, []), R)}}} (full_tail es e k *> 0inf)
  -[source_tm]->+
([1;0;1] *> l) {{{((F, []), L)}}} (mixed_tail es e k *> 0inf).
L4355new
426DefinitionYw
Definition Yw : list Sym :=
[1;0;0;0;1;0;0;0;1;0;0;0;1;0;0;0;1;0;0;0;1;0;0;0;1;0;0;0;1;0;0;0;1;0;0;
 1;0;0;0;1;0;0;0;1;0;0;0;1;0;0;0;1;0;0;0;1;0;0;0;1;0;0;1;0;1;0;0;1;0;0].
L4386new
427Lemmacycler_step
Lemma cycler_step L :
(rev Yw *> L) {{B}}> 0inf -[source_tm]->+ (rev Yw *> [0;0;1] *> L) {{B}}> 0inf.
L4391new
428Theoremcycler_nonhalt
Theorem cycler_nonhalt L : ~ halts source_tm ((rev Yw *> L) {{B}}> 0inf).
L4397new
429Lemmaoverflow_base
Lemma overflow_base l :
l {{{((B, []), R)}}} ((B8 ++ tail_word 6) *> 0inf)
  -[source_tm]->+
(rev Yw *> [0;1;0;1] *> l) {{B}}> 0inf.
L4406new
430Lemmaoverflow_column
Lemma overflow_column e l : exists l',
l {{{((B, []), R)}}} ((B8^^S e ++ tail_word 6) *> 0inf)
  -[source_tm]->+ (rev Yw *> l') {{B}}> 0inf.
L4414new
431Theoremoverflow_columns
Theorem overflow_columns es e l : exists l',
l {{{((B, []), R)}}} (full_tail es e 6 *> 0inf)
  -[source_tm]->+ (rev Yw *> l') {{B}}> 0inf.
L4425new
432Theoremexit_nonhalt
Theorem exit_nonhalt es e l :
~ halts source_tm (l {{{((B, []), R)}}} (full_tail es e 6 *> 0inf)).
L4444new
433Definitionpre_left_far
Definition pre_left_far (n : nat) (far : side) : side :=
([1;0;1;0] ++ V4^^(2*n+2)) *> far.
L4455new
434Definitioncall_left_far
Definition call_left_far (remaining finished : nat) (far : side) : side :=
(X4^^(2*finished+5) ++ V4^^(2*remaining)) *> far.
L4457new
435Lemmapre_rotate_list
Lemma pre_rotate_list m :
[1;0;1] ++ X4^^(S m) = [1;0;1;0] ++ V4^^m ++ [0;1;0].
L4460new
436Lemmanested_pre_left
Lemma nested_pre_left c f :
[1;0;1] *> exception_call_left c f =
pre_left_far (S f) ([0;1;0] *> V4^^(2*c) *> [1;0;1] *> 0inf).
L4476new
437Lemmalaunch_far
Lemma launch_far k far :
sideRLs (flip source_tm) [left_hash] (pre_left_far (S k) far) (call_left_far k 0 far).
L4489new
438Lemmarelaunch_far
Lemma relaunch_far remaining finished far :
sideRLs (flip source_tm) [left_hash]
  (call_left_far (S remaining) finished far)
  (call_left_far remaining (S finished) far).
L4500new
439Lemmarelaunches_far
Lemma relaunches_far k r finished far :
sideRLs (flip source_tm) ([left_hash]^^k)
  (call_left_far (k + r) finished far)
  (call_left_far r (finished + k) far).
L4519new
440Theoremnested_launch
Theorem nested_launch h r far inp out :
segRLs source_tm (hashes^^h) [] inp out ->
pre_left_far (S (h + r)) far {{{((F, []), L)}}} (inp *> 0inf)
  -[source_tm]->+
call_left_far r h far {{{((B, []), R)}}} (out *> 0inf).
L4534new
441LemmaE_to_B
Lemma E_to_B m : segRLs source_tm (hashes^^(3*(2^m-1))) [] (E8^^m) (B8^^m).
L4550new
442Lemmadigits_word_repeat_BB
Lemma digits_word_repeat_BB n : digits_word (repeat BB n) = B8^^n.
L4559new
443Lemmadigits_value_repeat_BB
Lemma digits_value_repeat_BB n : digits_value (repeat BB n) = 2^n - 1.
L4565new
444Fixpointnested_required
Fixpoint nested_required (es : list nat) (e : nat) : nat :=
match es with
| [] => 3*(2^(S e)-1)
| e0 :: es' =>
    (nested_required es' e + 1) * 2^(S e0) - 2 + (2^(S e0) - 1)
end.
L4574new
445Lemmanested_counter
Lemma nested_counter es e :
segRLs source_tm (hashes^^nested_required es e) []
  (spaced_words (map (fun e => E8^^e ++ A8) es ++ [E8^^S e]))
  (spaced_words (map (fun e => B8^^S e) es ++ [B8^^S e])).
L4581new
446Theoremnested_exit
Theorem nested_exit c f es e :
nested_required es e <= f ->
~ halts source_tm (exception_call_left c f {{{((B, []), R)}}}
  (full_tail es (S e) 5 *> 0inf)).
L4602new
447InductiveSDigit
Inductive SDigit := SE | SD | SA | SB.
L4646new
448Definitionsdigit_word
Definition sdigit_word (d : SDigit) : list Sym :=
match d with SE => E8 | SD => D8 | SA => A8 | SB => B8 end.
L4647new
449Definitionsdigit_value
Definition sdigit_value (d : SDigit) : Z :=
match d with SE => (-2)%Z | SD => (-1)%Z | SA => 0%Z | SB => 1%Z end.
L4649new
450Fixpointsdigits_word
Fixpoint sdigits_word (ds : list SDigit) : list Sym :=
match ds with [] => [] | d :: ds' => sdigit_word d ++ sdigits_word ds' end.
L4651new
451Fixpointsdigits_value
Fixpoint sdigits_value (ds : list SDigit) : Z :=
match ds with
| [] => 0%Z
| d :: ds' => (sdigit_value d + 2 * sdigits_value ds')%Z
end.
L4653new
452Definitionsdigit_of
Definition sdigit_of (d : BDigit) : SDigit := match d with BA => SA | BB => SB end.
L4658new
453Definitiontail_layout
Definition tail_layout (primary : nat) (zs : list BinaryColumn)
  (last : list SDigit) (k lv : nat) : list Sym :=
A8^^primary ++ U^^2 ++
spaced_words (map binary_column_word zs ++ [sdigits_word last]) ++
U^^(2*k+1) ++ y_after lv.
L4664new
454Definitionpost_ca_tail
Definition post_ca_tail (unary primary : nat) (zs : list BinaryColumn)
  (last : list SDigit) (k lv : nat) : Q * tape :=
ordinary_left unary {{{((B, []), R)}}} (tail_layout primary zs last k lv *> 0inf).
L4670new
455Fixpointzs_value
Fixpoint zs_value (o : nat) (zs : list BinaryColumn) : Z :=
match zs with
| [] => 0%Z
| c :: zs' => (2^Z.of_nat o * Z.of_nat (column_value c) +
               zs_value (o + column_width c) zs')%Z
end.
L4676new
456Definitiontail_W
Definition tail_W (primary : nat) zs (last : list SDigit) : nat :=
primary + columns_width_sum zs + length last.
L4684new
457Definitiontail_V
Definition tail_V (primary : nat) zs last (lv : nat) : Z :=
(zs_value primary zs +
 2^Z.of_nat (primary + columns_width_sum zs) * sdigits_value last +
 2^Z.of_nat (tail_W primary zs last) * (Z.of_nat lv - 1))%Z.
L4686new
458Definitiontrigger_hash
Definition trigger_hash primary zs last lv : Z :=
(5 * 2^Z.of_nat (tail_W primary zs last) - tail_V primary zs last lv)%Z.
L4692new
459Definitiontail_next_half
Definition tail_next_half current previous zs last lv : Z :=
((Z.of_nat (round_post_unary current previous) +
  trigger_hash (round_primary_width current previous) zs last lv - 1) / 2)%Z.
L4696new
460Definitiontail_next_index
Definition tail_next_index current previous zs last lv : nat :=
Z.to_nat ((tail_next_half current previous zs last lv - 6) / 2).
L4699new
461Definitioneff_level
Definition eff_level (last : list SDigit) (lv : nat) : Z :=
((sdigits_value last + 2^Z.of_nat (length last) * (Z.of_nat lv - 1)) /
   2^Z.of_nat (length last))%Z.
L4703new
462Definitiontail_triggers
Definition tail_triggers (k : nat) (last : list SDigit) (lv : nat) : Prop :=
(Z.of_nat k - 1 + (2 - eff_level last lv) >= 5)%Z.
L4708new
463Definitioncolumn_budget
Definition column_budget (n : nat) (c : BinaryColumn) : Prop :=
exists phase,
  n <= lineage_fuel phase /\
  low_slice (pow2 (column_width c)) (lineage_width phase)
    (lineage_residue phase) (Z.of_nat (column_value c)).
L4723new
464Lemmacolumn_budget_safe
Lemma column_budget_safe n c : column_budget n c -> column_safe c.
L4729new
465Lemmalineage_next_fuel
Lemma lineage_next_fuel phase :
1 <= lineage_fuel phase ->
exists phase', lineage_next phase phase' /\
  S (lineage_fuel phase') = lineage_fuel phase.
L4737new
466Lemmacolumn_budget_step
Lemma column_budget_step n c c' b :
column_budget (S n) c -> column_step b c c' -> column_budget n c'.
L4748new
467Lemmaz_column_budget
Lemma z_column_budget previous : column_budget 3 (z_column previous).
L4764new
468Fixpointtail_columns_step
Fixpoint tail_columns_step (right_odd : bool)
  (cs cs' : list BinaryColumn) : Prop :=
match cs, cs' with
| [], [] => True
| c::rest, c'::rest' =>
    column_step (match rest with [] => right_odd
… +4 lines
L4772new
469Theoremtail_columns_budget_step
Theorem tail_columns_budget_step n cs b :
Forall (column_budget (S n)) cs ->
exists cs', tail_columns_step b cs cs' /\ Forall (column_budget n) cs'.
L4783new
470Lemmacolumn_budget_weaken
Lemma column_budget_weaken n m c : n <= m -> column_budget m c -> column_budget n c.
L4801new
471Theoremtail_columns_round_budget
Theorem tail_columns_round_budget k previous cs b :
1 <= k <= 3 -> Forall (column_budget (4-k)) cs ->
exists cs', tail_columns_step b cs cs' /\
  Forall (column_budget (4-S k)) (z_column previous :: cs').
L4806new
472Definitionphase_width
Definition phase_width k := 30-k.
L4832new
473Definitionphase_value
Definition phase_value k : Z :=
match k with
| 1 => 391468375%Z
| 2 => (-195734187)%Z
| 3 => 97867094%Z
| _ => (-116042411)%Z
… +1 lines
L4833new
474Definitionphase_lv
Definition phase_lv k := match k with 1 => 4 | 2 => 1 | 3 => 5 | _ => 3 end.
L4840new
475Definitionphase_eff
Definition phase_eff k : Z :=
((phase_value k + 2^Z.of_nat (phase_width k) * (Z.of_nat (phase_lv k)-1)) /
  2^Z.of_nat (phase_width k))%Z.
L4841new
476Lemmaphase_effective_levels
Lemma phase_effective_levels :
phase_eff 1 = 3%Z /\ phase_eff 2 = (-1)%Z /\
phase_eff 3 = 4%Z /\ phase_eff 4 = 0%Z.
L4845new
477Lemmaphase_level_step
Lemma phase_level_step k :
1 <= k <= 3 -> phase_eff (S k) = (Z.of_nat k + 1 - phase_eff k)%Z.
L4850new
478Lemmaphase_value_step
Lemma phase_value_step k :
1 <= k <= 3 ->
(phase_value (S k) mod 2^Z.of_nat (phase_width (S k)) =
  2^Z.of_nat (phase_width (S k)) -
    (phase_value k mod 2^Z.of_nat (phase_width k))/2)%Z.
L4857new
479Lemmaphase_window
Lemma phase_window k :
1 <= k <= 4 ->
(3 <= phase_value k + 2^Z.of_nat (phase_width k)*2)%Z /\
(phase_value k <= 2^Z.of_nat (phase_width k)-6)%Z.
L4867new
480Recordfinite_round_pre
Record finite_round_pre current previous zs last k lv : Prop := {
  fr_stage : 1 <= k <= 4;
  fr_columns : Forall (column_budget (4-k)) zs;
  fr_head_odd : match zs with
                | c::_ => Nat.odd (column_value c) = true
                | [] => Z.odd (sdigits_value last) = true end;
… +8 lines
L4876new
481Lemmafinite_pre_safe
Lemma finite_pre_safe current previous zs last k lv :
finite_round_pre current previous zs last k lv -> Forall column_safe zs.
L4891new
482Lemmafinite_pre_eff
Lemma finite_pre_eff current previous zs last k lv :
finite_round_pre current previous zs last k lv -> eff_level last lv = phase_eff k.
L4898new
483Lemmafinite_pre_nontrigger
Lemma finite_pre_nontrigger current previous zs last k lv :
finite_round_pre current previous zs last k lv -> k <= 3 ->
~ tail_triggers k last lv.
L4905new
484Lemmafinite_pre_trigger
Lemma finite_pre_trigger current previous zs last lv :
finite_round_pre current previous zs last 4 lv -> tail_triggers 4 last lv.
L4917new
485Definitionfinite_round_obligation
Definition finite_round_obligation : Prop :=
forall current previous zs last k lv,
finite_round_pre current previous zs last k lv -> k <= 3 ->
exists zs' last' lv',
  post_ca_tail (round_post_unary current previous)
    (round_primary_width current previous) zs last k lv
… +7 lines
L4926new
486Definitionfinite_trigger_obligation
Definition finite_trigger_obligation : Prop :=
forall current previous zs last lv,
finite_round_pre current previous zs last 4 lv ->
exists c f es e,
  post_ca_tail (round_post_unary current previous)
    (round_primary_width current previous) zs last 4 lv
… +3 lines
L4940new
487Definitionearly_tail
Definition early_tail := U^^3 ++ A8 ++ B8^^2 ++ [1;1].
L4969new
488Definitionfourth_tail
Definition fourth_tail := C8 ++ [1;1] ++ C8 ++ A8^^2 ++ [1;1;1;1].
L4970new
489Lemmaopening_D_to_third_done
Lemma opening_D_to_third_done :
(D;; tape0) -[source_tm]->* exception_done 28 early_tail.
L4972new
490Lemmaopening_local_hash
Lemma opening_local_hash :
segRLs source_tm hashes []
  (C8 ++ A8 ++ U ++ A8 ++ B8^^2 ++ [1;1])
  (D8 ++ fourth_tail).
L4979new
491Definitionopening_after_cd_calls
Definition opening_after_cd_calls p :=
initial_u_pair_calls p 1 +
  (2^(p+1) + (2^(p+1) + (2^(p+2)-1))).
L4989new
492Lemmaopening_after_cd_side
Lemma opening_after_cd_side p :
sideRLs source_tm (hashes^^opening_after_cd_calls p)
  ((A8^^p ++ C8 ++ A8 ++ early_tail) *> 0inf)
  ((B8^^(p+2) ++ fourth_tail) *> 0inf).
L4993new
493Definitionopening_n4
Definition opening_n4 := 3*2^29-2.
L5011new
494Lemmaopening_total_count_general
Lemma opening_total_count_general p :
cd_calls p + opening_after_cd_calls p = 2*(3*2^(p+1)-2)+1.
L5013new
495Lemmaopening_total_count
Lemma opening_total_count :
cd_calls 28 + opening_after_cd_calls 28 = 2*opening_n4+1.
L5025new
496Theoremopening_D_to_fourth_frontier
Theorem opening_D_to_fourth_frontier :
(D;; tape0) -[source_tm]->*
ordinary_left (2*opening_n4+1) {{{((B, []), R)}}}
  ((B8^^30 ++ fourth_tail) *> 0inf).
L5029new
497Fixpointsfinish_count
Fixpoint sfinish_count (ds : list SDigit) (out : nat) : nat :=
match ds with
| [] => out
| d::rest => 2*sfinish_count rest out +
    match d with SE => 3 | SD => 2 | SA => 1 | SB => 0 end
end.
L5057new
498Lemmahash_D_finish
Lemma hash_D_finish n :
segRLs source_tm (hashes^^(2*n+2)) (hashes^^n) D8 B8.
L5064new
499Theoremsfinish_spec
Theorem sfinish_spec ds out :
segRLs source_tm (hashes^^sfinish_count ds out) (hashes^^out)
  (sdigits_word ds) (B8^^length ds).
L5072new
500Theoremsfinish_value
Theorem sfinish_value ds out :
(Z.of_nat (sfinish_count ds out) + sdigits_value ds + 1 =
  (Z.of_nat out+1)*pow2 (length ds))%Z.
L5086new
501Lemmatail_level_finish
Lemma tail_level_finish lv : lv <= 5 ->
sideRLs source_tm (hashes^^(5-lv))
  (y_after lv *> 0inf) ((B8 ++ [1;1]) *> 0inf).
L5097new
502Definitionlast_finish_count
Definition last_finish_count last lv := sfinish_count last (5-lv).
L5106new
503Lemmalast_to_frontier
Lemma last_to_frontier last k lv : lv <= 5 ->
sideRLs source_tm (hashes^^last_finish_count last lv)
  ((sdigits_word last ++ U^^(2*k+1) ++ y_after lv) *> 0inf)
  ((B8^^length last ++ U^^(2*k+1) ++ B8 ++ [1;1]) *> 0inf).
L5107new
504Fixpointcolumns_with_tail
Fixpoint columns_with_tail (zs : list BinaryColumn) (tail : list Sym) : list Sym :=
match zs with [] => tail
| c::rest => binary_column_word c ++ U^^2 ++ columns_with_tail rest tail end.
L5120new
505Fixpointall_B_with_tail
Fixpoint all_B_with_tail (zs : list BinaryColumn) (tail : list Sym) : list Sym :=
match zs with [] => tail
| c::rest => B8^^column_width c ++ U^^2 ++ all_B_with_tail rest tail end.
L5123new
506Fixpointcolumns_finish_count
Fixpoint columns_finish_count (zs : list BinaryColumn) (out : nat) : nat :=
match zs with [] => out
| c::rest => bfinish_count (column_digits c) (columns_finish_count rest out) end.
L5126new
507Lemmacolumns_finish_tail
Lemma columns_finish_tail zs out input output :
sideRLs source_tm (hashes^^out) (input *> 0inf) (output *> 0inf) ->
sideRLs source_tm (hashes^^columns_finish_count zs out)
  (columns_with_tail zs input *> 0inf) (all_B_with_tail zs output *> 0inf).
L5130new
508Definitiontail_finish_count
Definition tail_finish_count primary zs last lv :=
bfinish_count (repeat BA primary) (columns_finish_count zs (last_finish_count last lv)).
L5144new
509Definitiontail_frontier
Definition tail_frontier primary zs (last : list SDigit) k :=
B8^^primary ++ U^^2 ++
  all_B_with_tail zs (B8^^length last ++ U^^(2*k+1) ++ B8 ++ [1;1]).
L5146new
510Lemmaspaced_cons_nonempty
Lemma spaced_cons_nonempty a xs : xs <> [] ->
spaced_words (a::xs) = a ++ U^^2 ++ spaced_words xs.
L5150new
511Lemmatail_layout_chain
Lemma tail_layout_chain primary zs last k lv :
tail_layout primary zs last k lv =
A8^^primary ++ U^^2 ++
  columns_with_tail zs (sdigits_word last ++ U^^(2*k+1) ++ y_after lv).
L5154new
512Theoremtail_to_frontier
Theorem tail_to_frontier primary zs last k lv : lv <= 5 ->
sideRLs source_tm (hashes^^tail_finish_count primary zs last lv)
  (tail_layout primary zs last k lv *> 0inf)
  (tail_frontier primary zs last k *> 0inf).
L5172new
513Lemmapow2_add_local
Lemma pow2_add_local a b : (pow2 (a+b) = pow2 a * pow2 b)%Z.
L5192new
514Lemmapow2_Zpow
Lemma pow2_Zpow n : pow2 n = (2^Z.of_nat n)%Z.
L5195new
515Lemmabfinish_value_Z
Lemma bfinish_value_Z ds out :
(Z.of_nat (bfinish_count ds out) + Z.of_nat (digits_value ds) + 1 =
  (Z.of_nat out+1)*pow2 (length ds))%Z.
L5198new
516Fixpointcolumns_value_Z
Fixpoint columns_value_Z (zs : list BinaryColumn) : Z :=
match zs with [] => 0%Z
| c::rest => (Z.of_nat (column_value c) +
    pow2 (column_width c)*columns_value_Z rest)%Z end.
L5206new
517Lemmazs_value_shift
Lemma zs_value_shift o zs : (zs_value o zs = pow2 o * columns_value_Z zs)%Z.
L5211new
518Lemmacolumns_finish_value
Lemma columns_finish_value zs out :
(Z.of_nat (columns_finish_count zs out) + columns_value_Z zs + 1 =
  (Z.of_nat out+1)*pow2 (columns_width_sum zs))%Z.
L5219new
519Theoremtrigger_hash_count
Theorem trigger_hash_count primary zs last lv : lv <= 5 ->
Z.of_nat (S (tail_finish_count primary zs last lv)) = trigger_hash primary zs last lv.
L5237new
520DefinitionE_digit
Definition E_digit (n : N) : SDigit :=
match n with
| N0 => SE | Npos xH => SD
| Npos (xO _) => SA | Npos (xI _) => SB
end.
L5278new
521DefinitionE_carry
Definition E_carry (n : N) : N :=
match n with
| N0 | Npos xH => N0
| Npos (xO p) | Npos (xI p) => N.pred (Npos p)
end.
L5283new
522FixpointE_decode
Fixpoint E_decode (width : nat) (n : N) : list SDigit * N :=
match width with
| O => ([], n)
| S w => let '(ds, out) := E_decode w (E_carry n) in
    (E_digit n :: ds, out)
end.
L5288new
523LemmaE_digit_spec
Lemma E_digit_spec n :
segRLs source_tm (hashes^^N.to_nat n) (hashes^^N.to_nat (E_carry n))
  E8 (sdigit_word (E_digit n)).
L5295new
524TheoremE_decode_spec
Theorem E_decode_spec width n :
segRLs source_tm (hashes^^N.to_nat n) (hashes^^N.to_nat (snd (E_decode width n)))
  (E8^^width) (sdigits_word (fst (E_decode width n))).
L5316new
525LemmaE_decode_length
Lemma E_decode_length width n : length (fst (E_decode width n)) = width.
L5328new
526LemmaE_digit_value
Lemma E_digit_value n :
(Z.of_N n - 2 = sdigit_value (E_digit n) + 2*Z.of_N (E_carry n))%Z.
L5337new
527TheoremE_decode_value
Theorem E_decode_value width n :
(sdigits_value (fst (E_decode width n)) +
  pow2 width * Z.of_N (snd (E_decode width n)) =
  Z.of_N n - 2*(pow2 width-1))%Z.
L5344new
528Definitionopening_call_base
Definition opening_call_base : N := 462424812206%N.
L5370new
529Definitionopening_digits
Definition opening_digits : list SDigit := [SA;SA;SA;SA;SB;SB;SA;SB;SA;SB;SA;SB;SA;SB;SA;SB;SA;SB;SA;SB;SA;SB;SA;SB;SA;SB;SA;SB;SA;SB;SA;SB;SB;SB;SA;SB].
L5371new
530Lemmaopening_decode_exact
Lemma opening_decode_exact :
E_decode 36 opening_call_base = (opening_digits, 4%N).
L5373new
531Lemmaopening_digits_value
Lemma opening_digits_value : sdigits_value opening_digits = 50107951792%Z.
L5377new
532Lemmaopening_tail_four
Lemma opening_tail_four :
sideRLs source_tm (hashes^^4) (A8 *> 0inf) ((A8 ++ [1;1]) *> 0inf).
L5380new
533Lemmaopening_decode_base
Lemma opening_decode_base :
sideRLs source_tm (hashes^^N.to_nat opening_call_base)
  ((E8^^36 ++ U^^3 ++ A8) *> 0inf)
  ((sdigits_word opening_digits ++ U^^3 ++ A8 ++ [1;1]) *> 0inf).
L5386new
534Definitionopening_decode_calls
Definition opening_decode_calls k :=
2^k*N.to_nat opening_call_base + 2*(2^k-1).
L5398new
535Theoremopening_decode
Theorem opening_decode k :
sideRLs source_tm (hashes^^opening_decode_calls k)
  ((E8^^(k+36) ++ U^^3 ++ A8) *> 0inf)
  ((A8^^k ++ sdigits_word opening_digits ++ U^^3 ++ A8 ++ [1;1]) *> 0inf).
L5403new
536Lemmaopening_call_base_formula
Lemma opening_call_base_formula :
N.to_nat opening_call_base = (1292*2^30+4)/3 + 2.
L5416new
537Theoremopening_decode_calls_formula
Theorem opening_decode_calls_formula k :
opening_decode_calls k = 2^(k+2)-2 + 2^k*((1292*2^30+4)/3).
L5425new
538Definitionentry_n5
Definition entry_n5 := opening_decode_calls (opening_n4-2).
L5452new
539Definitionentry_current
Definition entry_current := (entry_n5-6)/2.
L5453new
540Definitionentry_previous
Definition entry_previous := (opening_n4-6)/2.
L5454new
541Definitionentry_rest
Definition entry_rest := skipn 9 opening_digits.
L5455new
542Definitionentry_last
Definition entry_last := SB::SB::entry_rest.
L5456new
543Definitionentry_state
Definition entry_state := post_ca_tail
(round_post_unary entry_current entry_previous)
(round_primary_width entry_current entry_previous) [] entry_last 1 4.
L5457new
544Lemmaopening_n4_even_large
Lemma opening_n4_even_large :
(exists q, opening_n4=2*q) /\ 64<=opening_n4.
L5461new
545Lemmaeven_index_half
Lemma even_index_half n :
(exists q, n=2*q /\ 6<=2*q) -> half_parameter ((n-6)/2)=n.
L5473new
546Lemmaentry_previous_half
Lemma entry_previous_half : half_parameter entry_previous=opening_n4.
L5479new
547Lemmaopening_base_even
Lemma opening_base_even : exists b, N.to_nat opening_call_base=2*b.
L5487new
548Lemmaopening_decode_even_ge6
Lemma opening_decode_even_ge6 k : 2<=k ->
exists q, opening_decode_calls k=2*q /\ 6<=2*q.
L5494new
549Lemmaentry_n5_even_ge6
Lemma entry_n5_even_ge6 : exists q, entry_n5=2*q /\ 6<=2*q.
L5504new
550Lemmaentry_current_half
Lemma entry_current_half : half_parameter entry_current=entry_n5.
L5512new
551Lemmaopening_entry_growth
Lemma opening_entry_growth n : 64<=n ->
2*(n+30)+4 <= opening_decode_calls (n-2)+1.
L5517new
552Lemmaentry_last_facts
Lemma entry_last_facts :
length entry_last=29 /\ sdigits_value entry_last=391468375%Z /\
Z.odd (sdigits_value entry_last)=true.
L5529new
553Lemmaentry_opening_word
Lemma entry_opening_word :
A8^^(opening_n4-2) ++ sdigits_word opening_digits ++ U^^3 ++ A8 ++ [1;1] =
A8^^(2*(entry_previous+4)) ++ B8++B8++A8++B8++A8++
  (sdigits_word entry_rest ++ U^^3 ++ A8 ++ [1;1]).
L5534new
554Theoremopening_exception_to_entry
Theorem opening_exception_to_entry :
exception_done entry_n5
  (A8^^(opening_n4-2) ++ sdigits_word opening_digits ++ U^^3 ++ A8 ++ [1;1])
-[source_tm]->+ entry_state.
L5550new
555Theorementry_pre
Theorem entry_pre : finite_round_pre
entry_current entry_previous [] entry_last 1 4.
L5571new
556Definitionfossil_tail
Definition fossil_tail := C8 ++ [1;1] ++ C8 ++ U ++ [1;1] ++ U.
L5605new
557Definitionfossil_start
Definition fossil_start m := C8 ++ A8^^m ++ D8 ++ D8 ++ A8 ++ U ++ E8 ++ A8.
L5606new
558Lemmafossil_scan
Lemma fossil_scan m :
segRLs source_tm hashes [] (fossil_start m)
  (D8 ++ C8^^m ++ D8 ++ D8 ++ fossil_tail).
L5608new
559Lemmafossil_tail_finish
Lemma fossil_tail_finish :
sideRLs source_tm (hashes^^25)
  (fossil_tail *> 0inf) ((B8^^2 ++ U ++ B8 ++ [1;1]) *> 0inf).
L5616new
560Lemmac_sweep_even
Lemma c_sweep_even width pairs rest :
segRLs source_tm (hashes^^c_sweep_calls width pairs) []
  (A8^^width ++ C8^^(2*pairs) ++ rest)
  (A8^^(width+2*pairs) ++ rest).
L5624new
561Lemmafossil_tail_lift
Lemma fossil_tail_lift width :
sideRLs source_tm (hashes^^(25*2^width + (2^width-1)))
  ((A8^^width ++ fossil_tail) *> 0inf)
  ((B8^^(width+2) ++ U ++ B8 ++ [1;1]) *> 0inf).
L5641new
562Definitionfossil_calls
Definition fossil_calls p k :=
2^p + 2^p + c_sweep_calls (p+1) k +
2^(p+1+2*k) + 2^(p+2+2*k) +
(25*2^(p+3+2*k) + (2^(p+3+2*k)-1)).
L5656new
563Theoremfossil_run
Theorem fossil_run p k :
sideRLs source_tm (hashes^^fossil_calls p k)
  ((A8^^p ++ fossil_start (2*k)) *> 0inf)
  ((B8^^(p+2*k+5) ++ U ++ B8 ++ [1;1]) *> 0inf).
L5661new
564Lemmageom4n_power
Lemma geom4n_power k : 3 * geom4n k + 1 = 2^(2*k).
L5690new
565Lemmafossil_count_formula
Lemma fossil_count_formula n k :
fossil_calls (S n) k = 2^n * ((1292*2^(2*k)+4)/3) - 1.
L5698new
566Theoremfossil_run_closed
Theorem fossil_run_closed n k :
sideRLs source_tm (hashes^^(2^n * ((1292*2^(2*k)+4)/3) - 1))
  ((A8^^(S n) ++ fossil_start (2*k)) *> 0inf)
  ((B8^^(S n+2*k+5) ++ U ++ B8 ++ [1;1]) *> 0inf).
L5715new
567Definitionexception_done_side
Definition exception_done_side n (output : side) : Q * tape :=
common_left_wall {{{((B, []), R)}}}
  ((C8 ++ A8 ++ U^^(2*n)) *> output).
L5740new
568Lemmaexception_exit_side
Lemma exception_exit_side k output :
exception_call_left 0 k {{{((F, []), L)}}} output -[source_tm]->+
exception_done_side (S k) output.
L5744new
569Lemmaexception_exit_zero_side
Lemma exception_exit_zero_side output :
exception_pre_left 0 {{{((F, []), L)}}} output -[source_tm]->+
exception_done_side 0 output.
L5754new
570Lemmaexception_calls_side
Lemma exception_calls_side k input output :
sideRLs source_tm (hashes^^(S k)) input output ->
exception_call_left k 0 {{{((B, []), R)}}} input -[source_tm]->+
exception_call_left 0 k {{{((F, []), L)}}} output.
L5762new
571Theoremexception_pre_from_side
Theorem exception_pre_from_side n input output :
sideRLs source_tm (hashes^^n) input output ->
exception_pre_left n {{{((F, []), L)}}} input -[source_tm]->+
exception_done_side n output.
L5777new
572Corollaryexception_pre_from_side_word
Corollary exception_pre_from_side_word n input output :
sideRLs source_tm (hashes^^n) (input *> 0inf) (output *> 0inf) ->
exception_pre_left n {{{((F, []), L)}}} (input *> 0inf) -[source_tm]->+
exception_done n output.
L5790new
573Lemmaordinary_raw_pre_left
Lemma ordinary_raw_pre_left n :
[1;0;1] *> ordinary_left (2*n+1) = exception_pre_left n.
L5801new
574Lemmaordinary_raw_pre_left_count
Lemma ordinary_raw_pre_left_count tally n :
tally = 2*n+1 -> [1;0;1] *> ordinary_left tally = exception_pre_left n.
L5809new
575Lemmaexception_relaunches_partial
Lemma exception_relaunches_partial h r finished :
sideRLs (flip source_tm) ([left_hash]^^h)
  (exception_call_left (h+r) finished)
  (exception_call_left r (finished+h)).
L5813new
576Theoremexception_partial_side
Theorem exception_partial_side h r finished input output :
sideRLs source_tm (hashes^^h) input output ->
exception_call_left (h+r) finished {{{((B, []), R)}}} input -[source_tm]->*
exception_call_left r (finished+h) {{{((B, []), R)}}} output.
L5826new
577Theoremexception_launch_partial_side
Theorem exception_launch_partial_side h r input output :
sideRLs source_tm (hashes^^h) input output ->
exception_pre_left (S (h+r)) {{{((F, []), L)}}} input -[source_tm]->+
exception_call_left r h {{{((B, []), R)}}} output.
L5837new
578Definitionfourth_output
Definition fourth_output := A8^^29 ++ D8 ++ D8 ++ A8 ++ U ++ E8 ++ A8.
L5866new
579Definitionfourth_raw_output
Definition fourth_raw_output := E8^^30 ++ D8 ++ A8 ++ U ++ E8 ++ A8.
L5867new
580Lemmafourth_raw
Lemma fourth_raw l :
l {{{((B, []), R)}}} ((B8^^30 ++ fourth_tail) *> 0inf) -[source_tm]->+
([1;0;1] *> l) {{{((F, []), L)}}} (fourth_raw_output *> 0inf).
L5869new
581Lemman4_binary
Lemma n4_binary : opening_n4 = N.to_nat 1610612734%N.
L5877new
582Lemman4_large
Lemma n4_large : 10 <= opening_n4.
L5884new
583Lemmafourth_decode
Lemma fourth_decode :
segRLs source_tm (hashes^^opening_n4) [] fourth_raw_output fourth_output.
L5889new
584Theoremfourth_frontier_to_done
Theorem fourth_frontier_to_done :
ordinary_left (2*opening_n4+1) {{{((B, []), R)}}}
  ((B8^^30 ++ fourth_tail) *> 0inf) -[source_tm]->+
exception_done opening_n4 fourth_output.
L5901new
585Lemmafourth_cd_to_fossil
Lemma fourth_cd_to_fossil :
exception_done opening_n4 fourth_output -[source_tm]->+
ordinary_left (cd_calls opening_n4) {{{((B, []), R)}}}
  ((A8^^opening_n4 ++ fossil_start 30) *> 0inf).
L5911new
586Lemmafossil_calls_positive_formula
Lemma fossil_calls_positive_formula p k : 1 <= p ->
fossil_calls p k = 2^(p-1)*((1292*2^(2*k)+4)/3)-1.
L5924new
587Lemmafifth_total_tally_generic
Lemma fifth_total_tally_generic n : 2 <= n ->
cd_calls n + fossil_calls n 15 = 2*opening_decode_calls (n-2)+1.
L5931new
588Lemmafifth_total_tally
Lemma fifth_total_tally :
cd_calls opening_n4 + fossil_calls opening_n4 15 =
  2*opening_decode_calls (opening_n4-2)+1.
L5956new
589Definitionfifth_output
Definition fifth_output := A8^^(opening_n4-2) ++ sdigits_word opening_digits ++ U^^3 ++ A8 ++ [1;1].
L5961new
590Theoremfossil_to_fifth_frontier
Theorem fossil_to_fifth_frontier :
ordinary_left (cd_calls opening_n4) {{{((B, []), R)}}}
  ((A8^^opening_n4 ++ fossil_start 30) *> 0inf) -[source_tm]->*
ordinary_left (2*opening_decode_calls (opening_n4-2)+1) {{{((B, []), R)}}}
  ((B8^^(opening_n4+35) ++ U ++ B8 ++ [1;1]) *> 0inf).
L5963new
591Lemmafifth_frontier_to_done_generic
Lemma fifth_frontier_to_done_generic n : 2 <= n ->
ordinary_left (2*opening_decode_calls (n-2)+1) {{{((B, []), R)}}}
  ((B8^^(n+35) ++ U ++ B8 ++ [1;1]) *> 0inf) -[source_tm]->+
exception_done (opening_decode_calls (n-2)) (A8^^(n-2) ++ sdigits_word opening_digits ++ U^^3 ++ A8 ++ [1;1]).
L5976new
592Theoremfifth_frontier_to_done
Theorem fifth_frontier_to_done :
ordinary_left (2*opening_decode_calls (opening_n4-2)+1) {{{((B, []), R)}}}
  ((B8^^(opening_n4+35) ++ U ++ B8 ++ [1;1]) *> 0inf) -[source_tm]->+
exception_done (opening_decode_calls (opening_n4-2)) fifth_output.
L5993new
593Theoremopening_D_to_fifth_done
Theorem opening_D_to_fifth_done :
(D;; tape0) -[source_tm]->*
exception_done (opening_decode_calls (opening_n4-2)) fifth_output.
L6001new
594Definitiondecode_budget
Definition decode_budget r := ceil_half r - 2.
L6025new
595Lemmacolumn_decode_budget
Lemma column_decode_budget c c' r :
4 <= r -> column_step (Nat.odd r) c c' ->
column_required (decode_budget r) c' =
  decode_budget (r*2^(column_width c)-column_value c).
L6027new
596Fixpointright_remaining
Fixpoint right_remaining (cs : list BinaryColumn) (r : nat) : nat :=
match cs with
| [] => r
| c::rest => right_remaining rest r * 2^(column_width c) - column_value c
end.
L6056new
597Fixpointcolumns_input_count
Fixpoint columns_input_count (cs : list BinaryColumn) (out : nat) : nat :=
match cs with
| [] => out
| c::rest => column_required (columns_input_count rest out) c
end.
L6061new
598Lemmaright_remaining_lower
Lemma right_remaining_lower cs r : 1 <= r -> r <= right_remaining cs r.
L6067new
599Lemmaright_remaining_head_parity
Lemma right_remaining_head_parity c cs r : 1 <= r ->
Nat.odd (right_remaining (c::cs) r) = Nat.odd (column_value c).
L6079new
600Theoremcolumns_decode_budget
Theorem columns_decode_budget cs cs' r :
4 <= r -> tail_columns_step (Nat.odd r) cs cs' ->
columns_input_count cs' (decode_budget r) = decode_budget (right_remaining cs r).
L6095new
601Lemmaright_remaining_finish
Lemma right_remaining_finish cs last lv :
right_remaining cs (S (last_finish_count last lv)) =
  S (columns_finish_count cs (last_finish_count last lv)).
L6111new
602Fixpointmixed_with_tail
Fixpoint mixed_with_tail (cs : list BinaryColumn) (tail : list sym) : list sym :=
match cs with
| [] => tail
| c::rest => mixed_column_word c ++ U^^2 ++ mixed_with_tail rest tail
end.
L6126new
603Theoremmixed_with_tail_spec
Theorem mixed_with_tail_spec cs out input output :
sideRLs source_tm (hashes^^out) (input *> 0inf) (output *> 0inf) ->
sideRLs source_tm (hashes^^columns_input_count cs out)
  (mixed_with_tail cs input *> 0inf) (columns_with_tail cs output *> 0inf).
L6132new
604Lemmamixed_with_tail_same_width
Lemma mixed_with_tail_same_width b cs cs' input :
tail_columns_step b cs cs' -> mixed_with_tail cs input = mixed_with_tail cs' input.
L6145new
605Theoremtail_columns_decode
Theorem tail_columns_decode cs cs' r input output :
4 <= r -> tail_columns_step (Nat.odd r) cs cs' ->
sideRLs source_tm (hashes^^decode_budget r) (input *> 0inf) (output *> 0inf) ->
sideRLs source_tm (hashes^^decode_budget (right_remaining cs r))
  (mixed_with_tail cs input *> 0inf) (columns_with_tail cs' output *> 0inf).
L6156new
606Lemmapost_unary_even
Lemma post_unary_even current previous :
round_post_unary current previous = 2*(round_post_unary current previous/2).
L6170new
607Theoremprimary_decode_tally
Theorem primary_decode_tally current previous r :
4 <= r -> Nat.odd r = true ->
round_post_unary current previous + (r*2^(round_primary_width current previous)-1) =
  2*column_required (decode_budget r) (round_outer_column current previous)+1.
L6186new
608Definitiondecoded_last7
Definition decoded_last7 := fst (E_decode 28 341136723%N).
L6226new
609Definitiondecoded_last8
Definition decoded_last8 := fst (E_decode 27 768955732%N).
L6227new
610Definitiondecoded_last9
Definition decoded_last9 := fst (E_decode 26 18175315%N).
L6228new
611Lemmadecode_last7
Lemma decode_last7 : E_decode 28 341136723%N = (decoded_last7, 0%N).
L6230new
612Lemmadecode_last8
Lemma decode_last8 : E_decode 27 768955732%N = (decoded_last8, 3%N).
L6232new
613Lemmadecode_last9
Lemma decode_last9 : E_decode 26 18175315%N = (decoded_last9, 0%N).
L6234new
614Lemmadecode_trigger_frontier
Lemma decode_trigger_frontier :
E_decode 25 134217725%N = (repeat SB 25, 1%N).
L6236new
615Theoremdecoded_last_checkpoints
Theorem decoded_last_checkpoints :
length decoded_last7 = 28 /\ sdigits_value decoded_last7 = (-195734187)%Z /\
length decoded_last8 = 27 /\ sdigits_value decoded_last8 = 97867094%Z /\
length decoded_last9 = 26 /\ sdigits_value decoded_last9 = (-116042411)%Z.
L6240new
616LemmaE_decode_tail_run
Lemma E_decode_tail_run width calls ds out k lv :
E_decode width calls = (ds, out) ->
sideRLs source_tm (hashes^^N.to_nat out)
  (y_after k *> 0inf) (y_after lv *> 0inf) ->
sideRLs source_tm (hashes^^N.to_nat calls)
  ((E8^^width ++ U^^(2*k+3) ++ y_after k) *> 0inf)
… +1 lines
L6246new
617Theoremlast_case6_return
Theorem last_case6_return :
sideRLs source_tm (hashes^^N.to_nat 341136723%N)
  ((E8^^28 ++ U^^5 ++ y_after 1) *> 0inf)
  ((sdigits_word decoded_last7 ++ U^^5 ++ y_after 1) *> 0inf).
L6263new
618Theoremlast_case7_return
Theorem last_case7_return :
sideRLs source_tm (hashes^^N.to_nat 768955732%N)
  ((E8^^27 ++ U^^7 ++ y_after 2) *> 0inf)
  ((sdigits_word decoded_last8 ++ U^^7 ++ y_after 5) *> 0inf).
L6272new
619Theoremlast_case8_return
Theorem last_case8_return :
sideRLs source_tm (hashes^^N.to_nat 18175315%N)
  ((E8^^26 ++ U^^9 ++ y_after 3) *> 0inf)
  ((sdigits_word decoded_last9 ++ U^^9 ++ y_after 3) *> 0inf).
L6281new
620Theoremlast_case9_frontier
Theorem last_case9_frontier :
sideRLs source_tm (hashes^^N.to_nat 134217725%N)
  ((E8^^25 ++ U^^11 ++ y_after 4) *> 0inf)
  ((B8^^25 ++ U^^11 ++ y_after 5) *> 0inf).
L6290new
621Definitionphase_R
Definition phase_R (k : nat) : N :=
match k with
| 1%nat => 682273449%N | 2%nat => 1537911467%N
| 3%nat => 36350634%N | _ => 317369003%N
end.
L6321new
622Lemmaphase_R_value
Lemma phase_R_value k : 1 <= k <= 4 ->
((6-Z.of_nat (phase_lv k))*pow2 (phase_width k)-phase_value k =
  Z.of_N (phase_R k))%Z.
L6327new
623Theoremfinite_last_R
Theorem finite_last_R current previous zs last k lv :
finite_round_pre current previous zs last k lv ->
S (last_finish_count last lv) = N.to_nat (phase_R k).
L6336new
624Lemmaphase_R_large
Lemma phase_R_large k : (4 <= N.to_nat (phase_R k))%nat.
L6352new
625Definitionnext_last
Definition next_last k :=
match k with 1%nat => decoded_last7 | 2%nat => decoded_last8 | _ => decoded_last9 end.
L6358new
626Lemmaphase_decode_budget
Lemma phase_decode_budget k : 1 <= k <= 3 ->
decode_budget (N.to_nat (phase_R k)) =
  N.to_nat (match k with 1%nat => 341136723%N | 2%nat => 768955732%N | _ => 18175315%N end).
L6361new
627Theoremfinite_last_decode
Theorem finite_last_decode k : 1 <= k <= 3 ->
sideRLs source_tm (hashes^^decode_budget (N.to_nat (phase_R k)))
  ((E8^^(phase_width k-1) ++ U^^(2*k+3) ++ y_after k) *> 0inf)
  ((sdigits_word (next_last k) ++ U^^(2*k+3) ++ y_after (phase_lv (S k))) *> 0inf).
L6372new
628Theoremnext_last_checkpoints
Theorem next_last_checkpoints k : 1 <= k <= 3 ->
length (next_last k) = phase_width (S k) /\
sdigits_value (next_last k) = phase_value (S k).
L6385new
629LemmaN_to_nat_odd
Lemma N_to_nat_odd n : Nat.odd (N.to_nat n) = N.odd n.
L6398new
630Lemmaphase_R_parity
Lemma phase_R_parity k :
Nat.odd (N.to_nat (phase_R k)) = Z.odd (phase_value k).
L6407new
631Lemmafinite_suffix_odd
Lemma finite_suffix_odd current previous zs last k lv :
finite_round_pre current previous zs last k lv ->
Nat.odd (right_remaining zs (N.to_nat (phase_R k))) = true.
L6414new
632Theoremfinite_columns_decode
Theorem finite_columns_decode current previous zs last k lv :
finite_round_pre current previous zs last k lv -> k<=3 ->
exists zs',
  tail_columns_step (Nat.odd (N.to_nat (phase_R k))) zs zs' /\
  Forall (column_budget (4-S k)) (z_column previous :: zs') /\
  sideRLs source_tm (hashes^^decode_budget (right_remaining zs (N.to_nat (phase_R k))))
… +3 lines
L6425new
633Definitiontail_frontier_state
Definition tail_frontier_state unary primary zs last k : Q * tape :=
ordinary_left unary {{{((B, []), R)}}} (tail_frontier primary zs last k *> 0inf).
L6457new
634Theorempost_tail_to_frontier
Theorem post_tail_to_frontier unary primary zs last k lv : lv <= 5 ->
post_ca_tail unary primary zs last k lv -[source_tm]->*
tail_frontier_state (unary + tail_finish_count primary zs last lv)
  primary zs last k.
L6460new
635Lemmaall_B_tail_full
Lemma all_B_tail_full zs last k :
all_B_with_tail zs (B8^^S last ++ tail_word k) =
full_tail (map column_e zs) last k.
L6470new
636Lemmatail_frontier_full
Lemma tail_frontier_full primary zs last k e : length last = S e ->
tail_frontier (S primary) zs last k = full_tail (primary :: map column_e zs) e k.
L6483new
637Theorempost_tail_raw
Theorem post_tail_raw unary primary zs last k lv e :
lv <= 5 -> k <= 5 -> length last = S e ->
post_ca_tail unary (S primary) zs last k lv -[source_tm]->+
([1;0;1] *> ordinary_left
  (unary + tail_finish_count (S primary) zs last lv)) {{{((F, []), L)}}}
  (mixed_tail (primary :: map column_e zs) e k *> 0inf).
L6495new
638Lemmamixed_tail_chain
Lemma mixed_tail_chain cs e k :
mixed_tail (map column_e cs) e k =
mixed_with_tail cs (E8^^e ++ U^^(2*k+3) ++ y_after k).
L6523new
639Lemmatail_finish_equation
Lemma tail_finish_equation primary zs last lv :
S (tail_finish_count primary zs last lv) =
  S (columns_finish_count zs (last_finish_count last lv))*2^primary.
L6535new
640Definitionfinite_decode_count
Definition finite_decode_count current previous zs k :=
column_required (decode_budget (right_remaining zs (N.to_nat (phase_R k))))
  (round_outer_column current previous).
L6545new
641Definitionfinite_decode_input
Definition finite_decode_input current previous zs k :=
mixed_with_tail (round_outer_column current previous :: zs)
  (E8^^(phase_width k-1) ++ U^^(2*k+3) ++ y_after k).
L6548new
642Definitionfinite_decode_output
Definition finite_decode_output current previous zs' k :=
columns_with_tail (round_outer_column current previous :: zs')
  (sdigits_word (next_last k) ++ U^^(2*k+3) ++ y_after (phase_lv (S k))).
L6551new
643Theoremfinite_raw_to_pre
Theorem finite_raw_to_pre current previous zs last k lv :
finite_round_pre current previous zs last k lv ->
post_ca_tail (round_post_unary current previous)
  (round_primary_width current previous) zs last k lv -[source_tm]->+
exception_pre_left (finite_decode_count current previous zs k) {{{((F, []), L)}}}
  (finite_decode_input current previous zs k *> 0inf).
L6555new
644Theoremfinite_decode_side
Theorem finite_decode_side current previous zs last k lv zs' :
finite_round_pre current previous zs last k lv -> k<=3 ->
tail_columns_step (Nat.odd (N.to_nat (phase_R k))) zs zs' ->
sideRLs source_tm (hashes^^finite_decode_count current previous zs k)
  (finite_decode_input current previous zs k *> 0inf)
  (finite_decode_output current previous zs' k *> 0inf).
L6595new
645Theoremfinite_exception_done
Theorem finite_exception_done current previous zs last k lv :
finite_round_pre current previous zs last k lv -> k<=3 ->
exists zs',
  tail_columns_step (Nat.odd (N.to_nat (phase_R k))) zs zs' /\
  Forall (column_budget (4-S k)) (z_column previous :: zs') /\
  post_ca_tail (round_post_unary current previous)
… +3 lines
L6615new
646Theoremfinite_done_to_next_post
Theorem finite_done_to_next_post current previous zs' k next :
exception_done (half_parameter next)
  (finite_decode_output current previous zs' k) -[source_tm]->+
post_ca_tail (round_post_unary next current) (round_primary_width next current)
  (z_column previous :: zs') (next_last k) (S k) (phase_lv (S k)).
L6636new
647Lemmaouter_decode_even_ge6
Lemma outer_decode_even_ge6 current previous out :
exists q,
  column_required out (round_outer_column current previous) = 2*q /\
  6 <= 2*q.
L6673new
648Lemmaouter_decode_parameter
Lemma outer_decode_parameter current previous out :
half_parameter
  ((column_required out (round_outer_column current previous)-6)/2) =
column_required out (round_outer_column current previous).
L6701new
649Lemmaouter_decode_lower
Lemma outer_decode_lower current previous out :
2^(round_primary_width current previous)-2 <=
  column_required out (round_outer_column current previous).
L6710new
650Lemmaouter_decode_growth
Lemma outer_decode_growth current previous out suffix_width :
2*suffix_width+4 <= half_parameter previous+1 ->
2*(half_parameter current+1+half_parameter previous+suffix_width)+4 <=
  column_required out (round_outer_column current previous)+1.
L6721new
651Lemmatail_columns_step_width_sum
Lemma tail_columns_step_width_sum b cs cs' :
tail_columns_step b cs cs' ->
columns_width_sum cs' = columns_width_sum cs.
L6737new
652Theoremtail_width_dominance_step
Theorem tail_width_dominance_step current previous next out cs cs'
  (last last' : list SDigit) b :
tail_columns_step b cs cs' ->
length last = S (length last') ->
half_parameter next = column_required out (round_outer_column current previous) ->
(2*(columns_width_sum cs+length last)+4 <= half_parameter previous+1 /\
… +6 lines
L6748new
653Lemmatail_next_half_tally
Lemma tail_next_half_tally current previous cs last lv n :
lv<=5 ->
round_post_unary current previous +
  tail_finish_count (round_primary_width current previous) cs last lv = 2*n+1 ->
tail_next_half current previous cs last lv = Z.of_nat n.
L6770new
654Theoremtail_next_parameter
Theorem tail_next_parameter current previous cs last lv out :
lv<=5 ->
round_post_unary current previous +
  tail_finish_count (round_primary_width current previous) cs last lv =
    2*column_required out (round_outer_column current previous)+1 ->
half_parameter (tail_next_index current previous cs last lv) =
… +1 lines
L6790new
655Lemmafinite_tally
Lemma finite_tally current previous zs last k lv :
finite_round_pre current previous zs last k lv ->
round_post_unary current previous +
  tail_finish_count (round_primary_width current previous) zs last lv =
  2*finite_decode_count current previous zs k+1.
L6825new
656Lemmafinite_next_parameter
Lemma finite_next_parameter current previous zs last k lv :
finite_round_pre current previous zs last k lv ->
half_parameter (tail_next_index current previous zs last lv) =
  finite_decode_count current previous zs k.
L6843new
657Theoremfinite_round_proved
Theorem finite_round_proved : finite_round_obligation.
L6855new
658Fixpointfull_finish_count
Fixpoint full_finish_count es out :=
match es with [] => out
| e::rest => (full_finish_count rest out+2)*2^(S e)-3 end.
L6891new
659Lemmafull_finish_prefix
Lemma full_finish_prefix es out input output :
sideRLs source_tm (hashes^^out) (input *> 0inf) (output *> 0inf) ->
sideRLs source_tm (hashes^^full_finish_count es out)
  ((spaced_words (map (fun e=>E8^^e++A8) es ++ [input])) *> 0inf)
  ((spaced_words (map (fun e=>B8^^S e) es ++ [output])) *> 0inf).
L6895new
660Lemmaspaced_tail_append
Lemma spaced_tail_append ws x suffix :
spaced_words (ws++[x++suffix]) = spaced_words (ws++[x]) ++ suffix.
L6915new
661Definitiontrigger_finish
Definition trigger_finish es := full_finish_count es (N.to_nat 134217725%N).
L6922new
662Theoremraw_four_to_frontier
Theorem raw_four_to_frontier es :
sideRLs source_tm (hashes^^trigger_finish es)
  (mixed_tail es 25 4 *> 0inf) (full_tail es 24 5 *> 0inf).
L6924new
663Lemmafull_finish_monotone
Lemma full_finish_monotone es a b : a<=b -> full_finish_count es a <= full_finish_count es b.
L6933new
664Lemmanested_required_finish
Lemma nested_required_finish es e :
nested_required es e = full_finish_count es (3*(2^(S e)-1)).
L6939new
665Lemmatrigger_finish_sufficient
Lemma trigger_finish_sufficient es : nested_required es 23 <= trigger_finish es.
L6949new
666Lemmafull_finish_less_than_decode
Lemma full_finish_less_than_decode cs out small : small<out ->
full_finish_count (map column_e cs) small < columns_input_count cs out.
L6958new
667Lemmasafe_tail_steps
Lemma safe_tail_steps b cs : Forall column_safe cs -> exists cs', tail_columns_step b cs cs'.
L6969new
668Lemmatail_steps_es
Lemma tail_steps_es b cs cs' : tail_columns_step b cs cs' ->
map column_e cs' = map column_e cs.
L6979new
669Lemmafinal_last_budget_gap
Lemma final_last_budget_gap :
N.to_nat 134217725%N < decode_budget (N.to_nat (phase_R 4)).
L6990new
670Lemmafinal_decode_budget_gap
Lemma final_decode_budget_gap current previous zs last lv :
finite_round_pre current previous zs last 4 lv ->
trigger_finish (frontier_es current previous zs) < finite_decode_count current previous zs 4.
L7000new
671Lemmafinal_decode_input_raw
Lemma final_decode_input_raw current previous zs :
finite_decode_input current previous zs 4 = mixed_tail (frontier_es current previous zs) 25 4.
L7017new
672Theoremfinite_trigger_proved
Theorem finite_trigger_proved : finite_trigger_obligation.
L7027new
673Lemmahalts_after_progress
Lemma halts_after_progress c c' : c -[source_tm]->+ c' -> halts source_tm c -> halts source_tm c'.
L7054new
674Theoremfinite_entry_nonhalt
Theorem finite_entry_nonhalt current previous zs last lv :
finite_round_pre current previous zs last 1 lv ->
~halts source_tm (post_ca_tail (round_post_unary current previous)
  (round_primary_width current previous) zs last 1 lv).
L7061new
675Lemmaentry_count_compat
Lemma entry_count_compat :
OpeningEntry.entry_n5 =
  OpeningDecode.opening_decode_calls (OpeningEarly.opening_n4-2).
L7097new
676Lemmafifth_word_compat
Lemma fifth_word_compat :
OpeningLate.fifth_output =
  A8^^(OpeningEarly.opening_n4-2) ++
  sdigits_word OpeningDecode.opening_digits ++ U^^3 ++ A8 ++ [1;1].
L7102new
677Lemmablank_to_entry
Lemma blank_to_entry : (D;; tape0) -[SOBCv10.source_tm]->* OpeningEntry.entry_state.
L7108new
678Lemmasobc_D_nonhalt
Lemma sobc_D_nonhalt : ~ halts SOBCv10.source_tm (D;; tape0).
L7117new
679Definitiontm
Definition tm := Eval compute in
(TM_from_str "1RB0LE_1RC---_0RD0RB_1RE0LA_1RF0LF_1LD1RF").
L7124new
680Definitionphi
Definition phi (q : Q) : Q :=
match q with
| A => D | B => E | C => F | D => A | E => B | F => C
end.
L7127new
681Lemmaoriginal_permutation
Lemma original_permutation : Perm (flip tm) SOBCv10.source_tm phi.
L7132new
682Lemmanonhalt
Lemma nonhalt : ~ halts tm c0.
L7139new
4What a maintainer readsCheck: the rule table below is what the .v proves, and proof.md / README read cleanly for a maintainer.

No heading with "rule", "carries over" or "unchanged" in proof.md.

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

No related machine found (no parent link, table twin, follow-on row or mention).

6ChecklistCheck: every ✓ is computed; the two ○ are yours to decide; an amber ! is an optional check that did not finish.
  • ✓
    Machine string exact
    the .v literal == holdout list line 12 byte for byte
  • ✓
    Statement is ~halts tm c0
    parsed from the .v and confirmed by check_kill (theorem_text, theorem_rocq)
  • ✓
    No axioms beyond baseline
    1 assumption(s); tools/assumptions_baseline.txt allows only functional_extensionality_dep
  • ✓
    coqchk finished (optional)
    coqchk pass in 18.81 s
  • ✓
    .v hash matches the checked hash
    .v = checked sha256 cd0bfee325f8…; submission/ copy = checked sha256 cd0bfee325f8…
  • ✓
    No repo-local paths in the .v
    comments name no path of ours (vendor/, machines/, tools/, rocq/, scripts/, reports/, atlas/, data/, journal/, /home/); busycoq's own verify/X.v is fine: none in the .v or the submission/ copy
  • ✓
    Public write-up is clean
    tools/writeup_lint.py on submission/proof.md: 0 error(s)
  • ○
    proof.md reviewed by Dennis (Checkpoint B)
    no Checkpoint B note from Dennis found
  • ○
    Family posted together?
    no other kill in the family

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. Re-run: python3 -B tools/killreview.py 1RB0LE_1RC---_0RD0RB_1RE0LA_1RF0LF_1LD1RF

Files

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

namesizechanged
notes.md ↓24 KB2026-10-16 12:09
proof.md ↓5.9 KB2026-10-16 12:09
status.json ↓4.7 KB2026-10-16 13:28
observe.json ↓15 KB2026-10-14 16:23
1RB0LE_1RC---_0RD0RB_1RE0LA_1RF0LF_1LD1RF.v ↓258 KB2026-10-16 12:09
decisions/2 items2026-10-16 12:09
img/4 items2026-10-14 14:55
rocq/9 items2026-10-16 12:09
submission/11 items2026-10-16 12:09
work/20 items2026-10-14 15:54
status.json in full
{
 "tm": "1RB0LE_1RC---_0RD0RB_1RE0LA_1RF0LF_1LD1RF",
 "label": "W6-1",
 "status": "KILLED_NONHALT",
 "stage": "done",
 "updated": "2026-10-16",
 "reason": "Complete blank-start nonhalting proof; three unchanged check_kill passes and completed kernel replays on the same source.",
 "confidence": "high",
 "confidence_note": "The exact transition table reaches a 919-step cycle translating three cells left. Blank entry, finite counter rounds, nested trigger, and exit are proved in Rocq with only the allowed functional extensionality.",
 "template": "SOBCv10.v (same table; ours A..F = SOBCv10 D,E,F,A,B,C, mirrored); sobc1_canonical_nonhalt at line 3847",
 "siblings_same_table": {
  "1LB0RD_1LC0RC_1RA1LC_1LE0RB_1LF---_0LA0LE": "start D, mirrored: SOBCv10.v (solved upstream)",
  "1RB---_0RC0RA_1RD0LF_1RE0LE_1LC1RE_1RA0LD": "start B: TCv1.v (solved upstream)"
 },
 "next_goal": "Await upstream review of PR #29.",
 "wave6_stage1": {
  "tail_law": "tail U^(2k+1) y, level(y) in -1..4 (A, B, E t, D t, A t, B t); per exception k' = k+1, L' = k+1-L; last column w -> w-1, v -> 2^(w-1) - v//2",
  "chain": "exc 6 (k=1, L=3) -> exc 7 (k=2, L=-1) -> exc 8 (k=3, L=4) -> exc 9 (k=4, L=0): decode trigger",
  "exit": "decode trigger in exception 9, then a second counter phase (P1 ~256 long sweeps, P2 ~200 in the toy), then a translated cycler: state B at the right end of 1000100010001000100010001000100010010001000100010001000100010010100100, period 919, shift 3, backswing 67",
  "evidence": "work/tail/*.out: modelA 80/80, modelD 23/25 (2 expected), rawlaw 48/48 + 16/16, decodetrig2 60/60 + 30/30, decodetrig3 8/8, mintrig 20/20, cycverify, sweeps2_n900",
  "cryptid": "no"
 },
 "wave6_stage2": {
  "exit": "decode trigger in exception 9 on call h_t = 4*2^W - S - 2 (n9 = h_t + c, c >= 0 pending) -> E' (T2 k=5: tail U^13 B t, last column 25 -> 24) with n' = h_t calls -> E'' on E' call h'' = 3*2^(W-1) - S - 2 -> raw pass right over the all-B counter -> overflow at B^24 U^13 B t (local, 1208 + 14(w-1) steps) -> cycler window Y, +3 cells per 919 steps",
  "correction": "stage 1's P1 = exception 9's own call phase, P2 = the nested exception E' call phase; v/x blocks = exception_call_left's pending/finished calls",
  "evidence": "work/s2: nested_a/b.out 52/52, eprime.out 32/32 (n' = f+1 threshold), overflow_check.out 90/90 + 50/50, t1_deficit.out 120/120, fam_a_m30.out (family (a) exact at m = 30)",
  "proof_md": "written (informal chain from blank to the cycler; status table in section 7)",
  "cryptid": "no"
 },
 "formal_planning": {
  "date": "2026-10-14",
  "proved": "rocq/W61Exit.v: raw_tail_base/column/columns (T2 k=0..5), overflow_base/column/columns (O), cycler_step/cycler_nonhalt (C), exit_nonhalt, nested_pre_left, launch_far, relaunches_far, nested_launch, nested_counter, nested_exit; Print Assumptions: funext only",
  "stated": "rocq/W61Plan.v: tail_round, tail_round_trigger, opening, entry_pre (Admitted); sobc_D_nonhalt, perm and nonhalt proved from them",
  "library": "unmodified SOBCv10.v compiled as W61.SOBCv10 (84 s, 0.8 GB)",
  "estimate": "about 10 x 2 h (range 9-12): R1-R2 counter to trigger + T1, R3-R4 decode T3, R5 next post + invariant, R6 trigger round, R7-R8 opening, R9 single-file kill + check_kill",
  "plan": "rocq/plan.md"
 },
 "outcome": "killed_nonhalt",
 "killed_at": "2026-10-16T18:56:21Z",
 "next": "Await upstream review of PR #29.",
 "funded": {
  "option": "spike",
  "date": "2026-10-16",
  "outcome": "Complete proof within the funded stage."
 },
 "kill": {
  "file": "1RB0LE_1RC---_0RD0RB_1RE0LA_1RF0LF_1LD1RF.v",
  "sha256": "cd0bfee325f897047164a4cc11325ca3e30d2acfadedf4c2abecec0a859327ca",
  "lines": 7149,
  "check_kill": "PASS in all three roles on identical source; Coq 8.20.1 native compilation and independent coqchk replays completed.",
  "route": "Exact blank opening, finite safe-column budgets, signed last-column values, three returning rounds, nested overflow into a translated cycle.",
  "submission": "submission/",
  "checks": [
   "submission/formalizer-gate.json",
   "submission/independent-gate.json",
   "submission/orchestrator-gate.json"
  ]
 },
 "completed_spike": {
  "ended_at": "2026-10-16T11:57:40-07:00",
  "source_sha256": "cd0bfee325f897047164a4cc11325ca3e30d2acfadedf4c2abecec0a859327ca",
  "historical_plan": "rocq/plan.md",
  "historical_plan_note": "The earlier plan and draft statements are retained as history; the complete proof uses a finite-horizon invariant and has no unfinished statements.",
  "public_proof": "submission/proof.md"
 },
 "pr": "https://github.com/ccz181078/busycoq/pull/29",
 "pr_state": "open",
 "pr_file": "verify/SOBCv10Tail.v",
 "pr_opened": "2026-10-16T19:10:32Z",
 "pr_head_sha": "bcb95301c93afb961cb3ac3bcd83917767c12d1e",
 "pr_comments": 0,
 "posted": "2026-10-16 (Discord; user confirmed sent)"
}