Definitions/Def_ModularCurve_SpecializeModuli.lean
Places of the -line and specialisation of moduli divisors
Throughout, K is a field and \mathrm{jqModC}\ K \in K((q)) is the q-expansion of j with coefficients in K; the level-N field modularFunctionFieldC K N is the intermediate field of K((q)) generated by j(q) and j(q^N), so at N=1 it is K\langle j(q)\rangle. Since j(q) is transcendental over K, ratFuncEquivCharLOneC is the K-algebra isomorphism K(t) \cong modularFunctionFieldC K 1 sending t to j(q). Here Place K F is the project's notion of a place: a valuation subring of F that contains the image of K, is not all of F, and is a principal ideal ring; its degree is the K-dimension of the residue field, divisors are finitely supported \mathbb{Z}-combinations of places, and charLJacobian K N is the group \mathrm{Pic}^0 of degree-zero divisors modulo principal divisors of modularFunctionFieldC K N.
Transport of valuation subrings along the above isomorphism gives a bijection charLGeomPlaceEquiv between places of K(t) and of the level-one modular function field, and charLGeomPlaceOfPoint K a is the image under it of the place of K(t) attached to the prime (X-a). It is injective in a and of degree 1. Extending by Finsupp.mapDomain, charLGeomModuliDictionary K is the injective additive map from K \to_0 \mathbb{Z} to divisors, \sum n_i (a_i) \mapsto \sum n_i\,[j = a_i].
For an arbitrary map of underlying sets r : K \to k between fields, specializePlace r a is [j = r(a)] as a place over k, and specializeModuli r is the additive map \sum n_i (a_i) \mapsto \sum n_i\,[j = r(a_i)], equivalently Finsupp.mapDomain along specializePlace r. Accompanying lemmas compute it on singletons, bound its support, show it is the dictionary itself when r = \mathrm{id}, and show that all places involved have degree 1, whence the degree of the image equals the degree over K and degree-zero divisors are sent to degree-zero divisors. Three further lemmas record equivariance: precomposing the index map with \sigma : K \to K amounts to replacing r by r \circ \sigma; if r \circ \sigma = r the divisor is unchanged; and if r \circ \sigma = \tau \circ r for \tau : k \to k the result is the k-dictionary applied to the pushforward of D along r then \tau.
Relation to Mathlib
The rational function field, IntermediateField.adjoin, RatFunc.algEquivOfTranscendental and Finsupp.mapDomain are Mathlib's; the notions of place, divisor, degree and \mathrm{Pic}^0 of a function field used here are the project's own, defined via valuation subrings containing the base field.
Where it is used
These maps are the carrier of the specialisation of divisors on the j-line from characteristic 0 to characteristic \ell: the intended instance is K = \overline{\mathbb{Q}}, k = \overline{\mathbb{F}}_\ell and r the reduction map at a place above \ell. The degree and equivariance lemmas are what later modules use to descend specialisation to the degree-zero divisor class group and to compare the actions of inertia and Frobenius on both sides.
References
- H. Darmon, F. Diamond and R. Taylor, Fermat's Last Theorem, in: Current Developments in Mathematics 1995, International Press, 1995, 1–154
- G. Shimura, Introduction to the Arithmetic Theory of Automorphic Functions, Publications of the Mathematical Society of Japan 11, Princeton University Press, 1971
- H. Stichtenoth, Algebraic Function Fields and Codes, 2nd edition, Graduate Texts in Mathematics 254, Springer, 2009
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 204 lines
- 26 declarations
- used in the statements of 40 theorems and imported by 101 proofs
- imports 2 definition modules, and the statements of 1 theorems
Source file: Definitions/Def_ModularCurve_SpecializeModuli.lean
Imports
Theorems imported by this definition module
Declarations
- def
ModularCurve.ratFuncEquivCharLOneC - abbrev
ModularCurve.charLJacobian - def
ModularCurve.charLGeomPlaceEquiv - def
ModularCurve.charLGeomPlaceOfPoint - theorem
ModularCurve.charLGeomPlaceOfPoint_injective - theorem
ModularCurve.deg_charLGeomPlaceOfPoint - def
ModularCurve.charLGeomModuliDictionary - theorem
ModularCurve.charLGeomModuliDictionary_injective - theorem
ModularCurve.charLGeomModuliDictionary_single - def
ModularCurve.specializePlace - theorem
ModularCurve.specializePlace_def - theorem
ModularCurve.deg_specializePlace - theorem
ModularCurve.specializePlace_eq_of_eq - theorem
ModularCurve.specializePlace_inj_iff - def
ModularCurve.specializeModuli - theorem
ModularCurve.specializeModuli_single - theorem
ModularCurve.specializeModuli_eq_mapDomain - theorem
ModularCurve.specializeModuli_id - theorem
ModularCurve.support_specializeModuli_subset - theorem
ModularCurve.degree_specializeModuli_single - theorem
ModularCurve.degree_specializeModuli_eq_degree - theorem
ModularCurve.specializeModuli_mem_degZero - theorem
ModularCurve.specializeModuli_mapDomain - theorem
ModularCurve.specializeModuli_inertia_invariant - theorem
ModularCurve.specializeModuli_intertwines - theorem
ModularCurve.specializePlace_intertwines
Source
import Mathlib import Definitions.Def_ModularCurve_JqCoeff import Definitions.Def_AlgebraicCurve_RatFuncPlaces import Theorems.Thm_ModularCurve_transcendental_jqModC set_option autoImplicit false noncomputable section open AlgebraicCurve namespace ModularCurve section Transcendence variable (K : Type*) [Field K] def ratFuncEquivCharLOneC : RatFunc K ≃ₐ[K] (modularFunctionFieldC K 1) := (RatFunc.algEquivOfTranscendental (jqModC K) (transcendental_jqModC K)).trans (IntermediateField.equivOfEq (modularFunctionFieldC_one K).symm) end Transcendence section Jacobian variable (K : Type*) [Field K] abbrev charLJacobian (N : ℕ) [NeZero N] : Type _ := Pic0 K (modularFunctionFieldC K N) def charLGeomPlaceEquiv : Place K (RatFunc K) ≃ Place K (modularFunctionFieldC K 1) := Place.congrEquiv (ratFuncEquivCharLOneC K).toRingEquiv (fun a => (ratFuncEquivCharLOneC K).commutes a) def charLGeomPlaceOfPoint (a : K) : Place K (modularFunctionFieldC K 1) := charLGeomPlaceEquiv K (RationalFunctionField.placeOfPoint K a) theorem charLGeomPlaceOfPoint_injective : Function.Injective (charLGeomPlaceOfPoint K) := fun _ _ h => RationalFunctionField.placeOfPoint_injective K ((charLGeomPlaceEquiv K).injective h) theorem deg_charLGeomPlaceOfPoint (a : K) : (charLGeomPlaceOfPoint K a).deg = 1 := (Place.deg_congrRingEquiv (ratFuncEquivCharLOneC K).toRingEquiv (fun a => (ratFuncEquivCharLOneC K).commutes a) (RationalFunctionField.placeOfPoint K a)).trans (RationalFunctionField.deg_placeOfPoint K a) def charLGeomModuliDictionary : (K →₀ ℤ) →+ Divisor K (modularFunctionFieldC K 1) := Finsupp.mapDomain.addMonoidHom (charLGeomPlaceOfPoint K) theorem charLGeomModuliDictionary_injective : Function.Injective (charLGeomModuliDictionary K) := Finsupp.mapDomain_injective (charLGeomPlaceOfPoint_injective K) @[simp] theorem charLGeomModuliDictionary_single (a : K) (n : ℤ) : charLGeomModuliDictionary K (Finsupp.single a n) = Finsupp.single (charLGeomPlaceOfPoint K a) n := by simp only [charLGeomModuliDictionary, Finsupp.mapDomain.addMonoidHom_apply, Finsupp.mapDomain_single] end Jacobian section Map variable {K k : Type*} [Field K] [Field k] def specializePlace (r : K → k) (a : K) : Place k (modularFunctionFieldC k 1) := charLGeomPlaceOfPoint k (r a) omit [Field K] in @[simp] theorem specializePlace_def (r : K → k) (a : K) : specializePlace r a = charLGeomPlaceOfPoint k (r a) := rfl omit [Field K] in theorem deg_specializePlace (r : K → k) (a : K) : (specializePlace r a).deg = 1 := deg_charLGeomPlaceOfPoint k (r a) omit [Field K] in theorem specializePlace_eq_of_eq (r : K → k) {a b : K} (h : r a = r b) : specializePlace r a = specializePlace r b := by simp only [specializePlace, h] omit [Field K] in theorem specializePlace_inj_iff (r : K → k) {a b : K} : specializePlace r a = specializePlace r b ↔ r a = r b := ⟨fun h => charLGeomPlaceOfPoint_injective k h, specializePlace_eq_of_eq r⟩ def specializeModuli (r : K → k) : (K →₀ ℤ) →+ Divisor k (modularFunctionFieldC k 1) := (charLGeomModuliDictionary k).comp (Finsupp.mapDomain.addMonoidHom r) omit [Field K] in @[simp] theorem specializeModuli_single (r : K → k) (a : K) (n : ℤ) : specializeModuli r (Finsupp.single a n) = Finsupp.single (specializePlace r a) n := by simp only [specializeModuli, AddMonoidHom.coe_comp, Function.comp_apply, Finsupp.mapDomain.addMonoidHom_apply, Finsupp.mapDomain_single, charLGeomModuliDictionary_single, specializePlace_def] omit [Field K] in theorem specializeModuli_eq_mapDomain (r : K → k) (D : K →₀ ℤ) : specializeModuli r D = Finsupp.mapDomain (specializePlace r) D := by simp only [specializeModuli, AddMonoidHom.coe_comp, Function.comp_apply, Finsupp.mapDomain.addMonoidHom_apply, charLGeomModuliDictionary, Finsupp.mapDomain.addMonoidHom_apply] rw [← Finsupp.mapDomain_comp] rfl theorem specializeModuli_id (D : K →₀ ℤ) : specializeModuli (id : K → K) D = charLGeomModuliDictionary K D := by simp only [specializeModuli, AddMonoidHom.coe_comp, Function.comp_apply, Finsupp.mapDomain.addMonoidHom_apply, Finsupp.mapDomain_id] omit [Field K] in open scoped Classical in theorem support_specializeModuli_subset (r : K → k) (D : K →₀ ℤ) : (specializeModuli r D).support ⊆ D.support.image (specializePlace r) := by rw [specializeModuli_eq_mapDomain] exact Finsupp.mapDomain_support end Map section Degree variable {K k : Type*} [Field K] [Field k] omit [Field K] in theorem degree_specializeModuli_single (r : K → k) (a : K) (n : ℤ) : Divisor.degree (specializeModuli r (Finsupp.single a n)) = n := by rw [specializeModuli_single, Divisor.degree_single, deg_specializePlace, Nat.cast_one, mul_one] theorem degree_specializeModuli_eq_degree (r : K → k) (D : K →₀ ℤ) : Divisor.degree (specializeModuli r D) = Divisor.degree (charLGeomModuliDictionary K D) := by have h : (Divisor.degree.comp (specializeModuli r) : (K →₀ ℤ) →+ ℤ) = Divisor.degree.comp (charLGeomModuliDictionary K) := by refine Finsupp.addHom_ext fun a n => ?_ simp only [AddMonoidHom.coe_comp, Function.comp_apply, specializeModuli_single, charLGeomModuliDictionary_single, Divisor.degree_single, deg_specializePlace, deg_charLGeomPlaceOfPoint] exact DFunLike.congr_fun h D theorem specializeModuli_mem_degZero (r : K → k) {D : K →₀ ℤ} (hD : Divisor.degree (charLGeomModuliDictionary K D) = 0) : Divisor.degree (specializeModuli r D) = 0 := by rw [degree_specializeModuli_eq_degree, hD] end Degree section Galois variable {K k : Type*} [Field K] [Field k] omit [Field K] in theorem specializeModuli_mapDomain (r : K → k) (σ : K → K) (D : K →₀ ℤ) : specializeModuli r (Finsupp.mapDomain σ D) = specializeModuli (r ∘ σ) D := by rw [specializeModuli_eq_mapDomain, specializeModuli_eq_mapDomain, ← Finsupp.mapDomain_comp] rfl omit [Field K] in theorem specializeModuli_inertia_invariant (r : K → k) (σ : K → K) (hσ : ∀ a, r (σ a) = r a) (D : K →₀ ℤ) : specializeModuli r (Finsupp.mapDomain σ D) = specializeModuli r D := by rw [specializeModuli_mapDomain, show (r ∘ σ) = r from funext hσ] omit [Field K] in theorem specializeModuli_intertwines (r : K → k) (σ : K → K) (τ : k → k) (h : ∀ a, r (σ a) = τ (r a)) (D : K →₀ ℤ) : specializeModuli r (Finsupp.mapDomain σ D) = charLGeomModuliDictionary k (Finsupp.mapDomain τ (Finsupp.mapDomain r D)) := by rw [specializeModuli_mapDomain, show (r ∘ σ) = (τ ∘ r) from funext h, ← Finsupp.mapDomain_comp] rfl omit [Field K] in theorem specializePlace_intertwines (r : K → k) (σ : K → K) (τ : k → k) (h : ∀ a, r (σ a) = τ (r a)) (a : K) : specializePlace r (σ a) = charLGeomPlaceOfPoint k (τ (r a)) := by simp only [specializePlace, h] end Galois end ModularCurve end
Statements phrased using this module (40)
- Degree-zero divisors on the level-one j-line are principal
ModularCurve.isPrincipal_of_degree_eq_zero_charLOne20 below · depth 10 - A place with ordᵥ(jmath̃-c)>0 is the place jmath̃=c
ModularCurve.eq_charLGeomPlaceOfPoint_of_ord_pos4 below · depth 13 - First reduction of the cusp ∞̄ is the j-line cusp
ModularCurve.PlaceSpecialization.redFst_cuspInftyBar12 below · depth 14 - Places with no integral j-value reduce to the cusp
ModularCurve.PlaceSpecialization.redFst_eq_placeInfty_of_forall_ord_le_zero8 below · depth 14 - Second reduction of the cusp ̄ 0 at q
ModularCurve.PlaceSpecialization.redSnd_cuspZeroBar95 below · depth 14 - A place with a pole at jmath̃ is the place at infinity
ModularCurve.eq_charLGeomPlaceEquiv_placeInfty_of_ord_neg6 below · depth 14 - Geometric Frobenius sends the place jmath̃=a to jmath̃=a^q
ModularCurve.frobOnPlacesGeomLevel_charLGeomPlaceOfPoint42 below · depth 14 - At the cusp of the level-one j-line, ord is the q-adic order
ModularCurve.ord_charLGeomPlaceEquiv_placeInfty_eq_order9 below · depth 14 - First level-one reduction is the place j=b̄
ModularCurve.PlaceSpecialization.redFst_eq_charLGeomPlaceOfPoint_of_ord_pos5 below · depth 15 - Places with non-integral j specialise to j=∞
ModularCurve.PlaceSpecialization.sp_eq_placeInfty_of_forall_ord_le_zero7 below · depth 15 - Arithmetic Frobenius sends the place j=a to j=a^q
ModularCurve.arithFrobC_smul_charLGeomPlaceOfPoint17 below · depth 15 - Supersingular places of the level-one j-line are the supersingular points
ModularCurve.mem_ssPlaces_one_iff_exists_charLGeomPlaceOfPoint_eq6 below · depth 15 - Order of the first residue at non-geometric places
ModularCurve.PlaceSpecialization.LevelOneProlongationPair.ord_residue_fst_eq_zero_of_forall_ne11 below · depth 16 - Summed divisor law for the pencil j+μ j_q
ModularCurve.PlaceSpecialization.LevelOneProlongationPair.sum_ord_pencil_eq304 below · depth 16 - Second level-one reduction at a place with integral j_q
ModularCurve.PlaceSpecialization.redSnd_eq_charLGeomPlaceOfPoint_of_ord_pos5 below · depth 16 - Specialisation of a place where j-b vanishes
ModularCurve.PlaceSpecialization.sp_eq_charLGeomPlaceOfPoint_of_ord_pos5 below · depth 16 - The place j=a has residue field K
ModularCurve.algebraMap_residueField_charLGeomPlaceOfPoint_surjective0 below · depth 16 - Geometric Frobenius fixes the place at infinity
ModularCurve.frobOnPlacesGeomLevel_charLGeomPlaceEquiv_placeInfty7 below · depth 16 - A j-fixing semilinear automorphism moves Pₐ to P_{τ(a)}
ModularCurve.smul_charLGeomPlaceOfPoint_of_smul_jqModC16 below · depth 16 - Value-indexed summed pencil law over the j-line
ModularCurve.PlaceSpecialization.LevelOneProlongationPair.sum_filter_value_eq_ord_add_sum_roots268 below · depth 17 - Value-filtered pencil divisor law for j+μ j_q, μ̄≠ 0
ModularCurve.PlaceSpecialization.LevelOneProlongationPair.sum_filter_value_eq_sum_roots_add_pencil277 below · depth 17 - Supersingular places of the j-line versus supersingular j-invariants
ModularCurve.exists_finset_forall_mem_iff_mem_ssPlaces_equiv_evalAt_jGeomGen_eq7 below · depth 17 - Level-one places: j-ramification one and width jWidth(a)
ModularCurve.placeRamificationJ_charLGeomPlaceOfPoint_eq_one_and_placeWidth_eq_jWidth38 below · depth 17 - Fibre-sum law for f over a value c₀ on the base line
ModularCurve.PlaceSpecialization.LevelOneProlongationPair.sum_filter_value_eq_sum_roots_add223 below · depth 18 - Value-fibre criterion for the first reduction red₁
ModularCurve.PlaceSpecialization.redFst_eq_charLGeomPlaceOfPoint_iff13 below · depth 18 - Supersingular places biject with supersingular j-invariants via evaluation
ModularCurve.exists_equiv_ssJSet_coe_eq_evalAt_jGeomGen_of_forall_mem_iff_mem_ssPlaces45 below · depth 19 - Order of jmath̃-c at the place jmath̃=a
ModularCurve.ord_charLGeomPlaceOfPoint_jqModC_sub_algebraMap38 below · depth 19 - Order zero at an ordinary point for the ∞-branch reduction
ModularCurve.ord_charLGeomPlaceOfPoint_modularRedLocHom_eq_zero_of_not_mem_ssJSet499 below · depth 19 - Strict first-kind places reduce onto the Frobenius graph
ModularCurve.PlaceSpecialization.exists_ord_jFun_sub_pos_and_red_eq_pow_of_isStrictFst59 below · depth 20 - Reduction is regular at ordinary points jmath̃=a with a^{q^2}=a
ModularCurve.ord_charLGeomPlaceOfPoint_modularRedLocHom_eq_zero_of_not_mem_ssJSet_of_pow_sq_eq469 below · depth 20 - Reduction is a unit at j=a when a^{q^2}≠ a
ModularCurve.ord_charLGeomPlaceOfPoint_modularRedLocHom_eq_zero_of_not_mem_ssJSet_of_pow_sq_ne494 below · depth 20 - Places of the level-one modular function field are rational
ModularCurve.isRational_place_modularFunctionFieldC_one39 below · depth 21 - A j-fixing semilinear automorphism fixes the place at infinity
ModularCurve.smul_charLGeomPlaceEquiv_placeInfty_of_smul_jqModC16 below · depth 21 - Clearing simple poles on the j-line gives a polynomial
ModularCurve.exists_prod_mul_eq_aeval_of_forall_ord_nonneg_of_forall_neg_one_le_ord58 below · depth 24 - Clearing prescribed poles on the j-line by polynomials
ModularCurve.exists_prod_pow_mul_eq_aeval_of_forall_ord_nonneg_of_forall_neg_le_ord58 below · depth 24 - The coordinate jmath̃ has order -1 at the place at infinity
ModularCurve.ord_charLGeomPlaceEquiv_placeInfty_jqModC11 below · depth 24 - Order of P(̃ j) at a point of the j-line is the root multiplicity
ModularCurve.ord_charLGeomPlaceOfPoint_aeval_jqModC_eq_rootMultiplicity39 below · depth 24 - Integrality at the second prolongation for functions with poles only at ∞̄
ModularCurve.PlaceSpecialization.LevelOneProlongationPair.mem_integersSnd_of_mem_integersFst_of_forall_ord_nonneg683 below · depth 25 - Functions on the j-line with one pole and prescribed values
ModularCurve.exists_eq_algebraMap_add_prod_mul_aeval_of_forall_ord_nonneg_of_hasValue52 below · depth 25 - Regular first residue when poles are confined to ̄ 0
ModularCurve.PlaceSpecialization.LevelOneProlongationPair.ord_residueFst_nonneg_of_forall_ne_cuspZeroBar682 below · depth 26