FLT/Mathlib/AlgebraicGeometry/EllipticCurve/Affine/Point.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
17 declarations, 0 contain sorry, 0 declared as axioms
Isomorphism of point groups induced by a change of variables
Material for Mathlib.AlgebraicGeometry.EllipticCurve.Affine.Point; see the section
header below for details.
Imported by 3 files
- lemma
WeierstrassCurve.Affine.variableChange_negYline 54 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,WeierstrassCurve,WeierstrassCurve.VariableChange,Eq,WeierstrassCurve.Affine.negY,WeierstrassCurve.toAffine,HAdd.hAdd,HMul.hMul,HPow.hPow,Nat,WeierstrassCurve.VariableChange.u,OfNat.ofNat,WeierstrassCurve.VariableChange.r,WeierstrassCurve.VariableChange.s,WeierstrassCurve.VariableChange.t,HSMul.hSMulProof uses:
Eq.mpr,HSub.hSub,Neg.neg,WeierstrassCurve.a₁,WeierstrassCurve.a₃,Inv.inv,id,congr,congrArg,congrFun',Eq.trans,neg_add_rev,Units,Units.val_inv_eq_inv_val,inv_pow,inferInstance,CommGroupWithZero,GroupWithZero,Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq,Mathlib.Tactic.FieldSimp.NF.evaland 97 more109 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
- lemma
WeierstrassCurve.Affine.variableChange_negY_neThe image of a pair of points under the change of variables satisfies they₁ = -y₂degeneracy condition (negY) only if the original pair does line 63 sourceSource documentation
The image of a pair of points under the change of variables satisfies the
y₁ = -y₂degeneracy condition (negY) only if the original pair does.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,WeierstrassCurve,WeierstrassCurve.VariableChange,Not,And,Eq,WeierstrassCurve.Affine.negY,WeierstrassCurve.toAffine,HSMul.hSMul,HAdd.hAdd,HMul.hMul,HPow.hPow,Nat,WeierstrassCurve.VariableChange.u,OfNat.ofNat,WeierstrassCurve.VariableChange.r,WeierstrassCurve.VariableChange.s,WeierstrassCurve.VariableChange.tProof uses:
Ne,Units.ne_zero,False,mul_left_cancel₀,pow_ne_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.pow_congr,Mathlib.Tactic.Ring.Common.atom_pf,rfl,Eq.mpr,id,congrArg,Eq.symmand 46 more78 instances, coercions and auxiliary constants left out.
Tactic trace: 8 steps
Open to load the checked before-and-after goal states.
lemma variableChange_negY_ne {x₁ x₂ y₁ y₂ : F} (hxy : ¬(x₁ = x₂ ∧ y₁ = (C • W).toAffine.negY x₂ y₂)) : ¬((C.u : F) ^ 2 * x₁ + C.r = (C.u : F) ^ 2 * x₂ + C.r ∧ (C.u : F) ^ 3 * y₁ + (C.u : F) ^ 2 * C.s * x₁ + C.t = W.toAffine.negY ((C.u : F) ^ 2 * x₂ + C.r) ((C.u : F) ^ 3 * y₂ + (C.u : F) ^ 2 * C.s * x₂ + C.t)) := by … - lemma
WeierstrassCurve.Affine.variableChange_addXline 75 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,WeierstrassCurve,WeierstrassCurve.VariableChange,Eq,WeierstrassCurve.Affine.addX,WeierstrassCurve.toAffine,HAdd.hAdd,HMul.hMul,HPow.hPow,Nat,WeierstrassCurve.VariableChange.u,OfNat.ofNat,WeierstrassCurve.VariableChange.r,WeierstrassCurve.VariableChange.s,HSMul.hSMulProof uses:
Eq.mpr,HSub.hSub,WeierstrassCurve.a₁,WeierstrassCurve.a₂,Inv.inv,id,congrArg,congrFun',congr,Units,Units.val_inv_eq_inv_val,Eq.trans,inv_pow,inferInstance,CommGroupWithZero,GroupWithZero,Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq,Mathlib.Tactic.FieldSimp.NF.eval,List.nil,Prodand 95 more98 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
- lemma
WeierstrassCurve.Affine.variableChange_negAddYline 81 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,WeierstrassCurve,WeierstrassCurve.VariableChange,Eq,WeierstrassCurve.Affine.negAddY,WeierstrassCurve.toAffine,HAdd.hAdd,HMul.hMul,HPow.hPow,Nat,WeierstrassCurve.VariableChange.u,OfNat.ofNat,WeierstrassCurve.VariableChange.r,WeierstrassCurve.VariableChange.s,WeierstrassCurve.VariableChange.t,HSMul.hSMul,WeierstrassCurve.Affine.addXProof uses:
Eq.mpr,HSub.hSub,WeierstrassCurve.a₁,WeierstrassCurve.a₂,Inv.inv,id,congrArg,congrFun',congr,Units,Units.val_inv_eq_inv_val,Eq.trans,inv_pow,inferInstance,CommGroupWithZero,GroupWithZero,Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq,Mathlib.Tactic.FieldSimp.NF.eval,List.nil,Prodand 96 more99 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
- lemma
WeierstrassCurve.Affine.variableChange_addYline 89 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,WeierstrassCurve,WeierstrassCurve.VariableChange,Eq,WeierstrassCurve.Affine.addY,WeierstrassCurve.toAffine,HAdd.hAdd,HMul.hMul,HPow.hPow,Nat,WeierstrassCurve.VariableChange.u,OfNat.ofNat,WeierstrassCurve.VariableChange.r,WeierstrassCurve.VariableChange.s,WeierstrassCurve.VariableChange.t,HSMul.hSMul,WeierstrassCurve.Affine.addXProof uses:
of_eq_true,WeierstrassCurve.Affine.negY,WeierstrassCurve.Affine.negAddY,Eq.trans,True,congrFun',congrArg,congr, WeierstrassCurve.Affine.variableChange_addX, WeierstrassCurve.Affine.variableChange_negAddY, WeierstrassCurve.Affine.variableChange_negY,eq_self36 instances, coercions and auxiliary constants left out.
Tactic trace: 1 steps
Open to load the checked before-and-after goal states.
- lemma
WeierstrassCurve.Affine.variableChange_slopeline 96 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,WeierstrassCurve,WeierstrassCurve.VariableChange,DecidableEq,WeierstrassCurve.Affine.Equation,WeierstrassCurve.toAffine,HSMul.hSMul,Not,And,Eq,WeierstrassCurve.Affine.negY,WeierstrassCurve.Affine.slope,HAdd.hAdd,HMul.hMul,HPow.hPow,Nat,WeierstrassCurve.VariableChange.u,OfNat.ofNat,WeierstrassCurve.VariableChange.r,WeierstrassCurve.VariableChange.sand 1 moreProof uses:
Ne,Units.ne_zero,Or,eq_or_ne,And.intro,rfl,Eq.mpr,id,congrArg, WeierstrassCurve.Affine.variableChange_negY,mul_left_cancel₀,pow_ne_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_congrand 120 more127 instances, coercions and auxiliary constants left out.
Tactic trace: 19 steps
Open to load the checked before-and-after goal states.
- lemma
WeierstrassCurve.Affine.variableChange_equationA point(x, y)lies onC • Wif and only if(u²x + r, u³y + u²sx + t)lies onW: the change of variables scales the Weierstrass polynomial byu⁶line 126 sourceSource documentation
A point
(x, y)lies onC • Wif and only if(u²x + r, u³y + u²sx + t)lies onW: the change of variables scales the Weierstrass polynomial byu⁶.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,WeierstrassCurve,WeierstrassCurve.VariableChange,Iff,WeierstrassCurve.Affine.Equation,WeierstrassCurve.toAffine,HAdd.hAdd,HMul.hMul,HPow.hPow,Nat,WeierstrassCurve.VariableChange.u,OfNat.ofNat,WeierstrassCurve.VariableChange.r,WeierstrassCurve.VariableChange.s,WeierstrassCurve.VariableChange.t,HSMul.hSMulProof uses:
Ne,Units.ne_zero,Eq.mpr,Eq,HSub.hSub,inferInstance,CommGroupWithZero,GroupWithZero,WeierstrassCurve.a₁,WeierstrassCurve.a₃,WeierstrassCurve.a₂,WeierstrassCurve.a₄,WeierstrassCurve.a₆,id,Eq.trans,congr,congrArg,Mathlib.Tactic.FieldSimp.eq_eq_cancel_eq,Mathlib.Tactic.FieldSimp.NF.eval,List.niland 101 more104 instances, coercions and auxiliary constants left out.
Tactic trace: 4 steps
Open to load the checked before-and-after goal states.
lemma variableChange_equation (x y : F) : W.toAffine.Equation ((C.u : F) ^ 2 * x + C.r) ((C.u : F) ^ 3 * y + (C.u : F) ^ 2 * C.s * x + C.t) ↔ (C • W).toAffine.Equation x y := by … - def
WeierstrassCurve.Affine.Point.mapVariableChangeFunThe underlying map(C • W).Point → W.Pointof the change of variables, sending0to0and(x, y)to(u²x + r, u³y + u²sx + t)line 143 sourceSource documentation
The underlying map
(C • W).Point → W.Pointof the change of variables, sending0to0and(x, y)to(u²x + r, u³y + u²sx + t).standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,WeierstrassCurve,WeierstrassCurve.VariableChange,WeierstrassCurve.IsElliptic,WeierstrassCurve.Affine.Point,WeierstrassCurve.toAffine,HSMul.hSMulProof uses:
WeierstrassCurve.Affine.Point.mapVariableChangeFun.match_1,Unit,WeierstrassCurve.Affine.Point.zero,WeierstrassCurve.Affine.Nonsingular,WeierstrassCurve.Affine.Point.some,HAdd.hAdd,HMul.hMul,HPow.hPow,Nat,WeierstrassCurve.VariableChange.u,OfNat.ofNat,WeierstrassCurve.VariableChange.r,WeierstrassCurve.VariableChange.s,WeierstrassCurve.VariableChange.t22 instances, coercions and auxiliary constants left out.
def mapVariableChangeFun : (C • W).toAffine.Point → W.toAffine.Point | .zero => .zero | .some x y h => .some ((C.u : F) ^ 2 * x + C.r) ((C.u : F) ^ 3 * y + (C.u : F) ^ 2 * C.s * x + C.t) (equation_iff_nonsingular.mp ((variableChange_equation W C x y).mpr (equation_iff_nonsingular.mpr h))) - lemma
WeierstrassCurve.Affine.Point.mapVariableChangeFun_zeroline 150 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,WeierstrassCurve,WeierstrassCurve.VariableChange,WeierstrassCurve.IsElliptic,Eq,WeierstrassCurve.Affine.Point,WeierstrassCurve.toAffine, WeierstrassCurve.Affine.Point.mapVariableChangeFun,OfNat.ofNat,HSMul.hSMulProof uses:
rfl10 instances, coercions and auxiliary constants left out.
- lemma
WeierstrassCurve.Affine.Point.mapVariableChangeFun_someline 152 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,WeierstrassCurve,WeierstrassCurve.VariableChange,WeierstrassCurve.IsElliptic,WeierstrassCurve.Affine.Nonsingular,WeierstrassCurve.toAffine,HSMul.hSMul,Eq,WeierstrassCurve.Affine.Point, WeierstrassCurve.Affine.Point.mapVariableChangeFun,WeierstrassCurve.Affine.Point.some,HAdd.hAdd,HMul.hMul,HPow.hPow,Nat,WeierstrassCurve.VariableChange.u,OfNat.ofNat,WeierstrassCurve.VariableChange.r,WeierstrassCurve.VariableChange.s,WeierstrassCurve.VariableChange.tand 5 moreProof uses:
rfl24 instances, coercions and auxiliary constants left out.
- lemma
WeierstrassCurve.Affine.Point.some_eq_someline 158 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,WeierstrassCurve,Eq,WeierstrassCurve.Affine.Nonsingular,WeierstrassCurve.toAffine,WeierstrassCurve.Affine.Point,WeierstrassCurve.Affine.Point.someProof uses:
Eq.refl3 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
- lemma
WeierstrassCurve.Affine.Point.mapVariableChangeFun_injectiveline 163 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,WeierstrassCurve,WeierstrassCurve.VariableChange,WeierstrassCurve.IsElliptic,Function.Injective,WeierstrassCurve.Affine.Point,WeierstrassCurve.toAffine,HSMul.hSMul, WeierstrassCurve.Affine.Point.mapVariableChangeFunProof uses:
Ne,WeierstrassCurve.VariableChange.u,OfNat.ofNat,Units.ne_zero,Eq,WeierstrassCurve.Affine.Point.zero,Eq.refl,WeierstrassCurve.Affine.Nonsingular,WeierstrassCurve.Affine.Point.some,False.elim,Eq.mp,False,eq_false',HAdd.hAdd,HMul.hMul,HPow.hPow,Nat,WeierstrassCurve.VariableChange.r,WeierstrassCurve.VariableChange.s,WeierstrassCurve.VariableChange.tand 72 more65 instances, coercions and auxiliary constants left out.
Tactic trace: 15 steps
Open to load the checked before-and-after goal states.
- def
WeierstrassCurve.Affine.Point.equivOfEqTransport of the affine point group along an equality of Weierstrass curves line 179 sourceSource documentation
Transport of the affine point group along an equality of Weierstrass curves.
standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,DecidableEq,WeierstrassCurve,Eq,AddEquiv,WeierstrassCurve.Affine.Point,WeierstrassCurve.toAffineProof uses:
AddEquiv.refl5 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
def equivOfEq {V V' : WeierstrassCurve F} (h : V = V') : V.toAffine.Point ≃+ V'.toAffine.Point := by … - lemma
WeierstrassCurve.Affine.Point.equivOfEq_someline 183 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,DecidableEq,WeierstrassCurve,Eq,WeierstrassCurve.Affine.Nonsingular,WeierstrassCurve.toAffine,WeierstrassCurve.Affine.Point,AddEquiv, WeierstrassCurve.Affine.Point.equivOfEq,WeierstrassCurve.Affine.Point.some,Eq.recProof uses:
Eq.refl10 instances, coercions and auxiliary constants left out.
Tactic trace: 2 steps
Open to load the checked before-and-after goal states.
- def
WeierstrassCurve.Affine.Point.mapVariableChangeThe group homomorphism(C • W).Point →+ W.Pointinduced by the admissible change of variables(x, y) ↦ (u²x + r, u³y + u²sx + t)line 190 sourceSource documentation
The group homomorphism
(C • W).Point →+ W.Pointinduced by the admissible change of variables(x, y) ↦ (u²x + r, u³y + u²sx + t).standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,WeierstrassCurve,WeierstrassCurve.VariableChange,WeierstrassCurve.IsElliptic,DecidableEq,AddMonoidHom,WeierstrassCurve.Affine.Point,WeierstrassCurve.toAffine,HSMul.hSMulProof uses:
AddMonoidHom.mk,ZeroHom.mk, WeierstrassCurve.Affine.Point.mapVariableChangeFun13 instances, coercions and auxiliary constants left out.
Tactic trace: 17 steps
Open to load the checked before-and-after goal states.
def mapVariableChange : (C • W).toAffine.Point →+ W.toAffine.Point where …
- def
WeierstrassCurve.Affine.Point.equivVariableChangeThe group isomorphism(C • W).Point ≃+ W.Pointinduced by the admissible change of variables(x, y) ↦ (u²x + r, u³y + u²sx + t), with inverse coming fromC⁻¹line 209 sourceSource documentation
The group isomorphism
(C • W).Point ≃+ W.Pointinduced by the admissible change of variables(x, y) ↦ (u²x + r, u³y + u²sx + t), with inverse coming fromC⁻¹.standard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,WeierstrassCurve,WeierstrassCurve.VariableChange,WeierstrassCurve.IsElliptic,DecidableEq,AddEquiv,WeierstrassCurve.Affine.Point,WeierstrassCurve.toAffine,HSMul.hSMulProof uses:
Eq, WeierstrassCurve.Affine.Point.mapVariableChangeFun,Inv.inv, WeierstrassCurve.Affine.Point.equivOfEq,AddEquiv.mk,Equiv.mk25 instances, coercions and auxiliary constants left out.
Tactic trace: 10 steps
Open to load the checked before-and-after goal states.
def equivVariableChange : (C • W).toAffine.Point ≃+ W.toAffine.Point := …
- lemma
WeierstrassCurve.Affine.Point.equivVariableChange_someline 225 sourcestandard axioms: Classical.choice, Quot.sound, propext what this means
Statement uses:
Field,WeierstrassCurve,WeierstrassCurve.VariableChange,WeierstrassCurve.IsElliptic,DecidableEq,WeierstrassCurve.Affine.Nonsingular,WeierstrassCurve.toAffine,HSMul.hSMul,Eq,WeierstrassCurve.Affine.Point,AddEquiv, WeierstrassCurve.Affine.Point.equivVariableChange,WeierstrassCurve.Affine.Point.some,HAdd.hAdd,HMul.hMul,HPow.hPow,Nat,WeierstrassCurve.VariableChange.u,OfNat.ofNat,WeierstrassCurve.VariableChange.rand 7 moreProof uses:
rfl32 instances, coercions and auxiliary constants left out.