import Mathlib import Definitions.Def_AutomorphicForm_ViaCompactCuspNotion import Definitions.Def_AutomorphicForm_ProductionPinsGeneral set_option autoImplicit false open NumberField NumberField.AdelicLevel NumberField.AdelicBox NumberField.AdelicHaar MeasureTheory open AutomorphicForm AutomorphicForm.WindowedSiegel AutomorphicForm.SiegelCovering open scoped ENNReal noncomputable section namespace AutomorphicForm variable (F : Type) [Field F] [NumberField F] def IsInTranslateSpanOn (D : Set (AdelicGL2 (π“ž F) F)) (Ο† Ο†' : AdelicGL2 (π“ž F) F β†’ β„‚) : Prop := βˆ€ Ξ΅ : ℝβ‰₯0∞, 0 < Ξ΅ β†’ βˆƒ (s : Finset (AdelicGL2 (π“ž F) F)) (l : AdelicGL2 (π“ž F) F β†’ β„‚), ∫⁻ y in D, (β€–Ο†' y - βˆ‘ h ∈ s, l h * Ο† (y * h)β€–β‚Š : ℝβ‰₯0∞) ^ 2 βˆ‚(adelicGLHaar (Fin 2) (π“ž F) F) < Ξ΅ variable {F} theorem isInTranslateSpanOn_iff (D : Set (AdelicGL2 (π“ž F) F)) (Ο† Ο†' : AdelicGL2 (π“ž F) F β†’ β„‚) : IsInTranslateSpanOn F D Ο† Ο†' ↔ βˆ€ Ξ΅ : ℝβ‰₯0∞, 0 < Ξ΅ β†’ βˆƒ (s : Finset (AdelicGL2 (π“ž F) F)) (l : AdelicGL2 (π“ž F) F β†’ β„‚), ∫⁻ y in D, (β€–Ο†' y - βˆ‘ h ∈ s, l h * Ο† (y * h)β€–β‚Š : ℝβ‰₯0∞) ^ 2 βˆ‚(adelicGLHaar (Fin 2) (π“ž F) F) < Ξ΅ := Iff.rfl theorem isInTranslateSpanOn_self (D : Set (AdelicGL2 (π“ž F) F)) (Ο† : AdelicGL2 (π“ž F) F β†’ β„‚) : IsInTranslateSpanOn F D Ο† Ο† := by intro Ξ΅ hΞ΅ refine ⟨{1}, fun _ => 1, ?_⟩ have h0 : (fun y : AdelicGL2 (π“ž F) F => ((β€–Ο† y - βˆ‘ h ∈ ({1} : Finset (AdelicGL2 (π“ž F) F)), (1 : β„‚) * Ο† (y * h)β€–β‚Š : ℝβ‰₯0∞) ^ 2)) = fun _ => 0 := by funext y simp rw [h0, lintegral_zero] exact hΞ΅ theorem IsInTranslateSpanOn.of_eq {D : Set (AdelicGL2 (π“ž F) F)} {Ο† Ο†' : AdelicGL2 (π“ž F) F β†’ β„‚} (h : Ο† = Ο†') : IsInTranslateSpanOn F D Ο† Ο†' := by subst h; exact isInTranslateSpanOn_self D Ο† namespace TranslateSpanOccurrence theorem agrees_refl (Θ : HeckeEigensystem F β„‚) : Θ.AgreesAwayFromFinite Θ := βŸ¨βˆ…, fun _ _ => ⟨rfl, rfl⟩⟩ theorem agrees_symm {Θ Θ' : HeckeEigensystem F β„‚} (h : Θ.AgreesAwayFromFinite Θ') : Θ'.AgreesAwayFromFinite Θ := by obtain ⟨S, hS⟩ := h exact ⟨S, fun v hv => ⟨(hS v hv).1.symm, (hS v hv).2.symm⟩⟩ theorem agrees_trans {Θ Θ' Θ'' : HeckeEigensystem F β„‚} (h : Θ.AgreesAwayFromFinite Θ') (h' : Θ'.AgreesAwayFromFinite Θ'') : Θ.AgreesAwayFromFinite Θ'' := by classical obtain ⟨S, hS⟩ := h obtain ⟨S', hS'⟩ := h' refine ⟨S βˆͺ S', fun v hv => ?_⟩ rw [Finset.mem_union, not_or] at hv exact ⟨(hS v hv.1).1.trans (hS' v hv.2).1, (hS v hv.1).2.trans (hS' v hv.2).2⟩ end TranslateSpanOccurrence open TranslateSpanOccurrence variable (F) def ArchOccursInClassOf (D : Set (AdelicGL2 (π“ž F) F)) (Θ : HeckeEigensystem F β„‚) (P : (AdelicGL2 (π“ž F) F β†’ β„‚) β†’ Prop) : Prop := βˆƒ Θ' : HeckeEigensystem F β„‚, Θ'.AgreesAwayFromFinite Θ ∧ βˆƒ R' : SmoothCuspRealizationAt F (productionPinsOf F D (fun N => levelOne (π“ž F) F N βŠ“ finiteAdelicGL2Subgroup F) (fun v => heckeGen (π“ž F) F v) (adelicBox F)) Θ'.toRawCentral, IsGenuineCuspRealizationAt F (productionPinsOf F D (fun N => levelOne (π“ž F) F N βŠ“ finiteAdelicGL2Subgroup F) (fun v => heckeGen (π“ž F) F v) (adelicBox F)) Θ'.toRawCentral R' ∧ P R'.toFun variable {F} theorem archOccursInClassOf_of_realization {D : Set (AdelicGL2 (π“ž F) F)} {Θ : HeckeEigensystem F β„‚} (R : SmoothCuspRealizationAt F (productionPinsOf F D (fun N => levelOne (π“ž F) F N βŠ“ finiteAdelicGL2Subgroup F) (fun v => heckeGen (π“ž F) F v) (adelicBox F)) Θ.toRawCentral) (hR : IsGenuineCuspRealizationAt F (productionPinsOf F D (fun N => levelOne (π“ž F) F N βŠ“ finiteAdelicGL2Subgroup F) (fun v => heckeGen (π“ž F) F v) (adelicBox F)) Θ.toRawCentral R) {P : (AdelicGL2 (π“ž F) F β†’ β„‚) β†’ Prop} (hP : P R.toFun) : ArchOccursInClassOf F D Θ P := ⟨Θ, agrees_refl Θ, R, hR, hP⟩ theorem archOccursInClassOf_of_realization_of_agrees {D : Set (AdelicGL2 (π“ž F) F)} {Θ Θ' : HeckeEigensystem F β„‚} (hΘ' : Θ'.AgreesAwayFromFinite Θ) (R' : SmoothCuspRealizationAt F (productionPinsOf F D (fun N => levelOne (π“ž F) F N βŠ“ finiteAdelicGL2Subgroup F) (fun v => heckeGen (π“ž F) F v) (adelicBox F)) Θ'.toRawCentral) (hR' : IsGenuineCuspRealizationAt F (productionPinsOf F D (fun N => levelOne (π“ž F) F N βŠ“ finiteAdelicGL2Subgroup F) (fun v => heckeGen (π“ž F) F v) (adelicBox F)) Θ'.toRawCentral R') {P : (AdelicGL2 (π“ž F) F β†’ β„‚) β†’ Prop} (hP : P R'.toFun) : ArchOccursInClassOf F D Θ P := ⟨Θ', hΘ', R', hR', hP⟩ theorem ArchOccursInClassOf.mono {D : Set (AdelicGL2 (π“ž F) F)} {Θ : HeckeEigensystem F β„‚} {P Q : (AdelicGL2 (π“ž F) F β†’ β„‚) β†’ Prop} (h : ArchOccursInClassOf F D Θ P) (hPQ : βˆ€ Ο†, P Ο† β†’ Q Ο†) : ArchOccursInClassOf F D Θ Q := by obtain ⟨Θ', hΘ', R', hR', hP⟩ := h exact ⟨Θ', hΘ', R', hR', hPQ _ hP⟩ theorem ArchOccursInClassOf.and_left {D : Set (AdelicGL2 (π“ž F) F)} {Θ : HeckeEigensystem F β„‚} {P Q : (AdelicGL2 (π“ž F) F β†’ β„‚) β†’ Prop} (h : ArchOccursInClassOf F D Θ (fun Ο† => P Ο† ∧ Q Ο†)) : ArchOccursInClassOf F D Θ P := h.mono fun _ hΟ† => hΟ†.1 theorem ArchOccursInClassOf.and_right {D : Set (AdelicGL2 (π“ž F) F)} {Θ : HeckeEigensystem F β„‚} {P Q : (AdelicGL2 (π“ž F) F β†’ β„‚) β†’ Prop} (h : ArchOccursInClassOf F D Θ (fun Ο† => P Ο† ∧ Q Ο†)) : ArchOccursInClassOf F D Θ Q := h.mono fun _ hΟ† => hΟ†.2 theorem ArchOccursInClassOf.of_agrees {D : Set (AdelicGL2 (π“ž F) F)} {Ξ˜β‚ Ξ˜β‚‚ : HeckeEigensystem F β„‚} {P : (AdelicGL2 (π“ž F) F β†’ β„‚) β†’ Prop} (h : ArchOccursInClassOf F D Ξ˜β‚ P) (h₁₂ : Ξ˜β‚.AgreesAwayFromFinite Ξ˜β‚‚) : ArchOccursInClassOf F D Ξ˜β‚‚ P := by obtain ⟨Θ', hΘ', R', hR', hP⟩ := h exact ⟨Θ', agrees_trans hΘ' h₁₂, R', hR', hP⟩ theorem archOccursInClassOf_iff_of_agrees {D : Set (AdelicGL2 (π“ž F) F)} {Ξ˜β‚ Ξ˜β‚‚ : HeckeEigensystem F β„‚} (h₁₂ : Ξ˜β‚.AgreesAwayFromFinite Ξ˜β‚‚) (P : (AdelicGL2 (π“ž F) F β†’ β„‚) β†’ Prop) : ArchOccursInClassOf F D Ξ˜β‚ P ↔ ArchOccursInClassOf F D Ξ˜β‚‚ P := ⟨fun h => h.of_agrees h₁₂, fun h => h.of_agrees (agrees_symm h₁₂)⟩ theorem ArchOccursInClassOf.exists_continuous {D : Set (AdelicGL2 (π“ž F) F)} {Θ : HeckeEigensystem F β„‚} {P : (AdelicGL2 (π“ž F) F β†’ β„‚) β†’ Prop} (h : ArchOccursInClassOf F D Θ P) : βˆƒ Θ' : HeckeEigensystem F β„‚, Θ'.AgreesAwayFromFinite Θ ∧ βˆƒ Ο†' : AdelicGL2 (π“ž F) F β†’ β„‚, Continuous Ο†' ∧ P Ο†' := by obtain ⟨Θ', hΘ', R', hR', hP⟩ := h exact ⟨Θ', hΘ', R'.toFun, hR', hP⟩ theorem ArchOccursInClassOf.isArithGenuineCuspRealizable {D : Set (AdelicGL2 (π“ž F) F)} {Θ : HeckeEigensystem F β„‚} {P : (AdelicGL2 (π“ž F) F β†’ β„‚) β†’ Prop} (h : ArchOccursInClassOf F D Θ P) : βˆƒ Θ' : HeckeEigensystem F β„‚, Θ'.AgreesAwayFromFinite Θ ∧ IsArithGenuineCuspRealizable F (productionPinsOf F D (fun N => levelOne (π“ž F) F N βŠ“ finiteAdelicGL2Subgroup F) (fun v => heckeGen (π“ž F) F v) (adelicBox F)) Θ' := by obtain ⟨Θ', hΘ', R', hR', -⟩ := h exact ⟨Θ', hΘ', R', hR'⟩ theorem archOccursInClassOf_true_of_isArithGenuineCuspRealizable {D : Set (AdelicGL2 (π“ž F) F)} {Θ Θ' : HeckeEigensystem F β„‚} (hΘ' : Θ'.AgreesAwayFromFinite Θ) (h : IsArithGenuineCuspRealizable F (productionPinsOf F D (fun N => levelOne (π“ž F) F N βŠ“ finiteAdelicGL2Subgroup F) (fun v => heckeGen (π“ž F) F v) (adelicBox F)) Θ') : ArchOccursInClassOf F D Θ (fun _ => True) := by obtain ⟨R', hR'⟩ := h exact ⟨Θ', hΘ', R', hR', trivial⟩ variable (F) def ArchOccursInSpanOf (D : Set (AdelicGL2 (π“ž F) F)) (Θ : HeckeEigensystem F β„‚) (R : SmoothCuspRealizationAt F (productionPinsOf F D (fun N => levelOne (π“ž F) F N βŠ“ finiteAdelicGL2Subgroup F) (fun v => heckeGen (π“ž F) F v) (adelicBox F)) Θ.toRawCentral) (P : (AdelicGL2 (π“ž F) F β†’ β„‚) β†’ Prop) : Prop := βˆƒ Θ' : HeckeEigensystem F β„‚, Θ'.AgreesAwayFromFinite Θ ∧ βˆƒ R' : SmoothCuspRealizationAt F (productionPinsOf F D (fun N => levelOne (π“ž F) F N βŠ“ finiteAdelicGL2Subgroup F) (fun v => heckeGen (π“ž F) F v) (adelicBox F)) Θ'.toRawCentral, IsGenuineCuspRealizationAt F (productionPinsOf F D (fun N => levelOne (π“ž F) F N βŠ“ finiteAdelicGL2Subgroup F) (fun v => heckeGen (π“ž F) F v) (adelicBox F)) Θ'.toRawCentral R' ∧ IsInTranslateSpanOn F D R.toFun R'.toFun ∧ P R'.toFun variable {F} theorem archOccursInSpanOf_self {D : Set (AdelicGL2 (π“ž F) F)} {Θ : HeckeEigensystem F β„‚} (R : SmoothCuspRealizationAt F (productionPinsOf F D (fun N => levelOne (π“ž F) F N βŠ“ finiteAdelicGL2Subgroup F) (fun v => heckeGen (π“ž F) F v) (adelicBox F)) Θ.toRawCentral) (hR : IsGenuineCuspRealizationAt F (productionPinsOf F D (fun N => levelOne (π“ž F) F N βŠ“ finiteAdelicGL2Subgroup F) (fun v => heckeGen (π“ž F) F v) (adelicBox F)) Θ.toRawCentral R) {P : (AdelicGL2 (π“ž F) F β†’ β„‚) β†’ Prop} (hP : P R.toFun) : ArchOccursInSpanOf F D Θ R P := ⟨Θ, agrees_refl Θ, R, hR, isInTranslateSpanOn_self D R.toFun, hP⟩ theorem ArchOccursInSpanOf.mono {D : Set (AdelicGL2 (π“ž F) F)} {Θ : HeckeEigensystem F β„‚} {R : SmoothCuspRealizationAt F (productionPinsOf F D (fun N => levelOne (π“ž F) F N βŠ“ finiteAdelicGL2Subgroup F) (fun v => heckeGen (π“ž F) F v) (adelicBox F)) Θ.toRawCentral} {P Q : (AdelicGL2 (π“ž F) F β†’ β„‚) β†’ Prop} (h : ArchOccursInSpanOf F D Θ R P) (hPQ : βˆ€ Ο†, P Ο† β†’ Q Ο†) : ArchOccursInSpanOf F D Θ R Q := by obtain ⟨Θ', hΘ', R', hR', hspan, hP⟩ := h exact ⟨Θ', hΘ', R', hR', hspan, hPQ _ hP⟩ theorem ArchOccursInSpanOf.agrees {D : Set (AdelicGL2 (π“ž F) F)} {Θ : HeckeEigensystem F β„‚} {R : SmoothCuspRealizationAt F (productionPinsOf F D (fun N => levelOne (π“ž F) F N βŠ“ finiteAdelicGL2Subgroup F) (fun v => heckeGen (π“ž F) F v) (adelicBox F)) Θ.toRawCentral} {P : (AdelicGL2 (π“ž F) F β†’ β„‚) β†’ Prop} (h : ArchOccursInSpanOf F D Θ R P) : βˆƒ Θ' : HeckeEigensystem F β„‚, Θ'.AgreesAwayFromFinite Θ ∧ βˆƒ Ο†' : AdelicGL2 (π“ž F) F β†’ β„‚, Continuous Ο†' ∧ IsInTranslateSpanOn F D R.toFun Ο†' ∧ P Ο†' := by obtain ⟨Θ', hΘ', R', hR', hspan, hP⟩ := h exact ⟨Θ', hΘ', R'.toFun, hR', hspan, hP⟩ theorem ArchOccursInSpanOf.archOccursInClassOf {D : Set (AdelicGL2 (π“ž F) F)} {Θ : HeckeEigensystem F β„‚} {R : SmoothCuspRealizationAt F (productionPinsOf F D (fun N => levelOne (π“ž F) F N βŠ“ finiteAdelicGL2Subgroup F) (fun v => heckeGen (π“ž F) F v) (adelicBox F)) Θ.toRawCentral} {P : (AdelicGL2 (π“ž F) F β†’ β„‚) β†’ Prop} (h : ArchOccursInSpanOf F D Θ R P) : ArchOccursInClassOf F D Θ P := by obtain ⟨Θ', hΘ', R', hR', -, hP⟩ := h exact ⟨Θ', hΘ', R', hR', hP⟩ end AutomorphicForm end section Battery open AutomorphicForm #check @IsInTranslateSpanOn #check @ArchOccursInClassOf #check @ArchOccursInSpanOf #print axioms AutomorphicForm.isInTranslateSpanOn_self #print axioms AutomorphicForm.TranslateSpanOccurrence.agrees_trans #print axioms AutomorphicForm.archOccursInClassOf_of_realization #print axioms AutomorphicForm.archOccursInClassOf_iff_of_agrees #print axioms AutomorphicForm.ArchOccursInClassOf.isArithGenuineCuspRealizable #print axioms AutomorphicForm.archOccursInSpanOf_self #print axioms AutomorphicForm.ArchOccursInSpanOf.archOccursInClassOf end Battery