FLT/Mathlib/AlgebraicGeometry/EllipticCurve/Affine/Point.lean

GitHub source file

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.

Imports (1)
Imported by 3 files
  1. lemma WeierstrassCurve.Affine.variableChange_negY line 54 source

    standard 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.hSMul

    Proof 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.eval and 97 more

    109 instances, coercions and auxiliary constants left out.

    Tactic trace: 2 steps

    Open to load the checked before-and-after goal states.

  2. lemma WeierstrassCurve.Affine.variableChange_negY_ne 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 line 63 source

    Source 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.t

    Proof 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.symm and 46 more

    78 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
    …
  3. lemma WeierstrassCurve.Affine.variableChange_addX line 75 source

    standard 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.hSMul

    Proof 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, Prod and 95 more

    98 instances, coercions and auxiliary constants left out.

    Tactic trace: 2 steps

    Open to load the checked before-and-after goal states.

  4. lemma WeierstrassCurve.Affine.variableChange_negAddY line 81 source

    standard 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.addX

    Proof 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, Prod and 96 more

    99 instances, coercions and auxiliary constants left out.

    Tactic trace: 2 steps

    Open to load the checked before-and-after goal states.

  5. lemma WeierstrassCurve.Affine.variableChange_addY line 89 source

    standard 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.addX

    Proof 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_self

    36 instances, coercions and auxiliary constants left out.

    Tactic trace: 1 steps

    Open to load the checked before-and-after goal states.

  6. lemma WeierstrassCurve.Affine.variableChange_slope line 96 source

    standard 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.s and 1 more

    Proof 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_congr and 120 more

    127 instances, coercions and auxiliary constants left out.

    Tactic trace: 19 steps

    Open to load the checked before-and-after goal states.

  7. lemma WeierstrassCurve.Affine.variableChange_equation A point (x, y) lies on C • W if and only if (u²x + r, u³y + u²sx + t) lies on W: the change of variables scales the Weierstrass polynomial by u⁶ line 126 source

    Source documentation

    A point (x, y) lies on C • W if and only if (u²x + r, u³y + u²sx + t) lies on W: the change of variables scales the Weierstrass polynomial by u⁶.

    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.hSMul

    Proof 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.nil and 101 more

    104 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
    …
  8. def WeierstrassCurve.Affine.Point.mapVariableChangeFun The underlying map (C • W).Point → W.Point of the change of variables, sending 0 to 0 and (x, y) to (u²x + r, u³y + u²sx + t) line 143 source

    Source documentation

    The underlying map (C • W).Point → W.Point of the change of variables, sending 0 to 0 and (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.hSMul

    Proof 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.t

    22 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)))

    Mentions: WeierstrassCurve.Affine.variableChange_equation

  9. lemma WeierstrassCurve.Affine.Point.mapVariableChangeFun_zero line 150 source

    standard 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.hSMul

    Proof uses: rfl

    10 instances, coercions and auxiliary constants left out.

  10. lemma WeierstrassCurve.Affine.Point.mapVariableChangeFun_some line 152 source

    standard 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.t and 5 more

    Proof uses: rfl

    24 instances, coercions and auxiliary constants left out.

  11. lemma WeierstrassCurve.Affine.Point.some_eq_some line 158 source

    standard 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.some

    Proof uses: Eq.refl

    3 instances, coercions and auxiliary constants left out.

    Tactic trace: 2 steps

    Open to load the checked before-and-after goal states.

  12. lemma WeierstrassCurve.Affine.Point.mapVariableChangeFun_injective line 163 source

    standard 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.mapVariableChangeFun

    Proof 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.t and 72 more

    65 instances, coercions and auxiliary constants left out.

    Tactic trace: 15 steps

    Open to load the checked before-and-after goal states.

  13. def WeierstrassCurve.Affine.Point.equivOfEq Transport of the affine point group along an equality of Weierstrass curves line 179 source

    Source 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.toAffine

    Proof uses: AddEquiv.refl

    5 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
    …
  14. lemma WeierstrassCurve.Affine.Point.equivOfEq_some line 183 source

    standard 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.rec

    Proof uses: Eq.refl

    10 instances, coercions and auxiliary constants left out.

    Tactic trace: 2 steps

    Open to load the checked before-and-after goal states.

  15. def WeierstrassCurve.Affine.Point.mapVariableChange The group homomorphism (C • W).Point →+ W.Point induced by the admissible change of variables (x, y) ↦ (u²x + r, u³y + u²sx + t) line 190 source

    Source documentation

    The group homomorphism (C • W).Point →+ W.Point induced 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.hSMul

    Proof uses: AddMonoidHom.mk, ZeroHom.mk, WeierstrassCurve.Affine.Point.mapVariableChangeFun

    13 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
    …
  16. def WeierstrassCurve.Affine.Point.equivVariableChange The group isomorphism (C • W).Point ≃+ W.Point induced by the admissible change of variables (x, y) ↦ (u²x + r, u³y + u²sx + t), with inverse coming from C⁻¹ line 209 source

    Source documentation

    The group isomorphism (C • W).Point ≃+ W.Point induced by the admissible change of variables (x, y) ↦ (u²x + r, u³y + u²sx + t), with inverse coming from C⁻¹.

    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.hSMul

    Proof uses: Eq, WeierstrassCurve.Affine.Point.mapVariableChangeFun, Inv.inv, WeierstrassCurve.Affine.Point.equivOfEq, AddEquiv.mk, Equiv.mk

    25 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 :=
    …
  17. lemma WeierstrassCurve.Affine.Point.equivVariableChange_some line 225 source

    standard 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.r and 7 more

    Proof uses: rfl

    32 instances, coercions and auxiliary constants left out.