Definitions/Def_ModularCurve_EichlerShimuraData.lean
Tate module, Eichler–Shimura data and λ-adic realisations
The standing setting is a field extension L/K, natural numbers N (nonzero) and p, and an abelian group J carrying a module structure over the abstract Hecke algebra HeckeAlg =\mathbb{Z}[T_\ell : \ell \text{ prime}] (a polynomial ring with one variable heckeGen ℓ per rational prime) together with a distributive action of L\simeq_{\mathrm{alg}K}L commuting with the Hecke action. TateModule p J is the Hecke submodule of the sequence module \mathbb{N}\to J consisting of those x with x_0=0 and p\cdot x_{n+1}=x_n for all n; thus p^n\cdot x_n=0 (pow_smul_apply), so such a sequence is a compatible system of p^n-torsion points, and the module is p-divisible in the sense that a sequence killed by some p^k vanishes (eq_zero_of_pow_smul_eq_zero); it is stable under the group action (smul_mem). FreeOfRankTwo p J asserts the existence of e_1,e_2 in this Tate module such that every element t satisfies p^k\cdot t=s_1e_1+s_2e_2 for some k and some Hecke operators s_i, and such that any relation s_1e_1+s_2e_2=0 forces both s_1 and s_2 to annihilate the whole Tate module: a basis-up-to-isogeny formulation rather than freeness of a localised module. CardinalityAJ p J g says \#\{x\in J: p^n x=0\}=p^{2gn} for all n. EichlerShimuraData N p J is a four-field proposition bundling FreeOfRankTwo, the condition that inertia at primes \ell\nmid Np fixes all p-power torsion of J, the Frobenius relation \sigma^2x-T_\ell(\sigma x)+\ell x=0 on p-power torsion for \sigma Frobenius at such \ell, and nonvanishing of \mathfrak m-torsion in J for every eigenform ideal \mathfrak m of level N containing p.
IsPPowTorsion p x is the predicate \exists n,\ p^nx=0, with closure under sums, negatives, differences, the group action, Hecke operators and natural scalars. IsLambdaAdicRealization p J k φ V π ρ packages: V a two-dimensional k-vector space, \rho a homomorphism from L\simeq_{\mathrm{alg}K}L to \mathrm{GL}_k(V), and \pi:J\to V sending 0 to 0, additive on p-power torsion, Galois-equivariant and \varphi-semilinear for the Hecke action there, with \pi of the p-power torsion spanning V; consequently \pi respects negation, differences and integer multiples on torsion, and an endomorphism of V is determined by its values on \pi of the torsion (linearMap_eq_zero, linearMap_ext). Finally attachmentTraceData φ is \ell\mapsto\varphi(T_\ell) at primes and 0 elsewhere, and attachmentDetData k is \ell\mapsto\ell in k.
Relation to Mathlib
Mathlib has no Hecke algebra acting on a Jacobian and no p-adic Tate module of an abelian variety; HeckeAlg is realised as a Mathlib multivariate polynomial ring and the Tate module as a submodule of a sequence module, while torsion submodules, finrank and linear equivalences are Mathlib's.
Where it is used
These definitions form the interface for the Galois representation attached to a weight-two normalised eigenform on \Gamma_0(N) through the p-adic Tate module of the Jacobian of the modular curve: EichlerShimuraData records the properties cited of that Tate module, and IsLambdaAdicRealization the two-dimensional representation extracted from it, which is what the level-lowering step and the Frey-curve argument consume.
References
- G. Shimura, Introduction to the Arithmetic Theory of Automorphic Functions, Publications of the Mathematical Society of Japan 11, Princeton University Press, 1971, Chapter 7
- F. Diamond and J. Shurman, A First Course in Modular Forms, Graduate Texts in Mathematics 228, Springer, 2005, Chapter 9
- H. Darmon, F. Diamond and R. Taylor, Fermat's Last Theorem, in: Current Developments in Mathematics 1995, International Press, 1995, 1–154, §3.1
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 241 lines
- 37 declarations
- used in the statements of 32 theorems and imported by 43 proofs
- imports 2 definition modules
Source file: Definitions/Def_ModularCurve_EichlerShimuraData.lean
Imported by
Declarations
- def
ModularCurve.TateModule - lemma
ModularCurve.TateModule.mem_iff - lemma
ModularCurve.TateModule.pow_smul_apply - lemma
ModularCurve.TateModule.eq_zero_of_pow_smul_eq_zero - lemma
ModularCurve.TateModule.smul_mem - def
ModularCurve.FreeOfRankTwo - def
ModularCurve.CardinalityAJ - structure
ModularCurve.EichlerShimuraData - field
ModularCurve.EichlerShimuraData.freeOfRankTwo - field
ModularCurve.EichlerShimuraData.unramifiedOutside - field
ModularCurve.EichlerShimuraData.frobeniusQuadratic - field
ModularCurve.EichlerShimuraData.eigenformSupport - def
ModularCurve.IsPPowTorsion - lemma
ModularCurve.IsPPowTorsion.zero - lemma
ModularCurve.IsPPowTorsion.add - lemma
ModularCurve.IsPPowTorsion.neg - lemma
ModularCurve.IsPPowTorsion.sub - lemma
ModularCurve.nsmul_galois_smul - lemma
ModularCurve.IsPPowTorsion.galois_smul - lemma
ModularCurve.IsPPowTorsion.hecke_smul - lemma
ModularCurve.IsPPowTorsion.nsmul - structure
ModularCurve.IsLambdaAdicRealization - field
ModularCurve.IsLambdaAdicRealization.finite - field
ModularCurve.IsLambdaAdicRealization.finrank_eq - field
ModularCurve.IsLambdaAdicRealization.map_zero - field
ModularCurve.IsLambdaAdicRealization.map_add - field
ModularCurve.IsLambdaAdicRealization.map_galois - field
ModularCurve.IsLambdaAdicRealization.map_hecke - field
ModularCurve.IsLambdaAdicRealization.spanning - lemma
ModularCurve.IsLambdaAdicRealization.map_neg - lemma
ModularCurve.IsLambdaAdicRealization.map_sub - lemma
ModularCurve.IsLambdaAdicRealization.map_nsmul - lemma
ModularCurve.IsLambdaAdicRealization.linearMap_eq_zero - lemma
ModularCurve.IsLambdaAdicRealization.linearMap_ext - def
ModularCurve.attachmentTraceData - def
ModularCurve.attachmentDetData - lemma
ModularCurve.attachmentTraceData_apply_prime
Source
import Definitions.Def_HeckeGalois_EichlerShimura import Definitions.Def_ModularCurve_EigenformIdeal set_option autoImplicit false noncomputable section namespace ModularCurve section TateModule variable (p : ℕ) {G : Type*} [Group G] (J : Type*) [AddCommGroup J] [Module HeckeAlg J] [DistribMulAction G J] [SMulCommClass G HeckeAlg J] def TateModule : Submodule HeckeAlg (ℕ → J) where carrier := {x | x 0 = 0 ∧ ∀ n, p • x (n + 1) = x n} add_mem' := by rintro x y ⟨hx0, hx⟩ ⟨hy0, hy⟩ refine ⟨by simp [hx0, hy0], fun n => ?_⟩ simp only [Pi.add_apply, smul_add, hx n, hy n] zero_mem' := ⟨rfl, fun n => smul_zero p⟩ smul_mem' := by rintro s x ⟨hx0, hx⟩ refine ⟨by simp [hx0], fun n => ?_⟩ simp only [Pi.smul_apply] rw [smul_comm, hx n] namespace TateModule variable {p} {J} lemma mem_iff {x : ℕ → J} : x ∈ TateModule p J ↔ x 0 = 0 ∧ ∀ n, p • x (n + 1) = x n := Iff.rfl lemma pow_smul_apply {x : ℕ → J} (hx : x ∈ TateModule p J) (n : ℕ) : p ^ n • x n = 0 := by induction n with | zero => simpa using hx.1 | succ n ih => have := hx.2 n calc p ^ (n + 1) • x (n + 1) = p ^ n • p • x (n + 1) := by rw [pow_succ, mul_smul] _ = p ^ n • x n := by rw [this] _ = 0 := ih lemma eq_zero_of_pow_smul_eq_zero {x : ℕ → J} (hx : x ∈ TateModule p J) {k : ℕ} (h : p ^ k • x = 0) : x = 0 := by have key : ∀ m n, x n = p ^ m • x (n + m) := by intro m induction m with | zero => intro n; simp | succ m ih => intro n calc x n = p ^ m • x (n + m) := ih n _ = p ^ m • (p • x (n + m + 1)) := by rw [hx.2 (n + m)] _ = (p ^ m * p) • x (n + m + 1) := by rw [mul_smul] _ = p ^ (m + 1) • x (n + (m + 1)) := by rw [← pow_succ, ← Nat.add_assoc] funext n have hk : p ^ k • x (n + k) = 0 := by have := congrFun h (n + k) simpa using this simp only [Pi.zero_apply] rw [key k n, hk] omit [SMulCommClass G HeckeAlg J] in lemma smul_mem (g : G) {x : ℕ → J} (hx : x ∈ TateModule p J) : g • x ∈ TateModule p J := by refine ⟨by simp [Pi.smul_apply, hx.1], fun n => ?_⟩ simp only [Pi.smul_apply] rw [smul_comm, hx.2 n] end TateModule end TateModule section FreeOfRankTwo variable (p : ℕ) (J : Type*) [AddCommGroup J] [Module HeckeAlg J] def FreeOfRankTwo : Prop := ∃ e₁ e₂ : ℕ → J, e₁ ∈ TateModule p J ∧ e₂ ∈ TateModule p J ∧ (∀ t ∈ TateModule p J, ∃ (k : ℕ) (s₁ s₂ : HeckeAlg), p ^ k • t = s₁ • e₁ + s₂ • e₂) ∧ (∀ s₁ s₂ : HeckeAlg, s₁ • e₁ + s₂ • e₂ = 0 → (∀ t ∈ TateModule p J, s₁ • t = 0) ∧ (∀ t ∈ TateModule p J, s₂ • t = 0)) def CardinalityAJ (g : ℕ) : Prop := ∀ n : ℕ, Nat.card {x : J // p ^ n • x = 0} = p ^ (2 * g * n) end FreeOfRankTwo section Bundle variable {K L : Type*} [Field K] [Field L] [Algebra K L] variable (N p : ℕ) [NeZero N] (J : Type*) [AddCommGroup J] [Module HeckeAlg J] [DistribMulAction (L ≃ₐ[K] L) J] [SMulCommClass (L ≃ₐ[K] L) HeckeAlg J] structure EichlerShimuraData : Prop where freeOfRankTwo : FreeOfRankTwo p J unramifiedOutside : UnramifiedOutside (K := K) (L := L) N p J frobeniusQuadratic : FrobeniusQuadratic (K := K) (L := L) N p J eigenformSupport : EigenformSupport p J (IsEigenformIdeal N) end Bundle section Torsion variable (p : ℕ) {J : Type*} [AddCommGroup J] def IsPPowTorsion (x : J) : Prop := ∃ n : ℕ, p ^ n • x = 0 variable {p} lemma IsPPowTorsion.zero : IsPPowTorsion p (0 : J) := ⟨0, smul_zero _⟩ lemma IsPPowTorsion.add {x y : J} (hx : IsPPowTorsion p x) (hy : IsPPowTorsion p y) : IsPPowTorsion p (x + y) := by obtain ⟨m, hm⟩ := hx obtain ⟨n, hn⟩ := hy refine ⟨m + n, ?_⟩ have hx' : p ^ (m + n) • x = 0 := by rw [pow_add, mul_comm, mul_smul, hm, smul_zero] have hy' : p ^ (m + n) • y = 0 := by rw [pow_add, mul_smul, hn, smul_zero] rw [smul_add, hx', hy', add_zero] lemma IsPPowTorsion.neg {x : J} (hx : IsPPowTorsion p x) : IsPPowTorsion p (-x) := by obtain ⟨n, hn⟩ := hx refine ⟨n, ?_⟩ rw [smul_neg, hn, neg_zero] lemma IsPPowTorsion.sub {x y : J} (hx : IsPPowTorsion p x) (hy : IsPPowTorsion p y) : IsPPowTorsion p (x - y) := by rw [sub_eq_add_neg] exact hx.add hy.neg private lemma nsmul_galois_smul {G : Type*} [Monoid G] [DistribMulAction G J] (σ : G) (m : ℕ) (x : J) : m • (σ • x) = σ • (m • x) := by induction m with | zero => simp | succ m ih => rw [succ_nsmul, succ_nsmul, smul_add, ih] lemma IsPPowTorsion.galois_smul {G : Type*} [Group G] [DistribMulAction G J] (σ : G) {x : J} (hx : IsPPowTorsion p x) : IsPPowTorsion p (σ • x) := by obtain ⟨n, hn⟩ := hx refine ⟨n, ?_⟩ rw [nsmul_galois_smul σ (p ^ n) x, hn, smul_zero] lemma IsPPowTorsion.hecke_smul [Module HeckeAlg J] (t : HeckeAlg) {x : J} (hx : IsPPowTorsion p x) : IsPPowTorsion p (t • x) := by obtain ⟨n, hn⟩ := hx refine ⟨n, ?_⟩ rw [← Nat.cast_smul_eq_nsmul HeckeAlg (p ^ n) (t • x), ← mul_smul, mul_comm, mul_smul, Nat.cast_smul_eq_nsmul HeckeAlg (p ^ n) x, hn, smul_zero] lemma IsPPowTorsion.nsmul [Module HeckeAlg J] (m : ℕ) {x : J} (hx : IsPPowTorsion p x) : IsPPowTorsion p (m • x) := by rw [← Nat.cast_smul_eq_nsmul HeckeAlg m x] exact hx.hecke_smul _ end Torsion section Realization variable {K L : Type*} [Field K] [Field L] [Algebra K L] variable (p : ℕ) (J : Type*) [AddCommGroup J] [Module HeckeAlg J] [DistribMulAction (L ≃ₐ[K] L) J] variable (k : Type*) [Field k] (φ : HeckeAlg →+* k) variable (V : Type*) [AddCommGroup V] [Module k V] variable (π : J → V) (ρ : (L ≃ₐ[K] L) →* (V ≃ₗ[k] V)) structure IsLambdaAdicRealization : Prop where finite : Module.Finite k V finrank_eq : Module.finrank k V = 2 map_zero : π 0 = 0 map_add : ∀ x y : J, IsPPowTorsion p x → IsPPowTorsion p y → π (x + y) = π x + π y map_galois : ∀ (σ : L ≃ₐ[K] L) (x : J), IsPPowTorsion p x → π (σ • x) = ρ σ (π x) map_hecke : ∀ (t : HeckeAlg) (x : J), IsPPowTorsion p x → π (t • x) = φ t • π x spanning : Submodule.span k (π '' {x : J | IsPPowTorsion p x}) = ⊤ namespace IsLambdaAdicRealization variable {p J k φ V π ρ} variable (h : IsLambdaAdicRealization p J k φ V π ρ) include h lemma map_neg (x : J) (hx : IsPPowTorsion p x) : π (-x) = -π x := by have h0 : π (x + -x) = π x + π (-x) := h.map_add x (-x) hx hx.neg rw [add_neg_cancel, h.map_zero] at h0 exact (neg_eq_of_add_eq_zero_right h0.symm).symm lemma map_sub (x y : J) (hx : IsPPowTorsion p x) (hy : IsPPowTorsion p y) : π (x - y) = π x - π y := by rw [sub_eq_add_neg, h.map_add x (-y) hx hy.neg, h.map_neg y hy, ← sub_eq_add_neg] lemma map_nsmul (m : ℕ) (x : J) (hx : IsPPowTorsion p x) : π (m • x) = (m : k) • π x := by rw [← Nat.cast_smul_eq_nsmul HeckeAlg m x, h.map_hecke _ x hx, map_natCast] lemma linearMap_eq_zero (T : V →ₗ[k] V) (hT : ∀ x : J, IsPPowTorsion p x → T (π x) = 0) : T = 0 := by rw [← LinearMap.ker_eq_top, ← top_le_iff, ← h.spanning, Submodule.span_le] rintro v ⟨x, hx, rfl⟩ exact hT x hx lemma linearMap_ext {T₁ T₂ : V →ₗ[k] V} (hT : ∀ x : J, IsPPowTorsion p x → T₁ (π x) = T₂ (π x)) : T₁ = T₂ := by have key := h.linearMap_eq_zero (T₁ - T₂) fun x hx => by rw [LinearMap.sub_apply, hT x hx, sub_self] rwa [sub_eq_zero] at key end IsLambdaAdicRealization end Realization section AttachmentData variable {k : Type*} [Field k] def attachmentTraceData (φ : HeckeAlg →+* k) : ℕ → k := fun ℓ => if h : ℓ.Prime then φ (heckeGen ⟨ℓ, h⟩) else 0 def attachmentDetData (k : Type*) [Field k] : ℕ → k := fun ℓ => (ℓ : k) @[simp] lemma attachmentTraceData_apply_prime (φ : HeckeAlg →+* k) {ℓ : ℕ} (hℓ : ℓ.Prime) : attachmentTraceData φ ℓ = φ (heckeGen ⟨ℓ, hℓ⟩) := dif_pos hℓ end AttachmentData end ModularCurve
Statements phrased using this module (32)
- Newform eigenplane in the Tate module of J₀(M), with Steinberg lines
CuspForm.IsNewform.exists_eigenPlane_torLine_tateModule_jZero3,797 below · depth 10 - λ-adic eigenplane of a weight-two newform in T_λ(J₀(M))
CuspForm.IsNewform.exists_eigenPlane_tateModule_jZero1,290 below · depth 11 - Hecke-pinned λ-adic eigenplane in the Tate module of J₀(M)
CuspForm.IsNewform.exists_heckePinnedEigenPlane_tateModule_jZero1,327 below · depth 11 - Ordinary line in the eigenplane at a multiplicative prime
CuspForm.IsNewform.exists_ordLine_eigenPlane_tateModule_jZero_of_dvd4,787 below · depth 11 - Eigenplanes in T_λ J₀(M): eigen off the level, determinant q
CuspForm.IsNewform.killedOffLevel_cyclotomicDet_of_eigenPlane_tateModule_jZero1,102 below · depth 11 - Finite freeness of the Tate module over ℤₚ
W54.finite_free_tateModule0 below · depth 11 - Finite-level Galois triviality transfers to the p-adic Tate module
W54.tateModule_adicContinuity0 below · depth 11 - Eichler–Shimura relation on the Tate module of J₀(M)
W54.tateModule_frobeniusQuadratic0 below · depth 11 - Unramifiedness passes from p-power torsion to the Tate module
W54.tateModule_unramified0 below · depth 11 - Rank-two Hecke eigenspace in the λ-adic Tate module of J₀(M)
CuspForm.IsNewform.exists_heckeEigenspace_tateModule_jZero_finrank_eq_two841 below · depth 12 - Eigenplane monodromy span at λ ‖ M has dimension ≤ 1
CuspForm.IsNewform.finrank_monodromySpan_eigenPlane_tateModule_jZero_le_one_of_dvd4,786 below · depth 12 - Frobenius trace a_ℓ(g) on a newform eigenplane
CuspForm.IsNewform.frobeniusTrace_of_eigenPlane_tateModule_jZero1,305 below · depth 12 - U_λ-eigenvalue on Hecke eigenvectors in the Tate module
CuspForm.IsNewform.heckeU_smul_of_mem_heckeEigenspace_tateModule_jZero886 below · depth 12 - Hecke eigenplane in the Tate module of J₀(N)
CuspForm.exists_eigenPlane_tateModule_jZero_of_point1,289 below · depth 12 - pⁿ-divisibility in the Tate module detects vanishing at n
W54.pow_smul_tateModule_eq_vanishing0 below · depth 12 - Determinant of a Frobenius-normalised stable plane is integrally cyclotomic
eigenPlane_det_congruent_cyclotomic_of_frobenius_det486 below · depth 12 - Frobenius determinant equals ℓ on a Hecke eigenplane
eigenPlane_det_frobenius_eq_prime1,037 below · depth 12 - pⁿ-torsion of J₀(N) has p^{2gn} points
ModularCurve.JZero.cardinalityAJ_genusFF460 below · depth 13 - Finiteness of p^k-torsion of J₀(N) from the point count
ModularCurve.JZero.finite_torsion_pow_of_cardinalityAJ0 below · depth 13 - Agreement of the two Tate module carriers
ModularCurve.TateModule.mem_root_iff0 below · depth 13 - Ordinary line in the λ-adic eigenplane of J₀(M)
CuspForm.IsNewform.exists_ordLine_eigenPlane_tateModule_jZero_of_not_dvd2,351 below · depth 14 - Eichler–Shimura quadratic relation for Frobenius on the eigenplane
CuspForm.IsNewform.frobenius_quadratic_mem_of_inertia_sub_mem_eigenPlane_tateModule_jZero_of_not_dvd2,331 below · depth 14 - Structures on the λ-adic Tate module of J₀(M)
ModularCurve.exists_module_padicInt_tateModule_jZero_galoisRep_isAdicContinuous_heckeRep893 below · depth 14 - Good-reduction specialization ordinary on the λ-adic eigenplane
CuspForm.IsNewform.exists_specialization_jZeroOrdConn_eigenPlane_tateModule_jZero_of_not_dvd2,342 below · depth 15 - Ordinary eigenvectors dying under reduction span at most a line
CuspForm.IsNewform.finrank_le_one_of_le_reductionKernelSpan_tateModule_jZero_of_isUnit2,269 below · depth 15 - Non-trivial inertia at q ∥ M on a Hecke eigenplane
CuspForm.IsNewform.exists_mem_inertiaSubgroupIn_baseChange_apply_ne_of_eigenPlane_tateModule_jZero3,737 below · depth 16 - Toric line in the eigenplane with Frobenius scalar a_q(g) q
CuspForm.IsNewform.exists_torLine_of_eigenPlane_tateModule_jZero_eq_qCoeff3,742 below · depth 16 - Inertia-fixed vector with Frobenius acting as q U_q
CuspForm.IsNewform.exists_ne_zero_frobenius_eq_prime_smul_heckeU_of_eigenPlane_tateModule_jZero3,737 below · depth 17 - Frobenius acts by ± q on a line in the eigenplane
CuspForm.IsNewform.exists_torLine_of_eigenPlane_tateModule_jZero3,737 below · depth 17 - Frobenius acts as U_λ modulo monodromy on the eigenplane
CuspForm.IsNewform.frobenius_sub_heckeU_smul_mem_monodromySpan_eigenPlane_tateModule_jZero_of_dvd4,814 below · depth 17 - U_q acts by a_q(g)∈{0,± 1} on λ-adic eigenvectors
CuspForm.IsNewform.heckeU_eq_intCast_smul_of_mem_heckeEigenspace_tateModule_jZero841 below · depth 17 - Newform eigenplane not inside the finite part of Tₚ J₀(N₀p)
ModularCurve.JZeroNeronObjectAtP.not_eigenPlane_le_span_tateModule_finPts_of_isNewform_of_inertia_smul_sub_mem_finPts2,099 below · depth 18