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

tactic: rw [← hasSum_ofReal, evenKernel_def]
state_before: a t : ℝ
ht : 0 < t
⊢ HasSum (fun n => rexp (-π * (↑n + a) ^ 2 * t)) (evenKernel (↑a) t)
state_after: a t : ℝ
ht : 0 < t
⊢ HasSum (fun x => ↑(rexp (-π * (↑x + a) ^ 2 * t))) (cexp (-↑π * ↑a ^ 2 * ↑t) * jacobiTheta₂ (↑a * I * ↑t) (I * ↑t))

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

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

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

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

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

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

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

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

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