/- 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

Erdős Problem 913

Reference: erdosproblems.com/913

Reviewed by @b-mehta on 2025-05-27

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 declaration uses 'sorry'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 declaration uses 'sorry'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 p1 < 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 - 1a = 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 ^ 2a = 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 = 2p {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.19726p + 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 pp + 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₃ a8 * 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