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

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

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

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

tactic: intro h
state_before: case mp
z τ : ℂ
⊢ (Summable fun x => jacobiTheta₂_term_fderiv x z τ) → Summable fun x => jacobiTheta₂_term x z τ
state_after: case mp
z τ : ℂ
h : Summable fun x => jacobiTheta₂_term_fderiv x z τ
⊢ Summable fun x => jacobiTheta₂_term x z τ

tactic: have := h.norm
state_before: case mp
z τ : ℂ
h : Summable fun x => jacobiTheta₂_term_fderiv x z τ
⊢ Summable fun x => jacobiTheta₂_term x z τ
state_after: case mp
z τ : ℂ
h : Summable fun x => jacobiTheta₂_term_fderiv x z τ
this : Summable fun x => ‖jacobiTheta₂_term_fderiv x z τ‖
⊢ Summable fun x => jacobiTheta₂_term x z τ

tactic: refine this.of_norm_bounded_eventually _ ?_
state_before: case mp
z τ : ℂ
h : Summable fun x => jacobiTheta₂_term_fderiv x z τ
this : Summable fun x => ‖jacobiTheta₂_term_fderiv x z τ‖
⊢ Summable fun x => jacobiTheta₂_term x z τ
state_after: case mp
z τ : ℂ
h : Summable fun x => jacobiTheta₂_term_fderiv x z τ
this : Summable fun x => ‖jacobiTheta₂_term_fderiv x z τ‖
⊢ ∀ᶠ (i : ℤ) in cofinite, ‖jacobiTheta₂_term i z τ‖ ≤ ‖jacobiTheta₂_term_fderiv 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_fderiv x z τ
this : Summable fun x => ‖jacobiTheta₂_term_fderiv x z τ‖
⊢ ∀ᶠ (i : ℤ) in cofinite, ‖jacobiTheta₂_term i z τ‖ ≤ ‖jacobiTheta₂_term_fderiv i z τ‖
state_after: case mp
z τ : ℂ
h : Summable fun x => jacobiTheta₂_term_fderiv x z τ
this✝ : Summable fun x => ‖jacobiTheta₂_term_fderiv x z τ‖
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
⊢ ∀ᶠ (i : ℤ) in cofinite, ‖jacobiTheta₂_term i z τ‖ ≤ ‖jacobiTheta₂_term_fderiv i z τ‖

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

tactic: refine le_trans ?_ (norm_jacobiTheta₂_term_fderiv_ge n z τ)
state_before: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂_term_fderiv x z τ
this✝ : Summable fun x => ‖jacobiTheta₂_term_fderiv x z τ‖
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ ‖jacobiTheta₂_term n z τ‖ ≤ ‖jacobiTheta₂_term_fderiv n z τ‖
state_after: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂_term_fderiv x z τ
this✝ : Summable fun x => ‖jacobiTheta₂_term_fderiv x z τ‖
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ ‖jacobiTheta₂_term n z τ‖ ≤ π * ↑|n| ^ 2 * ‖jacobiTheta₂_term n z τ‖

tactic: apply le_mul_of_one_le_left (norm_nonneg _)
state_before: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂_term_fderiv x z τ
this✝ : Summable fun x => ‖jacobiTheta₂_term_fderiv x z τ‖
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ ‖jacobiTheta₂_term n z τ‖ ≤ π * ↑|n| ^ 2 * ‖jacobiTheta₂_term n z τ‖
state_after: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂_term_fderiv x z τ
this✝ : Summable fun x => ‖jacobiTheta₂_term_fderiv x z τ‖
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ 1 ≤ π * ↑|n| ^ 2

tactic: refine one_le_pi_div_two.trans (mul_le_mul_of_nonneg_left ?_ pi_pos.le)
state_before: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂_term_fderiv x z τ
this✝ : Summable fun x => ‖jacobiTheta₂_term_fderiv x z τ‖
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ 1 ≤ π * ↑|n| ^ 2
state_after: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂_term_fderiv x z τ
this✝ : Summable fun x => ‖jacobiTheta₂_term_fderiv x z τ‖
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ 2⁻¹ ≤ ↑|n| ^ 2

tactic: refine (by norm_num : 2⁻¹ ≤ (1 : ℝ)).trans ?_
state_before: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂_term_fderiv x z τ
this✝ : Summable fun x => ‖jacobiTheta₂_term_fderiv x z τ‖
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ 2⁻¹ ≤ ↑|n| ^ 2
state_after: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂_term_fderiv x z τ
this✝ : Summable fun x => ‖jacobiTheta₂_term_fderiv x z τ‖
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ 1 ≤ ↑|n| ^ 2

tactic: rw [one_le_sq_iff_one_le_abs, ← Int.cast_abs, _root_.abs_abs, ← Int.cast_one, Int.cast_le]
state_before: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂_term_fderiv x z τ
this✝ : Summable fun x => ‖jacobiTheta₂_term_fderiv x z τ‖
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ 1 ≤ ↑|n| ^ 2
state_after: case h
z τ : ℂ
h : Summable fun x => jacobiTheta₂_term_fderiv x z τ
this✝ : Summable fun x => ‖jacobiTheta₂_term_fderiv 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_fderiv x z τ
this✝ : Summable fun x => ‖jacobiTheta₂_term_fderiv x z τ‖
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ 1 ≤ |n|
state_after: no goals

