File: Mathlib/NumberTheory/LSeries/HurwitzZetaOdd.lean

full_name: HurwitzZeta.jacobiTheta₂''
code: /-- Variant of `jacobiTheta₂'` which we introduce to simplify some formulae. -/
def jacobiTheta₂'' (z τ : ℂ) : ℂ 
goal: ℂ

full_name: HurwitzZeta.jacobiTheta₂''_conj
code: lemma jacobiTheta₂''_conj (z τ : ℂ) :
    conj (jacobiTheta₂'' z τ) = jacobiTheta₂'' (conj z) (-conj τ) 
goal: (starRingEnd ℂ) (HurwitzZeta.jacobiTheta₂'' z τ) = HurwitzZeta.jacobiTheta₂'' ((starRingEnd ℂ) z) (-(starRingEnd ℂ) τ)

full_name: HurwitzZeta.jacobiTheta₂''_add_left
code: /-- Restatement of `jacobiTheta₂'_add_left'`: the function `jacobiTheta₂''` is 1-periodic in `z`. -/
lemma jacobiTheta₂''_add_left (z τ : ℂ) : jacobiTheta₂'' (z + 1) τ = jacobiTheta₂'' z τ 
goal: HurwitzZeta.jacobiTheta₂'' (z + 1) τ = HurwitzZeta.jacobiTheta₂'' z τ

full_name: HurwitzZeta.jacobiTheta₂''_neg_left
code: lemma jacobiTheta₂''_neg_left (z τ : ℂ) : jacobiTheta₂'' (-z) τ = -jacobiTheta₂'' z τ 
goal: HurwitzZeta.jacobiTheta₂'' (-z) τ = -HurwitzZeta.jacobiTheta₂'' z τ

full_name: HurwitzZeta.jacobiTheta₂'_functional_equation'
code: lemma jacobiTheta₂'_functional_equation' (z τ : ℂ) :
    jacobiTheta₂' z τ = (-2 * π) / (-I * τ) ^ (3 / 2 : ℂ) * jacobiTheta₂'' z (-1 / τ) 
goal: jacobiTheta₂' z τ = -2 * ↑π / (-Complex.I * τ) ^ (3 / 2) * HurwitzZeta.jacobiTheta₂'' z (-1 / τ)

full_name: HurwitzZeta.oddKernel
code: /-- Odd Hurwitz zeta kernel (function whose Mellin transform will be the odd part of the completed
Hurwitz zeta function). See `oddKernel_def` for the defining formula, and `hasSum_int_oddKernel`
for an expression as a sum over `ℤ`.
-/
@[irreducible] def oddKernel (a : UnitAddCircle) (x : ℝ) : ℝ 
goal: ℝ

full_name: HurwitzZeta.oddKernel_def
code: lemma oddKernel_def (a x : ℝ) : ↑(oddKernel a x) = jacobiTheta₂'' a (I * x) 
goal: ↑(HurwitzZeta.oddKernel (↑a) x) = HurwitzZeta.jacobiTheta₂'' (↑a) (Complex.I * ↑x)

