Definitions/Def_ModularCurve_SSDegeneracyHecke.lean
Supersingular degeneracy legs, Hecke matrices, level datum
Throughout, F_N denotes modularFunctionFieldC K N, the subfield K(j(q),j(q^N)) of the Laurent series over K, and \Sigma(N) denotes ssPlaces p N K, the places of F_N that are rational, affine for the pair of generators, and whose value at j(q) lies in ssJSet p K. The first group of declarations builds the two degeneracy legs between levels: if j(q^M)\in F_{Ms} then F_M\le F_{Ms} and levelAlphaC is the resulting inclusion of K-algebras; if j(q^s)\in F_{Ms} then the substitution q\mapsto q^s carries F_M into F_{Ms} (because it sends j(q^M) to j(q^{Ms})) and levelBetaC is the resulting K-algebra map, with the two coercion lemmas identifying their effect on Laurent series. IsAtkinLehnerLevelAut is the predicate on a K-algebra automorphism \sigma of F_{Ms} that \sigma interchanges j(q) with j(q^s) and j(q^{Ms}) with j(q^M); autOnPlaces is the induced bijection of places.
Next, two integral matrices indexed by \Sigma(N)\times\Sigma(N). Given integrality of the two legs F_N\to K(j(q),j(q^N),j(q^{\ell}),j(q^{N\ell})), the entry (y,x) of ssHeckeMatrixC is the sum, over all places W of the roof field restricting to x along \beta and to y along \alpha, of the ramification index of W along \beta times the inertia degree along \alpha. The entry (y,x) of ssFrobMatrixC is 1 when y is the Frobenius image of x and 0 otherwise. ssHeckeFamilyC assembles these over primes \ell, using the Frobenius matrix when \ell=p.
SSLevelDatum p K M s is a structure packaging: the two memberships above; integrality of levelAlphaC, levelBetaC and of all level-N Hecke legs; that both restrictions of a place in \Sigma(Ms) lie in \Sigma(M); an automorphism satisfying IsAtkinLehnerLevelAut preserving \Sigma(Ms); and a ModularPolynomialData p with its Kronecker congruence. From such a datum X come the maps fst, snd : \Sigma(Ms)\to\Sigma(M), the self-map atkinLehnerPerm of \Sigma(Ms), the degeneracy datum with these two maps and width \max(1,\mathrm{placeWidth}), and the two Hecke families edgeHecke, vertexHecke. HeckeLaws is the conjunction: both families commute among themselves; for every prime \ell\neq s each of the two pushforwards intertwines edgeHecke with vertexHecke; and the joint kernel of the two pushforwards is stable under every edgeHecke matrix. heckeData returns the corresponding CerednikDrinfeld.HeckeData with bad set \{s\} when HeckeLaws holds, and the zero family otherwise.
Relation to Mathlib
Mathlib supplies the intermediate-field, Laurent series and integer-matrix infrastructure used here; the modular function fields, their places and supersingular loci, the degeneracy legs and the degeneracy/Hecke data structures are the project's own notions.
Where it is used
The degeneracy datum and Hecke data produced here are the combinatorial input to the ribbon construction: edges are the supersingular places at level Ms, vertices those at level M, with the two degeneracy maps and the widths of the places, and a commuting family of Hecke matrices compatible with the pushforwards away from s. This is the shape in which the component group of the special fibre, with its Hecke action, enters the level-lowering step.
References
- P. Deligne and M. Rapoport, Les schémas de modules de courbes elliptiques, in: Modular Functions of One Variable II, Lecture Notes in Mathematics 349, Springer, 1973, 143–316
- K. A. Ribet, On modular representations of \mathrm{Gal}(\overline{\mathbb{Q}}/\mathbb{Q}) arising from modular forms, Inventiones Mathematicae 100 (1990), 431–476
- H. Darmon, F. Diamond and R. Taylor, Fermat's Last Theorem, in: Current Developments in Mathematics 1995, International Press, 1995, 1–154, §4
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 221 lines
- 33 declarations
- used in the statements of 68 theorems and imported by 70 proofs
- imports 3 definition modules
Source file: Definitions/Def_ModularCurve_SSDegeneracyHecke.lean
Imported by
- no other definition module
Declarations
- theorem
ModularCurve.modularFunctionFieldC_le_of_mem - theorem
ModularCurve.map_qExpandAlgC_le_of_mem - def
ModularCurve.levelAlphaC - theorem
ModularCurve.coe_levelAlphaC - def
ModularCurve.levelBetaCRingHom - def
ModularCurve.levelBetaC - theorem
ModularCurve.coe_levelBetaC - def
ModularCurve.IsAtkinLehnerLevelAut - def
ModularCurve.autOnPlaces - def
ModularCurve.ssHeckeMatrixC - def
ModularCurve.ssFrobMatrixC - def
ModularCurve.ssHeckeFamilyC - structure
ModularCurve.SSLevelDatum - field
ModularCurve.SSLevelDatum.mem_M - field
ModularCurve.SSLevelDatum.mem_s - field
ModularCurve.SSLevelDatum.fstIntegral - field
ModularCurve.SSLevelDatum.sndIntegral - field
ModularCurve.SSLevelDatum.legsIntegral - field
ModularCurve.SSLevelDatum.fst_mem - field
ModularCurve.SSLevelDatum.snd_mem - field
ModularCurve.SSLevelDatum.atkinLehnerAut - field
ModularCurve.SSLevelDatum.isAtkinLehner - field
ModularCurve.SSLevelDatum.stable - field
ModularCurve.SSLevelDatum.frobData - field
ModularCurve.SSLevelDatum.kronecker - def
ModularCurve.SSLevelDatum.fst - def
ModularCurve.SSLevelDatum.snd - def
ModularCurve.SSLevelDatum.atkinLehnerPerm - def
ModularCurve.SSLevelDatum.degeneracyData - def
ModularCurve.SSLevelDatum.edgeHecke - def
ModularCurve.SSLevelDatum.vertexHecke - def
ModularCurve.SSLevelDatum.HeckeLaws - def
ModularCurve.SSLevelDatum.heckeData
Source
import Definitions.Def_ModularCurve_CharLDegeneracyHecke import Definitions.Def_ModularCurve_PlaceWidth import Definitions.Def_CerednikDrinfeld_Ribbon set_option autoImplicit false noncomputable section open AlgebraicCurve namespace ModularCurve section LevelLegs variable (K : Type*) [Field K] (M s : ℕ) [NeZero M] [NeZero s] theorem modularFunctionFieldC_le_of_mem (hM : jqNModC K M ∈ modularFunctionFieldC K (M * s)) : modularFunctionFieldC K M ≤ modularFunctionFieldC K (M * s) := by show IntermediateField.adjoin K {jqModC K, jqNModC K M} ≤ _ refine IntermediateField.adjoin_le_iff.mpr ?_ intro x hx rcases hx with h | h · subst h exact jqModC_mem K (M * s) · rw [Set.mem_singleton_iff] at h subst h exact hM theorem map_qExpandAlgC_le_of_mem (hS : jqNModC K s ∈ modularFunctionFieldC K (M * s)) : (modularFunctionFieldC K M).map (qExpandAlgC K s) ≤ modularFunctionFieldC K (M * s) := by show (IntermediateField.adjoin K {jqModC K, jqNModC K M}).map (qExpandAlgC K s) ≤ _ rw [IntermediateField.adjoin_map] refine IntermediateField.adjoin_le_iff.mpr ?_ rintro x hx simp only [Set.image_insert_eq, Set.image_singleton, qExpandAlgC_apply] at hx rcases hx with h | h · subst h exact hS · rw [Set.mem_singleton_iff] at h subst h show qExpand K s (jqNModC K M) ∈ modularFunctionFieldC K (M * s) unfold jqNModC rw [qExpand_qExpand] simp only [Nat.mul_comm s M] exact jqNModC_mem K (M * s) def levelAlphaC (hM : jqNModC K M ∈ modularFunctionFieldC K (M * s)) : modularFunctionFieldC K M →ₐ[K] modularFunctionFieldC K (M * s) := IntermediateField.inclusion (modularFunctionFieldC_le_of_mem K M s hM) @[simp] theorem coe_levelAlphaC (hM : jqNModC K M ∈ modularFunctionFieldC K (M * s)) (x : modularFunctionFieldC K M) : (levelAlphaC K M s hM x : LaurentSeries K) = (x : LaurentSeries K) := IntermediateField.coe_inclusion _ x def levelBetaCRingHom (hS : jqNModC K s ∈ modularFunctionFieldC K (M * s)) : modularFunctionFieldC K M →+* modularFunctionFieldC K (M * s) where toFun x := ⟨qExpand K s (x : LaurentSeries K), map_qExpandAlgC_le_of_mem K M s hS ⟨x, x.2, rfl⟩⟩ map_one' := Subtype.ext (map_one (qExpand K s)) map_mul' _ _ := Subtype.ext (map_mul (qExpand K s) _ _) map_zero' := Subtype.ext (map_zero (qExpand K s)) map_add' _ _ := Subtype.ext (map_add (qExpand K s) _ _) def levelBetaC (hS : jqNModC K s ∈ modularFunctionFieldC K (M * s)) : modularFunctionFieldC K M →ₐ[K] modularFunctionFieldC K (M * s) := { levelBetaCRingHom K M s hS with commutes' := fun a => Subtype.ext <| by show qExpand K s (algebraMap K (LaurentSeries K) a) = algebraMap K (LaurentSeries K) a rw [algebraMap_laurentSeries_apply_eq_single, qExpand_single, mul_zero] } @[simp] theorem coe_levelBetaC (hS : jqNModC K s ∈ modularFunctionFieldC K (M * s)) (x : modularFunctionFieldC K M) : (levelBetaC K M s hS x : LaurentSeries K) = qExpand K s (x : LaurentSeries K) := rfl def IsAtkinLehnerLevelAut (hM : jqNModC K M ∈ modularFunctionFieldC K (M * s)) (hS : jqNModC K s ∈ modularFunctionFieldC K (M * s)) (σ : modularFunctionFieldC K (M * s) ≃ₐ[K] modularFunctionFieldC K (M * s)) : Prop := σ (jGeomGen K (M * s)) = ⟨jqNModC K s, hS⟩ ∧ σ ⟨jqNModC K s, hS⟩ = jGeomGen K (M * s) ∧ σ (jNGeomGen K (M * s)) = ⟨jqNModC K M, hM⟩ ∧ σ ⟨jqNModC K M, hM⟩ = jNGeomGen K (M * s) def autOnPlaces (σ : modularFunctionFieldC K (M * s) ≃ₐ[K] modularFunctionFieldC K (M * s)) : Place K (modularFunctionFieldC K (M * s)) ≃ Place K (modularFunctionFieldC K (M * s)) := Place.congrEquiv σ.toRingEquiv (fun c => σ.commutes c) end LevelLegs section Matrices variable (p : ℕ) (K : Type*) [Field K] [DecidableEq K] (N : ℕ) [NeZero N] open Classical in def ssHeckeMatrixC (ℓ : ℕ) [NeZero ℓ] (hα : (heckeAlphaC K N ℓ).toRingHom.IsIntegral) (hβ : (heckeBetaC K N ℓ).toRingHom.IsIntegral) : Matrix ↥(ssPlaces p N K) ↥(ssPlaces p N K) ℤ := Matrix.of fun y x => ∑ᶠ W : Place K (charLDegeneracyRoof K N ℓ), if Place.restrictAlong (heckeBetaC K N ℓ) hβ W = x.1 ∧ Place.restrictAlong (heckeAlphaC K N ℓ) hα W = y.1 then (Place.ramificationIndexAlong (heckeBetaC K N ℓ) W : ℤ) * (Place.inertiaDegAlong (heckeAlphaC K N ℓ) hα W : ℤ) else 0 variable [Fact p.Prime] [CharP K p] open Classical in def ssFrobMatrixC (data : ModularPolynomialData p) (hKr : KroneckerCongruence p data) : Matrix ↥(ssPlaces p N K) ↥(ssPlaces p N K) ℤ := Matrix.of fun y x => if frobOnPlacesGeomLevel K N data hKr x.1 = y.1 then 1 else 0 def ssHeckeFamilyC (data : ModularPolynomialData p) (hKr : KroneckerCongruence p data) (hlegs : ∀ (ℓ : ℕ) [NeZero ℓ], (heckeAlphaC K N ℓ).toRingHom.IsIntegral ∧ (heckeBetaC K N ℓ).toRingHom.IsIntegral) (ℓ : Nat.Primes) : Matrix ↥(ssPlaces p N K) ↥(ssPlaces p N K) ℤ := letI : NeZero (ℓ : ℕ) := ⟨ℓ.2.pos.ne'⟩ if (ℓ : ℕ) = p then ssFrobMatrixC p K N data hKr else ssHeckeMatrixC p K N ℓ (hlegs ℓ).1 (hlegs ℓ).2 end Matrices section Datum variable (p : ℕ) [Fact p.Prime] (K : Type*) [Field K] [CharP K p] [DecidableEq K] (M s : ℕ) [NeZero M] [NeZero s] structure SSLevelDatum where mem_M : jqNModC K M ∈ modularFunctionFieldC K (M * s) mem_s : jqNModC K s ∈ modularFunctionFieldC K (M * s) fstIntegral : (levelAlphaC K M s mem_M).toRingHom.IsIntegral sndIntegral : (levelBetaC K M s mem_s).toRingHom.IsIntegral legsIntegral : ∀ (N : ℕ) [NeZero N] (ℓ : ℕ) [NeZero ℓ], (heckeAlphaC K N ℓ).toRingHom.IsIntegral ∧ (heckeBetaC K N ℓ).toRingHom.IsIntegral fst_mem : ∀ W, W ∈ ssPlaces p (M * s) K → Place.restrictAlong (levelAlphaC K M s mem_M) fstIntegral W ∈ ssPlaces p M K snd_mem : ∀ W, W ∈ ssPlaces p (M * s) K → Place.restrictAlong (levelBetaC K M s mem_s) sndIntegral W ∈ ssPlaces p M K atkinLehnerAut : modularFunctionFieldC K (M * s) ≃ₐ[K] modularFunctionFieldC K (M * s) isAtkinLehner : IsAtkinLehnerLevelAut K M s mem_M mem_s atkinLehnerAut stable : ∀ W, W ∈ ssPlaces p (M * s) K → autOnPlaces K M s atkinLehnerAut W ∈ ssPlaces p (M * s) K frobData : ModularPolynomialData p kronecker : KroneckerCongruence p frobData namespace SSLevelDatum variable {p K M s} variable (X : SSLevelDatum p K M s) def fst (W : ↥(ssPlaces p (M * s) K)) : ↥(ssPlaces p M K) := ⟨Place.restrictAlong (levelAlphaC K M s X.mem_M) X.fstIntegral W.1, X.fst_mem W.1 W.2⟩ def snd (W : ↥(ssPlaces p (M * s) K)) : ↥(ssPlaces p M K) := ⟨Place.restrictAlong (levelBetaC K M s X.mem_s) X.sndIntegral W.1, X.snd_mem W.1 W.2⟩ def atkinLehnerPerm (W : ↥(ssPlaces p (M * s) K)) : ↥(ssPlaces p (M * s) K) := ⟨autOnPlaces K M s X.atkinLehnerAut W.1, X.stable W.1 W.2⟩ def degeneracyData : CerednikDrinfeld.DegeneracyData ↥(ssPlaces p (M * s) K) ↥(ssPlaces p M K) where a := X.fst b := X.snd w W := Nat.toPNat' (placeWidth (M * s) W.1) def edgeHecke : Nat.Primes → Matrix ↥(ssPlaces p (M * s) K) ↥(ssPlaces p (M * s) K) ℤ := ssHeckeFamilyC p K (M * s) X.frobData X.kronecker (X.legsIntegral (M * s)) def vertexHecke : Nat.Primes → Matrix ↥(ssPlaces p M K) ↥(ssPlaces p M K) ℤ := ssHeckeFamilyC p K M X.frobData X.kronecker (X.legsIntegral M) section Laws variable [Fact s.Prime] [Fintype ↥(ssPlaces p (M * s) K)] [Fintype ↥(ssPlaces p M K)] [DecidableEq ↥(ssPlaces p M K)] def HeckeLaws : Prop := (∀ ℓ ℓ' : Nat.Primes, Commute (X.edgeHecke ℓ) (X.edgeHecke ℓ')) ∧ (∀ ℓ ℓ' : Nat.Primes, Commute (X.vertexHecke ℓ) (X.vertexHecke ℓ')) ∧ (∀ ℓ : Nat.Primes, ℓ ∉ ({⟨s, Fact.out⟩} : Finset Nat.Primes) → ∀ i : Fin 2, ∀ x : ↥(ssPlaces p (M * s) K) → ℤ, CerednikDrinfeld.jointDelta X.degeneracyData i ((X.edgeHecke ℓ).mulVecLin x) = (X.vertexHecke ℓ).mulVecLin (CerednikDrinfeld.jointDelta X.degeneracyData i x)) ∧ (∀ ℓ : Nat.Primes, ∀ x : ↥(ssPlaces p (M * s) K) → ℤ, (∀ i, CerednikDrinfeld.jointDelta X.degeneracyData i x = 0) → ∀ i, CerednikDrinfeld.jointDelta X.degeneracyData i ((X.edgeHecke ℓ).mulVecLin x) = 0) open Classical in def heckeData : CerednikDrinfeld.HeckeData X.degeneracyData := if h : X.HeckeLaws then { T := X.edgeHecke Tv := X.vertexHecke comm := h.1 commv := h.2.1 S := {⟨s, Fact.out⟩} good_equivariant := h.2.2.1 kernel_stable := h.2.2.2 } else { T := 0 Tv := 0 comm := fun _ _ => Commute.refl 0 commv := fun _ _ => Commute.refl 0 S := {⟨s, Fact.out⟩} good_equivariant := fun _ _ i x => by simp only [Pi.zero_apply, LinearMap.zero_apply, map_zero] kernel_stable := fun _ x _ i => by simp only [Pi.zero_apply, LinearMap.zero_apply, map_zero] } end Laws end SSLevelDatum end Datum end ModularCurve end
Statements phrased using this module (68)
- Existence of a two-place p-torsion datum with laws
CerednikDrinfeld.exists_twoPlaceTorsionDatum_laws_of_ssLevelDatum_of_squarefree_of_six_mul_dvd_of_neZero10,433 below · depth 14 - Degeneracy adjoints and Hecke companion relations at the prime s
ModularCurve.SSLevelDatum.degeneracyMatrix_mulVec_padj_and_edgeHecke_companion_laws932 below · depth 14 - Hecke laws for a supersingular two-level degeneracy datum
ModularCurve.SSLevelDatum.exists_heckeRowSums_and_adjointPair_laws1,035 below · depth 14 - Hecke laws for the two-level supersingular degeneracy datum
ModularCurve.SSLevelDatum.heckeLaws_of_prime_ne_of_not_dvd435 below · depth 14 - The q-old character lattice dies modulo 𝔪
ModularCurve.SW_local_old_smul_top_eq_top_of_not_hasLowerLevelTorsion_aux20 below · depth 14 - Supersingular datum and Cartier anchors at levels Nq Rightarrow N
ModularCurve.exists_ssLevelDatum_heckeLaws_cartierAnchor_edgeHecke_and_vertexHecke3,385 below · depth 14 - Ribet's exchange inequality: dim X^{old}+dim Y_{q'}≤dim Y_q
ModularCurve.finrank_quotient_old_add_ribbon_le_finrank_quotient_ribbon_of_twoPlaceTorsionDatum_of_le_invariants3,576 below · depth 14 - Rank inequality between old-plus-ribbon and ribbon parts at two places
ModularCurve.finrank_quotient_old_add_ribbon_le_finrank_quotient_ribbon_of_twoPlaceTorsionDatum_of_le_invariants_of_two_mul_dvd_of_neZero3,576 below · depth 14 - Toric 𝔪-torsion bounded by old plus ribbon dimensions
ModularCurve.finrank_span_toricMonodromyPart_le_finrank_quotient_old_add_ribbon_of_ssLevelDatum3,563 below · depth 14 - Toric monodromy bound by old and ribbon parts
ModularCurve.finrank_span_toricMonodromyPart_le_finrank_quotient_old_add_ribbon_of_ssLevelDatum_of_two_mul_dvd_of_neZero3,563 below · depth 14 - Existence of a supersingular two-level degeneracy datum
ModularCurve.nonempty_ssLevelDatum307 below · depth 14 - Two-level Deuring transport of class sets to supersingular places
CerednikDrinfeld.exists_equiv_classSet_ssPlaces_degeneracy_hecke_comm1,356 below · depth 15 - Matching class-set Hecke data with supersingular Hecke data
CerednikDrinfeld.nonempty_matching_classSetHeckeData_heckeData1 below · depth 15 - Atkin–Lehner involution swaps degeneracies and width-adjoints Uₛ
ModularCurve.SSLevelDatum.atkinLehnerPerm_swap_degeneracy_and_width_and_edgeHecke_adjoint847 below · depth 15 - Second degeneracy map equals first after Atkin–Lehner
ModularCurve.SSLevelDatum.degeneracyData_b_eq_a_atkinLehnerPerm0 below · depth 15 - Degeneracy degrees s+1 and Tₛ=a_*bᵈagger on supersingular places
ModularCurve.SSLevelDatum.degeneracyMatrix_mulVec_padj_eq_smul_and_eq_vertexHecke_mulVec859 below · depth 15 - Hecke matrix entries as divisor correspondence coefficients, ℓ ≠ p
ModularCurve.SSLevelDatum.edgeHecke_apply_and_vertexHecke_apply_of_ne0 below · depth 15 - At ℓ = p both Hecke matrices are Frobenius indicator matrices
ModularCurve.SSLevelDatum.edgeHecke_apply_and_vertexHecke_apply_self0 below · depth 15 - Hecke-equivariant character duality for the q-adic toric part
ModularCurve.SSLevelDatum.exists_cartierAnchor_toricMonodromyPart_edgeHecke3,377 below · depth 15 - Surjectivity of the supersingular degeneracy map on character lattices
ModularCurve.SSLevelDatum.exists_mem_characterLattice_degeneracyMatrix_mulVec_eq_pair3,474 below · depth 15 - Uₛ plus Atkin–Lehner equals b^*a_* on divisors
ModularCurve.correspondence_heckeBetaC_heckeAlphaC_single_add_single_autOnPlaces_eq_pullbackAlong_pushforwardAlong208 below · depth 15 - Cartier anchor of the toric part of J₀(Lp)
ModularCurve.exists_cartierAnchor_toricMonodromyPart_ssHeckeFamilyC3,376 below · depth 15 - Old and ribbon terms bounded by the first-place torsion subgroup
ModularCurve.pow_finrank_quotient_old_add_ribbon_le_natCard_twoPlaceTorsionDatum_fst_W3,546 below · depth 15 - W(𝔪) is toric at the second place
ModularCurve.twoPlaceTorsionDatum_snd_W_le_toric_of_not_hasLowerLevelTorsion_of_W_le_invariants3,571 below · depth 15 - Right translation by n corresponds to Atkin–Lehner on supersingular places
CerednikDrinfeld.autOnPlaces_eq_of_isAtkinLehnerLevelAut_of_forall_toValuationSubring_eq_comap_moduliPlace575 below · depth 16 - Eichler class set bijects with level-N supersingular places
CerednikDrinfeld.exists_classSet_equiv_ssPlaces_forall_toValuationSubring_eq_comap_moduliPlace_ker726 below · depth 16 - Degeneracy inclusion is compatible with the two class-set dictionaries
CerednikDrinfeld.restrictAlong_levelAlphaC_eq_of_forall_toValuationSubring_eq_comap_moduliPlace_of_prime513 below · depth 16 - Frobenius matrix on supersingular places equals the prime Hecke matrix
CerednikDrinfeld.ssFrobMatrixC_apply_eq_classSetHeckeMatrix_primeHeckeSet_of_forall_toValuationSubring_eq_comap_moduliPlace528 below · depth 16 - Supersingular U_ℓ matrix equals class-set Hecke matrix, ℓ ∣ N
CerednikDrinfeld.ssHeckeMatrixC_apply_eq_classSetHeckeMatrix_levelHeckeUSet_of_dvd_of_forall_toValuationSubring_eq_comap_moduliPlace_of_five_le1,082 below · depth 16 - Supersingular Hecke matrix equals the Brandt matrix at ℓ
CerednikDrinfeld.ssHeckeMatrixC_apply_eq_classSetHeckeMatrix_primeHeckeSet_of_forall_toValuationSubring_eq_comap_moduliPlace593 below · depth 16 - Place width equals class weight at level Nq
CerednikDrinfeld.toPNat_placeWidth_eq_classWeight_of_forall_toValuationSubring_eq_comap_moduliPlace623 below · depth 16 - Connectedness of the s-isogeny graph of supersingular points of X₀(M)
ModularCurve.SSLevelDatum.eq_empty_or_eq_univ_of_forall_fst_mem_iff_snd_mem3,370 below · depth 16 - Non-bipartiteness of the s-isogeny graph on supersingular places
ModularCurve.SSLevelDatum.exists_fst_mem_iff_snd_mem_of_nonempty699 below · depth 16 - Eisenstein cokernel bound for the ribbon component group
ModularCurve.SSLevelDatum.finrank_heckeTorsion_ribbonComponentGroup_le_finrank_quotient_of_addEquiv_prod_characterLattice3,543 below · depth 16 - Ribet's count: dim X^{old}/𝔪 X^{old} = dim Ψ[𝔪]
ModularCurve.SSLevelDatum.finrank_quotient_eq_finrank_heckeTorsion_ribbonComponentGroup_of_addEquiv_prod_characterLattice3,543 below · depth 16 - Normalised connecting idele between two maximal orders
QuaternionAlgebra.exists_conjByFiniteIdele_eq_mem_finiteAdeleBox_smul_inv_mem_of_relIndex_eq30 below · depth 16 - Normal form n=n₀z for a level-Nq Eichler idele
QuaternionAlgebra.exists_eq_mul_mem_primeHeckeSet_mem_normalizer_meetOrder_eq_of_isEichlerOrder_meetOrder33 below · depth 16 - A q-sandwich bound for prime Hecke elements
QuaternionAlgebra.smul_inv_mul_mem_finiteAdeleBox_of_mem_primeHeckeSet_of_inv_mul_mul_mem3 below · depth 16 - Deuring correspondence: equal idèle classes iff isomorphic curves
CerednikDrinfeld.classSet_mk_eq_iff_nonempty_variableChange_of_kernelIdealSet115 below · depth 17 - Level-one Deuring correspondence with Brandt matrices
CerednikDrinfeld.exists_classSet_equiv_ssPlaces_one_kernelIdealSet_of_rationalEndSubring721 below · depth 17 - Realisation of finite idele classes by cyclic N-isogenies
CerednikDrinfeld.exists_kernelIdealSet_realisation_isAddCyclic_ker_of_inf_conjByFiniteIdele173 below · depth 17 - Kernel ideal of an intermediate quotient, coprime case
CerednikDrinfeld.image_kernelIdealSet_comp_eq_of_ker_eq_div_nsmul_ker_of_coprime11 below · depth 17 - Kernel-ideal transport along a Hecke idele at q
CerednikDrinfeld.image_kernelIdealSet_comp_eq_star_smul_ofFiniteIdele_mul_and_exists_dualPair_ker_eq_map_of_meetOrder_eq_of_conjByFiniteIdele_eq113 below · depth 17 - Frobenius twist shifts the kernel ideal by P
CerednikDrinfeld.image_kernelIdealSet_ratPointHom_frobenius_comp_eq_star_smul_ofFiniteIdele_mul50 below · depth 17 - Units of a conjugated Eichler order count automorphisms preserving kerψ
CerednikDrinfeld.natCard_isUnitOf_conjByFiniteIdele_eq_natCard_rationalAut_map_ker_eq_of_image_kernelIdealSet_comp_eq216 below · depth 17 - Brandt U_ℓ count at a prime dividing the level
CerednikDrinfeld.natCard_ofFiniteIdele_levelHeckeUSet_eq_natCard_subgroup_dualPair_ker_of_dvd_of_inf_conjByFiniteIdele191 below · depth 17 - Level-N Brandt count equals enhanced supersingular ℓ-isogeny count
CerednikDrinfeld.natCard_ofFiniteIdele_primeHeckeSet_eq_natCard_subgroup_dualPair_ker_of_inf_conjByFiniteIdele176 below · depth 17 - Degeneracy matrices commute with the ℓ-Hecke correspondence, ℓ ∣ M
ModularCurve.SSLevelDatum.degeneracyMatrix_mul_correspondence_heckeAlphaC_heckeBetaC_of_dvd428 below · depth 17 - Supersingular moduli places on κ(j(q),j(q^N)): existence and uniqueness
ModularCurve.existsUnique_mem_ssPlaces_toValuationSubring_eq_comap_moduliPlace415 below · depth 17 - Supersingular places arise from enhanced supersingular curves
ModularCurve.exists_toValuationSubring_eq_comap_moduliPlace_of_mem_ssPlaces411 below · depth 17 - Geometric Frobenius carries the place of (W,C) to that of its twist
ModularCurve.frobOnPlacesGeomLevel_toValuationSubring_eq_comap_moduliPlace_map_frobenius413 below · depth 17 - Supersingular Hecke entry at ℓ∣ N counts ℓ-isogenies
ModularCurve.ssHeckeMatrixC_apply_eq_natCard_subgroup_dualPair_of_dvd_of_five_le_of_moduliPlace961 below · depth 17 - Supersingular Hecke matrix entries count ℓ-isogenies preserving Γ₀(N)-structure
ModularCurve.ssHeckeMatrixC_apply_eq_natCard_subgroup_dualPair_of_moduliPlace473 below · depth 17 - Twice the width of a moduli place counts level-preserving automorphisms
ModularCurve.two_mul_placeWidth_eq_natCard_rationalAut_map_eq_of_toValuationSubring_eq_comap_moduliPlace431 below · depth 17 - Ramified-prime Hecke idele: its lattice and commutation with the level
QuaternionAlgebra.IsMaximalOrder.mem_ofFiniteIdele_iff_and_ofFiniteIdele_mul_mul_eq_of_mem_primeHeckeSet_of_finiteAdeleEvalAt_eq_one13 below · depth 17 - Frobenius twist of a dual pair of isogenies
WeierstrassCurve.exists_frobenius_conjugate_dualPair_mem_rationalHomSet0 below · depth 17 - Atkin–Lehner automorphism transports moduli places along a q-isogeny
WeierstrassCurve.exists_rationalHom_ker_eq_zmultiples_toValuationSubring_autOnPlaces_eq_comap_moduliPlace_map_sup_ker_nsmul480 below · depth 17 - Vanishing q'-torsion transfers along a nonzero rational homomorphism
WeierstrassCurve.forall_smul_eq_zero_of_mem_rationalHomSet_of_forall_smul_eq_zero16 below · depth 17 - Every finite idèle class arises as a kernel ideal
CerednikDrinfeld.exists_kernelIdealSet_eq_star_smul_ofFiniteIdele128 below · depth 18 - Prime-ℓ Hecke sub-ideals versus dual-pair ℓ-isogeny kernels
CerednikDrinfeld.natCard_subideal_primeHeckeSet_eq_natCard_subgroup_dualPair_of_kernelIdealSet168 below · depth 18 - Ramification-weighted Hecke fibres count cyclic ℓ-overgroups with dual pairs
ModularCurve.finsum_ramificationIndexAlong_heckeAlphaC_eq_natCard_overgroup_dualPair_of_moduliPlace463 below · depth 18 - Level-one supersingular Hecke entry counts ℓ-isogeny kernels
ModularCurve.ssHeckeMatrixC_one_apply_eq_natCard_subgroup_dualPair487 below · depth 18 - Kernel ideal of Frobenius is the prime above q'
CerednikDrinfeld.exists_injective_mem_rationalHomSet_kernelIdealSet_eq_nrd_dvd28 below · depth 19 - Integral right ideals split off a power of the ramified prime
QuaternionAlgebra.IsMaximalOrder.exists_ofFiniteIdele_eq_inf_setOf_le_padicValRat_nrd14 below · depth 19 - Vélu quotient by a finite subgroup and its kernel ideal
WeierstrassCurve.exists_mem_rationalHomSet_ker_eq_and_forall_comp_and_kernelIdealSet_eq81 below · depth 19 - Second degeneracy leg equals first composed with Atkin–Lehner
ModularCurve.SSLevelDatum.snd_eq_fst_atkinLehnerPerm0 below · depth 24 - Twice the characteristic width of a moduli place counts level-preserving automorphisms
ModularCurve.two_mul_placeWidthChar_eq_natCard_rationalAut_map_eq_of_toValuationSubring_eq_comap_moduliPlace432 below · depth 28 - Moduli place width counts automorphisms of (W,C), all characteristics
ModularCurve.two_mul_placeWidthChar_eq_natCard_rationalAut_map_eq_of_toValuationSubring_eq_comap_moduliPlace_of_prime434 below · depth 29