/- 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 FormalConjecturesUtil open Finset Filternamespace Oppermann

For 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))) 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} = 4n:ℕ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)) 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 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 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)) 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)) 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)) 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))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))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))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)) 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))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))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))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 ⟨?_, ?_⟩, 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 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 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 < xn:ℕ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 ^ 2n:ℕ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 < xn:ℕ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 ^ 2n:ℕ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 < xn:ℕ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 ^ 2n:ℕ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 < xn:ℕ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 All goals completed! 🐙

Oppermann's conjecture implies Legendre'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 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 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) 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) := ⊢ ∀ᶠ (x : ℕ) in atTop, (∃ p ∈ Ioo (x * (x - 1)) (x ^ 2), Nat.Prime p) ∧ ∃ p ∈ Ioo (x ^ 2) (x * (x + 1)), Nat.Prime p All goals completed! 🐙end Oppermann