Documentation

Atlas.ArithmeticGeometry.code.Isogenies

noncomputable def IsMorphismOfCurves {F : Type u_1} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] (f : W₁.toAffine.PointW₂.toAffine.Point) :
Instances For
    theorem isMorphismOfCurves_comp {F : Type u_1} [Field F] [DecidableEq F] {W₁ W₂ W₃ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] [W₃.IsElliptic] {f : W₁.toAffine.PointW₂.toAffine.Point} {g : W₂.toAffine.PointW₃.toAffine.Point} (hf : IsMorphismOfCurves f) (hg : IsMorphismOfCurves g) :
    structure EllipticCurveIsogeny {F : Type u_1} [Field F] [DecidableEq F] (W₁ W₂ : WeierstrassCurve F) [W₁.IsElliptic] [W₂.IsElliptic] :
    Type u_1
    Instances For
      @[implicit_reducible]
      @[simp]
      theorem EllipticCurveIsogeny.coe_toFun {F : Type u_1} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) :
      φ.toFun = φ
      @[simp]
      theorem EllipticCurveIsogeny.map_zero' {F : Type u_1} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) :
      φ 0 = 0
      theorem EllipticCurveIsogeny.hasMapOnPoints {F : Type u_1} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) (A : Type u_2) [Field A] [DecidableEq A] (f : F →+* A) :
      ∃ (g : (W₁.map f).toAffine.Point(W₂.map f).toAffine.Point), IsMorphismOfCurves g Function.Surjective g g 0 = 0
      noncomputable def EllipticCurveIsogeny.Pic0Type {F : Type u_2} [Field F] [DecidableEq F] (W : WeierstrassCurve F) [W.IsElliptic] :
      Instances For
        Instances For
          Instances For
            noncomputable def EllipticCurveIsogeny.Pic0Pushforward {F : Type u_2} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) :
            Instances For
              theorem EllipticCurveIsogeny.Pic0Pushforward_naturality {F : Type u_2} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) (P Q : W₁.toAffine.Point) :
              φ.Pic0Pushforward ((Pic0Equiv W₁) P - (Pic0Equiv W₁) Q) = (Pic0Equiv W₂) (φ.toFun P) - (Pic0Equiv W₂) (φ.toFun Q)
              theorem EllipticCurveIsogeny.Pic0Pushforward_compat {F : Type u_1} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) (P : W₁.toAffine.Point) :
              (Pic0Equiv W₂) (φ.toFun P) = φ.Pic0Pushforward ((Pic0Equiv W₁) P)
              theorem EllipticCurveIsogeny.isogeny_additivity_from_rigidity {F : Type u_2} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) (P Q : W₁.toAffine.Point) :
              φ.toFun (P + Q) = φ.toFun P + φ.toFun Q
              @[simp]
              theorem EllipticCurveIsogeny.isogeny_map_add {F : Type u_1} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) (P Q : W₁.toAffine.Point) :
              φ (P + Q) = φ P + φ Q
              Instances For
                @[simp]
                theorem EllipticCurveIsogeny.toAddMonoidHom_apply {F : Type u_1} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) (P : W₁.toAffine.Point) :
                φ.toAddMonoidHom P = φ P
                def EllipticCurveIsogeny.comp {F : Type u_1} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] {W₃ : WeierstrassCurve F} [W₃.IsElliptic] (ψ : EllipticCurveIsogeny W₂ W₃) (φ : EllipticCurveIsogeny W₁ W₂) :
                Instances For
                  def EllipticCurveIsogeny.ker {F : Type u_1} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) :
                  Instances For
                    theorem EllipticCurveIsogeny.mem_ker {F : Type u_1} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) (P : W₁.toAffine.Point) :
                    P φ.ker φ P = 0
                    noncomputable def EllipticCurveIsogeny.deg_axiom {F : Type u_1} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] :
                    Instances For
                      noncomputable def EllipticCurveIsogeny.deg {F : Type u_1} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) :
                      Instances For
                        theorem EllipticCurveIsogeny.deg_pos_axiom {F : Type u_1} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) :
                        theorem EllipticCurveIsogeny.deg_pos {F : Type u_1} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) :
                        0 < φ.deg
                        theorem EllipticCurveIsogeny.ker_injects_into_aut_dvd_deg_axiom {F : Type u_2} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) :
                        ∃ (G : Type) (x : AddCommGroup G), (∃ (f : φ.ker →+ G), Function.Injective f) Nat.card G φ.deg_axiom

                        Corollary: the kernel preimage $\varphi^{-1}\{0\}$ of an isogeny is a finite set.

                        theorem EllipticCurveIsogeny.ker_finite {F : Type u_1} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) :
                        (↑φ.ker).Finite

                        The kernel subgroup $\ker \varphi$, viewed as a set in $E_1(F)$, is finite.

                        structure EllipticCurveIsogeny.FunctionFieldExtension {k : Type u_1} [Field k] [DecidableEq k] {W₁ W₂ : WeierstrassCurve k} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) :

                        The function-field extension data associated to an isogeny $\varphi$: a pair of fields $k(E_1) \supseteq \varphi^* k(E_2)$ with the inclusion as an algebra map.

                        Instances For
                          @[implicit_reducible]

                          The "top" field $k(E_1)$ is a field.

                          @[implicit_reducible]

                          The "bottom" field $\varphi^* k(E_2)$ is a field.

                          @[implicit_reducible]

                          $k(E_1)$ is an algebra over the pullback field $\varphi^* k(E_2)$.

                          An isogeny is separable if the induced function-field extension is separable.

                          Instances For

                            An isogeny is inseparable if it fails to be separable.

                            Instances For

                              An isogeny is purely inseparable if the induced function-field extension is purely inseparable.

                              Instances For
                                theorem EllipticCurveIsogeny.map_neg {F : Type u_1} [Field F] [DecidableEq F] {W₁ W₂ : WeierstrassCurve F} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) (P : W₁.toAffine.Point) :
                                φ (-P) = -φ P

                                An isogeny respects negation: $\varphi(-P) = -\varphi(P)$ (corollary of being a group homomorphism).

                                noncomputable def EllipticCurveIsogeny.baseChangeIsogeny_val {k : Type u_1} [Field k] [DecidableEq k] {W₁ W₂ : WeierstrassCurve k} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) (L : Type u_2) [Field L] [DecidableEq L] [Algebra k L] :

                                Auxiliary: the underlying isogeny built by base-changing $\varphi$ along $k \to L$, packaged from hasMapOnPoints.

                                Instances For
                                  noncomputable def EllipticCurveIsogeny.baseChangeIsogeny {k : Type u_1} [Field k] [DecidableEq k] {W₁ W₂ : WeierstrassCurve k} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) (L : Type u_2) [Field L] [DecidableEq L] [Algebra k L] :

                                  The base change $\varphi_L : E_{1,L} \to E_{2,L}$ of an isogeny $\varphi$ along a field extension $k \to L$.

                                  Instances For
                                    theorem EllipticCurveIsogeny.map_add_over_extension {k : Type u_1} [Field k] [DecidableEq k] {W₁ W₂ : WeierstrassCurve k} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) (L : Type u_2) [Field L] [DecidableEq L] [Algebra k L] [Algebra.IsAlgebraic k L] (P Q : (W₁.baseChange L).toAffine.Point) :
                                    (φ.baseChangeIsogeny L) (P + Q) = (φ.baseChangeIsogeny L) P + (φ.baseChangeIsogeny L) Q

                                    The base-changed isogeny is also additive on points over the extension.

                                    noncomputable def EllipticCurveIsogeny.toAddMonoidHom_over_extension {k : Type u_1} [Field k] [DecidableEq k] {W₁ W₂ : WeierstrassCurve k} [W₁.IsElliptic] [W₂.IsElliptic] (φ : EllipticCurveIsogeny W₁ W₂) (L : Type u_2) [Field L] [DecidableEq L] [Algebra k L] [Algebra.IsAlgebraic k L] :

                                    The base-changed isogeny as a group homomorphism over $L$.

                                    Instances For
                                      noncomputable def WeierstrassCurve.Affine.Point.toOption {R : Type u_1} [CommRing R] (W : WeierstrassCurve R) (P : W.toAffine.Point) :
                                      Option (R × R)

                                      Encode an affine Weierstrass point as Option (R × R): the point at infinity is none, and an affine point $(x, y)$ is some (x, y).

                                      Instances For

                                        The encoding toOption is injective: distinct affine points have distinct encodings.

                                        If the base ring is finite, then the set of points of an affine Weierstrass curve is also finite.

                                        In a torsion-free abelian group, an element of finite additive order must be zero.

                                        An elliptic curve over $\mathbb{Q}$ has good reduction at a prime $p$ if it admits a model that reduces mod $p$ to an elliptic curve over $\mathbb{F}_p$.

                                        Instances For

                                          Theorem 24.14: the reduction-mod-$p$ map $E(\mathbb{Q}) \to \tilde E(\mathbb{F}_p)$ on points, as a group homomorphism, for an elliptic curve with good reduction at $p$.

                                          Instances For

                                            Corollary 24.18: the kernel of the reduction-mod-$p$ map is torsion-free, hence contains no nontrivial finite-order points.

                                            Combined statement: existence of a reduction-mod-$p$ map whose kernel is torsion-free.

                                            Corollary: the reduction map restricted to the torsion subgroup of $E(\mathbb{Q})$ is injective into $\tilde E(\mathbb{F}_p)$ for any prime $p$ of good reduction.

                                            theorem curve_equation_short_weierstrass (W : WeierstrassCurve ) (hW1 : W.a₁ = 0) (hW2 : W.a₂ = 0) (hW3 : W.a₃ = 0) {x₀ y₀ : } (hns : W.toAffine.Nonsingular x₀ y₀) :
                                            y₀ ^ 2 = x₀ ^ 3 + W.a₄ * x₀ + W.a₆

                                            A nonsingular point $(x_0, y_0)$ on a short Weierstrass curve $y^2 = x^3 + a_4 x + a_6$ satisfies the curve equation.

                                            theorem rat_is_int_of_nonneg_padic_val (q : ) (h : ∀ (p : ), Nat.Prime ppadicValRat p q 0) :
                                            ∃ (z : ), z = q

                                            A rational number with nonnegative $p$-adic valuation at every prime is an integer.

                                            theorem rat_sq_int_imp_int (q : ) (h : ∃ (z : ), z = q ^ 2) :
                                            ∃ (z : ), z = q

                                            If a rational $q$ has $q^2 \in \mathbb{Z}$, then $q \in \mathbb{Z}$.

                                            theorem torsion_point_nonneg_padic_val (W : WeierstrassCurve ) [W.IsElliptic] (hW1 : W.a₁ = 0) (hW2 : W.a₂ = 0) (hW3 : W.a₃ = 0) (a₄_int : ) (ha4 : a₄_int = W.a₄) (a₆_int : ) (ha6 : a₆_int = W.a₆) {x₀ y₀ : } (hns : W.toAffine.Nonsingular x₀ y₀) (hfin : IsOfFinAddOrder (WeierstrassCurve.Affine.Point.some x₀ y₀ hns)) (p : ) (hp : Nat.Prime p) :
                                            padicValRat p x₀ 0

                                            If a torsion point on a short Weierstrass curve over $\mathbb{Q}$ with integral coefficients has rational coordinates, then its $x$-coordinate has nonnegative $p$-adic valuation at every prime $p$.

                                            theorem nagell_lutz_integrality (W : WeierstrassCurve ) [W.IsElliptic] (hW1 : W.a₁ = 0) (hW2 : W.a₂ = 0) (hW3 : W.a₃ = 0) (a₄_int : ) (ha4 : a₄_int = W.a₄) (a₆_int : ) (ha6 : a₆_int = W.a₆) {x₀ y₀ : } (hns : W.toAffine.Nonsingular x₀ y₀) (hfin : IsOfFinAddOrder (WeierstrassCurve.Affine.Point.some x₀ y₀ hns)) :
                                            (∃ (x₀' : ), x₀' = x₀) ∃ (y₀' : ), y₀' = y₀

                                            First part of Nagell-Lutz: any rational torsion point on a short Weierstrass curve $E/\mathbb{Q}$ with integer coefficients has integer coordinates $(x_0, y_0) \in \mathbb{Z}^2$.

                                            theorem nagell_lutz_slope_div (W : WeierstrassCurve ) [W.IsElliptic] (hW1 : W.a₁ = 0) (hW2 : W.a₂ = 0) (hW3 : W.a₃ = 0) (a₄_int : ) (ha4 : a₄_int = W.a₄) (a₆_int : ) (ha6 : a₆_int = W.a₆) {x₀ y₀ : } (hns : W.toAffine.Nonsingular x₀ y₀) (hfin : IsOfFinAddOrder (WeierstrassCurve.Affine.Point.some x₀ y₀ hns)) (x₀' : ) (hx0 : x₀' = x₀) (y₀' : ) (hy0 : y₀' = y₀) (hy0_ne : y₀ 0) :
                                            y₀' ^ 2 (3 * x₀' ^ 2 + a₄_int) ^ 2

                                            Slope-divisibility step of Nagell-Lutz: if $(x_0, y_0)$ is an integral torsion point on the short Weierstrass curve with $y_0 \neq 0$, then $y_0^2 \mid (3 x_0^2 + a_4)^2$.

                                            theorem nagell_lutz (W : WeierstrassCurve ) [W.IsElliptic] (hW1 : W.a₁ = 0) (hW2 : W.a₂ = 0) (hW3 : W.a₃ = 0) (a₄_int : ) (ha4 : a₄_int = W.a₄) (a₆_int : ) (ha6 : a₆_int = W.a₆) {x₀ y₀ : } (hns : W.toAffine.Nonsingular x₀ y₀) (hfin : IsOfFinAddOrder (WeierstrassCurve.Affine.Point.some x₀ y₀ hns)) :
                                            (∃ (x₀' : ), x₀' = x₀) (∃ (y₀' : ), y₀' = y₀) (y₀ = 0 ∃ (y₀' : ), y₀' = y₀ y₀' ^ 2 4 * a₄_int ^ 3 + 27 * a₆_int ^ 2)

                                            Theorem 24.21 (Nagell-Lutz): any rational torsion point $(x_0, y_0)$ on the short Weierstrass curve $y^2 = x^3 + a_4 x + a_6$ over $\mathbb{Q}$ (with $a_4, a_6 \in \mathbb{Z}$) satisfies $x_0, y_0 \in \mathbb{Z}$, and either $y_0 = 0$ or $y_0^2 \mid (4 a_4^3 + 27 a_6^2)$.

                                            Axiom: a nonconstant morphism of curves $f : E \to E$ sending $0$ to $0$ is surjective (a curve of genus one has no nontrivial subvariety of dimension one).

                                            theorem mulByN_nonconstant {F : Type u_1} [Field F] [DecidableEq F] (W : WeierstrassCurve F) [W.IsElliptic] (n : ) :
                                            0 < n∃ (P : W.toAffine.Point), (multiplicationByN n) P 0

                                            Axiom: for any $n > 0$, the multiplication-by-$n$ map on an elliptic curve has a nonzero image, i.e. it is not the zero map.

                                            For any $n > 0$, multiplication-by-$n$ is a morphism of curves $E \to E$ (proved by induction using isMorphismOfCurves_add).

                                            Multiplication-by-$n$ on $E$ is surjective for $n > 0$ (combining nonconstancy and isMorphismOfCurves_nonconstant_surjective).

                                            Restatement of mulByN_surjective_axiom for use inside the Theorem248 section.

                                            noncomputable def multiplicationByN_isogeny {F : Type u_1} [Field F] [DecidableEq F] {W : WeierstrassCurve F} [W.IsElliptic] (n : ) (hn : 0 < n) :

                                            Theorem 24.8: the multiplication-by-$n$ map $[n] : E \to E$ is an isogeny of elliptic curves for every $n > 0$.

                                            Instances For
                                              theorem nTorsion_finite {F : Type u_1} [Field F] [DecidableEq F] {W : WeierstrassCurve F} [W.IsElliptic] (n : ) (hn : 0 < n) :

                                              Corollary 24.10: the $n$-torsion subgroup $E[n] \subseteq E(F)$ is finite.

                                              theorem nTorsion_finite_algClosure {k : Type u_1} [Field k] {W : WeierstrassCurve k} [W.IsElliptic] (n : ) (hn : 0 < n) :

                                              Variant of Corollary 24.10 over an algebraic closure: $E(\bar k)[n]$ is finite.

                                              The base change of an elliptic curve $E/\mathbb{Q}$ to $\mathbb{Q}_p$ remains elliptic (its discriminant remains a unit).

                                              Membership in the $n$-th piece of the $p$-adic filtration on $E(\mathbb{Q}_p)$: the point $O$ is always in, and an affine point $(x, y)$ lies in $E_n$ when $n = 0$ or when $y \neq 0$ and $v_p(x) - v_p(y) \geq n$.

                                              Instances For

                                                The identity point lies in every piece $E_n$ of the $p$-adic filtration.

                                                theorem PadicFiltrationMem.of_le {W : WeierstrassCurve } [W.IsElliptic] {p : } [Fact (Nat.Prime p)] {n m : } {P : (W.baseChange ℚ_[p]).toAffine.Point} (h : PadicFiltrationMem W p n P) (hmn : m n) :

                                                The filtration is monotone: if $P \in E_n$ and $m \leq n$, then $P \in E_m$.

                                                The $p$-adic filtration on $E(\mathbb{Q}_p)$: a decreasing family of subgroups $E = E_0 \supseteq E_1 \supseteq E_2 \supseteq \cdots$ defined via the $p$-adic valuation, together with the (mild) assumptions $a_1 = a_2 = a_3 = 0$ required for the addition-formula computations.

                                                Instances For
                                                  theorem padic_valuation_neg {p : } [Fact (Nat.Prime p)] (x : ℚ_[p]) (hx : x 0) :

                                                  The $p$-adic valuation is invariant under negation: $v_p(-x) = v_p(x)$.

                                                  theorem padic_valuation_add_eq_min {p : } [Fact (Nat.Prime p)] {x y : ℚ_[p]} (hxy : x + y 0) (hx : x 0) (hy : y 0) (hv : x.valuation y.valuation) :

                                                  Strict (non-Archimedean) triangle inequality: if $v_p(x) \neq v_p(y)$, then $v_p(x+y) = \min(v_p(x), v_p(y))$.

                                                  theorem padic_valuation_sub_eq_min {p : } [Fact (Nat.Prime p)] {x y : ℚ_[p]} (hxy : x - y 0) (hx : x 0) (hy : y 0) (hv : x.valuation y.valuation) :

                                                  Subtractive form of the strict triangle inequality: if $v_p(x) \neq v_p(y)$, then $v_p(x - y) = \min(v_p(x), v_p(y))$.

                                                  theorem PadicFiltrationMem.add_mem {W : WeierstrassCurve } [W.IsElliptic] (ha₁ : W.a₁ = 0) (ha₂ : W.a₂ = 0) (ha₃ : W.a₃ = 0) {p : } [Fact (Nat.Prime p)] {n : } {P Q : (W.baseChange ℚ_[p]).toAffine.Point} (hP : PadicFiltrationMem W p n P) (hQ : PadicFiltrationMem W p n Q) :
                                                  PadicFiltrationMem W p n (P + Q)

                                                  The $n$-th level $E_n$ of the $p$-adic filtration is closed under addition: if $P, Q \in E_n$ then $P + Q \in E_n$.

                                                  theorem PadicFiltrationMem.neg_mem {W : WeierstrassCurve } [W.IsElliptic] (ha₁ : W.a₁ = 0) (ha₃ : W.a₃ = 0) {p : } [Fact (Nat.Prime p)] {n : } {P : (W.baseChange ℚ_[p]).toAffine.Point} (hP : PadicFiltrationMem W p n P) :

                                                  The $n$-th level $E_n$ of the $p$-adic filtration is closed under negation: if $P \in E_n$ then $-P \in E_n$.

                                                  def padicFiltrationGroup (W : WeierstrassCurve ) [W.IsElliptic] (ha₁ : W.a₁ = 0) (ha₂ : W.a₂ = 0) (ha₃ : W.a₃ = 0) (p : ) [Fact (Nat.Prime p)] (n : ) :

                                                  The $n$-th level $E_n$ of the $p$-adic filtration, packaged as an additive subgroup of $E(\mathbb{Q}_p)$.

                                                  Instances For
                                                    theorem PadicFiltration.exists (W : WeierstrassCurve ) [W.IsElliptic] (ha₁ : W.a₁ = 0) (ha₂ : W.a₂ = 0) (ha₃ : W.a₃ = 0) (p : ) [Fact (Nat.Prime p)] :

                                                    Existence of the $p$-adic filtration on $E(\mathbb{Q}_p)$ for a Weierstrass curve with $a_1 = a_2 = a_3 = 0$.

                                                    If reduction modulo $p$ is surjective on $E(\mathbb{Q}_p)$, then it remains surjective when restricted to $E_0 = E(\mathbb{Q}_p)$.

                                                    theorem PadicFiltration.reduction_surjective_with_kernel {W : WeierstrassCurve } [W.IsElliptic] {p : } [Fact (Nat.Prime p)] (F : PadicFiltration W p) (Wred : WeierstrassCurve (ZMod p)) [Wred.IsElliptic] (red : (W.baseChange ℚ_[p]).toAffine.Point →+ Wred.toAffine.Point) (hred_surj : Function.Surjective red) (hred_ker : red.ker = F.group 1) :
                                                    ∃ (ρ : (F.group 0) →+ Wred.toAffine.Point), Function.Surjective ρ ρ.ker = (F.group 1).addSubgroupOf (F.group 0)

                                                    The reduction map $\rho: E_0 \to \widetilde{E}(\mathbb{F}_p)$ is surjective with kernel $E_1$.

                                                    theorem PadicFiltration.quotient_zero_one_iso {W : WeierstrassCurve } [W.IsElliptic] {p : } [Fact (Nat.Prime p)] (F : PadicFiltration W p) (Wred : WeierstrassCurve (ZMod p)) [Wred.IsElliptic] (red : (W.baseChange ℚ_[p]).toAffine.Point →+ Wred.toAffine.Point) (hred_surj : Function.Surjective red) (hred_ker : red.ker = F.group 1) :

                                                    The first isomorphism theorem applied to the reduction map gives $E_0/E_1 \cong \widetilde{E}(\mathbb{F}_p)$.

                                                    For $n > 0$, the predicate PadicFiltrationMem agrees with the PadicElliptic.InPadicFiltration predicate from the formal-group development.

                                                    theorem PadicFiltration.group_eq_padicFiltration {W : WeierstrassCurve } [W.IsElliptic] {p : } [Fact (Nat.Prime p)] (F : PadicFiltration W p) (ha1 : W.a₁ = 0) (ha2 : W.a₂ = 0) (ha3 : W.a₃ = 0) (n : ) (hn : 0 < n) :

                                                    For $n > 0$, the subgroup $E_n$ of the filtration coincides with the $n$-th level of PadicElliptic.padicFiltration.

                                                    theorem PadicFiltration.formal_group_surjective_with_kernel {W : WeierstrassCurve } [W.IsElliptic] {p : } [Fact (Nat.Prime p)] (F : PadicFiltration W p) (n : ) (hn : 0 < n) :
                                                    ∃ (logMap : (F.group n) →+ ZMod p), Function.Surjective logMap logMap.ker = (F.group (n + 1)).addSubgroupOf (F.group n)

                                                    For $n > 0$, the formal logarithm provides a surjective homomorphism $E_n \to \mathbb{F}_p$ with kernel $E_{n+1}$.

                                                    theorem PadicFiltration.quotient_succ_iso {W : WeierstrassCurve } [W.IsElliptic] {p : } [Fact (Nat.Prime p)] (F : PadicFiltration W p) (n : ) (hn : 0 < n) :
                                                    Nonempty ((F.group n) (F.group (n + 1)).addSubgroupOf (F.group n) ≃+ ZMod p)

                                                    For $n > 0$, the successive quotient of the filtration is isomorphic to $\mathbb{F}_p$: $E_n / E_{n+1} \cong \mathbb{F}_p$.

                                                    theorem PadicFiltration.iInf_eq_bot {W : WeierstrassCurve } [W.IsElliptic] {p : } [Fact (Nat.Prime p)] (F : PadicFiltration W p) :
                                                    ⨅ (n : ), F.group n =

                                                    The $p$-adic filtration is separated: $\bigcap_{n \geq 0} E_n = 0$.

                                                    theorem PadicFiltration.theorem_24_14 {W : WeierstrassCurve } [W.IsElliptic] {p : } [Fact (Nat.Prime p)] (F : PadicFiltration W p) (Wred : WeierstrassCurve (ZMod p)) [Wred.IsElliptic] (red : (W.baseChange ℚ_[p]).toAffine.Point →+ Wred.toAffine.Point) (hred_surj : Function.Surjective red) (hred_ker : red.ker = F.group 1) :
                                                    Nonempty ((F.group 0) (F.group 1).addSubgroupOf (F.group 0) ≃+ Wred.toAffine.Point) (∀ (n : ), 0 < nNonempty ((F.group n) (F.group (n + 1)).addSubgroupOf (F.group n) ≃+ ZMod p)) ⨅ (n : ), F.group n =

                                                    Theorem 24.14 (Reduction theorem for the $p$-adic filtration). The successive quotients of $E_0 \supseteq E_1 \supseteq E_2 \supseteq \cdots$ are: \begin{itemize} \item $E_0/E_1 \cong \widetilde{E}(\mathbb{F}_p)$ (reduction modulo $p$), \item $E_n/E_{n+1} \cong \mathbb{F}_p$ for all $n \geq 1$ (via the formal logarithm), \item $\bigcap_n E_n = 0$ (the filtration is separated). \end{itemize}

                                                    theorem nsmul_eq_zero_in_zmod_prime {p : } (hp : Nat.Prime p) (m : ) (hm : m.Coprime p) (x : ZMod p) (h : m x = 0) :
                                                    x = 0

                                                    If $p$ is prime, $\gcd(m, p) = 1$, and $m \cdot x = 0$ in $\mathbb{F}_p$, then $x = 0$. (Multiplication by an integer coprime to $p$ is injective on $\mathbb{F}_p$.)

                                                    Predicate: an affine point $P = (x, y) \in E(\mathbb{Q}_p)$ has $p$-adically integral coordinates, i.e. $v_p(x) \geq 0$ and $v_p(y) \geq 0$ (the point at infinity is vacuously integral).

                                                    Instances For

                                                      Valuation bound from the Weierstrass equation: if the coefficients $a_i$ are $p$-integral and the point $(x, y)$ on $E$ does not have integral coordinates, then $y \neq 0$ and $v_p(x) - v_p(y) \geq 1$.

                                                      A point with non-integral coordinates lies in $E_1$ (in fact in some $E_n$ with $n > 0$) but does not lie in every $E_k$, since the filtration is separated.

                                                      Corollary 24.16. Let $E$ be an elliptic curve over $\mathbb{Q}$ with $p$-integral Weierstrass coefficients, and let $P \in E(\mathbb{Q}_p)$. If $m \cdot P = 0$ for some integer $m$ with $\gcd(m, p) = 1$, then the coordinates of $P$ are $p$-adically integral.