Documentation

Mathlib.AlgebraicGeometry.EllipticCurve.Affine.Basic

Weierstrass equations and the nonsingular condition in affine coordinates #

Let W be a Weierstrass curve over a commutative ring R with coefficients aᵢ. An affine point on W is a tuple (x, y) of elements in R satisfying the Weierstrass equation W(X, Y) = 0 in affine coordinates, where W(X, Y) := Y² + a₁XY + a₃Y - (X³ + a₂X² + a₄X + a₆). It is nonsingular if its partial derivatives W_X(x, y) and W_Y(x, y) do not vanish simultaneously.

This file defines polynomials associated to Weierstrass equations and the nonsingular condition in affine coordinates. The group law on the actual type of nonsingular points in affine coordinates will be defined in Mathlib/AlgebraicGeometry/EllipticCurve/Affine/Point.lean, based on the formulae for group operations in Mathlib/AlgebraicGeometry/EllipticCurve/Affine/Formula.lean.

Main definitions #

Main statements #

Implementation notes #

All definitions and lemmas for Weierstrass curves in affine coordinates live in the namespace WeierstrassCurve.Affine to distinguish them from those in other coordinates. This is simply an abbreviation for WeierstrassCurve that can be converted using WeierstrassCurve.toAffine.

References #

[J Silverman, The Arithmetic of Elliptic Curves][silverman2009]

Tags #

elliptic curve, affine, Weierstrass equation, nonsingular

Affine coordinates #

@[reducible, inline]

An abbreviation for a Weierstrass curve in affine coordinates.

