Definitions/Def_ModularForm_KatzLevelOne.lean
Katz modular forms of level one via Weierstrass models
For a commutative ring R and an integer k, the structure KatzModularForm R k packages a rule on Weierstrass models: a field toFun assigning to each commutative R-algebra A (taken in the same universe as R) and each W : WeierstrassCurve A whose discriminant W.Δ is a unit an element of A, subject to two axioms carried as fields. The field map_toFun demands compatibility with base change: for every R-algebra homomorphism f : A \to B, the value on the curve W.map f obtained by applying f to the coefficients is f applied to the value on W. The field toFun_variableChange demands the weight-k homogeneity: for an admissible change of variables C = ⟨u, r, s, t⟩ : WeierstrassCurve.VariableChange A, the value on C • W equals (u^{-1})^{k} times the value on W, the scalar being the k-th power of the unit u^{-1} of A. Auxiliary lemmas record that invertibility of \Delta is preserved by base change and by variable change, and that a form is determined by its values, whence an extension principle. The type is given the pointwise R-module structure (zero, addition, negation, subtraction and scalar multiplication computed on values), and mul multiplies a form of weight k by one of weight l to give a form of weight k + l. The q-expansion qExpansion F : LaurentSeries R is the value of F on the Tate model ModularCurve.tateLaurent R over R((q)), the Weierstrass curve with a_1 = 1, a_2 = a_3 = 0 and a_4, a_6 the base change to R((q)) of the integral series ModularCurve.tateA4, ModularCurve.tateA6, whose discriminant is a unit. Taking q-expansions is additive, R-linear and multiplicative. Finally c₄, c₆ and discr are the forms of weights 4, 6 and 12 sending W to W.c₄, W.c₆ and W.Δ, their q-expansions being the corresponding invariants of the Tate model. Holomorphy at infinity is not part of the structure; it is a condition one imposes separately on qExpansion.
Relation to Mathlib
Mathlib supplies Weierstrass curves, their invariants c_4, c_6, \Delta, base change WeierstrassCurve.map and the group of admissible variable changes with the transformation formulas; the notion of a Katz modular form over a base ring, expressed as a rule on Weierstrass models with invertible discriminant, is the project's own and has no Mathlib counterpart.
Where it is used
This furnishes level-one modular forms over an arbitrary base ring, together with the q-expansion map to R((q)) obtained by evaluation on the Tate model, which is the form in which modular forms and their reductions are handled on the modularity side of the argument.
References
- N. Katz, p-adic properties of modular schemes and modular forms, in: Modular Functions of One Variable III, Lecture Notes in Mathematics 350, Springer, 1973, 69–190, §1.1–1.2
- P. Deligne, Courbes elliptiques: formulaire (d'après J. Tate), in: Modular Functions of One Variable IV, Lecture Notes in Mathematics 476, Springer, 1975, 53–73
- B. Mazur, Modular curves and the Eisenstein ideal, Publications Mathématiques de l'IHÉS 47 (1977), 33–186, Chapter II
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 216 lines
- 42 declarations
- used in the statements of 29 theorems and imported by 27 proofs
- imports 1 definition modules
Source file: Definitions/Def_ModularForm_KatzLevelOne.lean
Imports
Declarations
- structure
KatzModularForm - field
KatzModularForm.toFun - field
KatzModularForm.map_toFun - field
KatzModularForm.f - field
KatzModularForm.hW' - field
KatzModularForm.toFun_variableChange - field
KatzModularForm.W - field
KatzModularForm.toFun - theorem
KatzModularForm.isUnit_Δ_map - theorem
KatzModularForm.isUnit_Δ_variableChange - theorem
KatzModularForm.toFun_injective - theorem
KatzModularForm.ext - theorem
KatzModularForm.zero_toFun - theorem
KatzModularForm.add_toFun - theorem
KatzModularForm.neg_toFun - theorem
KatzModularForm.sub_toFun - theorem
KatzModularForm.smul_toFun - def
KatzModularForm.mul - theorem
KatzModularForm.mul_toFun - def
KatzModularForm.qExpansion - theorem
KatzModularForm.qExpansion_zero - theorem
KatzModularForm.qExpansion_add - theorem
KatzModularForm.qExpansion_neg - theorem
KatzModularForm.qExpansion_sub - theorem
KatzModularForm.qExpansion_smul - theorem
KatzModularForm.qExpansion_mul - def
KatzModularForm.c₄ - def
KatzModularForm.c₆ - def
KatzModularForm.discr - theorem
KatzModularForm.c₄_toFun - theorem
KatzModularForm.c₆_toFun - theorem
KatzModularForm.discr_toFun - theorem
KatzModularForm.qExpansion_c₄ - theorem
KatzModularForm.qExpansion_c₆ - theorem
KatzModularForm.qExpansion_discr
Source
import Mathlib import Definitions.Def_ModularCurve_TateFormal universe u noncomputable section open WeierstrassCurve structure KatzModularForm (R : Type u) [CommRing R] (k : ℤ) : Type (u + 1) where toFun : ∀ ⦃A : Type u⦄ [CommRing A] [Algebra R A] (W : WeierstrassCurve A), IsUnit W.Δ → A map_toFun : ∀ ⦃A B : Type u⦄ [CommRing A] [Algebra R A] [CommRing B] [Algebra R B] (f : A →ₐ[R] B) (W : WeierstrassCurve A) (hW : IsUnit W.Δ) (hW' : IsUnit (W.map (f : A →+* B)).Δ), toFun (W.map (f : A →+* B)) hW' = f (toFun W hW) toFun_variableChange : ∀ ⦃A : Type u⦄ [CommRing A] [Algebra R A] (C : VariableChange A) (W : WeierstrassCurve A) (hW : IsUnit W.Δ) (hW' : IsUnit (C • W).Δ), toFun (C • W) hW' = ((C.u⁻¹ ^ k : Aˣ) : A) * toFun W hW namespace KatzModularForm variable {R : Type u} [CommRing R] {k l : ℤ} theorem isUnit_Δ_map {A B : Type*} [CommRing A] [CommRing B] (f : A →+* B) {W : WeierstrassCurve A} (hW : IsUnit W.Δ) : IsUnit (W.map f).Δ := by rw [WeierstrassCurve.map_Δ]; exact hW.map f theorem isUnit_Δ_variableChange {A : Type*} [CommRing A] (C : VariableChange A) {W : WeierstrassCurve A} (hW : IsUnit W.Δ) : IsUnit (C • W).Δ := by rw [WeierstrassCurve.variableChange_Δ] exact ((C.u⁻¹).isUnit.pow 12).mul hW theorem toFun_injective : Function.Injective (toFun : KatzModularForm R k → _) := by rintro ⟨F, _, _⟩ ⟨G, _, _⟩ h congr @[ext] theorem ext {F G : KatzModularForm R k} (h : ∀ ⦃A : Type u⦄ [CommRing A] [Algebra R A] (W : WeierstrassCurve A) (hW : IsUnit W.Δ), F.toFun W hW = G.toFun W hW) : F = G := toFun_injective (by funext A _ _ W hW; exact h W hW) instance : Zero (KatzModularForm R k) := ⟨{ toFun := fun _ _ _ _ _ => 0 map_toFun := by intros; simp toFun_variableChange := by intros; simp }⟩ instance : Add (KatzModularForm R k) := ⟨fun F G => { toFun := fun _ _ _ W hW => F.toFun W hW + G.toFun W hW map_toFun := by intro A B _ _ _ _ f W hW hW' rw [map_add, F.map_toFun f W hW hW', G.map_toFun f W hW hW'] toFun_variableChange := by intro A _ _ C W hW hW' rw [F.toFun_variableChange C W hW hW', G.toFun_variableChange C W hW hW', mul_add] }⟩ instance : Neg (KatzModularForm R k) := ⟨fun F => { toFun := fun _ _ _ W hW => -F.toFun W hW map_toFun := by intro A B _ _ _ _ f W hW hW' rw [map_neg, F.map_toFun f W hW hW'] toFun_variableChange := by intro A _ _ C W hW hW' rw [F.toFun_variableChange C W hW hW', mul_neg] }⟩ instance : Sub (KatzModularForm R k) := ⟨fun F G => { toFun := fun _ _ _ W hW => F.toFun W hW - G.toFun W hW map_toFun := by intro A B _ _ _ _ f W hW hW' rw [map_sub, F.map_toFun f W hW hW', G.map_toFun f W hW hW'] toFun_variableChange := by intro A _ _ C W hW hW' rw [F.toFun_variableChange C W hW hW', G.toFun_variableChange C W hW hW', mul_sub] }⟩ instance : SMul R (KatzModularForm R k) := ⟨fun c F => { toFun := fun _ _ _ W hW => c • F.toFun W hW map_toFun := by intro A B _ _ _ _ f W hW hW' rw [map_smul, F.map_toFun f W hW hW'] toFun_variableChange := by intro A _ _ C W hW hW' rw [F.toFun_variableChange C W hW hW', mul_smul_comm] }⟩ @[simp] theorem zero_toFun {A : Type u} [CommRing A] [Algebra R A] (W : WeierstrassCurve A) (hW : IsUnit W.Δ) : (0 : KatzModularForm R k).toFun W hW = 0 := rfl @[simp] theorem add_toFun (F G : KatzModularForm R k) {A : Type u} [CommRing A] [Algebra R A] (W : WeierstrassCurve A) (hW : IsUnit W.Δ) : (F + G).toFun W hW = F.toFun W hW + G.toFun W hW := rfl @[simp] theorem neg_toFun (F : KatzModularForm R k) {A : Type u} [CommRing A] [Algebra R A] (W : WeierstrassCurve A) (hW : IsUnit W.Δ) : (-F).toFun W hW = -F.toFun W hW := rfl @[simp] theorem sub_toFun (F G : KatzModularForm R k) {A : Type u} [CommRing A] [Algebra R A] (W : WeierstrassCurve A) (hW : IsUnit W.Δ) : (F - G).toFun W hW = F.toFun W hW - G.toFun W hW := rfl @[simp] theorem smul_toFun (c : R) (F : KatzModularForm R k) {A : Type u} [CommRing A] [Algebra R A] (W : WeierstrassCurve A) (hW : IsUnit W.Δ) : (c • F).toFun W hW = c • F.toFun W hW := rfl instance : AddCommGroup (KatzModularForm R k) where add_assoc F G H := by ext; simp [add_assoc] zero_add F := by ext; simp add_zero F := by ext; simp add_comm F G := by ext; simp [add_comm] neg_add_cancel F := by ext; simp sub_eq_add_neg F G := by ext; simp [sub_eq_add_neg] nsmul := nsmulRec zsmul := zsmulRec instance : Module R (KatzModularForm R k) where one_smul F := by ext; simp mul_smul a b F := by ext; simp [mul_smul] smul_zero a := by ext; simp smul_add a F G := by ext; simp add_smul a b F := by ext; simp [add_smul] zero_smul F := by ext; simp def mul (F : KatzModularForm R k) (G : KatzModularForm R l) : KatzModularForm R (k + l) where toFun _ _ _ W hW := F.toFun W hW * G.toFun W hW map_toFun := by intro A B _ _ _ _ f W hW hW' rw [map_mul, F.map_toFun f W hW hW', G.map_toFun f W hW hW'] toFun_variableChange := by intro A _ _ C W hW hW' rw [F.toFun_variableChange C W hW hW', G.toFun_variableChange C W hW hW', zpow_add, Units.val_mul] ring @[simp] theorem mul_toFun (F : KatzModularForm R k) (G : KatzModularForm R l) {A : Type u} [CommRing A] [Algebra R A] (W : WeierstrassCurve A) (hW : IsUnit W.Δ) : (F.mul G).toFun W hW = F.toFun W hW * G.toFun W hW := rfl def qExpansion (F : KatzModularForm R k) : LaurentSeries R := F.toFun (ModularCurve.tateLaurent R) (ModularCurve.tateLaurent R).isUnit_Δ @[simp] theorem qExpansion_zero : (0 : KatzModularForm R k).qExpansion = 0 := rfl @[simp] theorem qExpansion_add (F G : KatzModularForm R k) : (F + G).qExpansion = F.qExpansion + G.qExpansion := rfl @[simp] theorem qExpansion_neg (F : KatzModularForm R k) : (-F).qExpansion = -F.qExpansion := rfl @[simp] theorem qExpansion_sub (F G : KatzModularForm R k) : (F - G).qExpansion = F.qExpansion - G.qExpansion := rfl @[simp] theorem qExpansion_smul (c : R) (F : KatzModularForm R k) : (c • F).qExpansion = c • F.qExpansion := by simp only [qExpansion, smul_toFun, Algebra.smul_def, ← HahnSeries.C_mul_eq_smul] congr 1 rw [RingHom.algebraMap_toAlgebra] simp @[simp] theorem qExpansion_mul (F : KatzModularForm R k) (G : KatzModularForm R l) : (F.mul G).qExpansion = F.qExpansion * G.qExpansion := rfl variable (R) def c₄ : KatzModularForm R 4 where toFun _ _ _ W _ := W.c₄ map_toFun := by intro A B _ _ _ _ f W hW hW' exact W.map_c₄ (f : A →+* B) toFun_variableChange := by intro A _ _ C W hW hW' rw [W.variableChange_c₄ C] norm_cast def c₆ : KatzModularForm R 6 where toFun _ _ _ W _ := W.c₆ map_toFun := by intro A B _ _ _ _ f W hW hW' exact W.map_c₆ (f : A →+* B) toFun_variableChange := by intro A _ _ C W hW hW' rw [W.variableChange_c₆ C] norm_cast def discr : KatzModularForm R 12 where toFun _ _ _ W _ := W.Δ map_toFun := by intro A B _ _ _ _ f W hW hW' exact W.map_Δ (f : A →+* B) toFun_variableChange := by intro A _ _ C W hW hW' rw [W.variableChange_Δ C] norm_cast variable {R} @[simp] theorem c₄_toFun {A : Type u} [CommRing A] [Algebra R A] (W : WeierstrassCurve A) (hW : IsUnit W.Δ) : (c₄ R).toFun W hW = W.c₄ := rfl @[simp] theorem c₆_toFun {A : Type u} [CommRing A] [Algebra R A] (W : WeierstrassCurve A) (hW : IsUnit W.Δ) : (c₆ R).toFun W hW = W.c₆ := rfl @[simp] theorem discr_toFun {A : Type u} [CommRing A] [Algebra R A] (W : WeierstrassCurve A) (hW : IsUnit W.Δ) : (discr R).toFun W hW = W.Δ := rfl theorem qExpansion_c₄ : (c₄ R).qExpansion = (ModularCurve.tateLaurent R).c₄ := rfl theorem qExpansion_c₆ : (c₆ R).qExpansion = (ModularCurve.tateLaurent R).c₆ := rfl theorem qExpansion_discr : (discr R).qExpansion = (ModularCurve.tateLaurent R).Δ := rfl end KatzModularForm end
Statements phrased using this module (29)
- Weight-two Katz forms mod 3^e are multiples of b₂
KatzModularForm.exists_toFun_eq_mul_b2_of_weight_two_zmod_three_pow0 below · depth 16 - Weight-two Γ₀(p) form congruent to a constant modulo m
ModularForm.exists_katzModularForm_qExpansion_eq_C_of_dvd_qCoeff526 below · depth 16 - Constant q-expansions of weight-two Katz forms mod m
KatzModularForm.exists_qExpansion_eq_C_of_dvd0 below · depth 17 - Katz form at Tate(qᵖ) is the base-changed q-expansion
KatzModularForm.toFun_tateBase_eq_qExpand_coeffMap_qExpansion0 below · depth 17 - Level reduction for even-weight Katz forms on Γ₀(p)
ModularCurve.KatzGamma0Form.exists_pullbackLevelP_eq_of_qTwist_qExpansion_eq_of_even_of_five_le413 below · depth 17 - Weight-two Γ₀(p) forms as Katz forms over ℤ[1/p]
ModularForm.exists_katzGamma0Form_evalCusp_eq_of_five_le499 below · depth 17 - Weight-two Katz forms mod M are 12-torsion multiples of b₂
KatzModularForm.exists_twelve_mul_eq_zero_and_toFun_eq_mul_b2_of_weight_two7 below · depth 18 - Level reduction for Katz Γ₀(p) forms, p≥ 5
ModularCurve.KatzGamma0Form.exists_pullbackLevelP_eq_of_qTwist_qExpansion_eq_of_five_le412 below · depth 18 - q-expansion principle for Γ₀(p)-type Katz forms
ModularCurve.KatzLevelPForm.eq_zero_of_dependsOnlyOnSndLine_of_evalCusp_eq_zero328 below · depth 18 - Weight-two Katz forms mod 2^e are 4-torsion multiples of b₂
KatzModularForm.exists_toFun_eq_mul_b2_of_weight_two_zmod_two_pow3 below · depth 19 - Weight-two level-one Katz forms over ℤ vanish
KatzModularForm.toFun_eq_zero_of_weight_two_int1 below · depth 19 - Weight-two level-one Katz forms vanish when 6 is invertible
KatzModularForm.toFun_eq_zero_of_weight_two_of_isUnit_six0 below · depth 19 - q-expansion principle at split Cartan level p
ModularCurve.KatzLevelPForm.eq_zero_of_dependsOnlyOnLines_of_forall_evalCusp_eq_zero328 below · depth 19 - q-expansion principle for Γ₀(p)-type Katz level-p forms
ModularCurve.KatzLevelPForm.eq_zero_of_dependsOnlyOnSndLine_of_evalCusp_eq_zero_of_field313 below · depth 19 - Descent of the q-expansion principle from fields
ModularCurve.KatzLevelPForm.eq_zero_of_dependsOnlyOnSndLine_of_evalCusp_eq_zero_of_forall_field18 below · depth 19 - Descent of swap-invariant level-p Katz forms to level one
ModularCurve.KatzLevelPForm.existsUnique_pullbackLevelP_eq_of_swapInvariant13 below · depth 19 - q-twisting by ζ shifts level-p cusp data
ModularCurve.cuspData_map_qTwist2 below · depth 19 - Non-toric cusp points: x(t· w) on the line of x(w)
ModularCurve.inLine_cuspData_smul_of_five_le49 below · depth 19 - Cusp points are level-p structures on the Tate curve
ModularCurve.isLevelPStructure_cuspData81 below · depth 19 - No weight-two Katz form mod 8 has constant term 1
KatzModularForm.constantCoeff_ne_one_of_weight_two_zmod_eight0 below · depth 20 - Weight-two Katz forms mod 2 are multiples of b₂
KatzModularForm.exists_toFun_eq_mul_b2_of_weight_two_zmod_two0 below · depth 20 - Vanishing at one cusp kills line-dependent Katz level-p forms
ModularCurve.KatzLevelPForm.eq_zero_of_dependsOnlyOnLines_of_evalCusp_eq_zero_of_field318 below · depth 20 - Vanishing of Katz level-p forms: fields to rings
ModularCurve.KatzLevelPForm.eq_zero_of_dependsOnlyOnLines_of_evalCusp_eq_zero_of_forall_field17 below · depth 20 - Generic-curve vanishing of a level-p Katz form
ModularCurve.KatzLevelPForm.eq_zero_of_forall_toFun_genericCurve_eq_zero4 below · depth 20 - Cusp points lie on the Tate curve over R((q))
ModularCurve.equation_tateBase_cuspPoint40 below · depth 20 - Cusp points of the Tate curve are p-torsion, p ≥ 5
ModularCurve.eval_prePsi_tateBase_cuspPoint_eq_zero_of_five_le43 below · depth 20 - Unit independence element for two p-torsion cusp points
ModularCurve.isUnit_indepElt_tateBase_cuspPoint_of_five_le78 below · depth 20 - Galois transitivity on cyclic p-subgroups of the generic curve
WeierstrassCurve.Generic.exists_algEquiv_inLine_of_eval_prePsi_eq_zero_of_ne_zero307 below · depth 20 - Unit independence element at two non-toric cusp slots
ModularCurve.isUnit_indepElt_tateBase_cuspPoint_slot_slot_of_five_le49 below · depth 21