tactic: norm_num
state_before: z τ : ℂ
h : Summable fun x => jacobiTheta₂_term_fderiv x z τ
this✝ : Summable fun x => ‖jacobiTheta₂_term_fderiv x z τ‖
this : ∀ᶠ (n : ℤ) in cofinite, n ≠ 0
n : ℤ
hn : n ≠ 0
⊢ 2⁻¹ ≤ 1
state_after: no goals

tactic: intro hτ
state_before: case mpr
z τ : ℂ
⊢ 0 < τ.im → Summable fun x => jacobiTheta₂_term_fderiv x z τ
state_after: case mpr
z τ : ℂ
hτ : 0 < τ.im
⊢ Summable fun x => jacobiTheta₂_term_fderiv x z τ

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

tactic: refine (norm_jacobiTheta₂_term_fderiv_le n z τ).trans
  (?_ : 3 * π * |n| ^ 2 * ‖jacobiTheta₂_term n z τ‖ ≤ _)
state_before: case mpr
z τ : ℂ
hτ : 0 < τ.im
n : ℤ
⊢ ‖jacobiTheta₂_term_fderiv n z τ‖ ≤ 3 * π * (↑|n| ^ 2 * rexp (-π * (τ.im * ↑n ^ 2 - 2 * |z.im| * ↑|n|)))
state_after: case mpr
z τ : ℂ
hτ : 0 < τ.im
n : ℤ
⊢ 3 * π * ↑|n| ^ 2 * ‖jacobiTheta₂_term n z τ‖ ≤ 3 * π * (↑|n| ^ 2 * rexp (-π * (τ.im * ↑n ^ 2 - 2 * |z.im| * ↑|n|)))

tactic: simp_rw [mul_assoc (3 * π)]
state_before: case mpr
z τ : ℂ
hτ : 0 < τ.im
n : ℤ
⊢ 3 * π * ↑|n| ^ 2 * ‖jacobiTheta₂_term n z τ‖ ≤ 3 * π * (↑|n| ^ 2 * rexp (-π * (τ.im * ↑n ^ 2 - 2 * |z.im| * ↑|n|)))
state_after: case mpr
z τ : ℂ
hτ : 0 < τ.im
n : ℤ
⊢ 3 * π * (↑|n| ^ 2 * ‖jacobiTheta₂_term n z τ‖) ≤ 3 * π * (↑|n| ^ 2 * rexp (-π * (τ.im * ↑n ^ 2 - 2 * |z.im| * ↑|n|)))

tactic: refine mul_le_mul_of_nonneg_left ?_ (mul_pos (by norm_num : 0 < (3 : ℝ)) pi_pos).le
state_before: case mpr
z τ : ℂ
hτ : 0 < τ.im
n : ℤ
⊢ 3 * π * (↑|n| ^ 2 * ‖jacobiTheta₂_term n z τ‖) ≤ 3 * π * (↑|n| ^ 2 * rexp (-π * (τ.im * ↑n ^ 2 - 2 * |z.im| * ↑|n|)))
state_after: case mpr
z τ : ℂ
hτ : 0 < τ.im
n : ℤ
⊢ ↑|n| ^ 2 * ‖jacobiTheta₂_term n z τ‖ ≤ ↑|n| ^ 2 * rexp (-π * (τ.im * ↑n ^ 2 - 2 * |z.im| * ↑|n|))

tactic: refine mul_le_mul_of_nonneg_left ?_ (pow_nonneg (Int.cast_nonneg.mpr (abs_nonneg _)) _)
state_before: case mpr
z τ : ℂ
hτ : 0 < τ.im
n : ℤ
⊢ ↑|n| ^ 2 * ‖jacobiTheta₂_term n z τ‖ ≤ ↑|n| ^ 2 * rexp (-π * (τ.im * ↑n ^ 2 - 2 * |z.im| * ↑|n|))
state_after: case mpr
z τ : ℂ
hτ : 0 < τ.im
n : ℤ
⊢ ‖jacobiTheta₂_term n z τ‖ ≤ rexp (-π * (τ.im * ↑n ^ 2 - 2 * |z.im| * ↑|n|))

tactic: exact norm_jacobiTheta₂_term_le hτ le_rfl le_rfl n
state_before: case mpr
z τ : ℂ
hτ : 0 < τ.im
n : ℤ
⊢ ‖jacobiTheta₂_term n z τ‖ ≤ rexp (-π * (τ.im * ↑n ^ 2 - 2 * |z.im| * ↑|n|))
state_after: no goals

tactic: norm_num
state_before: z τ : ℂ
hτ : 0 < τ.im
n : ℤ
⊢ 0 < 3
state_after: no goals