Documentation

Mathlib.AlgebraicGeometry.EllipticCurve.Affine.Point

Nonsingular points and the group law in affine coordinates #

Let W be a Weierstrass curve over a field F given by a Weierstrass equation W(X, Y) = 0 in affine coordinates. The type of nonsingular points in affine coordinates is an inductive, consisting of the unique point at infinity 𝓞 and nonsingular affine points (x, y). It can be endowed with a group law, with 𝓞 as the identity nonsingular point, which is uniquely determined by the formulae in Mathlib/AlgebraicGeometry/EllipticCurve/Affine/Formula.lean.

With this description, there is an addition-preserving injection from the nonsingular points to the ideal class group of the affine coordinate ring F[W] := F[X, Y] / ⟨W(X, Y)⟩. This is given by mapping 𝓞 to the trivial ideal class and a nonsingular affine point (x, y) to the ideal class of the invertible ideal ⟨X - x, Y - y⟩. Proving that this is well-defined and preserves addition reduces to equalities of ideals checked in WeierstrassCurve.Affine.CoordinateRing.XYIdeal_neg_mul and in WeierstrassCurve.Affine.CoordinateRing.XYIdeal_mul_XYIdeal via explicit ideal computations. Now F[W] is a free rank two F[X]-algebra with basis {1, Y}, so every element of F[W] is of the form p + qY for some p, q in F[X], and there is an algebra norm N : F[W] → F[X]. Injectivity can then be shown by computing the degree of such a norm N(p + qY) in two different ways, which is done in WeierstrassCurve.Affine.CoordinateRing.degree_norm_smul_basis and in the auxiliary lemmas in the proof of WeierstrassCurve.Affine.Point.instAddCommGroup.

This file defines the group law on nonsingular points in affine coordinates.

Main definitions #

Main statements #

References #

Tags #

elliptic curve, affine, point, group law, class group

The affine coordinate ring #

@[reducible, inline]

The affine coordinate ring R[W] := R[X, Y] / ⟨W(X, Y)⟩ of a Weierstrass curve W.

