Skip to content

Commit 66c8f85

Browse files
committed
25 states is enough
no 16 merge 16 to 4
1 parent b084c1a commit 66c8f85

12 files changed

+151
-151
lines changed

GoldbachTm.lean

+7-7
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ import GoldbachTm.Basic
44
import GoldbachTm.Format
55
import GoldbachTm.ListBlank
66

7-
import GoldbachTm.Tm26.TuringMachine26
8-
import GoldbachTm.Tm26.Search0
9-
import GoldbachTm.Tm26.Transition
10-
import GoldbachTm.Tm26.Miscellaneous
11-
import GoldbachTm.Tm26.Prime
12-
import GoldbachTm.Tm26.PBP
13-
import GoldbachTm.Tm26.Content
7+
import GoldbachTm.Tm25.TuringMachine25
8+
import GoldbachTm.Tm25.Search0
9+
import GoldbachTm.Tm25.Transition
10+
import GoldbachTm.Tm25.Miscellaneous
11+
import GoldbachTm.Tm25.Prime
12+
import GoldbachTm.Tm25.PBP
13+
import GoldbachTm.Tm25.Content
1414

1515
import GoldbachTm.Tm31.TuringMachine31
1616
import GoldbachTm.Tm31.Search0

GoldbachTm/Basic.lean

+1-1
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ induction n with
129129

130130
/-
131131
P i => nth_cfg i ≠ none
132-
Q i n => nth_cfg i = some ⟨⟨25, by omega⟩, ⟨Γ.zero, Turing.ListBlank.mk (List.replicate (2*n+4) Γ.one), Turing.ListBlank.mk []⟩⟩
132+
Q i n => nth_cfg i = some ⟨⟨24, by omega⟩, ⟨Γ.zero, Turing.ListBlank.mk (List.replicate (2*n+4) Γ.one), Turing.ListBlank.mk []⟩⟩
133133
-/
134134
theorem propagating_induction (P : ℕ → Prop) (Q : ℕ → ℕ → Prop)
135135
(base : ℕ) (hbase : Q base 0)

GoldbachTm/Tm26/Content.lean GoldbachTm/Tm25/Content.lean

+15-15
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
import GoldbachTm.Tm26.TuringMachine26
2-
import GoldbachTm.Tm26.Search0
3-
import GoldbachTm.Tm26.PBP
1+
import GoldbachTm.Tm25.TuringMachine25
2+
import GoldbachTm.Tm25.Search0
3+
import GoldbachTm.Tm25.PBP
44
import Mathlib.Data.Nat.Prime.Defs
55

6-
namespace Tm26
6+
namespace Tm25
77

8-
theorem lemma_22 (n : ℕ) (i : ℕ)
8+
theorem lemma_21 (n : ℕ) (i : ℕ)
99
(even_n : Even (n+2))
1010
(g :
11-
nth_cfg i = some ⟨⟨22, by omega⟩, ⟨Γ.zero, Turing.ListBlank.mk (List.replicate (n+4) Γ.one), Turing.ListBlank.mk []⟩⟩ )
11+
nth_cfg i = some ⟨⟨21, by omega⟩, ⟨Γ.zero, Turing.ListBlank.mk (List.replicate (n+4) Γ.one), Turing.ListBlank.mk []⟩⟩ )
1212
( hpp : Goldbach (n+4)) :
13-
∃ j>i, nth_cfg j = some ⟨⟨22, by omega⟩, ⟨Γ.zero, Turing.ListBlank.mk (List.replicate (n+4+2) Γ.one), Turing.ListBlank.mk []⟩⟩
13+
∃ j>i, nth_cfg j = some ⟨⟨21, by omega⟩, ⟨Γ.zero, Turing.ListBlank.mk (List.replicate (n+4+2) Γ.one), Turing.ListBlank.mk []⟩⟩
1414
:= by
1515
forward g
1616
repeat rw [← List.replicate_succ] at g
17-
apply (leap_18 _ _ 0) at g
17+
apply (leap_17 _ _ 0) at g
1818
any_goals omega
1919
any_goals assumption
2020
refine (?_ ∘ g) ?_
@@ -40,7 +40,7 @@ refine (?_ ∘ g) ?_
4040

