import Definitions.Def_CohCarrier_Inst import Definitions.Def_ModularCurve_PeriodMap import Definitions.Def_CohCarrier_LevelPairing set_option autoImplicit false set_option linter.unusedVariables false noncomputable section namespace CuspForm open CohCarrier IharaLemma IharaTower namespace Bfam variable (๐’ช : Type) [CommRing ๐’ช] def LevelBlock (B : (M : โ„•) โ†’ (H : Subgroup (ZMod M)หฃ) โ†’ (hโ‚ : LevelLE M M โŠค H 1) โ†’ โ†ฅ((ModularCurve.Period.parabolicHoms ๐’ช (GammaH M โŠค) ๐’ช).map (iDegL M M โŠค H 1 ๐’ช ๐’ช hโ‚)) โ†’โ‚—[๐’ช] โ†ฅ((ModularCurve.Period.parabolicHoms ๐’ช (GammaH M โŠค) ๐’ช).map (iDegL M M โŠค H 1 ๐’ช ๐’ช hโ‚)) โ†’โ‚—[๐’ช] ๐’ช) : Prop := โˆ€ (M : โ„•) [NeZero M] (H : Subgroup (ZMod M)หฃ) (hโ‚ : LevelLE M M โŠค H 1), IsUnit ((H.index : โ„•) : ๐’ช) โ†’ Function.Bijective (B M H hโ‚) โˆง (โˆ€ (โ„“ : โ„•) [NeZero โ„“], (โ„“.Prime โˆจ โ„“ โˆฃ M) โ†’ โˆ€ (x y Tx Ty : โ†ฅ((ModularCurve.Period.parabolicHoms ๐’ช (GammaH M โŠค) ๐’ช).map (iDegL M M โŠค H 1 ๐’ช ๐’ช hโ‚))), (Tx : H1 M H ๐’ช) = heckeT M H โ„“ ๐’ช x โ†’ (Ty : H1 M H ๐’ช) = heckeT M H โ„“ ๐’ช y โ†’ B M H hโ‚ Tx y = B M H hโ‚ x Ty) โˆง (โˆ€ (d : (ZMod M)หฃ) (x : โ†ฅ((ModularCurve.Period.parabolicHoms ๐’ช (GammaH M โŠค) ๐’ช).map (iDegL M M โŠค H 1 ๐’ช ๐’ช hโ‚))), diamondL M H ๐’ช d (x : H1 M H ๐’ช) = x) def DegeneracyBlock (B : (M : โ„•) โ†’ (H : Subgroup (ZMod M)หฃ) โ†’ (hโ‚ : LevelLE M M โŠค H 1) โ†’ โ†ฅ((ModularCurve.Period.parabolicHoms ๐’ช (GammaH M โŠค) ๐’ช).map (iDegL M M โŠค H 1 ๐’ช ๐’ช hโ‚)) โ†’โ‚—[๐’ช] โ†ฅ((ModularCurve.Period.parabolicHoms ๐’ช (GammaH M โŠค) ๐’ช).map (iDegL M M โŠค H 1 ๐’ช ๐’ช hโ‚)) โ†’โ‚—[๐’ช] ๐’ช) : Prop := โˆ€ (M M' : โ„•) [NeZero M] [NeZero M'] (H : Subgroup (ZMod M)หฃ) (H' : Subgroup (ZMod M')หฃ) (hโ‚ : LevelLE M M โŠค H 1) (hโ‚' : LevelLE M' M' โŠค H' 1) (d d' : โ„•) [NeZero d] [NeZero d'] (h : LevelLE M M' H H' d) (h' : LevelLE M M' H H' d') (hdd' : d * d' = M' / M) (hH' : โˆ€ u : (ZMod M')หฃ, u โˆˆ H' โ†” ZMod.unitsMap h.dvd u โˆˆ H), IsUnit ((H.index : โ„•) : ๐’ช) โ†’ IsUnit ((H'.index : โ„•) : ๐’ช) โ†’ โˆ€ (x : โ†ฅ((ModularCurve.Period.parabolicHoms ๐’ช (GammaH M โŠค) ๐’ช).map (iDegL M M โŠค H 1 ๐’ช ๐’ช hโ‚))) (y : โ†ฅ((ModularCurve.Period.parabolicHoms ๐’ช (GammaH M' โŠค) ๐’ช).map (iDegL M' M' โŠค H' 1 ๐’ช ๐’ช hโ‚'))) (ix : โ†ฅ((ModularCurve.Period.parabolicHoms ๐’ช (GammaH M' โŠค) ๐’ช).map (iDegL M' M' โŠค H' 1 ๐’ช ๐’ช hโ‚'))) (jy : โ†ฅ((ModularCurve.Period.parabolicHoms ๐’ช (GammaH M โŠค) ๐’ช).map (iDegL M M โŠค H 1 ๐’ช ๐’ช hโ‚))), (ix : H1 M' H' ๐’ช) = iDegL M M' H H' d ๐’ช ๐’ช h x โ†’ (jy : H1 M H ๐’ช) = jDegL M M' H H' d' ๐’ช ๐’ช h' y โ†’ B M H hโ‚ jy x = B M' H' hโ‚' y ix end Bfam def Bfam (๐’ช : Type) [CommRing ๐’ช] : (M : โ„•) โ†’ (H : Subgroup (ZMod M)หฃ) โ†’ (hโ‚ : LevelLE M M โŠค H 1) โ†’ โ†ฅ((ModularCurve.Period.parabolicHoms ๐’ช (GammaH M โŠค) ๐’ช).map (iDegL M M โŠค H 1 ๐’ช ๐’ช hโ‚)) โ†’โ‚—[๐’ช] โ†ฅ((ModularCurve.Period.parabolicHoms ๐’ช (GammaH M โŠค) ๐’ช).map (iDegL M M โŠค H 1 ๐’ช ๐’ช hโ‚)) โ†’โ‚—[๐’ช] ๐’ช := Classical.epsilon fun B => Bfam.LevelBlock ๐’ช B โˆง Bfam.DegeneracyBlock ๐’ช B namespace Bfam section Corner variable (๐’ช : Type) [CommRing ๐’ช] (M : โ„•) (H : Subgroup (ZMod M)หฃ) (hโ‚ : LevelLE M M โŠค H 1) variable {๐•‹ : Type} [CommRing ๐•‹] [Algebra ๐’ช ๐•‹] [Module ๐•‹ (H1 M H ๐’ช)] [IsScalarTower ๐’ช ๐•‹ (H1 M H ๐’ช)] def cornerInclusion (cd : H1CornerData (๐’ช := ๐’ช) M H ๐’ช ๐•‹) (hW : โˆ€ v : H1 M H ๐’ช, v โˆˆ cornerSubmodule (M := H1 M H ๐’ช) (cd.split.e cd.idx) โ†’ v โˆˆ (ModularCurve.Period.parabolicHoms ๐’ช (GammaH M โŠค) ๐’ช).map (iDegL M M โŠค H 1 ๐’ช ๐’ช hโ‚)) : cd.cornerModule โ†’โ‚—[๐’ช] โ†ฅ((ModularCurve.Period.parabolicHoms ๐’ช (GammaH M โŠค) ๐’ช).map (iDegL M M โŠค H 1 ๐’ช ๐’ช hโ‚)) where toFun x := โŸจx, hW _ x.2โŸฉ map_add' _ _ := rfl map_smul' _ _ := rfl @[simp] theorem cornerInclusion_apply (cd : H1CornerData (๐’ช := ๐’ช) M H ๐’ช ๐•‹) (hW : โˆ€ v : H1 M H ๐’ช, v โˆˆ cornerSubmodule (M := H1 M H ๐’ช) (cd.split.e cd.idx) โ†’ v โˆˆ (ModularCurve.Period.parabolicHoms ๐’ช (GammaH M โŠค) ๐’ช).map (iDegL M M โŠค H 1 ๐’ช ๐’ช hโ‚)) (x : cd.cornerModule) : cornerInclusion ๐’ช M H hโ‚ cd hW x = โŸจx, hW _ x.2โŸฉ := rfl def cornerRestrict (cd : H1CornerData (๐’ช := ๐’ช) M H ๐’ช ๐•‹) (hW : โˆ€ v : H1 M H ๐’ช, v โˆˆ cornerSubmodule (M := H1 M H ๐’ช) (cd.split.e cd.idx) โ†’ v โˆˆ (ModularCurve.Period.parabolicHoms ๐’ช (GammaH M โŠค) ๐’ช).map (iDegL M M โŠค H 1 ๐’ช ๐’ช hโ‚)) : cd.cornerModule โ†’โ‚—[๐’ช] cd.cornerModule โ†’โ‚—[๐’ช] ๐’ช := (Bfam ๐’ช M H hโ‚).complโ‚โ‚‚ (cornerInclusion ๐’ช M H hโ‚ cd hW) (cornerInclusion ๐’ช M H hโ‚ cd hW) @[simp] theorem cornerRestrict_apply (cd : H1CornerData (๐’ช := ๐’ช) M H ๐’ช ๐•‹) (hW : โˆ€ v : H1 M H ๐’ช, v โˆˆ cornerSubmodule (M := H1 M H ๐’ช) (cd.split.e cd.idx) โ†’ v โˆˆ (ModularCurve.Period.parabolicHoms ๐’ช (GammaH M โŠค) ๐’ช).map (iDegL M M โŠค H 1 ๐’ช ๐’ช hโ‚)) (x y : cd.cornerModule) : cornerRestrict ๐’ช M H hโ‚ cd hW x y = Bfam ๐’ช M H hโ‚ โŸจx, hW _ x.2โŸฉ โŸจy, hW _ y.2โŸฉ := rfl theorem pairing_eq_cornerRestrict_iff (cd : H1CornerData (๐’ช := ๐’ช) M H ๐’ช ๐•‹) (hW : โˆ€ v : H1 M H ๐’ช, v โˆˆ cornerSubmodule (M := H1 M H ๐’ช) (cd.split.e cd.idx) โ†’ v โˆˆ (ModularCurve.Period.parabolicHoms ๐’ช (GammaH M โŠค) ๐’ช).map (iDegL M M โŠค H 1 ๐’ช ๐’ช hโ‚)) : cd.pairing.B = cornerRestrict ๐’ช M H hโ‚ cd hW โ†” โˆ€ x y : cd.cornerModule, cd.pairing.B x y = Bfam ๐’ช M H hโ‚ โŸจx, hW _ x.2โŸฉ โŸจy, hW _ y.2โŸฉ := by constructor ยท intro h x y rw [h] rfl ยท intro h exact LinearMap.extโ‚‚ fun x y => h x y end Corner end Bfam namespace Bfamโ‚€ variable (๐’ช : Type) [CommRing ๐’ช] def Block (B : (M : โ„•) โ†’ โ†ฅ(ModularCurve.Period.parabolicHoms ๐’ช (CohCarrier.GammaH M โŠค) ๐’ช) โ†’โ‚—[๐’ช] โ†ฅ(ModularCurve.Period.parabolicHoms ๐’ช (CohCarrier.GammaH M โŠค) ๐’ช) โ†’โ‚—[๐’ช] ๐’ช) : Prop := (โˆ€ (M : โ„•) [NeZero M], Function.Bijective (B M) โˆง (โˆ€ (โ„“ : โ„•) [NeZero โ„“] (x y Tx Ty : โ†ฅ(ModularCurve.Period.parabolicHoms ๐’ช (CohCarrier.GammaH M โŠค) ๐’ช)), (Tx : CohCarrier.H1 M โŠค ๐’ช) = CohCarrier.heckeT M โŠค โ„“ ๐’ช x โ†’ (Ty : CohCarrier.H1 M โŠค ๐’ช) = CohCarrier.heckeT M โŠค โ„“ ๐’ช y โ†’ B M Tx y = B M x Ty) โˆง (โˆ€ (d : (ZMod M)หฃ) (x y Dx Dy : โ†ฅ(ModularCurve.Period.parabolicHoms ๐’ช (CohCarrier.GammaH M โŠค) ๐’ช)), (Dx : CohCarrier.H1 M โŠค ๐’ช) = CohCarrier.diamondL M โŠค ๐’ช d x โ†’ (Dy : CohCarrier.H1 M โŠค ๐’ช) = CohCarrier.diamondL M โŠค ๐’ช d y โ†’ B M Dx y = B M x Dy)) โˆง (โˆ€ (M M' : โ„•) [NeZero M'] (d d' : โ„•) [NeZero d] [NeZero d'] (h : CohCarrier.LevelLE M M' โŠค โŠค d) (h' : CohCarrier.LevelLE M M' โŠค โŠค d') (hdd' : d * d' = M' / M) (x : โ†ฅ(ModularCurve.Period.parabolicHoms ๐’ช (CohCarrier.GammaH M โŠค) ๐’ช)) (y : โ†ฅ(ModularCurve.Period.parabolicHoms ๐’ช (CohCarrier.GammaH M' โŠค) ๐’ช)) (ix : โ†ฅ(ModularCurve.Period.parabolicHoms ๐’ช (CohCarrier.GammaH M' โŠค) ๐’ช)) (jy : โ†ฅ(ModularCurve.Period.parabolicHoms ๐’ช (CohCarrier.GammaH M โŠค) ๐’ช)), (ix : CohCarrier.H1 M' โŠค ๐’ช) = CohCarrier.iDegL M M' โŠค โŠค d ๐’ช ๐’ช h x โ†’ (jy : CohCarrier.H1 M โŠค ๐’ช) = CohCarrier.jDegL M M' โŠค โŠค d' ๐’ช ๐’ช h' y โ†’ B M jy x = B M' y ix) end Bfamโ‚€ def Bfamโ‚€ (๐’ช : Type) [CommRing ๐’ช] : (M : โ„•) โ†’ โ†ฅ(ModularCurve.Period.parabolicHoms ๐’ช (CohCarrier.GammaH M โŠค) ๐’ช) โ†’โ‚—[๐’ช] โ†ฅ(ModularCurve.Period.parabolicHoms ๐’ช (CohCarrier.GammaH M โŠค) ๐’ช) โ†’โ‚—[๐’ช] ๐’ช := Classical.epsilon (Bfamโ‚€.Block ๐’ช) end CuspForm end