Definitions/Def_ModularCurve_ComponentGroupOrder.lean
Gram matrices and Gram-image bases for the component group
The ambient set-up is that of the character lattice of a graph of components: for a finite type \iota, X = characterLattice ι is the kernel of the degree map (D_x)_{x}\mapsto \sum_x D_x on \iota \to \mathbb{Z}, and for widths e : \iota \to \mathbb{N} the map gramMap e sends D \in X to the functional D' \mapsto \sum_x e(x)\,D_xD'_x on X, so its cokernel in \operatorname{Hom}_{\mathbb{Z}}(X,\mathbb{Z}) is the component group componentGroup e. Three items are introduced here. First, gramMatrixOf e v, for an arbitrary family v : \kappa \to X indexed by a finite type \kappa, is the \kappa \times \kappa integer matrix whose (i,j) entry is \sum_x e(x)\,(v_i)_x (v_j)_x, i.e. the value of the width pairing on v_i and v_j; the family is not required to be a basis, and a simp lemma records the entries. Second, under the hypothesis e(x) > 0 for all x, and given a \mathbb{Z}-basis c of X indexed by \kappa, gramRangeBasisOf is the basis of the submodule \operatorname{range}(\mathtt{gramMap } e) \subseteq \operatorname{Hom}_{\mathbb{Z}}(X,\mathbb{Z}) obtained by transporting c along the isomorphism of X onto the range induced by the injectivity of gramMap e (the cited theorem ModularCurve.gramMap_injective); its i-th vector is, as a functional on X, exactly \mathtt{gramMap } e\,(c_i). Third, toMatrix_dualBasis_gramRangeOf computes the coordinates of these vectors in the dual basis c^{\vee} of \operatorname{Hom}_{\mathbb{Z}}(X,\mathbb{Z}): the matrix c.dualBasis.toMatrix of the family i \mapsto \mathtt{gramMap } e\,(c_i) is the transpose of gramMatrixOf e c. Since the width pairing is symmetric, this matrix is the Gram matrix of c itself.
Relation to Mathlib
Mathlib supplies the infrastructure used (Module.Dual, Basis.dualBasis, Basis.toMatrix, LinearEquiv.ofInjective, and the structure theory of finitely generated modules over a PID); the Gram matrix of a family of lattice vectors for the width pairing, and the basis of the image of gramMap, are the project's own constructions, and gramMatrixOf is formed for an arbitrary indexed family rather than for a basis as in Mathlib's bilinear-form-to-matrix constructions.
Where it is used
These are the linear-algebra inputs to the general order formula \#\Phi = |\det G| for the component group attached to widths e, obtained by putting the full-rank inclusion \operatorname{range}(\mathtt{gramMap } e) \subseteq \operatorname{Hom}_{\mathbb{Z}}(X,\mathbb{Z}) into Smith normal form. Applied to the supersingular points of X_0(Mq) in characteristic q, with e_x = \tfrac12\#\operatorname{Aut}(E_x), this yields the order of the component group of J_0(Mq) at q used in level lowering.
References
- K. A. Ribet, On modular representations of \mathrm{Gal}(\overline{\mathbb{Q}}/\mathbb{Q}) arising from modular forms, Inventiones Mathematicae 100 (1990), 431–476, §3
- 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.
- 53 lines
- 5 declarations
- used in the statements of 1 theorems and imported by 1 proofs
- imports 1 definition modules, and the statements of 1 theorems
Source file: Definitions/Def_ModularCurve_ComponentGroupOrder.lean
Imports
Theorems imported by this definition module
Imported by
Declarations
- def
ModularCurve.gramMatrixOf - theorem
ModularCurve.gramMatrixOf_apply - def
ModularCurve.gramRangeBasisOf - theorem
ModularCurve.gramRangeBasisOf_coe - theorem
ModularCurve.toMatrix_dualBasis_gramRangeOf
Source
import Definitions.Def_ModularCurve_ComponentGroup import Theorems.Thm_ModularCurve_gramMap_injective import Mathlib.LinearAlgebra.FreeModule.PID ↗ import Mathlib.LinearAlgebra.Dual.Lemmas ↗ import Mathlib.LinearAlgebra.Matrix.ToLin ↗ import Mathlib.LinearAlgebra.Matrix.Basis ↗ import Mathlib.LinearAlgebra.Determinant ↗ import Mathlib.LinearAlgebra.FreeModule.IdealQuotient ↗ set_option autoImplicit false noncomputable section namespace ModularCurve open Finset Module section GramMatrix variable {ι : Type*} [Fintype ι] {κ : Type*} def gramMatrixOf (e : ι → ℕ) (v : κ → characterLattice ι) : Matrix κ κ ℤ := Matrix.of fun i j => gramMap e (v i) (v j) @[simp] theorem gramMatrixOf_apply (e : ι → ℕ) (v : κ → characterLattice ι) (i j : κ) : gramMatrixOf e v i j = gramMap e (v i) (v j) := rfl end GramMatrix section Engine variable {ι : Type*} [Fintype ι] {κ : Type*} [Fintype κ] [DecidableEq κ] {e : ι → ℕ} def gramRangeBasisOf (he : ∀ x, 0 < e x) (c : Basis κ ℤ (characterLattice ι)) : Basis κ ℤ (LinearMap.range (gramMap e)) := c.map (LinearEquiv.ofInjective (gramMap e) (ModularCurve.gramMap_injective he)) @[simp] theorem gramRangeBasisOf_coe (he : ∀ x, 0 < e x) (c : Basis κ ℤ (characterLattice ι)) (i : κ) : (gramRangeBasisOf he c i : Module.Dual ℤ (characterLattice ι)) = gramMap e (c i) := by rw [gramRangeBasisOf, Basis.map_apply, LinearEquiv.ofInjective_apply] theorem toMatrix_dualBasis_gramRangeOf (he : ∀ x, 0 < e x) (c : Basis κ ℤ (characterLattice ι)) : c.dualBasis.toMatrix ((↑) ∘ gramRangeBasisOf he c) = (gramMatrixOf e ⇑c).transpose := by ext i j rw [Basis.toMatrix_apply, Function.comp_apply, gramRangeBasisOf_coe, Basis.dualBasis_repr] rfl end Engine end ModularCurve