4141
lemma never_halt_step (n : ℕ) :
4242
(∀ i < n, Goldbach (2*i+4)) ->
43-
∃ j, nth_cfg j = some ⟨⟨22, by omega⟩, ⟨Γ.zero, Turing.ListBlank.mk (List.replicate (2*n+4) Γ.one), Turing.ListBlank.mk []⟩⟩
43+
∃ j, nth_cfg j = some ⟨⟨21, by omega⟩, ⟨Γ.zero, Turing.ListBlank.mk (List.replicate (2*n+4) Γ.one), Turing.ListBlank.mk []⟩⟩
4444
:= by
4545
induction n with
4646
| zero =>
@@ -54,7 +54,7 @@ refine (?_ ∘ induction_step) ?_
5454
. intros g
5555
obtain ⟨j, g⟩ := g
5656
specialize h n (by omega)
57-
apply lemma_22 at g
57+
apply lemma_21 at g
5858
. specialize g h
5959
obtain ⟨k, g⟩ := g
6060
use k
@@ -73,7 +73,7 @@ apply never_halt_step at IH
7373
obtain ⟨j, g⟩ := IH
7474
forward g
7575
repeat rw [← List.replicate_succ] at g
76-
apply (leap_18_halt _ _ 0) at g
76+
apply (leap_17_halt _ _ 0) at g
7777
any_goals omega
7878
by_contra! h
7979
refine (?_ ∘ g) ?_
@@ -88,10 +88,10 @@ refine (?_ ∘ g) ?_
8888

8989
theorem halt_lemma_rev' (h : ∀ n, Goldbach (2*n+4)) :
9090
∀ i, nth_cfg i ≠ none := by
91-
apply propagating_induction (fun i => nth_cfg i ≠ none) (fun i n => nth_cfg i = some ⟨⟨22, by omega⟩, ⟨Γ.zero, Turing.ListBlank.mk (List.replicate (2*n+4) Γ.one), Turing.ListBlank.mk []⟩⟩) 45
91+
apply propagating_induction (fun i => nth_cfg i ≠ none) (fun i n => nth_cfg i = some ⟨⟨21, by omega⟩, ⟨Γ.zero, Turing.ListBlank.mk (List.replicate (2*n+4) Γ.one), Turing.ListBlank.mk []⟩⟩) 45
9292
. simp [cfg45]; tauto
9393
. intros i n g
94-
apply (lemma_22 (2*n)) at g
94+
apply (lemma_21 (2*n)) at g
9595
. specialize g (h _)
9696
obtain ⟨j, g⟩ := g
9797
use j
@@ -120,7 +120,7 @@ by rw [← Mathlib.Tactic.PushNeg.not_not_eq (Goldbach (2*i+4))]
120120
)
121121
forward hj
122122
repeat rw [← List.replicate_succ] at hj
123-
apply (leap_18_halt _ _ 0) at hj
123+
apply (leap_17_halt _ _ 0) at hj
124124
any_goals omega
125125
apply hj
126126
intros x y _
@@ -135,4 +135,4 @@ by_contra! g
135135
apply halt_lemma_rev' at g
136136
tauto
137137

138-
end Tm26
138+
end Tm25

GoldbachTm/Tm26/Miscellaneous.lean GoldbachTm/Tm25/Miscellaneous.lean

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
-- some lemmas tm31 doesn't contain
22

3-
import GoldbachTm.Tm26.TuringMachine26
4-
import GoldbachTm.Tm26.Transition
3+
import GoldbachTm.Tm25.TuringMachine25
4+
import GoldbachTm.Tm25.Transition
55

6-
namespace Tm26
6+
namespace Tm25
77

88
theorem lemma7 (k : ℕ): ∀ (i : ℕ) (l r : List Γ),
99
nth_cfg i = some ⟨⟨7, by omega⟩, ⟨Γ.one, Turing.ListBlank.mk (List.replicate k Γ.one ++ List.cons Γ.zero l), Turing.ListBlank.mk r⟩⟩ →
@@ -39,7 +39,7 @@ induction k with (intros i l r h; simp_all)
3939

