-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Expand file tree
/
Copy pathIsBoundedAtImInfty.lean
More file actions
83 lines (66 loc) · 3.71 KB
/
Copy pathIsBoundedAtImInfty.lean
File metadata and controls
83 lines (66 loc) · 3.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/-
Copyright (c) 2024 Chris Birkbeck. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Chris Birkbeck
-/
module
public import Mathlib.Analysis.Complex.UpperHalfPlane.FunctionsBoundedAtInfty
public import Mathlib.NumberTheory.ModularForms.EisensteinSeries.Defs
public import Mathlib.NumberTheory.ModularForms.EisensteinSeries.Summable
public import Mathlib.NumberTheory.ModularForms.Identities
/-!
# Boundedness of Eisenstein series
We show that Eisenstein series of weight `k` and level `Γ(N)` with congruence condition
`a : Fin 2 → ZMod N` are bounded at infinity.
## Outline of argument
We need to bound the value of the Eisenstein series (acted on by `A : SL(2,ℤ)`)
at a given point `z` in the upper half plane. Since these are modular forms of level `Γ(N)`,
it suffices to prove this for `z ∈ verticalStrip N z.im`.
We can then, first observe that the slash action just changes our `a` to `(a ᵥ* A)` and
we then use our bounds for Eisenstein series in these vertical strips to get the result.
-/
public section
noncomputable section
open ModularForm UpperHalfPlane Matrix SlashInvariantForm CongruenceSubgroup
open scoped MatrixGroups
namespace EisensteinSeries
lemma summable_norm_eisSummand {k : ℤ} (hk : 3 ≤ k) (z : ℍ) :
Summable fun (x : Fin 2 → ℤ) ↦ ‖(eisSummand k x z)‖ := by
have hk' : (2 : ℝ) < k := by norm_cast
apply ((summable_one_div_norm_rpow hk').mul_left <| r z ^ (-k : ℝ)).of_nonneg_of_le
(fun _ ↦ norm_nonneg _)
intro b
simp only [eisSummand, norm_zpow]
exact_mod_cast summand_bound z (show 0 ≤ (k : ℝ) by positivity) b
lemma summable_coprime_eisSummand {N : ℕ} {k : ℤ} (a : Fin 2 → ZMod N) (hk : 3 ≤ k) (z : ℍ) :
Summable fun p : Σ r : {r : ℕ // r.Coprime N}, gammaSet N r.1 a ↦ eisSummand k p.2 z := by
rw [← Equiv.summable_iff (gammaSetCoprimeSigmaEquiv a)]
exact ((summable_norm_eisSummand hk z).of_norm.subtype _)
/-- The norm of the restricted sum is less than the full sum of the norms. -/
lemma norm_le_tsum_norm (N : ℕ) (a : Fin 2 → ZMod N) (k : ℤ) (hk : 3 ≤ k) (z : ℍ) :
‖eisensteinSeries a k z‖ ≤ ∑' (x : Fin 2 → ℤ), ‖eisSummand k x z‖ := by
simp_rw [eisensteinSeries]
apply le_trans (norm_tsum_le_tsum_norm ((summable_norm_eisSummand hk z).subtype _))
(Summable.tsum_subtype_le (fun (x : Fin 2 → ℤ) ↦ ‖(eisSummand k x z)‖) _ (fun _ ↦ norm_nonneg _)
(summable_norm_eisSummand hk z))
/-- Eisenstein series are bounded at infinity. -/
theorem isBoundedAtImInfty_eisensteinSeriesSIF {N : ℕ} [NeZero N] (a : Fin 2 → ZMod N) {k : ℤ}
(hk : 3 ≤ k) (A : SL(2, ℤ)) : IsBoundedAtImInfty (eisensteinSeriesSIF a k ∣[k] A) := by
simp_rw [UpperHalfPlane.isBoundedAtImInfty_iff, eisensteinSeriesSIF] at *
refine ⟨∑'(x : Fin 2 → ℤ), r ⟨⟨N, 2⟩, Nat.ofNat_pos⟩ ^ (-k) * ‖x‖ ^ (-k), 2, ?_⟩
intro z hz
obtain ⟨n, hn⟩ := (ModularGroup_T_zpow_mem_verticalStrip z (NeZero.pos N))
rw [SlashInvariantForm.coe_mk, eisensteinSeries_slash_apply, ← eisensteinSeriesSIF_apply,
← T_zpow_width_invariant N k n (eisensteinSeriesSIF (a ᵥ* A) k) z]
apply le_trans (norm_le_tsum_norm N (a ᵥ* A) k hk _)
have hk' : (2 : ℝ) < k := by norm_cast
apply (summable_norm_eisSummand hk _).tsum_le_tsum _
· exact_mod_cast (summable_one_div_norm_rpow hk').mul_left <| r ⟨⟨N, 2⟩, Nat.ofNat_pos⟩ ^ (-k)
· intro x
simp_rw [eisSummand, norm_zpow]
exact_mod_cast
summand_bound_of_mem_verticalStrip (lt_trans two_pos hk').le x two_pos
(verticalStrip_anti_right N hz hn)
@[deprecated (since := "2026-02-10")]
alias isBoundedAtImInfty_eisensteinSeries_SIF := isBoundedAtImInfty_eisensteinSeriesSIF
end EisensteinSeries