Theorem: EisensteinSeries.eisensteinSeries_tendstoLocallyUniformly
File: Mathlib/NumberTheory/ModularForms/EisensteinSeries/UniformConvergence.lean

Proof steps:
state_before: z : ℍ
k : ℤ
hk : 3 ≤ k
N : ℕ
a : Fin 2 → ZMod N
⊢ TendstoLocallyUniformly (fun s x => ∑ x_1 ∈ s, eisSummand k (↑x_1) x) (fun x => eisensteinSeries a k x) Filter.atTop
state_after: z : ℍ
k : ℤ
hk : 3 ≤ k
N : ℕ
a : Fin 2 → ZMod N
hk' : 2 < ↑k
⊢ TendstoLocallyUniformly (fun s x => ∑ x_1 ∈ s, eisSummand k (↑x_1) x) (fun x => eisensteinSeries a k x) Filter.atTop
tactic: have hk' : (2 : ℝ) < k := by norm_cast
state_before: z : ℍ
k : ℤ
hk : 3 ≤ k
N : ℕ
a : Fin 2 → ZMod N
hk' : 2 < ↑k
⊢ TendstoLocallyUniformly (fun s x => ∑ x_1 ∈ s, eisSummand k (↑x_1) x) (fun x => eisensteinSeries a k x) Filter.atTop
state_after: z : ℍ
k : ℤ
hk : 3 ≤ k
N : ℕ
a : Fin 2 → ZMod N
hk' : 2 < ↑k
p_sum : Summable fun x => ‖↑x‖ ^ (-k)
⊢ TendstoLocallyUniformly (fun s x => ∑ x_1 ∈ s, eisSummand k (↑x_1) x) (fun x => eisensteinSeries a k x) Filter.atTop
tactic: have p_sum : Summable fun x : gammaSet N a ↦ ‖x.val‖ ^ (-k) :=
    mod_cast (summable_one_div_norm_rpow hk').subtype (gammaSet N a)
state_before: z : ℍ
k : ℤ
hk : 3 ≤ k
N : ℕ
a : Fin 2 → ZMod N
hk' : 2 < ↑k
p_sum : Summable fun x => ‖↑x‖ ^ (-k)
⊢ TendstoLocallyUniformly (fun s x => ∑ x_1 ∈ s, eisSummand k (↑x_1) x) (fun x => eisensteinSeries a k x) Filter.atTop
state_after: z : ℍ
k : ℤ
hk : 3 ≤ k
N : ℕ
a : Fin 2 → ZMod N
hk' : 2 < ↑k
p_sum : Summable fun x => ‖↑x‖ ^ (-k)
⊢ ∀ (K : Set ℍ),
    IsCompact K →
      TendstoUniformlyOn (fun s x => ∑ x_1 ∈ s, eisSummand k (↑x_1) x)
        (fun x => ∑' (x_1 : ↑(gammaSet N a)), eisSummand k (↑x_1) x) Filter.atTop K
tactic: simp only [tendstoLocallyUniformly_iff_forall_isCompact, eisensteinSeries]
state_before: z : ℍ
k : ℤ
hk : 3 ≤ k
N : ℕ
a : Fin 2 → ZMod N
hk' : 2 < ↑k
p_sum : Summable fun x => ‖↑x‖ ^ (-k)
⊢ ∀ (K : Set ℍ),
    IsCompact K →
      TendstoUniformlyOn (fun s x => ∑ x_1 ∈ s, eisSummand k (↑x_1) x)
        (fun x => ∑' (x_1 : ↑(gammaSet N a)), eisSummand k (↑x_1) x) Filter.atTop K
state_after: z : ℍ
k : ℤ
hk : 3 ≤ k
N : ℕ
a : Fin 2 → ZMod N
hk' : 2 < ↑k
p_sum : Summable fun x => ‖↑x‖ ^ (-k)
K : Set ℍ
hK : IsCompact K
⊢ TendstoUniformlyOn (fun s x => ∑ x_1 ∈ s, eisSummand k (↑x_1) x)
    (fun x => ∑' (x_1 : ↑(gammaSet N a)), eisSummand k (↑x_1) x) Filter.atTop K
tactic: intro K hK
state_before: z : ℍ
k : ℤ
hk : 3 ≤ k
N : ℕ
a : Fin 2 → ZMod N
hk' : 2 < ↑k
p_sum : Summable fun x => ‖↑x‖ ^ (-k)
K : Set ℍ
hK : IsCompact K
⊢ TendstoUniformlyOn (fun s x => ∑ x_1 ∈ s, eisSummand k (↑x_1) x)
    (fun x => ∑' (x_1 : ↑(gammaSet N a)), eisSummand k (↑x_1) x) Filter.atTop K
state_after: case intro.intro.intro
z : ℍ
k : ℤ
hk : 3 ≤ k
N : ℕ
a : Fin 2 → ZMod N
hk' : 2 < ↑k
p_sum : Summable fun x => ‖↑x‖ ^ (-k)
K : Set ℍ
hK : IsCompact K
A B : ℝ
hB : 0 < B
HABK : K ⊆ verticalStrip A B
⊢ TendstoUniformlyOn (fun s x => ∑ x_1 ∈ s, eisSummand k (↑x_1) x)
    (fun x => ∑' (x_1 : ↑(gammaSet N a)), eisSummand k (↑x_1) x) Filter.atTop K
tactic: obtain ⟨A, B, hB, HABK⟩ := subset_verticalStrip_of_isCompact hK
state_before: case intro.intro.intro
z : ℍ
k : ℤ
hk : 3 ≤ k
N : ℕ
a : Fin 2 → ZMod N
hk' : 2 < ↑k
p_sum : Summable fun x => ‖↑x‖ ^ (-k)
K : Set ℍ
hK : IsCompact K
A B : ℝ
hB : 0 < B
HABK : K ⊆ verticalStrip A B
⊢ TendstoUniformlyOn (fun s x => ∑ x_1 ∈ s, eisSummand k (↑x_1) x)
    (fun x => ∑' (x_1 : ↑(gammaSet N a)), eisSummand k (↑x_1) x) Filter.atTop K
state_after: case intro.intro.intro
z✝ : ℍ
k : ℤ
hk : 3 ≤ k
N : ℕ
a : Fin 2 → ZMod N
hk' : 2 < ↑k
p_sum : Summable fun x => ‖↑x‖ ^ (-k)
K : Set ℍ
hK : IsCompact K
A B : ℝ
hB : 0 < B
HABK : K ⊆ verticalStrip A B
p : ↑(gammaSet N a)
z : ℍ
hz : z ∈ verticalStrip A B
⊢ ‖eisSummand k (↑p) z‖ ≤ r ⟨{ re := A, im := B }, hB⟩ ^ (-↑k) * ‖↑p‖ ^ (-k)
tactic: refine (tendstoUniformlyOn_tsum (hu := p_sum.mul_left <| r ⟨⟨A, B⟩, hB⟩ ^ (-k : ℝ))
    (fun p z hz ↦ ?_)).mono HABK
state_before: case intro.intro.intro
z✝ : ℍ
k : ℤ
hk : 3 ≤ k
N : ℕ
a : Fin 2 → ZMod N
hk' : 2 < ↑k
p_sum : Summable fun x => ‖↑x‖ ^ (-k)
K : Set ℍ
hK : IsCompact K
A B : ℝ
hB : 0 < B
HABK : K ⊆ verticalStrip A B
p : ↑(gammaSet N a)
z : ℍ
hz : z ∈ verticalStrip A B
⊢ ‖eisSummand k (↑p) z‖ ≤ r ⟨{ re := A, im := B }, hB⟩ ^ (-↑k) * ‖↑p‖ ^ (-k)
state_after: no goals
tactic: simpa only [eisSummand, one_div, ← zpow_neg, norm_eq_abs, abs_zpow, ← Real.rpow_intCast,
    Int.cast_neg] using summand_bound_of_mem_verticalStrip (by positivity) p hB hz