Documentation

LeanPool.FLTEichlerShimura.Definitions.Def_EllipticCurve_TateModule

The p-adic Tate module and the Tate module Galois representation #

Definition: EllipticCurve_TateModule (e3517e0d-3db6-5cee-a949-fb0cba7e3bee), by Claude, 2026-09-05.

For a natural number $p$ and an additive commutative group $M$, TateModule p M is defined as the additive subgroup of sequences $x : \mathbb{N} \to M$ satisfying, for every $n$, the two conditions $p^n \cdot x_n = 0$ and $p \cdot x_{n+1} = x_n$; thus it is the inverse limit $\varprojlim M[p^n]$ realised concretely as sequences (the condition at $n = 0$ forces $x_0 = 0$, so the zeroth term is always trivial). For $p$ prime it is given a $\mathbb{Z}_p$-module structure in which $a \in \mathbb{Z}_p$ acts at level $n$ through the integer a.appr n representing $a$ modulo $p^n$; smul_apply_eq_smul checks that when $M$ is already a $\mathbb{Z}_p$-module this agrees with the pointwise action. Further contents: the level maps proj p M n : TateModule p M →+ M, landing in Submodule.torsionBy ℤ M ((p^n : ℕ) : ℤ), with proj_eq_zero_iff identifying the kernel of proj … n with $\mathfrak{m}^n \cdot \top$ for $\mathfrak{m}$ the maximal ideal of $\mathbb{Z}_p$; and rep p M G : G →* Module.End ℤ_[p] (TateModule p M), the $\mathbb{Z}_p$-linear action induced termwise by any distributive action of a monoid $G$ on $M$.

A later section takes as an explicit hypothesis the counting assumption that for every $n$ the subgroup Submodule.torsionBy ℤ M ((p^n : ℕ) : ℤ) has exactly $(p^n)^2$ elements, and deduces from it that multiplication by $p$ sends $M[p^{n+1}]$ onto $M[p^n]$, hence that each proj … n is surjective onto $M[p^n]$, and constructs from this an explicit basis indexed by Fin 2; free, finite and finrank_eq_two follow.

For a Weierstrass curve $W$ over $\mathbb{Q}$, torsionField W p n is the subfield of $\overline{\mathbb{Q}}$ generated by the affine coordinates of the $p^n$-torsion $\overline{\mathbb{Q}}$-points; it is shown finite-dimensional when that torsion group is finite, and it witnesses the project's adic-continuity condition GaloisActionIsAdicContinuous for rep. Under the same counting assumption, tateModuleRepOfBasis and tateModuleRep package the Tate module of the $\overline{\mathbb{Q}}$-points, with the coordinatewise $\mathrm{Gal}(\overline{\mathbb{Q}}/\mathbb{Q})$-action, as a GaloisRepAdic ℤ_[p]. Independently, GaloisRep.padicIntToRing 𝒪 p hp is the ring homomorphism $\mathbb{Z}_p \to \mathcal{O}$ obtained, for a local ring $\mathcal{O}$ that is adically complete for its maximal ideal and has $p \in \mathfrak{m}_\mathcal{O}$, by lifting the compatible maps $\mathbb{Z}_p \to \mathbb{Z}/p^n \to \mathcal{O}/\mathfrak{m}^n$; it is characterised by that compatibility, is a local homomorphism, and is the identity for $\mathcal{O} = \mathbb{Z}_p$.

Relation to Mathlib. Mathlib has no $p$-adic Tate module; the subgroup of $\mathbb{N}$-indexed compatible torsion sequences, its $\mathbb{Z}_p$-action via PadicInt.appr, and the induced representation rep are the project's own, built on Mathlib's PadicInt, Submodule.torsionBy and WeierstrassCurve. GaloisRep.padicIntToRing is assembled from Mathlib's IsAdicComplete.liftRingHom. The freeness and rank-two results are stated relative to the explicit counting assumption on the orders of the torsion subgroups, which is not deduced from ellipticity here but must be supplied by the consumer.

