Theorem: HurwitzZeta.continuousOn_oddKernel
File: Mathlib/NumberTheory/LSeries/HurwitzZetaOdd.lean

tactic: induction' a using QuotientAddGroup.induction_on' with a
state_before: a : UnitAddCircle
⊢ ContinuousOn (oddKernel a) (Ioi 0)
state_after: case H
a : ℝ
⊢ ContinuousOn (oddKernel ↑a) (Ioi 0)

tactic: suffices ContinuousOn (fun x ↦ (oddKernel a x : ℂ)) (Ioi 0) from
  (continuous_re.comp_continuousOn this).congr fun a _ ↦ (ofReal_re _).symm
state_before: case H
a : ℝ
⊢ ContinuousOn (oddKernel ↑a) (Ioi 0)
state_after: case H
a : ℝ
⊢ ContinuousOn (fun x => ↑(oddKernel (↑a) x)) (Ioi 0)

tactic: simp_rw [oddKernel_def' a]
state_before: case H
a : ℝ
⊢ ContinuousOn (fun x => ↑(oddKernel (↑a) x)) (Ioi 0)
state_after: case H
a : ℝ
⊢ ContinuousOn
    (fun x =>
      cexp (-↑π * ↑a ^ 2 * ↑x) *
        (jacobiTheta₂' (↑a * I * ↑x) (I * ↑x) / (2 * ↑π * I) + ↑a * jacobiTheta₂ (↑a * I * ↑x) (I * ↑x)))
    (Ioi 0)

tactic: refine fun x hx ↦ ((Continuous.continuousAt ?_).mul ?_).continuousWithinAt
state_before: case H
a : ℝ
⊢ ContinuousOn
    (fun x =>
      cexp (-↑π * ↑a ^ 2 * ↑x) *
        (jacobiTheta₂' (↑a * I * ↑x) (I * ↑x) / (2 * ↑π * I) + ↑a * jacobiTheta₂ (↑a * I * ↑x) (I * ↑x)))
    (Ioi 0)
state_after: case H.refine_1
a x : ℝ
hx : x ∈ Ioi 0
⊢ Continuous fun x => cexp (-↑π * ↑a ^ 2 * ↑x)

case H.refine_2
a x : ℝ
hx : x ∈ Ioi 0
⊢ ContinuousAt (fun x => jacobiTheta₂' (↑a * I * ↑x) (I * ↑x) / (2 * ↑π * I) + ↑a * jacobiTheta₂ (↑a * I * ↑x) (I * ↑x))
    x

tactic: fun_prop
state_before: case H.refine_1
a x : ℝ
hx : x ∈ Ioi 0
⊢ Continuous fun x => cexp (-↑π * ↑a ^ 2 * ↑x)
state_after: no goals

tactic: have hf : Continuous fun u : ℝ ↦ (a * I * u, I * u) := by fun_prop
state_before: case H.refine_2
a x : ℝ
hx : x ∈ Ioi 0
⊢ ContinuousAt (fun x => jacobiTheta₂' (↑a * I * ↑x) (I * ↑x) / (2 * ↑π * I) + ↑a * jacobiTheta₂ (↑a * I * ↑x) (I * ↑x))
    x
state_after: case H.refine_2
a x : ℝ
hx : x ∈ Ioi 0
hf : Continuous fun u => (↑a * I * ↑u, I * ↑u)
⊢ ContinuousAt (fun x => jacobiTheta₂' (↑a * I * ↑x) (I * ↑x) / (2 * ↑π * I) + ↑a * jacobiTheta₂ (↑a * I * ↑x) (I * ↑x))
    x

tactic: apply ContinuousAt.add
state_before: case H.refine_2
a x : ℝ
hx : x ∈ Ioi 0
hf : Continuous fun u => (↑a * I * ↑u, I * ↑u)
⊢ ContinuousAt (fun x => jacobiTheta₂' (↑a * I * ↑x) (I * ↑x) / (2 * ↑π * I) + ↑a * jacobiTheta₂ (↑a * I * ↑x) (I * ↑x))
    x
state_after: case H.refine_2.hf
a x : ℝ
hx : x ∈ Ioi 0
hf : Continuous fun u => (↑a * I * ↑u, I * ↑u)
⊢ ContinuousAt (fun x => jacobiTheta₂' (↑a * I * ↑x) (I * ↑x) / (2 * ↑π * I)) x

case H.refine_2.hg
a x : ℝ
hx : x ∈ Ioi 0
hf : Continuous fun u => (↑a * I * ↑u, I * ↑u)
⊢ ContinuousAt (fun x => ↑a * jacobiTheta₂ (↑a * I * ↑x) (I * ↑x)) x

tactic: fun_prop
state_before: a x : ℝ
hx : x ∈ Ioi 0
⊢ Continuous fun u => (↑a * I * ↑u, I * ↑u)
state_after: no goals

tactic: exact ((continuousAt_jacobiTheta₂' (a * I * x) (by rwa [I_mul_im, ofReal_re])).comp
  (f := fun u : ℝ ↦ (a * I * u, I * u)) hf.continuousAt).div_const _
state_before: case H.refine_2.hf
a x : ℝ
hx : x ∈ Ioi 0
hf : Continuous fun u => (↑a * I * ↑u, I * ↑u)
⊢ ContinuousAt (fun x => jacobiTheta₂' (↑a * I * ↑x) (I * ↑x) / (2 * ↑π * I)) x
state_after: no goals

tactic: rwa [I_mul_im, ofReal_re]
state_before: a x : ℝ
hx : x ∈ Ioi 0
hf : Continuous fun u => (↑a * I * ↑u, I * ↑u)
⊢ 0 < (I * ↑x).im
state_after: no goals

tactic: exact continuousAt_const.mul <| (continuousAt_jacobiTheta₂ (a * I * x)
  (by rwa [I_mul_im, ofReal_re])).comp (f := fun u : ℝ ↦ (a * I * u, I * u)) hf.continuousAt
state_before: case H.refine_2.hg
a x : ℝ
hx : x ∈ Ioi 0
hf : Continuous fun u => (↑a * I * ↑u, I * ↑u)
⊢ ContinuousAt (fun x => ↑a * jacobiTheta₂ (↑a * I * ↑x) (I * ↑x)) x
state_after: no goals