Skip to content

Commit 8784193

Browse files
committed
F_odd
1 parent c6c82b3 commit 8784193

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

CollatzFunction/NonHalt/Main.lean

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,78 @@ namespace NonHalt
1212

1313
open 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
1688
theorem F_collatz (n: ℕ) (_ : n ≥ 1) (i: ℕ) (init_cfg: Cfg)
1789
(h : nth_cfg init_cfg i = ⟨F, ⟨one,

0 commit comments

Comments
 (0)