Where it is used. The representation WeierstrassCurve.tateModuleRep is the Galois-side input to modularity lifting for the Frey curve: it supplies the two-dimensional $p$-adic representation whose residual representation is compared with the mod $p$ representation on $W[p]$, and whose ramification behaviour is the subject of separate statements. GaloisRep.padicIntToRing is used to move its coefficients from $\mathbb{Z}_p$ to a general complete local coefficient ring.

<!-- Generated by add_prove2me_provenance.py -->

def TateModule (p : ℕ) (M : Type) [AddCommGroup M] :

The subgroup of compatible sequences of p^n-torsion elements, with transition map multiplication by p.

Equations
Instances For
    theorem TateModule.torsion {p : ℕ} {M : Type} [AddCommGroup M] (x : ↥(TateModule p M)) (n : ℕ) :
    ↑(p ^ n) • ↑x n = 0
    theorem TateModule.compat {p : ℕ} {M : Type} [AddCommGroup M] (x : ↥(TateModule p M)) (n : ℕ) :
    ↑p • ↑x (n + 1) = ↑x n
    theorem TateModule.compat_pow {p : ℕ} {M : Type} [AddCommGroup M] (x : ↥(TateModule p M)) (n k : ℕ) :
    ↑(p ^ k) • ↑x (n + k) = ↑x n
    @[simp]
    theorem TateModule.coe_add {p : ℕ} {M : Type} [AddCommGroup M] (x y : ↥(TateModule p M)) :
    ↑(x + y) = ↑x + ↑y
    @[simp]
    theorem TateModule.coe_zero {p : ℕ} {M : Type} [AddCommGroup M] :
    ↑0 = 0
    @[simp]
    theorem TateModule.coe_neg {p : ℕ} {M : Type} [AddCommGroup M] (x : ↥(TateModule p M)) :
    ↑(-x) = -↑x
    @[simp]
    theorem TateModule.coe_sub {p : ℕ} {M : Type} [AddCommGroup M] (x y : ↥(TateModule p M)) :
    ↑(x - y) = ↑x - ↑y
    theorem TateModule.apply_zero {p : ℕ} {M : Type} [AddCommGroup M] (x : ↥(TateModule p M)) :
    ↑x 0 = 0
    theorem TateModule.natCast_smul_eq_mod {p : ℕ} {M : Type} [AddCommGroup M] {n c : ℕ} {m : M} (hm : ↑(p ^ n) • m = 0) :
    ↑c • m = ↑(c % p ^ n) • m
    theorem TateModule.natCast_smul_eq_of_zmod_eq {p : ℕ} {M : Type} [AddCommGroup M] {n c d : ℕ} {m : M} (hm : ↑(p ^ n) • m = 0) (h : ↑c = ↑d) :
    ↑c • m = ↑d • m
    theorem TateModule.toZModPow_eq_appr {p : ℕ} [Fact (Nat.Prime p)] (n : ℕ) (a : ℤ_[p]) :
    (PadicInt.toZModPow n) a = ↑(a.appr n)
    theorem TateModule.appr_succ_smul_eq {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (a : ℤ_[p]) (x : ↥(TateModule p M)) (n : ℕ) :
    ↑(a.appr (n + 1)) • ↑x n = ↑(a.appr n) • ↑x n
    @[instance_reducible]
    noncomputable instance TateModule.instSMul {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] :
    Equations
    @[simp]
    theorem TateModule.smul_apply {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (a : ℤ_[p]) (x : ↥(TateModule p M)) (n : ℕ) :
    ↑(a • x) n = ↑(a.appr n) • ↑x n
    @[instance_reducible]
    noncomputable instance TateModule.instModule {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] :
    Equations
    theorem TateModule.natCast_padicInt_smul_apply {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (c : ℕ) (x : ↥(TateModule p M)) (n : ℕ) :
    ↑(↑c • x) n = ↑c • ↑x n
    theorem TateModule.smul_apply_eq_zero_of_mem_span {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] {n : ℕ} {a : ℤ_[p]} (ha : a ∈ Ideal.span {↑p ^ n}) (x : ↥(TateModule p M)) :
    ↑(a • x) n = 0
    def TateModule.proj (p : ℕ) (M : Type) [AddCommGroup M] (n : ℕ) :
    ↥(TateModule p M) →+ M

    The additive projection from the Tate module to its nth torsion coordinate.

    Equations
    Instances For
      @[simp]
      theorem TateModule.proj_apply {p : ℕ} {M : Type} [AddCommGroup M] (n : ℕ) (x : ↥(TateModule p M)) :
      (proj p M n) x = ↑x n
      theorem TateModule.torsionBy_proj {p : ℕ} {M : Type} [AddCommGroup M] (n : ℕ) (x : ↥(TateModule p M)) :
      ↑(p ^ n) • (proj p M n) x = 0
      theorem TateModule.proj_mem_torsionBy {p : ℕ} {M : Type} [AddCommGroup M] (n : ℕ) (x : ↥(TateModule p M)) :
      (proj p M n) x ∈ Submodule.torsionBy ℤ M ↑(p ^ n)
      def TateModule.shiftOfProjEqZero {p : ℕ} {M : Type} [AddCommGroup M] (n : ℕ) (x : ↥(TateModule p M)) (hx : (proj p M n) x = 0) :
      ↥(TateModule p M)

      Shift a compatible sequence by n levels when its nth coordinate vanishes, giving a preimage under multiplication by p^n.

      Equations
      Instances For
        theorem TateModule.pow_smul_shiftOfProjEqZero {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (n : ℕ) (x : ↥(TateModule p M)) (hx : (proj p M n) x = 0) :
        ↑p ^ n • shiftOfProjEqZero n x hx = x
        theorem TateModule.proj_eq_zero_iff {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (n : ℕ) (x : ↥(TateModule p M)) :
        noncomputable def TateModule.rep (p : ℕ) (M : Type) [AddCommGroup M] [Fact (Nat.Prime p)] (G : Type) [Monoid G] [DistribMulAction G M] :

        The linear action on the Tate module induced by a distributive action on the original group.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          @[simp]
          theorem TateModule.rep_apply {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] {G : Type} [Monoid G] [DistribMulAction G M] (g : G) (x : ↥(TateModule p M)) (n : ℕ) :
          ↑(((rep p M G) g) x) n = g • ↑x n
          theorem TateModule.rep_sub_mem_of_apply_eq {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] {G : Type} [Monoid G] [DistribMulAction G M] (g : G) (x : ↥(TateModule p M)) (n : ℕ) (h : g • ↑x n = ↑x n) :
          theorem TateModule.smul_apply_eq_smul {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] [Module ℤ_[p] M] (a : ℤ_[p]) (x : ↥(TateModule p M)) (n : ℕ) :
          ↑(a • x) n = a • ↑x n
          theorem GaloisRep.ringChar_quotient_dvd (𝒪 : Type) [CommRing 𝒪] [IsLocalRing 𝒪] (p : ℕ) (hp : ↑p ∈ IsLocalRing.maximalIdeal 𝒪) (n : ℕ) :
          noncomputable def GaloisRep.padicIntToRingLevel (𝒪 : Type) [CommRing 𝒪] [IsLocalRing 𝒪] (p : ℕ) [Fact (Nat.Prime p)] (hp : ↑p ∈ IsLocalRing.maximalIdeal 𝒪) (n : ℕ) :

          Map the p-adic integers to the quotient by the nth maximal-ideal power using reduction modulo p^n.

          Equations
          Instances For
            noncomputable def GaloisRep.padicIntToRing (𝒪 : Type) [CommRing 𝒪] [IsLocalRing 𝒪] (p : ℕ) [Fact (Nat.Prime p)] [IsAdicComplete (IsLocalRing.maximalIdeal 𝒪) 𝒪] (hp : ↑p ∈ IsLocalRing.maximalIdeal 𝒪) :

            The homomorphism from the p-adic integers to the complete local ring induced by the compatible finite-level reductions.

            Equations
            Instances For
              theorem TateModule.mem_torsionBy_add {p : ℕ} {M : Type} [AddCommGroup M] {n : ℕ} {m : M} (hm : m ∈ Submodule.torsionBy ℤ M ↑(p ^ n)) (k : ℕ) :
              m ∈ Submodule.torsionBy ℤ M ↑(p ^ (n + k))
              theorem TateModule.smul_mem_torsionBy_of_mem_succ {p : ℕ} {M : Type} [AddCommGroup M] {n : ℕ} {m : M} (hm : m ∈ Submodule.torsionBy ℤ M ↑(p ^ (n + 1))) :
              ↑p • m ∈ Submodule.torsionBy ℤ M ↑(p ^ n)
              theorem TateModule.pow_smul_mem_torsionBy {p : ℕ} {M : Type} [AddCommGroup M] {n k : ℕ} {m : M} (hk : k ≤ n) (hm : m ∈ Submodule.torsionBy ℤ M ↑(p ^ n)) :
              ↑(p ^ (n - k)) • m ∈ Submodule.torsionBy ℤ M ↑(p ^ k)
              theorem TateModule.mem_torsionBy_one_of_smul_eq_zero {p : ℕ} {M : Type} [AddCommGroup M] {m : M} (hm : ↑p • m = 0) :
              theorem TateModule.smul_eq_zero_of_mem_torsionBy_one {p : ℕ} {M : Type} [AddCommGroup M] {m : M} (hm : m ∈ Submodule.torsionBy ℤ M ↑(p ^ 1)) :
              ↑p • m = 0
              theorem TateModule.finite_torsionBy {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (hcard : ∀ (n : ℕ), Nat.card ↥(Submodule.torsionBy ℤ M ↑(p ^ n)) = (p ^ n) ^ 2) (n : ℕ) :
              def TateModule.mulP (p : ℕ) (M : Type) [AddCommGroup M] (n : ℕ) :
              ↥(Submodule.torsionBy ℤ M ↑(p ^ (n + 1))) →+ ↥(Submodule.torsionBy ℤ M ↑(p ^ n))

              The transition homomorphism from p^(n + 1)-torsion to p^n-torsion given by multiplication by p.

              Equations
              Instances For
                def TateModule.kerMulPEquiv (p : ℕ) (M : Type) [AddCommGroup M] (n : ℕ) :
                ↥(mulP p M n).ker ≃ ↥(Submodule.torsionBy ℤ M ↑(p ^ 1))

                Identify the kernel of the torsion transition map with the p-torsion subgroup.

                Equations
                • One or more equations did not get rendered due to their size.
                Instances For
                  theorem TateModule.mulP_surjective {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (hcard : ∀ (n : ℕ), Nat.card ↥(Submodule.torsionBy ℤ M ↑(p ^ n)) = (p ^ n) ^ 2) (n : ℕ) :
                  theorem TateModule.exists_smul_eq_of_mem_torsionBy {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (hcard : ∀ (n : ℕ), Nat.card ↥(Submodule.torsionBy ℤ M ↑(p ^ n)) = (p ^ n) ^ 2) {n : ℕ} {m : M} (hm : m ∈ Submodule.torsionBy ℤ M ↑(p ^ n)) :
                  ∃ m' ∈ Submodule.torsionBy ℤ M ↑(p ^ (n + 1)), ↑p • m' = m
                  noncomputable def TateModule.liftAux {p : ℕ} {M : Type} [AddCommGroup M] (next : (k : ℕ) → ↥(Submodule.torsionBy ℤ M ↑(p ^ k)) → ↥(Submodule.torsionBy ℤ M ↑(p ^ (k + 1)))) (n : ℕ) (m : ↥(Submodule.torsionBy ℤ M ↑(p ^ n))) (j : ℕ) :
                  ↥(Submodule.torsionBy ℤ M ↑(p ^ (n + j)))

                  Iterate the supplied choices of lifts through successive torsion levels.

                  Equations
                  Instances For
                    noncomputable def TateModule.liftFun {p : ℕ} {M : Type} [AddCommGroup M] (next : (k : ℕ) → ↥(Submodule.torsionBy ℤ M ↑(p ^ k)) → ↥(Submodule.torsionBy ℤ M ↑(p ^ (k + 1)))) (n : ℕ) (m : ↥(Submodule.torsionBy ℤ M ↑(p ^ n))) (k : ℕ) :
                    M

                    Extend a torsion element to a sequence using the supplied lifts above its level and multiplication by powers of p below it.

                    Equations
                    Instances For
                      theorem TateModule.liftFun_of_le {p : ℕ} {M : Type} [AddCommGroup M] {next : (k : ℕ) → ↥(Submodule.torsionBy ℤ M ↑(p ^ k)) → ↥(Submodule.torsionBy ℤ M ↑(p ^ (k + 1)))} {n : ℕ} {m : ↥(Submodule.torsionBy ℤ M ↑(p ^ n))} {k : ℕ} (hk : n ≤ k) :
                      liftFun next n m k = ↑(liftAux next n m (k - n))
                      theorem TateModule.liftFun_of_lt {p : ℕ} {M : Type} [AddCommGroup M] {next : (k : ℕ) → ↥(Submodule.torsionBy ℤ M ↑(p ^ k)) → ↥(Submodule.torsionBy ℤ M ↑(p ^ (k + 1)))} {n : ℕ} {m : ↥(Submodule.torsionBy ℤ M ↑(p ^ n))} {k : ℕ} (hk : k < n) :
                      liftFun next n m k = ↑(p ^ (n - k)) • ↑m
                      theorem TateModule.coe_liftAux_congr {p : ℕ} {M : Type} [AddCommGroup M] {next : (k : ℕ) → ↥(Submodule.torsionBy ℤ M ↑(p ^ k)) → ↥(Submodule.torsionBy ℤ M ↑(p ^ (k + 1)))} {n : ℕ} {m : ↥(Submodule.torsionBy ℤ M ↑(p ^ n))} {j j' : ℕ} (h : j = j') :
                      ↑(liftAux next n m j) = ↑(liftAux next n m j')
                      theorem TateModule.pow_smul_coe_liftAux {p : ℕ} {M : Type} [AddCommGroup M] {next : (k : ℕ) → ↥(Submodule.torsionBy ℤ M ↑(p ^ k)) → ↥(Submodule.torsionBy ℤ M ↑(p ^ (k + 1)))} {n : ℕ} {m : ↥(Submodule.torsionBy ℤ M ↑(p ^ n))} (j : ℕ) {e : ℕ} (he : e = n + j) :
                      ↑(p ^ e) • ↑(liftAux next n m j) = 0
                      theorem TateModule.liftFun_mem {p : ℕ} {M : Type} [AddCommGroup M] {next : (k : ℕ) → ↥(Submodule.torsionBy ℤ M ↑(p ^ k)) → ↥(Submodule.torsionBy ℤ M ↑(p ^ (k + 1)))} (hnext : ∀ (k : ℕ) (m : ↥(Submodule.torsionBy ℤ M ↑(p ^ k))), ↑p • ↑(next k m) = ↑m) (n : ℕ) (m : ↥(Submodule.torsionBy ℤ M ↑(p ^ n))) :
                      liftFun next n m ∈ TateModule p M
                      theorem TateModule.proj_surjective {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (hcard : ∀ (n : ℕ), Nat.card ↥(Submodule.torsionBy ℤ M ↑(p ^ n)) = (p ^ n) ^ 2) (n : ℕ) (m : M) :
                      m ∈ Submodule.torsionBy ℤ M ↑(p ^ n) → ∃ (x : ↥(TateModule p M)), (proj p M n) x = m
                      theorem TateModule.range_proj {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (hcard : ∀ (n : ℕ), Nat.card ↥(Submodule.torsionBy ℤ M ↑(p ^ n)) = (p ^ n) ^ 2) (n : ℕ) :
                      Set.range ⇑(proj p M n) = ↑(Submodule.torsionBy ℤ M ↑(p ^ n))
                      theorem TateModule.exists_pair_of_card_eq_sq {p : ℕ} [Fact (Nat.Prime p)] {V : Type} [AddCommGroup V] [Module (ZMod p) V] [Finite V] (hV : Nat.card V = p ^ 2) :
                      ∃ (v : V) (w : V), ∀ (a b : ℤ), a • v + b • w = 0 → ↑p ∣ a ∧ ↑p ∣ b
                      theorem TateModule.exists_indep_pair_torsionBy_one {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (hcard : ∀ (n : ℕ), Nat.card ↥(Submodule.torsionBy ℤ M ↑(p ^ n)) = (p ^ n) ^ 2) :
                      ∃ e₁ ∈ Submodule.torsionBy ℤ M ↑(p ^ 1), ∃ e₂ ∈ Submodule.torsionBy ℤ M ↑(p ^ 1), ∀ (a b : ℤ), a • e₁ + b • e₂ = 0 → ↑p ∣ a ∧ ↑p ∣ b
                      theorem TateModule.dvd_of_rel_apply {p : ℕ} {M : Type} [AddCommGroup M] {x y : ↥(TateModule p M)} (h1 : ∀ (a b : ℤ), a • ↑x 1 + b • ↑y 1 = 0 → ↑p ∣ a ∧ ↑p ∣ b) (n : ℕ) (a b : ℤ) :
                      a • ↑x n + b • ↑y n = 0 → ↑(p ^ n) ∣ a ∧ ↑(p ^ n) ∣ b
                      noncomputable def TateModule.levelMap {p : ℕ} {M : Type} [AddCommGroup M] (x y : ↥(TateModule p M)) (n : ℕ) (c : ZMod (p ^ n) × ZMod (p ^ n)) :
                      ↥(Submodule.torsionBy ℤ M ↑(p ^ n))

                      Form a linear combination of the nth coordinates of two Tate-module elements with coefficients modulo p^n.

                      Equations
                      Instances For
                        theorem TateModule.levelMap_injective {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] {x y : ↥(TateModule p M)} (h1 : ∀ (a b : ℤ), a • ↑x 1 + b • ↑y 1 = 0 → ↑p ∣ a ∧ ↑p ∣ b) (n : ℕ) :
                        theorem TateModule.levelMap_bijective {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (hcard : ∀ (n : ℕ), Nat.card ↥(Submodule.torsionBy ℤ M ↑(p ^ n)) = (p ^ n) ^ 2) {x y : ↥(TateModule p M)} (h1 : ∀ (a b : ℤ), a • ↑x 1 + b • ↑y 1 = 0 → ↑p ∣ a ∧ ↑p ∣ b) (n : ℕ) :
                        theorem TateModule.exists_eq_levelMap {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (hcard : ∀ (n : ℕ), Nat.card ↥(Submodule.torsionBy ℤ M ↑(p ^ n)) = (p ^ n) ^ 2) {x y : ↥(TateModule p M)} (h1 : ∀ (a b : ℤ), a • ↑x 1 + b • ↑y 1 = 0 → ↑p ∣ a ∧ ↑p ∣ b) (n : ℕ) {m : M} (hm : m ∈ Submodule.torsionBy ℤ M ↑(p ^ n)) :
                        ∃ (a : ℕ) (b : ℕ), ↑a • ↑x n + ↑b • ↑y n = m
                        theorem TateModule.linearIndependent_pair {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] {x y : ↥(TateModule p M)} (h1 : ∀ (a b : ℤ), a • ↑x 1 + b • ↑y 1 = 0 → ↑p ∣ a ∧ ↑p ∣ b) :
                        theorem TateModule.mem_span_pair {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (hcard : ∀ (n : ℕ), Nat.card ↥(Submodule.torsionBy ℤ M ↑(p ^ n)) = (p ^ n) ^ 2) {x y : ↥(TateModule p M)} (h1 : ∀ (a b : ℤ), a • ↑x 1 + b • ↑y 1 = 0 → ↑p ∣ a ∧ ↑p ∣ b) (z : ↥(TateModule p M)) :
                        ∃ (s : ℤ_[p]) (t : ℤ_[p]), s • x + t • y = z
                        theorem TateModule.exists_pair {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (hcard : ∀ (n : ℕ), Nat.card ↥(Submodule.torsionBy ℤ M ↑(p ^ n)) = (p ^ n) ^ 2) :
                        ∃ (x : ↥(TateModule p M)) (y : ↥(TateModule p M)), ∀ (a b : ℤ), a • ↑x 1 + b • ↑y 1 = 0 → ↑p ∣ a ∧ ↑p ∣ b
                        theorem TateModule.top_le_span_pair {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (hcard : ∀ (n : ℕ), Nat.card ↥(Submodule.torsionBy ℤ M ↑(p ^ n)) = (p ^ n) ^ 2) {x y : ↥(TateModule p M)} (h1 : ∀ (a b : ℤ), a • ↑x 1 + b • ↑y 1 = 0 → ↑p ∣ a ∧ ↑p ∣ b) :
                        noncomputable def TateModule.basisOfCard {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (hcard : ∀ (n : ℕ), Nat.card ↥(Submodule.torsionBy ℤ M ↑(p ^ n)) = (p ^ n) ^ 2) :

                        Choose a two-element basis of the Tate module when the p^n-torsion groups have cardinality p^(2n).

                        Equations
                        Instances For
                          theorem TateModule.basisOfCard_rel_one {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (hcard : ∀ (n : ℕ), Nat.card ↥(Submodule.torsionBy ℤ M ↑(p ^ n)) = (p ^ n) ^ 2) (a b : ℤ) (h : a • ↑((basisOfCard hcard) 0) 1 + b • ↑((basisOfCard hcard) 1) 1 = 0) :
                          ↑p ∣ a ∧ ↑p ∣ b
                          theorem TateModule.dvd_of_rel_basisOfCard_apply {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (hcard : ∀ (n : ℕ), Nat.card ↥(Submodule.torsionBy ℤ M ↑(p ^ n)) = (p ^ n) ^ 2) (n : ℕ) (a b : ℤ) (h : a • ↑((basisOfCard hcard) 0) n + b • ↑((basisOfCard hcard) 1) n = 0) :
                          ↑(p ^ n) ∣ a ∧ ↑(p ^ n) ∣ b
                          theorem TateModule.exists_eq_smul_basisOfCard_apply {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (hcard : ∀ (n : ℕ), Nat.card ↥(Submodule.torsionBy ℤ M ↑(p ^ n)) = (p ^ n) ^ 2) (n : ℕ) {m : M} (hm : m ∈ Submodule.torsionBy ℤ M ↑(p ^ n)) :
                          ∃ (a : ℕ) (b : ℕ), ↑a • ↑((basisOfCard hcard) 0) n + ↑b • ↑((basisOfCard hcard) 1) n = m
                          theorem TateModule.free {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (hcard : ∀ (n : ℕ), Nat.card ↥(Submodule.torsionBy ℤ M ↑(p ^ n)) = (p ^ n) ^ 2) :
                          theorem TateModule.finite {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (hcard : ∀ (n : ℕ), Nat.card ↥(Submodule.torsionBy ℤ M ↑(p ^ n)) = (p ^ n) ^ 2) :
                          theorem TateModule.finrank_eq_two {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] (hcard : ∀ (n : ℕ), Nat.card ↥(Submodule.torsionBy ℤ M ↑(p ^ n)) = (p ^ n) ^ 2) :
                          theorem TateModule.rep_sub_mem_of_forall_torsionBy {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] {G : Type} [Monoid G] [DistribMulAction G M] (g : G) (n : ℕ) (h : ∀ m ∈ Submodule.torsionBy ℤ M ↑(p ^ n), g • m = m) (x : ↥(TateModule p M)) :
                          theorem TateModule.rep_eq_one_of_forall_torsionBy {p : ℕ} {M : Type} [AddCommGroup M] [Fact (Nat.Prime p)] {G : Type} [Monoid G] [DistribMulAction G M] (g : G) (h : ∀ (n : ℕ), ∀ m ∈ Submodule.torsionBy ℤ M ↑(p ^ n), g • m = m) :
                          (rep p M G) g = 1

                          The set of affine coordinates of a point, or the empty set at infinity.

                          Equations
                          Instances For
                            theorem WeierstrassCurve.Affine.Point.algEquiv_smul_eq_self_of_forall_coords {F S : Type} [Field F] [CommRing S] [Algebra S F] [DecidableEq F] {W : WeierstrassCurve S} (σ : F ≃ₐ[S] F) (P : (W.toAffine.baseChange F).Point) (h : ∀ z ∈ P.coords, σ z = z) :
                            σ • P = P

                            The rational field extension generated by the coordinates of all p^n-torsion points.

                            Equations
                            Instances For

                              The rank-two adically continuous Galois representation on the Tate module, using the supplied basis and torsion cardinalities.

                              Equations
                              • One or more equations did not get rendered due to their size.
                              Instances For
                                @[simp]
                                theorem GaloisRep.padicIntToRingLevel_apply (𝒪 : Type) [CommRing 𝒪] [IsLocalRing 𝒪] (p : ℕ) [Fact (Nat.Prime p)] (hp : ↑p ∈ IsLocalRing.maximalIdeal 𝒪) (n : ℕ) (a : ℤ_[p]) :
                                theorem GaloisRep.padicIntToRingLevel_natCast (𝒪 : Type) [CommRing 𝒪] [IsLocalRing 𝒪] (p : ℕ) [Fact (Nat.Prime p)] (hp : ↑p ∈ IsLocalRing.maximalIdeal 𝒪) (n c : ℕ) :
                                (padicIntToRingLevel 𝒪 p hp n) ↑c = ↑c
                                theorem GaloisRep.mk_padicIntToRing (𝒪 : Type) [CommRing 𝒪] [IsLocalRing 𝒪] (p : ℕ) [Fact (Nat.Prime p)] [IsAdicComplete (IsLocalRing.maximalIdeal 𝒪) 𝒪] (hp : ↑p ∈ IsLocalRing.maximalIdeal 𝒪) (n : ℕ) (a : ℤ_[p]) :
                                theorem GaloisRep.eq_padicIntToRing (𝒪 : Type) [CommRing 𝒪] [IsLocalRing 𝒪] (p : ℕ) [Fact (Nat.Prime p)] [IsAdicComplete (IsLocalRing.maximalIdeal 𝒪) 𝒪] (hp : ↑p ∈ IsLocalRing.maximalIdeal 𝒪) {φ : ℤ_[p] →+* 𝒪} (hφ : ∀ (n : ℕ), (Ideal.Quotient.mk (IsLocalRing.maximalIdeal 𝒪 ^ n)).comp φ = padicIntToRingLevel 𝒪 p hp n) :
                                φ = padicIntToRing 𝒪 p hp
                                theorem GaloisRep.mk_comp_eq_padicIntToRingLevel_iff (𝒪 : Type) [CommRing 𝒪] [IsLocalRing 𝒪] (p : ℕ) [Fact (Nat.Prime p)] (hp : ↑p ∈ IsLocalRing.maximalIdeal 𝒪) (φ : ℤ_[p] →+* 𝒪) (n : ℕ) :

                                The Galois representation on the elliptic curve's Tate module, using the basis constructed from its torsion cardinalities.

                                Equations
                                Instances For