FLT/Mathlib/Algebra/Polynomial/QuadraticDiscriminant.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 project documentation, Pinned FLT blueprint introduction
6 declarations, 0 contain sorry, 0 declared as axioms
Separability and splitting criteria for quadratic polynomials
Proposed new Mathlib file Mathlib.Algebra.Polynomial.QuadraticDiscriminant: a quadratic
over a field is separable iff its discriminant is nonzero, and splits iff its discriminant is
a square (in characteristic 2: iff its Artin–Schreier invariant is in the image of
z ↦ z² + z).
Imports (3)
Imported by 2 files
- theorem
Polynomial.derivative_quadraticThe derivative of the quadratica X² + b X + cis2 a X + bline 26 sourceSource documentation
The derivative of the quadratic
a X² + b X + cis2 a X + b.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
CommSemiring,Eq,Polynomial,LinearMap,RingHom.id,Polynomial.derivative,HAdd.hAdd,HMul.hMul,RingHom,Polynomial.C,HPow.hPow,Nat,Polynomial.X,OfNat.ofNatProof uses:
Eq.mpr,id,congrFun',congrArg,Eq.trans,Polynomial.derivative_add,congr,Polynomial.derivative_mul,Polynomial.derivative_C,MulZeroClass.zero_mul,Polynomial.derivative_X_pow_succ,Nat.cast_one,map_add,map_one,pow_one,zero_add,Polynomial.derivative_X,mul_one,add_zero,Mathlib.Tactic.Ring.of_eqand 24 more74 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
theorem derivative_quadratic {R : Type*} [CommSemiring R] (a b c : R) : derivative (C a * X ^ 2 + C b * X + C c) = 2 * C a * X + C b := by … - theorem
Polynomial.sq_derivative_quadratic_sub_mulThe Bézout-type identity(P')² - 4 a · P = C (b² - 4 a c)for the quadraticP = a X² + b X + c: the discriminant is an explicit combination ofPand its derivative line 33 sourceSource documentation
The Bézout-type identity
(P')² - 4 a · P = C (b² - 4 a c)for the quadraticP = a X² + b X + c: the discriminant is an explicit combination ofPand its derivative.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
CommRing,Eq,Polynomial,HSub.hSub,HPow.hPow,Nat,LinearMap,RingHom.id,Polynomial.derivative,HAdd.hAdd,HMul.hMul,RingHom,Polynomial.C,Polynomial.X,OfNat.ofNatProof uses:
Eq.mpr,id,congrArg, Polynomial.derivative_quadratic,Eq.trans,map_sub,congr,map_pow,map_mul,congrFun',map_ofNat,Mathlib.Tactic.Ring.of_eq,Nat.rawCast,Int.rawCast,inferInstance,Ring,Int.negOfNat,Mathlib.Tactic.Ring.Common.sub_congr,Mathlib.Tactic.Ring.Common.pow_congr,Mathlib.Tactic.Ring.Common.add_congrand 51 more94 instances, coercions and auxiliary constants left out.
Tactic trace: 3 steps
Open to load the checked before-and-after goal states.
theorem sq_derivative_quadratic_sub_mul {R : Type*} [CommRing R] (a b c : R) : derivative (C a * X ^ 2 + C b * X + C c) ^ 2 - 4 * C a * (C a * X ^ 2 + C b * X + C c) = C (b ^ 2 - 4 * a * c) := by … - theorem
Polynomial.separable_quadratic_iffA quadratic polynomiala X² + b X + c(witha ≠ 0) over a field is separable exactly when its discriminantb² - 4 a cis nonzero line 45 sourceSource documentation
A quadratic polynomial
a X² + b X + c(witha ≠ 0) over a field is separable exactly when its discriminantb² - 4 a cis nonzero. The←direction holds in every characteristic: by the Bézout identitysq_derivative_quadratic_sub_mul, a nonzero (hence invertible) discriminant exhibitsPandP'as coprime. The→direction argues that if the discriminant vanishes thenP ∣ (P')², forcing the coprimality witnessPto be a unit, contradictingdeg P = 2.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,Ne,OfNat.ofNat,Iff,Polynomial.Separable,HAdd.hAdd,Polynomial,HMul.hMul,RingHom,Polynomial.C,HPow.hPow,Nat,Polynomial.X,HSub.hSubProof uses:
Eq.mpr,id,Eq,congrArg,rfl,LinearMap,RingHom.id,Polynomial.derivative, Polynomial.sq_derivative_quadratic_sub_mul,Iff.intro,Dvd.dvd,Exists.intro,Mathlib.Tactic.LinearCombination.eq_of_eq,Eq.mp,map_zero,Mathlib.Tactic.LinearCombination.eq_rearrange,Mathlib.Tactic.Ring.of_eq,Mathlib.Tactic.Ring.Common.sub_congr,Nat.rawCast,Mathlib.Tactic.Ring.Common.add_congrand 75 more136 instances, coercions and auxiliary constants left out.
Tactic trace: 18 steps
Open to load the checked before-and-after goal states.
theorem separable_quadratic_iff {k : Type*} [Field k] {a b c : k} (ha : a ≠ 0) : (C a * X ^ 2 + C b * X + C c).Separable ↔ b ^ 2 - 4 * a * c ≠ 0 := by … - theorem
Polynomial.splits_quadratic_iff_exists_rootA quadratica X² + b X + c(a ≠ 0) over a field splits exactly when it has a root (Splits.of_natDegree_le_two_of_isRoot) line 66 sourceSource documentation
A quadratic
a X² + b X + c(a ≠ 0) over a field splits exactly when it has a root (Splits.of_natDegree_le_two_of_isRoot). This is the characteristic-free core of the split criterion.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,Ne,OfNat.ofNat,Iff,Polynomial.Splits,HAdd.hAdd,Polynomial,HMul.hMul,RingHom,Polynomial.C,HPow.hPow,Nat,Polynomial.X,Exists,EqProof uses:
Eq.mpr,id,congrArg,rfl,Polynomial.natDegree,Polynomial.natDegree_quadratic,False.elim,False,Eq.mp,Eq.trans,congrFun',Iff.intro,Polynomial.eval,Polynomial.Splits.exists_eval_eq_zero,of_eq_true,WithBot,Polynomial.degree,True,Polynomial.degree_eq_natDegree,Notand 64 more87 instances, coercions and auxiliary constants left out.
Tactic trace: 16 steps
Open to load the checked before-and-after goal states.
theorem splits_quadratic_iff_exists_root {k : Type*} [Field k] {a b c : k} (ha : a ≠ 0) : (C a * X ^ 2 + C b * X + C c).Splits ↔ ∃ x, a * x ^ 2 + b * x + c = 0 := by … - theorem
Polynomial.splits_quadratic_iffDocumented declaration: splits_quadratic_iff line 86 sourceSource documentation
Over a field of characteristic
≠ 2, a quadratica X² + b X + c(witha ≠ 0) splits exactly when its discriminantb² - 4 a cis a square: it splits iff it has a root (splits_quadratic_iff_exists_root), and completing the square (discrim_eq_sq_of_quadratic_eq_zero/exists_quadratic_eq_zero) matches roots with square roots of the discriminant. This is the split-multiplicative-reduction criterion; compareseparable_quadratic_iff(separable ↔ discriminant nonzero).standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,NeZero,OfNat.ofNat,Nat,Ne,Iff,Polynomial.Splits,HAdd.hAdd,Polynomial,HMul.hMul,RingHom,Polynomial.C,HPow.hPow,Polynomial.X,IsSquare,discrimProof uses:
Eq.mpr,Exists,Eq,id,congrArg,propext, Polynomial.splits_quadratic_iff_exists_root,Iff.intro,Exists.intro,discrim_eq_sq_of_quadratic_eq_zero,Mathlib.Tactic.LinearCombination.eq_of_eq,Mathlib.Tactic.LinearCombination.eq_rearrange,Mathlib.Tactic.Ring.of_eq,HSub.hSub,Mathlib.Tactic.Ring.Common.sub_congr,Nat.rawCast,Mathlib.Tactic.Ring.Common.add_congr,Mathlib.Tactic.Ring.Common.mul_congr,Mathlib.Tactic.Ring.Common.atom_pf,rfland 56 more83 instances, coercions and auxiliary constants left out.
Tactic trace: 14 steps
Open to load the checked before-and-after goal states.
theorem splits_quadratic_iff {k : Type*} [Field k] [NeZero (2 : k)] {a b c : k} (ha : a ≠ 0) : (C a * X ^ 2 + C b * X + C c).Splits ↔ IsSquare (discrim a b c) := by … - theorem
Polynomial.splits_quadratic_iff_of_two_eq_zeroDocumented declaration: splits_quadratic_iff_of_two_eq_zero line 102 sourceSource documentation
Over a field of characteristic
2, a separable quadratica X² + b X + c(a, b ≠ 0) splits exactly when its Artin–Schreier invarianta c / b²lies in the image ofz ↦ z² + z, written division-free as∃ z, b² (z² + z) = a c. (Substitutez = a x / bin a rootx.) In residue characteristic2this replaces the square-class criterionsplits_quadratic_iff, since thereb² - 4 a c = b², so separability already forcesb ≠ 0.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,Eq,OfNat.ofNat,Nat,Ne,Iff,Polynomial.Splits,HAdd.hAdd,Polynomial,HMul.hMul,RingHom,Polynomial.C,HPow.hPow,Polynomial.X,ExistsProof uses:
Eq.mpr,id,congrArg,propext, Polynomial.splits_quadratic_iff_exists_root,Iff.intro,Exists.intro,HDiv.hDiv,inferInstance,CommGroupWithZero,Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq,Mathlib.Tactic.FieldSimp.NF.eval,Mathlib.Tactic.FieldSimp.NF.cons,Prod.mk,Int,List.nil,Prod,Mathlib.Tactic.FieldSimp.eq_mul_of_eq_eq_eq_mul,Eq.trans,congr_arg₂and 94 more110 instances, coercions and auxiliary constants left out.
Tactic trace: 12 steps
Open to load the checked before-and-after goal states.
theorem splits_quadratic_iff_of_two_eq_zero {k : Type*} [Field k] (h2 : (2 : k) = 0) {a b c : k} (ha : a ≠ 0) (hb : b ≠ 0) : (C a * X ^ 2 + C b * X + C c).Splits ↔ ∃ z, b ^ 2 * (z ^ 2 + z) = a * c := by …