Theorem: HurwitzZeta.hasSum_int_cosKernel
File: Mathlib/NumberTheory/LSeries/HurwitzZetaEven.lean

tactic: rw [cosKernel_def a t]
state_before: a t : ℝ
ht : 0 < t
⊢ HasSum (fun n => cexp (2 * ↑π * I * ↑a * ↑n) * ↑(rexp (-π * ↑n ^ 2 * t))) ↑(cosKernel (↑a) t)
state_after: a t : ℝ
ht : 0 < t
⊢ HasSum (fun n => cexp (2 * ↑π * I * ↑a * ↑n) * ↑(rexp (-π * ↑n ^ 2 * t))) (jacobiTheta₂ (↑a) (I * ↑t))

tactic: have (n : ℤ) : cexp (2 * ↑π * I * ↑a * ↑n) * ↑(rexp (-π * ↑n ^ 2 * t)) =
    jacobiTheta₂_term n (↑a) (I * ↑t) := by
  rw [jacobiTheta₂_term, ofReal_exp, ← Complex.exp_add]
  push_cast
  ring_nf
  simp only [I_sq, mul_neg, neg_mul, mul_one, sub_eq_add_neg]
state_before: a t : ℝ
ht : 0 < t
⊢ HasSum (fun n => cexp (2 * ↑π * I * ↑a * ↑n) * ↑(rexp (-π * ↑n ^ 2 * t))) (jacobiTheta₂ (↑a) (I * ↑t))
state_after: a t : ℝ
ht : 0 < t
this : ∀ (n : ℤ), cexp (2 * ↑π * I * ↑a * ↑n) * ↑(rexp (-π * ↑n ^ 2 * t)) = jacobiTheta₂_term n (↑a) (I * ↑t)
⊢ HasSum (fun n => cexp (2 * ↑π * I * ↑a * ↑n) * ↑(rexp (-π * ↑n ^ 2 * t))) (jacobiTheta₂ (↑a) (I * ↑t))

tactic: simp only [this]
state_before: a t : ℝ
ht : 0 < t
this : ∀ (n : ℤ), cexp (2 * ↑π * I * ↑a * ↑n) * ↑(rexp (-π * ↑n ^ 2 * t)) = jacobiTheta₂_term n (↑a) (I * ↑t)
⊢ HasSum (fun n => cexp (2 * ↑π * I * ↑a * ↑n) * ↑(rexp (-π * ↑n ^ 2 * t))) (jacobiTheta₂ (↑a) (I * ↑t))
state_after: a t : ℝ
ht : 0 < t
this : ∀ (n : ℤ), cexp (2 * ↑π * I * ↑a * ↑n) * ↑(rexp (-π * ↑n ^ 2 * t)) = jacobiTheta₂_term n (↑a) (I * ↑t)
⊢ HasSum (fun n => jacobiTheta₂_term n (↑a) (I * ↑t)) (jacobiTheta₂ (↑a) (I * ↑t))

tactic: exact hasSum_jacobiTheta₂_term _ (by rwa [I_mul_im, ofReal_re])
state_before: a t : ℝ
ht : 0 < t
this : ∀ (n : ℤ), cexp (2 * ↑π * I * ↑a * ↑n) * ↑(rexp (-π * ↑n ^ 2 * t)) = jacobiTheta₂_term n (↑a) (I * ↑t)
⊢ HasSum (fun n => jacobiTheta₂_term n (↑a) (I * ↑t)) (jacobiTheta₂ (↑a) (I * ↑t))
state_after: no goals

tactic: rw [jacobiTheta₂_term, ofReal_exp, ← Complex.exp_add]
state_before: a t : ℝ
ht : 0 < t
n : ℤ
⊢ cexp (2 * ↑π * I * ↑a * ↑n) * ↑(rexp (-π * ↑n ^ 2 * t)) = jacobiTheta₂_term n (↑a) (I * ↑t)
state_after: a t : ℝ
ht : 0 < t
n : ℤ
⊢ cexp (2 * ↑π * I * ↑a * ↑n + ↑(-π * ↑n ^ 2 * t)) = cexp (2 * ↑π * I * ↑n * ↑a + ↑π * I * ↑n ^ 2 * (I * ↑t))

tactic: push_cast
state_before: a t : ℝ
ht : 0 < t
n : ℤ
⊢ cexp (2 * ↑π * I * ↑a * ↑n + ↑(-π * ↑n ^ 2 * t)) = cexp (2 * ↑π * I * ↑n * ↑a + ↑π * I * ↑n ^ 2 * (I * ↑t))
state_after: a t : ℝ
ht : 0 < t
n : ℤ
⊢ cexp (2 * ↑π * I * ↑a * ↑n + -↑π * ↑n ^ 2 * ↑t) = cexp (2 * ↑π * I * ↑n * ↑a + ↑π * I * ↑n ^ 2 * (I * ↑t))

tactic: ring_nf
state_before: a t : ℝ
ht : 0 < t
n : ℤ
⊢ cexp (2 * ↑π * I * ↑a * ↑n + -↑π * ↑n ^ 2 * ↑t) = cexp (2 * ↑π * I * ↑n * ↑a + ↑π * I * ↑n ^ 2 * (I * ↑t))
state_after: a t : ℝ
ht : 0 < t
n : ℤ
⊢ cexp (↑π * I * ↑a * ↑n * 2 - ↑π * ↑n ^ 2 * ↑t) = cexp (↑π * I * ↑a * ↑n * 2 + ↑π * I ^ 2 * ↑n ^ 2 * ↑t)

tactic: simp only [I_sq, mul_neg, neg_mul, mul_one, sub_eq_add_neg]
state_before: a t : ℝ
ht : 0 < t
n : ℤ
⊢ cexp (↑π * I * ↑a * ↑n * 2 - ↑π * ↑n ^ 2 * ↑t) = cexp (↑π * I * ↑a * ↑n * 2 + ↑π * I ^ 2 * ↑n ^ 2 * ↑t)
state_after: no goals

tactic: rwa [I_mul_im, ofReal_re]
state_before: a t : ℝ
ht : 0 < t
this : ∀ (n : ℤ), cexp (2 * ↑π * I * ↑a * ↑n) * ↑(rexp (-π * ↑n ^ 2 * t)) = jacobiTheta₂_term n (↑a) (I * ↑t)
⊢ 0 < (I * ↑t).im
state_after: no goals