|
1 | 1 | -- PDP is short for "prime board prime"
|
2 | 2 | import GoldbachTm.Tm31.TuringMachine31
|
| 3 | +import GoldbachTm.Tm31.Search0 |
| 4 | +import GoldbachTm.Tm31.Prime |
3 | 5 | import Mathlib.Data.Nat.Prime.Defs
|
4 | 6 |
|
5 |
| --- TODO: maybe need double 0 |
6 | 7 | -- l1 : count of 1 on the left
|
7 | 8 | -- 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 + 1 ≥ 4 /\ |
| 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