4040
theorem lemma5 (k : ℕ): ∀ (i : ℕ) (l r : List Γ),
4141
nth_cfg i = some ⟨⟨5, by omega⟩, ⟨Γ.one, Turing.ListBlank.mk (List.replicate k Γ.one ++ List.cons Γ.zero l), Turing.ListBlank.mk r⟩⟩ →
42-
nth_cfg (i + k + 2) = some ⟨⟨4, by omega⟩, ⟨Γ.zero, Turing.ListBlank.mk (Γ.zero :: l), Turing.ListBlank.mk (List.replicate k Γ.zero ++ r)⟩⟩ := by
42+
nth_cfg (i + k + 2) = some ⟨⟨7, by omega⟩, ⟨Γ.zero, Turing.ListBlank.mk (Γ.zero :: l), Turing.ListBlank.mk (List.replicate k Γ.zero ++ r)⟩⟩ := by
4343
induction k with (intros i l r h; simp_all)
4444
| zero => iterate 2 forward h
4545
rw [← h]
@@ -111,4 +111,4 @@ cases r1 with simp_all
111111
simp [h]
112112
omega
113113

114-
end Tm26
114+
end Tm25

GoldbachTm/Tm26/PBP.lean GoldbachTm/Tm25/PBP.lean

+31-31
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
-- PDP is short for "prime board prime"
2-
import GoldbachTm.Tm26.TuringMachine26
3-
import GoldbachTm.Tm26.Search0
4-
import GoldbachTm.Tm26.Prime
2+
import GoldbachTm.Tm25.TuringMachine25
3+
import GoldbachTm.Tm25.Search0
4+
import GoldbachTm.Tm25.Prime
55
import Mathlib.Data.Nat.Prime.Defs
66

7-
namespace Tm26
7+
namespace Tm25
88

