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

tactic: let c (n : ℤ) : ℂ := -I * cexp (2 * π * I * a * n) / 2
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
⊢ HasSum (fun n => (s + 1).Gammaℝ * -I * ↑n.sign * cexp (2 * ↑π * I * ↑a * ↑n) / ↑|n| ^ s / 2) (completedSinZeta (↑a) s)
state_after: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
⊢ HasSum (fun n => (s + 1).Gammaℝ * -I * ↑n.sign * cexp (2 * ↑π * I * ↑a * ↑n) / ↑|n| ^ s / 2) (completedSinZeta (↑a) s)

tactic: have hc (n : ℤ) : ‖c n‖ = 1 / 2 := by
  simp_rw [c, (by { push_cast; ring } : 2 * π * I * a * n = ↑(2 * π * a * n) * I), norm_div,
    RCLike.norm_ofNat, norm_mul, norm_neg, norm_I, one_mul, norm_exp_ofReal_mul_I]
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
⊢ HasSum (fun n => (s + 1).Gammaℝ * -I * ↑n.sign * cexp (2 * ↑π * I * ↑a * ↑n) / ↑|n| ^ s / 2) (completedSinZeta (↑a) s)
state_after: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
hc : ∀ (n : ℤ), ‖c n‖ = 1 / 2
⊢ HasSum (fun n => (s + 1).Gammaℝ * -I * ↑n.sign * cexp (2 * ↑π * I * ↑a * ↑n) / ↑|n| ^ s / 2) (completedSinZeta (↑a) s)

tactic: have hF t (ht : 0 < t) :
    HasSum (fun n ↦ c n * n * rexp (-π * n ^ 2 * t)) (sinKernel a t / 2) := by
  refine ((hasSum_int_sinKernel a ht).div_const 2).congr_fun fun n ↦ ?_
  rw [div_mul_eq_mul_div, div_mul_eq_mul_div, mul_right_comm (-I)]
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
hc : ∀ (n : ℤ), ‖c n‖ = 1 / 2
⊢ HasSum (fun n => (s + 1).Gammaℝ * -I * ↑n.sign * cexp (2 * ↑π * I * ↑a * ↑n) / ↑|n| ^ s / 2) (completedSinZeta (↑a) s)
state_after: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
hc : ∀ (n : ℤ), ‖c n‖ = 1 / 2
hF : ∀ (t : ℝ), 0 < t → HasSum (fun n => c n * ↑n * ↑(rexp (-π * ↑n ^ 2 * t))) (↑(sinKernel (↑a) t) / 2)
⊢ HasSum (fun n => (s + 1).Gammaℝ * -I * ↑n.sign * cexp (2 * ↑π * I * ↑a * ↑n) / ↑|n| ^ s / 2) (completedSinZeta (↑a) s)

