@@ -5,20 +5,37 @@ Authors: Chris Birkbeck
55-/
66import Mathlib.Analysis.Complex.SummableUniformlyOn
77import Mathlib.Analysis.SpecialFunctions.Trigonometric.Cotangent
8+ import Mathlib.NumberTheory.LSeries.Dirichlet
9+ import Mathlib.NumberTheory.LSeries.HurwitzZetaValues
10+ import Mathlib.NumberTheory.ModularForms.EisensteinSeries.Basic
11+ import Mathlib.NumberTheory.TsumDivsorsAntidiagonal
812
913/-!
10- # Einstein series q-expansions
14+ # Eisenstein series q-expansions
1115
12- We give some identities for q-expansions of Eisenstein series that will be used in describing their
13- q-expansions.
16+ We give the q-expansion of Eisenstein series of weight `k` and level 1. In particular, we prove
17+ `EisensteinSeries.q_expansion_bernoulli` which says that for even `k` with `3 ≤ k`
18+ Eisenstein series can we written as `1 - (2k / bernoulli k) ∑' n, σ_{k-1}(n) q^n` where
19+ `q = exp(2πiz)` and `σ_{k-1}(n)` is the sum of the `(k-1)`-th powers of the divisors of `n`.
20+ We need `k` to be even so that the Eisenstein series are non-zero and we require `k ≥ 3` so that
21+ the series converges absolutely.
22+
23+ The proof relies on the identity
24+ `∑' n : ℤ, 1 / (z + n) ^ (k + 1) = ((-2πi)^(k+1) / k!) ∑' n : ℕ, n^k q^n` which comes from
25+ differentiating the expansion of `π cot(πz)` in terms of exponentials. Since our Eisenstein series
26+ are defined as sums over coprime integer pairs, we also need to relate these to sums over all pairs
27+ of integers, which is done in `tsum_eisSummand_eq_riemannZeta_mul_eisensteinSeries`. This then
28+ gives the q-expansion with a Riemann zeta factor, which we simplify using the formula for
29+ `ζ(k)` in terms of Bernoulli numbers to get the final result.
1430
1531-/
1632
17- open Set Metric TopologicalSpace Function Filter Complex EisensteinSeries
33+ open Set Metric TopologicalSpace Function Filter Complex ArithmeticFunction
34+ ModularForm EisensteinSeries
1835
19- open _root_.UpperHalfPlane hiding I
36+ open scoped Topology Real Nat Complex Pointwise ArithmeticFunction.sigma
2037
21- open scoped Topology Real Nat Complex Pointwise
38+ open _root_.UpperHalfPlane hiding I
2239
2340local notation "ℍₒ" => upperHalfPlaneSet
2441
@@ -181,3 +198,96 @@ theorem EisensteinSeries.qExpansion_identity_pnat {k : ℕ} (hk : 1 ≤ k) (z :
181198 · simp [show k ≠ 0 by grind]
182199 · apply (summable_pow_mul_cexp k 1 z).congr
183200 simp
201+
202+ lemma summable_eisSummand {k : ℕ} (hk : 3 ≤ k) (z : ℍ) :
203+ Summable (eisSummand k · z) :=
204+ summable_norm_iff.mp <| summable_norm_eisSummand (Int.toNat_le.mp hk) z
205+
206+ lemma summable_prod_eisSummand {k : ℕ} (hk : 3 ≤ k) (z : ℍ) :
207+ Summable fun x : ℤ × ℤ ↦ eisSummand k ![x.1 , x.2 ] z := by
208+ refine (finTwoArrowEquiv ℤ).summable_iff.mp <| (summable_eisSummand hk z).congr (fun v ↦ ?_)
209+ simp [show ![v 0 , v 1 ] = v from List.ofFn_inj.mp rfl]
210+
211+ lemma tsum_eisSummand_eq_tsum_sigma_mul_cexp_pow {k : ℕ} (hk : 3 ≤ k) (hk2 : Even k) (z : ℍ) :
212+ ∑' v, eisSummand k v z = 2 * riemannZeta k + 2 * ((-2 * π * I) ^ k / (k - 1 )!) *
213+ ∑' (n : ℕ+), σ (k - 1 ) n * cexp (2 * π * I * z) ^ (n : ℕ) := by
214+ rw [← (finTwoArrowEquiv ℤ).symm.tsum_eq, finTwoArrowEquiv_symm_apply,
215+ Summable.tsum_prod (summable_prod_eisSummand hk z),
216+ tsum_int_eq_zero_add_two_mul_tsum_pnat (fun n ↦ ?h₁)
217+ (by simpa using (summable_prod_eisSummand hk z).prod)]
218+ case h₁ =>
219+ nth_rewrite 1 [← tsum_comp_neg]
220+ exact tsum_congr fun y ↦ by simp [eisSummand, ← neg_add _ (y : ℂ), -neg_add_rev, hk2.neg_pow]
221+ have H (b : ℕ+) := qExpansion_identity_pnat (k := k - 1 ) (by grind) ⟨b * z, by simpa using z.2 ⟩
222+ simp_rw [show k - 1 + 1 = k by grind, one_div] at H
223+ simp only [coe_mk_subtype, neg_mul] at H
224+ rw [nsmul_eq_mul, mul_assoc]
225+ congr
226+ · simp [eisSummand, two_mul_riemannZeta_eq_tsum_int_inv_pow_of_even (by grind) hk2]
227+ · suffices ∑' (m : ℕ+) (n : ℕ+), (n : ℕ) ^ (k - 1 ) * cexp (2 * π * I * (m * z)) ^ (n : ℕ) =
228+ ∑' (m : ℕ+) (n : ℕ+), (n : ℕ) ^ (k - 1 ) * cexp (2 * π * I * z) ^ (m * n : ℕ) by
229+ simp [eisSummand, H, tsum_mul_left,
230+ ← tsum_prod_pow_eq_tsum_sigma (k - 1 ) (norm_exp_two_pi_I_lt_one z), this]
231+ simp_rw [← Complex.exp_nat_mul]
232+ exact tsum_congr₂ (fun m n ↦ by push_cast; ring_nf)
233+
234+ lemma eisSummand_of_gammaSet_eq_divIntMap (k : ℤ) (z : ℍ) {n : ℕ} (v : gammaSet 1 n 0 ) :
235+ eisSummand k v z = ((n : ℂ) ^ k)⁻¹ * eisSummand k (divIntMap n v) z := by
236+ simp_rw [eisSummand]
237+ nth_rw 1 2 [gammaSet_eq_gcd_mul_divIntMap v.2 ]
238+ simp [← mul_inv, ← mul_zpow, mul_add, mul_assoc]
239+
240+ lemma tsum_eisSummand_eq_riemannZeta_mul_eisensteinSeries {k : ℕ} (hk : 3 ≤ k) (z : ℍ) :
241+ ∑' v : Fin 2 → ℤ, eisSummand k v z = riemannZeta k * eisensteinSeries (N := 1 ) 0 k z := by
242+ have hk1 : 1 < k := by grind
243+ have hk2 : 3 ≤ (k : ℤ) := mod_cast hk
244+ simp_rw [← gammaSetDivGcdSigmaEquiv.symm.tsum_eq, gammaSetDivGcdSigmaEquiv_symm_eq]
245+ rw [eisensteinSeries, Summable.tsum_sigma ?hsumm, zeta_nat_eq_tsum_of_gt_one hk1,
246+ tsum_mul_tsum_of_summable_norm (by simp [hk1]) ((summable_norm_eisSummand hk2 z).subtype _)]
247+ case hsumm =>
248+ exact gammaSetDivGcdSigmaEquiv.symm.summable_iff.mpr (summable_norm_eisSummand hk2 z).of_norm
249+ |>.congr <| by simp
250+ simp_rw [one_div]
251+ rw [Summable.tsum_prod' ?h₁ fun b ↦ ?h₂]
252+ case h₁ =>
253+ exact summable_mul_of_summable_norm (f := fun (n : ℕ) ↦ ((n : ℂ) ^ k)⁻¹)
254+ (g := fun (v : gammaSet 1 1 0 ) ↦ eisSummand k v z) (by simp [hk1])
255+ ((summable_norm_eisSummand hk2 z).subtype _)
256+ case h₂ =>
257+ simpa using ((summable_norm_eisSummand hk2 z).subtype _).of_norm.mul_left (a := ((b : ℂ) ^ k)⁻¹)
258+ refine tsum_congr fun b ↦ ?_
259+ rcases eq_or_ne b 0 with rfl | hb
260+ · simp [show ((0 : ℂ) ^ k)⁻¹ = 0 by aesop, eisSummand_of_gammaSet_eq_divIntMap]
261+ · have : NeZero b := ⟨hb⟩
262+ simpa [eisSummand_of_gammaSet_eq_divIntMap k z, tsum_mul_left, hb]
263+ using (gammaSetDivGcdEquiv b).tsum_eq (eisSummand k · z)
264+
265+ /-- The q-Expansion of normalised Eisenstein series of level one with `riemannZeta` term. -/
266+ lemma EisensteinSeries.q_expansion_riemannZeta {k : ℕ} (hk : 3 ≤ k) (hk2 : Even k) (z : ℍ) :
267+ E hk z = 1 + (riemannZeta k)⁻¹ * (-2 * π * I) ^ k / (k - 1 )! *
268+ ∑' n : ℕ+, σ (k - 1 ) n * cexp (2 * π * I * z) ^ (n : ℤ) := by
269+ have : eisensteinSeries_MF (Int.toNat_le.mp hk) 0 z = eisensteinSeries_SIF (N := 1 ) 0 k z := rfl
270+ rw [E, ModularForm.IsGLPos.smul_apply, this, eisensteinSeries_SIF_apply 0 k z, eisensteinSeries]
271+ have HE1 := tsum_eisSummand_eq_tsum_sigma_mul_cexp_pow hk hk2 z
272+ have HE2 := tsum_eisSummand_eq_riemannZeta_mul_eisensteinSeries hk z
273+ have z2 : riemannZeta k ≠ 0 := riemannZeta_ne_zero_of_one_lt_re <| by norm_cast; grind
274+ simp [eisSummand, eisensteinSeries, ← inv_mul_eq_iff_eq_mul₀ z2] at HE1 HE2 ⊢
275+ grind
276+
277+ private lemma eisensteinSeries_coeff_identity {k : ℕ} (hk2 : Even k) (hkn0 : k ≠ 0 ) :
278+ (riemannZeta k)⁻¹ * (-2 * π * I) ^ k / (k - 1 )! = -(2 * k / bernoulli k) := by
279+ have h2 : k = 2 * (k / 2 - 1 + 1 ) := by grind
280+ set m := k / 2 - 1
281+ rw [h2, Nat.cast_mul 2 (m + 1 ), Nat.cast_two, riemannZeta_two_mul_nat (show m + 1 ≠ 0 by grind),
282+ show (2 * (m + 1 ))! = 2 * (m + 1 ) * (2 * m + 1 )! by grind [Nat.factorial_succ],
283+ show 2 * (m + 1 ) - 1 = 2 * m + 1 by grind, mul_pow, mul_pow, pow_mul I, I_sq]
284+ norm_cast
285+ simp [field]
286+ grind
287+
288+ /-- The q-Expansion of normalised Eisenstein series of level one with `bernoulli` term. -/
289+ lemma EisensteinSeries.q_expansion_bernoulli {k : ℕ} (hk : 3 ≤ k) (hk2 : Even k) (z : ℍ) :
290+ E hk z = 1 - (2 * k / bernoulli k) *
291+ ∑' n : ℕ+, σ (k - 1 ) n * cexp (2 * π * I * z) ^ (n : ℤ) := by
292+ convert q_expansion_riemannZeta hk hk2 z using 1
293+ rw [eisensteinSeries_coeff_identity hk2 (by grind), neg_mul, ← sub_eq_add_neg]
0 commit comments