Definitions/Def_ModularCurve_LaurentBaseChangeTower.lean
Algebra and scalar-tower structures on a base-changed Laurent subfield
Throughout, L is a field with a \mathbb{Q}-algebra structure and F_0 is an intermediate field of L((q))'s rational model, namely of the extension \mathbb{Q}((q))/\mathbb{Q}; laurentBaseChange L F₀ denotes the intermediate field of L((q))/L generated by the image of F_0 under the coefficientwise ring homomorphism coeffEmb L, which applies \mathbb{Q} \to L to each Laurent coefficient. The module equips this base-changed field with the structure maps making it sit at the top of two towers.
baseChangeRingHom is the ring homomorphism F_0 \to L\cdot F_0 sending y to the element \mathrm{coeffEmb}_L(y) of L((q)) together with the proof that it lies in laurentBaseChange L F₀; coe_baseChangeRingHom records that its underlying Laurent series is exactly \mathrm{coeffEmb}_L(y). baseChangeAlgebra is the F_0-algebra structure on L\cdot F_0 obtained from this homomorphism, and algebraMap_laurentBaseChange_eq identifies the resulting structure map with baseChangeRingHom. baseChangeAlgebraRat is the \mathbb{Q}-algebra structure on L\cdot F_0 obtained from the composite \mathbb{Q} \to L \to L\cdot F_0 of the given \mathbb{Q}-algebra map of L with the inclusion of L into the intermediate field. Both algebra structures are reducible definitions rather than global instances. The two remaining declarations are instances asserting that the scalar actions compose correctly: with the \mathbb{Q}- and F_0-actions on L\cdot F_0 taken to be precisely those coming from the two definitions above, \mathbb{Q} \subseteq L \subseteq L\cdot F_0 and \mathbb{Q} \subseteq F_0 \subseteq L\cdot F_0 are scalar towers; the actions involved are written out explicitly in the statements so that they refer to these structures and not to any other rational action available on a subfield.
Relation to Mathlib
The Laurent series field, intermediate fields, RingHom.toAlgebra and IsScalarTower are Mathlib's; the base-changed subfield laurentBaseChange and the coefficientwise embedding coeffEmb are the project's own constructions, and the F_0- and \mathbb{Q}-algebra structures on it are provided here as reducible definitions, Mathlib supplying no such instances.
Where it is used
These structures provide the commuting square \mathbb{Q} \subseteq F_0, \mathbb{Q} \subseteq L, both inside L\cdot F_0 \subseteq L((q)), for a function field F_0 of a modular curve presented through q-expansions; they are what allows places and valuations of L\cdot F_0/L to be compared with places of F_0/\mathbb{Q} after enlarging the field of coefficients.
References
- F. Diamond and J. Shurman, A First Course in Modular Forms, Graduate Texts in Mathematics 228, Springer, 2005
- H. Stichtenoth, Algebraic Function Fields and Codes, Universitext, Springer, 1993
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 60 lines
- 7 declarations
- used in the statements of 0 theorems and imported by 2 proofs
- imports 1 definition modules
Source file: Definitions/Def_ModularCurve_LaurentBaseChangeTower.lean
Imported by
- no other definition module
Declarations
- def
ModularCurve.baseChangeRingHom - theorem
ModularCurve.coe_baseChangeRingHom - def
ModularCurve.baseChangeAlgebra - theorem
ModularCurve.algebraMap_laurentBaseChange_eq - def
ModularCurve.baseChangeAlgebraRat - instance
ModularCurve.instTowerRatLBaseChange - instance
ModularCurve.instTowerRatF₀BaseChange
Source
import Mathlib import Definitions.Def_ModularCurve_LaurentCoeff noncomputable section namespace ModularCurve set_option synthInstance.maxHeartbeats 400000 variable (L : Type*) [Field L] [Algebra ℚ L] variable (F₀ : IntermediateField ℚ (LaurentSeries ℚ)) section Tower def baseChangeRingHom : F₀ →+* laurentBaseChange L F₀ where toFun y := ⟨coeffEmb L (y : LaurentSeries ℚ), coeffEmb_mem_laurentBaseChange L y.2⟩ map_one' := Subtype.ext (map_one (coeffEmb L)) map_mul' _ _ := Subtype.ext (map_mul (coeffEmb L) _ _) map_zero' := Subtype.ext (map_zero (coeffEmb L)) map_add' _ _ := Subtype.ext (map_add (coeffEmb L) _ _) @[simp] theorem coe_baseChangeRingHom (y : F₀) : (baseChangeRingHom L F₀ y : LaurentSeries L) = coeffEmb L (y : LaurentSeries ℚ) := rfl @[reducible] def baseChangeAlgebra : Algebra F₀ (laurentBaseChange L F₀) := (baseChangeRingHom L F₀).toAlgebra attribute [local instance] baseChangeAlgebra theorem algebraMap_laurentBaseChange_eq : algebraMap F₀ (laurentBaseChange L F₀) = baseChangeRingHom L F₀ := rfl @[reducible] def baseChangeAlgebraRat : Algebra ℚ (laurentBaseChange L F₀) := ((algebraMap L (laurentBaseChange L F₀)).comp (algebraMap ℚ L)).toAlgebra attribute [local instance] baseChangeAlgebraRat instance instTowerRatLBaseChange : @IsScalarTower ℚ L (laurentBaseChange L F₀) (Algebra.toSMul (R := ℚ) (A := L)) (Algebra.toSMul (R := L) (A := laurentBaseChange L F₀)) (Algebra.toSMul (R := ℚ) (A := laurentBaseChange L F₀)) := IsScalarTower.of_algebraMap_eq' rfl instance instTowerRatF₀BaseChange : @IsScalarTower ℚ F₀ (laurentBaseChange L F₀) (Algebra.toSMul (R := ℚ) (A := F₀)) (Algebra.toSMul (R := F₀) (A := laurentBaseChange L F₀)) (Algebra.toSMul (R := ℚ) (A := laurentBaseChange L F₀)) := IsScalarTower.of_algebraMap_eq' (RingHom.ext_rat _ _) end Tower end ModularCurve end
Statements phrased using this module (0)
No statement module imports it directly (it is used through other definition modules or by proofs).