/- 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 namespace Mersenne namespace Nat

A Wagstaff prime is a prime number of the form $(2^p+1)/3$.

def GivesWagstaffPrime (p : ) : Prop := Odd p Nat.Prime ((2^p + 1) / 3)

Holds when there is exists a number k such that $p = 2^k \pm 1$ or $p = 4^k \pm 3$.

def IsSpecialForm (p : ) : Prop := k : , p = 2^k + 1 p = 2^k - 1 p = 4^k + 3 p = 4^k - 3 end Nat open Mersenne

The Catalan-Mersenne numbers, defined recursively by $c_0 = 2$ and $c_{n+1} = 2^{c_n} - 1$.

def catalanMersenne : | 0 => 2 | n + 1 => 2 ^ catalanMersenne n - 1

A natural number p satisfies the statement of the New Mersenne Conjecture if whenever two of the following conditions hold, then all three must hold:

    $2^p-1$ is prime

    $(2^p+1)/3$ is prime

    Exists a number k such that $p = 2^k \pm 1$ or $p = 4^k \pm 3$

def NewMersenneConjectureStatement (p : ) : Prop := ((mersenne p).Prime p.GivesWagstaffPrime p.IsSpecialForm) ((mersenne p).Prime p.IsSpecialForm p.GivesWagstaffPrime) (p.GivesWagstaffPrime p.IsSpecialForm (mersenne p).Prime)

For any odd natural number p if two of the following conditions hold, then all three must hold:

    $2^p-1$ is prime

    $(2^p+1)/3$ is prime

    Exists a number k such that $p = 2^k \pm 1$ or $p = 4^k \pm 3$

@[category research open, AMS 11] theorem declaration uses 'sorry'new_mersenne_conjecture (p : ) (hp : Odd p) : NewMersenneConjectureStatement p := p:hp:Odd pNewMersenneConjectureStatement p All goals completed! 🐙

It suffices to check this conjecture for primes

