Compfiles/Imo1969P1.lean
Explanation legend Lean4 Domain Explanation Language (L4DEL)
L4DEL explanations are a separate layer. They do not change the Lean source. Intuition is explanatory prose; numbered items are a reading path; sources link the wording back to evidence.
- L4DEL
- Lean4 Domain Explanation Language
Credit: The upstream authors and contributors retain credit for the project and mathematics. lean4-explainer only renders their pinned source and adds the separately disclosed explanation layer.
Project sources: Pinned compfiles documentation, Pinned compfiles corpus index
11 declarations, 0 contain sorry, 0 declared as axioms
International Mathematical Olympiad 1969, Problem 1
Prove that there are infinitely many natural numbers a with the following property: the number z = n⁴ + a is not prime for any natural number n.
Imports (5)
Imported by 1 file
- def
Imo1969P1.goodNatsgoodNatsis the set of natural numbers satisfying the condition in the problem statement, namely thea : ℕsuch thatn^4 + ais not prime for anyn : ℕline 38 sourceSource documentation
goodNatsis the set of natural numbers satisfying the condition in the problem statement, namely thea : ℕsuch thatn^4 + ais not prime for anyn : ℕ.standard axioms: propext what this means
Statement uses:
Set,NatProof uses:
Set.ofPred,Not,Nat.Prime,HAdd.hAdd,HPow.hPow,OfNat.ofNat7 instances, coercions and auxiliary constants left out.
def goodNats : Set ℕ := …
- theorem
Imo1969P1.factorizationThe key to the solution is that you can factor $z$ into the product of two polynomials, if $a = 4*m^4$ line 46 sourceSource documentation
The key to the solution is that you can factor $z$ into the product of two polynomials, if $a = 4*m^4$. This is Sophie Germain's identity, called
pow_four_add_four_mul_pow_fourin mathlib.standard axioms: Quot.sound, propext what this means
Statement uses:
Int,Eq,HMul.hMul,HAdd.hAdd,HPow.hPow,Nat,HSub.hSub,OfNat.ofNatProof uses:
Eq.symm,pow_four_add_four_mul_pow_four36 instances, coercions and auxiliary constants left out.
theorem factorization {m n : ℤ} : ((n - m) ^ 2 + m ^ 2) * ((n + m) ^ 2 + m ^ 2) = n ^ 4 + 4 * m ^ 4 := … - theorem
Imo1969P1.left_factor_largeline 55 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Int,LT.lt,OfNat.ofNat,HAdd.hAdd,HPow.hPow,Nat,HSub.hSubProof uses:
lt_of_not_ge,LE.le,Mathlib.Tactic.Linarith.lt_irrefl,Eq.mp,HMul.hMul,Neg.neg,congrArg,Mathlib.Tactic.Ring.of_eq,Mathlib.Tactic.Ring.Common.add_congr,Nat.rawCast,Mathlib.Meta.NormNum.instAddMonoidWithOne,inferInstance,Ring,Int.rawCast,Int.negOfNat,Mathlib.Tactic.Ring.Common.mul_congr,Mathlib.Tactic.Ring.cast_pos,Mathlib.Meta.NormNum.isNat_ofNat,Eq.refl,Mathlib.Tactic.Ring.Common.neg_congrand 65 more100 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
- theorem
Imo1969P1.right_factor_largeline 56 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Int,LT.lt,OfNat.ofNat,HAdd.hAdd,HPow.hPow,NatProof uses:
lt_of_not_ge,LE.le,Mathlib.Tactic.Linarith.lt_irrefl,Eq.mp,HMul.hMul,Neg.neg,HSub.hSub,congrArg,Mathlib.Tactic.Ring.of_eq,Mathlib.Tactic.Ring.Common.add_congr,Nat.rawCast,Mathlib.Meta.NormNum.instAddMonoidWithOne,inferInstance,Ring,Int.rawCast,Int.negOfNat,Mathlib.Tactic.Ring.Common.mul_congr,Mathlib.Tactic.Ring.cast_pos,Mathlib.Meta.NormNum.isNat_ofNat,Eq.refland 66 more97 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
- theorem
Imo1969P1.int_largeline 62 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Int,LT.lt,OfNat.ofNat,Nat,Int.natAbsProof uses:
cast,Eq.trans,congrFun',congrArg,Eq.symm,Nat.cast_one,lt_of_lt_of_le,Int.le_natAbs23 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
- theorem
Imo1969P1.not_prime_of_int_mul'line 65 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Int,Nat,LT.lt,OfNat.ofNat,Eq,HMul.hMul,Not,Nat.PrimeProof uses:
Int.not_prime_of_int_mul,LT.lt.ne',Int.natAbs, Imo1969P1.int_large14 instances, coercions and auxiliary constants left out.
- theorem
Imo1969P1.polynomial_not_primeEvery natural number of the formn^4 + 4*m^4is not prime line 70 sourceSource documentation
Every natural number of the form
n^4 + 4*m^4is not prime.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Nat,LT.lt,OfNat.ofNat,Not,Nat.Prime,HAdd.hAdd,HPow.hPow,HMul.hMulProof uses:
Int,Iff.mpr,Int.ofNat_lt, Imo1969P1.not_prime_of_int_mul',HSub.hSub, Imo1969P1.left_factor_large, Imo1969P1.right_factor_large, Imo1969P1.factorization28 instances, coercions and auxiliary constants left out.
Tactic trace: 3 steps
Open to load the checked before-and-after goal states.
theorem polynomial_not_prime {m : ℕ} (h1 : 1 < m) (n : ℕ) : ¬Nat.Prime (n ^ 4 + 4 * m ^ 4) := by … - def
Imo1969P1.aChoiceWe define $a_{choice}(b) := 4*(2+b)^4$, so that we can take $m = 2+b$ inpolynomial_not_primeline 77 sourceSource documentation
We define $a_{choice}(b) := 4*(2+b)^4$, so that we can take $m = 2+b$ in
polynomial_not_prime.standard axioms: propext what this means
Statement uses:
NatProof uses:
HMul.hMul,OfNat.ofNat,HPow.hPow,HAdd.hAdd9 instances, coercions and auxiliary constants left out.
def aChoice (b : ℕ) : ℕ := 4 * (2 + b) ^ 4
- theorem
Imo1969P1.aChoice_goodline 79 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Nat,Membership.mem,Set, Imo1969P1.goodNats, Imo1969P1.aChoiceProof uses: Imo1969P1.polynomial_not_prime,
HAdd.hAdd,OfNat.ofNat,LT.lt6 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
- theorem
Imo1969P1.aChoice_strictMonoaChoiceis a strictly monotone function; this is easily proven by chaining together lemmas in thestrictMononamespace line 84 sourceSource documentation
aChoiceis a strictly monotone function; this is easily proven by chaining together lemmas in thestrictMononamespace.standard axioms: propext what this means
Statement uses:
StrictMono,Nat, Imo1969P1.aChoiceProof uses:
StrictMono.const_mul,OfNat.ofNat,HPow.hPow,HAdd.hAdd,id,StrictMono.nat_pow,of_decide_eq_true,Ne,Eq,Bool,Decidable.decide,Bool.true,Eq.refl,StrictMono.const_add,strictMono_id,LT.lt29 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
theorem aChoice_strictMono : StrictMono aChoice := …
Mentions: Imo1969P1.aChoice
- problem
Imo1969P1.imo1969_p1line 92 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Set.Infinite,Nat,Set.ofPred,Not,Nat.Prime,HAdd.hAdd,HPow.hPow,OfNat.ofNatProof uses:
Set.infinite_of_injective_forall_mem, Imo1969P1.aChoice,StrictMono.injective, Imo1969P1.aChoice_strictMono, Imo1969P1.aChoice_good17 instances, coercions and auxiliary constants left out.