tactic: refine (mellin_div_const .. ▸ hasSum_mellin_pi_mul_sq' (zero_lt_one.trans hs) hF h_sum).congr_fun
  fun n ↦ ?_
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
hc : ∀ (n : ℤ), ‖c n‖ = 1 / 2
hF : ∀ (t : ℝ), 0 < t → HasSum (fun n => c n * ↑n * ↑(rexp (-π * ↑n ^ 2 * t))) (↑(sinKernel (↑a) t) / 2)
h_sum : Summable fun i => ‖c i‖ / |↑i| ^ s.re
⊢ HasSum (fun n => (s + 1).Gammaℝ * -I * ↑n.sign * cexp (2 * ↑π * I * ↑a * ↑n) / ↑|n| ^ s / 2) (completedSinZeta (↑a) s)
state_after: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
hc : ∀ (n : ℤ), ‖c n‖ = 1 / 2
hF : ∀ (t : ℝ), 0 < t → HasSum (fun n => c n * ↑n * ↑(rexp (-π * ↑n ^ 2 * t))) (↑(sinKernel (↑a) t) / 2)
h_sum : Summable fun i => ‖c i‖ / |↑i| ^ s.re
n : ℤ
⊢ (s + 1).Gammaℝ * -I * ↑n.sign * cexp (2 * ↑π * I * ↑a * ↑n) / ↑|n| ^ s / 2 =
    (s + 1).Gammaℝ * c n * ↑(SignType.sign ↑n) / ↑|↑n| ^ s

tactic: simp only [Int.sign_eq_sign, SignType.intCast_cast, sign_intCast, ← Int.cast_abs, ofReal_intCast]
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
hc : ∀ (n : ℤ), ‖c n‖ = 1 / 2
hF : ∀ (t : ℝ), 0 < t → HasSum (fun n => c n * ↑n * ↑(rexp (-π * ↑n ^ 2 * t))) (↑(sinKernel (↑a) t) / 2)
h_sum : Summable fun i => ‖c i‖ / |↑i| ^ s.re
n : ℤ
⊢ (s + 1).Gammaℝ * -I * ↑n.sign * cexp (2 * ↑π * I * ↑a * ↑n) / ↑|n| ^ s / 2 =
    (s + 1).Gammaℝ * c n * ↑(SignType.sign ↑n) / ↑|↑n| ^ s
state_after: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
hc : ∀ (n : ℤ), ‖c n‖ = 1 / 2
hF : ∀ (t : ℝ), 0 < t → HasSum (fun n => c n * ↑n * ↑(rexp (-π * ↑n ^ 2 * t))) (↑(sinKernel (↑a) t) / 2)
h_sum : Summable fun i => ‖c i‖ / |↑i| ^ s.re
n : ℤ
⊢ (s + 1).Gammaℝ * -I * ↑(SignType.sign n) * cexp (2 * ↑π * I * ↑a * ↑n) / ↑|n| ^ s / 2 =
    (s + 1).Gammaℝ * c n * ↑(SignType.sign n) / ↑|n| ^ s

tactic: ring
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
hc : ∀ (n : ℤ), ‖c n‖ = 1 / 2
hF : ∀ (t : ℝ), 0 < t → HasSum (fun n => c n * ↑n * ↑(rexp (-π * ↑n ^ 2 * t))) (↑(sinKernel (↑a) t) / 2)
h_sum : Summable fun i => ‖c i‖ / |↑i| ^ s.re
n : ℤ
⊢ (s + 1).Gammaℝ * -I * ↑(SignType.sign n) * cexp (2 * ↑π * I * ↑a * ↑n) / ↑|n| ^ s / 2 =
    (s + 1).Gammaℝ * c n * ↑(SignType.sign n) / ↑|n| ^ s
state_after: no goals

tactic: simp_rw [c, (by { push_cast; ring } : 2 * π * I * a * n = ↑(2 * π * a * n) * I), norm_div,
  RCLike.norm_ofNat, norm_mul, norm_neg, norm_I, one_mul, norm_exp_ofReal_mul_I]
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
n : ℤ
⊢ ‖c n‖ = 1 / 2
state_after: no goals

tactic: push_cast
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
n : ℤ
⊢ 2 * ↑π * I * ↑a * ↑n = ↑(2 * π * a * ↑n) * I
state_after: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
n : ℤ
⊢ 2 * ↑π * I * ↑a * ↑n = 2 * ↑π * ↑a * ↑n * I

tactic: ring
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
n : ℤ
⊢ 2 * ↑π * I * ↑a * ↑n = 2 * ↑π * ↑a * ↑n * I
state_after: no goals

tactic: refine ((hasSum_int_sinKernel a ht).div_const 2).congr_fun fun n ↦ ?_
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
hc : ∀ (n : ℤ), ‖c n‖ = 1 / 2
t : ℝ
ht : 0 < t
⊢ HasSum (fun n => c n * ↑n * ↑(rexp (-π * ↑n ^ 2 * t))) (↑(sinKernel (↑a) t) / 2)
state_after: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
hc : ∀ (n : ℤ), ‖c n‖ = 1 / 2
t : ℝ
ht : 0 < t
n : ℤ
⊢ c n * ↑n * ↑(rexp (-π * ↑n ^ 2 * t)) = -I * ↑n * cexp (2 * ↑π * I * ↑a * ↑n) * ↑(rexp (-π * ↑n ^ 2 * t)) / 2

tactic: rw [div_mul_eq_mul_div, div_mul_eq_mul_div, mul_right_comm (-I)]
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
hc : ∀ (n : ℤ), ‖c n‖ = 1 / 2
t : ℝ
ht : 0 < t
n : ℤ
⊢ c n * ↑n * ↑(rexp (-π * ↑n ^ 2 * t)) = -I * ↑n * cexp (2 * ↑π * I * ↑a * ↑n) * ↑(rexp (-π * ↑n ^ 2 * t)) / 2
state_after: no goals

tactic: simp_rw [hc, div_right_comm]
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
hc : ∀ (n : ℤ), ‖c n‖ = 1 / 2
hF : ∀ (t : ℝ), 0 < t → HasSum (fun n => c n * ↑n * ↑(rexp (-π * ↑n ^ 2 * t))) (↑(sinKernel (↑a) t) / 2)
⊢ Summable fun i => ‖c i‖ / |↑i| ^ s.re
state_after: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
hc : ∀ (n : ℤ), ‖c n‖ = 1 / 2
hF : ∀ (t : ℝ), 0 < t → HasSum (fun n => c n * ↑n * ↑(rexp (-π * ↑n ^ 2 * t))) (↑(sinKernel (↑a) t) / 2)
⊢ Summable fun i => 1 / |↑i| ^ s.re / 2

tactic: apply Summable.div_const
state_before: a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
hc : ∀ (n : ℤ), ‖c n‖ = 1 / 2
hF : ∀ (t : ℝ), 0 < t → HasSum (fun n => c n * ↑n * ↑(rexp (-π * ↑n ^ 2 * t))) (↑(sinKernel (↑a) t) / 2)
⊢ Summable fun i => 1 / |↑i| ^ s.re / 2
state_after: case h
a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
hc : ∀ (n : ℤ), ‖c n‖ = 1 / 2
hF : ∀ (t : ℝ), 0 < t → HasSum (fun n => c n * ↑n * ↑(rexp (-π * ↑n ^ 2 * t))) (↑(sinKernel (↑a) t) / 2)
⊢ Summable fun i => 1 / |↑i| ^ s.re

tactic: simp only [Int.cast_neg, abs_neg, Int.cast_natCast, Nat.abs_cast]
state_before: case h.hf₂
a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
hc : ∀ (n : ℤ), ‖c n‖ = 1 / 2
hF : ∀ (t : ℝ), 0 < t → HasSum (fun n => c n * ↑n * ↑(rexp (-π * ↑n ^ 2 * t))) (↑(sinKernel (↑a) t) / 2)
⊢ Summable fun n => 1 / |↑(-↑n)| ^ s.re
state_after: case h.hf₂
a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
hc : ∀ (n : ℤ), ‖c n‖ = 1 / 2
hF : ∀ (t : ℝ), 0 < t → HasSum (fun n => c n * ↑n * ↑(rexp (-π * ↑n ^ 2 * t))) (↑(sinKernel (↑a) t) / 2)
⊢ Summable fun n => 1 / ↑n ^ s.re

tactic: rwa [summable_one_div_nat_rpow]
state_before: case h.hf₂
a : ℝ
s : ℂ
hs : 1 < s.re
c : ℤ → ℂ := fun n => -I * cexp (2 * ↑π * I * ↑a * ↑n) / 2
hc : ∀ (n : ℤ), ‖c n‖ = 1 / 2
hF : ∀ (t : ℝ), 0 < t → HasSum (fun n => c n * ↑n * ↑(rexp (-π * ↑n ^ 2 * t))) (↑(sinKernel (↑a) t) / 2)
⊢ Summable fun n => 1 / ↑n ^ s.re
state_after: no goals