import Definitions.Def_LanglandsTunnell_CubicInduction_Carrier import Definitions.Def_NumberField_TateGlobalZeta import Mathlib.MeasureTheory.Function.L2Space set_option autoImplicit false noncomputable section open NumberField MeasureTheory open scoped ENNReal namespace LanglandsTunnell.CubicInduction.SlabL2 attribute [local instance] NumberField.AdelicHaar.glBorel def ideleNormDetSlab (a b : ℝ) : Set (AdelicGL 3 (π“ž β„š) β„š) := {g | NumberField.TateGlobal.ideleNorm β„š (Matrix.GeneralLinearGroup.det g) ∈ Set.Icc a b} theorem mem_ideleNormDetSlab_iff (a b : ℝ) (g : AdelicGL 3 (π“ž β„š) β„š) : g ∈ ideleNormDetSlab a b ↔ NumberField.TateGlobal.ideleNorm β„š (Matrix.GeneralLinearGroup.det g) ∈ Set.Icc a b := Iff.rfl def slabMeasure (a b : ℝ) : Measure (AdelicGL 3 (π“ž β„š) β„š) := (NumberField.AdelicHaar.adelicGLHaar (Fin 3) (π“ž β„š) β„š).restrict (ideleNormDetSlab a b) theorem slabMeasure_def (a b : ℝ) : slabMeasure a b = (NumberField.AdelicHaar.adelicGLHaar (Fin 3) (π“ž β„š) β„š).restrict (ideleNormDetSlab a b) := rfl def domainMeasure (a b : ℝ) (Ξ¦β‚€ : Set (AdelicGL 3 (π“ž β„š) β„š)) : Measure (AdelicGL 3 (π“ž β„š) β„š) := (slabMeasure a b).restrict Ξ¦β‚€ theorem domainMeasure_def (a b : ℝ) (Ξ¦β‚€ : Set (AdelicGL 3 (π“ž β„š) β„š)) : domainMeasure a b Ξ¦β‚€ = (slabMeasure a b).restrict Ξ¦β‚€ := rfl abbrev Carrier (a b : ℝ) (Ξ¦β‚€ : Set (AdelicGL 3 (π“ž β„š) β„š)) : Type := Lp β„‚ 2 (domainMeasure a b Ξ¦β‚€) def IsSlabDomain (a b : ℝ) (Ξ¦β‚€ : Set (AdelicGL 3 (π“ž β„š) β„š)) : Prop := 0 < a ∧ a < b ∧ IsFundamentalDomain (globalPointsGL 3 (π“ž β„š) β„š).range Ξ¦β‚€ (slabMeasure a b) theorem isSlabDomain_iff (a b : ℝ) (Ξ¦β‚€ : Set (AdelicGL 3 (π“ž β„š) β„š)) : IsSlabDomain a b Ξ¦β‚€ ↔ 0 < a ∧ a < b ∧ IsFundamentalDomain (globalPointsGL 3 (π“ž β„š) β„š).range Ξ¦β‚€ (slabMeasure a b) := Iff.rfl theorem IsSlabDomain.pos {a b : ℝ} {Ξ¦β‚€ : Set (AdelicGL 3 (π“ž β„š) β„š)} (h : IsSlabDomain a b Ξ¦β‚€) : 0 < a := h.1 theorem IsSlabDomain.lt {a b : ℝ} {Ξ¦β‚€ : Set (AdelicGL 3 (π“ž β„š) β„š)} (h : IsSlabDomain a b Ξ¦β‚€) : a < b := h.2.1 theorem IsSlabDomain.isFundamentalDomain {a b : ℝ} {Ξ¦β‚€ : Set (AdelicGL 3 (π“ž β„š) β„š)} (h : IsSlabDomain a b Ξ¦β‚€) : IsFundamentalDomain (globalPointsGL 3 (π“ž β„š) β„š).range Ξ¦β‚€ (slabMeasure a b) := h.2.2 def automorphicSubmodule (Ο‰ : (AdeleRing (π“ž β„š) β„š)Λ£ β†’* β„‚Λ£) (a b : ℝ) (Ξ¦β‚€ : Set (AdelicGL 3 (π“ž β„š) β„š)) : Submodule β„‚ (AdelicGL 3 (π“ž β„š) β„š β†’ β„‚) where carrier := {f | (βˆ€ (Ξ³ : GL (Fin 3) β„š) (g : AdelicGL 3 (π“ž β„š) β„š), f (globalPointsGL 3 (π“ž β„š) β„š Ξ³ * g) = f g) ∧ (βˆ€ (z : (AdeleRing (π“ž β„š) β„š)Λ£) (g : AdelicGL 3 (π“ž β„š) β„š), f (centralScalarGL 3 (π“ž β„š) β„š z * g) = (Ο‰ z : β„‚) * f g) ∧ MemLp f 2 (domainMeasure a b Ξ¦β‚€)} zero_mem' := ⟨fun _ _ => rfl, fun _ _ => by simp, MemLp.zero⟩ add_mem' := fun {f f'} hf hf' => ⟨fun Ξ³ g => by rw [Pi.add_apply, Pi.add_apply, hf.1, hf'.1], fun z g => by rw [Pi.add_apply, Pi.add_apply, hf.2.1, hf'.2.1, mul_add], hf.2.2.add hf'.2.2⟩ smul_mem' := fun c {f} hf => ⟨fun Ξ³ g => by rw [Pi.smul_apply, Pi.smul_apply, hf.1], fun z g => by rw [Pi.smul_apply, Pi.smul_apply, hf.2.1, smul_eq_mul, smul_eq_mul, mul_left_comm], hf.2.2.const_smul c⟩ theorem mem_automorphicSubmodule_iff (Ο‰ : (AdeleRing (π“ž β„š) β„š)Λ£ β†’* β„‚Λ£) (a b : ℝ) (Ξ¦β‚€ : Set (AdelicGL 3 (π“ž β„š) β„š)) (f : AdelicGL 3 (π“ž β„š) β„š β†’ β„‚) : f ∈ automorphicSubmodule Ο‰ a b Ξ¦β‚€ ↔ (βˆ€ (Ξ³ : GL (Fin 3) β„š) (g : AdelicGL 3 (π“ž β„š) β„š), f (globalPointsGL 3 (π“ž β„š) β„š Ξ³ * g) = f g) ∧ (βˆ€ (z : (AdeleRing (π“ž β„š) β„š)Λ£) (g : AdelicGL 3 (π“ž β„š) β„š), f (centralScalarGL 3 (π“ž β„š) β„š z * g) = (Ο‰ z : β„‚) * f g) ∧ MemLp f 2 (domainMeasure a b Ξ¦β‚€) := Iff.rfl def toL2 (Ο‰ : (AdeleRing (π“ž β„š) β„š)Λ£ β†’* β„‚Λ£) (a b : ℝ) (Ξ¦β‚€ : Set (AdelicGL 3 (π“ž β„š) β„š)) : β†₯(automorphicSubmodule Ο‰ a b Ξ¦β‚€) β†’β‚—[β„‚] Carrier a b Ξ¦β‚€ where toFun f := f.2.2.2.toLp (f : AdelicGL 3 (π“ž β„š) β„š β†’ β„‚) map_add' f f' := MemLp.toLp_add f.2.2.2 f'.2.2.2 map_smul' c f := MemLp.toLp_const_smul c f.2.2.2 theorem toL2_apply (Ο‰ : (AdeleRing (π“ž β„š) β„š)Λ£ β†’* β„‚Λ£) (a b : ℝ) (Ξ¦β‚€ : Set (AdelicGL 3 (π“ž β„š) β„š)) (f : β†₯(automorphicSubmodule Ο‰ a b Ξ¦β‚€)) : toL2 Ο‰ a b Ξ¦β‚€ f = f.2.2.2.toLp (f : AdelicGL 3 (π“ž β„š) β„š β†’ β„‚) := rfl end LanglandsTunnell.CubicInduction.SlabL2 end