@@ -12,6 +12,78 @@ namespace NonHalt
1212
1313open Lean Meta Elab Tactic Std Term TmState Γ
1414
15+ lemma F_odd (n i: ℕ) (h_odd: Odd n) (init_cfg: Cfg)
16+ (h : nth_cfg init_cfg i = ⟨F, ⟨one,
17+ Turing.ListBlank.mk [],
18+ Turing.ListBlank.mk (List.replicate (n-1 ) one)⟩⟩) :
19+ nth_cfg init_cfg (i+(3 * n^2 +4 *n+1 )/2 ) = ⟨F, ⟨one,
20+ Turing.ListBlank.mk [],
21+ Turing.ListBlank.mk (List.replicate ((collatz n)-1 ) one)⟩⟩
22+ := by
23+ cases n with
24+ | zero => ring_nf at *; tauto
25+ | succ n => forward h
26+ cases n with
27+ | zero => ring_nf at *
28+ forward h
29+ forward h
30+ forward h
31+ simp [h]
32+ simp [collatz]
33+ simp! [Turing.ListBlank.mk]
34+ rw [Quotient.eq'']
35+ right
36+ use 1
37+ tauto
38+ | succ n => obtain ⟨k, h_odd⟩ := h_odd
39+ cases k with
40+ | zero => omega
41+ | succ k =>
42+ have h_odd : n = 2 * k+1 := by omega
43+ subst n
44+ rw [← (ListBlank_empty_eq_single_zero (List.replicate _ one))] at h
45+ apply B_odd at h
46+ . ring_nf at *
47+ forward h
48+ have g : (1 +(2 +k*2-1 )) /2 = k + 1 := by omega
49+ rw [g] at h
50+ rw [List.replicate_succ] at h
51+ simp at h
52+ rw [← List.replicate_succ] at h
53+ apply copy_half at h
54+ rw [← (ListBlank_empty_eq_single_zero (List.replicate _ one))] at h
55+ apply G_to_J at h
56+ forward h
57+ forward h
58+ simp [collatz]
59+ ring_nf at *
60+ have g : i + (40 + k * 44 + k ^ 2 * 12 ) / 2 = 20 + 22 * k + 6 * k ^ 2 + i := by omega
61+ rw [g]
62+ have g : 2 +k*2-1 = k*2 +1 := by omega
63+ rw [g] at h
64+ have g : (k * 2 + 1 ) ^ 2 = 4 * k + 4 * k ^ 2 + 1 := by ring_nf
65+ have g : ((k * 2 + 1 ) * 7 + (k * 2 + 1 ) ^ 2 ) / 2 = 4 + 9 * k + 2 * k ^ 2 := by omega
66+ have g : 16 + i + k * 13 + k ^ 2 * 4 + ((k * 2 + 1 ) * 7 + (k * 2 + 1 ) ^ 2 ) / 2 = 20 + 22 * k + 6 * k ^ 2 + i := by omega
67+ rw [← g]
68+ simp [h]
69+ constructor
70+ . simp! [Turing.ListBlank.mk]
71+ rw [Quotient.eq'']
72+ right
73+ use 1
74+ tauto
75+ . rw [← List.replicate_one]
76+ rw [List.replicate_append_replicate]
77+ apply congr
78+ any_goals rfl
79+ apply congr
80+ any_goals rfl
81+ apply congr
82+ any_goals rfl
83+ omega
84+ . use k; omega
85+
86+
1587-- if n ≥ 1, n -> collatz n
1688theorem F_collatz (n: ℕ) (_ : n ≥ 1 ) (i: ℕ) (init_cfg: Cfg)
1789(h : nth_cfg init_cfg i = ⟨F, ⟨one,
0 commit comments