FLT/Mathlib/AlgebraicGeometry/EllipticCurve/Weierstrass.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
5 declarations, 0 contain sorry, 0 declared as axioms
Complements on Weierstrass curves
Material for Mathlib.AlgebraicGeometry.EllipticCurve.Weierstrass: ellipticity of base
changes, the discriminant identity behind split multiplicative reduction, c₆ = 0 ↔ j = 1728,
and a₁ ≠ 0 ∨ a₃ ≠ 0 in characteristic 2.
Imported by 3 files
- instance
WeierstrassCurve.(instance at line 27)line 27 sourceSource documentation
The base change of an elliptic curve is an elliptic curve. Restates the instance for
WeierstrassCurve.map, which does not apply tobaseChangedirectly since the latter is a non-reducible definition.instance {R A : Type*} [CommRing R] [CommRing A] [Algebra R A] (W : WeierstrassCurve R) [W.IsElliptic] : (W.baseChange A).IsElliptic := … - theorem
WeierstrassCurve.splitPolynomial_discrimThe discriminant of the node's tangent polynomialc₄ T² + a₁ c₄ T - (54 b₆ - 3 b₂ b₄ + a₂ c₄)(the quadratic controlling split multiplicative reduction) equals-c₄ c₆line 40 sourceSource documentation
The discriminant of the node's tangent polynomial
c₄ T² + a₁ c₄ T - (54 b₆ - 3 b₂ b₄ + a₂ c₄)(the quadratic controlling split multiplicative reduction) equals-c₄ c₆. Hence the tangent directions at the node are rational over the residue field exactly when-c₄ c₆is a square there; twisting by(t, n)multiplies-c₄ c₆by(t² - 4n)⁵ = (t² - 4n)⁴ · (t² - 4n), i.e. by the twisting parameter up to a square (seec₄_quadraticTwistOf,c₆_quadraticTwistOf).standard axioms: Quot.sound, propext what this means
Statement uses:
CommRing,WeierstrassCurve,Eq,HAdd.hAdd,HPow.hPow,Nat,HMul.hMul,WeierstrassCurve.a₁,WeierstrassCurve.c₄,OfNat.ofNat,HSub.hSub,WeierstrassCurve.b₆,WeierstrassCurve.b₂,WeierstrassCurve.b₄,WeierstrassCurve.a₂,Neg.neg,WeierstrassCurve.c₆Proof uses:
id,Mathlib.Tactic.Ring.of_eq,WeierstrassCurve.a₄,WeierstrassCurve.a₃,WeierstrassCurve.a₆,Nat.rawCast,Mathlib.Meta.NormNum.instAddMonoidWithOne,inferInstance,Ring,Int.rawCast,Int.negOfNat,Mathlib.Tactic.Ring.Common.add_congr,Mathlib.Tactic.Ring.Common.pow_congr,Mathlib.Tactic.Ring.Common.mul_congr,Mathlib.Tactic.Ring.Common.atom_pf,rfl,Eq.mpr,congrArg,Eq.symm,Eq.refland 47 more72 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
theorem splitPolynomial_discrim : (E.a₁ * E.c₄) ^ 2 + 4 * E.c₄ * (54 * E.b₆ - 3 * E.b₂ * E.b₄ + E.a₂ * E.c₄) = -(E.c₄ * E.c₆) := by … - lemma
WeierstrassCurve.a₁_ne_zero_or_a₃_ne_zero_of_two_eq_zeroIn characteristic2, an elliptic curve hasa₁ ≠ 0ora₃ ≠ 0: otherwisea₁ = a₃ = 0makes the partial derivative∂/∂y = 2y + a₁x + a₃vanish identically, soΔ = 0line 51 sourceSource documentation
In characteristic
2, an elliptic curve hasa₁ ≠ 0ora₃ ≠ 0: otherwisea₁ = a₃ = 0makes the partial derivative∂/∂y = 2y + a₁x + a₃vanish identically, soΔ = 0.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,WeierstrassCurve,WeierstrassCurve.IsElliptic,Eq,OfNat.ofNat,Nat,Or,Ne,WeierstrassCurve.a₁,WeierstrassCurve.a₃Proof uses:
Classical.byContradiction,Not,IsUnit.ne_zero,WeierstrassCurve.Δ,WeierstrassCurve.isUnit_Δ,Eq.mpr,HAdd.hAdd,HSub.hSub,HMul.hMul,Neg.neg,HPow.hPow,WeierstrassCurve.b₂,WeierstrassCurve.b₈,WeierstrassCurve.b₄,WeierstrassCurve.b₆,id,congrArg,WeierstrassCurve.Δ.eq_1,WeierstrassCurve.a₆,WeierstrassCurve.a₂and 11 more66 instances, coercions and auxiliary constants left out.
Tactic trace: 4 steps
Open to load the checked before-and-after goal states.
lemma a₁_ne_zero_or_a₃_ne_zero_of_two_eq_zero [E.IsElliptic] (h2 : (2 : K) = 0) : E.a₁ ≠ 0 ∨ E.a₃ ≠ 0 := by … - lemma
WeierstrassCurve.c₆_eq_zero_iff_j_eq_1728c₆(E) = 0if and only ifj(E) = 1728, by the relation1728·Δ = c₄³ - c₆²line 58 sourceSource documentation
c₆(E) = 0if and only ifj(E) = 1728, by the relation1728·Δ = c₄³ - c₆². This is the analogue forj = 1728ofWeierstrassCurve.j_eq_zero_iff(j = 0 ↔ c₄ = 0).standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,WeierstrassCurve,WeierstrassCurve.IsElliptic,Iff,Eq,WeierstrassCurve.c₆,OfNat.ofNat,WeierstrassCurve.j,NatProof uses:
HPow.hPow,HSub.hSub,WeierstrassCurve.c₄,HMul.hMul,WeierstrassCurve.Δ,Mathlib.Tactic.LinearCombination.eq_of_eq,WeierstrassCurve.c_relation,Mathlib.Tactic.LinearCombination.eq_rearrange,HAdd.hAdd,Mathlib.Tactic.Ring.of_eq,Mathlib.Tactic.Ring.Common.sub_congr,Nat.rawCast,Mathlib.Tactic.Ring.Common.add_congr,Int.rawCast,inferInstance,Ring,Int.negOfNat,Mathlib.Tactic.Ring.Common.pow_congr,Mathlib.Tactic.Ring.Common.atom_pf,rfland 56 more81 instances, coercions and auxiliary constants left out.
Tactic trace: 3 steps
Open to load the checked before-and-after goal states.
lemma c₆_eq_zero_iff_j_eq_1728 [E.IsElliptic] : E.c₆ = 0 ↔ E.j = 1728 := by …
- lemma
WeierstrassCurve.baseChange_map_algebraMapline 68 sourcestandard axioms: Quot.sound, propext what this means
Statement uses:
Field,Algebra,IsScalarTower,WeierstrassCurve,Eq,WeierstrassCurve.map,WeierstrassCurve.baseChange,Algebra.algebraMapProof uses:
WeierstrassCurve.map_baseChange,IsScalarTower.toAlgHom19 instances, coercions and auxiliary constants left out.