99
-- l1 : count of 1 on the left
1010
-- r1 : count of 1 on the right
11-
theorem lemma_18 (i l1 r1: ℕ)
11+
theorem lemma_17 (i l1 r1: ℕ)
1212
(hp : ¬ Nat.Prime (l1+1) \/ ¬ Nat.Prime (r1+1))
1313
(g :
14-
nth_cfg i = some ⟨⟨18, by omega⟩, ⟨Γ.one, Turing.ListBlank.mk (List.replicate (l1+1) Γ.one), Turing.ListBlank.mk (List.replicate (r1+1) Γ.one)⟩⟩
14+
nth_cfg i = some ⟨⟨17, by omega⟩, ⟨Γ.one, Turing.ListBlank.mk (List.replicate (l1+1) Γ.one), Turing.ListBlank.mk (List.replicate (r1+1) Γ.one)⟩⟩
1515
):
16-
∃ j>i, nth_cfg j = some ⟨⟨18, by omega⟩, ⟨Γ.one, Turing.ListBlank.mk (List.replicate l1 Γ.one), Turing.ListBlank.mk (List.replicate (r1+2) Γ.one)⟩⟩ := by
16+
∃ j>i, nth_cfg j = some ⟨⟨17, by omega⟩, ⟨Γ.one, Turing.ListBlank.mk (List.replicate l1 Γ.one), Turing.ListBlank.mk (List.replicate (r1+2) Γ.one)⟩⟩ := by
1717
forward g
1818
forward g
1919
forward g
2020
by_cases hr1 : Nat.Prime (r1+1)
21-
. refine (?_ ∘ (prime_21 (3+i) r1 (Γ.one :: List.replicate l1 Γ.one) [])) ?_
21+
. refine (?_ ∘ (prime_20 (3+i) r1 (Γ.one :: List.replicate l1 Γ.one) [])) ?_
2222
. intros g
2323
specialize g hr1
2424
obtain ⟨j, _, g⟩ := g
@@ -30,18 +30,18 @@ by_cases hr1 : Nat.Prime (r1+1)
3030
use 1
3131
tauto
3232
rw [h] at g
33-
apply (rec24 l1 (1+j) []) at g
33+
apply (rec23 l1 (1+j) []) at g
3434
forward g
3535
have h : ¬ Nat.Prime (l1+1) := by tauto
36-
apply n_prime_17 at h
36+
apply n_prime_16 at h
3737
pick_goal 5
3838
. rw [g]
3939
simp
4040
repeat any_goals apply And.intro
4141
all_goals rfl
4242
obtain ⟨m, _, h⟩ := h
4343
iterate 3 forward h
44-
apply rec22 at h
44+
apply rec21 at h
4545
forward h
4646
use (5+m+l1)
4747
constructor
@@ -61,7 +61,7 @@ by_cases hr1 : Nat.Prime (r1+1)
6161
left
6262
use 1
6363
tauto
64-
. apply n_prime_17 at hr1
64+
. apply n_prime_16 at hr1
6565
pick_goal 5
6666
. rw [g]
6767
simp
@@ -95,13 +95,13 @@ theorem both_prime (i l1 r1: ℕ)
9595
(hpr : Nat.Prime (r1+1))
9696
(even_sum : Even (l1+r1))
9797
(g :
98-
nth_cfg i = some ⟨⟨18, by omega⟩, ⟨Γ.one, Turing.ListBlank.mk (List.replicate (l1+1) Γ.one), Turing.ListBlank.mk (List.replicate (r1+1) Γ.one)⟩⟩
98+
nth_cfg i = some ⟨⟨17, by omega⟩, ⟨Γ.one, Turing.ListBlank.mk (List.replicate (l1+1) Γ.one), Turing.ListBlank.mk (List.replicate (r1+1) Γ.one)⟩⟩
9999
) :
100-
∃ j>i, nth_cfg j = some ⟨⟨22, by omega⟩, ⟨Γ.zero, Turing.ListBlank.mk (List.replicate (l1+r1+4) Γ.one), Turing.ListBlank.mk []⟩⟩ := by
100+
∃ j>i, nth_cfg j = some ⟨⟨21, by omega⟩, ⟨Γ.zero, Turing.ListBlank.mk (List.replicate (l1+r1+4) Γ.one), Turing.ListBlank.mk []⟩⟩ := by
101101
forward g
102102
forward g
103103
forward g
104-
apply prime_21 at hpr
104+
apply prime_20 at hpr
105105
pick_goal 5
106106
. rw [g]
107107
simp
@@ -122,9 +122,9 @@ have h : Turing.ListBlank.mk (List.replicate l1 Γ.one) = Turing.ListBlank.mk (L
122122
use 1
123123
tauto
124124
rw [h] at g
125-
apply (rec24 l1 (1+j) []) at g
125+
apply (rec23 l1 (1+j) []) at g
126126
forward g
127-
apply prime_21 at hpl
127+
apply prime_20 at hpl
128128
pick_goal 5
129129
. rw [g]
130130
simp
@@ -133,15 +133,15 @@ obtain ⟨m, _, g⟩ := hpl
133133
forward g
134134
forward g
135135
forward g
136-
apply rec23 at g
136+
apply rec22 at g
137137
forward g
138138
rw [← List.cons_append] at g
139139
rw [← List.replicate_succ] at g
140140
rw [← List.cons_append] at g
141141
rw [← List.replicate_succ] at g
142142
rw [List.append_cons] at g
143143
rw [← List.replicate_succ'] at g
144-
apply rec24 at g
144+
apply rec23 at g
145145
forward g
146146
rw [← List.cons_append] at g
147147
rw [← List.replicate_succ] at g
@@ -151,7 +151,7 @@ rw [List.append_cons] at g
151151
rw [← List.replicate_succ'] at g
152152
rw [← List.append_assoc] at g
153153
rw [← List.replicate_add] at g
154-
apply n_prime_17 at g
154+
apply n_prime_16 at g
155155
refine (?_ ∘ g) ?_
156156
. clear g
157157
intros g
@@ -161,7 +161,7 @@ refine (?_ ∘ g) ?_
161161
forward g
162162
rw [← List.cons_append] at g
163163
rw [← List.replicate_succ] at g
164-
apply rec22 at g
164+
apply rec21 at g
165165
use (3 + n + (2 + l1 + r1 + 1) + 1)
166166
constructor
167167
. omega
@@ -182,20 +182,20 @@ refine (?_ ∘ g) ?_
182182
assumption
183183

184184

185-
theorem leap_18 (l1 : ℕ) : ∀ (i r1: ℕ),
185+
theorem leap_17 (l1 : ℕ) : ∀ (i r1: ℕ),
186186
l1 + r1 ≥ 2
187187
Even (l1+r1) →
188-
nth_cfg i = some ⟨⟨18, by omega⟩, ⟨Γ.one, Turing.ListBlank.mk (List.replicate (l1+1) Γ.one), Turing.ListBlank.mk (List.replicate (r1+1) Γ.one)⟩⟩ →
188+
nth_cfg i = some ⟨⟨17, by omega⟩, ⟨Γ.one, Turing.ListBlank.mk (List.replicate (l1+1) Γ.one), Turing.ListBlank.mk (List.replicate (r1+1) Γ.one)⟩⟩ →
189189
(∃ x y, x + y = l1 + r1 + 2 /\ Nat.Prime x /\ Nat.Prime y /\ (r1+1) ≤ x /\ x ≤ y) →
190-
∃ j>i, nth_cfg j = some ⟨⟨22, by omega⟩, ⟨Γ.zero, Turing.ListBlank.mk (List.replicate (l1+r1+4) Γ.one), Turing.ListBlank.mk []⟩⟩
190+
∃ j>i, nth_cfg j = some ⟨⟨21, by omega⟩, ⟨Γ.zero, Turing.ListBlank.mk (List.replicate (l1+r1+4) Γ.one), Turing.ListBlank.mk []⟩⟩
191191
:= by
192192
induction l1 with
193193
| zero => omega
194194
| succ l1 induction_step =>
195195
intros i r1 h _ g hpp
196196
by_cases hp : ¬ Nat.Prime (l1+2) \/ ¬ Nat.Prime (r1+1)
197197
. -- induction step
198-
apply lemma_18 at g
198+
apply lemma_17 at g
199199
any_goals tauto
200200
obtain ⟨j, _, g⟩ := g
201201
apply induction_step at g
@@ -231,9 +231,9 @@ induction l1 with
231231
all_goals tauto
232232

233233

234-
theorem leap_18_halt (l1 : ℕ) : ∀ (i r1: ℕ),
234+
theorem leap_17_halt (l1 : ℕ) : ∀ (i r1: ℕ),
235235
l1 + r1 ≥ 2
236-
nth_cfg i = some ⟨⟨18, by omega⟩, ⟨Γ.one, Turing.ListBlank.mk (List.replicate (l1+1) Γ.one), Turing.ListBlank.mk (List.replicate (r1+1) Γ.one)⟩⟩ →
236+
nth_cfg i = some ⟨⟨17, by omega⟩, ⟨Γ.one, Turing.ListBlank.mk (List.replicate (l1+1) Γ.one), Turing.ListBlank.mk (List.replicate (r1+1) Γ.one)⟩⟩ →
237237
(∀ x y, x + y = l1 + r1 + 2 /\ Nat.Prime x /\ Nat.Prime y → False) →
238238
∃ j, nth_cfg j = none
239239
:= by
@@ -249,7 +249,7 @@ induction l1 with
249249
rw [← List.replicate_succ] at g
250250
rw [← List.replicate_succ] at g
251251
by_cases hp : Nat.Prime (r2+3)
252-
. apply prime_21 at hp
252+
. apply prime_20 at hp
253253
pick_goal 5
254254
. rw [g]
255255
simp
@@ -263,7 +263,7 @@ induction l1 with
263263
obtain ⟨j, _, h⟩ := hp
264264
iterate 13 forward h
265265
use (13+j)
266-
. apply n_prime_17 at hp
266+
. apply n_prime_16 at hp
267267
pick_goal 5
268268
. rw [g]
269269
simp
@@ -279,7 +279,7 @@ induction l1 with
279279
use (3+j)
280280
| succ l1 induction_step =>
281281
intros i r1 h g hpp
282-
apply lemma_18 at g
282+
apply lemma_17 at g
283283
. obtain ⟨j, _, g⟩ := g
284284
apply induction_step at g
285285
any_goals omega
@@ -293,4 +293,4 @@ induction l1 with
293293
ring_nf
294294
tauto
295295

296-
end Tm26
296+
end Tm25

0 commit comments

Comments
 (0)