Theorem: EisensteinSeries.isBoundedAtImInfty_eisensteinSeries_SIF
File: Mathlib/NumberTheory/ModularForms/EisensteinSeries/IsBoundedAtImInfty.lean

Proof steps:
state_before: N : ℕ+
a : Fin 2 → ZMod ↑N
k : ℤ
hk : 3 ≤ k
A : SL(2, ℤ)
⊢ IsBoundedAtImInfty ((eisensteinSeries_SIF a k).toFun ∣[k] A)
state_after: N : ℕ+
a : Fin 2 → ZMod ↑N
k : ℤ
hk : 3 ≤ k
A : SL(2, ℤ)
⊢ ∃ M A_1, ∀ (z : ℍ), A_1 ≤ z.im → Complex.abs ((eisensteinSeries a k ∣[k] A) z) ≤ M
tactic: simp_rw [UpperHalfPlane.bounded_mem, eisensteinSeries_SIF] at *
state_before: N : ℕ+
a : Fin 2 → ZMod ↑N
k : ℤ
hk : 3 ≤ k
A : SL(2, ℤ)
⊢ ∃ M A_1, ∀ (z : ℍ), A_1 ≤ z.im → Complex.abs ((eisensteinSeries a k ∣[k] A) z) ≤ M
state_after: N : ℕ+
a : Fin 2 → ZMod ↑N
k : ℤ
hk : 3 ≤ k
A : SL(2, ℤ)
⊢ ∀ (z : ℍ),
    2 ≤ z.im →
      Complex.abs ((eisensteinSeries a k ∣[k] A) z) ≤
        ∑' (x : Fin 2 → ℤ), r ⟨{ re := ↑↑N, im := 2 }, ⋯⟩ ^ (-k) * ‖x‖ ^ (-k)
tactic: refine ⟨∑'(x : Fin 2 → ℤ), r ⟨⟨N, 2⟩, Nat.ofNat_pos⟩ ^ (-k) * ‖x‖ ^ (-k), 2, ?_⟩
state_before: N : ℕ+
a : Fin 2 → ZMod ↑N
k : ℤ
hk : 3 ≤ k
A : SL(2, ℤ)
⊢ ∀ (z : ℍ),
    2 ≤ z.im →
      Complex.abs ((eisensteinSeries a k ∣[k] A) z) ≤
        ∑' (x : Fin 2 → ℤ), r ⟨{ re := ↑↑N, im := 2 }, ⋯⟩ ^ (-k) * ‖x‖ ^ (-k)
state_after: N : ℕ+
a : Fin 2 → ZMod ↑N
k : ℤ
hk : 3 ≤ k
A : SL(2, ℤ)
z : ℍ
hz : 2 ≤ z.im
⊢ Complex.abs ((eisensteinSeries a k ∣[k] A) z) ≤ ∑' (x : Fin 2 → ℤ), r ⟨{ re := ↑↑N, im := 2 }, ⋯⟩ ^ (-k) * ‖x‖ ^ (-k)
tactic: intro z hz
state_before: N : ℕ+
a : Fin 2 → ZMod ↑N
k : ℤ
hk : 3 ≤ k
A : SL(2, ℤ)
z : ℍ
hz : 2 ≤ z.im
⊢ Complex.abs ((eisensteinSeries a k ∣[k] A) z) ≤ ∑' (x : Fin 2 → ℤ), r ⟨{ re := ↑↑N, im := 2 }, ⋯⟩ ^ (-k) * ‖x‖ ^ (-k)
state_after: case intro
N : ℕ+
a : Fin 2 → ZMod ↑N
k : ℤ
hk : 3 ≤ k
A : SL(2, ℤ)
z : ℍ
hz : 2 ≤ z.im
n : ℤ
hn : ModularGroup.T ^ (↑↑N * n) • z ∈ verticalStrip (↑↑N) z.im
⊢ Complex.abs ((eisensteinSeries a k ∣[k] A) z) ≤ ∑' (x : Fin 2 → ℤ), r ⟨{ re := ↑↑N, im := 2 }, ⋯⟩ ^ (-k) * ‖x‖ ^ (-k)
tactic: obtain ⟨n, hn⟩ := (ModularGroup_T_zpow_mem_verticalStrip z N.2)
state_before: case intro
N : ℕ+
a : Fin 2 → ZMod ↑N
k : ℤ
hk : 3 ≤ k
A : SL(2, ℤ)
z : ℍ
hz : 2 ≤ z.im
n : ℤ
hn : ModularGroup.T ^ (↑↑N * n) • z ∈ verticalStrip (↑↑N) z.im
⊢ Complex.abs ((eisensteinSeries a k ∣[k] A) z) ≤ ∑' (x : Fin 2 → ℤ), r ⟨{ re := ↑↑N, im := 2 }, ⋯⟩ ^ (-k) * ‖x‖ ^ (-k)
state_after: case intro
N : ℕ+
a : Fin 2 → ZMod ↑N
k : ℤ
hk : 3 ≤ k
A : SL(2, ℤ)
z : ℍ
hz : 2 ≤ z.im
n : ℤ
hn : ModularGroup.T ^ (↑↑N * n) • z ∈ verticalStrip (↑↑N) z.im
⊢ Complex.abs
      ((eisensteinSeries_SIF (a ᵥ* ↑((SpecialLinearGroup.map (Int.castRingHom (ZMod ↑N))) A)) k)
        (ModularGroup.T ^ (↑↑N * n) • z)) ≤
    ∑' (x : Fin 2 → ℤ), r ⟨{ re := ↑↑N, im := 2 }, ⋯⟩ ^ (-k) * ‖x‖ ^ (-k)