Equations
Instances For
    @[reducible, inline]

    The function field R(W) := Frac(R[W]) of a Weierstrass curve W.

    Equations
    Instances For
      @[reducible, inline]

      The natural ring homomorphism mapping R[X][Y] to R[W].

      Equations
      Instances For

        The power basis {1, Y} for R[W] over R[X].

        Equations
        Instances For
          theorem WeierstrassCurve.Affine.CoordinateRing.smul_basis_eq_zero {R : Type r} [CommRing R] {W' : Affine R} {p q : Polynomial R} (hpq : p 1 + q (mk W') Polynomial.X = 0) :
          p = 0 q = 0
          theorem WeierstrassCurve.Affine.CoordinateRing.smul_basis_mul_C {R : Type r} [CommRing R] {W' : Affine R} (y p q : Polynomial R) :
          (p 1 + q (mk W') Polynomial.X) * (mk W') (Polynomial.C y) = (p * y) 1 + (q * y) (mk W') Polynomial.X
          noncomputable def WeierstrassCurve.Affine.CoordinateRing.map {R : Type r} {S : Type s} [CommRing R] [CommRing S] (W' : Affine R) (f : R →+* S) :

          The ring homomorphism R[W] →+* S[W.map f] induced by a ring homomorphism f : R →+* S.

          Equations
          Instances For
            theorem WeierstrassCurve.Affine.CoordinateRing.map_mk {R : Type r} {S : Type s} [CommRing R] [CommRing S] {W' : Affine R} (f : R →+* S) (x : Polynomial (Polynomial R)) :
            (map W' f) ((mk W') x) = (mk (W'.map f)) (Polynomial.map (Polynomial.mapRingHom f) x)
            theorem WeierstrassCurve.Affine.CoordinateRing.map_smul {R : Type r} {S : Type s} [CommRing R] [CommRing S] {W' : Affine R} (f : R →+* S) (x : Polynomial R) (y : W'.CoordinateRing) :
            (map W' f) (x y) = Polynomial.map f x (map W' f) y

            Ideals in the affine coordinate ring #

            noncomputable def WeierstrassCurve.Affine.CoordinateRing.XClass {R : Type r} [CommRing R] (W' : Affine R) (x : R) :

            The class of the element X - x in R[W] for some x in R.

            Equations
            Instances For

              The class of the element Y - y(X) in R[W] for some y(X) in R[X].

              Equations
              Instances For
                theorem WeierstrassCurve.Affine.CoordinateRing.C_addPolynomial_slope {F : Type u} [Field F] {W : Affine F} [DecidableEq F] {x₁ x₂ y₁ y₂ : F} (h₁ : W.Equation x₁ y₁) (h₂ : W.Equation x₂ y₂) (hxy : ¬(x₁ = x₂ y₁ = W.negY x₂ y₂)) :
                (mk W) (Polynomial.C (W.addPolynomial x₁ y₁ (W.slope x₁ x₂ y₁ y₂))) = -(XClass W x₁ * XClass W x₂ * XClass W (W.addX x₁ x₂ (W.slope x₁ x₂ y₁ y₂)))
                noncomputable def WeierstrassCurve.Affine.CoordinateRing.XIdeal {R : Type r} [CommRing R] (W' : Affine R) (x : R) :

                The ideal ⟨X - x⟩ of R[W] for some x in R.

                Equations
                Instances For

                  The ideal ⟨Y - y(X)⟩ of R[W] for some y(X) in R[X].

                  Equations
                  Instances For
                    noncomputable def WeierstrassCurve.Affine.CoordinateRing.XYIdeal {R : Type r} [CommRing R] (W' : Affine R) (x : R) (y : Polynomial R) :

                    The ideal ⟨X - x, Y - y(X)⟩ of R[W] for some x in R and y(X) in R[X].

                    Equations
                    Instances For

                      The R-algebra isomorphism from R[W] / ⟨X - x, Y - y(X)⟩ to R obtained by evaluation at some y(X) in R[X] and at some x in R provided that W(x, y(x)) = 0.

                      Equations
                      Instances For
                        theorem WeierstrassCurve.Affine.CoordinateRing.XYIdeal_add_eq {R : Type r} [CommRing R] {W' : Affine R} (x₁ x₂ y₁ : R) :
                        XYIdeal W' (W'.addX x₁ x₂ ) (Polynomial.C (W'.addY x₁ x₂ y₁ )) = Ideal.span {(mk W') (W'.negPolynomial - Polynomial.C (linePolynomial x₁ y₁ ))}XIdeal W' (W'.addX x₁ x₂ )
                        theorem WeierstrassCurve.Affine.CoordinateRing.XYIdeal_eq₂ {F : Type u} [Field F] {W : Affine F} [DecidableEq F] {x₁ x₂ y₁ y₂ : F} (h₁ : W.Equation x₁ y₁) (h₂ : W.Equation x₂ y₂) (hxy : ¬(x₁ = x₂ y₁ = W.negY x₂ y₂)) :
                        XYIdeal W x₂ (Polynomial.C y₂) = XYIdeal W x₂ (linePolynomial x₁ y₁ (W.slope x₁ x₂ y₁ y₂))
                        theorem WeierstrassCurve.Affine.CoordinateRing.XYIdeal_mul_XYIdeal {F : Type u} [Field F] {W : Affine F} [DecidableEq F] {x₁ x₂ y₁ y₂ : F} (h₁ : W.Equation x₁ y₁) (h₂ : W.Equation x₂ y₂) (hxy : ¬(x₁ = x₂ y₁ = W.negY x₂ y₂)) :
                        XIdeal W (W.addX x₁ x₂ (W.slope x₁ x₂ y₁ y₂)) * (XYIdeal W x₁ (Polynomial.C y₁) * XYIdeal W x₂ (Polynomial.C y₂)) = YIdeal W (linePolynomial x₁ y₁ (W.slope x₁ x₂ y₁ y₂)) * XYIdeal W (W.addX x₁ x₂ (W.slope x₁ x₂ y₁ y₂)) (Polynomial.C (W.addY x₁ x₂ y₁ (W.slope x₁ x₂ y₁ y₂)))

                        The non-zero fractional ideal ⟨X - x, Y - y⟩ of F(W) for some x and y in F.

                        Equations
                        • One or more equations did not get rendered due to their size.
                        Instances For
                          theorem WeierstrassCurve.Affine.CoordinateRing.XYIdeal'_eq {F : Type u} [Field F] {W : Affine F} {x y : F} (h : W.Nonsingular x y) :
                          (XYIdeal' h) = (XYIdeal W x (Polynomial.C y))
                          theorem WeierstrassCurve.Affine.CoordinateRing.mk_XYIdeal'_mul_mk_XYIdeal' {F : Type u} [Field F] {W : Affine F} [DecidableEq F] {x₁ x₂ y₁ y₂ : F} (h₁ : W.Nonsingular x₁ y₁) (h₂ : W.Nonsingular x₂ y₂) (hxy : ¬(x₁ = x₂ y₁ = W.negY x₂ y₂)) :

                          Norms on the affine coordinate ring #

                          Nonsingular points in affine coordinates #

                          inductive WeierstrassCurve.Affine.Point {R : Type r} [CommRing R] (W' : Affine R) :

                          A nonsingular point on a Weierstrass curve W in affine coordinates. This is either the unique point at infinity WeierstrassCurve.Affine.Point.zero or a nonsingular affine point WeierstrassCurve.Affine.Point.some (x, y) satisfying the Weierstrass equation of W.

                          Instances For
                            def WeierstrassCurve.Affine.nonsingularPointEquivSubtype {R : Type r} [CommRing R] {W' : Affine R} {p : W'.PointProp} (p0 : p Point.zero) :
                            { P : W'.Point // p P } WithZero { xy : R × R // ∃ (h : W'.Nonsingular xy.1 xy.2), p (Point.some xy.1 xy.2 h) }

                            The equivalence between the nonsingular points on a Weierstrass curve W in affine coordinates satisfying a predicate and the set of pairs ⟨x, y⟩ satisfying W.Nonsingular x y with zero.

                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For
                              @[simp]
                              theorem WeierstrassCurve.Affine.nonsingularPointEquivSubtype_some {R : Type r} [CommRing R] {W' : Affine R} {x y : R} {h : W'.Nonsingular x y} {p : W'.PointProp} (p0 : p Point.zero) (ph : p (Point.some x y h)) :
                              @[simp]
                              theorem WeierstrassCurve.Affine.nonsingularPointEquivSubtype_symm_some {R : Type r} [CommRing R] {W' : Affine R} {x y : R} {h : W'.Nonsingular x y} {p : W'.PointProp} (p0 : p Point.zero) (ph : p (Point.some x y h)) :

                              The equivalence between the nonsingular points on a Weierstrass curve W in affine coordinates and the set of pairs ⟨x, y⟩ satisfying W.Nonsingular x y with zero.

                              Equations
                              Instances For
                                @[simp]
                                def WeierstrassCurve.Affine.Point.mk {R : Type r} [CommRing R] {W' : Affine R} [Nontrivial R] [WeierstrassCurve.IsElliptic W'] {x y : R} (h : W'.Equation x y) :

                                A point on an elliptic curve W over R.

                                Equations
                                Instances For
                                  def WeierstrassCurve.Affine.pointEquivSubtype {R : Type r} [CommRing R] {W' : Affine R} [Nontrivial R] [WeierstrassCurve.IsElliptic W'] {p : W'.PointProp} (p0 : p Point.zero) :
                                  { P : W'.Point // p P } WithZero { xy : R × R // ∃ (h : W'.Equation xy.1 xy.2), p (Point.mk h) }

                                  The equivalence between the points on an elliptic curve W in affine coordinates satisfying a predicate and the set of pairs ⟨x, y⟩ satisfying W.Equation x y with zero.

                                  Equations
                                  Instances For
                                    @[simp]
                                    theorem WeierstrassCurve.Affine.pointEquivSubtype_some {R : Type r} [CommRing R] {W' : Affine R} [Nontrivial R] [WeierstrassCurve.IsElliptic W'] {x y : R} {h : W'.Equation x y} {p : W'.PointProp} (p0 : p Point.zero) (ph : p (Point.mk h)) :
                                    @[simp]
                                    theorem WeierstrassCurve.Affine.pointEquivSubtype_symm_some {R : Type r} [CommRing R] {W' : Affine R} [Nontrivial R] [WeierstrassCurve.IsElliptic W'] {x y : R} {h : W'.Equation x y} {p : W'.PointProp} (p0 : p Point.zero) (ph : p (Point.mk h)) :

                                    The equivalence between the rational points on an elliptic curve E and the set of pairs ⟨x, y⟩ satisfying E.Equation x y with zero.

                                    Equations
                                    Instances For
                                      @[simp]

                                      Group law in affine coordinates #

                                      theorem WeierstrassCurve.Affine.Point.some_ne_zero {R : Type r} [CommRing R] {W' : Affine R} {x y : R} (h : W'.Nonsingular x y) :
                                      some x y h 0
                                      def WeierstrassCurve.Affine.Point.neg {R : Type r} [CommRing R] {W' : Affine R} :
                                      W'.PointW'.Point

                                      The negation of a nonsingular point on a Weierstrass curve in affine coordinates.

                                      Given a nonsingular point P in affine coordinates, use -P instead of neg P.

                                      Equations
                                      Instances For
                                        theorem WeierstrassCurve.Affine.Point.neg_def {R : Type r} [CommRing R] {W' : Affine R} (P : W'.Point) :
                                        -P = P.neg
                                        @[simp]
                                        theorem WeierstrassCurve.Affine.Point.neg_zero {R : Type r} [CommRing R] {W' : Affine R} :
                                        -0 = 0
                                        @[simp]
                                        theorem WeierstrassCurve.Affine.Point.neg_some {R : Type r} [CommRing R] {W' : Affine R} {x y : R} (h : W'.Nonsingular x y) :
                                        -some x y h = some x (W'.negY x y)
                                        theorem WeierstrassCurve.Affine.Point.X_eq_iff {F : Type u} [Field F] {W : Affine F} {x₁ y₁ x₂ y₂ : F} {h₁ : W.Nonsingular x₁ y₁} {h₂ : W.Nonsingular x₂ y₂} :
                                        x₁ = x₂ some x₁ y₁ h₁ = some x₂ y₂ h₂ some x₁ y₁ h₁ = -some x₂ y₂ h₂
                                        def WeierstrassCurve.Affine.Point.add {F : Type u} [Field F] {W : Affine F} [DecidableEq F] :
                                        W.PointW.PointW.Point

                                        The addition of two nonsingular points on a Weierstrass curve in affine coordinates.

                                        Given two nonsingular points P and Q in affine coordinates, use P + Q instead of add P Q.

                                        Equations
                                        Instances For
                                          theorem WeierstrassCurve.Affine.Point.add_def {F : Type u} [Field F] {W : Affine F} [DecidableEq F] (P Q : W.Point) :
                                          P + Q = P.add Q
                                          theorem WeierstrassCurve.Affine.Point.add_some {F : Type u} [Field F] {W : Affine F} [DecidableEq F] {x₁ x₂ y₁ y₂ : F} (hxy : ¬(x₁ = x₂ y₁ = W.negY x₂ y₂)) {h₁ : W.Nonsingular x₁ y₁} {h₂ : W.Nonsingular x₂ y₂} :
                                          some x₁ y₁ h₁ + some x₂ y₂ h₂ = some (W.addX x₁ x₂ (W.slope x₁ x₂ y₁ y₂)) (W.addY x₁ x₂ y₁ (W.slope x₁ x₂ y₁ y₂))
                                          @[simp]
                                          theorem WeierstrassCurve.Affine.Point.add_of_Y_eq {F : Type u} [Field F] {W : Affine F} [DecidableEq F] {x₁ x₂ y₁ y₂ : F} {h₁ : W.Nonsingular x₁ y₁} {h₂ : W.Nonsingular x₂ y₂} (hx : x₁ = x₂) (hy : y₁ = W.negY x₂ y₂) :
                                          some x₁ y₁ h₁ + some x₂ y₂ h₂ = 0
                                          theorem WeierstrassCurve.Affine.Point.add_self_of_Y_eq {F : Type u} [Field F] {W : Affine F} [DecidableEq F] {x₁ y₁ : F} {h₁ : W.Nonsingular x₁ y₁} (hy : y₁ = W.negY x₁ y₁) :
                                          some x₁ y₁ h₁ + some x₁ y₁ h₁ = 0
                                          theorem WeierstrassCurve.Affine.Point.add_of_Y_ne {F : Type u} [Field F] {W : Affine F} [DecidableEq F] {x₁ x₂ y₁ y₂ : F} {h₁ : W.Nonsingular x₁ y₁} {h₂ : W.Nonsingular x₂ y₂} (hy : y₁ W.negY x₂ y₂) :
                                          some x₁ y₁ h₁ + some x₂ y₂ h₂ = some (W.addX x₁ x₂ (W.slope x₁ x₂ y₁ y₂)) (W.addY x₁ x₂ y₁ (W.slope x₁ x₂ y₁ y₂))
                                          theorem WeierstrassCurve.Affine.Point.add_of_Y_ne' {F : Type u} [Field F] {W : Affine F} [DecidableEq F] {x₁ x₂ y₁ y₂ : F} {h₁ : W.Nonsingular x₁ y₁} {h₂ : W.Nonsingular x₂ y₂} (hy : y₁ W.negY x₂ y₂) :
                                          some x₁ y₁ h₁ + some x₂ y₂ h₂ = -some (W.addX x₁ x₂ (W.slope x₁ x₂ y₁ y₂)) (W.negAddY x₁ x₂ y₁ (W.slope x₁ x₂ y₁ y₂))
                                          theorem WeierstrassCurve.Affine.Point.add_self_of_Y_ne {F : Type u} [Field F] {W : Affine F} [DecidableEq F] {x₁ y₁ : F} {h₁ : W.Nonsingular x₁ y₁} (hy : y₁ W.negY x₁ y₁) :
                                          some x₁ y₁ h₁ + some x₁ y₁ h₁ = some (W.addX x₁ x₁ (W.slope x₁ x₁ y₁ y₁)) (W.addY x₁ x₁ y₁ (W.slope x₁ x₁ y₁ y₁))
                                          theorem WeierstrassCurve.Affine.Point.add_self_of_Y_ne' {F : Type u} [Field F] {W : Affine F} [DecidableEq F] {x₁ y₁ : F} {h₁ : W.Nonsingular x₁ y₁} (hy : y₁ W.negY x₁ y₁) :
                                          some x₁ y₁ h₁ + some x₁ y₁ h₁ = -some (W.addX x₁ x₁ (W.slope x₁ x₁ y₁ y₁)) (W.negAddY x₁ x₁ y₁ (W.slope x₁ x₁ y₁ y₁))
                                          @[simp]
                                          theorem WeierstrassCurve.Affine.Point.add_of_X_ne {F : Type u} [Field F] {W : Affine F} [DecidableEq F] {x₁ x₂ y₁ y₂ : F} {h₁ : W.Nonsingular x₁ y₁} {h₂ : W.Nonsingular x₂ y₂} (hx : x₁ x₂) :
                                          some x₁ y₁ h₁ + some x₂ y₂ h₂ = some (W.addX x₁ x₂ (W.slope x₁ x₂ y₁ y₂)) (W.addY x₁ x₂ y₁ (W.slope x₁ x₂ y₁ y₂))
                                          theorem WeierstrassCurve.Affine.Point.add_of_X_ne' {F : Type u} [Field F] {W : Affine F} [DecidableEq F] {x₁ x₂ y₁ y₂ : F} {h₁ : W.Nonsingular x₁ y₁} {h₂ : W.Nonsingular x₂ y₂} (hx : x₁ x₂) :
                                          some x₁ y₁ h₁ + some x₂ y₂ h₂ = -some (W.addX x₁ x₂ (W.slope x₁ x₂ y₁ y₂)) (W.negAddY x₁ x₂ y₁ (W.slope x₁ x₂ y₁ y₂))

                                          A nonzero affine 2-torsion point some x y h of W (that is, P + P = 0) has X-coordinate a root of W.twoTorsionPolynomial.

                                          theorem WeierstrassCurve.Affine.Point.isRoot_twoTorsionPolynomial_iff {F : Type u} [Field F] {W : Affine F} [DecidableEq F] (h2 : NeZero 2) ( : Δ W 0) (x : F) :
                                          (twoTorsionPolynomial W).toPoly.IsRoot x ∃ (y : F) (h : W.Nonsingular x y), some x y h + some x y h = 0

                                          x is a root of the 2-torsion polynomial of a Weierstrass curve of characteristic different from 2 with nonzero discriminant if and only if it is the X-coordinate of a nonzero affine 2-torsion point.

                                          The group homomorphism mapping a nonsingular affine point (x, y) of a Weierstrass curve W to the class of the non-zero fractional ideal ⟨X - x, Y - y⟩ in the ideal class group of F[W].

                                          Equations
                                          • One or more equations did not get rendered due to their size.
                                          Instances For
                                            @[simp]
                                            theorem WeierstrassCurve.Affine.Point.toClass_apply {F : Type u} [Field F] {W : Affine F} [DecidableEq F] (P : W.Point) :
                                            toClass P = match P with | zero => 0 | some x y h => (ClassGroup.mk W.FunctionField) (CoordinateRing.XYIdeal' h)
                                            @[instance_reducible]
                                            Equations
                                            • One or more equations did not get rendered due to their size.

                                            Maps and base changes #

                                            noncomputable def WeierstrassCurve.Affine.Point.map {R : Type r} {S : Type s} {F : Type u} {K : Type v} [CommRing R] [CommRing S] [Field F] [Field K] {W' : Affine R} [DecidableEq F] [DecidableEq K] [Algebra R S] [Algebra R F] [Algebra S F] [IsScalarTower R S F] [Algebra R K] [Algebra S K] [IsScalarTower R S K] (f : F →ₐ[S] K) :

                                            The group homomorphism on nonsingular points induced by an algebra homomorphism f : F →ₐ[S] K, where W is defined over a subring of a ring S, and F and K are field extensions of S.

                                            Equations
                                            • One or more equations did not get rendered due to their size.
                                            Instances For
                                              theorem WeierstrassCurve.Affine.Point.map_zero {R : Type r} {S : Type s} {F : Type u} {K : Type v} [CommRing R] [CommRing S] [Field F] [Field K] {W' : Affine R} [DecidableEq F] [DecidableEq K] [Algebra R S] [Algebra R F] [Algebra S F] [IsScalarTower R S F] [Algebra R K] [Algebra S K] [IsScalarTower R S K] (f : F →ₐ[S] K) :
                                              (map f) 0 = 0
                                              theorem WeierstrassCurve.Affine.Point.map_some {R : Type r} {S : Type s} {F : Type u} {K : Type v} [CommRing R] [CommRing S] [Field F] [Field K] {W' : Affine R} [DecidableEq F] [DecidableEq K] [Algebra R S] [Algebra R F] [Algebra S F] [IsScalarTower R S F] [Algebra R K] [Algebra S K] [IsScalarTower R S K] (f : F →ₐ[S] K) {x y : F} (h : (W'.baseChange F).Nonsingular x y) :
                                              (map f) (some x y h) = some (f x) (f y)
                                              theorem WeierstrassCurve.Affine.Point.map_id {R : Type r} {F : Type u} [CommRing R] [Field F] {W' : Affine R} [DecidableEq F] [Algebra R F] (P : (W'.baseChange F).Point) :
                                              (map (Algebra.ofId F F)) P = P
                                              theorem WeierstrassCurve.Affine.Point.map_map {R : Type r} {S : Type s} {F : Type u} {K : Type v} {L : Type w} [CommRing R] [CommRing S] [Field F] [Field K] [Field L] {W' : Affine R} [DecidableEq F] [DecidableEq K] [DecidableEq L] [Algebra R S] [Algebra R F] [Algebra S F] [IsScalarTower R S F] [Algebra R K] [Algebra S K] [IsScalarTower R S K] [Algebra R L] [Algebra S L] [IsScalarTower R S L] (f : F →ₐ[S] K) (g : K →ₐ[S] L) (P : (W'.baseChange F).Point) :
                                              (map g) ((map f) P) = (map (g.comp f)) P
                                              theorem WeierstrassCurve.Affine.Point.map_injective {R : Type r} {S : Type s} {F : Type u} {K : Type v} [CommRing R] [CommRing S] [Field F] [Field K] {W' : Affine R} [DecidableEq F] [DecidableEq K] [Algebra R S] [Algebra R F] [Algebra S F] [IsScalarTower R S F] [Algebra R K] [Algebra S K] [IsScalarTower R S K] (f : F →ₐ[S] K) :
                                              @[reducible, inline]
                                              noncomputable abbrev WeierstrassCurve.Affine.Point.baseChange {R : Type r} (F : Type u) (K : Type v) [CommRing R] [Field F] [Field K] {W' : Affine R} [DecidableEq F] [DecidableEq K] [Algebra R F] [Algebra R K] [Algebra F K] [IsScalarTower R F K] :

                                              The group homomorphism on nonsingular points induced by the base change from F to K, where W is defined over a subring of a ring S, and F and K are field extensions of S.

                                              Equations
                                              Instances For
                                                theorem WeierstrassCurve.Affine.Point.map_baseChange {R : Type r} {F : Type u} {K : Type v} {L : Type w} [CommRing R] [Field F] [Field K] [Field L] {W' : Affine R} [DecidableEq F] [DecidableEq K] [DecidableEq L] [Algebra R F] [Algebra R K] [Algebra R L] [Algebra F K] [IsScalarTower R F K] [Algebra F L] [IsScalarTower R F L] (f : K →ₐ[F] L) (P : (W'.baseChange F).Point) :
                                                (map f) ((baseChange F K) P) = (baseChange F L) P

                                                The x-coordinate map to ℙ¹ #

                                                We define the map from points on an affine Weierstrass curve over R to the projective line by producing a coordinate vector in Fin 2 → R that represents the projective point.

                                                noncomputable def WeierstrassCurve.Affine.Point.xRep {R : Type r} [CommRing R] {W' : Affine R} :
                                                W'.PointFin 2R

                                                This map sends a point P on a Weierstrass curve W' in affine coordinates to a representative of its image on ℙ¹ under the x-coordinate map. We take ![1, 0] for the point at infinity and ![x, 1], where x is the x-coordinate of P, for an affine point.

                                                We define it in the general setting of a commutative base ring, even though the definition of points in this setting is not really correct. For Weierstrass curves over fields, this gives the correct notion.

                                                Equations
                                                Instances For
                                                  @[simp]
                                                  @[simp]
                                                  theorem WeierstrassCurve.Affine.Point.xRep_some {R : Type r} [CommRing R] {W' : Affine R} {x y : R} (h : W'.Nonsingular x y) :
                                                  (some x y h).xRep = ![x, 1]
                                                  @[simp]
                                                  theorem WeierstrassCurve.Affine.Point.xRep_neg {R : Type r} [CommRing R] {W' : Affine R} (P : W'.Point) :
                                                  (-P).xRep = P.xRep
                                                  theorem WeierstrassCurve.Affine.Point.eq_or_eq_neg_of_xRep_eq_xRep {F : Type u} [Field F] {W : Affine F} {P Q : W.Point} (h : P.xRep = Q.xRep) :
                                                  P = Q P = -Q
                                                  theorem WeierstrassCurve.Affine.Point.xRep_eq_xRep_iff {F : Type u} [Field F] {W : Affine F} {P Q : W.Point} :
                                                  P.xRep = Q.xRep P = Q P = -Q
                                                  theorem WeierstrassCurve.Affine.Point.xRep_add_self_of_Y_ne {F : Type u} [Field F] {W : Affine F} [DecidableEq F] {x y : F} (h : W.Nonsingular x y) (hn : y W.negY x y) :
                                                  (some x y h + some x y h).xRep = ![(x ^ 4 - b₄ W * x ^ 2 - 2 * b₆ W * x - b₈ W) / (4 * x ^ 3 + b₂ W * x ^ 2 + 2 * b₄ W * x + b₆ W), 1]

                                                  We give an explicit expression for xRep of P + P when 2*P ≠ 0.

                                                  theorem WeierstrassCurve.Affine.Point.xRep_add_self_of_Y_eq {F : Type u} [Field F] {W : Affine F} [DecidableEq F] {x y : F} (h : W.Nonsingular x y) (hn : y = W.negY x y) :
                                                  (some x y h + some x y h).xRep = ![1, 0]

                                                  We give an explicit expression for xRep of P + P when P ≠ 0 and 2*P = 0.

                                                  theorem WeierstrassCurve.Affine.Point.xRep_add_of_X_ne {F : Type u} [Field F] {W : Affine F} [DecidableEq F] {xP yP xQ yQ : F} (hP : W.Nonsingular xP yP) (hQ : W.Nonsingular xQ yQ) (hn : xP xQ) :
                                                  (some xP yP hP + some xQ yQ hQ).xRep = ![((yP - yQ) ^ 2 + W.a₁ * (yP - yQ) * (xP - xQ) - (W.a₂ + xP + xQ) * (xP - xQ) ^ 2) / (xP - xQ) ^ 2, 1]

                                                  We give an explicit expression for xRep of P + Q when P ≠ ±Q.

                                                  theorem WeierstrassCurve.Affine.Point.xRep_sub_of_X_ne {F : Type u} [Field F] {W : Affine F} [DecidableEq F] {xP yP xQ yQ : F} (hP : W.Nonsingular xP yP) (hQ : W.Nonsingular xQ yQ) (hn : xP xQ) :
                                                  (some xP yP hP - some xQ yQ hQ).xRep = ![((yP + yQ + W.a₁ * xQ + W.a₃) ^ 2 + W.a₁ * (yP + yQ + W.a₁ * xQ + W.a₃) * (xP - xQ) - (W.a₂ + xP + xQ) * (xP - xQ) ^ 2) / (xP - xQ) ^ 2, 1]

                                                  We give an explicit expression for xRep of P - Q when P ≠ ±Q.