# Modular forms #

This file defines modular forms and proves some basic properties about them. Including constructing the graded ring of modular forms.

We begin by defining modular forms and cusp forms as extension of SlashInvariantForms then we define the space of modular forms, cusp forms and prove that the product of two modular forms is a modular form.

structure ModularForm (Γ : ) (k : ) extends :

These are SlashInvariantForm's that are holomorphic and bounded at infinity.

Instances For
structure CuspForm (Γ : ) (k : ) extends :

These are SlashInvariantForms that are holomorphic and zero at infinity.

Instances For
class ModularFormClass (F : Type u_2) (Γ : ) (k : ) [] extends :

ModularFormClass F Γ k says that F is a type of bundled functions that extend SlashInvariantFormClass by requiring that the functions be holomorphic and bounded at infinity.

• slash_action_eq : ∀ (f : F) (γ : Γ), SlashAction.map k γ f = f
• holo : ∀ (f : F),
• bdd_at_infty : ∀ (f : F) (A : ),
Instances
class CuspFormClass (F : Type u_2) (Γ : ) (k : ) [] extends :

CuspFormClass F Γ k says that F is a type of bundled functions that extend SlashInvariantFormClass by requiring that the functions be holomorphic and zero at infinity.

• slash_action_eq : ∀ (f : F) (γ : Γ), SlashAction.map k γ f = f
• holo : ∀ (f : F),
• zero_at_infty : ∀ (f : F) (A : ),
Instances
instance ModularForm.funLike (Γ : ) (k : ) :
Equations
• = { coe := fun (f : ) => f.toFun, coe_injective' := }
instance ModularFormClass.modularForm (Γ : ) (k : ) :
Equations
• =
instance CuspForm.funLike (Γ : ) (k : ) :
Equations
• = { coe := fun (f : CuspForm Γ k) => f.toFun, coe_injective' := }
instance CuspFormClass.cuspForm (Γ : ) (k : ) :
Equations
• =
theorem ModularForm.toFun_eq_coe {Γ : } {k : } (f : ) :
f.toFun = f
@[simp]
theorem ModularForm.toSlashInvariantForm_coe {Γ : } {k : } (f : ) :
f.toSlashInvariantForm = f
theorem CuspForm.toFun_eq_coe {Γ : } {k : } {f : CuspForm Γ k} :
f.toFun = f
@[simp]
theorem CuspForm.toSlashInvariantForm_coe {Γ : } {k : } (f : CuspForm Γ k) :
f.toSlashInvariantForm = f
theorem ModularForm.ext {Γ : } {k : } {f : } {g : } (h : ∀ (x : UpperHalfPlane), f x = g x) :
f = g
theorem CuspForm.ext {Γ : } {k : } {f : CuspForm Γ k} {g : CuspForm Γ k} (h : ∀ (x : UpperHalfPlane), f x = g x) :
f = g
def ModularForm.copy {Γ : } {k : } (f : ) (f' : ) (h : f' = f) :

Copy of a ModularForm with a new toFun equal to the old one. Useful to fix definitional equalities.

Equations
Instances For
def CuspForm.copy {Γ : } {k : } (f : CuspForm Γ k) (f' : ) (h : f' = f) :

Copy of a CuspForm with a new toFun equal to the old one. Useful to fix definitional equalities.

Equations
Instances For
instance ModularForm.add {Γ : } {k : } :
Equations
• One or more equations did not get rendered due to their size.
@[simp]
theorem ModularForm.coe_add {Γ : } {k : } (f : ) (g : ) :
(f + g) = f + g
@[simp]
theorem ModularForm.add_apply {Γ : } {k : } (f : ) (g : ) (z : UpperHalfPlane) :
(f + g) z = f z + g z
instance ModularForm.instZero {Γ : } {k : } :
Zero ()
Equations
@[simp]
theorem ModularForm.coe_zero {Γ : } {k : } :
0 = 0
@[simp]
theorem ModularForm.zero_apply {Γ : } {k : } (z : UpperHalfPlane) :
0 z = 0
instance ModularForm.instSMul {Γ : } {k : } {α : Type u_2} [] [] :
SMul α ()
Equations
• ModularForm.instSMul = { smul := fun (c : α) (f : ) => { toSlashInvariantForm := c f.toSlashInvariantForm, holo' := , bdd_at_infty' := } }
@[simp]
theorem ModularForm.coe_smul {Γ : } {k : } {α : Type u_2} [] [] (f : ) (n : α) :
(n f) = n f
@[simp]
theorem ModularForm.smul_apply {Γ : } {k : } {α : Type u_2} [] [] (f : ) (n : α) (z : UpperHalfPlane) :
(n f) z = n f z
instance ModularForm.instNeg {Γ : } {k : } :
Neg ()
Equations
• ModularForm.instNeg = { neg := fun (f : ) => { toSlashInvariantForm := -f.toSlashInvariantForm, holo' := , bdd_at_infty' := } }
@[simp]
theorem ModularForm.coe_neg {Γ : } {k : } (f : ) :
(-f) = -f
@[simp]
theorem ModularForm.neg_apply {Γ : } {k : } (f : ) (z : UpperHalfPlane) :
(-f) z = -f z
instance ModularForm.instSub {Γ : } {k : } :
Sub ()
Equations
• ModularForm.instSub = { sub := fun (f g : ) => f + -g }
@[simp]
theorem ModularForm.coe_sub {Γ : } {k : } (f : ) (g : ) :
(f - g) = f - g
@[simp]
theorem ModularForm.sub_apply {Γ : } {k : } (f : ) (g : ) (z : UpperHalfPlane) :
(f - g) z = f z - g z
Equations
@[simp]
theorem ModularForm.coeHom_apply {Γ : } {k : } (f : ) (a : UpperHalfPlane) :
ModularForm.coeHom f a = f a
def ModularForm.coeHom {Γ : } {k : } :

Additive coercion from ModularForm to ℍ → ℂ.

Equations
• ModularForm.coeHom = { toZeroHom := { toFun := fun (f : ) => f, map_zero' := }, map_add' := }
Instances For
Equations
Equations
• ModularForm.instInhabitedModularForm = { default := 0 }
def ModularForm.mul {k_1 : } {k_2 : } {Γ : } (f : ModularForm Γ k_1) (g : ModularForm Γ k_2) :
ModularForm Γ (k_1 + k_2)

The modular form of weight k_1 + k_2 given by the product of two modular forms of weights k_1 and k_2.

Equations
• = { toSlashInvariantForm := SlashInvariantForm.mul f.toSlashInvariantForm g.toSlashInvariantForm, holo' := , bdd_at_infty' := }
Instances For
@[simp]
theorem ModularForm.mul_coe {k_1 : } {k_2 : } {Γ : } (f : ModularForm Γ k_1) (g : ModularForm Γ k_2) :
() = f * g
@[simp]
theorem ModularForm.const_toFun {Γ : } (x : ) :
@[simp]
theorem ModularForm.const_toSlashInvariantForm {Γ : } (x : ) :
.toSlashInvariantForm =
def ModularForm.const {Γ : } (x : ) :

The constant function with value x : ℂ as a modular form of weight 0 and any level.

Equations
• = { toSlashInvariantForm := , holo' := , bdd_at_infty' := }
Instances For
Equations
• ModularForm.instOneModularFormOfNatIntInstOfNat = { one := let __src := ; { toSlashInvariantForm := 1, holo' := , bdd_at_infty' := } }
@[simp]
theorem ModularForm.one_coe_eq_one {Γ : } :
1 = 1
Equations
• = { natCast := fun (n : ) => }
@[simp]
theorem ModularForm.coe_natCast (Γ : ) (n : ) :
n = n
theorem ModularForm.toSlashInvariantForm_natCast (Γ : ) (n : ) :
(n).toSlashInvariantForm = n
Equations
• = { intCast := fun (z : ) => }
@[simp]
theorem ModularForm.coe_intCast (Γ : ) (z : ) :
z = z
theorem ModularForm.toSlashInvariantForm_intCast (Γ : ) (z : ) :
(z).toSlashInvariantForm = z
instance CuspForm.hasAdd {Γ : } {k : } :
Add (CuspForm Γ k)
Equations
• One or more equations did not get rendered due to their size.
@[simp]
theorem CuspForm.coe_add {Γ : } {k : } (f : CuspForm Γ k) (g : CuspForm Γ k) :
(f + g) = f + g
@[simp]
theorem CuspForm.add_apply {Γ : } {k : } (f : CuspForm Γ k) (g : CuspForm Γ k) (z : UpperHalfPlane) :
(f + g) z = f z + g z
instance CuspForm.instZero {Γ : } {k : } :
Zero (CuspForm Γ k)
Equations
@[simp]
theorem CuspForm.coe_zero {Γ : } {k : } :
0 = 0
@[simp]
theorem CuspForm.zero_apply {Γ : } {k : } (z : UpperHalfPlane) :
0 z = 0
instance CuspForm.instSMul {Γ : } {k : } {α : Type u_2} [] [] :
SMul α (CuspForm Γ k)
Equations
• CuspForm.instSMul = { smul := fun (c : α) (f : CuspForm Γ k) => { toSlashInvariantForm := c f.toSlashInvariantForm, holo' := , zero_at_infty' := } }
@[simp]
theorem CuspForm.coe_smul {Γ : } {k : } {α : Type u_2} [] [] (f : CuspForm Γ k) (n : α) :
(n f) = n f
@[simp]
theorem CuspForm.smul_apply {Γ : } {k : } {α : Type u_2} [] [] (f : CuspForm Γ k) (n : α) {z : UpperHalfPlane} :
(n f) z = n f z
instance CuspForm.instNeg {Γ : } {k : } :
Neg (CuspForm Γ k)
Equations
• CuspForm.instNeg = { neg := fun (f : CuspForm Γ k) => { toSlashInvariantForm := -f.toSlashInvariantForm, holo' := , zero_at_infty' := } }
@[simp]
theorem CuspForm.coe_neg {Γ : } {k : } (f : CuspForm Γ k) :
(-f) = -f
@[simp]
theorem CuspForm.neg_apply {Γ : } {k : } (f : CuspForm Γ k) (z : UpperHalfPlane) :
(-f) z = -f z
instance CuspForm.instSub {Γ : } {k : } :
Sub (CuspForm Γ k)
Equations
• CuspForm.instSub = { sub := fun (f g : CuspForm Γ k) => f + -g }
@[simp]
theorem CuspForm.coe_sub {Γ : } {k : } (f : CuspForm Γ k) (g : CuspForm Γ k) :
(f - g) = f - g
@[simp]
theorem CuspForm.sub_apply {Γ : } {k : } (f : CuspForm Γ k) (g : CuspForm Γ k) (z : UpperHalfPlane) :
(f - g) z = f z - g z
Equations
@[simp]
theorem CuspForm.coeHom_apply {Γ : } {k : } (f : CuspForm Γ k) (a : UpperHalfPlane) :
CuspForm.coeHom f a = f a
def CuspForm.coeHom {Γ : } {k : } :

Additive coercion from CuspForm to ℍ → ℂ.

Equations
• CuspForm.coeHom = { toZeroHom := { toFun := fun (f : CuspForm Γ k) => f, map_zero' := }, map_add' := }
Instances For
Equations
instance CuspForm.instInhabitedCuspForm {Γ : } {k : } :
Equations
• CuspForm.instInhabitedCuspForm = { default := 0 }
instance CuspForm.instModularFormClass {F : Type u_1} {Γ : } {k : } [] [] :
Equations
• =
def ModularForm.mcast {a : } {b : } {Γ : } (h : a = b) (f : ) :

Cast for modular forms, which is useful for avoiding Heqs.

Equations
• = { toSlashInvariantForm := { toFun := f, slash_action_eq' := }, holo' := , bdd_at_infty' := }
Instances For
theorem ModularForm.gradedMonoid_eq_of_cast {Γ : } {a : } {b : } (h : a.fst = b.fst) (h2 : ModularForm.mcast h a.snd = b.snd) :
a = b
Equations
Equations
• = { mul := fun {i j : } (f : ) (g : ) => }
instance ModularForm.instGCommRing (Γ : ) :
Equations
instance ModularForm.instGAlgebra (Γ : ) :
Equations
• = { toFun := { toZeroHom := { toFun := ModularForm.const, map_zero' := }, map_add' := }, map_one := , map_mul := , commutes := , smul_def := }