/-
Copyright 2025 The Formal Conjectures Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-/
import FormalConjecturesUtilOppermann's Conjecture
References:
open Finset Filternamespace OppermannFor every integer $x \ge 2$ there exists a prime between $x(x-1)$ and $x^2$.
@[category research open, AMS 11]
theorem oppermann_conjecture.parts.i (x : ℕ) (hx : 2 ≤ x) :
∃ p ∈ Ioo (x * (x - 1)) (x^2), p.Prime := x:ℕhx:2 ≤ x⊢ ∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p
All goals completed! 🐙For every integer $x \ge 2$ there exists a prime between $x^2$ and $x(x+1)$.
@[category research open, AMS 11]
theorem oppermann_conjecture.parts.ii (x : ℕ) (hx : 2 ≤ x) :
∃ p ∈ Ioo (x^2) (x * (x + 1)), p.Prime := x:ℕhx:2 ≤ x⊢ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime p
All goals completed! 🐙Oppermann's Conjecture: For every integer $x \ge 2$, the following hold:
There exists a prime between $x(x-1)$ and $x^2$.
There exists a prime between $x^2$ and $x(x+1)$.
@[category research open, AMS 11]
theorem oppermann_conjecture (x : ℕ) (hx : 2 ≤ x) :
(∃ p ∈ Ioo (x * (x - 1)) (x^2), p.Prime) ∧
(∃ p ∈ Ioo (x^2) (x * (x + 1)), p.Prime) := x:ℕhx:2 ≤ x⊢ (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime p
All goals completed! 🐙Oppermann's conjecture implies Brocard's conjecture.
n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p2:ℕhp2p:Nat.Prime p2p3:ℕhp3p:Nat.Prime p3p4:ℕhp4p:Nat.Prime p4hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hp4mem:(prev + 2) * (prev + 1) < p4 ∧ p4 < (prev + 2) ^ 2hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h12:p1 < p2h23:p2 < p3h34:p3 < p4⊢ 4 ≤ #(filter Nat.Prime (Ioo (prev ^ 2) (next ^ 2)))
refine ((show ({p1, p2, p3, p4} : Finset ℕ).card = 4 from ?_) ▸
Finset.card_le_card (s := {p1, p2, p3, p4}) ?_) refine_1 n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p2:ℕhp2p:Nat.Prime p2p3:ℕhp3p:Nat.Prime p3p4:ℕhp4p:Nat.Prime p4hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hp4mem:(prev + 2) * (prev + 1) < p4 ∧ p4 < (prev + 2) ^ 2hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h12:p1 < p2h23:p2 < p3h34:p3 < p4⊢ #{p1, p2, p3, p4} = 4refine_2 n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p2:ℕhp2p:Nat.Prime p2p3:ℕhp3p:Nat.Prime p3p4:ℕhp4p:Nat.Prime p4hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hp4mem:(prev + 2) * (prev + 1) < p4 ∧ p4 < (prev + 2) ^ 2hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h12:p1 < p2h23:p2 < p3h34:p3 < p4⊢ {p1, p2, p3, p4} ⊆ filter Nat.Prime (Ioo (prev ^ 2) (next ^ 2))
· refine_1 n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p2:ℕhp2p:Nat.Prime p2p3:ℕhp3p:Nat.Prime p3p4:ℕhp4p:Nat.Prime p4hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hp4mem:(prev + 2) * (prev + 1) < p4 ∧ p4 < (prev + 2) ^ 2hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h12:p1 < p2h23:p2 < p3h34:p3 < p4⊢ #{p1, p2, p3, p4} = 4 simp [Finset.card_insert_of_notMem, h12.ne, (h12.trans h23).ne,
(h12.trans (h23.trans h34)).ne, h23.ne, (h23.trans h34).ne, h34.ne] All goals completed! 🐙
· refine_2 n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p2:ℕhp2p:Nat.Prime p2p3:ℕhp3p:Nat.Prime p3p4:ℕhp4p:Nat.Prime p4hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hp4mem:(prev + 2) * (prev + 1) < p4 ∧ p4 < (prev + 2) ^ 2hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h12:p1 < p2h23:p2 < p3h34:p3 < p4⊢ {p1, p2, p3, p4} ⊆ filter Nat.Prime (Ioo (prev ^ 2) (next ^ 2)) intro x hx refine_2 n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p2:ℕhp2p:Nat.Prime p2p3:ℕhp3p:Nat.Prime p3p4:ℕhp4p:Nat.Prime p4hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hp4mem:(prev + 2) * (prev + 1) < p4 ∧ p4 < (prev + 2) ^ 2hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h12:p1 < p2h23:p2 < p3h34:p3 < p4x:ℕhx:x ∈ {p1, p2, p3, p4}⊢ x ∈ filter Nat.Prime (Ioo (prev ^ 2) (next ^ 2))
simp only [Finset.mem_insert, Finset.mem_singleton] at hx refine_2 n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p2:ℕhp2p:Nat.Prime p2p3:ℕhp3p:Nat.Prime p3p4:ℕhp4p:Nat.Prime p4hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hp4mem:(prev + 2) * (prev + 1) < p4 ∧ p4 < (prev + 2) ^ 2hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h12:p1 < p2h23:p2 < p3h34:p3 < p4x:ℕhx:x = p1 ∨ x = p2 ∨ x = p3 ∨ x = p4⊢ x ∈ filter Nat.Prime (Ioo (prev ^ 2) (next ^ 2))
rcases hx with rfl | rfl | rfl | rfl refine_2.inl n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp2:ℕhp2p:Nat.Prime p2p3:ℕhp3p:Nat.Prime p3p4:ℕhp4p:Nat.Prime p4hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hp4mem:(prev + 2) * (prev + 1) < p4 ∧ p4 < (prev + 2) ^ 2hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h23:p2 < p3h34:p3 < p4x:ℕhp1p:Nat.Prime xhp1mem:prev ^ 2 < x ∧ x < prev * (prev + 1)h12:x < p2⊢ x ∈ filter Nat.Prime (Ioo (prev ^ 2) (next ^ 2))refine_2.inr.inl n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p3:ℕhp3p:Nat.Prime p3p4:ℕhp4p:Nat.Prime p4hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hp4mem:(prev + 2) * (prev + 1) < p4 ∧ p4 < (prev + 2) ^ 2hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h34:p3 < p4x:ℕhp2p:Nat.Prime xhp2mem:(prev + 1) * prev < x ∧ x < (prev + 1) ^ 2h12:p1 < xh23:x < p3⊢ x ∈ filter Nat.Prime (Ioo (prev ^ 2) (next ^ 2))refine_2.inr.inr.inl n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p2:ℕhp2p:Nat.Prime p2p4:ℕhp4p:Nat.Prime p4hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp4mem:(prev + 2) * (prev + 1) < p4 ∧ p4 < (prev + 2) ^ 2hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h12:p1 < p2x:ℕhp3p:Nat.Prime xhp3mem:(prev + 1) ^ 2 < x ∧ x < (prev + 1) * (prev + 2)h23:p2 < xh34:x < p4⊢ x ∈ filter Nat.Prime (Ioo (prev ^ 2) (next ^ 2))refine_2.inr.inr.inr n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p2:ℕhp2p:Nat.Prime p2p3:ℕhp3p:Nat.Prime p3hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h12:p1 < p2h23:p2 < p3x:ℕhp4p:Nat.Prime xhp4mem:(prev + 2) * (prev + 1) < x ∧ x < (prev + 2) ^ 2h34:p3 < x⊢ x ∈ filter Nat.Prime (Ioo (prev ^ 2) (next ^ 2)) <;> refine_2.inl n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp2:ℕhp2p:Nat.Prime p2p3:ℕhp3p:Nat.Prime p3p4:ℕhp4p:Nat.Prime p4hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hp4mem:(prev + 2) * (prev + 1) < p4 ∧ p4 < (prev + 2) ^ 2hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h23:p2 < p3h34:p3 < p4x:ℕhp1p:Nat.Prime xhp1mem:prev ^ 2 < x ∧ x < prev * (prev + 1)h12:x < p2⊢ x ∈ filter Nat.Prime (Ioo (prev ^ 2) (next ^ 2))refine_2.inr.inl n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p3:ℕhp3p:Nat.Prime p3p4:ℕhp4p:Nat.Prime p4hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hp4mem:(prev + 2) * (prev + 1) < p4 ∧ p4 < (prev + 2) ^ 2hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h34:p3 < p4x:ℕhp2p:Nat.Prime xhp2mem:(prev + 1) * prev < x ∧ x < (prev + 1) ^ 2h12:p1 < xh23:x < p3⊢ x ∈ filter Nat.Prime (Ioo (prev ^ 2) (next ^ 2))refine_2.inr.inr.inl n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p2:ℕhp2p:Nat.Prime p2p4:ℕhp4p:Nat.Prime p4hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp4mem:(prev + 2) * (prev + 1) < p4 ∧ p4 < (prev + 2) ^ 2hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h12:p1 < p2x:ℕhp3p:Nat.Prime xhp3mem:(prev + 1) ^ 2 < x ∧ x < (prev + 1) * (prev + 2)h23:p2 < xh34:x < p4⊢ x ∈ filter Nat.Prime (Ioo (prev ^ 2) (next ^ 2))refine_2.inr.inr.inr n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p2:ℕhp2p:Nat.Prime p2p3:ℕhp3p:Nat.Prime p3hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h12:p1 < p2h23:p2 < p3x:ℕhp4p:Nat.Prime xhp4mem:(prev + 2) * (prev + 1) < x ∧ x < (prev + 2) ^ 2h34:p3 < x⊢ x ∈ filter Nat.Prime (Ioo (prev ^ 2) (next ^ 2))
refine Finset.mem_filter.mpr ⟨Finset.mem_Ioo.mpr ⟨?_, ?_⟩, by n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p2:ℕhp2p:Nat.Prime p2p3:ℕhp3p:Nat.Prime p3hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h12:p1 < p2h23:p2 < p3x:ℕhp4p:Nat.Prime xhp4mem:(prev + 2) * (prev + 1) < x ∧ x < (prev + 2) ^ 2h34:p3 < x⊢ Nat.Prime x assumption All goals completed! 🐙⟩ <;> refine_2.inl.refine_1 n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp2:ℕhp2p:Nat.Prime p2p3:ℕhp3p:Nat.Prime p3p4:ℕhp4p:Nat.Prime p4hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hp4mem:(prev + 2) * (prev + 1) < p4 ∧ p4 < (prev + 2) ^ 2hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h23:p2 < p3h34:p3 < p4x:ℕhp1p:Nat.Prime xhp1mem:prev ^ 2 < x ∧ x < prev * (prev + 1)h12:x < p2⊢ prev ^ 2 < xrefine_2.inl.refine_2 n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp2:ℕhp2p:Nat.Prime p2p3:ℕhp3p:Nat.Prime p3p4:ℕhp4p:Nat.Prime p4hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hp4mem:(prev + 2) * (prev + 1) < p4 ∧ p4 < (prev + 2) ^ 2hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h23:p2 < p3h34:p3 < p4x:ℕhp1p:Nat.Prime xhp1mem:prev ^ 2 < x ∧ x < prev * (prev + 1)h12:x < p2⊢ x < next ^ 2refine_2.inr.inl.refine_1 n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p3:ℕhp3p:Nat.Prime p3p4:ℕhp4p:Nat.Prime p4hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hp4mem:(prev + 2) * (prev + 1) < p4 ∧ p4 < (prev + 2) ^ 2hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h34:p3 < p4x:ℕhp2p:Nat.Prime xhp2mem:(prev + 1) * prev < x ∧ x < (prev + 1) ^ 2h12:p1 < xh23:x < p3⊢ prev ^ 2 < xrefine_2.inr.inl.refine_2 n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p3:ℕhp3p:Nat.Prime p3p4:ℕhp4p:Nat.Prime p4hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hp4mem:(prev + 2) * (prev + 1) < p4 ∧ p4 < (prev + 2) ^ 2hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h34:p3 < p4x:ℕhp2p:Nat.Prime xhp2mem:(prev + 1) * prev < x ∧ x < (prev + 1) ^ 2h12:p1 < xh23:x < p3⊢ x < next ^ 2refine_2.inr.inr.inl.refine_1 n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p2:ℕhp2p:Nat.Prime p2p4:ℕhp4p:Nat.Prime p4hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp4mem:(prev + 2) * (prev + 1) < p4 ∧ p4 < (prev + 2) ^ 2hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h12:p1 < p2x:ℕhp3p:Nat.Prime xhp3mem:(prev + 1) ^ 2 < x ∧ x < (prev + 1) * (prev + 2)h23:p2 < xh34:x < p4⊢ prev ^ 2 < xrefine_2.inr.inr.inl.refine_2 n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p2:ℕhp2p:Nat.Prime p2p4:ℕhp4p:Nat.Prime p4hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp4mem:(prev + 2) * (prev + 1) < p4 ∧ p4 < (prev + 2) ^ 2hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h12:p1 < p2x:ℕhp3p:Nat.Prime xhp3mem:(prev + 1) ^ 2 < x ∧ x < (prev + 1) * (prev + 2)h23:p2 < xh34:x < p4⊢ x < next ^ 2refine_2.inr.inr.inr.refine_1 n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p2:ℕhp2p:Nat.Prime p2p3:ℕhp3p:Nat.Prime p3hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h12:p1 < p2h23:p2 < p3x:ℕhp4p:Nat.Prime xhp4mem:(prev + 2) * (prev + 1) < x ∧ x < (prev + 2) ^ 2h34:p3 < x⊢ prev ^ 2 < xrefine_2.inr.inr.inr.refine_2 n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pprev:ℕ := Nat.nth Nat.Prime nhprev_def:prev = Nat.nth Nat.Prime nnext:ℕ := Nat.nth Nat.Prime (n + 1)hnext_def:next = Nat.nth Nat.Prime (n + 1)hprev_prime:Nat.Prime prevhnext_prime:Nat.Prime nexthprev_ge:3 ≤ prevhlt:prev < nexthgap:prev + 2 ≤ nextleft✝:∃ p ∈ Ioo (prev * (prev - 1)) (prev ^ 2), Nat.Prime pp1:ℕhp1p:Nat.Prime p1p2:ℕhp2p:Nat.Prime p2p3:ℕhp3p:Nat.Prime p3hp1mem:prev ^ 2 < p1 ∧ p1 < prev * (prev + 1)hp2mem:(prev + 1) * prev < p2 ∧ p2 < (prev + 1) ^ 2hp3mem:(prev + 1) ^ 2 < p3 ∧ p3 < (prev + 1) * (prev + 2)hsq:(prev + 2) ^ 2 ≤ next ^ 2hsq1:(prev + 1) ^ 2 ≤ next ^ 2hb0:prev * (prev + 1) < (prev + 1) ^ 2hb1:(prev + 1) * (prev + 2) < (prev + 2) ^ 2h12:p1 < p2h23:p2 < p3x:ℕhp4p:Nat.Prime xhp4mem:(prev + 2) * (prev + 1) < x ∧ x < (prev + 2) ^ 2h34:p3 < x⊢ x < next ^ 2
linarith [hp1mem.1, hp1mem.2, hp2mem.1, hp2mem.2, hp3mem.1, hp3mem.2,
hp4mem.1, hp4mem.2, hb0, hb1, hsq, hsq1] All goals completed! 🐙Oppermann's conjecture implies Legendre's conjecture.
@[category textbook, AMS 11]
theorem oppermann_implies_legendre (n : ℕ) (hn : 1 ≤ n) (P : type_of% oppermann_conjecture) :
∃ p ∈ Ioo (n ^ 2) ((n + 1) ^ 2), p.Prime := by n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime p⊢ ∃ p ∈ Ioo (n ^ 2) ((n + 1) ^ 2), Nat.Prime p
obtain ⟨⟨p, ph⟩, _⟩ := P (n + 1) (by n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime p⊢ 2 ≤ n + 1 n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pright✝:∃ p ∈ Ioo ((n + 1) ^ 2) ((n + 1) * (n + 1 + 1)), Nat.Prime pp:ℕph:p ∈ Ioo ((n + 1) * (n + 1 - 1)) ((n + 1) ^ 2) ∧ Nat.Prime p⊢ ∃ p ∈ Ioo (n ^ 2) ((n + 1) ^ 2), Nat.Prime p simpa All goals completed! 🐙 n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pright✝:∃ p ∈ Ioo ((n + 1) ^ 2) ((n + 1) * (n + 1 + 1)), Nat.Prime pp:ℕph:p ∈ Ioo ((n + 1) * (n + 1 - 1)) ((n + 1) ^ 2) ∧ Nat.Prime p⊢ ∃ p ∈ Ioo (n ^ 2) ((n + 1) ^ 2), Nat.Prime p) n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pright✝:∃ p ∈ Ioo ((n + 1) ^ 2) ((n + 1) * (n + 1 + 1)), Nat.Prime pp:ℕph:p ∈ Ioo ((n + 1) * (n + 1 - 1)) ((n + 1) ^ 2) ∧ Nat.Prime p⊢ ∃ p ∈ Ioo (n ^ 2) ((n + 1) ^ 2), Nat.Prime p
use p h n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pright✝:∃ p ∈ Ioo ((n + 1) ^ 2) ((n + 1) * (n + 1 + 1)), Nat.Prime pp:ℕph:p ∈ Ioo ((n + 1) * (n + 1 - 1)) ((n + 1) ^ 2) ∧ Nat.Prime p⊢ p ∈ Ioo (n ^ 2) ((n + 1) ^ 2) ∧ Nat.Prime p
refine ⟨Finset.Ioo_subset_Ioo_left ?_ ph.1, ph.2⟩ h n:ℕhn:1 ≤ nP:∀ (x : ℕ), 2 ≤ x → (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime pright✝:∃ p ∈ Ioo ((n + 1) ^ 2) ((n + 1) * (n + 1 + 1)), Nat.Prime pp:ℕph:p ∈ Ioo ((n + 1) * (n + 1 - 1)) ((n + 1) ^ 2) ∧ Nat.Prime p⊢ n ^ 2 ≤ (n + 1) * (n + 1 - 1)
push_cast [sq, add_one_mul,le_self_add] All goals completed! 🐙Ferreira proved that Oppermann's conjecture is true for sufficiently large x.
@[category research solved, AMS 11]
theorem oppermann_conjecture.ferreira_large_x : ∀ᶠ x in atTop,
(∃ p ∈ Ioo (x * (x - 1)) (x^2), p.Prime) ∧
(∃ p ∈ Ioo (x^2) (x * (x + 1)), p.Prime) := by ⊢ ∀ᶠ (x : ℕ) in atTop, (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime p
sorry All goals completed! 🐙end Oppermann