full_name: HurwitzZeta.oddKernel_def'
code: lemma oddKernel_def' (a x : ℝ) : ↑(oddKernel ↑a x) = cexp (-π * a ^ 2 * x) *
    (jacobiTheta₂' (a * I * x) (I * x) / (2 * π * I) + a * jacobiTheta₂ (a * I * x) (I * x)) 
goal: ↑(HurwitzZeta.oddKernel (↑a) x) =
  cexp (-↑π * ↑a ^ 2 * ↑x) *
    (jacobiTheta₂' (↑a * Complex.I * ↑x) (Complex.I * ↑x) / (2 * ↑π * Complex.I) +
      ↑a * jacobiTheta₂ (↑a * Complex.I * ↑x) (Complex.I * ↑x))

full_name: HurwitzZeta.oddKernel_undef
code: lemma oddKernel_undef (a : UnitAddCircle) {x : ℝ} (hx : x ≤ 0) : oddKernel a x = 0 
goal: HurwitzZeta.oddKernel a x = 0

full_name: HurwitzZeta.sinKernel
code: /-- Auxiliary function appearing in the functional equation for the odd Hurwitz zeta kernel, equal
to `∑ (n : ℕ), 2 * n * sin (2 * π * n * a) * exp (-π * n ^ 2 * x)`. See `hasSum_nat_sinKernel`
for the defining sum. -/
@[irreducible] def sinKernel (a : UnitAddCircle) (x : ℝ) : ℝ 
goal: ℝ

full_name: HurwitzZeta.sinKernel_def
code: lemma sinKernel_def (a x : ℝ) : ↑(sinKernel ↑a x) = jacobiTheta₂' a (I * x) / (-2 * π) 
goal: ↑(HurwitzZeta.sinKernel (↑a) x) = jacobiTheta₂' (↑a) (Complex.I * ↑x) / (-2 * ↑π)

full_name: HurwitzZeta.sinKernel_undef
code: lemma sinKernel_undef (a : UnitAddCircle) {x : ℝ} (hx : x ≤ 0) : sinKernel a x = 0 
goal: HurwitzZeta.sinKernel a x = 0

full_name: HurwitzZeta.oddKernel_neg
code: lemma oddKernel_neg (a : UnitAddCircle) (x : ℝ) : oddKernel (-a) x = -oddKernel a x 
goal: HurwitzZeta.oddKernel (-a) x = -HurwitzZeta.oddKernel a x

full_name: HurwitzZeta.oddKernel_zero
code: lemma oddKernel_zero (x : ℝ) : oddKernel 0 x = 0 
goal: HurwitzZeta.oddKernel 0 x = 0

full_name: HurwitzZeta.sinKernel_neg
code: lemma sinKernel_neg (a : UnitAddCircle) (x : ℝ) :
    sinKernel (-a) x = -sinKernel a x 
goal: HurwitzZeta.sinKernel (-a) x = -HurwitzZeta.sinKernel a x

full_name: HurwitzZeta.sinKernel_zero
code: lemma sinKernel_zero (x : ℝ) : sinKernel 0 x = 0 
goal: HurwitzZeta.sinKernel 0 x = 0

full_name: HurwitzZeta.continuousOn_oddKernel
code: /-- The odd kernel is continuous on `Ioi 0`. -/
lemma continuousOn_oddKernel (a : UnitAddCircle) : ContinuousOn (oddKernel a) (Ioi 0) 
goal: ContinuousOn (HurwitzZeta.oddKernel a) (Set.Ioi 0)

full_name: HurwitzZeta.continuousOn_sinKernel
code: lemma continuousOn_sinKernel (a : UnitAddCircle) : ContinuousOn (sinKernel a) (Ioi 0) 
goal: ContinuousOn (HurwitzZeta.sinKernel a) (Set.Ioi 0)

full_name: HurwitzZeta.oddKernel_functional_equation
code: lemma oddKernel_functional_equation (a : UnitAddCircle) (x : ℝ) :
    oddKernel a x = 1 / x ^ (3 / 2 : ℝ) * sinKernel a (1 / x) 
goal: HurwitzZeta.oddKernel a x = 1 / x ^ (3 / 2) * HurwitzZeta.sinKernel a (1 / x)

full_name: HurwitzZeta.hasSum_int_oddKernel
code: lemma hasSum_int_oddKernel (a : ℝ) {x : ℝ} (hx : 0 < x) :
    HasSum (fun n : ℤ ↦ (n + a) * rexp (-π * (n + a) ^ 2 * x)) (oddKernel ↑a x) 
goal: HasSum (fun n => (↑n + a) * rexp (-π * (↑n + a) ^ 2 * x)) (HurwitzZeta.oddKernel (↑a) x)

full_name: HurwitzZeta.hasSum_int_sinKernel
code: lemma hasSum_int_sinKernel (a : ℝ) {t : ℝ} (ht : 0 < t) : HasSum
    (fun n : ℤ ↦ -I * n * cexp (2 * π * I * a * n) * rexp (-π * n ^ 2 * t)) ↑(sinKernel a t) 
goal: HasSum (fun n => -Complex.I * ↑n * cexp (2 * ↑π * Complex.I * ↑a * ↑n) * ↑(rexp (-π * ↑n ^ 2 * t)))
  ↑(HurwitzZeta.sinKernel (↑a) t)

full_name: HurwitzZeta.hasSum_nat_sinKernel
code: lemma hasSum_nat_sinKernel (a : ℝ) {t : ℝ} (ht : 0 < t) :
    HasSum (fun n : ℕ ↦ 2 * n * Real.sin (2 * π * a * n) * rexp (-π * n ^ 2 * t))
    (sinKernel ↑a t) 
goal: HasSum (fun n => 2 * ↑n * Real.sin (2 * π * a * ↑n) * rexp (-π * ↑n ^ 2 * t)) (HurwitzZeta.sinKernel (↑a) t)

full_name: HurwitzZeta.isBigO_atTop_oddKernel
code: /-- The function `oddKernel a` has exponential decay at `+∞`, for any `a`. -/
lemma isBigO_atTop_oddKernel (a : UnitAddCircle) :
    ∃ p, 0 < p ∧ IsBigO atTop (oddKernel a) (fun x ↦ Real.exp (-p * x)) 
goal: ∃ p, 0 < p ∧ HurwitzZeta.oddKernel a =O[Filter.atTop] fun x => rexp (-p * x)

full_name: HurwitzZeta.isBigO_atTop_sinKernel
code: /-- The function `sinKernel a` has exponential decay at `+∞`, for any `a`. -/
lemma isBigO_atTop_sinKernel (a : UnitAddCircle) :
    ∃ p, 0 < p ∧ IsBigO atTop (sinKernel a) (fun x ↦ Real.exp (-p * x)) 
goal: ∃ p, 0 < p ∧ HurwitzZeta.sinKernel a =O[Filter.atTop] fun x => rexp (-p * x)

full_name: HurwitzZeta.hurwitzOddFEPair_k
code: /-- A `StrongFEPair` structure with `f = oddKernel a` and `g = sinKernel a`. -/
@[simps]
def hurwitzOddFEPair (a : UnitAddCircle) : StrongFEPair ℂ 
goal: (HurwitzZeta.hurwitzOddFEPair a).k = 3 / 2

full_name: HurwitzZeta.hurwitzOddFEPair
code: /-- A `StrongFEPair` structure with `f = oddKernel a` and `g = sinKernel a`. -/
@[simps]
def hurwitzOddFEPair (a : UnitAddCircle) : StrongFEPair ℂ 
goal: StrongFEPair ℂ

full_name: HurwitzZeta.hurwitzOddFEPair_f
code: /-- A `StrongFEPair` structure with `f = oddKernel a` and `g = sinKernel a`. -/
@[simps]
def hurwitzOddFEPair (a : UnitAddCircle) : StrongFEPair ℂ 
goal: ∀ (a_1 : ℝ), (HurwitzZeta.hurwitzOddFEPair a).f a_1 = (Complex.ofReal' ∘ HurwitzZeta.oddKernel a) a_1

full_name: HurwitzZeta.hurwitzOddFEPair_ε
code: /-- A `StrongFEPair` structure with `f = oddKernel a` and `g = sinKernel a`. -/
@[simps]
def hurwitzOddFEPair (a : UnitAddCircle) : StrongFEPair ℂ 
goal: (HurwitzZeta.hurwitzOddFEPair a).ε = 1

full_name: HurwitzZeta.hurwitzOddFEPair_g₀
code: /-- A `StrongFEPair` structure with `f = oddKernel a` and `g = sinKernel a`. -/
@[simps]
def hurwitzOddFEPair (a : UnitAddCircle) : StrongFEPair ℂ 
goal: (HurwitzZeta.hurwitzOddFEPair a).g₀ = 0

full_name: HurwitzZeta.hurwitzOddFEPair_f₀
code: /-- A `StrongFEPair` structure with `f = oddKernel a` and `g = sinKernel a`. -/
@[simps]
def hurwitzOddFEPair (a : UnitAddCircle) : StrongFEPair ℂ 
goal: (HurwitzZeta.hurwitzOddFEPair a).f₀ = 0

full_name: HurwitzZeta.hurwitzOddFEPair_g
code: /-- A `StrongFEPair` structure with `f = oddKernel a` and `g = sinKernel a`. -/
@[simps]
def hurwitzOddFEPair (a : UnitAddCircle) : StrongFEPair ℂ 
goal: ∀ (a_1 : ℝ), (HurwitzZeta.hurwitzOddFEPair a).g a_1 = (Complex.ofReal' ∘ HurwitzZeta.sinKernel a) a_1

full_name: HurwitzZeta.completedHurwitzZetaOdd
code: /-- The entire function of `s` which agrees with
`1 / 2 * Gamma ((s + 1) / 2) * π ^ (-(s + 1) / 2) * ∑' (n : ℤ), sgn (n + a) / |n + a| ^ s`
for `1 < re s`.
-/
def completedHurwitzZetaOdd (a : UnitAddCircle) (s : ℂ) : ℂ 
goal: ℂ

full_name: HurwitzZeta.differentiable_completedHurwitzZetaOdd
code: lemma differentiable_completedHurwitzZetaOdd (a : UnitAddCircle) :
    Differentiable ℂ (completedHurwitzZetaOdd a) 
goal: Differentiable ℂ (HurwitzZeta.completedHurwitzZetaOdd a)

full_name: HurwitzZeta.completedSinZeta
code: /-- The entire function of `s` which agrees with
` Gamma ((s + 1) / 2) * π ^ (-(s + 1) / 2) * ∑' (n : ℕ), sin (2 * π * a * n) / n ^ s`
for `1 < re s`.
-/
def completedSinZeta (a : UnitAddCircle) (s : ℂ) : ℂ 
goal: ℂ

full_name: HurwitzZeta.differentiable_completedSinZeta
code: lemma differentiable_completedSinZeta (a : UnitAddCircle) :
    Differentiable ℂ (completedSinZeta a) 
goal: Differentiable ℂ (HurwitzZeta.completedSinZeta a)

full_name: HurwitzZeta.completedHurwitzZetaOdd_neg
code: lemma completedHurwitzZetaOdd_neg (a : UnitAddCircle) (s : ℂ) :
    completedHurwitzZetaOdd (-a) s = -completedHurwitzZetaOdd a s 
goal: HurwitzZeta.completedHurwitzZetaOdd (-a) s = -HurwitzZeta.completedHurwitzZetaOdd a s

full_name: HurwitzZeta.completedSinZeta_neg
code: lemma completedSinZeta_neg (a : UnitAddCircle) (s : ℂ) :
    completedSinZeta (-a) s = -completedSinZeta a s 
goal: HurwitzZeta.completedSinZeta (-a) s = -HurwitzZeta.completedSinZeta a s

full_name: HurwitzZeta.completedHurwitzZetaOdd_one_sub
code: /-- Functional equation for the odd Hurwitz zeta function. -/
theorem completedHurwitzZetaOdd_one_sub (a : UnitAddCircle) (s : ℂ) :
    completedHurwitzZetaOdd a (1 - s) = completedSinZeta a s 
goal: HurwitzZeta.completedHurwitzZetaOdd a (1 - s) = HurwitzZeta.completedSinZeta a s

full_name: HurwitzZeta.completedSinZeta_one_sub
code: /-- Functional equation for the odd Hurwitz zeta function (alternative form). -/
lemma completedSinZeta_one_sub (a : UnitAddCircle) (s : ℂ) :
    completedSinZeta a (1 - s) = completedHurwitzZetaOdd a s 
goal: HurwitzZeta.completedSinZeta a (1 - s) = HurwitzZeta.completedHurwitzZetaOdd a s

full_name: HurwitzZeta.hasSum_int_completedSinZeta
code: /-- Formula for `completedSinZeta` as a Dirichlet series in the convergence range
(first version, with sum over `ℤ`). -/
lemma hasSum_int_completedSinZeta (a : ℝ) {s : ℂ} (hs : 1 < re s) :
    HasSum (fun n : ℤ ↦ Gammaℝ (s + 1) * (-I) * Int.sign n *
    cexp (2 * π * I * a * n) / (↑|n| : ℂ) ^ s / 2) (completedSinZeta a s) 
goal: HasSum (fun n => (s + 1).Gammaℝ * -Complex.I * ↑n.sign * cexp (2 * ↑π * Complex.I * ↑a * ↑n) / ↑|n| ^ s / 2)
  (HurwitzZeta.completedSinZeta (↑a) s)

full_name: HurwitzZeta.hasSum_nat_completedSinZeta
code: /-- Formula for `completedSinZeta` as a Dirichlet series in the convergence range
(second version, with sum over `ℕ`). -/
lemma hasSum_nat_completedSinZeta (a : ℝ) {s : ℂ} (hs : 1 < re s) :
    HasSum (fun n : ℕ ↦ Gammaℝ (s + 1) * Real.sin (2 * π * a * n) / (n : ℂ) ^ s)
    (completedSinZeta a s) 
goal: HasSum (fun n => (s + 1).Gammaℝ * ↑(Real.sin (2 * π * a * ↑n)) / ↑n ^ s) (HurwitzZeta.completedSinZeta (↑a) s)

full_name: HurwitzZeta.hasSum_int_completedHurwitzZetaOdd
code: /-- Formula for `completedHurwitzZetaOdd` as a Dirichlet series in the convergence range. -/
lemma hasSum_int_completedHurwitzZetaOdd (a : ℝ) {s : ℂ} (hs : 1 < re s) :
    HasSum (fun n : ℤ ↦ Gammaℝ (s + 1) * SignType.sign (n + a) / (↑|n + a| : ℂ) ^ s / 2)
    (completedHurwitzZetaOdd a s) 
goal: HasSum (fun n => (s + 1).Gammaℝ * ↑(SignType.sign (↑n + a)) / ↑|↑n + a| ^ s / 2)
  (HurwitzZeta.completedHurwitzZetaOdd (↑a) s)

full_name: HurwitzZeta.hurwitzZetaOdd
code: /-- The odd part of the Hurwitz zeta function, i.e. the meromorphic function of `s` which agrees
with `1 / 2 * ∑' (n : ℤ), sign (n + a) / |n + a| ^ s` for `1 < re s`-/
noncomputable def hurwitzZetaOdd (a : UnitAddCircle) (s : ℂ) 
goal: ℂ

full_name: HurwitzZeta.hurwitzZetaOdd_neg
code: lemma hurwitzZetaOdd_neg (a : UnitAddCircle) (s : ℂ) :
    hurwitzZetaOdd (-a) s = -hurwitzZetaOdd a s 
goal: HurwitzZeta.hurwitzZetaOdd (-a) s = -HurwitzZeta.hurwitzZetaOdd a s

full_name: HurwitzZeta.differentiable_hurwitzZetaOdd
code: /-- The odd Hurwitz zeta function is differentiable everywhere. -/
lemma differentiable_hurwitzZetaOdd (a : UnitAddCircle) :
    Differentiable ℂ (hurwitzZetaOdd a) 
goal: Differentiable ℂ (HurwitzZeta.hurwitzZetaOdd a)

full_name: HurwitzZeta.sinZeta
code: /-- The sine zeta function, i.e. the meromorphic function of `s` which agrees
with `∑' (n : ℕ), sin (2 * π * a * n) / n ^ s` for `1 < re s`. -/
noncomputable def sinZeta (a : UnitAddCircle) (s : ℂ) 
goal: ℂ

full_name: HurwitzZeta.sinZeta_neg
code: lemma sinZeta_neg (a : UnitAddCircle) (s : ℂ) :
    sinZeta (-a) s = -sinZeta a s 
goal: HurwitzZeta.sinZeta (-a) s = -HurwitzZeta.sinZeta a s

full_name: HurwitzZeta.differentiableAt_sinZeta
code: /-- The sine zeta function is differentiable everywhere. -/
lemma differentiableAt_sinZeta (a : UnitAddCircle) :
    Differentiable ℂ (sinZeta a) 
goal: Differentiable ℂ (HurwitzZeta.sinZeta a)

full_name: HurwitzZeta.hasSum_int_hurwitzZetaOdd
code: /-- Formula for `hurwitzZetaOdd` as a Dirichlet series in the convergence range (sum over `ℤ`). -/
theorem hasSum_int_hurwitzZetaOdd (a : ℝ) {s : ℂ} (hs : 1 < re s) :
    HasSum (fun n : ℤ ↦ SignType.sign (n + a) / (↑|n + a| : ℂ) ^ s / 2) (hurwitzZetaOdd a s) 
goal: HasSum (fun n => ↑(SignType.sign (↑n + a)) / ↑|↑n + a| ^ s / 2) (HurwitzZeta.hurwitzZetaOdd (↑a) s)

full_name: HurwitzZeta.hasSum_nat_hurwitzZetaOdd
code: /-- Formula for `hurwitzZetaOdd` as a Dirichlet series in the convergence range, with sum over `ℕ`
(version with absolute values) -/
lemma hasSum_nat_hurwitzZetaOdd (a : ℝ) {s : ℂ} (hs : 1 < re s) :
    HasSum (fun n : ℕ ↦ (SignType.sign (n + a) / (↑|n + a| : ℂ) ^ s
      - SignType.sign (n + 1 - a) / (↑|n + 1 - a| : ℂ) ^ s) / 2) (hurwitzZetaOdd a s) 
goal: HasSum (fun n => (↑(SignType.sign (↑n + a)) / ↑|↑n + a| ^ s - ↑(SignType.sign (↑n + 1 - a)) / ↑|↑n + 1 - a| ^ s) / 2)
  (HurwitzZeta.hurwitzZetaOdd (↑a) s)

full_name: HurwitzZeta.hasSum_nat_hurwitzZetaOdd_of_mem_Icc
code: /-- Formula for `hurwitzZetaOdd` as a Dirichlet series in the convergence range, with sum over `ℕ`
(version without absolute values, assuming `a ∈ Icc 0 1`) -/
lemma hasSum_nat_hurwitzZetaOdd_of_mem_Icc {a : ℝ} (ha : a ∈ Icc 0 1) {s : ℂ} (hs : 1 < re s) :
    HasSum (fun n : ℕ ↦ (1 / (n + a : ℂ) ^ s - 1 / (n + 1 - a : ℂ) ^ s) / 2)
    (hurwitzZetaOdd a s) 
goal: HasSum (fun n => (1 / (↑n + ↑a) ^ s - 1 / (↑n + 1 - ↑a) ^ s) / 2) (HurwitzZeta.hurwitzZetaOdd (↑a) s)

full_name: HurwitzZeta.hasSum_int_sinZeta
code: /-- Formula for `sinZeta` as a Dirichlet series in the convergence range, with sum over `ℤ`. -/
theorem hasSum_int_sinZeta (a : ℝ) {s : ℂ} (hs : 1 < re s) :
    HasSum (fun n : ℤ ↦ -I * n.sign * cexp (2 * π * I * a * n) / ↑|n| ^ s / 2) (sinZeta a s) 
goal: HasSum (fun n => -Complex.I * ↑n.sign * cexp (2 * ↑π * Complex.I * ↑a * ↑n) / ↑|n| ^ s / 2) (HurwitzZeta.sinZeta (↑a) s)

full_name: HurwitzZeta.hasSum_nat_sinZeta
code: /-- Formula for `sinZeta` as a Dirichlet series in the convergence range, with sum over `ℕ`. -/
lemma hasSum_nat_sinZeta (a : ℝ) {s : ℂ} (hs : 1 < re s) :
    HasSum (fun n : ℕ ↦ Real.sin (2 * π * a * n) / (n : ℂ) ^ s) (sinZeta a s) 
goal: HasSum (fun n => ↑(Real.sin (2 * π * a * ↑n)) / ↑n ^ s) (HurwitzZeta.sinZeta (↑a) s)

full_name: HurwitzZeta.LSeriesHasSum_sin
code: /-- Reformulation of `hasSum_nat_sinZeta` using `LSeriesHasSum`. -/
lemma LSeriesHasSum_sin (a : ℝ) {s : ℂ} (hs : 1 < re s) :
    LSeriesHasSum (Real.sin <| 2 * π * a * ·) s (sinZeta a s) 
goal: LSeriesHasSum (fun x => ↑(Real.sin (2 * π * a * ↑x))) s (HurwitzZeta.sinZeta (↑a) s)

full_name: HurwitzZeta.hurwitzZetaOdd_neg_two_mul_nat_sub_one
code: /-- The trivial zeroes of the odd Hurwitz zeta function. -/
theorem hurwitzZetaOdd_neg_two_mul_nat_sub_one (a : UnitAddCircle) (n : ℕ) :
    hurwitzZetaOdd a (-2 * n - 1) = 0 
goal: HurwitzZeta.hurwitzZetaOdd a (-2 * ↑n - 1) = 0

full_name: HurwitzZeta.sinZeta_neg_two_mul_nat_sub_one
code: /-- The trivial zeroes of the sine zeta function. -/
theorem sinZeta_neg_two_mul_nat_sub_one (a : UnitAddCircle) (n : ℕ) :
    sinZeta a (-2 * n - 1) = 0 
goal: HurwitzZeta.sinZeta a (-2 * ↑n - 1) = 0

full_name: HurwitzZeta.hurwitzZetaOdd_one_sub
code: /-- If `s` is not in `-ℕ`, then `hurwitzZetaOdd a (1 - s)` is an explicit multiple of
`sinZeta s`. -/
lemma hurwitzZetaOdd_one_sub (a : UnitAddCircle) {s : ℂ} (hs : ∀ (n : ℕ), s ≠ -n) :
    hurwitzZetaOdd a (1 - s) = 2 * (2 * π) ^ (-s) * Gamma s * sin (π * s / 2) * sinZeta a s 
goal: HurwitzZeta.hurwitzZetaOdd a (1 - s) =
  2 * (2 * ↑π) ^ (-s) * Complex.Gamma s * Complex.sin (↑π * s / 2) * HurwitzZeta.sinZeta a s

full_name: HurwitzZeta.sinZeta_one_sub
code: /-- If `s` is not in `-ℕ`, then `sinZeta a (1 - s)` is an explicit multiple of
`hurwitzZetaOdd s`. -/
lemma sinZeta_one_sub (a : UnitAddCircle) {s : ℂ} (hs : ∀ (n : ℕ), s ≠ -n) :
    sinZeta a (1 - s) = 2 * (2 * π) ^ (-s) * Gamma s * sin (π * s / 2) * hurwitzZetaOdd a s 
goal: HurwitzZeta.sinZeta a (1 - s) =
  2 * (2 * ↑π) ^ (-s) * Complex.Gamma s * Complex.sin (↑π * s / 2) * HurwitzZeta.hurwitzZetaOdd a s