import Definitions.Def_NumberField_AdelicFourier import Definitions.Def_NumberField_AdelicVolume set_option autoImplicit false open MeasureTheory NumberField NumberField.AdelicFourier NumberField.AdelicLevel NumberField.AdelicVolume open AutomorphicForm IsDedekindDomain open scoped NNReal noncomputable section namespace NumberField.TateGlobal variable (F : Type) [Field F] [NumberField F] def normOneIdeles : Subgroup (AdeleRing (๐“ž F) F)หฃ := (distribHaarChar (AdeleRing (๐“ž F) F)).ker def ideleNorm (x : (AdeleRing (๐“ž F) F)หฃ) : โ„ := ((distribHaarChar (AdeleRing (๐“ž F) F) x : โ„โ‰ฅ0) : โ„) variable {F} theorem ideleNorm_pos (x : (AdeleRing (๐“ž F) F)หฃ) : 0 < ideleNorm F x := NNReal.coe_pos.mpr (distribHaarChar_pos) def zetaIntegral {mI : MeasurableSpace (AdeleRing (๐“ž F) F)หฃ} (ฮฝ : Measure (AdeleRing (๐“ž F) F)หฃ) (f : AdeleRing (๐“ž F) F โ†’ โ„‚) (ฯ‡ : (AdeleRing (๐“ž F) F)หฃ โ†’* โ„‚หฃ) (s : โ„‚) : โ„‚ := โˆซ x, f x * ((ฯ‡ x : โ„‚หฃ) : โ„‚) * ((ideleNorm F x : โ„) : โ„‚) ^ s โˆ‚ฮฝ def localChar (ฯ‡ : (AdeleRing (๐“ž F) F)หฃ โ†’* โ„‚หฃ) (v : HeightOneSpectrum (๐“ž F)) : (v.adicCompletion F)หฃ โ†’* โ„‚หฃ := ฯ‡.comp ((Units.map (finIncl (๐“ž F) F)).comp (localUnit (๐“ž F) F v)) def archUnitHom (w : InfinitePlace F) : (w.Completion)หฃ โ†’* (AdeleRing (๐“ž F) F)หฃ where toFun := archCentralUnit F w map_one' := by classical refine Units.ext (Prod.ext (funext fun v => ?_) rfl) show Function.update (1 : InfiniteAdeleRing F) w ((1 : InfiniteAdeleRing F) w) v = (1 : InfiniteAdeleRing F) v rw [Function.update_eq_self] map_mul' a b := by classical refine Units.ext (Prod.ext (funext fun v => ?_) (one_mul 1).symm) show Function.update (1 : InfiniteAdeleRing F) w (((a * b : (w.Completion)หฃ)) : w.Completion) v = Function.update (1 : InfiniteAdeleRing F) w (a : w.Completion) v * Function.update (1 : InfiniteAdeleRing F) w (b : w.Completion) v by_cases hv : v = w ยท subst hv simp [Function.update_self] ยท rw [Function.update_of_ne hv, Function.update_of_ne hv, Function.update_of_ne hv] exact (mul_one _).symm def archLocalChar (ฯ‡ : (AdeleRing (๐“ž F) F)หฃ โ†’* โ„‚หฃ) (w : InfinitePlace F) : (w.Completion)หฃ โ†’* โ„‚หฃ := ฯ‡.comp (archUnitHom w) def IsUnramifiedCharAt (ฯ‡ : (AdeleRing (๐“ž F) F)หฃ โ†’* โ„‚หฃ) (v : HeightOneSpectrum (๐“ž F)) : Prop := โˆ€ t : (v.adicCompletion F)หฃ, (t : v.adicCompletion F) โˆˆ v.adicCompletionIntegers F โ†’ ((tโปยน : (v.adicCompletion F)หฃ) : v.adicCompletion F) โˆˆ v.adicCompletionIntegers F โ†’ localChar ฯ‡ v t = 1 def integralOutside (S : Finset (HeightOneSpectrum (๐“ž F))) : Set (AdeleRing (๐“ž F) F) := {x | โˆ€ v โˆ‰ S, (x.2 : FiniteAdeleRing (๐“ž F) F) v โˆˆ v.adicCompletionIntegers F} def IsFactorizableStandardOutside (f : AdeleRing (๐“ž F) F โ†’ โ„‚) (S : Finset (HeightOneSpectrum (๐“ž F))) (g : (w : InfinitePlace F) โ†’ w.Completion โ†’ โ„‚) (h : (v : HeightOneSpectrum (๐“ž F)) โ†’ v.adicCompletion F โ†’ โ„‚) : Prop := โˆ€ x, f x = (integralOutside S).indicator (fun x => (โˆ w, g w (x.1 w)) * โˆ v โˆˆ S, h v ((x.2 : FiniteAdeleRing (๐“ž F) F) v)) x theorem ideleNorm_mul (x y : (AdeleRing (๐“ž F) F)หฃ) : ideleNorm F (x * y) = ideleNorm F x * ideleNorm F y := by simp [ideleNorm, map_mul] theorem mem_normOneIdeles_iff (x : (AdeleRing (๐“ž F) F)หฃ) : x โˆˆ normOneIdeles F โ†” ideleNorm F x = 1 := by simp [normOneIdeles, ideleNorm, MonoidHom.mem_ker] theorem localChar_apply (ฯ‡ : (AdeleRing (๐“ž F) F)หฃ โ†’* โ„‚หฃ) (v : HeightOneSpectrum (๐“ž F)) (t : (v.adicCompletion F)หฃ) : localChar ฯ‡ v t = ฯ‡ (Units.map (finIncl (๐“ž F) F) (localUnit (๐“ž F) F v t)) := rfl theorem archUnitHom_apply (w : InfinitePlace F) (a : (w.Completion)หฃ) : archUnitHom w a = archCentralUnit F w a := rfl theorem archLocalChar_apply (ฯ‡ : (AdeleRing (๐“ž F) F)หฃ โ†’* โ„‚หฃ) (w : InfinitePlace F) (a : (w.Completion)หฃ) : archLocalChar ฯ‡ w a = ฯ‡ (archCentralUnit F w a) := rfl end NumberField.TateGlobal end