Equations
    Instances For
      @[reducible, inline]

      The conversion from a Weierstrass curve to affine coordinates.

      Equations
        Instances For

          Weierstrass equations in affine coordinates #

          noncomputable def WeierstrassCurve.Affine.polynomial {R : Type r} [CommRing R] (W : Affine R) :

          The polynomial W(X, Y) := Y² + a₁XY + a₃Y - (X³ + a₂X² + a₄X + a₆) associated to a Weierstrass curve W over a ring R in affine coordinates.

          For ease of polynomial manipulation, this is represented as a term of type R[X][X], where the inner variable represents X and the outer variable represents Y. For clarity, the alternative notations Y and R[X][Y] are provided in the Polynomial.Bivariate scope to represent the outer variable and the bivariate polynomial ring R[X][X] respectively.

          Equations
            Instances For
              theorem WeierstrassCurve.Affine.polynomial_eq {R : Type r} [CommRing R] {W : Affine R} :
              W.polynomial = { a := 0, b := 1, c := { a := 0, b := 0, c := W.a₁, d := W.a₃ }.toPoly, d := { a := -1, b := -W.a₂, c := -W.a₄, d := -W.a₆ }.toPoly }.toPoly
              theorem WeierstrassCurve.Affine.evalEval_polynomial {R : Type r} [CommRing R] {W : Affine R} (x y : R) :
              Polynomial.evalEval x y W.polynomial = y ^ 2 + W.a₁ * x * y + W.a₃ * y - (x ^ 3 + W.a₂ * x ^ 2 + W.a₄ * x + W.a₆)
              def WeierstrassCurve.Affine.Equation {R : Type r} [CommRing R] (W : Affine R) (x y : R) :

              The proposition that an affine point (x, y) lies in a Weierstrass curve W.

              In other words, it satisfies the Weierstrass equation W(X, Y) = 0.

              Equations
                Instances For
                  theorem WeierstrassCurve.Affine.equation_iff' {R : Type r} [CommRing R] {W : Affine R} (x y : R) :
                  W.Equation x y y ^ 2 + W.a₁ * x * y + W.a₃ * y - (x ^ 3 + W.a₂ * x ^ 2 + W.a₄ * x + W.a₆) = 0
                  theorem WeierstrassCurve.Affine.equation_iff {R : Type r} [CommRing R] {W : Affine R} (x y : R) :
                  W.Equation x y y ^ 2 + W.a₁ * x * y + W.a₃ * y = x ^ 3 + W.a₂ * x ^ 2 + W.a₄ * x + W.a₆
                  @[simp]
                  theorem WeierstrassCurve.Affine.equation_iff_variableChange {R : Type r} [CommRing R] {W : Affine R} (x y : R) :
                  W.Equation x y (toAffine ({ u := 1, r := x, s := 0, t := y } W)).Equation 0 0

                  The nonsingular condition in affine coordinates #

                  The partial derivative W_X(X, Y) with respect to X of the polynomial W(X, Y) associated to a Weierstrass curve W in affine coordinates.

                  Equations
                    Instances For
                      theorem WeierstrassCurve.Affine.evalEval_polynomialX {R : Type r} [CommRing R] {W : Affine R} (x y : R) :
                      Polynomial.evalEval x y W.polynomialX = W.a₁ * y - (3 * x ^ 2 + 2 * W.a₂ * x + W.a₄)

                      The partial derivative W_Y(X, Y) with respect to Y of the polynomial W(X, Y) associated to a Weierstrass curve W in affine coordinates.

                      Equations
                        Instances For
                          def WeierstrassCurve.Affine.Nonsingular {R : Type r} [CommRing R] (W : Affine R) (x y : R) :

                          The proposition that an affine point (x, y) on a Weierstrass curve W is nonsingular.

                          In other words, either W_X(x, y) ≠ 0 or W_Y(x, y) ≠ 0.

                          Note that this definition is only mathematically accurate for fields.

                          Equations
                            Instances For
                              theorem WeierstrassCurve.Affine.nonsingular_iff' {R : Type r} [CommRing R] {W : Affine R} (x y : R) :
                              W.Nonsingular x y W.Equation x y (W.a₁ * y - (3 * x ^ 2 + 2 * W.a₂ * x + W.a₄) 0 2 * y + W.a₁ * x + W.a₃ 0)
                              theorem WeierstrassCurve.Affine.nonsingular_iff {R : Type r} [CommRing R] {W : Affine R} (x y : R) :
                              W.Nonsingular x y W.Equation x y (W.a₁ * y 3 * x ^ 2 + 2 * W.a₂ * x + W.a₄ y -y - W.a₁ * x - W.a₃)
                              @[simp]
                              theorem WeierstrassCurve.Affine.nonsingular_iff_variableChange {R : Type r} [CommRing R] {W : Affine R} (x y : R) :
                              W.Nonsingular x y (toAffine ({ u := 1, r := x, s := 0, t := y } W)).Nonsingular 0 0
                              @[deprecated WeierstrassCurve.Affine.equation_iff_nonsingular_of_Δ_ne_zero (since := "2025-03-01")]
                              theorem WeierstrassCurve.Affine.nonsingular_zero_of_Δ_ne_zero {R : Type r} [CommRing R] {W : Affine R} {x y : R} ( : Δ W 0) :

                              Alias of WeierstrassCurve.Affine.equation_iff_nonsingular_of_Δ_ne_zero.

                              @[deprecated WeierstrassCurve.Affine.equation_iff_nonsingular_of_Δ_ne_zero (since := "2025-03-01")]
                              theorem WeierstrassCurve.Affine.nonsingular_of_Δ_ne_zero {R : Type r} [CommRing R] {W : Affine R} {x y : R} ( : Δ W 0) :

                              Alias of WeierstrassCurve.Affine.equation_iff_nonsingular_of_Δ_ne_zero.

                              @[deprecated WeierstrassCurve.Affine.equation_iff_nonsingular (since := "2025-03-01")]

                              Alias of WeierstrassCurve.Affine.equation_iff_nonsingular.

                              Maps and base changes #

                              theorem WeierstrassCurve.Affine.Equation.map {R : Type r} {S : Type s} [CommRing R] [CommRing S] {W : Affine R} (f : R →+* S) {x y : R} (h : W.Equation x y) :
                              theorem WeierstrassCurve.Affine.map_equation {R : Type r} {S : Type s} [CommRing R] [CommRing S] {W : Affine R} {f : R →+* S} (x y : R) (hf : Function.Injective f) :
                              (map W f).toAffine.Equation (f x) (f y) W.Equation x y
                              theorem WeierstrassCurve.Affine.map_nonsingular {R : Type r} {S : Type s} [CommRing R] [CommRing S] {W : Affine R} {f : R →+* S} (x y : R) (hf : Function.Injective f) :
                              (map W f).toAffine.Nonsingular (f x) (f y) W.Nonsingular x y
                              theorem WeierstrassCurve.Affine.Equation.baseChange {R : Type r} {S : Type s} {A : Type u} {B : Type v} [CommRing R] [CommRing S] [CommRing A] [CommRing B] {W : Affine R} [Algebra R S] [Algebra R A] [Algebra S A] [IsScalarTower R S A] [Algebra R B] [Algebra S B] [IsScalarTower R S B] (f : A →ₐ[S] B) {x y : A} (h : (WeierstrassCurve.baseChange W A).toAffine.Equation x y) :
                              theorem WeierstrassCurve.Affine.baseChange_equation {R : Type r} {S : Type s} {A : Type u} {B : Type v} [CommRing R] [CommRing S] [CommRing A] [CommRing B] {W : Affine R} [Algebra R S] [Algebra R A] [Algebra S A] [IsScalarTower R S A] [Algebra R B] [Algebra S B] [IsScalarTower R S B] {f : A →ₐ[S] B} (x y : A) (hf : Function.Injective f) :
                              theorem WeierstrassCurve.Affine.baseChange_nonsingular {R : Type r} {S : Type s} {A : Type u} {B : Type v} [CommRing R] [CommRing S] [CommRing A] [CommRing B] {W : Affine R} [Algebra R S] [Algebra R A] [Algebra S A] [IsScalarTower R S A] [Algebra R B] [Algebra S B] [IsScalarTower R S B] {f : A →ₐ[S] B} (x y : A) (hf : Function.Injective f) :