Theorem: summable_jacobiTheta₂'_term_iff
File: Mathlib/NumberTheory/ModularForms/JacobiTheta/TwoVariable.lean

tactic: constructor
state_before: z τ : ℂ
⊢ (Summable fun x => jacobiTheta₂'_term x z τ) ↔ 0 < τ.im
state_after: case mp
z τ : ℂ
⊢ (Summable fun x => jacobiTheta₂'_term x z τ) → 0 < τ.im

case mpr
z τ : ℂ
⊢ 0 < τ.im → Summable fun x => jacobiTheta₂'_term x z τ

tactic: rw [← summable_jacobiTheta₂_term_iff (z := z)]
state_before: case mp
z τ : ℂ
⊢ (Summable fun x => jacobiTheta₂'_term x z τ) → 0 < τ.im
state_after: case mp
z τ : ℂ
⊢ (Summable fun x => jacobiTheta₂'_term x z τ) → Summable fun x => jacobiTheta₂_term x z τ

tactic: refine fun h ↦ (h.norm.mul_left (2 * π)⁻¹).of_norm_bounded_eventually _  ?_
state_before: case mp
z τ : ℂ
⊢ (Summable fun x => jacobiTheta₂'_term x z τ) → Summable fun x => jacobiTheta₂_term x z τ
state_after: case mp
z τ : ℂ
h : Summable fun x => jacobiTheta₂'_term x z τ
⊢ ∀ᶠ (i : ℤ) in cofinite, ‖jacobiTheta₂_term i z τ‖ ≤ (2 * π)⁻¹ * ‖jacobiTheta₂'_term i z τ‖

tactic: have : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0 :=
  Int.cofinite_eq ▸ (mem_sup.mpr ⟨eventually_ne_atBot 0, eventually_ne_atTop 0⟩)
state_before: case mp
z τ : ℂ
h : Summable fun x => jacobiTheta₂'_term x z τ
⊢ ∀ᶠ (i : ℤ) in cofinite, ‖jacobiTheta₂_term i z τ‖ ≤ (2 * π)⁻¹ * ‖jacobiTheta₂'_term i z τ‖
state_after: case mp
z τ : ℂ
h : Summable fun x => jacobiTheta₂'_term x z τ
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
⊢ ∀ᶠ (i : ℤ) in cofinite, ‖jacobiTheta₂_term i z τ‖ ≤ (2 * π)⁻¹ * ‖jacobiTheta₂'_term i z τ‖

tactic: filter_upwards [this] with n hn
state_before: case mp
z τ : ℂ
h : Summable fun x => jacobiTheta₂'_term x z τ
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
⊢ ∀ᶠ (i : ℤ) in cofinite, ‖jacobiTheta₂_term i z τ‖ ≤ (2 * π)⁻¹ * ‖jacobiTheta₂'_term i z τ‖
state_after: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂'_term x z τ
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ ‖jacobiTheta₂_term n z τ‖ ≤ (2 * π)⁻¹ * ‖jacobiTheta₂'_term n z τ‖

tactic: rw [jacobiTheta₂'_term, norm_mul, ← mul_assoc]
state_before: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂'_term x z τ
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ ‖jacobiTheta₂_term n z τ‖ ≤ (2 * π)⁻¹ * ‖jacobiTheta₂'_term n z τ‖
state_after: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂'_term x z τ
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ ‖jacobiTheta₂_term n z τ‖ ≤ (2 * π)⁻¹ * ‖2 * ↑π * I * ↑n‖ * ‖jacobiTheta₂_term n z τ‖

tactic: refine le_mul_of_one_le_left (norm_nonneg _) ?_
state_before: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂'_term x z τ
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ ‖jacobiTheta₂_term n z τ‖ ≤ (2 * π)⁻¹ * ‖2 * ↑π * I * ↑n‖ * ‖jacobiTheta₂_term n z τ‖
state_after: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂'_term x z τ
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ 1 ≤ (2 * π)⁻¹ * ‖2 * ↑π * I * ↑n‖

tactic: simp_rw [norm_mul, norm_I, norm_real, mul_one, norm_of_nonneg pi_pos.le,
  ← ofReal_ofNat, norm_real, norm_of_nonneg two_pos.le, ← ofReal_intCast, norm_real,
  Real.norm_eq_abs, ← Int.cast_abs, ← mul_assoc _ (2 * π),
  inv_mul_cancel (mul_pos two_pos pi_pos).ne', one_mul]
state_before: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂'_term x z τ
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ 1 ≤ (2 * π)⁻¹ * ‖2 * ↑π * I * ↑n‖
state_after: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂'_term x z τ
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ 1 ≤ ↑|n|

tactic: rw [← Int.cast_one, Int.cast_le]
state_before: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂'_term x z τ
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ 1 ≤ ↑|n|
state_after: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂'_term x z τ
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ 1 ≤ |n|

tactic: exact Int.one_le_abs hn
state_before: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂'_term x z τ
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ 1 ≤ |n|
state_after: no goals

tactic: refine fun hτ ↦ ((summable_pow_mul_jacobiTheta₂_term_bound
  |z.im| hτ 1).mul_left (2 * π)).of_norm_bounded _ (fun n ↦ ?_)
state_before: case mpr
z τ : ℂ
⊢ 0 < τ.im → Summable fun x => jacobiTheta₂'_term x z τ
state_after: case mpr
z τ : ℂ
hτ : 0 < τ.im
n : ℤ
⊢ ‖jacobiTheta₂'_term n z τ‖ ≤ 2 * π * (↑|n| ^ 1 * rexp (-π * (τ.im * ↑n ^ 2 - 2 * |z.im| * ↑|n|)))

tactic: rw [jacobiTheta₂'_term, norm_mul, ← mul_assoc, pow_one]
state_before: case mpr
z τ : ℂ
hτ : 0 < τ.im
n : ℤ
⊢ ‖jacobiTheta₂'_term n z τ‖ ≤ 2 * π * (↑|n| ^ 1 * rexp (-π * (τ.im * ↑n ^ 2 - 2 * |z.im| * ↑|n|)))
state_after: case mpr
z τ : ℂ
hτ : 0 < τ.im
n : ℤ
⊢ ‖2 * ↑π * I * ↑n‖ * ‖jacobiTheta₂_term n z τ‖ ≤ 2 * π * ↑|n| * rexp (-π * (τ.im * ↑n ^ 2 - 2 * |z.im| * ↑|n|))

tactic: refine mul_le_mul (le_of_eq ?_) (norm_jacobiTheta₂_term_le hτ le_rfl le_rfl n)
  (norm_nonneg _) (by positivity)
state_before: case mpr
z τ : ℂ
hτ : 0 < τ.im
n : ℤ
⊢ ‖2 * ↑π * I * ↑n‖ * ‖jacobiTheta₂_term n z τ‖ ≤ 2 * π * ↑|n| * rexp (-π * (τ.im * ↑n ^ 2 - 2 * |z.im| * ↑|n|))
state_after: case mpr
z τ : ℂ
hτ : 0 < τ.im
n : ℤ
⊢ ‖2 * ↑π * I * ↑n‖ = 2 * π * ↑|n|

tactic: simp_rw [norm_mul, Complex.norm_eq_abs, Complex.abs_two, abs_I,
  Complex.abs_of_nonneg pi_pos.le, abs_intCast, mul_one, Int.cast_abs]
state_before: case mpr
z τ : ℂ
hτ : 0 < τ.im
n : ℤ
⊢ ‖2 * ↑π * I * ↑n‖ = 2 * π * ↑|n|
state_after: no goals

tactic: positivity
state_before: z τ : ℂ
hτ : 0 < τ.im
n : ℤ
⊢ 0 ≤ 2 * π * ↑|n|
state_after: no goals