Documentation

EllipticCurves.WeierstrassFormalGroup.Chord

The Weierstrass fixed-point series and the chord data #

Source: MichaelStollBayreuth/EllipticCurves at commit 3f8c39c0fc4c0fd0a40e693aa2a9bbda08d9ee1f. Exact-pin changes are documented in PORTING.md.

For a Weierstrass curve W over a commutative ring O, this file builds the fixed-point series w(t) ∈ O⟦t⟧ (solution of w = t³ + a₁tw + a₂t²w + a₃w² + a₄tw² + a₆w³) and the two-variable chord data of the curve (t, w(t)): slopeSeries, interceptSeries, thirdRootSeries, addSeries, and the inverse inverseSeries, with their basic identities, the swap-invariance giving commutativity, the t₂ = 0 specialization, and naturality under coefficient-ring maps.

noncomputable def WeierstrassCurve.wStepAt {O : Type u_1} [CommRing O] (W : WeierstrassCurve O) (q v : PowerSeries O) :

The right-hand side of the Weierstrass equation in the coordinates (t, w), with the parameter series q in place of t and the unknown v in place of w.

Equations
Instances For
    noncomputable def WeierstrassCurve.wStep {O : Type u_1} [CommRing O] (W : WeierstrassCurve O) (w : PowerSeries O) :

    One step of the fixed-point iteration defining wSeries: the right-hand side of the Weierstrass equation in the coordinates (t, w).

    Equations
    Instances For
      noncomputable def WeierstrassCurve.wSeries {O : Type u_1} [CommRing O] (W : WeierstrassCurve O) :

      The power series w(t) ∈ O⟦t⟧ describing a Weierstrass curve near the origin in the coordinates t = -x/y, w = -1/y: the unique solution with w ≡ t³ mod t⁴ of the fixed-point equation wSeries_eq (Silverman, IV.1.1), obtained as the t-adic limit of the iteration of the right-hand side starting at 0.

      Equations
      Instances For

        The defining fixed-point equation of wSeries, i.e. the Weierstrass equation in the coordinates (t, w).

        noncomputable def WeierstrassCurve.vSeries {O : Type u_1} [CommRing O] (W : WeierstrassCurve O) :

        The unit part of wSeries: w = t³·v with v(0) = 1.

        Equations
        Instances For

          The chord construction #

          The slope and intercept of the chord through the points with parameters t₁, t₂ on the curve (t, w(t)), as power series in O⟦t₁, t₂⟧ (variables indexed by UnitUnit, as in the formal-group-law kit).

          The slope (divided difference) series λ(t₁, t₂) = (w(t₂) - w(t₁))/(t₂ - t₁), defined directly by its coefficients: the coefficient of t₁ⁱt₂ʲ is the coefficient of t^(i+j+1) in wSeries.

          Equations
          Instances For

            The defining property of the slope series: λ(t₁, t₂) · (t₂ - t₁) = w(t₂) - w(t₁).

            The intercept series ν(t₁, t₂) = w(t₁) - λ(t₁, t₂)·t₁ of the chord through the points with parameters t₁, t₂ on the curve (t, w(t)).

            Equations
            Instances For

              The intercept series is symmetric in the two parameters.

              The third-root series: the parameter t₃(t₁, t₂) of the third intersection point of the chord through the points with parameters t₁, t₂ with the curve (t, w(t)). By Vieta applied to the cubic in t obtained by substituting w = λt + ν into the Weierstrass equation, t₃ = -t₁ - t₂ - (a₁λ + a₂ν + a₃λ² + 2a₄λν + 3a₆λ²ν)/(1 + a₂λ + a₄λ² + a₆λ³).

              Equations
              • One or more equations did not get rendered due to their size.
              Instances For
                noncomputable def WeierstrassCurve.uSeries {O : Type u_1} [CommRing O] (W : WeierstrassCurve O) :

                The series u(t) = 1 - a₁t - a₃w(t): minus the denominator y of the coordinates x = t/w, y = -1/w of the negative of the point with parameter t, rescaled by w.

                Equations
                Instances For
                  noncomputable def WeierstrassCurve.inverseSeries {O : Type u_1} [CommRing O] (W : WeierstrassCurve O) :

                  The formal inverse parameter series: the parameter ι(t) = -t/(1 - a₁t - a₃w(t)) of the negative of the point with parameter t on the curve (t, w(t)).

                  Equations
                  Instances For

                    Composition with the formal inverse maps w to -w/u (the w-coordinate of the negative of a point).

                    Composition with the formal inverse maps u to its inverse.

                    noncomputable def WeierstrassCurve.addSeries {O : Type u_1} [CommRing O] (W : WeierstrassCurve O) :

                    The addition series of the chord construction: F(t₁, t₂) = ι(t₃(t₁, t₂)), the parameter of the sum of the points with parameters t₁, t₂.

                    Equations
                    Instances For

                      Swap-invariance of the chord data, giving commutativity of the formal group law.

                      Specialization of the chord data at t₂ = 0: the slope becomes w(t)/t, the intercept vanishes, and the third root becomes the formal inverse ι(t).

                      Specializing the third-root series at t₂ = 0 gives the formal inverse.

                      Adding the zero point does nothing: specialization of the addition series at t₂ = 0 is the identity.

                      Adding the zero point on the left does nothing either, by commutativity.

                      The linear coefficient of the addition series in the first variable is 1.

                      The linear coefficient of the addition series in the second variable is 1.

                      Below total degree 2, the addition series agrees with t₁ + t₂: the formal group law is F(t₁, t₂) = t₁ + t₂ + (higher order).

                      Naturality of the chord construction under coefficient ring maps #

                      Every ingredient of the chord construction commutes with base change along a ring homomorphism φ : O →+* O'. This is the reduction engine for associativity: it transports identities from the universal Weierstrass curve over ℤ[A₁, …, A₆] to any curve.

                      theorem WeierstrassCurve.map_wSeries {O : Type u_1} [CommRing O] (W : WeierstrassCurve O) {O' : Type u_2} [CommRing O'] (φ : O →+* O') :
                      theorem WeierstrassCurve.map_slopeSeries {O : Type u_1} [CommRing O] (W : WeierstrassCurve O) {O' : Type u_2} [CommRing O'] (φ : O →+* O') :
                      theorem WeierstrassCurve.map_uSeries {O : Type u_1} [CommRing O] (W : WeierstrassCurve O) {O' : Type u_2} [CommRing O'] (φ : O →+* O') :
                      theorem WeierstrassCurve.map_addSeries {O : Type u_1} [CommRing O] (W : WeierstrassCurve O) {O' : Type u_2} [CommRing O'] (φ : O →+* O') :