Fermat's Last Theorem in Lean 4

← all definition modules

Definitions/Def_ModularCurve_LaurentBaseChangeTower.lean

definition module

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

  1. F. Diamond and J. Shurman, A First Course in Modular Forms, Graduate Texts in Mathematics 228, Springer, 2005
  2. 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.

Source file: Definitions/Def_ModularCurve_LaurentBaseChangeTower.lean

Imports

Imported by

  • no other definition module

Declarations

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).