Documentation

MazurTorsion.EllipticCurve.VariableChange

Isomorphism of point groups induced by a change of variables #

This file is ported from Michael Stoll's Apache-2.0 EllipticCurves project at commit 3f8c39c0fc4c0fd0a40e693aa2a9bbda08d9ee1f.

Mathlib's affine Point API provides the group homomorphism induced by a change of the base field for a fixed Weierstrass curve, but not the isomorphism of Mordell--Weil groups induced by an admissible change of variables between two different curves. For C : WeierstrassCurve.VariableChange F, the admissible change

(x, y) ↦ (u²x + r, u³y + u²sx + t)

gives the group isomorphism WeierstrassCurve.Affine.Point.equivVariableChange : (C • W).Point ≃+ W.Point. Its inverse is the explicit change of variables C⁻¹.

Transformation of the group-law formulae under a change of variables #

theorem WeierstrassCurve.Affine.variableChange_negY {F : Type u_1} [Field F] (W : WeierstrassCurve F) (C : VariableChange F) (x y : F) :
W.toAffine.negY (C.u ^ 2 * x + C.r) (C.u ^ 3 * y + C.u ^ 2 * C.s * x + C.t) = C.u ^ 3 * (C W).toAffine.negY x y + C.u ^ 2 * C.s * x + C.t
theorem WeierstrassCurve.Affine.variableChange_negY_ne {F : Type u_1} [Field F] (W : WeierstrassCurve F) (C : VariableChange F) {x₁ x₂ y₁ y₂ : F} (hxy : ¬(x₁ = x₂ y₁ = (C W).toAffine.negY x₂ y₂)) :
¬(C.u ^ 2 * x₁ + C.r = C.u ^ 2 * x₂ + C.r C.u ^ 3 * y₁ + C.u ^ 2 * C.s * x₁ + C.t = W.toAffine.negY (C.u ^ 2 * x₂ + C.r) (C.u ^ 3 * y₂ + C.u ^ 2 * C.s * x₂ + C.t))

The image of a pair of points under the change of variables satisfies the y₁ = -y₂ degeneracy condition only if the original pair does.

theorem WeierstrassCurve.Affine.variableChange_addX {F : Type u_1} [Field F] (W : WeierstrassCurve F) (C : VariableChange F) (x₁ x₂ : F) :
W.toAffine.addX (C.u ^ 2 * x₁ + C.r) (C.u ^ 2 * x₂ + C.r) (C.u * + C.s) = C.u ^ 2 * (C W).toAffine.addX x₁ x₂ + C.r
theorem WeierstrassCurve.Affine.variableChange_negAddY {F : Type u_1} [Field F] (W : WeierstrassCurve F) (C : VariableChange F) (x₁ x₂ y₁ : F) :
W.toAffine.negAddY (C.u ^ 2 * x₁ + C.r) (C.u ^ 2 * x₂ + C.r) (C.u ^ 3 * y₁ + C.u ^ 2 * C.s * x₁ + C.t) (C.u * + C.s) = C.u ^ 3 * (C W).toAffine.negAddY x₁ x₂ y₁ + C.u ^ 2 * C.s * (C W).toAffine.addX x₁ x₂ + C.t
theorem WeierstrassCurve.Affine.variableChange_addY {F : Type u_1} [Field F] (W : WeierstrassCurve F) (C : VariableChange F) (x₁ x₂ y₁ : F) :
W.toAffine.addY (C.u ^ 2 * x₁ + C.r) (C.u ^ 2 * x₂ + C.r) (C.u ^ 3 * y₁ + C.u ^ 2 * C.s * x₁ + C.t) (C.u * + C.s) = C.u ^ 3 * (C W).toAffine.addY x₁ x₂ y₁ + C.u ^ 2 * C.s * (C W).toAffine.addX x₁ x₂ + C.t
theorem WeierstrassCurve.Affine.variableChange_slope {F : Type u_1} [Field F] (W : WeierstrassCurve F) (C : VariableChange F) [DecidableEq F] {x₁ x₂ y₁ y₂ : F} (h₁ : (C W).toAffine.Equation x₁ y₁) (h₂ : (C W).toAffine.Equation x₂ y₂) (hxy : ¬(x₁ = x₂ y₁ = (C W).toAffine.negY x₂ y₂)) :
W.toAffine.slope (C.u ^ 2 * x₁ + C.r) (C.u ^ 2 * x₂ + C.r) (C.u ^ 3 * y₁ + C.u ^ 2 * C.s * x₁ + C.t) (C.u ^ 3 * y₂ + C.u ^ 2 * C.s * x₂ + C.t) = C.u * (C W).toAffine.slope x₁ x₂ y₁ y₂ + C.s
theorem WeierstrassCurve.Affine.variableChange_equation {F : Type u_1} [Field F] (W : WeierstrassCurve F) (C : VariableChange F) (x y : F) :
W.toAffine.Equation (C.u ^ 2 * x + C.r) (C.u ^ 3 * y + C.u ^ 2 * C.s * x + C.t) (C W).toAffine.Equation x y

A point (x, y) lies on C • W if and only if (u²x + r, u³y + u²sx + t) lies on W.

The induced isomorphism of point groups #

The underlying point map of the change of variables, sending 0 to 0.

Equations
Instances For
    theorem WeierstrassCurve.Affine.Point.mapVariableChangeFun_some {F : Type u_1} [Field F] (W : WeierstrassCurve F) (C : VariableChange F) [W.IsElliptic] {x y : F} (h : (C W).toAffine.Nonsingular x y) :
    mapVariableChangeFun W C (some x y h) = some (C.u ^ 2 * x + C.r) (C.u ^ 3 * y + C.u ^ 2 * C.s * x + C.t)
    theorem WeierstrassCurve.Affine.Point.some_eq_some {F : Type u_1} [Field F] (W : WeierstrassCurve F) {x₁ x₂ y₁ y₂ : F} (hx : x₁ = x₂) (hy : y₁ = y₂) {h₁ : W.toAffine.Nonsingular x₁ y₁} {h₂ : W.toAffine.Nonsingular x₂ y₂} :
    some x₁ y₁ h₁ = some x₂ y₂ h₂

    Transport of the affine point group along an equality of Weierstrass curves.

    Equations
    Instances For
      @[simp]
      theorem WeierstrassCurve.Affine.Point.equivOfEq_some {F : Type u_1} [Field F] [DecidableEq F] {V V' : WeierstrassCurve F} (h : V = V') {x y : F} (hns : V.toAffine.Nonsingular x y) :
      (equivOfEq h) (some x y hns) = some x y

      The group homomorphism induced by the admissible change of variables.

      Equations
      Instances For

        The point-group isomorphism induced by the admissible change of variables.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          theorem WeierstrassCurve.Affine.Point.equivVariableChange_some {F : Type u_1} [Field F] (W : WeierstrassCurve F) (C : VariableChange F) [W.IsElliptic] [DecidableEq F] {x y : F} (h : (C W).toAffine.Nonsingular x y) :
          (equivVariableChange W C) (some x y h) = some (C.u ^ 2 * x + C.r) (C.u ^ 3 * y + C.u ^ 2 * C.s * x + C.t)