import Definitions.Def_LanglandsTunnell_ConverseData import Definitions.Def_LanglandsTunnell_RankinSelbergEuler import Definitions.Def_HeckeCharacter_FiniteOrder set_option autoImplicit false open IsDedekindDomain NumberField NumberField.InfinitePlace NumberField.TateGlobal open NumberField.StandardAddChar LanglandsTunnell.TateLocal LanglandsTunnell.RankinSelberg open LanglandsTunnell.Converse AutomorphicForm HeckeCharacter namespace LanglandsTunnell.CubicLambda open scoped Classical in noncomputable def eulerCoeff (F : Type) [Field F] [NumberField F] (Ξ· : (AdeleRing (π“ž F) F)Λ£ β†’* β„‚Λ£) (v : HeightOneSpectrum (π“ž F)) : β„‚ := if IsUnramifiedCharAt Ξ· v then ((Ξ· (uniformizerIdele F v) : β„‚Λ£) : β„‚) else 0 noncomputable def zetaEulerPoly (F : Type) [Field F] [NumberField F] [Algebra (π“ž β„š) (π“ž F)] [Algebra.IsIntegral (π“ž β„š) (π“ž F)] (p : HeightOneSpectrum (π“ž β„š)) : Polynomial β„‚ := inducedEulerPoly β„š (fun _ : HeightOneSpectrum (π“ž F) => (1 : β„‚)) p noncomputable def resolventSignBit (L : Type) [Field L] [NumberField L] : ZMod 2 := if nrComplexPlaces L = 0 then 0 else 1 inductive ResolventDatum (K : Type) [Field K] [NumberField K] [Algebra (π“ž β„š) (π“ž K)] [Algebra.IsIntegral (π“ž β„š) (π“ž K)] : Type 1 | s3 (L : Type) [Field L] [NumberField L] [Algebra (π“ž β„š) (π“ž L)] [Algebra.IsIntegral (π“ž β„š) (π“ž L)] (Ο‰ : (AdeleRing (π“ž β„š) β„š)Λ£ β†’* β„‚Λ£) (ΞΈ : (AdeleRing (π“ž L) L)Λ£ β†’* β„‚Λ£) (hL : Module.finrank β„š L = 2) (hΟ‰ : IsFiniteOrderHeckeChar β„š Ο‰) (hΞΈ : IsFiniteOrderHeckeChar L ΞΈ) (eulerΟ‰ : βˆ€ p : HeightOneSpectrum (π“ž β„š), zetaEulerPoly L p = (Polynomial.C 1 - Polynomial.X) * (Polynomial.C 1 - Polynomial.C (eulerCoeff β„š Ο‰ p) * Polynomial.X)) (eulerΞΈ : βˆ€ p : HeightOneSpectrum (π“ž β„š), zetaEulerPoly K p = (Polynomial.C 1 - Polynomial.X) * inducedEulerPoly β„š (eulerCoeff L ΞΈ) p) (archΟ‰ : βˆ€ w : InfinitePlace β„š, IsArchCompAt β„š Ο‰ w 0 ((resolventSignBit L).val : β„€)) (archΞΈR : βˆ€ u : InfinitePlace L, u.IsReal β†’ IsArchCompAt L ΞΈ u 0 (((0 : ZMod 2)).val : β„€)) (archΞΈC : βˆ€ u : InfinitePlace L, u.IsComplex β†’ IsArchCompAt L ΞΈ u 0 0) (sig : nrRealPlaces K = nrRealPlaces L + 1 ∧ nrComplexPlaces K = nrComplexPlaces L) : ResolventDatum K | cyclic (Ο‡ : (AdeleRing (π“ž β„š) β„š)Λ£ β†’* β„‚Λ£) (hΟ‡ : IsFiniteOrderHeckeChar β„š Ο‡) (eulerΟ‡ : βˆ€ p : HeightOneSpectrum (π“ž β„š), zetaEulerPoly K p = (Polynomial.C 1 - Polynomial.X) * (Polynomial.C 1 - Polynomial.C (eulerCoeff β„š Ο‡ p) * Polynomial.X) * (Polynomial.C 1 - Polynomial.C (eulerCoeff β„š (Ο‡ ^ 2) p) * Polynomial.X)) (archΟ‡ : βˆ€ w : InfinitePlace β„š, IsArchCompAt β„š Ο‡ w 0 (((0 : ZMod 2)).val : β„€)) (sig : nrComplexPlaces K = 0) : ResolventDatum K variable (K : Type) [Field K] [NumberField K] [Algebra (π“ž β„š) (π“ž K)] [Algebra.IsIntegral (π“ž β„š) (π“ž K)] noncomputable def lambdaAt : ResolventDatum K β†’ HeightOneSpectrum (π“ž β„š) β†’ β„‚ | @ResolventDatum.s3 _ _ _ _ _ L iF iN iA iI Ο‰ ΞΈ _ _ _ _ _ _ _ _ _, p => by letI := iF letI := iN letI := iA letI := iI exact stdRootNumberAt β„š p (localChar Ο‰ p) * ∏ᢠ u ∈ primeFibre β„š L p, stdRootNumberAt L u (localChar ΞΈ u) | .cyclic Ο‡ _ _ _ _, p => stdRootNumberAt β„š p (localChar Ο‡ p) * stdRootNumberAt β„š p (localChar (Ο‡ ^ 2) p) noncomputable def lambdaFin (Ξ›d : ResolventDatum K) (w : HeightOneSpectrum (π“ž K)) : β„‚ := if Ideal.ramificationIdx' (w.under (π“ž β„š)).asIdeal w.asIdeal = 1 ∧ (w.under (π“ž β„š)).asIdeal.inertiaDeg' w.asIdeal = 1 then 1 else lambdaAt K Ξ›d (w.under (π“ž β„š)) open scoped Classical in noncomputable def lambdaArch (w : InfinitePlace K) : β„‚ := if w.IsReal then 1 else signEpsilon 1 end LanglandsTunnell.CubicLambda