import Definitions.Def_NumberField_AdelicFourier import Definitions.Def_NumberField_TateGlobalZeta import Definitions.Def_AutomorphicForm_EtaFamily open NumberField IsDedekindDomain MeasureTheory open scoped SchwartzMap noncomputable section namespace NumberField.AdelicFourier variable (F : Type*) [Field F] [NumberField F] open scoped Classical in def pureTensorSet2 : Set ((Fin 2 โ†’ AdeleRing (๐“ž F) F) โ†’ โ„‚) := {ฮฆ | โˆƒ (g : ๐“ข((Fin 2 โ†’ mixedEmbedding.mixedSpace F), โ„‚)) (h : (Fin 2 โ†’ FiniteAdeleRing (๐“ž F) F) โ†’ โ„‚), IsLocallyConstant h โˆง HasCompactSupport h โˆง ฮฆ = fun x => g (fun i => InfiniteAdeleRing.ringEquiv_mixedSpace F (x i).1) * h (fun i => (x i).2)} def schwartzBruhat2 : Submodule โ„‚ ((Fin 2 โ†’ AdeleRing (๐“ž F) F) โ†’ โ„‚) := Submodule.span โ„‚ (pureTensorSet2 F) variable {F} def pairHaar [MeasurableSpace (AdeleRing (๐“ž F) F)] (ฮผโ‚ : Measure (AdeleRing (๐“ž F) F)) : Measure (Fin 2 โ†’ AdeleRing (๐“ž F) F) := Measure.pi fun _ : Fin 2 => ฮผโ‚ def pairChar (ฯˆ : AddChar (AdeleRing (๐“ž F) F) โ„‚) : AddChar (Fin 2 โ†’ AdeleRing (๐“ž F) F) โ„‚ := ฯˆ.compAddMonoidHom (Pi.evalAddMonoidHom (fun _ : Fin 2 => AdeleRing (๐“ž F) F) 0 + Pi.evalAddMonoidHom (fun _ : Fin 2 => AdeleRing (๐“ž F) F) 1) theorem pairChar_apply (ฯˆ : AddChar (AdeleRing (๐“ž F) F) โ„‚) (v : Fin 2 โ†’ AdeleRing (๐“ž F) F) : pairChar ฯˆ v = ฯˆ (v 0 + v 1) := rfl def fourierTransform2 [MeasurableSpace (AdeleRing (๐“ž F) F)] (ฯˆ : AddChar (AdeleRing (๐“ž F) F) โ„‚) (ฮผโ‚ : Measure (AdeleRing (๐“ž F) F)) (ฮฆ : (Fin 2 โ†’ AdeleRing (๐“ž F) F) โ†’ โ„‚) : (Fin 2 โ†’ AdeleRing (๐“ž F) F) โ†’ โ„‚ := fourierIntegral (pairChar ฯˆ) (pairHaar ฮผโ‚) ฮฆ def reflectPair [MeasurableSpace (AdeleRing (๐“ž F) F)] (ฯˆ : AddChar (AdeleRing (๐“ž F) F) โ„‚) (ฮผโ‚ : Measure (AdeleRing (๐“ž F) F)) (ฮฆ : (Fin 2 โ†’ AdeleRing (๐“ž F) F) โ†’ โ„‚) (x : Fin 2 โ†’ AdeleRing (๐“ž F) F) : โ„‚ := fourierTransform2 ฯˆ ฮผโ‚ ฮฆ ![x 1, -x 0] open scoped Classical in theorem tensor_mem_pureTensorSet2 (g : ๐“ข((Fin 2 โ†’ mixedEmbedding.mixedSpace F), โ„‚)) (h : (Fin 2 โ†’ FiniteAdeleRing (๐“ž F) F) โ†’ โ„‚) (hlc : IsLocallyConstant h) (hcs : HasCompactSupport h) : (fun x : Fin 2 โ†’ AdeleRing (๐“ž F) F => g (fun i => InfiniteAdeleRing.ringEquiv_mixedSpace F (x i).1) * h (fun i => (x i).2)) โˆˆ pureTensorSet2 F := โŸจg, h, hlc, hcs, rflโŸฉ theorem mem_schwartzBruhat2_of_mem_pureTensorSet2 {ฮฆ : (Fin 2 โ†’ AdeleRing (๐“ž F) F) โ†’ โ„‚} (hฮฆ : ฮฆ โˆˆ pureTensorSet2 F) : ฮฆ โˆˆ schwartzBruhat2 F := Submodule.subset_span hฮฆ theorem zero_mem_schwartzBruhat2 : (0 : (Fin 2 โ†’ AdeleRing (๐“ž F) F) โ†’ โ„‚) โˆˆ schwartzBruhat2 F := Submodule.zero_mem _ theorem schwartzBruhat2_induction {p : (ฮฆ : (Fin 2 โ†’ AdeleRing (๐“ž F) F) โ†’ โ„‚) โ†’ ฮฆ โˆˆ schwartzBruhat2 F โ†’ Prop} (tensor : โˆ€ (ฮฆ) (hฮฆ : ฮฆ โˆˆ pureTensorSet2 F), p ฮฆ (mem_schwartzBruhat2_of_mem_pureTensorSet2 hฮฆ)) (zero : p 0 zero_mem_schwartzBruhat2) (add : โˆ€ ฮฆ ฮจ (hฮฆ : ฮฆ โˆˆ schwartzBruhat2 F) (hฮจ : ฮจ โˆˆ schwartzBruhat2 F), p ฮฆ hฮฆ โ†’ p ฮจ hฮจ โ†’ p (ฮฆ + ฮจ) (Submodule.add_mem _ hฮฆ hฮจ)) (smul : โˆ€ (c : โ„‚) ฮฆ (hฮฆ : ฮฆ โˆˆ schwartzBruhat2 F), p ฮฆ hฮฆ โ†’ p (c โ€ข ฮฆ) (Submodule.smul_mem _ c hฮฆ)) {ฮฆ : (Fin 2 โ†’ AdeleRing (๐“ž F) F) โ†’ โ„‚} (hฮฆ : ฮฆ โˆˆ schwartzBruhat2 F) : p ฮฆ hฮฆ := Submodule.span_induction tensor zero add smul hฮฆ end NumberField.AdelicFourier namespace AutomorphicForm variable (F : Type) [Field F] [NumberField F] def bottomRowVec (g : AdelicGL2 (๐“ž F) F) (t : AdeleRing (๐“ž F) F) : Fin 2 โ†’ AdeleRing (๐“ž F) F := fun j => t * (g : Matrix (Fin 2) (Fin 2) (AdeleRing (๐“ž F) F)) 1 j def godementSection {mI : MeasurableSpace (AdeleRing (๐“ž F) F)หฃ} (ฮฝโ‚€ : Measure (AdeleRing (๐“ž F) F)หฃ) (ฮผ ฮฝ : (AdeleRing (๐“ž F) F)หฃ โ†’* โ„‚หฃ) (ฮฑ : (AdeleRing (๐“ž F) F)หฃ โ†’* โ„หฃ) (hฮฑ : โˆ€ x, 0 < ((ฮฑ x : โ„หฃ) : โ„)) (ฮฆ : (Fin 2 โ†’ AdeleRing (๐“ž F) F) โ†’ โ„‚) (s : โ„‚) (g : AdelicGL2 (๐“ž F) F) : โ„‚ := ((ฮผ (Matrix.GeneralLinearGroup.det g) : โ„‚หฃ) : โ„‚) * ((cpowChar ฮฑ hฮฑ (s + 1 / 2) (Matrix.GeneralLinearGroup.det g) : โ„‚หฃ) : โ„‚) * NumberField.TateGlobal.zetaIntegral ฮฝโ‚€ (fun t => ฮฆ (bottomRowVec F g t)) (ฮผ * ฮฝโปยน) (2 * s + 1) end AutomorphicForm end