Skip to content

Commit cb3109a

Browse files
committed
lemma_26
1 parent 9f7812f commit cb3109a

File tree

1 file changed

+104
-6
lines changed

1 file changed

+104
-6
lines changed

GoldbachTm/Tm31/PBP.lean

+104-6
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,110 @@
11
-- PDP is short for "prime board prime"
22
import GoldbachTm.Tm31.TuringMachine31
3+
import GoldbachTm.Tm31.Search0
4+
import GoldbachTm.Tm31.Prime
35
import Mathlib.Data.Nat.Prime.Defs
46

5-
-- TODO: maybe need double 0
67
-- l1 : count of 1 on the left
78
-- r1 : count of 1 on the right
8-
theorem lemma_26 : ∀ (i l1 r1: ℕ) (l r : List Γ),
9-
nth_cfg i = some ⟨⟨26, by omega⟩, ⟨Γ.one, Turing.ListBlank.mk (List.replicate (l1+1) Γ.one ++ List.cons Γ.zero l), Turing.ListBlank.mk (List.replicate r1 Γ.one ++ List.cons Γ.zero r)⟩⟩ →
10-
(¬ Nat.Prime (l1+1)) \/ (¬ Nat.Prime r1) →
11-
∃ j, nth_cfg (i+j) = some ⟨⟨26, by omega⟩, ⟨Γ.one, Turing.ListBlank.mk (List.replicate l1 Γ.one ++ List.cons Γ.zero l), Turing.ListBlank.mk (List.replicate (r1+1) Γ.one ++ List.cons Γ.zero r)⟩⟩ :=
12-
sorry
9+
theorem lemma_26 (i l1 r1: ℕ)
10+
(hp : ¬ Nat.Prime (l1+1) \/ ¬ Nat.Prime (r1+1))
11+
(g :
12+
nth_cfg i = some ⟨⟨26, by omega⟩, ⟨Γ.one, Turing.ListBlank.mk (List.replicate (l1+1) Γ.one), Turing.ListBlank.mk (List.replicate (r1+1) Γ.one)⟩⟩
13+
):
14+
∃ j, nth_cfg (i+j) = some ⟨⟨28, by omega⟩, ⟨Γ.one, Turing.ListBlank.mk (List.replicate l1 Γ.one), Turing.ListBlank.mk (List.replicate (r1+2) Γ.one)⟩⟩ := by
15+
forward g g i
16+
by_cases hr1 : Nat.Prime (r1+1)
17+
. refine (?_ ∘ (lemma_23 (1+i) r1 (Γ.one :: List.replicate l1 Γ.one) [])) ?_
18+
. intros g
19+
specialize g hr1
20+
obtain ⟨j, g⟩ := g
21+
forward g g (1+i+j)
22+
refine (?_ ∘ (lemma_23_to_27 (2+i+j) l1 [] (Γ.zero :: Γ.one :: (List.replicate r1 Γ.one ++ [Γ.zero])))) ?_
23+
. intros g
24+
obtain ⟨k, g⟩ := g
25+
forward g g (k+(2+i+j))
26+
have h : ¬ Nat.Prime (l1+1) := by tauto
27+
apply lemma_not_prime at h
28+
pick_goal 5
29+
. rw [g]
30+
simp
31+
repeat any_goals apply And.intro
32+
all_goals rfl
33+
obtain ⟨m, h⟩ := h
34+
forward h h (3+k+i+j+m)
35+
forward h h (4+k+i+j+m)
36+
forward h h (5+k+i+j+m)
37+
apply rec30 at h
38+
forward h h (6+k+i+j+m+l1+1)
39+
use (8+k+j+m+l1)
40+
ring_nf at *
41+
simp [h]
42+
repeat any_goals apply And.intro
43+
all_goals simp! [Turing.ListBlank.mk]
44+
all_goals rw [Quotient.eq'']
45+
all_goals right
46+
. use 2
47+
tauto
48+
. use 1
49+
simp
50+
rw [← List.cons_append]
51+
rw [← List.cons_append]
52+
rw [← List.replicate_succ]
53+
rw [← List.replicate_succ]
54+
ring_nf
55+
tauto
56+
. simp! [g, Turing.ListBlank.mk]
57+
rw [Quotient.eq'']
58+
left
59+
use 1
60+
tauto
61+
. simp! [g, Turing.ListBlank.mk]
62+
rw [Quotient.eq'']
63+
left
64+
use 1
65+
tauto
66+
. apply lemma_not_prime at hr1
67+
pick_goal 5
68+
. rw [g]
69+
simp
70+
repeat any_goals apply And.intro
71+
. rfl
72+
. simp! [Turing.ListBlank.mk]
73+
rw [Quotient.eq'']
74+
left
75+
use 1
76+
tauto
77+
obtain ⟨j, g⟩ := hr1
78+
forward g g (1+i+j)
79+
forward g g (2+i+j)
80+
forward g g (3+i+j)
81+
use (4+j)
82+
ring_nf at *
83+
simp! [g]
84+
simp! [Turing.ListBlank.mk]
85+
rw [Quotient.eq'']
86+
right
87+
use 1
88+
rw [← List.cons_append]
89+
rw [← List.replicate_succ]
90+
rw [← List.cons_append]
91+
rw [← List.replicate_succ]
92+
ring_nf
93+
tauto
94+
95+
-- r1 > 0
96+
theorem leap_26 (l1 : ℕ) : ∀ (i r1: ℕ),
97+
l1 + r1 + 14 /\
98+
nth_cfg i = some ⟨⟨26, by omega⟩, ⟨Γ.one, Turing.ListBlank.mk (List.replicate (l1+1) Γ.one), Turing.ListBlank.mk (List.replicate r1 Γ.one)⟩⟩ →
99+
(∃ x y, x + y = l1 + r1 + 1 /\ Nat.Prime x /\ Nat.Prime y /\ r1 ≤ x /\ x ≤ y) →
100+
∃ j, nth_cfg (i+j) = some ⟨⟨25, by omega⟩, ⟨Γ.zero, Turing.ListBlank.mk (List.replicate (l1+r1+3) Γ.one), Turing.ListBlank.mk []⟩⟩
101+
:= by
102+
induction l1 with
103+
| zero => simp
104+
intros i r1 _ g x y _ _ _ _ _
105+
omega
106+
| succ l1 =>
107+
intros i r1 h _
108+
obtain ⟨h, g⟩ := h
109+
forward g g i
110+
sorry

0 commit comments

Comments
 (0)