@[category textbook, AMS 11] theorem new_mersenne_conjecture_of_prime : ( p, p.Prime NewMersenneConjectureStatement p) p, Odd p NewMersenneConjectureStatement p := (∀ (p : ), Nat.Prime p NewMersenneConjectureStatement p) (p : ), Odd p NewMersenneConjectureStatement p intro H H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:Odd p NewMersenneConjectureStatement p H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd pNewMersenneConjectureStatement p H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:Nat.Prime pNewMersenneConjectureStatement pH: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pNewMersenneConjectureStatement p H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:Nat.Prime pNewMersenneConjectureStatement p All goals completed! 🐙 suffices ¬Nat.GivesWagstaffPrime p H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pthis:¬Nat.GivesWagstaffPrime p := ?m.24NewMersenneConjectureStatement p H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pthis:¬Nat.GivesWagstaffPrime p := ?m.24hF1:¬Nat.Prime (mersenne p) := fun h => hp_prime (Nat.Prime.of_mersenne h)NewMersenneConjectureStatement p H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pthis:¬Nat.GivesWagstaffPrime p := ?m.24hF1:¬Nat.Prime (mersenne p) := fun h => hp_prime (Nat.Prime.of_mersenne h)Nat.Prime (mersenne p) Nat.GivesWagstaffPrime p Nat.IsSpecialForm pH: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pthis:¬Nat.GivesWagstaffPrime p := ?m.24hF1:¬Nat.Prime (mersenne p) := fun h => hp_prime (Nat.Prime.of_mersenne h)Nat.Prime (mersenne p) Nat.IsSpecialForm p Nat.GivesWagstaffPrime pH: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pthis:¬Nat.GivesWagstaffPrime p := ?m.24hF1:¬Nat.Prime (mersenne p) := fun h => hp_prime (Nat.Prime.of_mersenne h)Nat.GivesWagstaffPrime p Nat.IsSpecialForm p Nat.Prime (mersenne p) H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pthis:¬Nat.GivesWagstaffPrime p := ?m.24hF1:¬Nat.Prime (mersenne p) := fun h => hp_prime (Nat.Prime.of_mersenne h)Nat.Prime (mersenne p) Nat.GivesWagstaffPrime p Nat.IsSpecialForm pH: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pthis:¬Nat.GivesWagstaffPrime p := ?m.24hF1:¬Nat.Prime (mersenne p) := fun h => hp_prime (Nat.Prime.of_mersenne h)Nat.Prime (mersenne p) Nat.IsSpecialForm p Nat.GivesWagstaffPrime pH: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pthis:¬Nat.GivesWagstaffPrime p := ?m.24hF1:¬Nat.Prime (mersenne p) := fun h => hp_prime (Nat.Prime.of_mersenne h)Nat.GivesWagstaffPrime p Nat.IsSpecialForm p Nat.Prime (mersenne p) All goals completed! 🐙 H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)False H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:p = 1FalseH: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1False H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:p = 1False All goals completed! 🐙 H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFacFalse H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_dvd:q p := Nat.minFac_dvd pFalse H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_dvd:q p := Nat.minFac_dvd phq_ne2:q 2 := fun h => Nat.not_even_iff_odd.mpr hp_odd (even_iff_two_dvd.mpr (h hq_dvd))False H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_dvd:q p := Nat.minFac_dvd phq_ne2:q 2 := fun h => Nat.not_even_iff_odd.mpr hp_odd (even_iff_two_dvd.mpr (h hq_dvd))hq_odd:Odd q := Nat.Prime.odd_of_ne_two (Nat.minFac_prime hp1) hq_ne2False H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_ne2:q 2 := fun h => Nat.not_even_iff_odd.mpr hp_odd (even_iff_two_dvd.mpr (h hq_dvd))hq_odd:Odd q := Nat.Prime.odd_of_ne_two (Nat.minFac_prime hp1) hq_ne2s:hs:p = q * sFalse H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_ne2:q 2 := fun h => Nat.not_even_iff_odd.mpr hp_odd (even_iff_two_dvd.mpr (h hq_dvd))hq_odd:Odd q := Nat.Prime.odd_of_ne_two (Nat.minFac_prime hp1) hq_ne2s:hs:p = q * shs_odd:Odd s := (Nat.odd_mul.mp (hs hp_odd)).rightFalse have hpow_dvd : 2 ^ q + 1 2 ^ p + 1 := (∀ (p : ), Nat.Prime p NewMersenneConjectureStatement p) (p : ), Odd p NewMersenneConjectureStatement p All goals completed! 🐙 have h3q : 3 2 ^ q + 1 := (∀ (p : ), Nat.Prime p NewMersenneConjectureStatement p) (p : ), Odd p NewMersenneConjectureStatement p All goals completed! 🐙 H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_ne2:q 2 := fun h => Nat.not_even_iff_odd.mpr hp_odd (even_iff_two_dvd.mpr (h hq_dvd))hq_odd:Odd q := Nat.Prime.odd_of_ne_two (Nat.minFac_prime hp1) hq_ne2s:hs:p = q * shs_odd:Odd s := (Nat.odd_mul.mp (hs hp_odd)).righthpow_dvd:2 ^ q + 1 2 ^ p + 1 := new_mersenne_conjecture_of_prime._proof_5 p s hs hs_oddh3q:3 2 ^ q + 1 := new_mersenne_conjecture_of_prime._proof_6 p hq_oddh3p:3 2 ^ p + 1 := Dvd.dvd.trans h3q hpow_dvdFalse H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_ne2:q 2 := fun h => Nat.not_even_iff_odd.mpr hp_odd (even_iff_two_dvd.mpr (h hq_dvd))hq_odd:Odd q := Nat.Prime.odd_of_ne_two (Nat.minFac_prime hp1) hq_ne2s:hs:p = q * shs_odd:Odd s := (Nat.odd_mul.mp (hs hp_odd)).righth3q:3 2 ^ q + 1 := new_mersenne_conjecture_of_prime._proof_6 p hq_oddh3p:3 2 ^ p + 1 := Dvd.dvd.trans h3q hpow_dvdk:hk:2 ^ p + 1 = (2 ^ q + 1) * kFalse H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_ne2:q 2 := fun h => Nat.not_even_iff_odd.mpr hp_odd (even_iff_two_dvd.mpr (h hq_dvd))hq_odd:Odd q := Nat.Prime.odd_of_ne_two (Nat.minFac_prime hp1) hq_ne2s:hs:p = q * shs_odd:Odd s := (Nat.odd_mul.mp (hs hp_odd)).righth3q:3 2 ^ q + 1 := new_mersenne_conjecture_of_prime._proof_6 p hq_oddh3p:3 2 ^ p + 1 := Dvd.dvd.trans h3q hpow_dvdk:hk:2 ^ p + 1 = (2 ^ q + 1) * kd: := (2 ^ q + 1) / 3hd:d = (2 ^ q + 1) / 3 := rflFalse have hd_dvd : d (2 ^ p + 1) / 3 := (∀ (p : ), Nat.Prime p NewMersenneConjectureStatement p) (p : ), Odd p NewMersenneConjectureStatement p H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_ne2:q 2 := fun h => Nat.not_even_iff_odd.mpr hp_odd (even_iff_two_dvd.mpr (h hq_dvd))hq_odd:Odd q := Nat.Prime.odd_of_ne_two (Nat.minFac_prime hp1) hq_ne2s:hs:p = q * shs_odd:Odd s := (Nat.odd_mul.mp (hs hp_odd)).righth3q:3 2 ^ q + 1 := new_mersenne_conjecture_of_prime._proof_6 p hq_oddh3p:3 2 ^ p + 1 := Dvd.dvd.trans h3q hpow_dvdk:hk:2 ^ p + 1 = (2 ^ q + 1) * kd: := (2 ^ q + 1) / 3hd:d = (2 ^ q + 1) / 3 := rfl(2 ^ p + 1) / 3 = d * k All goals completed! 🐙 have h8 : 8 2 ^ q := (∀ (p : ), Nat.Prime p NewMersenneConjectureStatement p) (p : ), Odd p NewMersenneConjectureStatement p calc 8 = 2 ^ 3 := H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_ne2:q 2 := fun h => Nat.not_even_iff_odd.mpr hp_odd (even_iff_two_dvd.mpr (h _fvar.12184))hq_odd:Odd q := Nat.Prime.odd_of_ne_two (Nat.minFac_prime hp1) hq_ne2s:hs:p = q * shs_odd:Odd s := (Nat.odd_mul.mp (hs hp_odd)).righth3q:3 2 ^ q + 1 := new_mersenne_conjecture_of_prime._proof_6 p hq_oddh3p:3 2 ^ p + 1 := Dvd.dvd.trans h3q _fvar.14979k:hk:2 ^ p + 1 = (2 ^ q + 1) * kd: := (2 ^ q + 1) / 3hd:d = (2 ^ q + 1) / 3 := rflhd_dvd:d (2 ^ p + 1) / 3 := Exists.intro k (new_mersenne_conjecture_of_prime._proof_7 p h3q k hk)8 = 2 ^ 3 All goals completed! 🐙 _ 2 ^ q := Nat.pow_le_pow_right (H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_ne2:q 2 := fun h => Nat.not_even_iff_odd.mpr hp_odd (even_iff_two_dvd.mpr (h _fvar.12184))hq_odd:Odd q := Nat.Prime.odd_of_ne_two (Nat.minFac_prime hp1) hq_ne2s:hs:p = q * shs_odd:Odd s := (Nat.odd_mul.mp (hs hp_odd)).righth3q:3 2 ^ q + 1 := new_mersenne_conjecture_of_prime._proof_6 p hq_oddh3p:3 2 ^ p + 1 := Dvd.dvd.trans h3q _fvar.14979k:hk:2 ^ p + 1 = (2 ^ q + 1) * kd: := (2 ^ q + 1) / 3hd:d = (2 ^ q + 1) / 3 := rflhd_dvd:d (2 ^ p + 1) / 3 := Exists.intro k (new_mersenne_conjecture_of_prime._proof_7 p h3q k hk)2 > 0 All goals completed! 🐙) (H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_ne2:q 2 := fun h => Nat.not_even_iff_odd.mpr hp_odd (even_iff_two_dvd.mpr (h _fvar.12184))hq_odd:Odd q := Nat.Prime.odd_of_ne_two (Nat.minFac_prime hp1) hq_ne2s:hs:p = q * shs_odd:Odd s := (Nat.odd_mul.mp (hs hp_odd)).righth3q:3 2 ^ q + 1 := new_mersenne_conjecture_of_prime._proof_6 p hq_oddh3p:3 2 ^ p + 1 := Dvd.dvd.trans h3q _fvar.14979k:hk:2 ^ p + 1 = (2 ^ q + 1) * kd: := (2 ^ q + 1) / 3hd:d = (2 ^ q + 1) / 3 := rflhd_dvd:d (2 ^ p + 1) / 3 := Exists.intro k (new_mersenne_conjecture_of_prime._proof_7 p h3q k hk)3 q All goals completed! 🐙) have hd_lt : d < (2 ^ p + 1) / 3 := (∀ (p : ), Nat.Prime p NewMersenneConjectureStatement p) (p : ), Odd p NewMersenneConjectureStatement p have hpow : 2 ^ q < 2 ^ p := (∀ (p : ), Nat.Prime p NewMersenneConjectureStatement p) (p : ), Odd p NewMersenneConjectureStatement p H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_ne2:q 2 := fun h => Nat.not_even_iff_odd.mpr hp_odd (even_iff_two_dvd.mpr (h hq_dvd))hq_odd:Odd q := Nat.Prime.odd_of_ne_two (Nat.minFac_prime hp1) hq_ne2s:hs:p = q * shs_odd:Odd s := (Nat.odd_mul.mp (hs hp_odd)).righth3q:3 2 ^ q + 1 := new_mersenne_conjecture_of_prime._proof_6 p hq_oddh3p:3 2 ^ p + 1 := Dvd.dvd.trans h3q hpow_dvdk:hk:2 ^ p + 1 = (2 ^ q + 1) * kd: := (2 ^ q + 1) / 3hd:d = (2 ^ q + 1) / 3 := rflhd_dvd:d (2 ^ p + 1) / 3 := Exists.intro k (new_mersenne_conjecture_of_prime._proof_7 p h3q k hk)h8:8 2 ^ q := Trans.trans (Mathlib.Meta.NormNum.isNat_eq_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8)) (Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Mathlib.Meta.NormNum.IsNatPowT.run Mathlib.Meta.NormNum.IsNatPowT.bit1))) (Nat.pow_le_pow_right (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false)) (new_mersenne_conjecture_of_prime._proof_8 p hp1 hq_ne2))1 < 2H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_ne2:q 2 := fun h => Nat.not_even_iff_odd.mpr hp_odd (even_iff_two_dvd.mpr (h hq_dvd))hq_odd:Odd q := Nat.Prime.odd_of_ne_two (Nat.minFac_prime hp1) hq_ne2s:hs:p = q * shs_odd:Odd s := (Nat.odd_mul.mp (hs hp_odd)).righth3q:3 2 ^ q + 1 := new_mersenne_conjecture_of_prime._proof_6 p hq_oddh3p:3 2 ^ p + 1 := Dvd.dvd.trans h3q hpow_dvdk:hk:2 ^ p + 1 = (2 ^ q + 1) * kd: := (2 ^ q + 1) / 3hd:d = (2 ^ q + 1) / 3 := rflhd_dvd:d (2 ^ p + 1) / 3 := Exists.intro k (new_mersenne_conjecture_of_prime._proof_7 p h3q k hk)h8:8 2 ^ q := Trans.trans (Mathlib.Meta.NormNum.isNat_eq_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8)) (Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Mathlib.Meta.NormNum.IsNatPowT.run Mathlib.Meta.NormNum.IsNatPowT.bit1))) (Nat.pow_le_pow_right (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false)) (new_mersenne_conjecture_of_prime._proof_8 p hp1 hq_ne2))q < p H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_ne2:q 2 := fun h => Nat.not_even_iff_odd.mpr hp_odd (even_iff_two_dvd.mpr (h hq_dvd))hq_odd:Odd q := Nat.Prime.odd_of_ne_two (Nat.minFac_prime hp1) hq_ne2s:hs:p = q * shs_odd:Odd s := (Nat.odd_mul.mp (hs hp_odd)).righth3q:3 2 ^ q + 1 := new_mersenne_conjecture_of_prime._proof_6 p hq_oddh3p:3 2 ^ p + 1 := Dvd.dvd.trans h3q hpow_dvdk:hk:2 ^ p + 1 = (2 ^ q + 1) * kd: := (2 ^ q + 1) / 3hd:d = (2 ^ q + 1) / 3 := rflhd_dvd:d (2 ^ p + 1) / 3 := Exists.intro k (new_mersenne_conjecture_of_prime._proof_7 p h3q k hk)h8:8 2 ^ q := Trans.trans (Mathlib.Meta.NormNum.isNat_eq_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8)) (Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Mathlib.Meta.NormNum.IsNatPowT.run Mathlib.Meta.NormNum.IsNatPowT.bit1))) (Nat.pow_le_pow_right (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false)) (new_mersenne_conjecture_of_prime._proof_8 p hp1 hq_ne2))1 < 2H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_ne2:q 2 := fun h => Nat.not_even_iff_odd.mpr hp_odd (even_iff_two_dvd.mpr (h hq_dvd))hq_odd:Odd q := Nat.Prime.odd_of_ne_two (Nat.minFac_prime hp1) hq_ne2s:hs:p = q * shs_odd:Odd s := (Nat.odd_mul.mp (hs hp_odd)).righth3q:3 2 ^ q + 1 := new_mersenne_conjecture_of_prime._proof_6 p hq_oddh3p:3 2 ^ p + 1 := Dvd.dvd.trans h3q hpow_dvdk:hk:2 ^ p + 1 = (2 ^ q + 1) * kd: := (2 ^ q + 1) / 3hd:d = (2 ^ q + 1) / 3 := rflhd_dvd:d (2 ^ p + 1) / 3 := Exists.intro k (new_mersenne_conjecture_of_prime._proof_7 p h3q k hk)h8:8 2 ^ q := Trans.trans (Mathlib.Meta.NormNum.isNat_eq_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8)) (Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Mathlib.Meta.NormNum.IsNatPowT.run Mathlib.Meta.NormNum.IsNatPowT.bit1))) (Nat.pow_le_pow_right (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false)) (new_mersenne_conjecture_of_prime._proof_8 p hp1 hq_ne2))q < p All goals completed! 🐙 All goals completed! 🐙 H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_ne2:q 2 := fun h => Nat.not_even_iff_odd.mpr hp_odd (even_iff_two_dvd.mpr (h hq_dvd))hq_odd:Odd q := Nat.Prime.odd_of_ne_two (Nat.minFac_prime hp1) hq_ne2s:hs:p = q * shs_odd:Odd s := (Nat.odd_mul.mp (hs hp_odd)).righth3q:3 2 ^ q + 1 := new_mersenne_conjecture_of_prime._proof_6 p hq_oddh3p:3 2 ^ p + 1 := Dvd.dvd.trans h3q hpow_dvdk:hk:2 ^ p + 1 = (2 ^ q + 1) * kd: := (2 ^ q + 1) / 3hd:d = (2 ^ q + 1) / 3 := rflhd_dvd:d (2 ^ p + 1) / 3 := Exists.intro k (new_mersenne_conjecture_of_prime._proof_7 p h3q k hk)h8:8 2 ^ q := Trans.trans (Mathlib.Meta.NormNum.isNat_eq_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8)) (Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Mathlib.Meta.NormNum.IsNatPowT.run Mathlib.Meta.NormNum.IsNatPowT.bit1))) (Nat.pow_le_pow_right (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false)) (new_mersenne_conjecture_of_prime._proof_8 p hp1 hq_ne2))hd_lt:d < (2 ^ p + 1) / 3 := have hpow := Nat.pow_lt_pow_right new_mersenne_conjecture_of_prime._proof_9 (new_mersenne_conjecture_of_prime._proof_10 p hp_odd hp_prime hp1); new_mersenne_conjecture_of_prime._proof_11 p h3p hpowh:d = 1FalseH: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_ne2:q 2 := fun h => Nat.not_even_iff_odd.mpr hp_odd (even_iff_two_dvd.mpr (h hq_dvd))hq_odd:Odd q := Nat.Prime.odd_of_ne_two (Nat.minFac_prime hp1) hq_ne2s:hs:p = q * shs_odd:Odd s := (Nat.odd_mul.mp (hs hp_odd)).righth3q:3 2 ^ q + 1 := new_mersenne_conjecture_of_prime._proof_6 p hq_oddh3p:3 2 ^ p + 1 := Dvd.dvd.trans h3q hpow_dvdk:hk:2 ^ p + 1 = (2 ^ q + 1) * kd: := (2 ^ q + 1) / 3hd:d = (2 ^ q + 1) / 3 := rflhd_dvd:d (2 ^ p + 1) / 3 := Exists.intro k (new_mersenne_conjecture_of_prime._proof_7 p h3q k hk)h8:8 2 ^ q := Trans.trans (Mathlib.Meta.NormNum.isNat_eq_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8)) (Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Mathlib.Meta.NormNum.IsNatPowT.run Mathlib.Meta.NormNum.IsNatPowT.bit1))) (Nat.pow_le_pow_right (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false)) (new_mersenne_conjecture_of_prime._proof_8 p hp1 hq_ne2))hd_lt:d < (2 ^ p + 1) / 3 := have hpow := Nat.pow_lt_pow_right new_mersenne_conjecture_of_prime._proof_9 (new_mersenne_conjecture_of_prime._proof_10 p hp_odd hp_prime hp1); new_mersenne_conjecture_of_prime._proof_11 p h3p hpowh:d = (2 ^ p + 1) / 3False H: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_ne2:q 2 := fun h => Nat.not_even_iff_odd.mpr hp_odd (even_iff_two_dvd.mpr (h hq_dvd))hq_odd:Odd q := Nat.Prime.odd_of_ne_two (Nat.minFac_prime hp1) hq_ne2s:hs:p = q * shs_odd:Odd s := (Nat.odd_mul.mp (hs hp_odd)).righth3q:3 2 ^ q + 1 := new_mersenne_conjecture_of_prime._proof_6 p hq_oddh3p:3 2 ^ p + 1 := Dvd.dvd.trans h3q hpow_dvdk:hk:2 ^ p + 1 = (2 ^ q + 1) * kd: := (2 ^ q + 1) / 3hd:d = (2 ^ q + 1) / 3 := rflhd_dvd:d (2 ^ p + 1) / 3 := Exists.intro k (new_mersenne_conjecture_of_prime._proof_7 p h3q k hk)h8:8 2 ^ q := Trans.trans (Mathlib.Meta.NormNum.isNat_eq_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8)) (Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Mathlib.Meta.NormNum.IsNatPowT.run Mathlib.Meta.NormNum.IsNatPowT.bit1))) (Nat.pow_le_pow_right (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false)) (new_mersenne_conjecture_of_prime._proof_8 p hp1 hq_ne2))hd_lt:d < (2 ^ p + 1) / 3 := have hpow := Nat.pow_lt_pow_right new_mersenne_conjecture_of_prime._proof_9 (new_mersenne_conjecture_of_prime._proof_10 p hp_odd hp_prime hp1); new_mersenne_conjecture_of_prime._proof_11 p h3p hpowh:d = 1FalseH: (p : ), Nat.Prime p NewMersenneConjectureStatement pp:hp_odd:Odd php_prime:¬Nat.Prime pleft✝:Odd phP:Nat.Prime ((2 ^ p + 1) / 3)hp1:¬p = 1q: := p.minFachq_ne2:q 2 := fun h => Nat.not_even_iff_odd.mpr hp_odd (even_iff_two_dvd.mpr (h hq_dvd))hq_odd:Odd q := Nat.Prime.odd_of_ne_two (Nat.minFac_prime hp1) hq_ne2s:hs:p = q * shs_odd:Odd s := (Nat.odd_mul.mp (hs hp_odd)).righth3q:3 2 ^ q + 1 := new_mersenne_conjecture_of_prime._proof_6 p hq_oddh3p:3 2 ^ p + 1 := Dvd.dvd.trans h3q hpow_dvdk:hk:2 ^ p + 1 = (2 ^ q + 1) * kd: := (2 ^ q + 1) / 3hd:d = (2 ^ q + 1) / 3 := rflhd_dvd:d (2 ^ p + 1) / 3 := Exists.intro k (new_mersenne_conjecture_of_prime._proof_7 p h3q k hk)h8:8 2 ^ q := Trans.trans (Mathlib.Meta.NormNum.isNat_eq_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 8)) (Mathlib.Meta.NormNum.isNat_pow (Eq.refl HPow.hPow) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 3)) (Mathlib.Meta.NormNum.IsNatPowT.run Mathlib.Meta.NormNum.IsNatPowT.bit1))) (Nat.pow_le_pow_right (Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 0)) (Mathlib.Meta.NormNum.isNat_ofNat (Eq.refl 2)) (Eq.refl false)) (new_mersenne_conjecture_of_prime._proof_8 p hp1 hq_ne2))hd_lt:d < (2 ^ p + 1) / 3 := have hpow := Nat.pow_lt_pow_right new_mersenne_conjecture_of_prime._proof_9 (new_mersenne_conjecture_of_prime._proof_10 p hp_odd hp_prime hp1); new_mersenne_conjecture_of_prime._proof_11 p h3p hpowh:d = (2 ^ p + 1) / 3False All goals completed! 🐙

The New Mersenne Conjecture statement holds for odd primes.

@[category research open, AMS 11] theorem declaration uses 'sorry'new_mersenne_conjecture.variants.prime (p : ) (hp : p.Prime) (h : Odd p) : NewMersenneConjectureStatement p := p:hp:Nat.Prime ph:Odd pNewMersenneConjectureStatement p All goals completed! 🐙

Are there infinitely many Mersenne primes?

@[category research open, AMS 11] theorem declaration uses 'sorry'infinitely_many_mersenne_primes : answer(sorry) Set.Infinite { p : | (mersenne p).Prime } := True {p | Nat.Prime (mersenne p)}.Infinite All goals completed! 🐙

The first five Catalan-Mersenne numbers $c_0, \ldots, c_4$ are known to be prime. Catalan conjectured that they are prime "up to a certain limit". Are all Catalan-Mersenne numbers $c_n$ with $n \geq 5$ prime?

@[category research open, AMS 11] theorem declaration uses 'sorry'catalans_mersenne_conjecture : answer(sorry) n 5, Nat.Prime (catalanMersenne n) := True n 5, Nat.Prime (catalanMersenne n) All goals completed! 🐙 end Mersenne