Definitions/Def_AutomorphicForm_LocalLFactor.lean
Local -factor polynomials of Hecke eigensystems
Over a commutative ring R, heckeLFactorPoly s e is the quadratic 1 - sX + eX^2 in Polynomial R; its coefficients in degrees 0,1,2 are 1, -s and e, whence the map (s,e) \mapsto \mathtt{heckeLFactorPoly}\,s\,e is injective (heckeLFactorPoly_inj, and the iff-form heckeLFactorPoly_eq_iff), it commutes with the coefficientwise image along a ring homomorphism \varphi : R \to S, and it splits as 1 - (\alpha+\beta)X + \alpha\beta X^2 = (1-\alpha X)(1-\beta X). For a HeckeEigensystem \pi over a number field F with values in R — a structure carrying a nonzero level ideal of \mathcal{O}_F and two functions a, b on the height-one spectrum of \mathcal{O}_F — HeckeEigensystem.localLFactor π v is 1 - \pi.a(v)X + \pi.b(v)X^2, and equality of these polynomials at v is equivalent to equality of both \pi.a(v) and \pi.b(v).
This dictionary is then used to restate the transfer predicates of the eigensystem module: for \mathcal{O}_E \to \mathcal{O}_L an integral algebra of rings of integers of number fields, IsBaseChangeAt π Φ 𝔓 (the pair of equations \Phi.a(\mathfrak{P}) = \mathtt{satakePow}\,f\,(\pi.a(\mathfrak{p}))\,(\pi.b(\mathfrak{p})) and \Phi.b(\mathfrak{P}) = \pi.b(\mathfrak{p})^f, with \mathfrak{p} = \mathfrak{P} \cap \mathcal{O}_E and f its inertiaDeg' at \mathfrak{P}) becomes the single polynomial identity \Phi's local factor at \mathfrak{P} equals \mathtt{heckeLFactorPoly} of those two quantities; IsBaseChangeOf and AgreesAwayFromFinite become the corresponding identities outside a finite set of primes. Since satakePow f is the Newton power sum, \mathtt{heckeLFactorPoly}(\mathtt{satakePow}\,f\,(\alpha+\beta)\,(\alpha\beta))((\alpha\beta)^f) = (1-\alpha^f X)(1-\beta^f X), with the cases f = 1, 2 recorded separately (and \mathtt{satakePow}\,2\,s\,e = s^2 - 2e).
Finally HasBaseChangeLevelLaw 𝔡 π Φ is the divisibility \Phi.\mathrm{level} \mid \mathfrak{d} \cdot (\pi.\mathrm{level} \cdot \mathcal{O}_L), a level bound with an adjustable factor \mathfrak{d}; it holds vacuously for \mathfrak{d} = \Phi.\mathrm{level}, and the conjunction with IsBaseChangeOf is restated in local L-factor form.
Relation to Mathlib
Mathlib has no notion of automorphic form, Hecke eigensystem or local L-factor; these are the project's own definitions, built from Mathlib's Polynomial, Ideal, HeightOneSpectrum and inertiaDeg'.
Where it is used
These definitions package the Satake data of a Hecke eigensystem into one local Euler factor per prime, so that the base-change and descent conditions used in the cyclic-base-change input to modularity can be stated and compared as polynomial identities away from a finite set of primes, together with a divisibility bound relating the levels of an eigensystem and of its base change.
References
- R. P. Langlands, Base Change for GL(2), Annals of Mathematics Studies 96, Princeton University Press, 1980
- J.-P. Serre, Facteurs locaux des fonctions zêta des variétés algébriques (définitions et conjectures), Séminaire Delange–Pisot–Poitou, 1969/70, exposé 19
References are suggested automatically and have not been individually verified.
English text generated automatically from the Lean source; the Lean statement is authoritative.
- 161 lines
- 22 declarations
- used in the statements of 0 theorems and imported by 0 proofs
- imports 1 definition modules, and the statements of 1 theorems
Source file: Definitions/Def_AutomorphicForm_LocalLFactor.lean
Imports
Theorems imported by this definition module
Imported by
Declarations
- theorem
AutomorphicForm.satakePow_two - def
AutomorphicForm.heckeLFactorPoly - theorem
AutomorphicForm.heckeLFactorPoly_def - theorem
AutomorphicForm.coeff_zero_heckeLFactorPoly - theorem
AutomorphicForm.coeff_one_heckeLFactorPoly - theorem
AutomorphicForm.coeff_two_heckeLFactorPoly - theorem
AutomorphicForm.heckeLFactorPoly_inj - theorem
AutomorphicForm.heckeLFactorPoly_eq_iff - theorem
AutomorphicForm.heckeLFactorPoly_split - theorem
AutomorphicForm.map_heckeLFactorPoly - def
AutomorphicForm.HeckeEigensystem.localLFactor - theorem
AutomorphicForm.HeckeEigensystem.localLFactor_def - theorem
AutomorphicForm.HeckeEigensystem.satake_eq_of_localLFactor_eq - theorem
AutomorphicForm.isBaseChangeAt_iff_localLFactor - theorem
AutomorphicForm.isBaseChangeOf_iff_localLFactor - theorem
AutomorphicForm.agreesAwayFromFinite_iff_localLFactor - theorem
AutomorphicForm.heckeLFactorPoly_satakePow_split - theorem
AutomorphicForm.heckeLFactorPoly_satakePow_one - theorem
AutomorphicForm.heckeLFactorPoly_satakePow_two - def
AutomorphicForm.HasBaseChangeLevelLaw - theorem
AutomorphicForm.hasBaseChangeLevelLaw_sat - theorem
AutomorphicForm.isBaseChangeOf_and_hasBaseChangeLevelLaw_iff
Source
import Mathlib import Definitions.Def_AutomorphicForm_HeckeEigensystem import Theorems.Thm_AutomorphicForm_satakePow_add_pow set_option autoImplicit false open IsDedekindDomain NumberField Polynomial noncomputable section namespace AutomorphicForm @[simp] theorem satakePow_two {R : Type*} [CommRing R] (s e : R) : satakePow 2 s e = s ^ 2 - 2 * e := by show s * s - e * 2 = s ^ 2 - 2 * e; ring variable {R : Type*} [CommRing R] def heckeLFactorPoly (s e : R) : Polynomial R := 1 - C s * X + C e * X ^ 2 @[simp] theorem heckeLFactorPoly_def (s e : R) : heckeLFactorPoly s e = 1 - C s * X + C e * X ^ 2 := rfl @[simp] theorem coeff_zero_heckeLFactorPoly (s e : R) : (heckeLFactorPoly s e).coeff 0 = 1 := by simp [heckeLFactorPoly, coeff_one, coeff_X_pow] @[simp] theorem coeff_one_heckeLFactorPoly (s e : R) : (heckeLFactorPoly s e).coeff 1 = -s := by simp [heckeLFactorPoly, coeff_one, coeff_C_mul, coeff_X_pow] @[simp] theorem coeff_two_heckeLFactorPoly (s e : R) : (heckeLFactorPoly s e).coeff 2 = e := by simp [heckeLFactorPoly, coeff_one, coeff_C_mul, coeff_X_pow] theorem heckeLFactorPoly_inj {s e s' e' : R} (h : heckeLFactorPoly s e = heckeLFactorPoly s' e') : s = s' ∧ e = e' := by refine ⟨?_, ?_⟩ · have h1 := congrArg (fun p => p.coeff 1) h simp only [coeff_one_heckeLFactorPoly] at h1 exact neg_injective h1 · have h2 := congrArg (fun p => p.coeff 2) h simpa only [coeff_two_heckeLFactorPoly] using h2 theorem heckeLFactorPoly_eq_iff {s e s' e' : R} : heckeLFactorPoly s e = heckeLFactorPoly s' e' ↔ s = s' ∧ e = e' := ⟨heckeLFactorPoly_inj, fun ⟨hs, he⟩ => by rw [hs, he]⟩ theorem heckeLFactorPoly_split (α β : R) : heckeLFactorPoly (α + β) (α * β) = (1 - C α * X) * (1 - C β * X) := by simp only [heckeLFactorPoly, map_add, map_mul] ring theorem map_heckeLFactorPoly {S : Type*} [CommRing S] (φ : R →+* S) (s e : R) : (heckeLFactorPoly s e).map φ = heckeLFactorPoly (φ s) (φ e) := by simp [heckeLFactorPoly, Polynomial.map_add, Polynomial.map_sub, Polynomial.map_mul, Polynomial.map_one, Polynomial.map_pow, map_C, map_X] def HeckeEigensystem.localLFactor {F : Type*} [Field F] [NumberField F] (π : HeckeEigensystem F R) (v : HeightOneSpectrum (𝓞 F)) : Polynomial R := heckeLFactorPoly (π.a v) (π.b v) @[simp] theorem HeckeEigensystem.localLFactor_def {F : Type*} [Field F] [NumberField F] (π : HeckeEigensystem F R) (v : HeightOneSpectrum (𝓞 F)) : π.localLFactor v = heckeLFactorPoly (π.a v) (π.b v) := rfl theorem HeckeEigensystem.satake_eq_of_localLFactor_eq {F : Type*} [Field F] [NumberField F] {π π' : HeckeEigensystem F R} {v : HeightOneSpectrum (𝓞 F)} (h : π.localLFactor v = π'.localLFactor v) : π.a v = π'.a v ∧ π.b v = π'.b v := heckeLFactorPoly_inj h section Factoring variable {E L : Type*} [Field E] [NumberField E] [Field L] [NumberField L] [Algebra (𝓞 E) (𝓞 L)] [Algebra.IsIntegral (𝓞 E) (𝓞 L)] theorem isBaseChangeAt_iff_localLFactor (π : HeckeEigensystem E R) (Φ : HeckeEigensystem L R) (𝔓 : HeightOneSpectrum (𝓞 L)) : IsBaseChangeAt π Φ 𝔓 ↔ Φ.localLFactor 𝔓 = heckeLFactorPoly (satakePow ((𝔓.under (𝓞 E)).asIdeal.inertiaDeg' 𝔓.asIdeal) (π.a (𝔓.under (𝓞 E))) (π.b (𝔓.under (𝓞 E)))) ((π.b (𝔓.under (𝓞 E))) ^ ((𝔓.under (𝓞 E)).asIdeal.inertiaDeg' 𝔓.asIdeal)) := by unfold IsBaseChangeAt HeckeEigensystem.localLFactor exact heckeLFactorPoly_eq_iff.symm theorem isBaseChangeOf_iff_localLFactor (π : HeckeEigensystem E R) (Φ : HeckeEigensystem L R) : IsBaseChangeOf π Φ ↔ ∃ S : Finset (HeightOneSpectrum (𝓞 L)), ∀ 𝔓 ∉ S, Φ.localLFactor 𝔓 = heckeLFactorPoly (satakePow ((𝔓.under (𝓞 E)).asIdeal.inertiaDeg' 𝔓.asIdeal) (π.a (𝔓.under (𝓞 E))) (π.b (𝔓.under (𝓞 E)))) ((π.b (𝔓.under (𝓞 E))) ^ ((𝔓.under (𝓞 E)).asIdeal.inertiaDeg' 𝔓.asIdeal)) := by unfold IsBaseChangeOf refine exists_congr fun S => forall_congr' fun 𝔓 => forall_congr' fun _ => ?_ exact isBaseChangeAt_iff_localLFactor π Φ 𝔓 theorem agreesAwayFromFinite_iff_localLFactor {F : Type*} [Field F] [NumberField F] (π π' : HeckeEigensystem F R) : HeckeEigensystem.AgreesAwayFromFinite π π' ↔ ∃ S : Finset (HeightOneSpectrum (𝓞 F)), ∀ v ∉ S, π.localLFactor v = π'.localLFactor v := by unfold HeckeEigensystem.AgreesAwayFromFinite refine exists_congr fun S => forall_congr' fun v => forall_congr' fun _ => ?_ exact heckeLFactorPoly_eq_iff.symm end Factoring theorem heckeLFactorPoly_satakePow_split (f : ℕ) (α β : R) : heckeLFactorPoly (satakePow f (α + β) (α * β)) ((α * β) ^ f) = (1 - C (α ^ f) * X) * (1 - C (β ^ f) * X) := by rw [satakePow_add_pow, mul_pow, heckeLFactorPoly_split] theorem heckeLFactorPoly_satakePow_one (s e : R) : heckeLFactorPoly (satakePow 1 s e) (e ^ 1) = heckeLFactorPoly s e := by rw [satakePow_one, pow_one] theorem heckeLFactorPoly_satakePow_two (s e : R) : heckeLFactorPoly (satakePow 2 s e) (e ^ 2) = 1 - C (s ^ 2 - 2 * e) * X + C (e ^ 2) * X ^ 2 := by rw [satakePow_two, heckeLFactorPoly] section ConductorCarrier variable {E L : Type*} [Field E] [NumberField E] [Field L] [NumberField L] [Algebra (𝓞 E) (𝓞 L)] [Algebra.IsIntegral (𝓞 E) (𝓞 L)] def HasBaseChangeLevelLaw (𝔡 : Ideal (𝓞 L)) (π : HeckeEigensystem E R) (Φ : HeckeEigensystem L R) : Prop := Φ.level ∣ 𝔡 * Ideal.map (algebraMap (𝓞 E) (𝓞 L)) π.level omit [Algebra.IsIntegral (𝓞 E) (𝓞 L)] in theorem hasBaseChangeLevelLaw_sat (π : HeckeEigensystem E R) (Φ : HeckeEigensystem L R) : HasBaseChangeLevelLaw Φ.level π Φ := dvd_mul_right Φ.level (Ideal.map (algebraMap (𝓞 E) (𝓞 L)) π.level) theorem isBaseChangeOf_and_hasBaseChangeLevelLaw_iff (𝔡 : Ideal (𝓞 L)) (π : HeckeEigensystem E R) (Φ : HeckeEigensystem L R) : (IsBaseChangeOf π Φ ∧ HasBaseChangeLevelLaw 𝔡 π Φ) ↔ ((∃ S : Finset (HeightOneSpectrum (𝓞 L)), ∀ 𝔓 ∉ S, Φ.localLFactor 𝔓 = heckeLFactorPoly (satakePow ((𝔓.under (𝓞 E)).asIdeal.inertiaDeg' 𝔓.asIdeal) (π.a (𝔓.under (𝓞 E))) (π.b (𝔓.under (𝓞 E)))) ((π.b (𝔓.under (𝓞 E))) ^ ((𝔓.under (𝓞 E)).asIdeal.inertiaDeg' 𝔓.asIdeal))) ∧ Φ.level ∣ 𝔡 * Ideal.map (algebraMap (𝓞 E) (𝓞 L)) π.level) := and_congr (isBaseChangeOf_iff_localLFactor π Φ) Iff.rfl end ConductorCarrier end AutomorphicForm end
Statements phrased using this module (0)
No statement module imports it directly (it is used through other definition modules or by proofs).