|
| 1 | +/- |
| 2 | +Copyright (c) 2025 Chris Birkbeck. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Chris Birkbeck |
| 5 | +-/ |
| 6 | +import Mathlib.Analysis.Complex.SummableUniformlyOn |
| 7 | +import Mathlib.Analysis.SpecialFunctions.Trigonometric.Cotangent |
| 8 | + |
| 9 | +/-! |
| 10 | +# Einstein series q-expansions |
| 11 | +
|
| 12 | +We give some identities for q-expansions of Eisenstein series that will be used in describing their |
| 13 | +q-expansions. |
| 14 | +
|
| 15 | +-/ |
| 16 | + |
| 17 | +open Set Metric TopologicalSpace Function Filter Complex EisensteinSeries |
| 18 | + |
| 19 | +open _root_.UpperHalfPlane hiding I |
| 20 | + |
| 21 | +open scoped Topology Real Nat Complex Pointwise |
| 22 | + |
| 23 | +local notation "ℍₒ" => upperHalfPlaneSet |
| 24 | + |
| 25 | +private lemma iteratedDerivWithin_cexp_aux (k m : ℕ) (p : ℝ) {S : Set ℂ} (hs : IsOpen S) : |
| 26 | + EqOn (iteratedDerivWithin k (fun s : ℂ ↦ cexp (2 * π * I * m * s / p)) S) |
| 27 | + (fun s ↦ (2 * π * I * m / p) ^ k * cexp (2 * π * I * m * s / p)) S := by |
| 28 | + apply EqOn.trans (iteratedDerivWithin_of_isOpen hs) |
| 29 | + intro x hx |
| 30 | + have : (fun s ↦ cexp (2 * π * I * m * s / p)) = fun s ↦ cexp (((2 * π * I * m) / p) * s) := by |
| 31 | + ext z |
| 32 | + ring_nf |
| 33 | + simp only [this, iteratedDeriv_cexp_const_mul] |
| 34 | + ring_nf |
| 35 | + |
| 36 | +private lemma aux_IsBigO_mul (k l : ℕ) (p : ℝ) {f : ℕ → ℂ} |
| 37 | + (hf : f =O[atTop] fun n ↦ ((n ^ l) : ℝ)) : |
| 38 | + (fun n ↦ f n * (2 * π * I * n / p) ^ k) =O[atTop] fun n ↦ (↑(n ^ (l + k)) : ℝ) := by |
| 39 | + have h0 : (fun n : ℕ ↦ (2 * π * I * n / p) ^ k) =O[atTop] fun n ↦ ((n ^ k) : ℝ) := by |
| 40 | + have h1 : (fun n : ℕ ↦ (2 * π * I * n / p) ^ k) = |
| 41 | + fun n : ℕ ↦ ((2 * π * I / p) ^ k) * n ^ k := by |
| 42 | + ext z |
| 43 | + ring |
| 44 | + simpa [h1] using isBigO_ofReal_right.mp (Asymptotics.isBigO_const_mul_self |
| 45 | + ((2 * π * I / p) ^ k) (fun (n : ℕ) ↦ (↑(n ^ k) : ℝ)) atTop) |
| 46 | + simp only [Nat.cast_pow] |
| 47 | + convert hf.mul h0 |
| 48 | + ring |
| 49 | + |
| 50 | +open BoundedContinuousFunction in |
| 51 | +/-- The infinte sum of `k`-th iterated derivative of the complex exponential multiplied by a |
| 52 | +function that grows polynomially is absolutely and uniformly convergent. -/ |
| 53 | +theorem summableLocallyUniformlyOn_iteratedDerivWithin_smul_cexp (k l : ℕ) {f : ℕ → ℂ} {p : ℝ} |
| 54 | + (hp : 0 < p) (hf : f =O[atTop] (fun n ↦ ((n ^ l) : ℝ))) : |
| 55 | + SummableLocallyUniformlyOn (fun n ↦ (f n) • |
| 56 | + iteratedDerivWithin k (fun z ↦ cexp (2 * π * I * z / p) ^ n) ℍₒ) ℍₒ := by |
| 57 | + apply SummableLocallyUniformlyOn_of_locally_bounded isOpen_upperHalfPlaneSet |
| 58 | + intro K hK hKc |
| 59 | + have : CompactSpace K := isCompact_univ_iff.mp (isCompact_iff_isCompact_univ.mp hKc) |
| 60 | + let c : ContinuousMap K ℂ := ⟨fun r : K ↦ Complex.exp (2 * π * I * r / p), by fun_prop⟩ |
| 61 | + let r : ℝ := ‖mkOfCompact c‖ |
| 62 | + have hr : ‖r‖ < 1 := by |
| 63 | + simp only [norm_norm, r, norm_lt_iff_of_compact Real.zero_lt_one, mkOfCompact_apply, |
| 64 | + ContinuousMap.coe_mk, c] |
| 65 | + intro x |
| 66 | + have h1 : cexp (2 * π * I * (x / p)) = cexp (2 * π * I * x / p) := by |
| 67 | + ring_nf |
| 68 | + simpa using h1 ▸ norm_exp_two_pi_I_lt_one ⟨((x : ℂ) / p), by aesop⟩ |
| 69 | + refine ⟨_, by simpa using (summable_norm_mul_geometric_of_norm_lt_one' hr |
| 70 | + (Asymptotics.isBigO_norm_left.mpr (aux_IsBigO_mul k l p hf))), fun n z hz ↦ ?_⟩ |
| 71 | + have h0 := pow_le_pow_left₀ (norm_nonneg _) (norm_coe_le_norm (mkOfCompact c) ⟨z, hz⟩) n |
| 72 | + simp only [norm_mkOfCompact, mkOfCompact_apply, ContinuousMap.coe_mk, ← exp_nsmul', Pi.smul_apply, |
| 73 | + iteratedDerivWithin_cexp_aux k n p isOpen_upperHalfPlaneSet (hK hz), smul_eq_mul, |
| 74 | + norm_mul, norm_pow, Complex.norm_div, norm_ofNat, norm_real, Real.norm_eq_abs, norm_I, mul_one, |
| 75 | + norm_natCast, abs_norm, ge_iff_le, r, c] at * |
| 76 | + rw [← mul_assoc] |
| 77 | + gcongr |
| 78 | + convert h0 |
| 79 | + rw [← norm_pow, ← exp_nsmul'] |
| 80 | + |
| 81 | +/-- This is a version of `summableLocallyUniformlyOn_iteratedDerivWithin_smul_cexp` for level one |
| 82 | +and q-expansion coefficients all `1`. -/ |
| 83 | +theorem summableLocallyUniformlyOn_iteratedDerivWithin_cexp (k : ℕ) : |
| 84 | + SummableLocallyUniformlyOn |
| 85 | + (fun n ↦ iteratedDerivWithin k (fun z ↦ cexp (2 * π * I * z) ^ n) ℍₒ) ℍₒ := by |
| 86 | + have h0 : (fun n : ℕ ↦ (1 : ℂ)) =O[atTop] fun n ↦ ((n ^ 1) : ℝ) := by |
| 87 | + simp only [Asymptotics.isBigO_iff, norm_one, norm_pow, Real.norm_natCast, |
| 88 | + eventually_atTop, ge_iff_le] |
| 89 | + exact ⟨1, 1, fun b hb ↦ by norm_cast; simp [hb]⟩ |
| 90 | + simpa using summableLocallyUniformlyOn_iteratedDerivWithin_smul_cexp k 1 (p := 1) |
| 91 | + (by norm_num) h0 |
| 92 | + |
| 93 | +lemma differentiableAt_iteratedDerivWithin_cexp (n a : ℕ) {s : Set ℂ} (hs : IsOpen s) |
| 94 | + {r : ℂ} (hr : r ∈ s) : DifferentiableAt ℂ |
| 95 | + (iteratedDerivWithin a (fun z ↦ cexp (2 * π * I * z) ^ n) s) r := by |
| 96 | + apply DifferentiableOn.differentiableAt _ (hs.mem_nhds hr) |
| 97 | + suffices DifferentiableOn ℂ (iteratedDeriv a (fun z ↦ cexp (2 * π * I * z) ^ n)) s by |
| 98 | + apply this.congr (iteratedDerivWithin_of_isOpen hs) |
| 99 | + fun_prop |
| 100 | + |
| 101 | +lemma iteratedDerivWithin_tsum_cexp_eq (k : ℕ) (z : ℍ) : |
| 102 | + iteratedDerivWithin k (fun z ↦ ∑' n : ℕ, cexp (2 * π * I * z) ^ n) ℍₒ z = |
| 103 | + ∑' n : ℕ, iteratedDerivWithin k (fun s : ℂ ↦ cexp (2 * π * I * s) ^ n) ℍₒ z := by |
| 104 | + rw [iteratedDerivWithin_tsum k isOpen_upperHalfPlaneSet (by simpa using z.2)] |
| 105 | + · exact fun x hx ↦ summable_geometric_iff_norm_lt_one.mpr |
| 106 | + (UpperHalfPlane.norm_exp_two_pi_I_lt_one ⟨x, hx⟩) |
| 107 | + · exact fun n _ _ ↦ summableLocallyUniformlyOn_iteratedDerivWithin_cexp n |
| 108 | + · exact fun n l z hl hz ↦ differentiableAt_iteratedDerivWithin_cexp n l |
| 109 | + isOpen_upperHalfPlaneSet hz |
| 110 | + |
| 111 | +lemma contDiffOn_tsum_cexp (k : ℕ∞) : |
| 112 | + ContDiffOn ℂ k (fun z : ℂ ↦ ∑' n : ℕ, cexp (2 * π * I * z) ^ n) ℍₒ := |
| 113 | + contDiffOn_of_differentiableOn_deriv fun m _ z hz ↦ |
| 114 | + (((summableLocallyUniformlyOn_iteratedDerivWithin_cexp m).differentiableOn |
| 115 | + isOpen_upperHalfPlaneSet (fun n _ hz ↦ differentiableAt_iteratedDerivWithin_cexp n m |
| 116 | + isOpen_upperHalfPlaneSet hz)) z hz).congr (fun z hz ↦ iteratedDerivWithin_tsum_cexp_eq m ⟨z, hz⟩) |
| 117 | + (iteratedDerivWithin_tsum_cexp_eq m ⟨z, hz⟩) |
| 118 | + |
| 119 | +private lemma iteratedDerivWithin_tsum_exp_aux_eq {k : ℕ} (hk : 1 ≤ k) (z : ℍ) : |
| 120 | + iteratedDerivWithin k (fun z ↦ ((π * I) - |
| 121 | + (2 * π * I) * ∑' n : ℕ, cexp (2 * π * I * z) ^ n)) ℍₒ z = |
| 122 | + -(2 * π * I) ^ (k + 1) * ∑' n : ℕ, n ^ k * cexp (2 * π * I * z) ^ n := by |
| 123 | + have : iteratedDerivWithin k (fun z ↦ ((π * I) - |
| 124 | + (2 * π * I) * ∑' n : ℕ, cexp (2 * π * I * z) ^ n)) ℍₒ z = |
| 125 | + -(2 * π * I) * ∑' n : ℕ, iteratedDerivWithin k (fun s : ℂ ↦ cexp (2 * π * I * s) ^ n) ℍₒ z := by |
| 126 | + rw [iteratedDerivWithin_const_sub hk, iteratedDerivWithin_fun_neg, |
| 127 | + iteratedDerivWithin_const_mul (by simpa using z.2) (isOpen_upperHalfPlaneSet.uniqueDiffOn)] |
| 128 | + · simp only [iteratedDerivWithin_tsum_cexp_eq, neg_mul] |
| 129 | + · exact (contDiffOn_tsum_cexp k).contDiffWithinAt (by simpa using z.2) |
| 130 | + have h : -(2 * π * I * (2 * π * I) ^ k) * ∑' (n : ℕ), n ^ k * cexp (2 * π * I * z) ^ n = |
| 131 | + -(2 * π * I) * ∑' n : ℕ, (2 * π * I * n) ^ k * cexp (2 * π * I * z) ^ n := by |
| 132 | + simp_rw [← tsum_mul_left] |
| 133 | + congr |
| 134 | + ext y |
| 135 | + ring |
| 136 | + simp only [this, neg_mul, pow_succ', h, neg_inj, mul_eq_mul_left_iff, mul_eq_zero, |
| 137 | + OfNat.ofNat_ne_zero, ofReal_eq_zero, Real.pi_ne_zero, or_self, I_ne_zero, or_false] |
| 138 | + congr |
| 139 | + ext n |
| 140 | + have := exp_nsmul' (p := 1) (a := 2 * π * I) (n := n) |
| 141 | + simp_rw [div_one] at this |
| 142 | + simpa [this, UpperHalfPlane.coe] using |
| 143 | + iteratedDerivWithin_cexp_aux k n 1 isOpen_upperHalfPlaneSet z.2 |
| 144 | + |
| 145 | +/-- This is one key identity relating infinite series to q-expansions which shows that |
| 146 | +`∑' n, 1 / (z + n) ^ (k + 1) = ((-2 π I) ^ (k + 1) / k !) * ∑' n, n ^ k q ^n` where |
| 147 | +`q = cexp (2 π I z)`. -/ |
| 148 | +theorem EisensteinSeries.qExpansion_identity {k : ℕ} (hk : 1 ≤ k) (z : ℍ) : |
| 149 | + ∑' n : ℤ, 1 / ((z : ℂ) + n) ^ (k + 1) = ((-2 * π * I) ^ (k + 1) / k !) * |
| 150 | + ∑' n : ℕ, n ^ k * cexp (2 * π * I * z) ^ n := by |
| 151 | + have : (-1) ^ k * k ! * ∑' n : ℤ, 1 / ((z : ℂ) + n) ^ (k + 1) = |
| 152 | + -(2 * π * I) ^ (k + 1) * ∑' n : ℕ, n ^ k * cexp (2 * π * I * z) ^ n := by |
| 153 | + rw [← iteratedDerivWithin_tsum_exp_aux_eq hk z, |
| 154 | + ← iteratedDerivWithin_cot_pi_mul_eq_mul_tsum_div_pow hk (by simpa using z.2)] |
| 155 | + exact iteratedDerivWithin_congr (fun x hx ↦ by (simpa using pi_mul_cot_pi_q_exp ⟨x, hx⟩)) |
| 156 | + (by simpa using z.2) |
| 157 | + simp_rw [(eq_inv_mul_iff_mul_eq₀ (by simp [Nat.factorial_ne_zero])).mpr this, ← tsum_mul_left] |
| 158 | + congr |
| 159 | + ext n |
| 160 | + rw [show (-2 * π * I) ^ (k + 1) = (-1) ^ (k + 1) * (2 * π * I) ^ (k + 1) by rw [← neg_pow]; ring] |
| 161 | + field_simp |
| 162 | + ring_nf |
| 163 | + simp [Nat.mul_two] |
| 164 | + |
| 165 | +lemma summable_pow_mul_cexp (k : ℕ) (e : ℕ+) (z : ℍ) : |
| 166 | + Summable fun c : ℕ ↦ (c : ℂ) ^ k * cexp (2 * π * I * e * z) ^ c := by |
| 167 | + have he : 0 < (e * (z : ℂ)).im := by |
| 168 | + simpa using z.2 |
| 169 | + apply ((summableLocallyUniformlyOn_iteratedDerivWithin_smul_cexp 0 k (p := 1) |
| 170 | + (f := fun n ↦ (n ^ k : ℂ)) (by norm_num) |
| 171 | + (by simp [← Complex.isBigO_ofReal_right, Asymptotics.isBigO_refl])).summable he).congr |
| 172 | + grind [ofReal_one, iteratedDerivWithin_zero, Pi.smul_apply, smul_eq_mul] |
| 173 | + |
| 174 | +/-- This is a version of `EisensteinSeries.qExpansion_identity` for positive naturals, |
| 175 | +which shows that `∑' n, 1 / (z + n) ^ (k + 1) = ((-2 π I) ^ (k + 1) / k !) * ∑' n : ℕ+, n ^ k q ^n` |
| 176 | +where `q = cexp (2 π I z)`. -/ |
| 177 | +theorem EisensteinSeries.qExpansion_identity_pnat {k : ℕ} (hk : 1 ≤ k) (z : ℍ) : |
| 178 | + ∑' n : ℤ, 1 / ((z : ℂ) + n) ^ (k + 1) = ((-2 * π * I) ^ (k + 1) / k !) * |
| 179 | + ∑' n : ℕ+, n ^ k * cexp (2 * π * I * z) ^ (n : ℕ) := by |
| 180 | + rw [EisensteinSeries.qExpansion_identity hk z, ← tsum_zero_pnat_eq_tsum_nat] |
| 181 | + · simp [show k ≠ 0 by grind] |
| 182 | + · apply (summable_pow_mul_cexp k 1 z).congr |
| 183 | + simp |
0 commit comments