/-
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 Erdos913
Are there infinitely many $n$ such that if $$ n(n + 1) = \prod_i p_i^{k_i} $$ is the factorisation into distinct primes then all exponents $k_i$ are distinct?
@[category research open, AMS 11]
theorem erdos_913 : answer(sorry) ↔
{ n | Set.InjOn (n * (n + 1)).factorization (n * (n + 1)).primeFactors }.Infinite := ⊢ True ↔ {n | Set.InjOn ⇑(n * (n + 1)).factorization ↑(n * (n + 1)).primeFactors}.Infinite
All goals completed! 🐙
It is likely that there are infinitely many primes $p$ such that $8p^2 - 1$ is also prime.
@[category research open, AMS 11]
theorem erdos_913.variants.infinite_many_8p_sq_add_one_primes :
{ p | p.Prime ∧ (8 * p ^ 2 - 1).Prime }.Infinite := ⊢ {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}.Infinite
All goals completed! 🐙If there are infinitely many primes $p$ such that $8p^2 - 1$ is prime, then this is true.
@[category research solved, AMS 11]
theorem erdos_913.variants.conditional (h : { p | p.Prime ∧ (8 * p ^ 2 - 1).Prime }.Infinite) :
{ n | Set.InjOn (n * (n + 1)).factorization (n * (n + 1)).primeFactors }.Infinite := h:{p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}.Infinite⊢ {n | Set.InjOn ⇑(n * (n + 1)).factorization ↑(n * (n + 1)).primeFactors}.Infinite
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h:S.Infinite⊢ {n | Set.InjOn ⇑(n * (n + 1)).factorization ↑(n * (n + 1)).primeFactors}.Infinite
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h:S.Infinitef:ℕ → ℕ := fun p => 8 * p ^ 2 - 1⊢ {n | Set.InjOn ⇑(n * (n + 1)).factorization ↑(n * (n + 1)).primeFactors}.Infinite
have hS : ∀ p, p.Prime → 1 < 8 * p ^ 2 := h:{p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}.Infinite⊢ {n | Set.InjOn ⇑(n * (n + 1)).factorization ↑(n * (n + 1)).primeFactors}.Infinite
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h:S.Infinitef:ℕ → ℕ := fun p => 8 * p ^ 2 - 1p:ℕhp:Nat.Prime p⊢ 1 < 8 * p ^ 2
All goals completed! 🐙
have : S.InjOn f := h:{p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}.Infinite⊢ {n | Set.InjOn ⇑(n * (n + 1)).factorization ↑(n * (n + 1)).primeFactors}.Infinite
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h:S.Infinitef:ℕ → ℕ := fun p => 8 * p ^ 2 - 1hS:∀ (p : ℕ), Nat.Prime p → 1 < 8 * p ^ 2 :=
fun p hp =>
lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 31))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 31))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 32))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 32)))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 16)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 16))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 32)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 32 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 32))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 32))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Eq.refl 2)))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1))))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 8)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)) (Eq.refl false)))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 (8 * p ^ 2) 1)
(congr
(congrArg LE.le (Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))
Nat.cast_one))
a))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(mul_nonneg_of_nonpos_of_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le (Mathlib.Tactic.Linarith.natCast_nonneg ℤ p))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)) (Eq.refl false)))))⊢ ∀ ⦃x₁ : ℕ⦄, x₁ ∈ S → ∀ ⦃x₂ : ℕ⦄, x₂ ∈ S → 8 * x₁ ^ 2 - 1 = 8 * x₂ ^ 2 - 1 → x₁ = x₂
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h✝:S.Infinitef:ℕ → ℕ := fun p => 8 * p ^ 2 - 1hS:∀ (p : ℕ), Nat.Prime p → 1 < 8 * p ^ 2 :=
fun p hp =>
lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 31))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 31))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 32))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 32)))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 16)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 16))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 32)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 32 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 32))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 32))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Eq.refl 2)))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1))))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 8)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)) (Eq.refl false)))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 (8 * p ^ 2) 1)
(congr
(congrArg LE.le (Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))
Nat.cast_one))
a))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(mul_nonneg_of_nonpos_of_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le (Mathlib.Tactic.Linarith.natCast_nonneg ℤ p))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)) (Eq.refl false)))))a:ℕha:a ∈ Sb:ℕhb:b ∈ Sh:8 * a ^ 2 - 1 = 8 * b ^ 2 - 1⊢ a = b
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h✝:S.Infinitef:ℕ → ℕ := fun p => 8 * p ^ 2 - 1hS:∀ (p : ℕ), Nat.Prime p → 1 < 8 * p ^ 2 :=
fun p hp =>
lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 31))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 31))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 32))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 32)))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 16)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 16))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 32)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 32 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 32))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 32))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Eq.refl 2)))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1))))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 8)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)) (Eq.refl false)))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 (8 * p ^ 2) 1)
(congr
(congrArg LE.le (Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))
Nat.cast_one))
a))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(mul_nonneg_of_nonpos_of_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le (Mathlib.Tactic.Linarith.natCast_nonneg ℤ p))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)) (Eq.refl false)))))a:ℕha:a ∈ Sb:ℕhb:b ∈ Sh:8 * a ^ 2 = 8 * b ^ 2⊢ a = b
All goals completed! 🐙
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h:S.Infinitef:ℕ → ℕ := fun p => 8 * p ^ 2 - 1hS:∀ (p : ℕ), Nat.Prime p → 1 < 8 * p ^ 2 :=
fun p hp =>
lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 31))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 31))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 32))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 32)))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 16)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 16))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 32)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 32 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 32))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 32))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Eq.refl 2)))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1))))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 8)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)) (Eq.refl false)))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 (8 * p ^ 2) 1)
(congr
(congrArg LE.le (Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))
Nat.cast_one))
a))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(mul_nonneg_of_nonpos_of_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le (Mathlib.Tactic.Linarith.natCast_nonneg ℤ p))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)) (Eq.refl false)))))this:Set.InjOn f S :=
id fun ⦃a⦄ ha ⦃b⦄ hb h =>
Eq.mp
(Eq.trans mul_eq_mul_left_iff._simp_1
(Eq.trans
(congr
(congrArg Or
(pow_left_inj₀._simp_1 (of_eq_true (one_le._simp_2 a)) (of_eq_true (one_le._simp_2 b))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true))))
(OfNat.ofNat_ne_zero._simp_1 8))
(or_false (a = b))))
(Eq.mp (congrArg (fun _a => _a) (propext (tsub_left_inj (LT.lt.le (hS a ha.left)) (LT.lt.le (hS b hb.left))))) h)⊢ f '' (S \ {2}) ⊆ {n | Set.InjOn ⇑(n * (n + 1)).factorization ↑(n * (n + 1)).primeFactors}
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h:S.Infinitef:ℕ → ℕ := fun p => 8 * p ^ 2 - 1hS:∀ (p : ℕ), Nat.Prime p → 1 < 8 * p ^ 2 :=
fun p hp =>
lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 31))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 31))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 32))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 32)))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 16)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 16))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 32)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 32 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 32))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 32))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Eq.refl 2)))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1))))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 8)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)) (Eq.refl false)))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 (8 * p ^ 2) 1)
(congr
(congrArg LE.le (Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))
Nat.cast_one))
a))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(mul_nonneg_of_nonpos_of_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le (Mathlib.Tactic.Linarith.natCast_nonneg ℤ p))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)) (Eq.refl false)))))this:Set.InjOn f S :=
id fun ⦃a⦄ ha ⦃b⦄ hb h =>
Eq.mp
(Eq.trans mul_eq_mul_left_iff._simp_1
(Eq.trans
(congr
(congrArg Or
(pow_left_inj₀._simp_1 (of_eq_true (one_le._simp_2 a)) (of_eq_true (one_le._simp_2 b))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true))))
(OfNat.ofNat_ne_zero._simp_1 8))
(or_false (a = b))))
(Eq.mp (congrArg (fun _a => _a) (propext (tsub_left_inj (LT.lt.le (hS a ha.left)) (LT.lt.le (hS b hb.left))))) h)⊢ {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)} \ {2} ⊆
{a | Set.InjOn ⇑(f a * (f a + 1)).factorization ↑(f a * (f a + 1)).primeFactors}
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h:S.Infinitef:ℕ → ℕ := fun p => 8 * p ^ 2 - 1hS:∀ (p : ℕ), Nat.Prime p → 1 < 8 * p ^ 2 :=
fun p hp =>
lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 31))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 31))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 32))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 32)))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 16)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 16))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 32)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 32 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 32))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 32))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Eq.refl 2)))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1))))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 8)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)) (Eq.refl false)))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 (8 * p ^ 2) 1)
(congr
(congrArg LE.le (Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))
Nat.cast_one))
a))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(mul_nonneg_of_nonpos_of_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le (Mathlib.Tactic.Linarith.natCast_nonneg ℤ p))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)) (Eq.refl false)))))this:Set.InjOn f S :=
id fun ⦃a⦄ ha ⦃b⦄ hb h =>
Eq.mp
(Eq.trans mul_eq_mul_left_iff._simp_1
(Eq.trans
(congr
(congrArg Or
(pow_left_inj₀._simp_1 (of_eq_true (one_le._simp_2 a)) (of_eq_true (one_le._simp_2 b))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true))))
(OfNat.ofNat_ne_zero._simp_1 8))
(or_false (a = b))))
(Eq.mp (congrArg (fun _a => _a) (propext (tsub_left_inj (LT.lt.le (hS a ha.left)) (LT.lt.le (hS b hb.left))))) h)p:ℕhp'':p ∉ {2}hp:Nat.Prime php':Nat.Prime (8 * p ^ 2 - 1)⊢ p ∈ {a | Set.InjOn ⇑(f a * (f a + 1)).factorization ↑(f a * (f a + 1)).primeFactors}
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h:S.Infinitef:ℕ → ℕ := fun p => 8 * p ^ 2 - 1hS:∀ (p : ℕ), Nat.Prime p → 1 < 8 * p ^ 2 :=
fun p hp =>
lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 31))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 31))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 32))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 32)))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 16)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 16))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 32)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 32 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 32))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 32))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Eq.refl 2)))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1))))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 8)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)) (Eq.refl false)))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 (8 * p ^ 2) 1)
(congr
(congrArg LE.le (Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))
Nat.cast_one))
a))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(mul_nonneg_of_nonpos_of_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le (Mathlib.Tactic.Linarith.natCast_nonneg ℤ p))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)) (Eq.refl false)))))this:Set.InjOn f S :=
id fun ⦃a⦄ ha ⦃b⦄ hb h =>
Eq.mp
(Eq.trans mul_eq_mul_left_iff._simp_1
(Eq.trans
(congr
(congrArg Or
(pow_left_inj₀._simp_1 (of_eq_true (one_le._simp_2 a)) (of_eq_true (one_le._simp_2 b))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true))))
(OfNat.ofNat_ne_zero._simp_1 8))
(or_false (a = b))))
(Eq.mp (congrArg (fun _a => _a) (propext (tsub_left_inj (LT.lt.le (hS a ha.left)) (LT.lt.le (hS b hb.left))))) h)p:ℕhp:Nat.Prime php':Nat.Prime (8 * p ^ 2 - 1)hp'':¬p = 2⊢ p ∈ {a | Set.InjOn ⇑(f a * (f a + 1)).factorization ↑(f a * (f a + 1)).primeFactors}
have fac : (f p * (f p + 1)).factorization =
Finsupp.single (8 * p ^ 2 - 1) 1 + (Finsupp.single p 2 + Finsupp.single 2 3) := h:{p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}.Infinite⊢ {n | Set.InjOn ⇑(n * (n + 1)).factorization ↑(n * (n + 1)).primeFactors}.Infinite
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h:S.Infinitef:ℕ → ℕ := fun p => 8 * p ^ 2 - 1hS:∀ (p : ℕ), Nat.Prime p → 1 < 8 * p ^ 2 :=
fun p hp =>
lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 31))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 31))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 32))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 32)))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 16)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 16))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 32)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 32 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 32))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 32))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Eq.refl 2)))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1))))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 8)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)) (Eq.refl false)))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 (8 * p ^ 2) 1)
(congr
(congrArg LE.le (Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))
Nat.cast_one))
a))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(mul_nonneg_of_nonpos_of_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le (Mathlib.Tactic.Linarith.natCast_nonneg ℤ p))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)) (Eq.refl false)))))this:Set.InjOn f S :=
id fun ⦃a⦄ ha ⦃b⦄ hb h =>
Eq.mp
(Eq.trans mul_eq_mul_left_iff._simp_1
(Eq.trans
(congr
(congrArg Or
(pow_left_inj₀._simp_1 (of_eq_true (one_le._simp_2 a)) (of_eq_true (one_le._simp_2 b))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true))))
(OfNat.ofNat_ne_zero._simp_1 8))
(or_false (a = b))))
(Eq.mp (congrArg (fun _a => _a) (propext (tsub_left_inj (LT.lt.le (hS a ha.left)) (LT.lt.le (hS b hb.left))))) h)p:ℕhp:Nat.Prime php':Nat.Prime (8 * p ^ 2 - 1)hp'':¬p = 2⊢ ((8 * p ^ 2 - 1) * (8 * p ^ 2)).factorization = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3)
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h:S.Infinitef:ℕ → ℕ := fun p => 8 * p ^ 2 - 1hS:∀ (p : ℕ), Nat.Prime p → 1 < 8 * p ^ 2 :=
fun p hp =>
lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 31))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 31))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 32))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 32)))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 16)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 16))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 32)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 32 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 32))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 32))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Eq.refl 2)))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1))))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 8)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)) (Eq.refl false)))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 (8 * p ^ 2) 1)
(congr
(congrArg LE.le (Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))
Nat.cast_one))
a))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(mul_nonneg_of_nonpos_of_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le (Mathlib.Tactic.Linarith.natCast_nonneg ℤ p))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)) (Eq.refl false)))))this✝:Set.InjOn f S :=
id fun ⦃a⦄ ha ⦃b⦄ hb h =>
Eq.mp
(Eq.trans mul_eq_mul_left_iff._simp_1
(Eq.trans
(congr
(congrArg Or
(pow_left_inj₀._simp_1 (of_eq_true (one_le._simp_2 a)) (of_eq_true (one_le._simp_2 b))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true))))
(OfNat.ofNat_ne_zero._simp_1 8))
(or_false (a = b))))
(Eq.mp (congrArg (fun _a => _a) (propext (tsub_left_inj (LT.lt.le (hS a ha.left)) (LT.lt.le (hS b hb.left))))) h)p:ℕhp:Nat.Prime php':Nat.Prime (8 * p ^ 2 - 1)hp'':¬p = 2this:2 ≤ p := Nat.Prime.two_le hp⊢ ((8 * p ^ 2 - 1) * (8 * p ^ 2)).factorization = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3)
All goals completed! 🐙
have aux₂ : (fun₀ | 2 => 3).support = {2} := h:{p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}.Infinite⊢ {n | Set.InjOn ⇑(n * (n + 1)).factorization ↑(n * (n + 1)).primeFactors}.Infinite All goals completed! 🐙
have aux₁ : ((fun₀ | p => 2) + fun₀ | 2 => 3).support = {p, 2} := h:{p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}.Infinite⊢ {n | Set.InjOn ⇑(n * (n + 1)).factorization ↑(n * (n + 1)).primeFactors}.Infinite
All goals completed! 🐙
have aux₃ : p + 1 < 8 * p ^ 2 := h:{p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}.Infinite⊢ {n | Set.InjOn ⇑(n * (n + 1)).factorization ↑(n * (n + 1)).primeFactors}.Infinite
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h:S.Infinitef:ℕ → ℕ := fun p => 8 * p ^ 2 - 1hS:∀ (p : ℕ), Nat.Prime p → 1 < 8 * p ^ 2 :=
fun p hp =>
lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 31))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 31))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 32))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 32)))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 16)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 16))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 32)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 32 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 32))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 32))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Eq.refl 2)))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1))))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 8)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)) (Eq.refl false)))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 (8 * p ^ 2) 1)
(congr
(congrArg LE.le (Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))
Nat.cast_one))
a))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(mul_nonneg_of_nonpos_of_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le (Mathlib.Tactic.Linarith.natCast_nonneg ℤ p))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)) (Eq.refl false)))))this:Set.InjOn f S :=
id fun ⦃a⦄ ha ⦃b⦄ hb h =>
Eq.mp
(Eq.trans mul_eq_mul_left_iff._simp_1
(Eq.trans
(congr
(congrArg Or
(pow_left_inj₀._simp_1 (of_eq_true (one_le._simp_2 a)) (of_eq_true (one_le._simp_2 b))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true))))
(OfNat.ofNat_ne_zero._simp_1 8))
(or_false (a = b))))
(Eq.mp (congrArg (fun _a => _a) (propext (tsub_left_inj (LT.lt.le (hS a ha.left)) (LT.lt.le (hS b hb.left))))) h)p:ℕhp':Nat.Prime (8 * p ^ 2 - 1)hp'':¬p = 2fac:(f p * (f p + 1)).factorization = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3) :=
Eq.mpr
(id
(congrArg
(fun x => ((8 * p ^ 2 - 1) * x).factorization = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.sub_add_cancel (LT.lt.le (hS p _fvar.19726)))))
(have this := Nat.Prime.two_le _fvar.19726;
Eq.mpr
(id
(congrArg (fun _a => _a = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.factorization_mul (Nat.Prime.ne_zero hp')
(ne_of_gt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8)))
(pow_pos
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
this)
2))))))
(Eq.mpr
(id
(congrArg
(fun _a =>
(8 * p ^ 2 - 1).factorization + _a = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.factorization_mul
(ne_of_gt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8))))
(ne_of_gt
(pow_pos
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
this)
2)))))
(Eq.mpr
(id
(congrArg
(fun _a =>
_a + (Nat.factorization 8 + (p ^ 2).factorization) =
(fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization hp')))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 8 * p ^ 2 - 1 => 1) + (Nat.factorization 8 + _a) =
(fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization_pow _fvar.19726)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | _a * p ^ 2 - 1 => 1) + (_a.factorization + fun₀ | p => 2) =
(fun₀ | _a * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(have this := rfl;
this)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + (_a + fun₀ | p => 2) =
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization_pow Nat.prime_two)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + _a =
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(add_comm (fun₀ | 2 => 3) fun₀ | p => 2)))
(Eq.refl ((fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))))))))))aux₂:(fun₀ | 2 => 3).support = {2} :=
of_eq_true
(Eq.trans conditional._simp_3
(Eq.trans
(congr
(congrArg And
(Eq.trans (congrArg (fun x => x ≠ 0) Finsupp.single_eq_same)
(Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 3)) not_false_eq_true)))
(Eq.trans (congrArg (fun x => (fun₀ | 2 => 3) = fun₀ | 2 => x) Finsupp.single_eq_same) (eq_self fun₀ | 2 => 3)))
(and_self True)))aux₁:((fun₀ | p => 2) + fun₀ | 2 => 3).support = {p, 2} :=
Eq.mpr
(id
(congrArg (fun _a => _a = {p, 2})
(Finsupp.support_single_add
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => p ∈ x) aux₂) Finset.mem_singleton._simp_1) (eq_false hp'')))
not_false_eq_true))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true)))))
(Eq.mpr
(id
(congrArg (fun _a => _a = {p, 2})
(Finset.cons_eq_insert p (fun₀ | 2 => 3).support
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => p ∈ x) aux₂) Finset.mem_singleton._simp_1) (eq_false hp'')))
not_false_eq_true)))))
(Eq.mpr (id (congrArg (fun _a => insert p _a = {p, 2}) aux₂)) (Eq.refl {p, 2})))hp:2 ≤ p := Nat.Prime.two_le _fvar.19726⊢ p + 1 < 8 * p ^ 2
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h:S.Infinitef:ℕ → ℕ := fun p => 8 * p ^ 2 - 1hS:∀ (p : ℕ), Nat.Prime p → 1 < 8 * p ^ 2 :=
fun p hp =>
lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 31))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 31))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 32))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 32)))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 16)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 16))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 32)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 32 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 32))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 32))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Eq.refl 2)))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1))))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 8)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)) (Eq.refl false)))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 (8 * p ^ 2) 1)
(congr
(congrArg LE.le (Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))
Nat.cast_one))
a))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(mul_nonneg_of_nonpos_of_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le (Mathlib.Tactic.Linarith.natCast_nonneg ℤ p))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)) (Eq.refl false)))))this:Set.InjOn f S :=
id fun ⦃a⦄ ha ⦃b⦄ hb h =>
Eq.mp
(Eq.trans mul_eq_mul_left_iff._simp_1
(Eq.trans
(congr
(congrArg Or
(pow_left_inj₀._simp_1 (of_eq_true (one_le._simp_2 a)) (of_eq_true (one_le._simp_2 b))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true))))
(OfNat.ofNat_ne_zero._simp_1 8))
(or_false (a = b))))
(Eq.mp (congrArg (fun _a => _a) (propext (tsub_left_inj (LT.lt.le (hS a ha.left)) (LT.lt.le (hS b hb.left))))) h)p:ℕhp':Nat.Prime (8 * p ^ 2 - 1)hp'':¬p = 2fac:(f p * (f p + 1)).factorization = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3) :=
Eq.mpr
(id
(congrArg
(fun x => ((8 * p ^ 2 - 1) * x).factorization = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.sub_add_cancel (LT.lt.le (hS p _fvar.19726)))))
(have this := Nat.Prime.two_le _fvar.19726;
Eq.mpr
(id
(congrArg (fun _a => _a = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.factorization_mul (Nat.Prime.ne_zero hp')
(ne_of_gt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8)))
(pow_pos
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
this)
2))))))
(Eq.mpr
(id
(congrArg
(fun _a =>
(8 * p ^ 2 - 1).factorization + _a = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.factorization_mul
(ne_of_gt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8))))
(ne_of_gt
(pow_pos
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
this)
2)))))
(Eq.mpr
(id
(congrArg
(fun _a =>
_a + (Nat.factorization 8 + (p ^ 2).factorization) =
(fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization hp')))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 8 * p ^ 2 - 1 => 1) + (Nat.factorization 8 + _a) =
(fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization_pow _fvar.19726)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | _a * p ^ 2 - 1 => 1) + (_a.factorization + fun₀ | p => 2) =
(fun₀ | _a * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(have this := rfl;
this)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + (_a + fun₀ | p => 2) =
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization_pow Nat.prime_two)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + _a =
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(add_comm (fun₀ | 2 => 3) fun₀ | p => 2)))
(Eq.refl ((fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))))))))))aux₂:(fun₀ | 2 => 3).support = {2} :=
of_eq_true
(Eq.trans conditional._simp_3
(Eq.trans
(congr
(congrArg And
(Eq.trans (congrArg (fun x => x ≠ 0) Finsupp.single_eq_same)
(Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 3)) not_false_eq_true)))
(Eq.trans (congrArg (fun x => (fun₀ | 2 => 3) = fun₀ | 2 => x) Finsupp.single_eq_same) (eq_self fun₀ | 2 => 3)))
(and_self True)))aux₁:((fun₀ | p => 2) + fun₀ | 2 => 3).support = {p, 2} :=
Eq.mpr
(id
(congrArg (fun _a => _a = {p, 2})
(Finsupp.support_single_add
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => p ∈ x) aux₂) Finset.mem_singleton._simp_1) (eq_false hp'')))
not_false_eq_true))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true)))))
(Eq.mpr
(id
(congrArg (fun _a => _a = {p, 2})
(Finset.cons_eq_insert p (fun₀ | 2 => 3).support
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => p ∈ x) aux₂) Finset.mem_singleton._simp_1) (eq_false hp'')))
not_false_eq_true)))))
(Eq.mpr (id (congrArg (fun _a => insert p _a = {p, 2}) aux₂)) (Eq.refl {p, 2})))hp:2 ≤ ↑p⊢ ↑p + 1 < 8 * ↑p ^ 2
All goals completed! 🐙
have aux₄ : 8 * p ^ 2 - 1 ≠ p := h:{p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}.Infinite⊢ {n | Set.InjOn ⇑(n * (n + 1)).factorization ↑(n * (n + 1)).primeFactors}.Infinite
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h:S.Infinitef:ℕ → ℕ := fun p => 8 * p ^ 2 - 1hS:∀ (p : ℕ), Nat.Prime p → 1 < 8 * p ^ 2 :=
fun p hp =>
lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 31))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 31))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 32))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 32)))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 16)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 16))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 32)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 32 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 32))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 32))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Eq.refl 2)))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1))))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 8)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)) (Eq.refl false)))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 (8 * p ^ 2) 1)
(congr
(congrArg LE.le (Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))
Nat.cast_one))
a))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(mul_nonneg_of_nonpos_of_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le (Mathlib.Tactic.Linarith.natCast_nonneg ℤ p))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)) (Eq.refl false)))))this:Set.InjOn f S :=
id fun ⦃a⦄ ha ⦃b⦄ hb h =>
Eq.mp
(Eq.trans mul_eq_mul_left_iff._simp_1
(Eq.trans
(congr
(congrArg Or
(pow_left_inj₀._simp_1 (of_eq_true (one_le._simp_2 a)) (of_eq_true (one_le._simp_2 b))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true))))
(OfNat.ofNat_ne_zero._simp_1 8))
(or_false (a = b))))
(Eq.mp (congrArg (fun _a => _a) (propext (tsub_left_inj (LT.lt.le (hS a ha.left)) (LT.lt.le (hS b hb.left))))) h)p:ℕhp:Nat.Prime php':Nat.Prime (8 * p ^ 2 - 1)hp'':¬p = 2fac:(f p * (f p + 1)).factorization = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3) :=
Eq.mpr
(id
(congrArg
(fun x => ((8 * p ^ 2 - 1) * x).factorization = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.sub_add_cancel (LT.lt.le (hS p _fvar.19726)))))
(have this := Nat.Prime.two_le _fvar.19726;
Eq.mpr
(id
(congrArg (fun _a => _a = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.factorization_mul (Nat.Prime.ne_zero hp')
(ne_of_gt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8)))
(pow_pos
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
this)
2))))))
(Eq.mpr
(id
(congrArg
(fun _a =>
(8 * p ^ 2 - 1).factorization + _a = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.factorization_mul
(ne_of_gt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8))))
(ne_of_gt
(pow_pos
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
this)
2)))))
(Eq.mpr
(id
(congrArg
(fun _a =>
_a + (Nat.factorization 8 + (p ^ 2).factorization) =
(fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization hp')))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 8 * p ^ 2 - 1 => 1) + (Nat.factorization 8 + _a) =
(fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization_pow _fvar.19726)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | _a * p ^ 2 - 1 => 1) + (_a.factorization + fun₀ | p => 2) =
(fun₀ | _a * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(have this := rfl;
this)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + (_a + fun₀ | p => 2) =
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization_pow Nat.prime_two)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + _a =
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(add_comm (fun₀ | 2 => 3) fun₀ | p => 2)))
(Eq.refl ((fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))))))))))aux₂:(fun₀ | 2 => 3).support = {2} :=
of_eq_true
(Eq.trans conditional._simp_3
(Eq.trans
(congr
(congrArg And
(Eq.trans (congrArg (fun x => x ≠ 0) Finsupp.single_eq_same)
(Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 3)) not_false_eq_true)))
(Eq.trans (congrArg (fun x => (fun₀ | 2 => 3) = fun₀ | 2 => x) Finsupp.single_eq_same) (eq_self fun₀ | 2 => 3)))
(and_self True)))aux₁:((fun₀ | p => 2) + fun₀ | 2 => 3).support = {p, 2} :=
Eq.mpr
(id
(congrArg (fun _a => _a = {p, 2})
(Finsupp.support_single_add
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => p ∈ x) aux₂) Finset.mem_singleton._simp_1) (eq_false hp'')))
not_false_eq_true))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true)))))
(Eq.mpr
(id
(congrArg (fun _a => _a = {p, 2})
(Finset.cons_eq_insert p (fun₀ | 2 => 3).support
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => p ∈ x) aux₂) Finset.mem_singleton._simp_1) (eq_false hp'')))
not_false_eq_true)))))
(Eq.mpr (id (congrArg (fun _a => insert p _a = {p, 2}) aux₂)) (Eq.refl {p, 2})))aux₃:p + 1 < 8 * p ^ 2 :=
have hp := Nat.Prime.two_le hp;
Eq.mpr
(id
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (p + 1) (8 * p ^ 2))
(congr (congrArg LT.lt (Eq.trans (Nat.cast_add p 1) (congrArg (HAdd.hAdd ↑p) Nat.cast_one)))
(Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))))
(Mathlib.Tactic.LinearCombination.lt_of_le
(Mathlib.Tactic.LinearCombination.mul_const_le (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) hp)
(le_of_lt
(add_pos'
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8)))
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) hp)))
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 15))
(Eq.refl (Nat.ble 1 15))))))
(Mathlib.Tactic.LinearCombination.lt_rearrange
(Mathlib.Tactic.Ring.lt_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 15)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 15)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 15)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 15))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 15 + 0)))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Eq.refl 2)))
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 15)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 15) (Eq.refl 16))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 15)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 15)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 15)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 30)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 15))
(Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 30 + 0)))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 30)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 30)
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 30))
(Eq.refl (Int.negOfNat 30)))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.negOfNat 16))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Eq.refl (Int.negOfNat 8))))))
Mathlib.Tactic.Ring.neg_zero)))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 30)) (Eq.refl (Int.negOfNat 29))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))))
(Mathlib.Tactic.Ring.add_lt_of_neg_left 0
(Mathlib.Meta.NormNum.isInt_lt_true (Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 29))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))) (Eq.refl true)))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))))))⊢ ¬8 * p ^ 2 = p + 1
All goals completed! 🐙
have aux₅ : 8 * p ^ 2 - 1 ≠ 2 := h:{p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}.Infinite⊢ {n | Set.InjOn ⇑(n * (n + 1)).factorization ↑(n * (n + 1)).primeFactors}.Infinite
All goals completed! 🐙
have pf : (f p * (f p + 1)).primeFactors = {8 * p ^ 2 - 1, p, 2} := h:{p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}.Infinite⊢ {n | Set.InjOn ⇑(n * (n + 1)).factorization ↑(n * (n + 1)).primeFactors}.Infinite
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h:S.Infinitef:ℕ → ℕ := fun p => 8 * p ^ 2 - 1hS:∀ (p : ℕ), Nat.Prime p → 1 < 8 * p ^ 2 :=
fun p hp =>
lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 31))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 31))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 32))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 32)))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 16)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 16))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 32)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 32 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 32))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 32))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Eq.refl 2)))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1))))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 8)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)) (Eq.refl false)))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 (8 * p ^ 2) 1)
(congr
(congrArg LE.le (Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))
Nat.cast_one))
a))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(mul_nonneg_of_nonpos_of_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le (Mathlib.Tactic.Linarith.natCast_nonneg ℤ p))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)) (Eq.refl false)))))this:Set.InjOn f S :=
id fun ⦃a⦄ ha ⦃b⦄ hb h =>
Eq.mp
(Eq.trans mul_eq_mul_left_iff._simp_1
(Eq.trans
(congr
(congrArg Or
(pow_left_inj₀._simp_1 (of_eq_true (one_le._simp_2 a)) (of_eq_true (one_le._simp_2 b))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true))))
(OfNat.ofNat_ne_zero._simp_1 8))
(or_false (a = b))))
(Eq.mp (congrArg (fun _a => _a) (propext (tsub_left_inj (LT.lt.le (hS a ha.left)) (LT.lt.le (hS b hb.left))))) h)p:ℕhp:Nat.Prime php':Nat.Prime (8 * p ^ 2 - 1)hp'':¬p = 2fac:(f p * (f p + 1)).factorization = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3) :=
Eq.mpr
(id
(congrArg
(fun x => ((8 * p ^ 2 - 1) * x).factorization = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.sub_add_cancel (LT.lt.le (hS p _fvar.19726)))))
(have this := Nat.Prime.two_le _fvar.19726;
Eq.mpr
(id
(congrArg (fun _a => _a = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.factorization_mul (Nat.Prime.ne_zero hp')
(ne_of_gt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8)))
(pow_pos
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
this)
2))))))
(Eq.mpr
(id
(congrArg
(fun _a =>
(8 * p ^ 2 - 1).factorization + _a = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.factorization_mul
(ne_of_gt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8))))
(ne_of_gt
(pow_pos
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
this)
2)))))
(Eq.mpr
(id
(congrArg
(fun _a =>
_a + (Nat.factorization 8 + (p ^ 2).factorization) =
(fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization hp')))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 8 * p ^ 2 - 1 => 1) + (Nat.factorization 8 + _a) =
(fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization_pow _fvar.19726)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | _a * p ^ 2 - 1 => 1) + (_a.factorization + fun₀ | p => 2) =
(fun₀ | _a * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(have this := rfl;
this)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + (_a + fun₀ | p => 2) =
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization_pow Nat.prime_two)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + _a =
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(add_comm (fun₀ | 2 => 3) fun₀ | p => 2)))
(Eq.refl ((fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))))))))))aux₂:(fun₀ | 2 => 3).support = {2} :=
of_eq_true
(Eq.trans conditional._simp_3
(Eq.trans
(congr
(congrArg And
(Eq.trans (congrArg (fun x => x ≠ 0) Finsupp.single_eq_same)
(Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 3)) not_false_eq_true)))
(Eq.trans (congrArg (fun x => (fun₀ | 2 => 3) = fun₀ | 2 => x) Finsupp.single_eq_same) (eq_self fun₀ | 2 => 3)))
(and_self True)))aux₁:((fun₀ | p => 2) + fun₀ | 2 => 3).support = {p, 2} :=
Eq.mpr
(id
(congrArg (fun _a => _a = {p, 2})
(Finsupp.support_single_add
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => p ∈ x) aux₂) Finset.mem_singleton._simp_1) (eq_false hp'')))
not_false_eq_true))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true)))))
(Eq.mpr
(id
(congrArg (fun _a => _a = {p, 2})
(Finset.cons_eq_insert p (fun₀ | 2 => 3).support
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => p ∈ x) aux₂) Finset.mem_singleton._simp_1) (eq_false hp'')))
not_false_eq_true)))))
(Eq.mpr (id (congrArg (fun _a => insert p _a = {p, 2}) aux₂)) (Eq.refl {p, 2})))aux₃:p + 1 < 8 * p ^ 2 :=
have hp := Nat.Prime.two_le hp;
Eq.mpr
(id
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (p + 1) (8 * p ^ 2))
(congr (congrArg LT.lt (Eq.trans (Nat.cast_add p 1) (congrArg (HAdd.hAdd ↑p) Nat.cast_one)))
(Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))))
(Mathlib.Tactic.LinearCombination.lt_of_le
(Mathlib.Tactic.LinearCombination.mul_const_le (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) hp)
(le_of_lt
(add_pos'
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8)))
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) hp)))
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 15))
(Eq.refl (Nat.ble 1 15))))))
(Mathlib.Tactic.LinearCombination.lt_rearrange
(Mathlib.Tactic.Ring.lt_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 15)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 15)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 15)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 15))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 15 + 0)))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Eq.refl 2)))
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 15)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 15) (Eq.refl 16))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 15)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 15)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 15)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 30)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 15))
(Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 30 + 0)))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 30)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 30)
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 30))
(Eq.refl (Int.negOfNat 30)))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.negOfNat 16))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Eq.refl (Int.negOfNat 8))))))
Mathlib.Tactic.Ring.neg_zero)))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 30)) (Eq.refl (Int.negOfNat 29))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))))
(Mathlib.Tactic.Ring.add_lt_of_neg_left 0
(Mathlib.Meta.NormNum.isInt_lt_true (Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 29))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))) (Eq.refl true)))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))))))aux₄:8 * p ^ 2 - 1 ≠ p :=
Eq.mpr (id (congrArg (fun _a => _a) (ne_eq (8 * p ^ 2 - 1) p)))
(Eq.mpr (id (congrArg (fun _a => ¬_a) (propext (tsub_eq_iff_eq_add_of_le (LT.lt.le (hS p hp)))))) (LT.lt.ne' aux₃))aux₅:8 * p ^ 2 - 1 ≠ 2 := fun a => conditional._proof_3 aux₃ a⊢ 8 * p ^ 2 - 1 ∉ ((fun₀ | p => 2) + fun₀ | 2 => 3).support
All goals completed! 🐙
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h:S.Infinitef:ℕ → ℕ := fun p => 8 * p ^ 2 - 1hS:∀ (p : ℕ), Nat.Prime p → 1 < 8 * p ^ 2 :=
fun p hp =>
lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 31))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 31))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 32))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 32)))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 16)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 16))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 32)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 32 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 32))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 32))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Eq.refl 2)))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1))))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 8)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)) (Eq.refl false)))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 (8 * p ^ 2) 1)
(congr
(congrArg LE.le (Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))
Nat.cast_one))
a))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(mul_nonneg_of_nonpos_of_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le (Mathlib.Tactic.Linarith.natCast_nonneg ℤ p))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)) (Eq.refl false)))))this:Set.InjOn f S :=
id fun ⦃a⦄ ha ⦃b⦄ hb h =>
Eq.mp
(Eq.trans mul_eq_mul_left_iff._simp_1
(Eq.trans
(congr
(congrArg Or
(pow_left_inj₀._simp_1 (of_eq_true (one_le._simp_2 a)) (of_eq_true (one_le._simp_2 b))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true))))
(OfNat.ofNat_ne_zero._simp_1 8))
(or_false (a = b))))
(Eq.mp (congrArg (fun _a => _a) (propext (tsub_left_inj (LT.lt.le (hS a ha.left)) (LT.lt.le (hS b hb.left))))) h)p:ℕhp:Nat.Prime php':Nat.Prime (8 * p ^ 2 - 1)hp'':¬p = 2fac:(f p * (f p + 1)).factorization = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3) :=
Eq.mpr
(id
(congrArg
(fun x => ((8 * p ^ 2 - 1) * x).factorization = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.sub_add_cancel (LT.lt.le (hS p _fvar.19726)))))
(have this := Nat.Prime.two_le _fvar.19726;
Eq.mpr
(id
(congrArg (fun _a => _a = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.factorization_mul (Nat.Prime.ne_zero hp')
(ne_of_gt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8)))
(pow_pos
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
this)
2))))))
(Eq.mpr
(id
(congrArg
(fun _a =>
(8 * p ^ 2 - 1).factorization + _a = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.factorization_mul
(ne_of_gt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8))))
(ne_of_gt
(pow_pos
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
this)
2)))))
(Eq.mpr
(id
(congrArg
(fun _a =>
_a + (Nat.factorization 8 + (p ^ 2).factorization) =
(fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization hp')))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 8 * p ^ 2 - 1 => 1) + (Nat.factorization 8 + _a) =
(fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization_pow _fvar.19726)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | _a * p ^ 2 - 1 => 1) + (_a.factorization + fun₀ | p => 2) =
(fun₀ | _a * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(have this := rfl;
this)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + (_a + fun₀ | p => 2) =
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization_pow Nat.prime_two)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + _a =
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(add_comm (fun₀ | 2 => 3) fun₀ | p => 2)))
(Eq.refl ((fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))))))))))aux₂:(fun₀ | 2 => 3).support = {2} :=
of_eq_true
(Eq.trans conditional._simp_3
(Eq.trans
(congr
(congrArg And
(Eq.trans (congrArg (fun x => x ≠ 0) Finsupp.single_eq_same)
(Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 3)) not_false_eq_true)))
(Eq.trans (congrArg (fun x => (fun₀ | 2 => 3) = fun₀ | 2 => x) Finsupp.single_eq_same) (eq_self fun₀ | 2 => 3)))
(and_self True)))aux₁:((fun₀ | p => 2) + fun₀ | 2 => 3).support = {p, 2} :=
Eq.mpr
(id
(congrArg (fun _a => _a = {p, 2})
(Finsupp.support_single_add
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => p ∈ x) aux₂) Finset.mem_singleton._simp_1) (eq_false hp'')))
not_false_eq_true))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true)))))
(Eq.mpr
(id
(congrArg (fun _a => _a = {p, 2})
(Finset.cons_eq_insert p (fun₀ | 2 => 3).support
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => p ∈ x) aux₂) Finset.mem_singleton._simp_1) (eq_false hp'')))
not_false_eq_true)))))
(Eq.mpr (id (congrArg (fun _a => insert p _a = {p, 2}) aux₂)) (Eq.refl {p, 2})))aux₃:p + 1 < 8 * p ^ 2 :=
have hp := Nat.Prime.two_le hp;
Eq.mpr
(id
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (p + 1) (8 * p ^ 2))
(congr (congrArg LT.lt (Eq.trans (Nat.cast_add p 1) (congrArg (HAdd.hAdd ↑p) Nat.cast_one)))
(Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))))
(Mathlib.Tactic.LinearCombination.lt_of_le
(Mathlib.Tactic.LinearCombination.mul_const_le (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) hp)
(le_of_lt
(add_pos'
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8)))
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) hp)))
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 15))
(Eq.refl (Nat.ble 1 15))))))
(Mathlib.Tactic.LinearCombination.lt_rearrange
(Mathlib.Tactic.Ring.lt_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 15)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 15)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 15)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 15))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 15 + 0)))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Eq.refl 2)))
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 15)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 15) (Eq.refl 16))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 15)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 15)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 15)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 30)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 15))
(Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 30 + 0)))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 30)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 30)
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 30))
(Eq.refl (Int.negOfNat 30)))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.negOfNat 16))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Eq.refl (Int.negOfNat 8))))))
Mathlib.Tactic.Ring.neg_zero)))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 30)) (Eq.refl (Int.negOfNat 29))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))))
(Mathlib.Tactic.Ring.add_lt_of_neg_left 0
(Mathlib.Meta.NormNum.isInt_lt_true (Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 29))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))) (Eq.refl true)))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))))))aux₄:8 * p ^ 2 - 1 ≠ p :=
Eq.mpr (id (congrArg (fun _a => _a) (ne_eq (8 * p ^ 2 - 1) p)))
(Eq.mpr (id (congrArg (fun _a => ¬_a) (propext (tsub_eq_iff_eq_add_of_le (LT.lt.le (hS p hp)))))) (LT.lt.ne' aux₃))aux₅:8 * p ^ 2 - 1 ≠ 2 := fun a => conditional._proof_3 aux₃ apf:(f p * (f p + 1)).primeFactors = {8 * p ^ 2 - 1, p, 2} :=
Eq.mpr (id (congrArg (fun _a => _a = {8 * p ^ 2 - 1, p, 2}) (Eq.symm (Nat.support_factorization (f p * (f p + 1))))))
(Eq.mpr (id (congrArg (fun _a => _a.support = {8 * p ^ 2 - 1, p, 2}) fac))
(Eq.mpr
(id
(congrArg (fun _a => _a = {8 * p ^ 2 - 1, p, 2})
(Finsupp.support_single_add
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => 8 * p ^ 2 - 1 ∈ x) aux₁) Finset.mem_insert._simp_1)
(Eq.trans
(congr (congrArg Or (eq_false aux₄)) (Eq.trans Finset.mem_singleton._simp_1 (eq_false aux₅)))
(or_self False))))
not_false_eq_true))
(of_eq_true (Eq.trans (congrArg Not one_ne_zero._simp_1) not_false_eq_true)))))
(Eq.mpr
(id
(congrArg (fun _a => _a = {8 * p ^ 2 - 1, p, 2})
(Finset.cons_eq_insert (8 * p ^ 2 - 1) ((fun₀ | p => 2) + fun₀ | 2 => 3).support
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => 8 * p ^ 2 - 1 ∈ x) aux₁) Finset.mem_insert._simp_1)
(Eq.trans
(congr (congrArg Or (eq_false aux₄)) (Eq.trans Finset.mem_singleton._simp_1 (eq_false aux₅)))
(or_self False))))
not_false_eq_true)))))
(Eq.mpr (id (congrArg (fun _a => insert (8 * p ^ 2 - 1) _a = {8 * p ^ 2 - 1, p, 2}) aux₁))
(Eq.refl {8 * p ^ 2 - 1, p, 2})))))⊢ Set.InjOn ⇑(f p * (f p + 1)).factorization ↑(f p * (f p + 1)).primeFactors
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h:S.Infinitef:ℕ → ℕ := fun p => 8 * p ^ 2 - 1hS:∀ (p : ℕ), Nat.Prime p → 1 < 8 * p ^ 2 :=
fun p hp =>
lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 31))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 31))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 32))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 32)))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 16)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 16))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 32)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 32 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 32))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 32))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Eq.refl 2)))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1))))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 8)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)) (Eq.refl false)))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 (8 * p ^ 2) 1)
(congr
(congrArg LE.le (Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))
Nat.cast_one))
a))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(mul_nonneg_of_nonpos_of_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le (Mathlib.Tactic.Linarith.natCast_nonneg ℤ p))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)) (Eq.refl false)))))this:Set.InjOn f S :=
id fun ⦃a⦄ ha ⦃b⦄ hb h =>
Eq.mp
(Eq.trans mul_eq_mul_left_iff._simp_1
(Eq.trans
(congr
(congrArg Or
(pow_left_inj₀._simp_1 (of_eq_true (one_le._simp_2 a)) (of_eq_true (one_le._simp_2 b))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true))))
(OfNat.ofNat_ne_zero._simp_1 8))
(or_false (a = b))))
(Eq.mp (congrArg (fun _a => _a) (propext (tsub_left_inj (LT.lt.le (hS a ha.left)) (LT.lt.le (hS b hb.left))))) h)p:ℕhp:Nat.Prime php':Nat.Prime (8 * p ^ 2 - 1)hp'':¬p = 2fac:(f p * (f p + 1)).factorization = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3) :=
Eq.mpr
(id
(congrArg
(fun x => ((8 * p ^ 2 - 1) * x).factorization = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.sub_add_cancel (LT.lt.le (hS p _fvar.19726)))))
(have this := Nat.Prime.two_le _fvar.19726;
Eq.mpr
(id
(congrArg (fun _a => _a = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.factorization_mul (Nat.Prime.ne_zero hp')
(ne_of_gt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8)))
(pow_pos
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
this)
2))))))
(Eq.mpr
(id
(congrArg
(fun _a =>
(8 * p ^ 2 - 1).factorization + _a = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.factorization_mul
(ne_of_gt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8))))
(ne_of_gt
(pow_pos
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
this)
2)))))
(Eq.mpr
(id
(congrArg
(fun _a =>
_a + (Nat.factorization 8 + (p ^ 2).factorization) =
(fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization hp')))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 8 * p ^ 2 - 1 => 1) + (Nat.factorization 8 + _a) =
(fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization_pow _fvar.19726)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | _a * p ^ 2 - 1 => 1) + (_a.factorization + fun₀ | p => 2) =
(fun₀ | _a * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(have this := rfl;
this)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + (_a + fun₀ | p => 2) =
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization_pow Nat.prime_two)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + _a =
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(add_comm (fun₀ | 2 => 3) fun₀ | p => 2)))
(Eq.refl ((fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))))))))))aux₂:(fun₀ | 2 => 3).support = {2} :=
of_eq_true
(Eq.trans conditional._simp_3
(Eq.trans
(congr
(congrArg And
(Eq.trans (congrArg (fun x => x ≠ 0) Finsupp.single_eq_same)
(Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 3)) not_false_eq_true)))
(Eq.trans (congrArg (fun x => (fun₀ | 2 => 3) = fun₀ | 2 => x) Finsupp.single_eq_same) (eq_self fun₀ | 2 => 3)))
(and_self True)))aux₁:((fun₀ | p => 2) + fun₀ | 2 => 3).support = {p, 2} :=
Eq.mpr
(id
(congrArg (fun _a => _a = {p, 2})
(Finsupp.support_single_add
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => p ∈ x) aux₂) Finset.mem_singleton._simp_1) (eq_false hp'')))
not_false_eq_true))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true)))))
(Eq.mpr
(id
(congrArg (fun _a => _a = {p, 2})
(Finset.cons_eq_insert p (fun₀ | 2 => 3).support
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => p ∈ x) aux₂) Finset.mem_singleton._simp_1) (eq_false hp'')))
not_false_eq_true)))))
(Eq.mpr (id (congrArg (fun _a => insert p _a = {p, 2}) aux₂)) (Eq.refl {p, 2})))aux₃:p + 1 < 8 * p ^ 2 :=
have hp := Nat.Prime.two_le hp;
Eq.mpr
(id
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (p + 1) (8 * p ^ 2))
(congr (congrArg LT.lt (Eq.trans (Nat.cast_add p 1) (congrArg (HAdd.hAdd ↑p) Nat.cast_one)))
(Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))))
(Mathlib.Tactic.LinearCombination.lt_of_le
(Mathlib.Tactic.LinearCombination.mul_const_le (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) hp)
(le_of_lt
(add_pos'
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8)))
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) hp)))
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 15))
(Eq.refl (Nat.ble 1 15))))))
(Mathlib.Tactic.LinearCombination.lt_rearrange
(Mathlib.Tactic.Ring.lt_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 15)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 15)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 15)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 15))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 15 + 0)))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Eq.refl 2)))
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 15)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 15) (Eq.refl 16))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 15)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 15)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 15)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 30)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 15))
(Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 30 + 0)))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 30)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 30)
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 30))
(Eq.refl (Int.negOfNat 30)))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.negOfNat 16))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Eq.refl (Int.negOfNat 8))))))
Mathlib.Tactic.Ring.neg_zero)))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 30)) (Eq.refl (Int.negOfNat 29))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))))
(Mathlib.Tactic.Ring.add_lt_of_neg_left 0
(Mathlib.Meta.NormNum.isInt_lt_true (Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 29))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))) (Eq.refl true)))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))))))aux₄:8 * p ^ 2 - 1 ≠ p :=
Eq.mpr (id (congrArg (fun _a => _a) (ne_eq (8 * p ^ 2 - 1) p)))
(Eq.mpr (id (congrArg (fun _a => ¬_a) (propext (tsub_eq_iff_eq_add_of_le (LT.lt.le (hS p hp)))))) (LT.lt.ne' aux₃))aux₅:8 * p ^ 2 - 1 ≠ 2 := fun a => conditional._proof_3 aux₃ apf:(f p * (f p + 1)).primeFactors = {8 * p ^ 2 - 1, p, 2} :=
Eq.mpr (id (congrArg (fun _a => _a = {8 * p ^ 2 - 1, p, 2}) (Eq.symm (Nat.support_factorization (f p * (f p + 1))))))
(Eq.mpr (id (congrArg (fun _a => _a.support = {8 * p ^ 2 - 1, p, 2}) fac))
(Eq.mpr
(id
(congrArg (fun _a => _a = {8 * p ^ 2 - 1, p, 2})
(Finsupp.support_single_add
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => 8 * p ^ 2 - 1 ∈ x) aux₁) Finset.mem_insert._simp_1)
(Eq.trans
(congr (congrArg Or (eq_false aux₄)) (Eq.trans Finset.mem_singleton._simp_1 (eq_false aux₅)))
(or_self False))))
not_false_eq_true))
(of_eq_true (Eq.trans (congrArg Not one_ne_zero._simp_1) not_false_eq_true)))))
(Eq.mpr
(id
(congrArg (fun _a => _a = {8 * p ^ 2 - 1, p, 2})
(Finset.cons_eq_insert (8 * p ^ 2 - 1) ((fun₀ | p => 2) + fun₀ | 2 => 3).support
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => 8 * p ^ 2 - 1 ∈ x) aux₁) Finset.mem_insert._simp_1)
(Eq.trans
(congr (congrArg Or (eq_false aux₄)) (Eq.trans Finset.mem_singleton._simp_1 (eq_false aux₅)))
(or_self False))))
not_false_eq_true)))))
(Eq.mpr (id (congrArg (fun _a => insert (8 * p ^ 2 - 1) _a = {8 * p ^ 2 - 1, p, 2}) aux₁))
(Eq.refl {8 * p ^ 2 - 1, p, 2})))))⊢ Set.InjOn ⇑((fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3)) ↑{8 * p ^ 2 - 1, p, 2}
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h:S.Infinitef:ℕ → ℕ := fun p => 8 * p ^ 2 - 1hS:∀ (p : ℕ), Nat.Prime p → 1 < 8 * p ^ 2 :=
fun p hp =>
lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 31))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 31))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 32))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 32)))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 16)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 16))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 32)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 32 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 32))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 32))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Eq.refl 2)))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1))))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 8)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)) (Eq.refl false)))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 (8 * p ^ 2) 1)
(congr
(congrArg LE.le (Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))
Nat.cast_one))
a))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(mul_nonneg_of_nonpos_of_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le (Mathlib.Tactic.Linarith.natCast_nonneg ℤ p))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)) (Eq.refl false)))))this:Set.InjOn f S :=
id fun ⦃a⦄ ha ⦃b⦄ hb h =>
Eq.mp
(Eq.trans mul_eq_mul_left_iff._simp_1
(Eq.trans
(congr
(congrArg Or
(pow_left_inj₀._simp_1 (of_eq_true (one_le._simp_2 a)) (of_eq_true (one_le._simp_2 b))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true))))
(OfNat.ofNat_ne_zero._simp_1 8))
(or_false (a = b))))
(Eq.mp (congrArg (fun _a => _a) (propext (tsub_left_inj (LT.lt.le (hS a ha.left)) (LT.lt.le (hS b hb.left))))) h)p:ℕhp:Nat.Prime php':Nat.Prime (8 * p ^ 2 - 1)hp'':¬p = 2fac:(f p * (f p + 1)).factorization = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3) :=
Eq.mpr
(id
(congrArg
(fun x => ((8 * p ^ 2 - 1) * x).factorization = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.sub_add_cancel (LT.lt.le (hS p _fvar.19726)))))
(have this := Nat.Prime.two_le _fvar.19726;
Eq.mpr
(id
(congrArg (fun _a => _a = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.factorization_mul (Nat.Prime.ne_zero hp')
(ne_of_gt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8)))
(pow_pos
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
this)
2))))))
(Eq.mpr
(id
(congrArg
(fun _a =>
(8 * p ^ 2 - 1).factorization + _a = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.factorization_mul
(ne_of_gt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8))))
(ne_of_gt
(pow_pos
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
this)
2)))))
(Eq.mpr
(id
(congrArg
(fun _a =>
_a + (Nat.factorization 8 + (p ^ 2).factorization) =
(fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization hp')))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 8 * p ^ 2 - 1 => 1) + (Nat.factorization 8 + _a) =
(fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization_pow _fvar.19726)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | _a * p ^ 2 - 1 => 1) + (_a.factorization + fun₀ | p => 2) =
(fun₀ | _a * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(have this := rfl;
this)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + (_a + fun₀ | p => 2) =
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization_pow Nat.prime_two)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + _a =
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(add_comm (fun₀ | 2 => 3) fun₀ | p => 2)))
(Eq.refl ((fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))))))))))aux₂:(fun₀ | 2 => 3).support = {2} :=
of_eq_true
(Eq.trans conditional._simp_3
(Eq.trans
(congr
(congrArg And
(Eq.trans (congrArg (fun x => x ≠ 0) Finsupp.single_eq_same)
(Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 3)) not_false_eq_true)))
(Eq.trans (congrArg (fun x => (fun₀ | 2 => 3) = fun₀ | 2 => x) Finsupp.single_eq_same) (eq_self fun₀ | 2 => 3)))
(and_self True)))aux₁:((fun₀ | p => 2) + fun₀ | 2 => 3).support = {p, 2} :=
Eq.mpr
(id
(congrArg (fun _a => _a = {p, 2})
(Finsupp.support_single_add
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => p ∈ x) aux₂) Finset.mem_singleton._simp_1) (eq_false hp'')))
not_false_eq_true))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true)))))
(Eq.mpr
(id
(congrArg (fun _a => _a = {p, 2})
(Finset.cons_eq_insert p (fun₀ | 2 => 3).support
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => p ∈ x) aux₂) Finset.mem_singleton._simp_1) (eq_false hp'')))
not_false_eq_true)))))
(Eq.mpr (id (congrArg (fun _a => insert p _a = {p, 2}) aux₂)) (Eq.refl {p, 2})))aux₃:p + 1 < 8 * p ^ 2 :=
have hp := Nat.Prime.two_le hp;
Eq.mpr
(id
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (p + 1) (8 * p ^ 2))
(congr (congrArg LT.lt (Eq.trans (Nat.cast_add p 1) (congrArg (HAdd.hAdd ↑p) Nat.cast_one)))
(Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))))
(Mathlib.Tactic.LinearCombination.lt_of_le
(Mathlib.Tactic.LinearCombination.mul_const_le (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) hp)
(le_of_lt
(add_pos'
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8)))
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) hp)))
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 15))
(Eq.refl (Nat.ble 1 15))))))
(Mathlib.Tactic.LinearCombination.lt_rearrange
(Mathlib.Tactic.Ring.lt_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 15)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 15)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 15)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 15))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 15 + 0)))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Eq.refl 2)))
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 15)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 15) (Eq.refl 16))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 15)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 15)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 15)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 30)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 15))
(Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 30 + 0)))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 30)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 30)
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 30))
(Eq.refl (Int.negOfNat 30)))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.negOfNat 16))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Eq.refl (Int.negOfNat 8))))))
Mathlib.Tactic.Ring.neg_zero)))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 30)) (Eq.refl (Int.negOfNat 29))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))))
(Mathlib.Tactic.Ring.add_lt_of_neg_left 0
(Mathlib.Meta.NormNum.isInt_lt_true (Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 29))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))) (Eq.refl true)))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))))))aux₄:8 * p ^ 2 - 1 ≠ p :=
Eq.mpr (id (congrArg (fun _a => _a) (ne_eq (8 * p ^ 2 - 1) p)))
(Eq.mpr (id (congrArg (fun _a => ¬_a) (propext (tsub_eq_iff_eq_add_of_le (LT.lt.le (hS p hp)))))) (LT.lt.ne' aux₃))aux₅:8 * p ^ 2 - 1 ≠ 2 := fun a => conditional._proof_3 aux₃ apf:(f p * (f p + 1)).primeFactors = {8 * p ^ 2 - 1, p, 2} :=
Eq.mpr (id (congrArg (fun _a => _a = {8 * p ^ 2 - 1, p, 2}) (Eq.symm (Nat.support_factorization (f p * (f p + 1))))))
(Eq.mpr (id (congrArg (fun _a => _a.support = {8 * p ^ 2 - 1, p, 2}) fac))
(Eq.mpr
(id
(congrArg (fun _a => _a = {8 * p ^ 2 - 1, p, 2})
(Finsupp.support_single_add
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => 8 * p ^ 2 - 1 ∈ x) aux₁) Finset.mem_insert._simp_1)
(Eq.trans
(congr (congrArg Or (eq_false aux₄)) (Eq.trans Finset.mem_singleton._simp_1 (eq_false aux₅)))
(or_self False))))
not_false_eq_true))
(of_eq_true (Eq.trans (congrArg Not one_ne_zero._simp_1) not_false_eq_true)))))
(Eq.mpr
(id
(congrArg (fun _a => _a = {8 * p ^ 2 - 1, p, 2})
(Finset.cons_eq_insert (8 * p ^ 2 - 1) ((fun₀ | p => 2) + fun₀ | 2 => 3).support
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => 8 * p ^ 2 - 1 ∈ x) aux₁) Finset.mem_insert._simp_1)
(Eq.trans
(congr (congrArg Or (eq_false aux₄)) (Eq.trans Finset.mem_singleton._simp_1 (eq_false aux₅)))
(or_self False))))
not_false_eq_true)))))
(Eq.mpr (id (congrArg (fun _a => insert (8 * p ^ 2 - 1) _a = {8 * p ^ 2 - 1, p, 2}) aux₁))
(Eq.refl {8 * p ^ 2 - 1, p, 2})))))⊢ Set.InjOn ((⇑fun₀ | 8 * p ^ 2 - 1 => 1) + ((⇑fun₀ | p => 2) + ⇑fun₀ | 2 => 3)) {8 * p ^ 2 - 1, p, 2}
S:Set ℕ := {p | Nat.Prime p ∧ Nat.Prime (8 * p ^ 2 - 1)}h:S.Infinitef:ℕ → ℕ := fun p => 8 * p ^ 2 - 1hS:∀ (p : ℕ), Nat.Prime p → 1 < 8 * p ^ 2 :=
fun p hp =>
lt_of_not_ge fun a =>
Mathlib.Tactic.Linarith.lt_irrefl
(Eq.mp
(congrArg (fun _a => _a < 0)
(Mathlib.Tactic.Ring.of_eq
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)))
(Mathlib.Tactic.Ring.neg_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 31))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 31))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0)))
(Mathlib.Tactic.Ring.zero_mul ((Int.negOfNat 1).rawCast + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero ((Int.negOfNat 31).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1)))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_gt (Int.negOfNat 1).rawCast
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 31))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 32))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 32)))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 16)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 16))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 32)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(Nat.rawCast 32 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 32))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 32))
(Eq.refl (Int.ofNat 0))))
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 16).rawCast)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0))))
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero)
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 2)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2))
(Eq.refl (Int.negOfNat 2)))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Eq.refl 2)))
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.ofNat 1))))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.zero_mul
(Nat.rawCast 2 + (↑p ^ Nat.rawCast 1 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * (Int.negOfNat 2).rawCast + (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 2)) (Eq.refl (Int.ofNat 2)))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Eq.refl (Int.negOfNat 1))))))
Mathlib.Tactic.Ring.neg_zero))
(Mathlib.Tactic.Ring.add_pf_zero_add
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1)) (Eq.refl (Int.negOfNat 8)))))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0))))
(Mathlib.Tactic.Ring.zero_mul
(↑p ^ Nat.rawCast 1 * Nat.rawCast 2 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 1).rawCast + 0)))
(Mathlib.Tactic.Ring.add_pf_add_zero
(↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + (↑p ^ Nat.rawCast 2 * (Int.negOfNat 8).rawCast + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0)))))
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.add_lt_of_neg_of_le
(Mathlib.Tactic.Linarith.mul_neg (neg_neg_of_pos Mathlib.Tactic.Linarith.zero_lt_one)
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 31)) (Eq.refl false)))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id
(Eq.mp
(Eq.trans (Mathlib.Tactic.Zify.natCast_le._simp_1 (8 * p ^ 2) 1)
(congr
(congrArg LE.le (Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))
Nat.cast_one))
a))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 16)) (Eq.refl false))))
(Mathlib.Tactic.Linarith.mul_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(mul_nonneg_of_nonpos_of_nonpos
(Mathlib.Tactic.Linarith.sub_nonpos_of_le (Mathlib.Tactic.Linarith.natCast_nonneg ℤ p))
(Mathlib.Tactic.Linarith.sub_nonpos_of_le
(id (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) (Nat.Prime.two_le hp))))))
(Mathlib.Meta.NormNum.isNat_lt_true (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))
(Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)) (Eq.refl false)))))this:Set.InjOn f S :=
id fun ⦃a⦄ ha ⦃b⦄ hb h =>
Eq.mp
(Eq.trans mul_eq_mul_left_iff._simp_1
(Eq.trans
(congr
(congrArg Or
(pow_left_inj₀._simp_1 (of_eq_true (one_le._simp_2 a)) (of_eq_true (one_le._simp_2 b))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true))))
(OfNat.ofNat_ne_zero._simp_1 8))
(or_false (a = b))))
(Eq.mp (congrArg (fun _a => _a) (propext (tsub_left_inj (LT.lt.le (hS a ha.left)) (LT.lt.le (hS b hb.left))))) h)p:ℕhp:Nat.Prime php':Nat.Prime (8 * p ^ 2 - 1)hp'':¬p = 2fac:(f p * (f p + 1)).factorization = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3) :=
Eq.mpr
(id
(congrArg
(fun x => ((8 * p ^ 2 - 1) * x).factorization = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.sub_add_cancel (LT.lt.le (hS p _fvar.19726)))))
(have this := Nat.Prime.two_le _fvar.19726;
Eq.mpr
(id
(congrArg (fun _a => _a = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.factorization_mul (Nat.Prime.ne_zero hp')
(ne_of_gt
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8)))
(pow_pos
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
this)
2))))))
(Eq.mpr
(id
(congrArg
(fun _a =>
(8 * p ^ 2 - 1).factorization + _a = (fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.factorization_mul
(ne_of_gt
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8))))
(ne_of_gt
(pow_pos
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
this)
2)))))
(Eq.mpr
(id
(congrArg
(fun _a =>
_a + (Nat.factorization 8 + (p ^ 2).factorization) =
(fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization hp')))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 8 * p ^ 2 - 1 => 1) + (Nat.factorization 8 + _a) =
(fun₀ | 8 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization_pow _fvar.19726)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | _a * p ^ 2 - 1 => 1) + (_a.factorization + fun₀ | p => 2) =
(fun₀ | _a * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(have this := rfl;
this)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + (_a + fun₀ | p => 2) =
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(Nat.Prime.factorization_pow Nat.prime_two)))
(Eq.mpr
(id
(congrArg
(fun _a =>
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + _a =
(fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))
(add_comm (fun₀ | 2 => 3) fun₀ | p => 2)))
(Eq.refl ((fun₀ | 2 ^ 3 * p ^ 2 - 1 => 1) + ((fun₀ | p => 2) + fun₀ | 2 => 3))))))))))aux₂:(fun₀ | 2 => 3).support = {2} :=
of_eq_true
(Eq.trans conditional._simp_3
(Eq.trans
(congr
(congrArg And
(Eq.trans (congrArg (fun x => x ≠ 0) Finsupp.single_eq_same)
(Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 3)) not_false_eq_true)))
(Eq.trans (congrArg (fun x => (fun₀ | 2 => 3) = fun₀ | 2 => x) Finsupp.single_eq_same) (eq_self fun₀ | 2 => 3)))
(and_self True)))aux₁:((fun₀ | p => 2) + fun₀ | 2 => 3).support = {p, 2} :=
Eq.mpr
(id
(congrArg (fun _a => _a = {p, 2})
(Finsupp.support_single_add
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => p ∈ x) aux₂) Finset.mem_singleton._simp_1) (eq_false hp'')))
not_false_eq_true))
(of_eq_true (Eq.trans (congrArg Not (OfNat.ofNat_ne_zero._simp_1 2)) not_false_eq_true)))))
(Eq.mpr
(id
(congrArg (fun _a => _a = {p, 2})
(Finset.cons_eq_insert p (fun₀ | 2 => 3).support
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => p ∈ x) aux₂) Finset.mem_singleton._simp_1) (eq_false hp'')))
not_false_eq_true)))))
(Eq.mpr (id (congrArg (fun _a => insert p _a = {p, 2}) aux₂)) (Eq.refl {p, 2})))aux₃:p + 1 < 8 * p ^ 2 :=
have hp := Nat.Prime.two_le hp;
Eq.mpr
(id
(Eq.trans (Mathlib.Tactic.Zify.natCast_lt._simp_1 (p + 1) (8 * p ^ 2))
(congr (congrArg LT.lt (Eq.trans (Nat.cast_add p 1) (congrArg (HAdd.hAdd ↑p) Nat.cast_one)))
(Eq.trans (Nat.cast_mul 8 (p ^ 2)) (congrArg (HMul.hMul 8) (Nat.cast_pow p 2))))))
(Mathlib.Tactic.LinearCombination.lt_of_le
(Mathlib.Tactic.LinearCombination.mul_const_le (Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) hp)
(le_of_lt
(add_pos'
(mul_pos
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8))
(Eq.refl (Nat.ble 1 8)))
(lt_of_lt_of_le
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2))
(Eq.refl (Nat.ble 1 2)))
(Eq.mp (Mathlib.Tactic.Zify.natCast_le._simp_1 2 p) hp)))
(Mathlib.Meta.Positivity.pos_of_isNat (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 15))
(Eq.refl (Nat.ble 1 15))))))
(Mathlib.Tactic.LinearCombination.lt_rearrange
(Mathlib.Tactic.Ring.lt_congr
(Mathlib.Tactic.Ring.sub_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.add_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 1)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 15)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 15)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 15)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 15))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 15 + 0)))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pp_pf_overlap (↑p)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1)
(Mathlib.Meta.NormNum.IsNat.of_raw ℕ 1) (Eq.refl 2)))
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (↑p ^ Nat.rawCast 1 * Nat.rawCast 15)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 1)
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Tactic.Ring.add_overlap_pf (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_add (Eq.refl HAdd.hAdd) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 15) (Eq.refl 16))))
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.pow_congr (Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℕ (Eq.refl 2)))
(Mathlib.Tactic.Ring.pow_add
(Mathlib.Tactic.Ring.single_pow
(Mathlib.Tactic.Ring.mul_pow (Mathlib.Tactic.Ring.one_mul (Nat.rawCast 2))
(Mathlib.Tactic.Ring.one_pow (Nat.rawCast 2))))
(Mathlib.Tactic.Ring.pow_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.one_mul (Nat.rawCast 1)))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0)))))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 2) (Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 2 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.add_congr
(Mathlib.Tactic.Ring.mul_congr
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 8)))
(Mathlib.Tactic.Ring.atom_pf ↑p)
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_right (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.mul_one (Nat.rawCast 8)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0)))
(Mathlib.Tactic.Ring.zero_mul (↑p ^ Nat.rawCast 1 * Nat.rawCast 1 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 15)))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 15)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8 + 0))))
(Mathlib.Tactic.Ring.cast_pos (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 2)))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 15)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 30)))
(Mathlib.Tactic.Ring.mul_zero (Nat.rawCast 15))
(Mathlib.Tactic.Ring.add_pf_add_zero (Nat.rawCast 30 + 0)))
(Mathlib.Tactic.Ring.add_mul
(Mathlib.Tactic.Ring.mul_add
(Mathlib.Tactic.Ring.mul_pf_left (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsNat.to_raw_eq
(Mathlib.Meta.NormNum.isNat_mul (Eq.refl HMul.hMul) (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8)
(Mathlib.Meta.NormNum.IsNat.of_raw ℤ 2) (Eq.refl 16))))
(Mathlib.Tactic.Ring.mul_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 8))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + 0)))
(Mathlib.Tactic.Ring.zero_mul (Nat.rawCast 2 + 0))
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + 0)))
(Mathlib.Tactic.Ring.add_pf_add_lt (Nat.rawCast 30)
(Mathlib.Tactic.Ring.add_pf_zero_add (↑p ^ Nat.rawCast 1 * Nat.rawCast 16 + 0)))))
(Mathlib.Tactic.Ring.add_pf_add_gt (Nat.rawCast 30)
(Mathlib.Tactic.Ring.add_pf_add_gt (↑p ^ Nat.rawCast 1 * Nat.rawCast 16)
(Mathlib.Tactic.Ring.add_pf_add_zero (↑p ^ Nat.rawCast 2 * Nat.rawCast 8 + 0)))))
(Mathlib.Tactic.Ring.sub_pf
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 30))
(Eq.refl (Int.negOfNat 30)))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 1)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Eq.refl (Int.negOfNat 16))))))
(Mathlib.Tactic.Ring.neg_add
(Mathlib.Tactic.Ring.neg_mul (↑p) (Nat.rawCast 2)
(Mathlib.Tactic.Ring.neg_one_mul
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_mul (Eq.refl HMul.hMul)
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 1))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Eq.refl (Int.negOfNat 8))))))
Mathlib.Tactic.Ring.neg_zero)))
(Mathlib.Tactic.Ring.add_pf_add_overlap
(Mathlib.Meta.NormNum.IsInt.to_raw_eq
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 1))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 30)) (Eq.refl (Int.negOfNat 29))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 1)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 16))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 16)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_add_overlap_zero
(Mathlib.Tactic.Ring.add_overlap_pf_zero (↑p) (Nat.rawCast 2)
(Mathlib.Meta.NormNum.IsInt.to_isNat
(Mathlib.Meta.NormNum.isInt_add (Eq.refl HAdd.hAdd)
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.IsNat.of_raw ℤ 8))
(Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 8)) (Eq.refl (Int.ofNat 0)))))
(Mathlib.Tactic.Ring.add_pf_zero_add 0))))))
(Mathlib.Tactic.Ring.add_lt_of_neg_left 0
(Mathlib.Meta.NormNum.isInt_lt_true (Mathlib.Meta.NormNum.IsInt.of_raw ℤ (Int.negOfNat 29))
(Mathlib.Meta.NormNum.IsNat.to_isInt (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))) (Eq.refl true)))
(Mathlib.Tactic.Ring.cast_zero (Mathlib.Meta.NormNum.isNat_ofNat ℤ (Eq.refl 0))))))aux₄:8 * p ^ 2 - 1 ≠ p :=
Eq.mpr (id (congrArg (fun _a => _a) (ne_eq (8 * p ^ 2 - 1) p)))
(Eq.mpr (id (congrArg (fun _a => ¬_a) (propext (tsub_eq_iff_eq_add_of_le (LT.lt.le (hS p hp)))))) (LT.lt.ne' aux₃))aux₅:8 * p ^ 2 - 1 ≠ 2 := fun a => conditional._proof_3 aux₃ apf:(f p * (f p + 1)).primeFactors = {8 * p ^ 2 - 1, p, 2} :=
Eq.mpr (id (congrArg (fun _a => _a = {8 * p ^ 2 - 1, p, 2}) (Eq.symm (Nat.support_factorization (f p * (f p + 1))))))
(Eq.mpr (id (congrArg (fun _a => _a.support = {8 * p ^ 2 - 1, p, 2}) fac))
(Eq.mpr
(id
(congrArg (fun _a => _a = {8 * p ^ 2 - 1, p, 2})
(Finsupp.support_single_add
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => 8 * p ^ 2 - 1 ∈ x) aux₁) Finset.mem_insert._simp_1)
(Eq.trans
(congr (congrArg Or (eq_false aux₄)) (Eq.trans Finset.mem_singleton._simp_1 (eq_false aux₅)))
(or_self False))))
not_false_eq_true))
(of_eq_true (Eq.trans (congrArg Not one_ne_zero._simp_1) not_false_eq_true)))))
(Eq.mpr
(id
(congrArg (fun _a => _a = {8 * p ^ 2 - 1, p, 2})
(Finset.cons_eq_insert (8 * p ^ 2 - 1) ((fun₀ | p => 2) + fun₀ | 2 => 3).support
(of_eq_true
(Eq.trans
(congrArg Not
(Eq.trans (Eq.trans (congrArg (fun x => 8 * p ^ 2 - 1 ∈ x) aux₁) Finset.mem_insert._simp_1)
(Eq.trans
(congr (congrArg Or (eq_false aux₄)) (Eq.trans Finset.mem_singleton._simp_1 (eq_false aux₅)))
(or_self False))))
not_false_eq_true)))))
(Eq.mpr (id (congrArg (fun _a => insert (8 * p ^ 2 - 1) _a = {8 * p ^ 2 - 1, p, 2}) aux₁))
(Eq.refl {8 * p ^ 2 - 1, p, 2})))))⊢ (Set.InjOn ((⇑fun₀ | 8 * p ^ 2 - 1 => 1) + ((⇑fun₀ | p => 2) + ⇑fun₀ | 2 => 3)) {2} ∧
((⇑fun₀ | 8 * p ^ 2 - 1 => 1) + ((⇑fun₀ | p => 2) + ⇑fun₀ | 2 => 3)) p ∉
((⇑fun₀ | 8 * p ^ 2 - 1 => 1) + ((⇑fun₀ | p => 2) + ⇑fun₀ | 2 => 3)) '' {2}) ∧
((⇑fun₀ | 8 * p ^ 2 - 1 => 1) + ((⇑fun₀ | p => 2) + ⇑fun₀ | 2 => 3)) (8 * p ^ 2 - 1) ∉
((⇑fun₀ | 8 * p ^ 2 - 1 => 1) + ((⇑fun₀ | p => 2) + ⇑fun₀ | 2 => 3)) '' {p, 2}
All goals completed! 🐙
end Erdos913