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
          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
            theorem WeierstrassCurve.Affine.CoordinateRing.map_injective {R : Type r} {S : Type s} [CommRing R] [CommRing S] {W' : Affine R} {f : R โ†’+* S} (hf : Function.Injective โ‡‘f) :
            Function.Injective โ‡‘(map W' f)

            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 {R : Type r} [CommRing R] {W' : Affine R} (x y โ„“ : R) :
                (mk W') (Polynomial.C (W'.addPolynomial x y โ„“)) = (mk W') ((Polynomial.X - Polynomial.C (linePolynomial x y โ„“)) * (W'.negPolynomial - Polynomial.C (linePolynomial x y โ„“)))
                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โ‚ {R : Type r} [CommRing R] {W' : Affine R} (x y โ„“ : R) :
                        XYIdeal W' x (Polynomial.C y) = XYIdeal W' x (linePolynomial x y โ„“)
                        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
                            @[implicit_reducible]
                            instance WeierstrassCurve.Affine.instDecidableEqPoint {Rโœ : Type u_1} {instโœ : CommRing Rโœ} {W'โœ : Affine Rโœ} [DecidableEq Rโœ] :
                            DecidableEq W'โœ.Point
                            Equations
                            def WeierstrassCurve.Affine.nonsingularPointEquivSubtype {R : Type r} [CommRing R] {W' : Affine R} {p : W'.Point โ†’ Prop} (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'.Point โ†’ Prop} (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'.Point โ†’ Prop} (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
                                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'.Point โ†’ Prop} (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'.Point โ†’ Prop} (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'.Point โ†’ Prop} (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

                                      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'.Point โ†’ W'.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.Point โ†’ W.Point โ†’ W.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โ‚‚)) โ‹ฏ

                                          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 (CoordinateRing.XYIdeal' h)
                                            @[implicit_reducible]
                                            Equations
                                            @[implicit_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'.Point โ†’ Fin 2 โ†’ R

                                                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