import Definitions.Def_AutomorphicForm_ProductionPinsGeneral import Definitions.Def_LanglandsTunnell_JLConverse import Definitions.Def_AutomorphicForm_ConstantTerm import Definitions.Def_AutomorphicForm_CarrierPins import Definitions.Def_NumberField_AdelicBox import Definitions.Def_NumberField_NormPowChar import Definitions.Def_LocalLanglands_HeckeCosetLocal import Definitions.Def_M4aHerbrand_IdeleClassVocab import Mathlib.MeasureTheory.Integral.DominatedConvergence import Mathlib.Probability.ConditionalProbability import Definitions.Def_AutomorphicForm_WhittakerCoefficient import Mathlib.Analysis.Normed.Group.FunctionSeries import Definitions.Def_NumberField_IdeleProductMeasure import Definitions.Def_AutomorphicForm_ArchType import Definitions.Def_AutomorphicForm_ArchWeightChar import Definitions.Def_AutomorphicForm_ViaCompactCuspNotion import Definitions.Def_LanglandsTunnell_JLSynthesis set_option autoImplicit false open IsDedekindDomain NumberField AutomorphicForm open NumberField.AdelicLevel NumberField.AdelicBox NumberField.TateGlobal open AutomorphicForm.WindowedSiegel open LanglandsTunnell.Converse noncomputable section section open scoped WithZero noncomputable section open IsDedekindDomain IsDedekindDomain.HeightOneSpectrum NumberField NumberField.AdelicLevel open NumberField.AdelicVolume NumberField.TateGlobal open Filter Topology namespace LanglandsTunnell.Converse.Ideles variable {K : Type} [Field K] [NumberField K] local notation "𝔸" => AdeleRing (π“ž K) K theorem val_mul_inv_snd_apply (z : 𝔸ˣ) (v : HeightOneSpectrum (π“ž K)) : (z : 𝔸).2 v * ((z⁻¹ : 𝔸ˣ) : 𝔸).2 v = 1 := congrArg (fun x : 𝔸 => x.2 v) z.mul_inv end LanglandsTunnell.Converse.Ideles end end section open scoped WithZero noncomputable section open IsDedekindDomain IsDedekindDomain.HeightOneSpectrum NumberField NumberField.AdelicLevel open NumberField.AdelicVolume NumberField.TateGlobal open Filter Topology namespace LanglandsTunnell.Converse.Ideles variable {K : Type} [Field K] [NumberField K] local notation "𝔸" => AdeleRing (π“ž K) K theorem val_inv_mul_snd_apply (z : 𝔸ˣ) (v : HeightOneSpectrum (π“ž K)) : ((z⁻¹ : 𝔸ˣ) : 𝔸).2 v * (z : 𝔸).2 v = 1 := congrArg (fun x : 𝔸 => x.2 v) z.inv_mul end LanglandsTunnell.Converse.Ideles end end section open scoped WithZero noncomputable section open IsDedekindDomain IsDedekindDomain.HeightOneSpectrum NumberField NumberField.AdelicLevel open NumberField.AdelicVolume NumberField.TateGlobal open Filter Topology namespace LanglandsTunnell.Converse.Ideles variable {K : Type} [Field K] [NumberField K] local notation "𝔸" => AdeleRing (π“ž K) K def archProd (a : βˆ€ w : InfinitePlace K, (w.Completion)Λ£) (T : Finset (InfinitePlace K)) : 𝔸ˣ := ∏ w ∈ T, archUnitHom w (a w) end LanglandsTunnell.Converse.Ideles end end section open scoped WithZero noncomputable section open IsDedekindDomain IsDedekindDomain.HeightOneSpectrum NumberField NumberField.AdelicLevel open NumberField.AdelicVolume NumberField.TateGlobal open Filter Topology namespace LanglandsTunnell.Converse.Ideles variable {K : Type} [Field K] [NumberField K] local notation "𝔸" => AdeleRing (π“ž K) K def unitAt (v : HeightOneSpectrum (π“ž K)) (z : 𝔸ˣ) : (v.adicCompletion K)Λ£ where val := (z : 𝔸).2 v inv := ((z⁻¹ : 𝔸ˣ) : 𝔸).2 v val_inv := val_mul_inv_snd_apply z v inv_val := val_inv_mul_snd_apply z v end LanglandsTunnell.Converse.Ideles end end section open IsDedekindDomain IsDedekindDomain.HeightOneSpectrum NumberField NumberField.AdelicLevel AutomorphicForm open LanglandsTunnell.Converse LanglandsTunnell.Converse.Ideles NumberField.AdelicVolume NumberField.TateGlobal open NumberField.InfinitePlace NumberField.InfinitePlace.Completion open scoped Classical namespace LanglandsTunnell.Converse.Ideles section ScalingLine variable {K : Type} [Field K] noncomputable def expAt (w : InfinitePlace K) (s : ℝ) : w.Completion := if hw : w.IsReal then (ringEquivRealOfIsReal hw).symm (Real.exp s) else (ringEquivComplexOfIsComplex (not_isReal_iff_isComplex.mp hw)).symm (Complex.exp s) end ScalingLine end LanglandsTunnell.Converse.Ideles end section open IsDedekindDomain IsDedekindDomain.HeightOneSpectrum NumberField NumberField.AdelicLevel AutomorphicForm open LanglandsTunnell.Converse LanglandsTunnell.Converse.Ideles NumberField.AdelicVolume NumberField.TateGlobal open NumberField.InfinitePlace NumberField.InfinitePlace.Completion open scoped Classical namespace LanglandsTunnell.Converse.Ideles section ScalingLine variable {K : Type} [Field K] theorem norm_expAt (w : InfinitePlace K) (s : ℝ) : β€–expAt w sβ€– = Real.exp s := by unfold expAt split_ifs with hw Β· have h := (isometry_extensionEmbeddingOfIsReal hw).norm_map_of_map_zero (map_zero _) ((ringEquivRealOfIsReal hw).symm (Real.exp s)) rw [← h] change β€–ringEquivRealOfIsReal hw ((ringEquivRealOfIsReal hw).symm (Real.exp s))β€– = _ rw [RingEquiv.apply_symm_apply, Real.norm_eq_abs, abs_of_pos (Real.exp_pos s)] Β· set hc := not_isReal_iff_isComplex.mp hw have h := (isometry_extensionEmbedding w).norm_map_of_map_zero (map_zero _) ((ringEquivComplexOfIsComplex hc).symm (Complex.exp s)) rw [← h] change β€–ringEquivComplexOfIsComplex hc ((ringEquivComplexOfIsComplex hc).symm (Complex.exp s))β€– = _ rw [RingEquiv.apply_symm_apply, Complex.norm_exp_ofReal] end ScalingLine end LanglandsTunnell.Converse.Ideles end section open IsDedekindDomain IsDedekindDomain.HeightOneSpectrum NumberField NumberField.AdelicLevel AutomorphicForm open LanglandsTunnell.Converse LanglandsTunnell.Converse.Ideles NumberField.AdelicVolume NumberField.TateGlobal open NumberField.InfinitePlace NumberField.InfinitePlace.Completion open scoped Classical namespace LanglandsTunnell.Converse.Ideles section ScalingLine variable {K : Type} [Field K] theorem expAt_ne_zero (w : InfinitePlace K) (s : ℝ) : expAt w s β‰  0 := by intro h have := norm_expAt w s rw [h, norm_zero] at this exact (Real.exp_pos s).ne this end ScalingLine end LanglandsTunnell.Converse.Ideles end section open IsDedekindDomain IsDedekindDomain.HeightOneSpectrum NumberField NumberField.AdelicLevel AutomorphicForm open LanglandsTunnell.Converse LanglandsTunnell.Converse.Ideles NumberField.AdelicVolume NumberField.TateGlobal open NumberField.InfinitePlace NumberField.InfinitePlace.Completion open scoped Classical namespace LanglandsTunnell.Converse.Ideles section ScalingLine variable {K : Type} [Field K] noncomputable def expUnitAt (w : InfinitePlace K) (s : ℝ) : (w.Completion)Λ£ := Units.mk0 _ (expAt_ne_zero w s) end ScalingLine end LanglandsTunnell.Converse.Ideles end section open IsDedekindDomain IsDedekindDomain.HeightOneSpectrum NumberField NumberField.AdelicLevel AutomorphicForm open LanglandsTunnell.Converse LanglandsTunnell.Converse.Ideles NumberField.AdelicVolume NumberField.TateGlobal open NumberField.InfinitePlace NumberField.InfinitePlace.Completion open scoped Classical namespace LanglandsTunnell.Converse.Ideles section ScalingLine variable {K : Type} [Field K] variable [NumberField K] variable (K) in noncomputable def archScale (t : ℝ) : (AdeleRing (π“ž K) K)Λ£ := archProd (fun w => expUnitAt w (t / Module.finrank β„š K)) Finset.univ end ScalingLine end LanglandsTunnell.Converse.Ideles end namespace LanglandsTunnell.Converse.CuspSynthesis open AutomorphicForm.SmoothCusp variable {K : Type} [Field K] [NumberField K] section section TorusModel open LanglandsTunnell.Converse.Ideles theorem unitAt_mul (v : HeightOneSpectrum (π“ž K)) (a b : (AdeleRing (π“ž K) K)Λ£) : unitAt v (a * b) = unitAt v a * unitAt v b := Units.ext rfl end TorusModel end end LanglandsTunnell.Converse.CuspSynthesis namespace LanglandsTunnell.Converse.CuspSynthesis open AutomorphicForm.SmoothCusp variable {K : Type} [Field K] [NumberField K] section section TorusModel open LanglandsTunnell.Converse.Ideles theorem unitAt_one (v : HeightOneSpectrum (π“ž K)) : unitAt v (1 : (AdeleRing (π“ž K) K)Λ£) = 1 := Units.ext rfl end TorusModel end end LanglandsTunnell.Converse.CuspSynthesis namespace LanglandsTunnell.Converse.CuspSynthesis open AutomorphicForm.SmoothCusp variable {K : Type} [Field K] [NumberField K] section section TorusModel open LanglandsTunnell.Converse.Ideles theorem unitAt_inv (v : HeightOneSpectrum (π“ž K)) (a : (AdeleRing (π“ž K) K)Λ£) : unitAt v a⁻¹ = (unitAt v a)⁻¹ := Units.ext rfl end TorusModel end end LanglandsTunnell.Converse.CuspSynthesis namespace LanglandsTunnell.Converse.CuspSynthesis open AutomorphicForm.SmoothCusp variable {K : Type} [Field K] [NumberField K] section section TorusModel open LanglandsTunnell.Converse.Ideles def unitIdelesAt (S : Finset (HeightOneSpectrum (π“ž K))) : Subgroup (AdeleRing (π“ž K) K)Λ£ where carrier := {a | βˆ€ v : β†₯S, Valued.v (unitAt v.1 a : v.1.adicCompletion K) = 1} mul_mem' {a b} ha hb v := by show Valued.v (unitAt v.1 (a * b) : v.1.adicCompletion K) = 1 rw [unitAt_mul, Units.val_mul, map_mul, ha v, hb v, one_mul] one_mem' v := by show Valued.v (unitAt v.1 1 : v.1.adicCompletion K) = 1 rw [unitAt_one, Units.val_one, map_one] inv_mem' {a} ha v := by show Valued.v (unitAt v.1 a⁻¹ : v.1.adicCompletion K) = 1 rw [unitAt_inv, Units.val_inv_eq_inv_val, map_invβ‚€, ha v, inv_one] end TorusModel end end LanglandsTunnell.Converse.CuspSynthesis namespace LanglandsTunnell.Converse.CuspSynthesis open AutomorphicForm.SmoothCusp variable {K : Type} [Field K] [NumberField K] section section TorusModel open LanglandsTunnell.Converse.Ideles variable (K) in abbrev NormOneQuot : Type := β†₯(normOneIdeles K) β§Έ (M4aHerbrand.principalIdeles (π“ž K) K).subgroupOf (normOneIdeles K) end TorusModel end end LanglandsTunnell.Converse.CuspSynthesis namespace LanglandsTunnell.Converse.CuspSynthesis open AutomorphicForm.SmoothCusp variable {K : Type} [Field K] [NumberField K] section section TorusClass open LanglandsTunnell.Converse.Ideles NumberField.TateGlobal noncomputable def torusClass (S : Finset (HeightOneSpectrum (π“ž K))) : Subgroup (NormOneQuot K) := ((unitIdelesAt S).subgroupOf (normOneIdeles K)).map (QuotientGroup.mk' _) end TorusClass end end LanglandsTunnell.Converse.CuspSynthesis namespace LanglandsTunnell.Converse.CuspSynthesis open AutomorphicForm.SmoothCusp variable {K : Type} [Field K] [NumberField K] section section TorusClass open LanglandsTunnell.Converse.Ideles NumberField.TateGlobal theorem mem_torusClass_iff {S : Finset (HeightOneSpectrum (π“ž K))} {q : NormOneQuot K} : q ∈ torusClass S ↔ βˆƒ x : β†₯(normOneIdeles K), (x : (AdeleRing (π“ž K) K)Λ£) ∈ unitIdelesAt S ∧ QuotientGroup.mk x = q := by simp only [torusClass, Subgroup.mem_map, Subgroup.mem_subgroupOf, QuotientGroup.mk'_apply] end TorusClass end end LanglandsTunnell.Converse.CuspSynthesis namespace LanglandsTunnell.Converse.CuspSynthesis open AutomorphicForm.SmoothCusp variable {K : Type} [Field K] [NumberField K] section section TorusClass open LanglandsTunnell.Converse.Ideles NumberField.TateGlobal noncomputable def torusLift {S : Finset (HeightOneSpectrum (π“ž K))} (q : β†₯(torusClass (K := K) S)) : β†₯(normOneIdeles K) := Classical.choose (mem_torusClass_iff.1 q.2) end TorusClass end end LanglandsTunnell.Converse.CuspSynthesis noncomputable section namespace LanglandsTunnell.Converse.CuspSynthesis open MeasureTheory Topology section TorusMeasure variable {K : Type} [Field K] [NumberField K] @[reducible] def torusBorel (S : Finset (HeightOneSpectrum (π“ž K))) : MeasurableSpace β†₯(torusClass (K := K) S) := borel _ end TorusMeasure end LanglandsTunnell.Converse.CuspSynthesis end noncomputable section namespace LanglandsTunnell.Converse.CuspSynthesis open MeasureTheory Topology section TorusMeasure variable {K : Type} [Field K] [NumberField K] theorem borelSpace_torusBorel (S : Finset (HeightOneSpectrum (π“ž K))) : @BorelSpace β†₯(torusClass (K := K) S) _ (torusBorel S) := @BorelSpace.mk _ _ (torusBorel S) rfl end TorusMeasure end LanglandsTunnell.Converse.CuspSynthesis end noncomputable section namespace LanglandsTunnell.Converse.CuspSynthesis open MeasureTheory Topology section TorusMeasure variable {K : Type} [Field K] [NumberField K] def torusPoint {S : Finset (HeightOneSpectrum (π“ž K))} (g : AdelicGL2 (π“ž K) K) (p : β†₯(torusClass (K := K) S) Γ— ℝ) : AdelicGL2 (π“ž K) K := diagOne (((torusLift p.1 : β†₯(normOneIdeles K)) : (AdeleRing (π“ž K) K)Λ£) * Ideles.archScale K p.2) * g end TorusMeasure end LanglandsTunnell.Converse.CuspSynthesis end namespace LanglandsTunnell.Converse.CuspSynthesis noncomputable section section DualSeries variable {K : Type} [Field K] [NumberField K] variable {S : Finset (HeightOneSpectrum (π“ž K))} {Pi : HeckeEigensystem K β„‚} variable {epsS : βˆ€ v : HeightOneSpectrum (π“ž K), (v.adicCompletion K)Λ£ β†’* β„‚Λ£} {Ο‰ : (AdeleRing (π“ž K) K)Λ£ β†’* β„‚Λ£} open scoped Classical open scoped WithZero open LanglandsTunnell.TateLocal NumberField.StandardAddChar NumberField.InfinitePlace UnramifiedWhittaker variable (K) in def weylGL2 : GL (Fin 2) K where val := !![0, 1; -1, 0] inv := !![0, -1; 1, 0] val_inv := by ext i j fin_cases i <;> fin_cases j <;> simp [Matrix.mul_apply, Fin.sum_univ_two] inv_val := by ext i j fin_cases i <;> fin_cases j <;> simp [Matrix.mul_apply, Fin.sum_univ_two] omit [NumberField K] in theorem weylGL2_coe : ((weylGL2 K : GL (Fin 2) K) : Matrix (Fin 2) (Fin 2) K) = !![0, 1; -1, 0] := rfl def weylA (d : JLData K S epsS Ο‰) : GL (Fin 2) K := weylGL2 K * diagOne (-d.A) theorem weylA_coe (d : JLData K S epsS Ο‰) : ((weylA d : GL (Fin 2) K) : Matrix (Fin 2) (Fin 2) K) = !![0, 1; (d.A : K), 0] := by refine Matrix.ext fun i j => ?_ simp only [weylA, Units.val_mul, Matrix.mul_apply, Fin.sum_univ_two, diagOne_coe_apply, weylGL2_coe] fin_cases i <;> fin_cases j <;> simp def dualSeriesTerm (d : JLData K S epsS Ο‰) (archR : βˆ€ w : InfinitePlace K, w.IsReal β†’ RealArchParam) (archC : βˆ€ w : InfinitePlace K, w.IsComplex β†’ ComplexArchParam) (dR : βˆ€ (w : InfinitePlace K) (hw : w.IsReal), ArchDatumR (archR w hw)) (dC : βˆ€ (w : InfinitePlace K) (hw : w.IsComplex), ArchDatumC (archC w hw)) (dF : FinWhittakerDatum K S Pi) (g : AdelicGL2 (π“ž K) K) (Ξ± : KΛ£) : β„‚ := d.ad Ξ± * d.epsChar g * archW' archR archC dR dC (globalPoints (π“ž K) K (diagOne Ξ± * weylA d) * g) * dF.Wf (globalPoints (π“ž K) K (diagOne Ξ± * weylA d) * g) def dualSeries' (d : JLData K S epsS Ο‰) (archR : βˆ€ w : InfinitePlace K, w.IsReal β†’ RealArchParam) (archC : βˆ€ w : InfinitePlace K, w.IsComplex β†’ ComplexArchParam) (dR : βˆ€ (w : InfinitePlace K) (hw : w.IsReal), ArchDatumR (archR w hw)) (dC : βˆ€ (w : InfinitePlace K) (hw : w.IsComplex), ArchDatumC (archC w hw)) (dF : FinWhittakerDatum K S Pi) (g : AdelicGL2 (π“ž K) K) : β„‚ := βˆ‘' Ξ± : KΛ£, dualSeriesTerm d archR archC dR dC dF g Ξ± end DualSeries end end LanglandsTunnell.Converse.CuspSynthesis