tactic: rw [eisensteinSeries_slash_apply, ← eisensteinSeries_SIF_apply,
    ← T_zpow_width_invariant N k n (eisensteinSeries_SIF (a ᵥ* A) k) z]
state_before: case intro
N : ℕ+
a : Fin 2 → ZMod ↑N
k : ℤ
hk : 3 ≤ k
A : SL(2, ℤ)
z : ℍ
hz : 2 ≤ z.im
n : ℤ
hn : ModularGroup.T ^ (↑↑N * n) • z ∈ verticalStrip (↑↑N) z.im
⊢ Complex.abs
      ((eisensteinSeries_SIF (a ᵥ* ↑((SpecialLinearGroup.map (Int.castRingHom (ZMod ↑N))) A)) k)
        (ModularGroup.T ^ (↑↑N * n) • z)) ≤
    ∑' (x : Fin 2 → ℤ), r ⟨{ re := ↑↑N, im := 2 }, ⋯⟩ ^ (-k) * ‖x‖ ^ (-k)
state_after: case intro
N : ℕ+
a : Fin 2 → ZMod ↑N
k : ℤ
hk : 3 ≤ k
A : SL(2, ℤ)
z : ℍ
hz : 2 ≤ z.im
n : ℤ
hn : ModularGroup.T ^ (↑↑N * n) • z ∈ verticalStrip (↑↑N) z.im
⊢ ∑' (x : Fin 2 → ℤ), Complex.abs (eisSummand k x (ModularGroup.T ^ (↑↑N * n) • z)) ≤
    ∑' (x : Fin 2 → ℤ), r ⟨{ re := ↑↑N, im := 2 }, ⋯⟩ ^ (-k) * ‖x‖ ^ (-k)
tactic: apply le_trans (abs_le_tsum_abs N (a ᵥ* A) k hk _)
state_before: case intro
N : ℕ+
a : Fin 2 → ZMod ↑N
k : ℤ
hk : 3 ≤ k
A : SL(2, ℤ)
z : ℍ
hz : 2 ≤ z.im
n : ℤ
hn : ModularGroup.T ^ (↑↑N * n) • z ∈ verticalStrip (↑↑N) z.im
⊢ ∑' (x : Fin 2 → ℤ), Complex.abs (eisSummand k x (ModularGroup.T ^ (↑↑N * n) • z)) ≤
    ∑' (x : Fin 2 → ℤ), r ⟨{ re := ↑↑N, im := 2 }, ⋯⟩ ^ (-k) * ‖x‖ ^ (-k)
state_after: case intro
N : ℕ+
a : Fin 2 → ZMod ↑N
k : ℤ
hk : 3 ≤ k
A : SL(2, ℤ)
z : ℍ
hz : 2 ≤ z.im
n : ℤ
hn : ModularGroup.T ^ (↑↑N * n) • z ∈ verticalStrip (↑↑N) z.im
hk' : 2 < ↑k
⊢ ∑' (x : Fin 2 → ℤ), Complex.abs (eisSummand k x (ModularGroup.T ^ (↑↑N * n) • z)) ≤
    ∑' (x : Fin 2 → ℤ), r ⟨{ re := ↑↑N, im := 2 }, ⋯⟩ ^ (-k) * ‖x‖ ^ (-k)
tactic: have hk' : (2 : ℝ) < k := by norm_cast
state_before: case intro
N : ℕ+
a : Fin 2 → ZMod ↑N
k : ℤ
hk : 3 ≤ k
A : SL(2, ℤ)
z : ℍ
hz : 2 ≤ z.im
n : ℤ
hn : ModularGroup.T ^ (↑↑N * n) • z ∈ verticalStrip (↑↑N) z.im
hk' : 2 < ↑k
⊢ ∑' (x : Fin 2 → ℤ), Complex.abs (eisSummand k x (ModularGroup.T ^ (↑↑N * n) • z)) ≤
    ∑' (x : Fin 2 → ℤ), r ⟨{ re := ↑↑N, im := 2 }, ⋯⟩ ^ (-k) * ‖x‖ ^ (-k)
state_after: case intro
N : ℕ+
a : Fin 2 → ZMod ↑N
k : ℤ
hk : 3 ≤ k
A : SL(2, ℤ)
z : ℍ
hz : 2 ≤ z.im
n : ℤ
hn : ModularGroup.T ^ (↑↑N * n) • z ∈ verticalStrip (↑↑N) z.im
hk' : 2 < ↑k
⊢ Summable fun i => r ⟨{ re := ↑↑N, im := 2 }, ⋯⟩ ^ (-k) * ‖i‖ ^ (-k)

N : ℕ+
a : Fin 2 → ZMod ↑N
k : ℤ
hk : 3 ≤ k
A : SL(2, ℤ)
z : ℍ
hz : 2 ≤ z.im
n : ℤ
hn : ModularGroup.T ^ (↑↑N * n) • z ∈ verticalStrip (↑↑N) z.im
hk' : 2 < ↑k
⊢ ∀ (i : Fin 2 → ℤ),
    ‖eisSummand k i (ModularGroup.T ^ (↑↑N * n) • z)‖ ≤ r ⟨{ re := ↑↑N, im := 2 }, ⋯⟩ ^ (-k) * ‖i‖ ^ (-k)
tactic: apply tsum_le_tsum _ (summable_norm_eisSummand hk _)