/- 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 < p44 #(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 = p4x 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 < p2x 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 < p3x 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 < p4x 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 < xx 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 < p2x 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 < p3x 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 < p4x 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 < xx 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 < xNat.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 < p2prev ^ 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 < p2x < 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 < p3prev ^ 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 < p3x < 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 < p4prev ^ 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 < p4x < 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 < xprev ^ 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 < xx < 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 pp 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 pn ^ 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