[GOAL]
⊢ riemannZeta 0 = -1 / 2
[PROOFSTEP]
rw [riemannZeta_def]
[GOAL]
⊢ Function.update (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) 0 (-1 / 2) 0 = -1 / 2
[PROOFSTEP]
exact Function.update_same _ _ _
[GOAL]
t : ℝ
ht : 0 < t
⊢ Summable fun n => rexp (-π * t * (↑n + 1) ^ 2)
[PROOFSTEP]
have : 0 < (↑t * I).im := by rwa [ofReal_mul_im, I_im, mul_one]
[GOAL]
t : ℝ
ht : 0 < t
⊢ 0 < (↑t * I).im
[PROOFSTEP]
rwa [ofReal_mul_im, I_im, mul_one]
[GOAL]
t : ℝ
ht : 0 < t
this : 0 < (↑t * I).im
⊢ Summable fun n => rexp (-π * t * (↑n + 1) ^ 2)
[PROOFSTEP]
convert summable_norm_iff.mpr (hasSum_nat_jacobiTheta this).summable using 1
[GOAL]
case h.e'_5
t : ℝ
ht : 0 < t
this : 0 < (↑t * I).im
⊢ (fun n => rexp (-π * t * (↑n + 1) ^ 2)) = fun x => ‖cexp (↑π * I * (↑x + 1) ^ 2 * (↑t * I))‖
[PROOFSTEP]
ext1 n
[GOAL]
case h.e'_5.h
t : ℝ
ht : 0 < t
this : 0 < (↑t * I).im
n : ℕ
⊢ rexp (-π * t * (↑n + 1) ^ 2) = ‖cexp (↑π * I * (↑n + 1) ^ 2 * (↑t * I))‖
[PROOFSTEP]
rw [Complex.norm_eq_abs, Complex.abs_exp]
[GOAL]
case h.e'_5.h
t : ℝ
ht : 0 < t
this : 0 < (↑t * I).im
n : ℕ
⊢ rexp (-π * t * (↑n + 1) ^ 2) = rexp (↑π * I * (↑n + 1) ^ 2 * (↑t * I)).re
[PROOFSTEP]
rw [show ↑π * I * ((n : ℂ) + 1) ^ 2 * (↑t * I) = ((π * t * ((n : ℝ) + 1) ^ 2) : ℝ) * I ^ 2 by push_cast ; ring]
[GOAL]
t : ℝ
ht : 0 < t
this : 0 < (↑t * I).im
n : ℕ
⊢ ↑π * I * (↑n + 1) ^ 2 * (↑t * I) = ↑(π * t * (↑n + 1) ^ 2) * I ^ 2
[PROOFSTEP]
push_cast
[GOAL]
t : ℝ
ht : 0 < t
this : 0 < (↑t * I).im
n : ℕ
⊢ ↑π * I * (↑n + 1) ^ 2 * (↑t * I) = ↑π * ↑t * (↑n + 1) ^ 2 * I ^ 2
[PROOFSTEP]
ring
[GOAL]
case h.e'_5.h
t : ℝ
ht : 0 < t
this : 0 < (↑t * I).im
n : ℕ
⊢ rexp (-π * t * (↑n + 1) ^ 2) = rexp (↑(π * t * (↑n + 1) ^ 2) * I ^ 2).re
[PROOFSTEP]
rw [I_sq, mul_neg_one, ← ofReal_neg, ofReal_re, neg_mul, neg_mul]
[GOAL]
t : ℝ
ht : 0 < t
⊢ zetaKernel₁ t = (jacobiTheta (↑t * I) - 1) / 2
[PROOFSTEP]
rw [jacobiTheta_eq_tsum_nat ((mul_I_im t).symm ▸ ht : 0 < (↑t * I).im), add_comm, add_sub_cancel,
  mul_div_cancel_left _ (two_ne_zero' ℂ), zetaKernel₁]
[GOAL]
t : ℝ
ht : 0 < t
⊢ ∑' (n : ℕ), ↑(rexp (-π * t * (↑n + 1) ^ 2)) = ∑' (n : ℕ), cexp (↑π * I * (↑n + 1) ^ 2 * (↑t * I))
[PROOFSTEP]
congr 1 with n : 1
[GOAL]
case e_f.h
t : ℝ
ht : 0 < t
n : ℕ
⊢ ↑(rexp (-π * t * (↑n + 1) ^ 2)) = cexp (↑π * I * (↑n + 1) ^ 2 * (↑t * I))
[PROOFSTEP]
push_cast
[GOAL]
case e_f.h
t : ℝ
ht : 0 < t
n : ℕ
⊢ cexp (-↑π * ↑t * (↑n + 1) ^ 2) = cexp (↑π * I * (↑n + 1) ^ 2 * (↑t * I))
[PROOFSTEP]
rw [(by ring : ↑π * I * ((n : ℂ) + 1) ^ 2 * (t * I) = I ^ 2 * π * t * ((n : ℂ) + 1) ^ 2), I_sq, neg_one_mul]
[GOAL]
t : ℝ
ht : 0 < t
n : ℕ
⊢ ↑π * I * (↑n + 1) ^ 2 * (↑t * I) = I ^ 2 * ↑π * ↑t * (↑n + 1) ^ 2
[PROOFSTEP]
ring
[GOAL]
t : ℝ
ht : 0 < t
⊢ ContinuousAt zetaKernel₁ t
[PROOFSTEP]
have : ContinuousAt (fun u : ℝ => (jacobiTheta (u * I) - 1) / 2) t :=
  by
  refine' (ContinuousAt.sub _ continuousAt_const).div_const _
  refine' (continuousAt_jacobiTheta _).comp (ContinuousAt.mul _ continuousAt_const)
  · rwa [mul_I_im, ofReal_re]
  · exact continuous_ofReal.continuousAt
[GOAL]
t : ℝ
ht : 0 < t
⊢ ContinuousAt (fun u => (jacobiTheta (↑u * I) - 1) / 2) t
[PROOFSTEP]
refine' (ContinuousAt.sub _ continuousAt_const).div_const _
[GOAL]
t : ℝ
ht : 0 < t
⊢ ContinuousAt (fun u => jacobiTheta (↑u * I)) t
[PROOFSTEP]
refine' (continuousAt_jacobiTheta _).comp (ContinuousAt.mul _ continuousAt_const)
[GOAL]
case refine'_1
t : ℝ
ht : 0 < t
⊢ 0 < (↑t * I).im
[PROOFSTEP]
rwa [mul_I_im, ofReal_re]
[GOAL]
case refine'_2
t : ℝ
ht : 0 < t
⊢ ContinuousAt (fun u => ↑u) t
[PROOFSTEP]
exact continuous_ofReal.continuousAt
[GOAL]
t : ℝ
ht : 0 < t
this : ContinuousAt (fun u => (jacobiTheta (↑u * I) - 1) / 2) t
⊢ ContinuousAt zetaKernel₁ t
[PROOFSTEP]
refine' this.congr (eventually_of_mem (Ioi_mem_nhds ht) fun u hu => _)
[GOAL]
t : ℝ
ht : 0 < t
this : ContinuousAt (fun u => (jacobiTheta (↑u * I) - 1) / 2) t
u : ℝ
hu : u ∈ Ioi 0
⊢ (fun u => (jacobiTheta (↑u * I) - 1) / 2) u = zetaKernel₁ u
[PROOFSTEP]
rw [zetaKernel₁_eq_jacobiTheta hu]
[GOAL]
⊢ LocallyIntegrableOn zetaKernel₂ (Ioi 0)
[PROOFSTEP]
refine (locallyIntegrableOn_iff (Or.inr isOpen_Ioi)).mpr fun k hk hk' => Integrable.add ?_ ?_
[GOAL]
case refine_1
k : Set ℝ
hk : k ⊆ Ioi 0
hk' : IsCompact k
⊢ Integrable zetaKernel₁
[PROOFSTEP]
refine ContinuousOn.integrableOn_compact hk' ?_
[GOAL]
case refine_1
k : Set ℝ
hk : k ⊆ Ioi 0
hk' : IsCompact k
⊢ ContinuousOn zetaKernel₁ k
[PROOFSTEP]
exact ContinuousAt.continuousOn fun x hx => continuousAt_zetaKernel₁ (hk hx)
[GOAL]
case refine_2
k : Set ℝ
hk : k ⊆ Ioi 0
hk' : IsCompact k
⊢ Integrable (indicator (Ioc 0 1) fun t => (1 - 1 / ↑(sqrt t)) / 2)
[PROOFSTEP]
refine (integrable_indicator_iff measurableSet_Ioc).mpr ?_
[GOAL]
case refine_2
k : Set ℝ
hk : k ⊆ Ioi 0
hk' : IsCompact k
⊢ IntegrableOn (fun t => (1 - 1 / ↑(sqrt t)) / 2) (Ioc 0 1)
[PROOFSTEP]
rw [IntegrableOn, Measure.restrict_restrict, ← IntegrableOn]
[GOAL]
case refine_2
k : Set ℝ
hk : k ⊆ Ioi 0
hk' : IsCompact k
⊢ IntegrableOn (fun t => (1 - 1 / ↑(sqrt t)) / 2) (Ioc 0 1 ∩ k)
case refine_2 k : Set ℝ hk : k ⊆ Ioi 0 hk' : IsCompact k ⊢ MeasurableSet (Ioc 0 1)
[PROOFSTEP]
swap
[GOAL]
case refine_2
k : Set ℝ
hk : k ⊆ Ioi 0
hk' : IsCompact k
⊢ MeasurableSet (Ioc 0 1)
[PROOFSTEP]
exact measurableSet_Ioc
[GOAL]
case refine_2
k : Set ℝ
hk : k ⊆ Ioi 0
hk' : IsCompact k
⊢ IntegrableOn (fun t => (1 - 1 / ↑(sqrt t)) / 2) (Ioc 0 1 ∩ k)
[PROOFSTEP]
apply ContinuousOn.integrableOn_compact
[GOAL]
case refine_2.hK
k : Set ℝ
hk : k ⊆ Ioi 0
hk' : IsCompact k
⊢ IsCompact (Ioc 0 1 ∩ k)
[PROOFSTEP]
convert (isCompact_Icc : IsCompact <| Icc (0 : ℝ) 1).inter hk' using 1
[GOAL]
case h.e'_3
k : Set ℝ
hk : k ⊆ Ioi 0
hk' : IsCompact k
⊢ Ioc 0 1 ∩ k = Icc 0 1 ∩ k
[PROOFSTEP]
exact Set.ext fun t => ⟨fun h => ⟨Ioc_subset_Icc_self h.1, h.2⟩, fun h => ⟨⟨hk h.2, h.1.2⟩, h.2⟩⟩
[GOAL]
case refine_2.hf
k : Set ℝ
hk : k ⊆ Ioi 0
hk' : IsCompact k
⊢ ContinuousOn (fun t => (1 - 1 / ↑(sqrt t)) / 2) (Ioc 0 1 ∩ k)
[PROOFSTEP]
refine ContinuousOn.mono ?_ ((inter_subset_right _ _).trans hk)
[GOAL]
case refine_2.hf
k : Set ℝ
hk : k ⊆ Ioi 0
hk' : IsCompact k
⊢ ContinuousOn (fun t => (1 - 1 / ↑(sqrt t)) / 2) (Ioi 0)
[PROOFSTEP]
refine (continuousOn_const.sub ?_).div_const _
[GOAL]
case refine_2.hf
k : Set ℝ
hk : k ⊆ Ioi 0
hk' : IsCompact k
⊢ ContinuousOn (fun t => 1 / ↑(sqrt t)) (Ioi 0)
[PROOFSTEP]
refine ContinuousOn.div continuousOn_const ?_ fun x hx => ?_
[GOAL]
case refine_2.hf.refine_1
k : Set ℝ
hk : k ⊆ Ioi 0
hk' : IsCompact k
⊢ ContinuousOn (fun t => ↑(sqrt t)) (Ioi 0)
[PROOFSTEP]
exact (continuous_ofReal.comp continuous_sqrt).continuousOn
[GOAL]
case refine_2.hf.refine_2
k : Set ℝ
hk : k ⊆ Ioi 0
hk' : IsCompact k
x : ℝ
hx : x ∈ Ioi 0
⊢ ↑(sqrt x) ≠ 0
[PROOFSTEP]
exact ofReal_ne_zero.mpr (sqrt_ne_zero'.mpr hx)
[GOAL]
t : ℝ
ht : 0 < t
⊢ zetaKernel₂ (1 / t) = ↑(sqrt t) * zetaKernel₂ t
[PROOFSTEP]
have aux : ∀ {u : ℝ} (_ : 1 < u), zetaKernel₂ (1 / u) = sqrt u * zetaKernel₂ u :=
  by
  intro u hu
  simp_rw [zetaKernel₂, Pi.add_apply]
  rw [indicator_of_mem, indicator_of_not_mem (not_mem_Ioc_of_gt hu), add_zero]
  swap; · exact ⟨one_div_pos.mpr (zero_lt_one.trans hu), (one_div u).symm ▸ inv_le_one hu.le⟩
  rw [zetaKernel₁_eq_jacobiTheta (one_div_pos.mpr <| zero_lt_one.trans hu),
    zetaKernel₁_eq_jacobiTheta (zero_lt_one.trans hu), ← add_div, ← mul_div_assoc, add_sub, sub_add_cancel,
    sqrt_div zero_le_one, sqrt_one, one_div (sqrt _), ofReal_inv, ← one_div, one_div_one_div, mul_sub, mul_one]
  congr 2
  let τ : UpperHalfPlane := .mk (u * I) ((mul_I_im u).symm ▸ zero_lt_one.trans hu)
  convert jacobiTheta_S_smul τ using 2
  ·
    rw [UpperHalfPlane.modular_S_smul, UpperHalfPlane.coe_mk, UpperHalfPlane.coe_mk, ← neg_inv, mul_inv, inv_I, mul_neg,
      neg_neg, one_div, ofReal_inv]
  · rw [UpperHalfPlane.coe_mk, mul_comm, mul_assoc, mul_neg, I_mul_I, neg_neg, mul_one, sqrt_eq_rpow,
      ofReal_cpow (zero_lt_one.trans hu).le]
    push_cast
    rfl
[GOAL]
t : ℝ
ht : 0 < t
⊢ ∀ {u : ℝ}, 1 < u → zetaKernel₂ (1 / u) = ↑(sqrt u) * zetaKernel₂ u
[PROOFSTEP]
intro u hu
[GOAL]
t : ℝ
ht : 0 < t
u : ℝ
hu : 1 < u
⊢ zetaKernel₂ (1 / u) = ↑(sqrt u) * zetaKernel₂ u
[PROOFSTEP]
simp_rw [zetaKernel₂, Pi.add_apply]
[GOAL]
t : ℝ
ht : 0 < t
u : ℝ
hu : 1 < u
⊢ zetaKernel₁ (1 / u) + indicator (Ioc 0 1) (fun t => (1 - 1 / ↑(sqrt t)) / 2) (1 / u) =
    ↑(sqrt u) * (zetaKernel₁ u + indicator (Ioc 0 1) (fun t => (1 - 1 / ↑(sqrt t)) / 2) u)
[PROOFSTEP]
rw [indicator_of_mem, indicator_of_not_mem (not_mem_Ioc_of_gt hu), add_zero]
[GOAL]
t : ℝ
ht : 0 < t
u : ℝ
hu : 1 < u
⊢ zetaKernel₁ (1 / u) + (1 - 1 / ↑(sqrt (1 / u))) / 2 = ↑(sqrt u) * zetaKernel₁ u
case h t : ℝ ht : 0 < t u : ℝ hu : 1 < u ⊢ 1 / u ∈ Ioc 0 1
[PROOFSTEP]
swap
[GOAL]
case h
t : ℝ
ht : 0 < t
u : ℝ
hu : 1 < u
⊢ 1 / u ∈ Ioc 0 1
[PROOFSTEP]
exact ⟨one_div_pos.mpr (zero_lt_one.trans hu), (one_div u).symm ▸ inv_le_one hu.le⟩
[GOAL]
t : ℝ
ht : 0 < t
u : ℝ
hu : 1 < u
⊢ zetaKernel₁ (1 / u) + (1 - 1 / ↑(sqrt (1 / u))) / 2 = ↑(sqrt u) * zetaKernel₁ u
[PROOFSTEP]
rw [zetaKernel₁_eq_jacobiTheta (one_div_pos.mpr <| zero_lt_one.trans hu),
  zetaKernel₁_eq_jacobiTheta (zero_lt_one.trans hu), ← add_div, ← mul_div_assoc, add_sub, sub_add_cancel,
  sqrt_div zero_le_one, sqrt_one, one_div (sqrt _), ofReal_inv, ← one_div, one_div_one_div, mul_sub, mul_one]
[GOAL]
t : ℝ
ht : 0 < t
u : ℝ
hu : 1 < u
⊢ (jacobiTheta (↑(1 / u) * I) - ↑(sqrt u)) / 2 = (↑(sqrt u) * jacobiTheta (↑u * I) - ↑(sqrt u)) / 2
[PROOFSTEP]
congr 2
[GOAL]
case e_a.e_a
t : ℝ
ht : 0 < t
u : ℝ
hu : 1 < u
⊢ jacobiTheta (↑(1 / u) * I) = ↑(sqrt u) * jacobiTheta (↑u * I)
[PROOFSTEP]
let τ : UpperHalfPlane := .mk (u * I) ((mul_I_im u).symm ▸ zero_lt_one.trans hu)
[GOAL]
case e_a.e_a
t : ℝ
ht : 0 < t
u : ℝ
hu : 1 < u
τ : UpperHalfPlane := UpperHalfPlane.mk (↑u * I) (_ : 0 < (↑u * I).im)
⊢ jacobiTheta (↑(1 / u) * I) = ↑(sqrt u) * jacobiTheta (↑u * I)
[PROOFSTEP]
convert jacobiTheta_S_smul τ using 2
[GOAL]
case h.e'_2.h.e'_1
t : ℝ
ht : 0 < t
u : ℝ
hu : 1 < u
τ : UpperHalfPlane := UpperHalfPlane.mk (↑u * I) (_ : 0 < (↑u * I).im)
⊢ ↑(1 / u) * I = ↑(ModularGroup.S • τ)
[PROOFSTEP]
rw [UpperHalfPlane.modular_S_smul, UpperHalfPlane.coe_mk, UpperHalfPlane.coe_mk, ← neg_inv, mul_inv, inv_I, mul_neg,
  neg_neg, one_div, ofReal_inv]
[GOAL]
case h.e'_3.h.e'_5
t : ℝ
ht : 0 < t
u : ℝ
hu : 1 < u
τ : UpperHalfPlane := UpperHalfPlane.mk (↑u * I) (_ : 0 < (↑u * I).im)
⊢ ↑(sqrt u) = (-I * ↑τ) ^ (1 / 2)
[PROOFSTEP]
rw [UpperHalfPlane.coe_mk, mul_comm, mul_assoc, mul_neg, I_mul_I, neg_neg, mul_one, sqrt_eq_rpow,
  ofReal_cpow (zero_lt_one.trans hu).le]
[GOAL]
case h.e'_3.h.e'_5
t : ℝ
ht : 0 < t
u : ℝ
hu : 1 < u
τ : UpperHalfPlane := UpperHalfPlane.mk (↑u * I) (_ : 0 < (↑u * I).im)
⊢ ↑u ^ ↑(1 / 2) = ↑u ^ (1 / 2)
[PROOFSTEP]
push_cast
[GOAL]
case h.e'_3.h.e'_5
t : ℝ
ht : 0 < t
u : ℝ
hu : 1 < u
τ : UpperHalfPlane := UpperHalfPlane.mk (↑u * I) (_ : 0 < (↑u * I).im)
⊢ ↑u ^ (1 / 2) = ↑u ^ (1 / 2)
[PROOFSTEP]
rfl
[GOAL]
t : ℝ
ht : 0 < t
aux : ∀ {u : ℝ}, 1 < u → zetaKernel₂ (1 / u) = ↑(sqrt u) * zetaKernel₂ u
⊢ zetaKernel₂ (1 / t) = ↑(sqrt t) * zetaKernel₂ t
[PROOFSTEP]
rcases lt_trichotomy 1 t with (h | h | h)
[GOAL]
case inl
t : ℝ
ht : 0 < t
aux : ∀ {u : ℝ}, 1 < u → zetaKernel₂ (1 / u) = ↑(sqrt u) * zetaKernel₂ u
h : 1 < t
⊢ zetaKernel₂ (1 / t) = ↑(sqrt t) * zetaKernel₂ t
[PROOFSTEP]
exact aux h
[GOAL]
case inr.inl
t : ℝ
ht : 0 < t
aux : ∀ {u : ℝ}, 1 < u → zetaKernel₂ (1 / u) = ↑(sqrt u) * zetaKernel₂ u
h : 1 = t
⊢ zetaKernel₂ (1 / t) = ↑(sqrt t) * zetaKernel₂ t
[PROOFSTEP]
simp only [← h, div_self, Ne.def, one_ne_zero, not_false_iff, sqrt_one, ofReal_one, one_mul]
[GOAL]
case inr.inr
t : ℝ
ht : 0 < t
aux : ∀ {u : ℝ}, 1 < u → zetaKernel₂ (1 / u) = ↑(sqrt u) * zetaKernel₂ u
h : t < 1
⊢ zetaKernel₂ (1 / t) = ↑(sqrt t) * zetaKernel₂ t
[PROOFSTEP]
have := aux (show 1 < 1 / t by rwa [lt_one_div (zero_lt_one' ℝ) ht, div_one])
[GOAL]
t : ℝ
ht : 0 < t
aux : ∀ {u : ℝ}, 1 < u → zetaKernel₂ (1 / u) = ↑(sqrt u) * zetaKernel₂ u
h : t < 1
⊢ 1 < 1 / t
[PROOFSTEP]
rwa [lt_one_div (zero_lt_one' ℝ) ht, div_one]
[GOAL]
case inr.inr
t : ℝ
ht : 0 < t
aux : ∀ {u : ℝ}, 1 < u → zetaKernel₂ (1 / u) = ↑(sqrt u) * zetaKernel₂ u
h : t < 1
this : zetaKernel₂ (1 / (1 / t)) = ↑(sqrt (1 / t)) * zetaKernel₂ (1 / t)
⊢ zetaKernel₂ (1 / t) = ↑(sqrt t) * zetaKernel₂ t
[PROOFSTEP]
rw [one_div_one_div] at this
[GOAL]
case inr.inr
t : ℝ
ht : 0 < t
aux : ∀ {u : ℝ}, 1 < u → zetaKernel₂ (1 / u) = ↑(sqrt u) * zetaKernel₂ u
h : t < 1
this : zetaKernel₂ t = ↑(sqrt (1 / t)) * zetaKernel₂ (1 / t)
⊢ zetaKernel₂ (1 / t) = ↑(sqrt t) * zetaKernel₂ t
[PROOFSTEP]
rw [this, ← mul_assoc, ← ofReal_mul, ← sqrt_mul ht.le, mul_one_div_cancel ht.ne', sqrt_one, ofReal_one, one_mul]
[GOAL]
⊢ zetaKernel₁ =O[atTop] fun t => rexp (-π * t)
[PROOFSTEP]
have h := isBigO_at_im_infty_jacobiTheta_sub_one.const_mul_left (1 / 2)
[GOAL]
h : (fun x => 1 / 2 * (jacobiTheta x - 1)) =O[comap im atTop] fun τ => rexp (-π * τ.im)
⊢ zetaKernel₁ =O[atTop] fun t => rexp (-π * t)
[PROOFSTEP]
simp_rw [mul_comm (1 / 2 : ℂ) _, mul_one_div] at h
[GOAL]
h : (fun x => (jacobiTheta x - 1) / 2) =O[comap im atTop] fun τ => rexp (-π * τ.im)
⊢ zetaKernel₁ =O[atTop] fun t => rexp (-π * t)
[PROOFSTEP]
have h' : Tendsto (fun t : ℝ => ↑t * I) atTop (comap im atTop) :=
  by
  rw [tendsto_comap_iff]
  convert tendsto_id
  ext1 t
  rw [Function.comp_apply, mul_I_im, ofReal_re, id.def]
[GOAL]
h : (fun x => (jacobiTheta x - 1) / 2) =O[comap im atTop] fun τ => rexp (-π * τ.im)
⊢ Tendsto (fun t => ↑t * I) atTop (comap im atTop)
[PROOFSTEP]
rw [tendsto_comap_iff]
[GOAL]
h : (fun x => (jacobiTheta x - 1) / 2) =O[comap im atTop] fun τ => rexp (-π * τ.im)
⊢ Tendsto (im ∘ fun t => ↑t * I) atTop atTop
[PROOFSTEP]
convert tendsto_id
[GOAL]
case h.e'_3
h : (fun x => (jacobiTheta x - 1) / 2) =O[comap im atTop] fun τ => rexp (-π * τ.im)
⊢ (im ∘ fun t => ↑t * I) = id
[PROOFSTEP]
ext1 t
[GOAL]
case h.e'_3.h
h : (fun x => (jacobiTheta x - 1) / 2) =O[comap im atTop] fun τ => rexp (-π * τ.im)
t : ℝ
⊢ (im ∘ fun t => ↑t * I) t = id t
[PROOFSTEP]
rw [Function.comp_apply, mul_I_im, ofReal_re, id.def]
[GOAL]
h : (fun x => (jacobiTheta x - 1) / 2) =O[comap im atTop] fun τ => rexp (-π * τ.im)
h' : Tendsto (fun t => ↑t * I) atTop (comap im atTop)
⊢ zetaKernel₁ =O[atTop] fun t => rexp (-π * t)
[PROOFSTEP]
convert
  ((h.norm_left.comp_tendsto h').congr' (eventually_of_mem (Ioi_mem_atTop 0) fun t ht => _)
        (eventually_of_mem (Ioi_mem_atTop 0) fun t _ => _)).of_norm_left
    (E' := ℂ)
[GOAL]
case convert_1
h : (fun x => (jacobiTheta x - 1) / 2) =O[comap im atTop] fun τ => rexp (-π * τ.im)
h' : Tendsto (fun t => ↑t * I) atTop (comap im atTop)
t : ℝ
ht : t ∈ Ioi 0
⊢ ((fun x => ‖(jacobiTheta x - 1) / 2‖) ∘ fun t => ↑t * I) t = ‖zetaKernel₁ t‖
[PROOFSTEP]
rw [Function.comp_apply, ← zetaKernel₁_eq_jacobiTheta ht]
[GOAL]
case convert_2
h : (fun x => (jacobiTheta x - 1) / 2) =O[comap im atTop] fun τ => rexp (-π * τ.im)
h' : Tendsto (fun t => ↑t * I) atTop (comap im atTop)
t : ℝ
x✝ : t ∈ Ioi 0
⊢ ((fun τ => rexp (-π * τ.im)) ∘ fun t => ↑t * I) t = rexp (-π * t)
[PROOFSTEP]
rw [Function.comp_apply, mul_I_im, ofReal_re]
[GOAL]
⊢ zetaKernel₂ =O[atTop] fun t => rexp (-π * t)
[PROOFSTEP]
refine' (eventuallyEq_of_mem (Ioi_mem_atTop (1 : ℝ)) fun t ht => _).trans_isBigO isBigO_atTop_zetaKernel₁
[GOAL]
t : ℝ
ht : t ∈ Ioi 1
⊢ zetaKernel₂ t = zetaKernel₁ t
[PROOFSTEP]
rw [zetaKernel₂, Pi.add_apply, indicator_of_not_mem (not_mem_Ioc_of_gt (Set.mem_Iio.mp ht)), add_zero]
[GOAL]
⊢ zetaKernel₂ =O[𝓝[Ioi 0] 0] fun t => rexp (-π / t) / sqrt t
[PROOFSTEP]
have h1 := isBigO_atTop_zetaKernel₂.comp_tendsto tendsto_inv_zero_atTop
[GOAL]
h1 : (zetaKernel₂ ∘ fun x => x⁻¹) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => x⁻¹)
⊢ zetaKernel₂ =O[𝓝[Ioi 0] 0] fun t => rexp (-π / t) / sqrt t
[PROOFSTEP]
simp_rw [← one_div] at h1
[GOAL]
h1 : (zetaKernel₂ ∘ fun x => 1 / x) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
⊢ zetaKernel₂ =O[𝓝[Ioi 0] 0] fun t => rexp (-π / t) / sqrt t
[PROOFSTEP]
have h2 : zetaKernel₂ ∘ Div.div 1 =ᶠ[𝓝[>] 0] fun t => sqrt t * zetaKernel₂ t :=
  eventually_of_mem self_mem_nhdsWithin fun t ht => by dsimp only; rw [← zetaKernel₂_one_div ht]; rfl
[GOAL]
h1 : (zetaKernel₂ ∘ fun x => 1 / x) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
t : ℝ
ht : t ∈ Ioi 0
⊢ (zetaKernel₂ ∘ Div.div 1) t = (fun t => ↑(sqrt t) * zetaKernel₂ t) t
[PROOFSTEP]
dsimp only
[GOAL]
h1 : (zetaKernel₂ ∘ fun x => 1 / x) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
t : ℝ
ht : t ∈ Ioi 0
⊢ (zetaKernel₂ ∘ Div.div 1) t = ↑(sqrt t) * zetaKernel₂ t
[PROOFSTEP]
rw [← zetaKernel₂_one_div ht]
[GOAL]
h1 : (zetaKernel₂ ∘ fun x => 1 / x) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
t : ℝ
ht : t ∈ Ioi 0
⊢ (zetaKernel₂ ∘ Div.div 1) t = zetaKernel₂ (1 / t)
[PROOFSTEP]
rfl
[GOAL]
h1 : (zetaKernel₂ ∘ fun x => 1 / x) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
h2 : zetaKernel₂ ∘ Div.div 1 =ᶠ[𝓝[Ioi 0] 0] fun t => ↑(sqrt t) * zetaKernel₂ t
⊢ zetaKernel₂ =O[𝓝[Ioi 0] 0] fun t => rexp (-π / t) / sqrt t
[PROOFSTEP]
have h3 := h1.congr' h2 (EventuallyEq.refl _ _)
[GOAL]
h1 : (zetaKernel₂ ∘ fun x => 1 / x) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
h2 : zetaKernel₂ ∘ Div.div 1 =ᶠ[𝓝[Ioi 0] 0] fun t => ↑(sqrt t) * zetaKernel₂ t
h3 : (fun t => ↑(sqrt t) * zetaKernel₂ t) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
⊢ zetaKernel₂ =O[𝓝[Ioi 0] 0] fun t => rexp (-π / t) / sqrt t
[PROOFSTEP]
have h4 := h3.mul (isBigO_refl (fun t : ℝ => 1 / (sqrt t : ℂ)) (𝓝[>] 0)).norm_right
[GOAL]
h1 : (zetaKernel₂ ∘ fun x => 1 / x) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
h2 : zetaKernel₂ ∘ Div.div 1 =ᶠ[𝓝[Ioi 0] 0] fun t => ↑(sqrt t) * zetaKernel₂ t
h3 : (fun t => ↑(sqrt t) * zetaKernel₂ t) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
h4 :
  (fun x => ↑(sqrt x) * zetaKernel₂ x * (1 / ↑(sqrt x))) =O[𝓝[Ioi 0] 0] fun x =>
    ((fun t => rexp (-π * t)) ∘ fun x => 1 / x) x * ‖1 / ↑(sqrt x)‖
⊢ zetaKernel₂ =O[𝓝[Ioi 0] 0] fun t => rexp (-π / t) / sqrt t
[PROOFSTEP]
refine h4.congr' ?_ ?_
[GOAL]
case refine_1
h1 : (zetaKernel₂ ∘ fun x => 1 / x) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
h2 : zetaKernel₂ ∘ Div.div 1 =ᶠ[𝓝[Ioi 0] 0] fun t => ↑(sqrt t) * zetaKernel₂ t
h3 : (fun t => ↑(sqrt t) * zetaKernel₂ t) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
h4 :
  (fun x => ↑(sqrt x) * zetaKernel₂ x * (1 / ↑(sqrt x))) =O[𝓝[Ioi 0] 0] fun x =>
    ((fun t => rexp (-π * t)) ∘ fun x => 1 / x) x * ‖1 / ↑(sqrt x)‖
⊢ (fun x => ↑(sqrt x) * zetaKernel₂ x * (1 / ↑(sqrt x))) =ᶠ[𝓝[Ioi 0] 0] zetaKernel₂
[PROOFSTEP]
refine eventually_of_mem self_mem_nhdsWithin fun x hx => ?_
[GOAL]
case refine_1
h1 : (zetaKernel₂ ∘ fun x => 1 / x) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
h2 : zetaKernel₂ ∘ Div.div 1 =ᶠ[𝓝[Ioi 0] 0] fun t => ↑(sqrt t) * zetaKernel₂ t
h3 : (fun t => ↑(sqrt t) * zetaKernel₂ t) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
h4 :
  (fun x => ↑(sqrt x) * zetaKernel₂ x * (1 / ↑(sqrt x))) =O[𝓝[Ioi 0] 0] fun x =>
    ((fun t => rexp (-π * t)) ∘ fun x => 1 / x) x * ‖1 / ↑(sqrt x)‖
x : ℝ
hx : x ∈ Ioi 0
⊢ (fun x => ↑(sqrt x) * zetaKernel₂ x * (1 / ↑(sqrt x))) x = zetaKernel₂ x
[PROOFSTEP]
dsimp
[GOAL]
case refine_1
h1 : (zetaKernel₂ ∘ fun x => 1 / x) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
h2 : zetaKernel₂ ∘ Div.div 1 =ᶠ[𝓝[Ioi 0] 0] fun t => ↑(sqrt t) * zetaKernel₂ t
h3 : (fun t => ↑(sqrt t) * zetaKernel₂ t) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
h4 :
  (fun x => ↑(sqrt x) * zetaKernel₂ x * (1 / ↑(sqrt x))) =O[𝓝[Ioi 0] 0] fun x =>
    ((fun t => rexp (-π * t)) ∘ fun x => 1 / x) x * ‖1 / ↑(sqrt x)‖
x : ℝ
hx : x ∈ Ioi 0
⊢ ↑(sqrt x) * zetaKernel₂ x * (1 / ↑(sqrt x)) = zetaKernel₂ x
[PROOFSTEP]
rw [mul_comm, ← mul_assoc, one_div_mul_cancel, one_mul]
[GOAL]
case refine_1
h1 : (zetaKernel₂ ∘ fun x => 1 / x) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
h2 : zetaKernel₂ ∘ Div.div 1 =ᶠ[𝓝[Ioi 0] 0] fun t => ↑(sqrt t) * zetaKernel₂ t
h3 : (fun t => ↑(sqrt t) * zetaKernel₂ t) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
h4 :
  (fun x => ↑(sqrt x) * zetaKernel₂ x * (1 / ↑(sqrt x))) =O[𝓝[Ioi 0] 0] fun x =>
    ((fun t => rexp (-π * t)) ∘ fun x => 1 / x) x * ‖1 / ↑(sqrt x)‖
x : ℝ
hx : x ∈ Ioi 0
⊢ ↑(sqrt x) ≠ 0
[PROOFSTEP]
exact ofReal_ne_zero.mpr ((sqrt_ne_zero <| le_of_lt hx).mpr (ne_of_gt hx))
[GOAL]
case refine_2
h1 : (zetaKernel₂ ∘ fun x => 1 / x) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
h2 : zetaKernel₂ ∘ Div.div 1 =ᶠ[𝓝[Ioi 0] 0] fun t => ↑(sqrt t) * zetaKernel₂ t
h3 : (fun t => ↑(sqrt t) * zetaKernel₂ t) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
h4 :
  (fun x => ↑(sqrt x) * zetaKernel₂ x * (1 / ↑(sqrt x))) =O[𝓝[Ioi 0] 0] fun x =>
    ((fun t => rexp (-π * t)) ∘ fun x => 1 / x) x * ‖1 / ↑(sqrt x)‖
⊢ (fun x => ((fun t => rexp (-π * t)) ∘ fun x => 1 / x) x * ‖1 / ↑(sqrt x)‖) =ᶠ[𝓝[Ioi 0] 0] fun t =>
    rexp (-π / t) / sqrt t
[PROOFSTEP]
refine eventually_of_mem self_mem_nhdsWithin fun x _ => ?_
[GOAL]
case refine_2
h1 : (zetaKernel₂ ∘ fun x => 1 / x) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
h2 : zetaKernel₂ ∘ Div.div 1 =ᶠ[𝓝[Ioi 0] 0] fun t => ↑(sqrt t) * zetaKernel₂ t
h3 : (fun t => ↑(sqrt t) * zetaKernel₂ t) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
h4 :
  (fun x => ↑(sqrt x) * zetaKernel₂ x * (1 / ↑(sqrt x))) =O[𝓝[Ioi 0] 0] fun x =>
    ((fun t => rexp (-π * t)) ∘ fun x => 1 / x) x * ‖1 / ↑(sqrt x)‖
x : ℝ
x✝ : x ∈ Ioi 0
⊢ (fun x => ((fun t => rexp (-π * t)) ∘ fun x => 1 / x) x * ‖1 / ↑(sqrt x)‖) x = (fun t => rexp (-π / t) / sqrt t) x
[PROOFSTEP]
dsimp only
[GOAL]
case refine_2
h1 : (zetaKernel₂ ∘ fun x => 1 / x) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
h2 : zetaKernel₂ ∘ Div.div 1 =ᶠ[𝓝[Ioi 0] 0] fun t => ↑(sqrt t) * zetaKernel₂ t
h3 : (fun t => ↑(sqrt t) * zetaKernel₂ t) =O[𝓝[Ioi 0] 0] ((fun t => rexp (-π * t)) ∘ fun x => 1 / x)
h4 :
  (fun x => ↑(sqrt x) * zetaKernel₂ x * (1 / ↑(sqrt x))) =O[𝓝[Ioi 0] 0] fun x =>
    ((fun t => rexp (-π * t)) ∘ fun x => 1 / x) x * ‖1 / ↑(sqrt x)‖
x : ℝ
x✝ : x ∈ Ioi 0
⊢ ((fun t => rexp (-π * t)) ∘ fun x => 1 / x) x * ‖1 / ↑(sqrt x)‖ = rexp (-π / x) / sqrt x
[PROOFSTEP]
rw [Function.comp_apply, mul_one_div, one_div (sqrt x : ℂ), norm_inv, Complex.norm_eq_abs, abs_ofReal,
  abs_of_nonneg (sqrt_nonneg _), ← div_eq_mul_inv]
[GOAL]
a : ℝ
⊢ zetaKernel₂ =O[𝓝[Ioi 0] 0] fun t => t ^ a
[PROOFSTEP]
have aux1 : IsBigO atTop (fun t => exp (-π * t)) fun t => t ^ (-a - 1 / 2) :=
  (isLittleO_exp_neg_mul_rpow_atTop pi_pos _).isBigO
[GOAL]
a : ℝ
aux1 : (fun t => rexp (-π * t)) =O[atTop] fun t => t ^ (-a - 1 / 2)
⊢ zetaKernel₂ =O[𝓝[Ioi 0] 0] fun t => t ^ a
[PROOFSTEP]
have aux2 : IsBigO atTop (fun t => exp (-π * t) * sqrt t) fun t => t ^ (-a) :=
  by
  refine (aux1.mul (isBigO_refl sqrt _)).congr' (EventuallyEq.refl _ _) ?_
  refine (eventually_gt_atTop 0).mp (eventually_of_forall fun t ht => ?_)
  simp_rw [sqrt_eq_rpow, ← rpow_add ht, sub_add_cancel]
[GOAL]
a : ℝ
aux1 : (fun t => rexp (-π * t)) =O[atTop] fun t => t ^ (-a - 1 / 2)
⊢ (fun t => rexp (-π * t) * sqrt t) =O[atTop] fun t => t ^ (-a)
[PROOFSTEP]
refine (aux1.mul (isBigO_refl sqrt _)).congr' (EventuallyEq.refl _ _) ?_
[GOAL]
a : ℝ
aux1 : (fun t => rexp (-π * t)) =O[atTop] fun t => t ^ (-a - 1 / 2)
⊢ (fun x => x ^ (-a - 1 / 2) * sqrt x) =ᶠ[atTop] fun t => t ^ (-a)
[PROOFSTEP]
refine (eventually_gt_atTop 0).mp (eventually_of_forall fun t ht => ?_)
[GOAL]
a : ℝ
aux1 : (fun t => rexp (-π * t)) =O[atTop] fun t => t ^ (-a - 1 / 2)
t : ℝ
ht : 0 < t
⊢ (fun x => x ^ (-a - 1 / 2) * sqrt x) t = (fun t => t ^ (-a)) t
[PROOFSTEP]
simp_rw [sqrt_eq_rpow, ← rpow_add ht, sub_add_cancel]
[GOAL]
a : ℝ
aux1 : (fun t => rexp (-π * t)) =O[atTop] fun t => t ^ (-a - 1 / 2)
aux2 : (fun t => rexp (-π * t) * sqrt t) =O[atTop] fun t => t ^ (-a)
⊢ zetaKernel₂ =O[𝓝[Ioi 0] 0] fun t => t ^ a
[PROOFSTEP]
refine isBigO_zero_zetaKernel₂.trans ((aux2.comp_tendsto tendsto_inv_zero_atTop).congr' ?_ ?_)
[GOAL]
case refine_1
a : ℝ
aux1 : (fun t => rexp (-π * t)) =O[atTop] fun t => t ^ (-a - 1 / 2)
aux2 : (fun t => rexp (-π * t) * sqrt t) =O[atTop] fun t => t ^ (-a)
⊢ ((fun t => rexp (-π * t) * sqrt t) ∘ fun x => x⁻¹) =ᶠ[𝓝[Ioi 0] 0] fun t => rexp (-π / t) / sqrt t
[PROOFSTEP]
refine eventually_of_mem self_mem_nhdsWithin fun x _ => ?_
[GOAL]
case refine_1
a : ℝ
aux1 : (fun t => rexp (-π * t)) =O[atTop] fun t => t ^ (-a - 1 / 2)
aux2 : (fun t => rexp (-π * t) * sqrt t) =O[atTop] fun t => t ^ (-a)
x : ℝ
x✝ : x ∈ Ioi 0
⊢ ((fun t => rexp (-π * t) * sqrt t) ∘ fun x => x⁻¹) x = (fun t => rexp (-π / t) / sqrt t) x
[PROOFSTEP]
simp_rw [Function.comp_apply, sqrt_inv, ← div_eq_mul_inv]
[GOAL]
case refine_2
a : ℝ
aux1 : (fun t => rexp (-π * t)) =O[atTop] fun t => t ^ (-a - 1 / 2)
aux2 : (fun t => rexp (-π * t) * sqrt t) =O[atTop] fun t => t ^ (-a)
⊢ ((fun t => t ^ (-a)) ∘ fun x => x⁻¹) =ᶠ[𝓝[Ioi 0] 0] fun t => t ^ a
[PROOFSTEP]
refine eventually_of_mem self_mem_nhdsWithin fun x hx => ?_
[GOAL]
case refine_2
a : ℝ
aux1 : (fun t => rexp (-π * t)) =O[atTop] fun t => t ^ (-a - 1 / 2)
aux2 : (fun t => rexp (-π * t) * sqrt t) =O[atTop] fun t => t ^ (-a)
x : ℝ
hx : x ∈ Ioi 0
⊢ ((fun t => t ^ (-a)) ∘ fun x => x⁻¹) x = (fun t => t ^ a) x
[PROOFSTEP]
simp_rw [Function.comp_apply, inv_rpow (le_of_lt hx), rpow_neg (le_of_lt hx), inv_inv]
[GOAL]
⊢ zetaKernel₁ =O[𝓝[Ioi 0] 0] fun t => t ^ (-(1 / 2))
[PROOFSTEP]
have : zetaKernel₁ =ᶠ[𝓝[>] 0] zetaKernel₂ + fun t => ((1 / sqrt t - 1) / 2 : ℂ) :=
  by
  refine eventuallyEq_of_mem (Ioc_mem_nhdsWithin_Ioi <| left_mem_Ico.mpr zero_lt_one) fun t h => ?_
  rw [Pi.add_apply, zetaKernel₂, Pi.add_apply, indicator_of_mem h]
  ring
[GOAL]
⊢ zetaKernel₁ =ᶠ[𝓝[Ioi 0] 0] zetaKernel₂ + fun t => (1 / ↑(sqrt t) - 1) / 2
[PROOFSTEP]
refine eventuallyEq_of_mem (Ioc_mem_nhdsWithin_Ioi <| left_mem_Ico.mpr zero_lt_one) fun t h => ?_
[GOAL]
t : ℝ
h : t ∈ Ioc 0 1
⊢ zetaKernel₁ t = (zetaKernel₂ + fun t => (1 / ↑(sqrt t) - 1) / 2) t
[PROOFSTEP]
rw [Pi.add_apply, zetaKernel₂, Pi.add_apply, indicator_of_mem h]
[GOAL]
t : ℝ
h : t ∈ Ioc 0 1
⊢ zetaKernel₁ t = zetaKernel₁ t + (1 - 1 / ↑(sqrt t)) / 2 + (1 / ↑(sqrt t) - 1) / 2
[PROOFSTEP]
ring
[GOAL]
this : zetaKernel₁ =ᶠ[𝓝[Ioi 0] 0] zetaKernel₂ + fun t => (1 / ↑(sqrt t) - 1) / 2
⊢ zetaKernel₁ =O[𝓝[Ioi 0] 0] fun t => t ^ (-(1 / 2))
[PROOFSTEP]
refine ((isBigO_zero_zetaKernel₂_rpow _).add ?_).congr' this.symm (EventuallyEq.refl _ _)
[GOAL]
this : zetaKernel₁ =ᶠ[𝓝[Ioi 0] 0] zetaKernel₂ + fun t => (1 / ↑(sqrt t) - 1) / 2
⊢ (fun x => (fun t => (1 / ↑(sqrt t) - 1) / 2) x) =O[𝓝[Ioi 0] 0] fun t => t ^ (-(1 / 2))
[PROOFSTEP]
simp_rw [sub_div]
[GOAL]
this : zetaKernel₁ =ᶠ[𝓝[Ioi 0] 0] zetaKernel₂ + fun t => (1 / ↑(sqrt t) - 1) / 2
⊢ (fun x => 1 / ↑(sqrt x) / 2 - 1 / 2) =O[𝓝[Ioi 0] 0] fun t => t ^ (-(1 / 2))
[PROOFSTEP]
apply IsBigO.sub
[GOAL]
case h₁
this : zetaKernel₁ =ᶠ[𝓝[Ioi 0] 0] zetaKernel₂ + fun t => (1 / ↑(sqrt t) - 1) / 2
⊢ (fun x => 1 / ↑(sqrt x) / 2) =O[𝓝[Ioi 0] 0] fun t => t ^ (-(1 / 2))
[PROOFSTEP]
apply IsBigO.of_norm_left
[GOAL]
case h₁.a
this : zetaKernel₁ =ᶠ[𝓝[Ioi 0] 0] zetaKernel₂ + fun t => (1 / ↑(sqrt t) - 1) / 2
⊢ (fun x => ‖1 / ↑(sqrt x) / 2‖) =O[𝓝[Ioi 0] 0] fun t => t ^ (-(1 / 2))
[PROOFSTEP]
simp_rw [norm_div, norm_one, div_eq_mul_inv, one_mul, mul_comm _ ‖(2 : ℂ)‖⁻¹]
[GOAL]
case h₁.a
this : zetaKernel₁ =ᶠ[𝓝[Ioi 0] 0] zetaKernel₂ + fun t => (1 / ↑(sqrt t) - 1) / 2
⊢ (fun x => ‖2‖⁻¹ * ‖↑(sqrt x)‖⁻¹) =O[𝓝[Ioi 0] 0] fun t => t ^ (-2⁻¹)
[PROOFSTEP]
refine
  ((isBigO_refl _ _).congr' (EventuallyEq.refl _ _)
        (eventuallyEq_of_mem self_mem_nhdsWithin fun x hx => ?_)).const_mul_left
    _
[GOAL]
case h₁.a
this : zetaKernel₁ =ᶠ[𝓝[Ioi 0] 0] zetaKernel₂ + fun t => (1 / ↑(sqrt t) - 1) / 2
x : ℝ
hx : x ∈ Ioi 0
⊢ ‖↑(sqrt x)‖⁻¹ = x ^ (-2⁻¹)
[PROOFSTEP]
rw [Complex.norm_eq_abs, abs_ofReal, abs_of_nonneg (sqrt_nonneg _), sqrt_eq_rpow, rpow_neg (le_of_lt hx), one_div]
[GOAL]
case h₂
this : zetaKernel₁ =ᶠ[𝓝[Ioi 0] 0] zetaKernel₂ + fun t => (1 / ↑(sqrt t) - 1) / 2
⊢ (fun x => 1 / 2) =O[𝓝[Ioi 0] 0] fun t => t ^ (-(1 / 2))
[PROOFSTEP]
refine isBigO_iff.mpr ⟨‖(1 / 2 : ℂ)‖, ?_⟩
[GOAL]
case h₂
this : zetaKernel₁ =ᶠ[𝓝[Ioi 0] 0] zetaKernel₂ + fun t => (1 / ↑(sqrt t) - 1) / 2
⊢ ∀ᶠ (x : ℝ) in 𝓝[Ioi 0] 0, ‖1 / 2‖ ≤ ‖1 / 2‖ * ‖x ^ (-(1 / 2))‖
[PROOFSTEP]
refine eventually_of_mem (Ioc_mem_nhdsWithin_Ioi <| left_mem_Ico.mpr zero_lt_one) fun t ht => ?_
[GOAL]
case h₂
this : zetaKernel₁ =ᶠ[𝓝[Ioi 0] 0] zetaKernel₂ + fun t => (1 / ↑(sqrt t) - 1) / 2
t : ℝ
ht : t ∈ Ioc 0 1
⊢ ‖1 / 2‖ ≤ ‖1 / 2‖ * ‖t ^ (-(1 / 2))‖
[PROOFSTEP]
refine le_mul_of_one_le_right (norm_nonneg _) ?_
[GOAL]
case h₂
this : zetaKernel₁ =ᶠ[𝓝[Ioi 0] 0] zetaKernel₂ + fun t => (1 / ↑(sqrt t) - 1) / 2
t : ℝ
ht : t ∈ Ioc 0 1
⊢ 1 ≤ ‖t ^ (-(1 / 2))‖
[PROOFSTEP]
rw [norm_of_nonneg (rpow_nonneg_of_nonneg ht.1.le _), rpow_neg ht.1.le]
[GOAL]
case h₂
this : zetaKernel₁ =ᶠ[𝓝[Ioi 0] 0] zetaKernel₂ + fun t => (1 / ↑(sqrt t) - 1) / 2
t : ℝ
ht : t ∈ Ioc 0 1
⊢ 1 ≤ (t ^ (1 / 2))⁻¹
[PROOFSTEP]
exact one_le_inv (rpow_pos_of_pos ht.1 _) (rpow_le_one ht.1.le ht.2 one_half_pos.le)
[GOAL]
s : ℂ
hs : s ≠ 0
hs' : s ≠ 1
⊢ DifferentiableAt ℂ riemannCompletedZeta s
[PROOFSTEP]
refine (differentiable_completed_zeta₀.differentiableAt.sub ?_).add ?_
[GOAL]
case refine_1
s : ℂ
hs : s ≠ 0
hs' : s ≠ 1
⊢ DifferentiableAt ℂ (fun y => 1 / y) s
[PROOFSTEP]
exact (Differentiable.differentiableAt (differentiable_const _)).div differentiableAt_id hs
[GOAL]
case refine_2
s : ℂ
hs : s ≠ 0
hs' : s ≠ 1
⊢ DifferentiableAt ℂ (fun y => 1 / (y - 1)) s
[PROOFSTEP]
refine (differentiable_const _).differentiableAt.div ?_ (sub_ne_zero.mpr hs')
[GOAL]
case refine_2
s : ℂ
hs : s ≠ 0
hs' : s ≠ 1
⊢ DifferentiableAt ℂ (fun y => y - 1) s
[PROOFSTEP]
exact differentiableAt_id.sub (differentiableAt_const _)
[GOAL]
s : ℂ
hs' : s ≠ 1
⊢ DifferentiableAt ℂ riemannZeta s
[PROOFSTEP]
have c1 :
  ∀ (t : ℂ) (_ : t ≠ 0) (_ : t ≠ 1),
    DifferentiableAt ℂ (fun u : ℂ => (π : ℂ) ^ (u / 2) * riemannCompletedZeta u / Gamma (u / 2)) t :=
  by
  intro t ht ht'
  apply DifferentiableAt.mul
  · refine (DifferentiableAt.const_cpow ?_ ?_).mul (differentiableAt_completed_zeta ht ht')
    · exact DifferentiableAt.div_const differentiableAt_id _
    · exact Or.inl (ofReal_ne_zero.mpr pi_pos.ne')
  · refine differentiable_one_div_Gamma.differentiableAt.comp t ?_
    exact
      DifferentiableAt.div_const differentiableAt_id
        _
          -- Second claim: the limit at `s = 0` exists and is equal to `-1 / 2`.
[GOAL]
s : ℂ
hs' : s ≠ 1
⊢ ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
[PROOFSTEP]
intro t ht ht'
[GOAL]
s : ℂ
hs' : s ≠ 1
t : ℂ
ht : t ≠ 0
ht' : t ≠ 1
⊢ DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
[PROOFSTEP]
apply DifferentiableAt.mul
[GOAL]
case ha
s : ℂ
hs' : s ≠ 1
t : ℂ
ht : t ≠ 0
ht' : t ≠ 1
⊢ DifferentiableAt ℂ (fun y => ↑π ^ (y / 2) * riemannCompletedZeta y) t
[PROOFSTEP]
refine (DifferentiableAt.const_cpow ?_ ?_).mul (differentiableAt_completed_zeta ht ht')
[GOAL]
case ha.refine_1
s : ℂ
hs' : s ≠ 1
t : ℂ
ht : t ≠ 0
ht' : t ≠ 1
⊢ DifferentiableAt ℂ (fun y => y / 2) t
[PROOFSTEP]
exact DifferentiableAt.div_const differentiableAt_id _
[GOAL]
case ha.refine_2
s : ℂ
hs' : s ≠ 1
t : ℂ
ht : t ≠ 0
ht' : t ≠ 1
⊢ ↑π ≠ 0 ∨ t / 2 ≠ 0
[PROOFSTEP]
exact Or.inl (ofReal_ne_zero.mpr pi_pos.ne')
[GOAL]
case hb
s : ℂ
hs' : s ≠ 1
t : ℂ
ht : t ≠ 0
ht' : t ≠ 1
⊢ DifferentiableAt ℂ (fun y => (Complex.Gamma (y / 2))⁻¹) t
[PROOFSTEP]
refine differentiable_one_div_Gamma.differentiableAt.comp t ?_
[GOAL]
case hb
s : ℂ
hs' : s ≠ 1
t : ℂ
ht : t ≠ 0
ht' : t ≠ 1
⊢ DifferentiableAt ℂ (fun y => y / 2) t
[PROOFSTEP]
exact
  DifferentiableAt.div_const differentiableAt_id
    _
      -- Second claim: the limit at `s = 0` exists and is equal to `-1 / 2`.
[GOAL]
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
⊢ DifferentiableAt ℂ riemannZeta s
[PROOFSTEP]
have c2 : Tendsto (fun s : ℂ => (π : ℂ) ^ (s / 2) * riemannCompletedZeta s / Gamma (s / 2)) (𝓝[≠] 0) (𝓝 <| -1 / 2) :=
  by
  have h1 : Tendsto (fun z : ℂ => (π : ℂ) ^ (z / 2)) (𝓝 0) (𝓝 1) :=
    by
    convert
      (ContinuousAt.comp (f := fun z => z / 2) (continuousAt_const_cpow (ofReal_ne_zero.mpr pi_pos.ne'))
          ?_).tendsto using
      2
    · simp_rw [Function.comp_apply, zero_div, cpow_zero]
    · exact continuousAt_id.div continuousAt_const two_ne_zero
  suffices h2 : Tendsto (fun z => riemannCompletedZeta z / Gamma (z / 2)) (𝓝[≠] 0) (𝓝 <| -1 / 2)
  · convert (h1.mono_left nhdsWithin_le_nhds).mul h2 using 1
    · ext1 x; rw [mul_div]
    · simp only [one_mul]
  suffices h3 : Tendsto (fun z => riemannCompletedZeta z * (z / 2) / (z / 2 * Gamma (z / 2))) (𝓝[≠] 0) (𝓝 <| -1 / 2)
  · refine Tendsto.congr' (eventuallyEq_of_mem self_mem_nhdsWithin fun z hz => ?_) h3
    rw [← div_div, mul_div_cancel _ (div_ne_zero hz two_ne_zero)]
  have h4 : Tendsto (fun z : ℂ => z / 2 * Gamma (z / 2)) (𝓝[≠] 0) (𝓝 1) :=
    by
    refine tendsto_self_mul_Gamma_nhds_zero.comp ?_
    rw [tendsto_nhdsWithin_iff, (by simp : 𝓝 (0 : ℂ) = 𝓝 (0 / 2))]
    exact
      ⟨(tendsto_id.div_const _).mono_left nhdsWithin_le_nhds,
        eventually_of_mem self_mem_nhdsWithin fun x hx => div_ne_zero hx two_ne_zero⟩
  suffices Tendsto (fun z => riemannCompletedZeta z * z / 2) (𝓝[≠] 0) (𝓝 (-1 / 2 : ℂ))
    by
    have := this.div h4 one_ne_zero
    simp_rw [div_one, mul_div_assoc] at this
    exact this
  refine Tendsto.div ?_ tendsto_const_nhds two_ne_zero
  simp_rw [riemannCompletedZeta, add_mul, sub_mul]
  rw [show 𝓝 (-1 : ℂ) = 𝓝 (0 - 1 + 0) by rw [zero_sub, add_zero]]
  refine (Tendsto.sub ?_ ?_).add ?_
  · refine Tendsto.mono_left ?_ nhdsWithin_le_nhds
    have : ContinuousAt riemannCompletedZeta₀ 0 := differentiable_completed_zeta₀.continuous.continuousAt
    simpa only [id.def, mul_zero] using Tendsto.mul this tendsto_id
  · refine tendsto_const_nhds.congr' (eventuallyEq_of_mem self_mem_nhdsWithin fun t ht => ?_)
    simp_rw [one_div_mul_cancel ht]
  · refine Tendsto.mono_left ?_ nhdsWithin_le_nhds
    suffices ContinuousAt (fun z : ℂ => 1 / (z - 1)) 0 by
      simpa only [id.def, mul_zero] using Tendsto.mul this tendsto_id
    refine continuousAt_const.div (continuousAt_id.sub continuousAt_const) ?_
    simpa only [zero_sub] using neg_ne_zero.mpr one_ne_zero
[GOAL]
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
⊢ Tendsto (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
[PROOFSTEP]
have h1 : Tendsto (fun z : ℂ => (π : ℂ) ^ (z / 2)) (𝓝 0) (𝓝 1) :=
  by
  convert
    (ContinuousAt.comp (f := fun z => z / 2) (continuousAt_const_cpow (ofReal_ne_zero.mpr pi_pos.ne')) ?_).tendsto using
    2
  · simp_rw [Function.comp_apply, zero_div, cpow_zero]
  · exact continuousAt_id.div continuousAt_const two_ne_zero
[GOAL]
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
⊢ Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
[PROOFSTEP]
convert
  (ContinuousAt.comp (f := fun z => z / 2) (continuousAt_const_cpow (ofReal_ne_zero.mpr pi_pos.ne')) ?_).tendsto using 2
[GOAL]
case h.e'_5.h.e'_3
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
⊢ 1 = ((fun x => ↑π ^ x) ∘ fun z => z / 2) 0
[PROOFSTEP]
simp_rw [Function.comp_apply, zero_div, cpow_zero]
[GOAL]
case convert_1
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
⊢ ContinuousAt (fun z => z / 2) 0
[PROOFSTEP]
exact continuousAt_id.div continuousAt_const two_ne_zero
[GOAL]
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
⊢ Tendsto (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
[PROOFSTEP]
suffices h2 : Tendsto (fun z => riemannCompletedZeta z / Gamma (z / 2)) (𝓝[≠] 0) (𝓝 <| -1 / 2)
[GOAL]
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h2 : Tendsto (fun z => riemannCompletedZeta z / Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
⊢ Tendsto (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
[PROOFSTEP]
convert (h1.mono_left nhdsWithin_le_nhds).mul h2 using 1
[GOAL]
case h.e'_3
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h2 : Tendsto (fun z => riemannCompletedZeta z / Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
⊢ (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) = fun x =>
    ↑π ^ (x / 2) * (riemannCompletedZeta x / Complex.Gamma (x / 2))
[PROOFSTEP]
ext1 x
[GOAL]
case h.e'_3.h
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h2 : Tendsto (fun z => riemannCompletedZeta z / Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
x : ℂ
⊢ ↑π ^ (x / 2) * riemannCompletedZeta x / Complex.Gamma (x / 2) =
    ↑π ^ (x / 2) * (riemannCompletedZeta x / Complex.Gamma (x / 2))
[PROOFSTEP]
rw [mul_div]
[GOAL]
case h.e'_5
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h2 : Tendsto (fun z => riemannCompletedZeta z / Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
⊢ 𝓝 (-1 / 2) = 𝓝 (1 * (-1 / 2))
[PROOFSTEP]
simp only [one_mul]
[GOAL]
case h2
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
⊢ Tendsto (fun z => riemannCompletedZeta z / Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
[PROOFSTEP]
suffices h3 : Tendsto (fun z => riemannCompletedZeta z * (z / 2) / (z / 2 * Gamma (z / 2))) (𝓝[≠] 0) (𝓝 <| -1 / 2)
[GOAL]
case h2
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h3 : Tendsto (fun z => riemannCompletedZeta z * (z / 2) / (z / 2 * Complex.Gamma (z / 2))) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
⊢ Tendsto (fun z => riemannCompletedZeta z / Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
[PROOFSTEP]
refine Tendsto.congr' (eventuallyEq_of_mem self_mem_nhdsWithin fun z hz => ?_) h3
[GOAL]
case h2
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h3 : Tendsto (fun z => riemannCompletedZeta z * (z / 2) / (z / 2 * Complex.Gamma (z / 2))) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
z : ℂ
hz : z ∈ {0}ᶜ
⊢ riemannCompletedZeta z * (z / 2) / (z / 2 * Complex.Gamma (z / 2)) = riemannCompletedZeta z / Complex.Gamma (z / 2)
[PROOFSTEP]
rw [← div_div, mul_div_cancel _ (div_ne_zero hz two_ne_zero)]
[GOAL]
case h3
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
⊢ Tendsto (fun z => riemannCompletedZeta z * (z / 2) / (z / 2 * Complex.Gamma (z / 2))) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
[PROOFSTEP]
have h4 : Tendsto (fun z : ℂ => z / 2 * Gamma (z / 2)) (𝓝[≠] 0) (𝓝 1) :=
  by
  refine tendsto_self_mul_Gamma_nhds_zero.comp ?_
  rw [tendsto_nhdsWithin_iff, (by simp : 𝓝 (0 : ℂ) = 𝓝 (0 / 2))]
  exact
    ⟨(tendsto_id.div_const _).mono_left nhdsWithin_le_nhds,
      eventually_of_mem self_mem_nhdsWithin fun x hx => div_ne_zero hx two_ne_zero⟩
[GOAL]
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
⊢ Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
[PROOFSTEP]
refine tendsto_self_mul_Gamma_nhds_zero.comp ?_
[GOAL]
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
⊢ Tendsto (fun z => z / 2) (𝓝[{0}ᶜ] 0) (𝓝[{0}ᶜ] 0)
[PROOFSTEP]
rw [tendsto_nhdsWithin_iff, (by simp : 𝓝 (0 : ℂ) = 𝓝 (0 / 2))]
[GOAL]
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
⊢ 𝓝 0 = 𝓝 (0 / 2)
[PROOFSTEP]
simp
[GOAL]
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
⊢ Tendsto (fun z => z / 2) (𝓝[{0}ᶜ] 0) (𝓝 (0 / 2)) ∧ ∀ᶠ (n : ℂ) in 𝓝[{0}ᶜ] 0, n / 2 ∈ {0}ᶜ
[PROOFSTEP]
exact
  ⟨(tendsto_id.div_const _).mono_left nhdsWithin_le_nhds,
    eventually_of_mem self_mem_nhdsWithin fun x hx => div_ne_zero hx two_ne_zero⟩
[GOAL]
case h3
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h4 : Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
⊢ Tendsto (fun z => riemannCompletedZeta z * (z / 2) / (z / 2 * Complex.Gamma (z / 2))) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
[PROOFSTEP]
suffices Tendsto (fun z => riemannCompletedZeta z * z / 2) (𝓝[≠] 0) (𝓝 (-1 / 2 : ℂ))
  by
  have := this.div h4 one_ne_zero
  simp_rw [div_one, mul_div_assoc] at this
  exact this
[GOAL]
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h4 : Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
this : Tendsto (fun z => riemannCompletedZeta z * z / 2) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
⊢ Tendsto (fun z => riemannCompletedZeta z * (z / 2) / (z / 2 * Complex.Gamma (z / 2))) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
[PROOFSTEP]
have := this.div h4 one_ne_zero
[GOAL]
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h4 : Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
this✝ : Tendsto (fun z => riemannCompletedZeta z * z / 2) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
this :
  Tendsto ((fun z => riemannCompletedZeta z * z / 2) / fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0)
    (𝓝 (-1 / 2 / 1))
⊢ Tendsto (fun z => riemannCompletedZeta z * (z / 2) / (z / 2 * Complex.Gamma (z / 2))) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
[PROOFSTEP]
simp_rw [div_one, mul_div_assoc] at this
[GOAL]
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h4 : Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
this✝ : Tendsto (fun z => riemannCompletedZeta z * z / 2) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
this :
  Tendsto ((fun z => riemannCompletedZeta z * (z / 2)) / fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0)
    (𝓝 (-1 / 2))
⊢ Tendsto (fun z => riemannCompletedZeta z * (z / 2) / (z / 2 * Complex.Gamma (z / 2))) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
[PROOFSTEP]
exact this
[GOAL]
case h3
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h4 : Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
⊢ Tendsto (fun z => riemannCompletedZeta z * z / 2) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
[PROOFSTEP]
refine Tendsto.div ?_ tendsto_const_nhds two_ne_zero
[GOAL]
case h3
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h4 : Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
⊢ Tendsto (fun z => riemannCompletedZeta z * z) (𝓝[{0}ᶜ] 0) (𝓝 (-1))
[PROOFSTEP]
simp_rw [riemannCompletedZeta, add_mul, sub_mul]
[GOAL]
case h3
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h4 : Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
⊢ Tendsto (fun z => riemannCompletedZeta₀ z * z - 1 / z * z + 1 / (z - 1) * z) (𝓝[{0}ᶜ] 0) (𝓝 (-1))
[PROOFSTEP]
rw [show 𝓝 (-1 : ℂ) = 𝓝 (0 - 1 + 0) by rw [zero_sub, add_zero]]
[GOAL]
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h4 : Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
⊢ 𝓝 (-1) = 𝓝 (0 - 1 + 0)
[PROOFSTEP]
rw [zero_sub, add_zero]
[GOAL]
case h3
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h4 : Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
⊢ Tendsto (fun z => riemannCompletedZeta₀ z * z - 1 / z * z + 1 / (z - 1) * z) (𝓝[{0}ᶜ] 0) (𝓝 (0 - 1 + 0))
[PROOFSTEP]
refine (Tendsto.sub ?_ ?_).add ?_
[GOAL]
case h3.refine_1
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h4 : Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
⊢ Tendsto (fun z => riemannCompletedZeta₀ z * z) (𝓝[{0}ᶜ] 0) (𝓝 0)
[PROOFSTEP]
refine Tendsto.mono_left ?_ nhdsWithin_le_nhds
[GOAL]
case h3.refine_1
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h4 : Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
⊢ Tendsto (fun z => riemannCompletedZeta₀ z * z) (𝓝 0) (𝓝 0)
[PROOFSTEP]
have : ContinuousAt riemannCompletedZeta₀ 0 := differentiable_completed_zeta₀.continuous.continuousAt
[GOAL]
case h3.refine_1
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h4 : Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
this : ContinuousAt riemannCompletedZeta₀ 0
⊢ Tendsto (fun z => riemannCompletedZeta₀ z * z) (𝓝 0) (𝓝 0)
[PROOFSTEP]
simpa only [id.def, mul_zero] using Tendsto.mul this tendsto_id
[GOAL]
case h3.refine_2
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h4 : Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
⊢ Tendsto (fun z => 1 / z * z) (𝓝[{0}ᶜ] 0) (𝓝 1)
[PROOFSTEP]
refine tendsto_const_nhds.congr' (eventuallyEq_of_mem self_mem_nhdsWithin fun t ht => ?_)
[GOAL]
case h3.refine_2
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h4 : Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
t : ℂ
ht : t ∈ {0}ᶜ
⊢ 1 = 1 / t * t
[PROOFSTEP]
simp_rw [one_div_mul_cancel ht]
[GOAL]
case h3.refine_3
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h4 : Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
⊢ Tendsto (fun z => 1 / (z - 1) * z) (𝓝[{0}ᶜ] 0) (𝓝 0)
[PROOFSTEP]
refine Tendsto.mono_left ?_ nhdsWithin_le_nhds
[GOAL]
case h3.refine_3
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h4 : Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
⊢ Tendsto (fun z => 1 / (z - 1) * z) (𝓝 0) (𝓝 0)
[PROOFSTEP]
suffices ContinuousAt (fun z : ℂ => 1 / (z - 1)) 0 by simpa only [id.def, mul_zero] using Tendsto.mul this tendsto_id
[GOAL]
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h4 : Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
this : ContinuousAt (fun z => 1 / (z - 1)) 0
⊢ Tendsto (fun z => 1 / (z - 1) * z) (𝓝 0) (𝓝 0)
[PROOFSTEP]
simpa only [id.def, mul_zero] using Tendsto.mul this tendsto_id
[GOAL]
case h3.refine_3
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h4 : Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
⊢ ContinuousAt (fun z => 1 / (z - 1)) 0
[PROOFSTEP]
refine continuousAt_const.div (continuousAt_id.sub continuousAt_const) ?_
[GOAL]
case h3.refine_3
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
h1 : Tendsto (fun z => ↑π ^ (z / 2)) (𝓝 0) (𝓝 1)
h4 : Tendsto (fun z => z / 2 * Complex.Gamma (z / 2)) (𝓝[{0}ᶜ] 0) (𝓝 1)
⊢ 0 - 1 ≠ 0
[PROOFSTEP]
simpa only [zero_sub] using neg_ne_zero.mpr one_ne_zero
[GOAL]
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
c2 : Tendsto (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
⊢ DifferentiableAt ℂ riemannZeta s
[PROOFSTEP]
rcases ne_or_eq s 0 with (hs | rfl)
[GOAL]
case inl
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
c2 : Tendsto (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
hs : s ≠ 0
⊢ DifferentiableAt ℂ riemannZeta s
[PROOFSTEP]
have : {(0 : ℂ)}ᶜ ∈ 𝓝 s := isOpen_compl_singleton.mem_nhds hs
[GOAL]
case inl
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
c2 : Tendsto (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
hs : s ≠ 0
this : {0}ᶜ ∈ 𝓝 s
⊢ DifferentiableAt ℂ riemannZeta s
[PROOFSTEP]
refine (c1 s hs hs').congr_of_eventuallyEq (eventuallyEq_of_mem this fun x hx => ?_)
[GOAL]
case inl
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
c2 : Tendsto (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
hs : s ≠ 0
this : {0}ᶜ ∈ 𝓝 s
x : ℂ
hx : x ∈ {0}ᶜ
⊢ riemannZeta x = ↑π ^ (x / 2) * riemannCompletedZeta x / Complex.Gamma (x / 2)
[PROOFSTEP]
rw [riemannZeta_def]
[GOAL]
case inl
s : ℂ
hs' : s ≠ 1
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
c2 : Tendsto (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
hs : s ≠ 0
this : {0}ᶜ ∈ 𝓝 s
x : ℂ
hx : x ∈ {0}ᶜ
⊢ Function.update (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) 0 (-1 / 2) x =
    ↑π ^ (x / 2) * riemannCompletedZeta x / Complex.Gamma (x / 2)
[PROOFSTEP]
apply Function.update_noteq hx
[GOAL]
case inr
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
c2 : Tendsto (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
hs' : 0 ≠ 1
⊢ DifferentiableAt ℂ riemannZeta 0
[PROOFSTEP]
rw [riemannZeta, ← (lim_eq_iff ⟨-1 / 2, c2⟩).mpr c2]
[GOAL]
case inr
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
c2 : Tendsto (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
hs' : 0 ≠ 1
⊢ DifferentiableAt ℂ
    (Function.update (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) 0
      (lim (map (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) (𝓝[{0}ᶜ] 0))))
    0
[PROOFSTEP]
have S_nhds : {(1 : ℂ)}ᶜ ∈ 𝓝 (0 : ℂ) := isOpen_compl_singleton.mem_nhds hs'
[GOAL]
case inr
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
c2 : Tendsto (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
hs' : 0 ≠ 1
S_nhds : {1}ᶜ ∈ 𝓝 0
⊢ DifferentiableAt ℂ
    (Function.update (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) 0
      (lim (map (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) (𝓝[{0}ᶜ] 0))))
    0
[PROOFSTEP]
refine
  ((Complex.differentiableOn_update_limUnder_of_isLittleO S_nhds (fun t ht => (c1 t ht.2 ht.1).differentiableWithinAt)
          ?_)
        0 hs').differentiableAt
    S_nhds
[GOAL]
case inr
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
c2 : Tendsto (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
hs' : 0 ≠ 1
S_nhds : {1}ᶜ ∈ 𝓝 0
⊢ (fun z =>
      ↑π ^ (z / 2) * riemannCompletedZeta z / Complex.Gamma (z / 2) -
        ↑π ^ (0 / 2) * riemannCompletedZeta 0 / Complex.Gamma (0 / 2)) =o[𝓝[{0}ᶜ] 0]
    fun z => (z - 0)⁻¹
[PROOFSTEP]
simp only [zero_div, div_zero, Complex.Gamma_zero, mul_zero, cpow_zero, sub_zero]
  -- Remains to show completed zeta is `o (s ^ (-1))` near 0.
[GOAL]
case inr
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
c2 : Tendsto (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
hs' : 0 ≠ 1
S_nhds : {1}ᶜ ∈ 𝓝 0
⊢ (fun z => ↑π ^ (z / 2) * riemannCompletedZeta z / Complex.Gamma (z / 2)) =o[𝓝[{0}ᶜ] 0] fun z => z⁻¹
[PROOFSTEP]
refine (isBigO_const_of_tendsto c2 <| one_ne_zero' ℂ).trans_isLittleO ?_
[GOAL]
case inr
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
c2 : Tendsto (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
hs' : 0 ≠ 1
S_nhds : {1}ᶜ ∈ 𝓝 0
⊢ (fun _x => 1) =o[𝓝[{0}ᶜ] 0] fun z => z⁻¹
[PROOFSTEP]
rw [isLittleO_iff_tendsto']
[GOAL]
case inr
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
c2 : Tendsto (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
hs' : 0 ≠ 1
S_nhds : {1}ᶜ ∈ 𝓝 0
⊢ Tendsto (fun x => 1 / x⁻¹) (𝓝[{0}ᶜ] 0) (𝓝 0)
[PROOFSTEP]
exact Tendsto.congr (fun x => by rw [← one_div, one_div_one_div]) nhdsWithin_le_nhds
[GOAL]
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
c2 : Tendsto (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
hs' : 0 ≠ 1
S_nhds : {1}ᶜ ∈ 𝓝 0
x : ℂ
⊢ x = 1 / x⁻¹
[PROOFSTEP]
rw [← one_div, one_div_one_div]
[GOAL]
case inr
c1 :
  ∀ (t : ℂ),
    t ≠ 0 → t ≠ 1 → DifferentiableAt ℂ (fun u => ↑π ^ (u / 2) * riemannCompletedZeta u / Complex.Gamma (u / 2)) t
c2 : Tendsto (fun s => ↑π ^ (s / 2) * riemannCompletedZeta s / Complex.Gamma (s / 2)) (𝓝[{0}ᶜ] 0) (𝓝 (-1 / 2))
hs' : 0 ≠ 1
S_nhds : {1}ᶜ ∈ 𝓝 0
⊢ ∀ᶠ (x : ℂ) in 𝓝[{0}ᶜ] 0, x⁻¹ = 0 → 1 = 0
[PROOFSTEP]
exact eventually_of_mem self_mem_nhdsWithin fun x hx hx' => (hx <| inv_eq_zero.mp hx').elim
[GOAL]
n : ℕ
⊢ riemannZeta (-2 * (↑n + 1)) = 0
[PROOFSTEP]
have : (-2 : ℂ) * (n + 1) ≠ 0 := mul_ne_zero (neg_ne_zero.mpr two_ne_zero) (Nat.cast_add_one_ne_zero n)
[GOAL]
n : ℕ
this : -2 * (↑n + 1) ≠ 0
⊢ riemannZeta (-2 * (↑n + 1)) = 0
[PROOFSTEP]
rw [riemannZeta, Function.update_noteq this, show -2 * ((n : ℂ) + 1) / 2 = -↑(n + 1) by push_cast ; ring,
  Complex.Gamma_neg_nat_eq_zero, div_zero]
[GOAL]
n : ℕ
this : -2 * (↑n + 1) ≠ 0
⊢ -2 * (↑n + 1) / 2 = -↑(n + 1)
[PROOFSTEP]
push_cast
[GOAL]
n : ℕ
this : -2 * (↑n + 1) ≠ 0
⊢ -2 * (↑n + 1) / 2 = -(↑n + 1)
[PROOFSTEP]
ring
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
⊢ HasMellin (indicator (Ioc 0 1) fun t => 1 / ↑(sqrt t)) s (1 / (s - 1 / 2))
[PROOFSTEP]
have h1 : EqOn (fun t => 1 / ↑(sqrt t) : ℝ → ℂ) (fun t => (t : ℂ) ^ (-1 / 2 : ℂ)) (Ioc 0 1) :=
  by
  intro t ht
  simp_rw [neg_div, cpow_neg, ← one_div, sqrt_eq_rpow, ofReal_cpow ht.1.le]
  norm_num
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
⊢ EqOn (fun t => 1 / ↑(sqrt t)) (fun t => ↑t ^ (-1 / 2)) (Ioc 0 1)
[PROOFSTEP]
intro t ht
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
t : ℝ
ht : t ∈ Ioc 0 1
⊢ (fun t => 1 / ↑(sqrt t)) t = (fun t => ↑t ^ (-1 / 2)) t
[PROOFSTEP]
simp_rw [neg_div, cpow_neg, ← one_div, sqrt_eq_rpow, ofReal_cpow ht.1.le]
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
t : ℝ
ht : t ∈ Ioc 0 1
⊢ 1 / ↑t ^ ↑(1 / 2) = 1 / ↑t ^ (1 / 2)
[PROOFSTEP]
norm_num
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
h1 : EqOn (fun t => 1 / ↑(sqrt t)) (fun t => ↑t ^ (-1 / 2)) (Ioc 0 1)
⊢ HasMellin (indicator (Ioc 0 1) fun t => 1 / ↑(sqrt t)) s (1 / (s - 1 / 2))
[PROOFSTEP]
simp_rw [indicator_congr h1, (by ring : s - 1 / 2 = s + -1 / 2)]
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
h1 : EqOn (fun t => 1 / ↑(sqrt t)) (fun t => ↑t ^ (-1 / 2)) (Ioc 0 1)
⊢ s - 1 / 2 = s + -1 / 2
[PROOFSTEP]
ring
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
h1 : EqOn (fun t => 1 / ↑(sqrt t)) (fun t => ↑t ^ (-1 / 2)) (Ioc 0 1)
⊢ HasMellin (indicator (Ioc 0 1) fun t => ↑t ^ (-1 / 2)) s (1 / (s + -1 / 2))
[PROOFSTEP]
convert hasMellin_cpow_Ioc (-1 / 2) _
[GOAL]
case convert_2
s : ℂ
hs : 1 / 2 < s.re
h1 : EqOn (fun t => 1 / ↑(sqrt t)) (fun t => ↑t ^ (-1 / 2)) (Ioc 0 1)
⊢ 0 < s.re + (-1 / 2).re
[PROOFSTEP]
rwa [(by norm_num : (-1 / 2 : ℂ) = (-1 / 2 : ℝ)), ofReal_re, neg_div, ← sub_eq_add_neg, sub_pos]
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
h1 : EqOn (fun t => 1 / ↑(sqrt t)) (fun t => ↑t ^ (-1 / 2)) (Ioc 0 1)
⊢ -1 / 2 = ↑(-1 / 2)
[PROOFSTEP]
norm_num
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
⊢ HasMellin (indicator (Ioc 0 1) fun t => (1 - 1 / ↑(sqrt t)) / 2) s (1 / (2 * s) - 1 / (2 * s - 1))
[PROOFSTEP]
have step1 : HasMellin (indicator (Ioc 0 1) (fun t => 1 - 1 / ↑(sqrt t) : ℝ → ℂ)) s (1 / s - 1 / (s - 1 / 2)) :=
  by
  have a := hasMellin_one_Ioc (one_half_pos.trans hs)
  have b := hasMellin_one_div_sqrt_Ioc hs
  simpa only [a.2, b.2, ← indicator_sub] using
    hasMellin_sub a.1
      b.1
        -- todo: implement something like "indicator.const_div" (blocked by the port for now)
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
⊢ HasMellin (indicator (Ioc 0 1) fun t => 1 - 1 / ↑(sqrt t)) s (1 / s - 1 / (s - 1 / 2))
[PROOFSTEP]
have a := hasMellin_one_Ioc (one_half_pos.trans hs)
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
a : HasMellin (indicator (Ioc 0 1) fun x => 1) s (1 / s)
⊢ HasMellin (indicator (Ioc 0 1) fun t => 1 - 1 / ↑(sqrt t)) s (1 / s - 1 / (s - 1 / 2))
[PROOFSTEP]
have b := hasMellin_one_div_sqrt_Ioc hs
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
a : HasMellin (indicator (Ioc 0 1) fun x => 1) s (1 / s)
b : HasMellin (indicator (Ioc 0 1) fun t => 1 / ↑(sqrt t)) s (1 / (s - 1 / 2))
⊢ HasMellin (indicator (Ioc 0 1) fun t => 1 - 1 / ↑(sqrt t)) s (1 / s - 1 / (s - 1 / 2))
[PROOFSTEP]
simpa only [a.2, b.2, ← indicator_sub] using
  hasMellin_sub a.1
    b.1
      -- todo: implement something like "indicator.const_div" (blocked by the port for now)
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
step1 : HasMellin (indicator (Ioc 0 1) fun t => 1 - 1 / ↑(sqrt t)) s (1 / s - 1 / (s - 1 / 2))
⊢ HasMellin (indicator (Ioc 0 1) fun t => (1 - 1 / ↑(sqrt t)) / 2) s (1 / (2 * s) - 1 / (2 * s - 1))
[PROOFSTEP]
rw [show
    ((Ioc 0 1).indicator fun t => (1 - 1 / (sqrt t : ℂ)) / 2) = fun t =>
      (Ioc 0 1).indicator (fun t => 1 - 1 / (sqrt t : ℂ)) t / 2
    by ext1 t; simp_rw [div_eq_inv_mul, indicator_mul_right]]
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
step1 : HasMellin (indicator (Ioc 0 1) fun t => 1 - 1 / ↑(sqrt t)) s (1 / s - 1 / (s - 1 / 2))
⊢ (indicator (Ioc 0 1) fun t => (1 - 1 / ↑(sqrt t)) / 2) = fun t =>
    indicator (Ioc 0 1) (fun t => 1 - 1 / ↑(sqrt t)) t / 2
[PROOFSTEP]
ext1 t
[GOAL]
case h
s : ℂ
hs : 1 / 2 < s.re
step1 : HasMellin (indicator (Ioc 0 1) fun t => 1 - 1 / ↑(sqrt t)) s (1 / s - 1 / (s - 1 / 2))
t : ℝ
⊢ indicator (Ioc 0 1) (fun t => (1 - 1 / ↑(sqrt t)) / 2) t = indicator (Ioc 0 1) (fun t => 1 - 1 / ↑(sqrt t)) t / 2
[PROOFSTEP]
simp_rw [div_eq_inv_mul, indicator_mul_right]
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
step1 : HasMellin (indicator (Ioc 0 1) fun t => 1 - 1 / ↑(sqrt t)) s (1 / s - 1 / (s - 1 / 2))
⊢ HasMellin (fun t => indicator (Ioc 0 1) (fun t => 1 - 1 / ↑(sqrt t)) t / 2) s (1 / (2 * s) - 1 / (2 * s - 1))
[PROOFSTEP]
simp_rw [HasMellin, mellin_div_const, step1.2, sub_div, div_div]
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
step1 : HasMellin (indicator (Ioc 0 1) fun t => 1 - 1 / ↑(sqrt t)) s (1 / s - 1 / (s - 1 / 2))
⊢ MellinConvergent (fun t => indicator (Ioc 0 1) (fun t => 1 - 1 / ↑(sqrt t)) t / 2) s ∧
    1 / (s * 2) - 1 / ((s - 1 / 2) * 2) = 1 / (2 * s) - 1 / (2 * s - 1)
[PROOFSTEP]
refine ⟨step1.1.div_const _, ?_⟩
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
step1 : HasMellin (indicator (Ioc 0 1) fun t => 1 - 1 / ↑(sqrt t)) s (1 / s - 1 / (s - 1 / 2))
⊢ 1 / (s * 2) - 1 / ((s - 1 / 2) * 2) = 1 / (2 * s) - 1 / (2 * s - 1)
[PROOFSTEP]
rw [mul_comm, sub_mul, div_mul_cancel _ (two_ne_zero' ℂ), mul_comm s 2]
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
⊢ mellin zetaKernel₂ s = mellin zetaKernel₁ s + 1 / (2 * s) - 1 / (2 * s - 1)
[PROOFSTEP]
have h :=
  mellinConvergent_of_isBigO_rpow_exp pi_pos locally_integrable_zetaKernel₁ isBigO_atTop_zetaKernel₁
    isBigO_zero_zetaKernel₁ hs
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
h : MellinConvergent zetaKernel₁ s
⊢ mellin zetaKernel₂ s = mellin zetaKernel₁ s + 1 / (2 * s) - 1 / (2 * s - 1)
[PROOFSTEP]
have h' := hasMellin_one_div_sqrt_sub_one_div_two_Ioc hs
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
h : MellinConvergent zetaKernel₁ s
h' : HasMellin (indicator (Ioc 0 1) fun t => (1 - 1 / ↑(sqrt t)) / 2) s (1 / (2 * s) - 1 / (2 * s - 1))
⊢ mellin zetaKernel₂ s = mellin zetaKernel₁ s + 1 / (2 * s) - 1 / (2 * s - 1)
[PROOFSTEP]
simp_rw [zetaKernel₂, Pi.add_def, add_sub_assoc, (hasMellin_add h h'.1).2, h'.2]
[GOAL]
s : ℂ
hs : 1 < s.re
⊢ riemannCompletedZeta s = mellin zetaKernel₁ (s / 2)
[PROOFSTEP]
have : 1 / 2 < (s / 2).re :=
  by
  rw [show s / 2 = ↑(2⁻¹ : ℝ) * s by push_cast ; rw [mul_comm]; rfl]
  rwa [ofReal_mul_re, ← div_eq_inv_mul, div_lt_div_right (zero_lt_two' ℝ)]
[GOAL]
s : ℂ
hs : 1 < s.re
⊢ 1 / 2 < (s / 2).re
[PROOFSTEP]
rw [show s / 2 = ↑(2⁻¹ : ℝ) * s by push_cast ; rw [mul_comm]; rfl]
[GOAL]
s : ℂ
hs : 1 < s.re
⊢ s / 2 = ↑2⁻¹ * s
[PROOFSTEP]
push_cast
[GOAL]
s : ℂ
hs : 1 < s.re
⊢ s / 2 = 2⁻¹ * s
[PROOFSTEP]
rw [mul_comm]
[GOAL]
s : ℂ
hs : 1 < s.re
⊢ s / 2 = s * 2⁻¹
[PROOFSTEP]
rfl
[GOAL]
s : ℂ
hs : 1 < s.re
⊢ 1 / 2 < (↑2⁻¹ * s).re
[PROOFSTEP]
rwa [ofReal_mul_re, ← div_eq_inv_mul, div_lt_div_right (zero_lt_two' ℝ)]
[GOAL]
s : ℂ
hs : 1 < s.re
this : 1 / 2 < (s / 2).re
⊢ riemannCompletedZeta s = mellin zetaKernel₁ (s / 2)
[PROOFSTEP]
rw [riemannCompletedZeta, riemannCompletedZeta₀, mellin_zetaKernel₂_eq_of_lt_re this, sub_add, sub_sub, ← add_sub]
[GOAL]
s : ℂ
hs : 1 < s.re
this : 1 / 2 < (s / 2).re
⊢ mellin zetaKernel₁ (s / 2) + (1 / (2 * (s / 2)) - (1 / (2 * (s / 2) - 1) + (1 / s - 1 / (s - 1)))) =
    mellin zetaKernel₁ (s / 2)
[PROOFSTEP]
conv_rhs => rw [← add_zero (mellin zetaKernel₁ <| s / 2)]
[GOAL]
s : ℂ
hs : 1 < s.re
this : 1 / 2 < (s / 2).re
| mellin zetaKernel₁ (s / 2)
[PROOFSTEP]
rw [← add_zero (mellin zetaKernel₁ <| s / 2)]
[GOAL]
s : ℂ
hs : 1 < s.re
this : 1 / 2 < (s / 2).re
| mellin zetaKernel₁ (s / 2)
[PROOFSTEP]
rw [← add_zero (mellin zetaKernel₁ <| s / 2)]
[GOAL]
s : ℂ
hs : 1 < s.re
this : 1 / 2 < (s / 2).re
| mellin zetaKernel₁ (s / 2)
[PROOFSTEP]
rw [← add_zero (mellin zetaKernel₁ <| s / 2)]
[GOAL]
s : ℂ
hs : 1 < s.re
this : 1 / 2 < (s / 2).re
⊢ mellin zetaKernel₁ (s / 2) + (1 / (2 * (s / 2)) - (1 / (2 * (s / 2) - 1) + (1 / s - 1 / (s - 1)))) =
    mellin zetaKernel₁ (s / 2) + 0
[PROOFSTEP]
congr 1
[GOAL]
case e_a
s : ℂ
hs : 1 < s.re
this : 1 / 2 < (s / 2).re
⊢ 1 / (2 * (s / 2)) - (1 / (2 * (s / 2) - 1) + (1 / s - 1 / (s - 1))) = 0
[PROOFSTEP]
rw [mul_div_cancel' _ (two_ne_zero' ℂ)]
[GOAL]
case e_a
s : ℂ
hs : 1 < s.re
this : 1 / 2 < (s / 2).re
⊢ 1 / s - (1 / (s - 1) + (1 / s - 1 / (s - 1))) = 0
[PROOFSTEP]
abel
[GOAL]
case e_a
s : ℂ
hs : 1 < s.re
this : 1 / 2 < (s / 2).re
⊢ 1 / s - (1 / (s - 1) + (1 / s - 1 / (s - 1))) = 0
[PROOFSTEP]
abel
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
⊢ ∫ (t : ℝ) in Ioi 0, ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2)) =
    ↑π ^ (-s) * Complex.Gamma s * (1 / (↑n + 1) ^ (2 * s))
[PROOFSTEP]
rw [Complex.Gamma_eq_integral hs, GammaIntegral_eq_mellin]
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
⊢ ∫ (t : ℝ) in Ioi 0, ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2)) =
    ↑π ^ (-s) * mellin (fun x => ↑(rexp (-x))) s * (1 / (↑n + 1) ^ (2 * s))
[PROOFSTEP]
conv_rhs =>
  congr
  rw [← smul_eq_mul, ← mellin_comp_mul_left _ _ pi_pos]
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
| ↑π ^ (-s) * mellin (fun x => ↑(rexp (-x))) s * (1 / (↑n + 1) ^ (2 * s))
[PROOFSTEP]
  congr
  rw [← smul_eq_mul, ← mellin_comp_mul_left _ _ pi_pos]
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
| ↑π ^ (-s) * mellin (fun x => ↑(rexp (-x))) s * (1 / (↑n + 1) ^ (2 * s))
[PROOFSTEP]
  congr
  rw [← smul_eq_mul, ← mellin_comp_mul_left _ _ pi_pos]
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
| ↑π ^ (-s) * mellin (fun x => ↑(rexp (-x))) s * (1 / (↑n + 1) ^ (2 * s))
[PROOFSTEP]
congr
[GOAL]
case a
s : ℂ
hs : 0 < s.re
n : ℕ
| ↑π ^ (-s) * mellin (fun x => ↑(rexp (-x))) s
case a s : ℂ hs : 0 < s.re n : ℕ | 1 / (↑n + 1) ^ (2 * s)
[PROOFSTEP]
rw [← smul_eq_mul, ← mellin_comp_mul_left _ _ pi_pos]
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
⊢ ∫ (t : ℝ) in Ioi 0, ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2)) =
    mellin (fun t => ↑(rexp (-(π * t)))) s * (1 / (↑n + 1) ^ (2 * s))
[PROOFSTEP]
have : 1 / ((n : ℂ) + 1) ^ (2 * s) = (((n : ℝ) + 1) ^ (2 : ℝ) : ℂ) ^ (-s) :=
  by
  rw [(by norm_num : (n : ℂ) + 1 = ↑((n : ℝ) + 1)), (by norm_num : 2 * s = ↑(2 : ℝ) * s), cpow_mul_ofReal_nonneg,
    one_div, cpow_neg]
  rw [← Nat.cast_succ]
  exact Nat.cast_nonneg _
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
⊢ 1 / (↑n + 1) ^ (2 * s) = ↑((↑n + 1) ^ 2) ^ (-s)
[PROOFSTEP]
rw [(by norm_num : (n : ℂ) + 1 = ↑((n : ℝ) + 1)), (by norm_num : 2 * s = ↑(2 : ℝ) * s), cpow_mul_ofReal_nonneg, one_div,
  cpow_neg]
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
⊢ ↑n + 1 = ↑(↑n + 1)
[PROOFSTEP]
norm_num
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
⊢ 2 * s = ↑2 * s
[PROOFSTEP]
norm_num
[GOAL]
case hx
s : ℂ
hs : 0 < s.re
n : ℕ
⊢ 0 ≤ ↑n + 1
[PROOFSTEP]
rw [← Nat.cast_succ]
[GOAL]
case hx
s : ℂ
hs : 0 < s.re
n : ℕ
⊢ 0 ≤ ↑(Nat.succ n)
[PROOFSTEP]
exact Nat.cast_nonneg _
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
this : 1 / (↑n + 1) ^ (2 * s) = ↑((↑n + 1) ^ 2) ^ (-s)
⊢ ∫ (t : ℝ) in Ioi 0, ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2)) =
    mellin (fun t => ↑(rexp (-(π * t)))) s * (1 / (↑n + 1) ^ (2 * s))
[PROOFSTEP]
conv_rhs => rw [this, mul_comm, ← smul_eq_mul]
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
this : 1 / (↑n + 1) ^ (2 * s) = ↑((↑n + 1) ^ 2) ^ (-s)
| mellin (fun t => ↑(rexp (-(π * t)))) s * (1 / (↑n + 1) ^ (2 * s))
[PROOFSTEP]
rw [this, mul_comm, ← smul_eq_mul]
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
this : 1 / (↑n + 1) ^ (2 * s) = ↑((↑n + 1) ^ 2) ^ (-s)
| mellin (fun t => ↑(rexp (-(π * t)))) s * (1 / (↑n + 1) ^ (2 * s))
[PROOFSTEP]
rw [this, mul_comm, ← smul_eq_mul]
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
this : 1 / (↑n + 1) ^ (2 * s) = ↑((↑n + 1) ^ 2) ^ (-s)
| mellin (fun t => ↑(rexp (-(π * t)))) s * (1 / (↑n + 1) ^ (2 * s))
[PROOFSTEP]
rw [this, mul_comm, ← smul_eq_mul]
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
this : 1 / (↑n + 1) ^ (2 * s) = ↑((↑n + 1) ^ 2) ^ (-s)
⊢ ∫ (t : ℝ) in Ioi 0, ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2)) =
    ↑((↑n + 1) ^ 2) ^ (-s) • mellin (fun t => ↑(rexp (-(π * t)))) s
[PROOFSTEP]
rw [← mellin_comp_mul_right _ _ (show 0 < ((n : ℝ) + 1) ^ (2 : ℝ) by positivity)]
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
this : 1 / (↑n + 1) ^ (2 * s) = ↑((↑n + 1) ^ 2) ^ (-s)
⊢ 0 < (↑n + 1) ^ 2
[PROOFSTEP]
positivity
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
this : 1 / (↑n + 1) ^ (2 * s) = ↑((↑n + 1) ^ 2) ^ (-s)
⊢ ∫ (t : ℝ) in Ioi 0, ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2)) =
    mellin (fun t => ↑(rexp (-(π * (t * (↑n + 1) ^ 2))))) s
[PROOFSTEP]
refine set_integral_congr measurableSet_Ioi fun t _ => ?_
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
this : 1 / (↑n + 1) ^ (2 * s) = ↑((↑n + 1) ^ 2) ^ (-s)
t : ℝ
x✝ : t ∈ Ioi 0
⊢ ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2)) = ↑t ^ (s - 1) • (fun t => ↑(rexp (-(π * (t * (↑n + 1) ^ 2))))) t
[PROOFSTEP]
simp_rw [smul_eq_mul]
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
this : 1 / (↑n + 1) ^ (2 * s) = ↑((↑n + 1) ^ 2) ^ (-s)
t : ℝ
x✝ : t ∈ Ioi 0
⊢ ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2)) = ↑t ^ (s - 1) * ↑(rexp (-(π * (t * (↑n + 1) ^ 2))))
[PROOFSTEP]
congr 3
[GOAL]
case e_a.e_r.e_x
s : ℂ
hs : 0 < s.re
n : ℕ
this : 1 / (↑n + 1) ^ (2 * s) = ↑((↑n + 1) ^ 2) ^ (-s)
t : ℝ
x✝ : t ∈ Ioi 0
⊢ -π * t * (↑n + 1) ^ 2 = -(π * (t * (↑n + 1) ^ 2))
[PROOFSTEP]
conv_rhs => rw [← Nat.cast_two, rpow_nat_cast]
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
this : 1 / (↑n + 1) ^ (2 * s) = ↑((↑n + 1) ^ 2) ^ (-s)
t : ℝ
x✝ : t ∈ Ioi 0
| -(π * (t * (↑n + 1) ^ 2))
[PROOFSTEP]
rw [← Nat.cast_two, rpow_nat_cast]
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
this : 1 / (↑n + 1) ^ (2 * s) = ↑((↑n + 1) ^ 2) ^ (-s)
t : ℝ
x✝ : t ∈ Ioi 0
| -(π * (t * (↑n + 1) ^ 2))
[PROOFSTEP]
rw [← Nat.cast_two, rpow_nat_cast]
[GOAL]
s : ℂ
hs : 0 < s.re
n : ℕ
this : 1 / (↑n + 1) ^ (2 * s) = ↑((↑n + 1) ^ 2) ^ (-s)
t : ℝ
x✝ : t ∈ Ioi 0
| -(π * (t * (↑n + 1) ^ 2))
[PROOFSTEP]
rw [← Nat.cast_two, rpow_nat_cast]
[GOAL]
case e_a.e_r.e_x
s : ℂ
hs : 0 < s.re
n : ℕ
this : 1 / (↑n + 1) ^ (2 * s) = ↑((↑n + 1) ^ 2) ^ (-s)
t : ℝ
x✝ : t ∈ Ioi 0
⊢ -π * t * (↑n + 1) ^ 2 = -(π * (t * (↑n + 1) ^ 2))
[PROOFSTEP]
ring
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
⊢ mellin zetaKernel₁ s = ↑π ^ (-s) * Complex.Gamma s * ∑' (n : ℕ), 1 / (↑n + 1) ^ (2 * s)
[PROOFSTEP]
let bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * exp (-π * t * ((n : ℝ) + 1) ^ 2)
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
⊢ mellin zetaKernel₁ s = ↑π ^ (-s) * Complex.Gamma s * ∑' (n : ℕ), 1 / (↑n + 1) ^ (2 * s)
[PROOFSTEP]
let f : ℕ → ℝ → ℂ := fun n t => (t : ℂ) ^ (s - 1) * exp (-π * t * ((n : ℝ) + 1) ^ 2)
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
⊢ mellin zetaKernel₁ s = ↑π ^ (-s) * Complex.Gamma s * ∑' (n : ℕ), 1 / (↑n + 1) ^ (2 * s)
[PROOFSTEP]
have hm : MeasurableSet (Ioi (0 : ℝ)) := measurableSet_Ioi
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
⊢ mellin zetaKernel₁ s = ↑π ^ (-s) * Complex.Gamma s * ∑' (n : ℕ), 1 / (↑n + 1) ^ (2 * s)
[PROOFSTEP]
have h_norm : ∀ (n : ℕ) {t : ℝ} (_ : 0 < t), ‖f n t‖ = bd n t :=
  by
  intro n t ht
  rw [norm_mul, Complex.norm_eq_abs, Complex.norm_eq_abs, Complex.abs_of_nonneg (exp_pos _).le,
    abs_cpow_eq_rpow_re_of_pos ht, sub_re, one_re]
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
⊢ ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
[PROOFSTEP]
intro n t ht
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
n : ℕ
t : ℝ
ht : 0 < t
⊢ ‖f n t‖ = bd n t
[PROOFSTEP]
rw [norm_mul, Complex.norm_eq_abs, Complex.norm_eq_abs, Complex.abs_of_nonneg (exp_pos _).le,
  abs_cpow_eq_rpow_re_of_pos ht, sub_re, one_re]
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
⊢ mellin zetaKernel₁ s = ↑π ^ (-s) * Complex.Gamma s * ∑' (n : ℕ), 1 / (↑n + 1) ^ (2 * s)
[PROOFSTEP]
have hf_meas : ∀ n : ℕ, AEStronglyMeasurable (f n) (volume.restrict <| Ioi 0) :=
  by
  intro n
  refine (ContinuousOn.mul ?_ ?_).aestronglyMeasurable hm
  · exact ContinuousAt.continuousOn fun x hx => continuousAt_ofReal_cpow_const _ _ <| Or.inr <| ne_of_gt hx
  · apply Continuous.continuousOn
    exact continuous_ofReal.comp (continuous_exp.comp ((continuous_const.mul continuous_id').mul continuous_const))
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
⊢ ∀ (n : ℕ), AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
[PROOFSTEP]
intro n
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
n : ℕ
⊢ AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
[PROOFSTEP]
refine (ContinuousOn.mul ?_ ?_).aestronglyMeasurable hm
[GOAL]
case refine_1
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
n : ℕ
⊢ ContinuousOn (fun t => ↑t ^ (s - 1)) (Ioi 0)
[PROOFSTEP]
exact ContinuousAt.continuousOn fun x hx => continuousAt_ofReal_cpow_const _ _ <| Or.inr <| ne_of_gt hx
[GOAL]
case refine_2
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
n : ℕ
⊢ ContinuousOn (fun t => ↑(rexp (-π * t * (↑n + 1) ^ 2))) (Ioi 0)
[PROOFSTEP]
apply Continuous.continuousOn
[GOAL]
case refine_2.h
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
n : ℕ
⊢ Continuous fun t => ↑(rexp (-π * t * (↑n + 1) ^ 2))
[PROOFSTEP]
exact continuous_ofReal.comp (continuous_exp.comp ((continuous_const.mul continuous_id').mul continuous_const))
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
hf_meas : ∀ (n : ℕ), AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
⊢ mellin zetaKernel₁ s = ↑π ^ (-s) * Complex.Gamma s * ∑' (n : ℕ), 1 / (↑n + 1) ^ (2 * s)
[PROOFSTEP]
have h_le : ∀ n : ℕ, ∀ᵐ t : ℝ ∂volume.restrict (Ioi 0), ‖f n t‖ ≤ bd n t := fun n =>
  (ae_restrict_iff' hm).mpr (ae_of_all _ fun t ht => le_of_eq (h_norm n ht))
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
hf_meas : ∀ (n : ℕ), AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
h_le : ∀ (n : ℕ), ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), ‖f n t‖ ≤ bd n t
⊢ mellin zetaKernel₁ s = ↑π ^ (-s) * Complex.Gamma s * ∑' (n : ℕ), 1 / (↑n + 1) ^ (2 * s)
[PROOFSTEP]
have h_sum0 : ∀ {t : ℝ} (_ : 0 < t), HasSum (fun n => f n t) ((t : ℂ) ^ (s - 1) * zetaKernel₁ t) :=
  by
  intro t ht
  rw [zetaKernel₁]
  convert (hasSum_ofReal.mpr (summable_exp_neg_pi_mul_nat_sq ht).hasSum).mul_left ((t : ℂ) ^ (s - 1))
  simp only [neg_mul, ofReal_exp, ofReal_neg, ofReal_mul, ofReal_pow, ofReal_add, ofReal_nat_cast, ofReal_one,
    ofReal_tsum]
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
hf_meas : ∀ (n : ℕ), AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
h_le : ∀ (n : ℕ), ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), ‖f n t‖ ≤ bd n t
⊢ ∀ {t : ℝ}, 0 < t → HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
[PROOFSTEP]
intro t ht
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
hf_meas : ∀ (n : ℕ), AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
h_le : ∀ (n : ℕ), ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), ‖f n t‖ ≤ bd n t
t : ℝ
ht : 0 < t
⊢ HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
[PROOFSTEP]
rw [zetaKernel₁]
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
hf_meas : ∀ (n : ℕ), AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
h_le : ∀ (n : ℕ), ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), ‖f n t‖ ≤ bd n t
t : ℝ
ht : 0 < t
⊢ HasSum (fun n => f n t) (↑t ^ (s - 1) * ∑' (n : ℕ), ↑(rexp (-π * t * (↑n + 1) ^ 2)))
[PROOFSTEP]
convert (hasSum_ofReal.mpr (summable_exp_neg_pi_mul_nat_sq ht).hasSum).mul_left ((t : ℂ) ^ (s - 1))
[GOAL]
case h.e'_6.h.e'_6
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
hf_meas : ∀ (n : ℕ), AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
h_le : ∀ (n : ℕ), ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), ‖f n t‖ ≤ bd n t
t : ℝ
ht : 0 < t
⊢ ∑' (n : ℕ), ↑(rexp (-π * t * (↑n + 1) ^ 2)) = ↑(∑' (b : ℕ), rexp (-π * t * (↑b + 1) ^ 2))
[PROOFSTEP]
simp only [neg_mul, ofReal_exp, ofReal_neg, ofReal_mul, ofReal_pow, ofReal_add, ofReal_nat_cast, ofReal_one,
  ofReal_tsum]
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
hf_meas : ∀ (n : ℕ), AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
h_le : ∀ (n : ℕ), ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), ‖f n t‖ ≤ bd n t
h_sum0 : ∀ {t : ℝ}, 0 < t → HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
⊢ mellin zetaKernel₁ s = ↑π ^ (-s) * Complex.Gamma s * ∑' (n : ℕ), 1 / (↑n + 1) ^ (2 * s)
[PROOFSTEP]
have h_sum' : ∀ᵐ t : ℝ ∂volume.restrict (Ioi 0), HasSum (fun n : ℕ => f n t) ((t : ℂ) ^ (s - 1) * zetaKernel₁ t) :=
  (ae_restrict_iff' hm).mpr (ae_of_all _ fun t ht => h_sum0 ht)
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
hf_meas : ∀ (n : ℕ), AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
h_le : ∀ (n : ℕ), ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), ‖f n t‖ ≤ bd n t
h_sum0 : ∀ {t : ℝ}, 0 < t → HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
h_sum' : ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
⊢ mellin zetaKernel₁ s = ↑π ^ (-s) * Complex.Gamma s * ∑' (n : ℕ), 1 / (↑n + 1) ^ (2 * s)
[PROOFSTEP]
have h_sum : ∀ᵐ t : ℝ ∂volume.restrict (Ioi 0), Summable fun n : ℕ => bd n t :=
  by
  refine (ae_restrict_iff' hm).mpr (ae_of_all _ fun t ht => ?_)
  simpa only [fun n => h_norm n ht] using summable_norm_iff.mpr (h_sum0 ht).summable
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
hf_meas : ∀ (n : ℕ), AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
h_le : ∀ (n : ℕ), ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), ‖f n t‖ ≤ bd n t
h_sum0 : ∀ {t : ℝ}, 0 < t → HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
h_sum' : ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
⊢ ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), Summable fun n => bd n t
[PROOFSTEP]
refine (ae_restrict_iff' hm).mpr (ae_of_all _ fun t ht => ?_)
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
hf_meas : ∀ (n : ℕ), AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
h_le : ∀ (n : ℕ), ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), ‖f n t‖ ≤ bd n t
h_sum0 : ∀ {t : ℝ}, 0 < t → HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
h_sum' : ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
t : ℝ
ht : t ∈ Ioi 0
⊢ Summable fun n => bd n t
[PROOFSTEP]
simpa only [fun n => h_norm n ht] using summable_norm_iff.mpr (h_sum0 ht).summable
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
hf_meas : ∀ (n : ℕ), AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
h_le : ∀ (n : ℕ), ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), ‖f n t‖ ≤ bd n t
h_sum0 : ∀ {t : ℝ}, 0 < t → HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
h_sum' : ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
h_sum : ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), Summable fun n => bd n t
⊢ mellin zetaKernel₁ s = ↑π ^ (-s) * Complex.Gamma s * ∑' (n : ℕ), 1 / (↑n + 1) ^ (2 * s)
[PROOFSTEP]
have h_int : Integrable (fun t : ℝ => ∑' n : ℕ, bd n t) (volume.restrict (Ioi 0)) :=
  by
  refine
    IntegrableOn.congr_fun
      (mellinConvergent_of_isBigO_rpow_exp pi_pos locally_integrable_zetaKernel₁ isBigO_atTop_zetaKernel₁
          isBigO_zero_zetaKernel₁ hs).norm
      (fun t ht => ?_) hm
  rw [tsum_mul_left, norm_smul, Complex.norm_eq_abs, abs_cpow_eq_rpow_re_of_pos ht, sub_re, one_re, zetaKernel₁, ←
    ofReal_tsum, Complex.norm_eq_abs, Complex.abs_of_nonneg]
  exact tsum_nonneg fun n => (exp_pos _).le
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
hf_meas : ∀ (n : ℕ), AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
h_le : ∀ (n : ℕ), ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), ‖f n t‖ ≤ bd n t
h_sum0 : ∀ {t : ℝ}, 0 < t → HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
h_sum' : ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
h_sum : ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), Summable fun n => bd n t
⊢ Integrable fun t => ∑' (n : ℕ), bd n t
[PROOFSTEP]
refine
  IntegrableOn.congr_fun
    (mellinConvergent_of_isBigO_rpow_exp pi_pos locally_integrable_zetaKernel₁ isBigO_atTop_zetaKernel₁
        isBigO_zero_zetaKernel₁ hs).norm
    (fun t ht => ?_) hm
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
hf_meas : ∀ (n : ℕ), AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
h_le : ∀ (n : ℕ), ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), ‖f n t‖ ≤ bd n t
h_sum0 : ∀ {t : ℝ}, 0 < t → HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
h_sum' : ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
h_sum : ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), Summable fun n => bd n t
t : ℝ
ht : t ∈ Ioi 0
⊢ ‖↑t ^ (s - 1) • zetaKernel₁ t‖ = ∑' (n : ℕ), bd n t
[PROOFSTEP]
rw [tsum_mul_left, norm_smul, Complex.norm_eq_abs, abs_cpow_eq_rpow_re_of_pos ht, sub_re, one_re, zetaKernel₁, ←
  ofReal_tsum, Complex.norm_eq_abs, Complex.abs_of_nonneg]
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
hf_meas : ∀ (n : ℕ), AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
h_le : ∀ (n : ℕ), ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), ‖f n t‖ ≤ bd n t
h_sum0 : ∀ {t : ℝ}, 0 < t → HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
h_sum' : ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
h_sum : ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), Summable fun n => bd n t
t : ℝ
ht : t ∈ Ioi 0
⊢ 0 ≤ ∑' (a : ℕ), rexp (-π * t * (↑a + 1) ^ 2)
[PROOFSTEP]
exact tsum_nonneg fun n => (exp_pos _).le
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
hf_meas : ∀ (n : ℕ), AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
h_le : ∀ (n : ℕ), ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), ‖f n t‖ ≤ bd n t
h_sum0 : ∀ {t : ℝ}, 0 < t → HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
h_sum' : ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
h_sum : ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), Summable fun n => bd n t
h_int : Integrable fun t => ∑' (n : ℕ), bd n t
⊢ mellin zetaKernel₁ s = ↑π ^ (-s) * Complex.Gamma s * ∑' (n : ℕ), 1 / (↑n + 1) ^ (2 * s)
[PROOFSTEP]
rw [← tsum_mul_left]
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
hf_meas : ∀ (n : ℕ), AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
h_le : ∀ (n : ℕ), ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), ‖f n t‖ ≤ bd n t
h_sum0 : ∀ {t : ℝ}, 0 < t → HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
h_sum' : ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
h_sum : ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), Summable fun n => bd n t
h_int : Integrable fun t => ∑' (n : ℕ), bd n t
⊢ mellin zetaKernel₁ s = ∑' (x : ℕ), ↑π ^ (-s) * Complex.Gamma s * (1 / (↑x + 1) ^ (2 * s))
[PROOFSTEP]
simp_rw [← integral_cpow_mul_exp_neg_pi_mul_sq (one_half_pos.trans hs)]
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
hf_meas : ∀ (n : ℕ), AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
h_le : ∀ (n : ℕ), ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), ‖f n t‖ ≤ bd n t
h_sum0 : ∀ {t : ℝ}, 0 < t → HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
h_sum' : ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
h_sum : ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), Summable fun n => bd n t
h_int : Integrable fun t => ∑' (n : ℕ), bd n t
⊢ mellin zetaKernel₁ s = ∑' (x : ℕ), ∫ (t : ℝ) in Ioi 0, ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑x + 1) ^ 2))
[PROOFSTEP]
rw [← (hasSum_integral_of_dominated_convergence bd hf_meas h_le h_sum h_int h_sum').tsum_eq.symm]
[GOAL]
s : ℂ
hs : 1 / 2 < s.re
bd : ℕ → ℝ → ℝ := fun n t => t ^ (s.re - 1) * rexp (-π * t * (↑n + 1) ^ 2)
f : ℕ → ℝ → ℂ := fun n t => ↑t ^ (s - 1) * ↑(rexp (-π * t * (↑n + 1) ^ 2))
hm : MeasurableSet (Ioi 0)
h_norm : ∀ (n : ℕ) {t : ℝ}, 0 < t → ‖f n t‖ = bd n t
hf_meas : ∀ (n : ℕ), AEStronglyMeasurable (f n) (Measure.restrict volume (Ioi 0))
h_le : ∀ (n : ℕ), ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), ‖f n t‖ ≤ bd n t
h_sum0 : ∀ {t : ℝ}, 0 < t → HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
h_sum' : ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), HasSum (fun n => f n t) (↑t ^ (s - 1) * zetaKernel₁ t)
h_sum : ∀ᵐ (t : ℝ) ∂Measure.restrict volume (Ioi 0), Summable fun n => bd n t
h_int : Integrable fun t => ∑' (n : ℕ), bd n t
⊢ mellin zetaKernel₁ s = ∫ (a : ℝ) in Ioi 0, ↑a ^ (s - 1) * zetaKernel₁ a
[PROOFSTEP]
rfl
[GOAL]
s : ℂ
hs : 1 < s.re
⊢ riemannCompletedZeta s = ↑π ^ (-s / 2) * Complex.Gamma (s / 2) * ∑' (n : ℕ), 1 / (↑n + 1) ^ s
[PROOFSTEP]
rw [completed_zeta_eq_mellin_of_one_lt_re hs, mellin_zetaKernel₁_eq_tsum, neg_div, mul_div_cancel' _ (two_ne_zero' ℂ)]
[GOAL]
s : ℂ
hs : 1 < s.re
⊢ 1 / 2 < (s / 2).re
[PROOFSTEP]
rw [show s / 2 = ↑(2⁻¹ : ℝ) * s by push_cast ; rw [mul_comm]; rfl]
[GOAL]
s : ℂ
hs : 1 < s.re
⊢ s / 2 = ↑2⁻¹ * s
[PROOFSTEP]
push_cast
[GOAL]
s : ℂ
hs : 1 < s.re
⊢ s / 2 = 2⁻¹ * s
[PROOFSTEP]
rw [mul_comm]
[GOAL]
s : ℂ
hs : 1 < s.re
⊢ s / 2 = s * 2⁻¹
[PROOFSTEP]
rfl
[GOAL]
s : ℂ
hs : 1 < s.re
⊢ 1 / 2 < (↑2⁻¹ * s).re
[PROOFSTEP]
rwa [ofReal_mul_re, ← div_eq_inv_mul, div_lt_div_right (zero_lt_two' ℝ)]
[GOAL]
s : ℂ
hs : 1 < s.re
⊢ riemannZeta s = ∑' (n : ℕ), 1 / (↑n + 1) ^ s
[PROOFSTEP]
have : s ≠ 0 := by contrapose! hs; rw [hs, zero_re]; exact zero_le_one
[GOAL]
s : ℂ
hs : 1 < s.re
⊢ s ≠ 0
[PROOFSTEP]
contrapose! hs
[GOAL]
s : ℂ
hs : s = 0
⊢ s.re ≤ 1
[PROOFSTEP]
rw [hs, zero_re]
[GOAL]
s : ℂ
hs : s = 0
⊢ 0 ≤ 1
[PROOFSTEP]
exact zero_le_one
[GOAL]
s : ℂ
hs : 1 < s.re
this : s ≠ 0
⊢ riemannZeta s = ∑' (n : ℕ), 1 / (↑n + 1) ^ s
[PROOFSTEP]
rw [riemannZeta, Function.update_noteq this, completed_zeta_eq_tsum_of_one_lt_re hs, ← mul_assoc, neg_div, cpow_neg,
  mul_inv_cancel_left₀, mul_div_cancel_left]
[GOAL]
case ha
s : ℂ
hs : 1 < s.re
this : s ≠ 0
⊢ Complex.Gamma (s / 2) ≠ 0
[PROOFSTEP]
apply Gamma_ne_zero_of_re_pos
[GOAL]
case ha.hs
s : ℂ
hs : 1 < s.re
this : s ≠ 0
⊢ 0 < (s / 2).re
[PROOFSTEP]
rw [div_eq_mul_inv, mul_comm, show (2⁻¹ : ℂ) = (2⁻¹ : ℝ) by norm_num, ofReal_mul_re]
[GOAL]
s : ℂ
hs : 1 < s.re
this : s ≠ 0
⊢ 2⁻¹ = ↑2⁻¹
[PROOFSTEP]
norm_num
[GOAL]
case ha.hs
s : ℂ
hs : 1 < s.re
this : s ≠ 0
⊢ 0 < 2⁻¹ * s.re
[PROOFSTEP]
exact mul_pos (inv_pos_of_pos two_pos) (zero_lt_one.trans hs)
[GOAL]
case h
s : ℂ
hs : 1 < s.re
this : s ≠ 0
⊢ ↑π ^ (s / 2) ≠ 0
[PROOFSTEP]
rw [Ne.def, cpow_eq_zero_iff, not_and_or, ← Ne.def, ofReal_ne_zero]
[GOAL]
case h
s : ℂ
hs : 1 < s.re
this : s ≠ 0
⊢ π ≠ 0 ∨ ¬s / 2 ≠ 0
[PROOFSTEP]
exact Or.inl pi_pos.ne'
[GOAL]
s : ℂ
hs : 1 < s.re
⊢ riemannZeta s = ∑' (n : ℕ), 1 / ↑n ^ s
[PROOFSTEP]
have hs' : s ≠ 0 := by contrapose! hs; rw [hs, zero_re]; exact zero_le_one
[GOAL]
s : ℂ
hs : 1 < s.re
⊢ s ≠ 0
[PROOFSTEP]
contrapose! hs
[GOAL]
s : ℂ
hs : s = 0
⊢ s.re ≤ 1
[PROOFSTEP]
rw [hs, zero_re]
[GOAL]
s : ℂ
hs : s = 0
⊢ 0 ≤ 1
[PROOFSTEP]
exact zero_le_one
[GOAL]
s : ℂ
hs : 1 < s.re
hs' : s ≠ 0
⊢ riemannZeta s = ∑' (n : ℕ), 1 / ↑n ^ s
[PROOFSTEP]
rw [tsum_eq_zero_add]
[GOAL]
s : ℂ
hs : 1 < s.re
hs' : s ≠ 0
⊢ riemannZeta s = 1 / ↑0 ^ s + ∑' (b : ℕ), 1 / ↑(b + 1) ^ s
[PROOFSTEP]
simp_rw [Nat.cast_zero, zero_cpow hs', div_zero, zero_add, zeta_eq_tsum_one_div_nat_add_one_cpow hs, Nat.cast_add,
  Nat.cast_one]
[GOAL]
s : ℂ
hs : 1 < s.re
hs' : s ≠ 0
⊢ Summable fun n => 1 / ↑n ^ s
[PROOFSTEP]
rw [← summable_norm_iff]
[GOAL]
s : ℂ
hs : 1 < s.re
hs' : s ≠ 0
⊢ Summable fun x => ‖1 / ↑x ^ s‖
[PROOFSTEP]
simp_rw [norm_div, norm_one, Complex.norm_eq_abs, ← ofReal_nat_cast,
  abs_cpow_eq_rpow_re_of_nonneg (Nat.cast_nonneg _) (zero_lt_one.trans hs).ne', summable_one_div_nat_rpow]
[GOAL]
s : ℂ
hs : 1 < s.re
hs' : s ≠ 0
⊢ 1 < s.re
[PROOFSTEP]
assumption
[GOAL]
k : ℕ
hk : 1 < k
⊢ riemannZeta ↑k = ∑' (n : ℕ), 1 / ↑n ^ k
[PROOFSTEP]
simp only [zeta_eq_tsum_one_div_nat_cpow
    (by rwa [← ofReal_nat_cast, ofReal_re, ← Nat.cast_one, Nat.cast_lt] : 1 < re k),
  cpow_nat_cast]
[GOAL]
k : ℕ
hk : 1 < k
⊢ 1 < (↑k).re
[PROOFSTEP]
rwa [← ofReal_nat_cast, ofReal_re, ← Nat.cast_one, Nat.cast_lt]
[GOAL]
k : ℕ
hk : k ≠ 0
⊢ riemannZeta (2 * ↑k) = (-1) ^ (k + 1) * 2 ^ (2 * k - 1) * ↑π ^ (2 * k) * ↑(bernoulli (2 * k)) / ↑(2 * k)!
[PROOFSTEP]
convert congr_arg ((↑) : ℝ → ℂ) (hasSum_zeta_nat hk).tsum_eq
[GOAL]
case h.e'_2
k : ℕ
hk : k ≠ 0
⊢ riemannZeta (2 * ↑k) = ↑(∑' (b : ℕ), 1 / ↑b ^ (2 * k))
[PROOFSTEP]
rw [← Nat.cast_two, ← Nat.cast_mul, zeta_nat_eq_tsum_of_gt_one]
[GOAL]
case h.e'_2
k : ℕ
hk : k ≠ 0
⊢ ∑' (n : ℕ), 1 / ↑n ^ (2 * k) = ↑(∑' (b : ℕ), 1 / ↑b ^ (2 * k))
[PROOFSTEP]
rw [ofReal_tsum]
[GOAL]
case h.e'_2
k : ℕ
hk : k ≠ 0
⊢ ∑' (n : ℕ), 1 / ↑n ^ (2 * k) = ∑' (a : ℕ), ↑(1 / ↑a ^ (2 * k))
[PROOFSTEP]
norm_num
[GOAL]
case h.e'_2
k : ℕ
hk : k ≠ 0
⊢ 1 < 2 * k
[PROOFSTEP]
refine one_lt_two.trans_le ?_
[GOAL]
case h.e'_2
k : ℕ
hk : k ≠ 0
⊢ 2 ≤ 2 * k
[PROOFSTEP]
conv_lhs => rw [← mul_one 2]
[GOAL]
k : ℕ
hk : k ≠ 0
| 2
[PROOFSTEP]
rw [← mul_one 2]
[GOAL]
k : ℕ
hk : k ≠ 0
| 2
[PROOFSTEP]
rw [← mul_one 2]
[GOAL]
k : ℕ
hk : k ≠ 0
| 2
[PROOFSTEP]
rw [← mul_one 2]
[GOAL]
case h.e'_2
k : ℕ
hk : k ≠ 0
⊢ 2 * 1 ≤ 2 * k
[PROOFSTEP]
rwa [mul_le_mul_left (zero_lt_two' ℕ), Nat.one_le_iff_ne_zero]
[GOAL]
case h.e'_3
k : ℕ
hk : k ≠ 0
⊢ (-1) ^ (k + 1) * 2 ^ (2 * k - 1) * ↑π ^ (2 * k) * ↑(bernoulli (2 * k)) / ↑(2 * k)! =
    ↑((-1) ^ (k + 1) * 2 ^ (2 * k - 1) * π ^ (2 * k) * ↑(bernoulli (2 * k)) / ↑(2 * k)!)
[PROOFSTEP]
norm_num
[GOAL]
⊢ riemannZeta 2 = ↑π ^ 2 / 6
[PROOFSTEP]
convert congr_arg ((↑) : ℝ → ℂ) hasSum_zeta_two.tsum_eq
[GOAL]
case h.e'_2
⊢ riemannZeta 2 = ↑(∑' (b : ℕ), 1 / ↑b ^ 2)
[PROOFSTEP]
rw [← Nat.cast_two, zeta_nat_eq_tsum_of_gt_one one_lt_two, ofReal_tsum]
[GOAL]
case h.e'_2
⊢ ∑' (n : ℕ), 1 / ↑n ^ 2 = ∑' (a : ℕ), ↑(1 / ↑a ^ 2)
[PROOFSTEP]
norm_num
[GOAL]
case h.e'_3
⊢ ↑π ^ 2 / 6 = ↑(π ^ 2 / 6)
[PROOFSTEP]
norm_num
[GOAL]
⊢ riemannZeta 4 = ↑(π ^ 4) / 90
[PROOFSTEP]
convert congr_arg ((↑) : ℝ → ℂ) hasSum_zeta_four.tsum_eq
[GOAL]
case h.e'_2
⊢ riemannZeta 4 = ↑(∑' (b : ℕ), 1 / ↑b ^ 4)
[PROOFSTEP]
rw [← Nat.cast_one, show (4 : ℂ) = (4 : ℕ) by norm_num, zeta_nat_eq_tsum_of_gt_one (by norm_num : 1 < 4), ofReal_tsum]
[GOAL]
⊢ 4 = ↑4
[PROOFSTEP]
norm_num
[GOAL]
⊢ 1 < 4
[PROOFSTEP]
norm_num
[GOAL]
case h.e'_2
⊢ ∑' (n : ℕ), 1 / ↑n ^ 4 = ∑' (a : ℕ), ↑(↑1 / ↑a ^ 4)
[PROOFSTEP]
norm_num
[GOAL]
case h.e'_3
⊢ ↑(π ^ 4) / 90 = ↑(π ^ 4 / 90)
[PROOFSTEP]
norm_num
[GOAL]
s : ℂ
⊢ riemannCompletedZeta₀ (1 - s) = riemannCompletedZeta₀ s
[PROOFSTEP]
have := mellin_comp_rpow zetaKernel₂ (s / 2 - 1 / 2) neg_one_lt_zero.ne
[GOAL]
s : ℂ
this :
  mellin (fun t => zetaKernel₂ (t ^ (-1))) (s / 2 - 1 / 2) = |(-1)|⁻¹ • mellin zetaKernel₂ ((s / 2 - 1 / 2) / ↑(-1))
⊢ riemannCompletedZeta₀ (1 - s) = riemannCompletedZeta₀ s
[PROOFSTEP]
simp_rw [rpow_neg_one, ← one_div, abs_neg, abs_one, div_one, one_smul, ofReal_neg, ofReal_one, div_neg, div_one,
  neg_sub] at this
[GOAL]
s : ℂ
this : mellin (fun t => zetaKernel₂ (1 / t)) (s / 2 - 1 / 2) = mellin zetaKernel₂ (1 / 2 - s / 2)
⊢ riemannCompletedZeta₀ (1 - s) = riemannCompletedZeta₀ s
[PROOFSTEP]
conv_lhs => rw [riemannCompletedZeta₀, sub_div, ← this]
[GOAL]
s : ℂ
this : mellin (fun t => zetaKernel₂ (1 / t)) (s / 2 - 1 / 2) = mellin zetaKernel₂ (1 / 2 - s / 2)
| riemannCompletedZeta₀ (1 - s)
[PROOFSTEP]
rw [riemannCompletedZeta₀, sub_div, ← this]
[GOAL]
s : ℂ
this : mellin (fun t => zetaKernel₂ (1 / t)) (s / 2 - 1 / 2) = mellin zetaKernel₂ (1 / 2 - s / 2)
| riemannCompletedZeta₀ (1 - s)
[PROOFSTEP]
rw [riemannCompletedZeta₀, sub_div, ← this]
[GOAL]
s : ℂ
this : mellin (fun t => zetaKernel₂ (1 / t)) (s / 2 - 1 / 2) = mellin zetaKernel₂ (1 / 2 - s / 2)
| riemannCompletedZeta₀ (1 - s)
[PROOFSTEP]
rw [riemannCompletedZeta₀, sub_div, ← this]
[GOAL]
s : ℂ
this : mellin (fun t => zetaKernel₂ (1 / t)) (s / 2 - 1 / 2) = mellin zetaKernel₂ (1 / 2 - s / 2)
⊢ mellin (fun t => zetaKernel₂ (1 / t)) (s / 2 - 1 / 2) = riemannCompletedZeta₀ s
[PROOFSTEP]
refine set_integral_congr measurableSet_Ioi fun t ht => ?_
[GOAL]
s : ℂ
this : mellin (fun t => zetaKernel₂ (1 / t)) (s / 2 - 1 / 2) = mellin zetaKernel₂ (1 / 2 - s / 2)
t : ℝ
ht : t ∈ Ioi 0
⊢ ↑t ^ (s / 2 - 1 / 2 - 1) • (fun t => zetaKernel₂ (1 / t)) t = ↑t ^ (s / 2 - 1) • zetaKernel₂ t
[PROOFSTEP]
simp_rw [zetaKernel₂_one_div ht, smul_eq_mul, ← mul_assoc, sqrt_eq_rpow, ofReal_cpow (le_of_lt ht), ←
  cpow_add _ _ (ofReal_ne_zero.mpr <| ne_of_gt ht)]
[GOAL]
s : ℂ
this : mellin (fun t => zetaKernel₂ (1 / t)) (s / 2 - 1 / 2) = mellin zetaKernel₂ (1 / 2 - s / 2)
t : ℝ
ht : t ∈ Ioi 0
⊢ ↑t ^ (s / 2 - 1 / 2 - 1 + ↑(1 / 2)) * zetaKernel₂ t = ↑t ^ (s / 2 - 1) * zetaKernel₂ t
[PROOFSTEP]
congr 2
[GOAL]
case e_a.e_a
s : ℂ
this : mellin (fun t => zetaKernel₂ (1 / t)) (s / 2 - 1 / 2) = mellin zetaKernel₂ (1 / 2 - s / 2)
t : ℝ
ht : t ∈ Ioi 0
⊢ s / 2 - 1 / 2 - 1 + ↑(1 / 2) = s / 2 - 1
[PROOFSTEP]
push_cast
[GOAL]
case e_a.e_a
s : ℂ
this : mellin (fun t => zetaKernel₂ (1 / t)) (s / 2 - 1 / 2) = mellin zetaKernel₂ (1 / 2 - s / 2)
t : ℝ
ht : t ∈ Ioi 0
⊢ s / 2 - 1 / 2 - 1 + 1 / 2 = s / 2 - 1
[PROOFSTEP]
ring
[GOAL]
s : ℂ
⊢ riemannCompletedZeta (1 - s) = riemannCompletedZeta s
[PROOFSTEP]
simp_rw [riemannCompletedZeta, riemannCompletedZeta₀_one_sub, sub_add, (by abel : 1 - s - 1 = -s),
  (by abel : 1 - s = -(s - 1)), div_neg, neg_sub_neg]
[GOAL]
s : ℂ
⊢ 1 - s - 1 = -s
[PROOFSTEP]
abel
[GOAL]
s : ℂ
⊢ 1 - s - 1 = -s
[PROOFSTEP]
abel
[GOAL]
s : ℂ
⊢ 1 - s = -(s - 1)
[PROOFSTEP]
abel
[GOAL]
s : ℂ
⊢ 1 - s = -(s - 1)
[PROOFSTEP]
abel
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
⊢ riemannZeta (1 - s) = 2 ^ (1 - s) * ↑π ^ (-s) * Complex.Gamma s * Complex.sin (↑π * (1 - s) / 2) * riemannZeta s
[PROOFSTEP]
have hs_ne : s ≠ 0 := by contrapose! hs; rw [hs]; exact ⟨0, by rw [Nat.cast_zero, neg_zero]⟩
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
⊢ s ≠ 0
[PROOFSTEP]
contrapose! hs
[GOAL]
s : ℂ
hs' : s ≠ 1
hs : s = 0
⊢ ∃ n, s = -↑n
[PROOFSTEP]
rw [hs]
[GOAL]
s : ℂ
hs' : s ≠ 1
hs : s = 0
⊢ ∃ n, 0 = -↑n
[PROOFSTEP]
exact ⟨0, by rw [Nat.cast_zero, neg_zero]⟩
[GOAL]
s : ℂ
hs' : s ≠ 1
hs : s = 0
⊢ 0 = -↑0
[PROOFSTEP]
rw [Nat.cast_zero, neg_zero]
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
⊢ riemannZeta (1 - s) = 2 ^ (1 - s) * ↑π ^ (-s) * Complex.Gamma s * Complex.sin (↑π * (1 - s) / 2) * riemannZeta s
[PROOFSTEP]
have h_sqrt : (sqrt π : ℂ) ≠ 0 := ofReal_ne_zero.mpr (sqrt_ne_zero'.mpr pi_pos)
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
⊢ riemannZeta (1 - s) = 2 ^ (1 - s) * ↑π ^ (-s) * Complex.Gamma s * Complex.sin (↑π * (1 - s) / 2) * riemannZeta s
[PROOFSTEP]
have h_pow : (2 : ℂ) ^ (s - 1) ≠ 0 := by
  rw [Ne.def, cpow_eq_zero_iff, not_and_or]
  exact Or.inl two_ne_zero
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
⊢ 2 ^ (s - 1) ≠ 0
[PROOFSTEP]
rw [Ne.def, cpow_eq_zero_iff, not_and_or]
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
⊢ ¬2 = 0 ∨ ¬s - 1 ≠ 0
[PROOFSTEP]
exact Or.inl two_ne_zero
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
⊢ riemannZeta (1 - s) = 2 ^ (1 - s) * ↑π ^ (-s) * Complex.Gamma s * Complex.sin (↑π * (1 - s) / 2) * riemannZeta s
[PROOFSTEP]
have h_Ga_ne1 : Gamma (s / 2) ≠ 0 := by
  rw [Ne.def, Complex.Gamma_eq_zero_iff]
  contrapose! hs
  obtain ⟨m, hm⟩ := hs
  rw [div_eq_iff (two_ne_zero' ℂ), ← Nat.cast_two, neg_mul, ← Nat.cast_mul] at hm
  exact ⟨m * 2, by rw [hm]⟩
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
⊢ Complex.Gamma (s / 2) ≠ 0
[PROOFSTEP]
rw [Ne.def, Complex.Gamma_eq_zero_iff]
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
⊢ ¬∃ m, s / 2 = -↑m
[PROOFSTEP]
contrapose! hs
[GOAL]
s : ℂ
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
hs : ∃ m, s / 2 = -↑m
⊢ ∃ n, s = -↑n
[PROOFSTEP]
obtain ⟨m, hm⟩ := hs
[GOAL]
case intro
s : ℂ
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
m : ℕ
hm : s / 2 = -↑m
⊢ ∃ n, s = -↑n
[PROOFSTEP]
rw [div_eq_iff (two_ne_zero' ℂ), ← Nat.cast_two, neg_mul, ← Nat.cast_mul] at hm
[GOAL]
case intro
s : ℂ
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
m : ℕ
hm : s = -↑(m * 2)
⊢ ∃ n, s = -↑n
[PROOFSTEP]
exact ⟨m * 2, by rw [hm]⟩
[GOAL]
s : ℂ
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
m : ℕ
hm : s = -↑(m * 2)
⊢ s = -↑(m * 2)
[PROOFSTEP]
rw [hm]
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
⊢ riemannZeta (1 - s) = 2 ^ (1 - s) * ↑π ^ (-s) * Complex.Gamma s * Complex.sin (↑π * (1 - s) / 2) * riemannZeta s
[PROOFSTEP]
have h_Ga_eq : Gamma s = Gamma (s / 2) * Gamma ((s + 1) / 2) * (2 : ℂ) ^ (s - 1) / sqrt π := by
  rw [add_div, Complex.Gamma_mul_Gamma_add_half, mul_div_cancel' _ (two_ne_zero' ℂ), (by ring : 1 - s = -(s - 1)),
    cpow_neg, ← div_eq_mul_inv, eq_div_iff h_sqrt, div_mul_eq_mul_div₀, div_mul_cancel _ h_pow]
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
⊢ Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
[PROOFSTEP]
rw [add_div, Complex.Gamma_mul_Gamma_add_half, mul_div_cancel' _ (two_ne_zero' ℂ), (by ring : 1 - s = -(s - 1)),
  cpow_neg, ← div_eq_mul_inv, eq_div_iff h_sqrt, div_mul_eq_mul_div₀, div_mul_cancel _ h_pow]
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
⊢ 1 - s = -(s - 1)
[PROOFSTEP]
ring
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
⊢ riemannZeta (1 - s) = 2 ^ (1 - s) * ↑π ^ (-s) * Complex.Gamma s * Complex.sin (↑π * (1 - s) / 2) * riemannZeta s
[PROOFSTEP]
have h_Ga_ne3 : Gamma ((s + 1) / 2) ≠ 0 :=
  by
  have h_Ga_aux : Gamma s ≠ 0 := Complex.Gamma_ne_zero hs
  contrapose! h_Ga_aux
  rw [h_Ga_eq, h_Ga_aux, mul_zero, zero_mul, zero_div]
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
⊢ Complex.Gamma ((s + 1) / 2) ≠ 0
[PROOFSTEP]
have h_Ga_aux : Gamma s ≠ 0 := Complex.Gamma_ne_zero hs
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_aux : Complex.Gamma s ≠ 0
⊢ Complex.Gamma ((s + 1) / 2) ≠ 0
[PROOFSTEP]
contrapose! h_Ga_aux
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_aux : Complex.Gamma ((s + 1) / 2) = 0
⊢ Complex.Gamma s = 0
[PROOFSTEP]
rw [h_Ga_eq, h_Ga_aux, mul_zero, zero_mul, zero_div]
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
⊢ riemannZeta (1 - s) = 2 ^ (1 - s) * ↑π ^ (-s) * Complex.Gamma s * Complex.sin (↑π * (1 - s) / 2) * riemannZeta s
[PROOFSTEP]
rw [riemannZeta, Function.update_noteq (by rwa [sub_ne_zero, ne_comm] : 1 - s ≠ 0), Function.update_noteq hs_ne,
  riemannCompletedZeta_one_sub, mul_div, eq_div_iff h_Ga_ne1, mul_comm, ← mul_div_assoc]
  -- Now rule out case of s = positive odd integer & deduce further non-vanishing statements
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
⊢ 1 - s ≠ 0
[PROOFSTEP]
rwa [sub_ne_zero, ne_comm]
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
⊢ Complex.Gamma (s / 2) * (↑π ^ ((1 - s) / 2) * riemannCompletedZeta s) / Complex.Gamma ((1 - s) / 2) =
    2 ^ (1 - s) * ↑π ^ (-s) * Complex.Gamma s * Complex.sin (↑π * (1 - s) / 2) * (↑π ^ (s / 2) * riemannCompletedZeta s)
[PROOFSTEP]
by_cases hs_pos_odd : ∃ n : ℕ, s = 1 + 2 * n
[GOAL]
case pos
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ∃ n, s = 1 + 2 * ↑n
⊢ Complex.Gamma (s / 2) * (↑π ^ ((1 - s) / 2) * riemannCompletedZeta s) / Complex.Gamma ((1 - s) / 2) =
    2 ^ (1 - s) * ↑π ^ (-s) * Complex.Gamma s * Complex.sin (↑π * (1 - s) / 2) * (↑π ^ (s / 2) * riemannCompletedZeta s)
[PROOFSTEP]
obtain ⟨n, rfl⟩ := hs_pos_odd
[GOAL]
case pos.intro
h_sqrt : ↑(sqrt π) ≠ 0
n : ℕ
hs : ∀ (n_1 : ℕ), 1 + 2 * ↑n ≠ -↑n_1
hs' : 1 + 2 * ↑n ≠ 1
hs_ne : 1 + 2 * ↑n ≠ 0
h_pow : 2 ^ (1 + 2 * ↑n - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma ((1 + 2 * ↑n) / 2) ≠ 0
h_Ga_eq :
  Complex.Gamma (1 + 2 * ↑n) =
    Complex.Gamma ((1 + 2 * ↑n) / 2) * Complex.Gamma ((1 + 2 * ↑n + 1) / 2) * 2 ^ (1 + 2 * ↑n - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((1 + 2 * ↑n + 1) / 2) ≠ 0
⊢ Complex.Gamma ((1 + 2 * ↑n) / 2) * (↑π ^ ((1 - (1 + 2 * ↑n)) / 2) * riemannCompletedZeta (1 + 2 * ↑n)) /
      Complex.Gamma ((1 - (1 + 2 * ↑n)) / 2) =
    2 ^ (1 - (1 + 2 * ↑n)) * ↑π ^ (-(1 + 2 * ↑n)) * Complex.Gamma (1 + 2 * ↑n) *
        Complex.sin (↑π * (1 - (1 + 2 * ↑n)) / 2) *
      (↑π ^ ((1 + 2 * ↑n) / 2) * riemannCompletedZeta (1 + 2 * ↑n))
[PROOFSTEP]
have : (1 - (1 + 2 * (n : ℂ))) / 2 = -↑n := by
  rw [← sub_sub, sub_self, zero_sub, neg_div, mul_div_cancel_left _ (two_ne_zero' ℂ)]
[GOAL]
h_sqrt : ↑(sqrt π) ≠ 0
n : ℕ
hs : ∀ (n_1 : ℕ), 1 + 2 * ↑n ≠ -↑n_1
hs' : 1 + 2 * ↑n ≠ 1
hs_ne : 1 + 2 * ↑n ≠ 0
h_pow : 2 ^ (1 + 2 * ↑n - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma ((1 + 2 * ↑n) / 2) ≠ 0
h_Ga_eq :
  Complex.Gamma (1 + 2 * ↑n) =
    Complex.Gamma ((1 + 2 * ↑n) / 2) * Complex.Gamma ((1 + 2 * ↑n + 1) / 2) * 2 ^ (1 + 2 * ↑n - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((1 + 2 * ↑n + 1) / 2) ≠ 0
⊢ (1 - (1 + 2 * ↑n)) / 2 = -↑n
[PROOFSTEP]
rw [← sub_sub, sub_self, zero_sub, neg_div, mul_div_cancel_left _ (two_ne_zero' ℂ)]
[GOAL]
case pos.intro
h_sqrt : ↑(sqrt π) ≠ 0
n : ℕ
hs : ∀ (n_1 : ℕ), 1 + 2 * ↑n ≠ -↑n_1
hs' : 1 + 2 * ↑n ≠ 1
hs_ne : 1 + 2 * ↑n ≠ 0
h_pow : 2 ^ (1 + 2 * ↑n - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma ((1 + 2 * ↑n) / 2) ≠ 0
h_Ga_eq :
  Complex.Gamma (1 + 2 * ↑n) =
    Complex.Gamma ((1 + 2 * ↑n) / 2) * Complex.Gamma ((1 + 2 * ↑n + 1) / 2) * 2 ^ (1 + 2 * ↑n - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((1 + 2 * ↑n + 1) / 2) ≠ 0
this : (1 - (1 + 2 * ↑n)) / 2 = -↑n
⊢ Complex.Gamma ((1 + 2 * ↑n) / 2) * (↑π ^ ((1 - (1 + 2 * ↑n)) / 2) * riemannCompletedZeta (1 + 2 * ↑n)) /
      Complex.Gamma ((1 - (1 + 2 * ↑n)) / 2) =
    2 ^ (1 - (1 + 2 * ↑n)) * ↑π ^ (-(1 + 2 * ↑n)) * Complex.Gamma (1 + 2 * ↑n) *
        Complex.sin (↑π * (1 - (1 + 2 * ↑n)) / 2) *
      (↑π ^ ((1 + 2 * ↑n) / 2) * riemannCompletedZeta (1 + 2 * ↑n))
[PROOFSTEP]
rw [this, Complex.Gamma_neg_nat_eq_zero, div_zero]
[GOAL]
case pos.intro
h_sqrt : ↑(sqrt π) ≠ 0
n : ℕ
hs : ∀ (n_1 : ℕ), 1 + 2 * ↑n ≠ -↑n_1
hs' : 1 + 2 * ↑n ≠ 1
hs_ne : 1 + 2 * ↑n ≠ 0
h_pow : 2 ^ (1 + 2 * ↑n - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma ((1 + 2 * ↑n) / 2) ≠ 0
h_Ga_eq :
  Complex.Gamma (1 + 2 * ↑n) =
    Complex.Gamma ((1 + 2 * ↑n) / 2) * Complex.Gamma ((1 + 2 * ↑n + 1) / 2) * 2 ^ (1 + 2 * ↑n - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((1 + 2 * ↑n + 1) / 2) ≠ 0
this : (1 - (1 + 2 * ↑n)) / 2 = -↑n
⊢ 0 =
    2 ^ (1 - (1 + 2 * ↑n)) * ↑π ^ (-(1 + 2 * ↑n)) * Complex.Gamma (1 + 2 * ↑n) *
        Complex.sin (↑π * (1 - (1 + 2 * ↑n)) / 2) *
      (↑π ^ ((1 + 2 * ↑n) / 2) * riemannCompletedZeta (1 + 2 * ↑n))
[PROOFSTEP]
have : (π : ℂ) * (1 - (1 + 2 * ↑n)) / 2 = ↑(-n : ℤ) * π := by push_cast ; field_simp; ring
[GOAL]
h_sqrt : ↑(sqrt π) ≠ 0
n : ℕ
hs : ∀ (n_1 : ℕ), 1 + 2 * ↑n ≠ -↑n_1
hs' : 1 + 2 * ↑n ≠ 1
hs_ne : 1 + 2 * ↑n ≠ 0
h_pow : 2 ^ (1 + 2 * ↑n - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma ((1 + 2 * ↑n) / 2) ≠ 0
h_Ga_eq :
  Complex.Gamma (1 + 2 * ↑n) =
    Complex.Gamma ((1 + 2 * ↑n) / 2) * Complex.Gamma ((1 + 2 * ↑n + 1) / 2) * 2 ^ (1 + 2 * ↑n - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((1 + 2 * ↑n + 1) / 2) ≠ 0
this : (1 - (1 + 2 * ↑n)) / 2 = -↑n
⊢ ↑π * (1 - (1 + 2 * ↑n)) / 2 = ↑(-↑n) * ↑π
[PROOFSTEP]
push_cast
[GOAL]
h_sqrt : ↑(sqrt π) ≠ 0
n : ℕ
hs : ∀ (n_1 : ℕ), 1 + 2 * ↑n ≠ -↑n_1
hs' : 1 + 2 * ↑n ≠ 1
hs_ne : 1 + 2 * ↑n ≠ 0
h_pow : 2 ^ (1 + 2 * ↑n - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma ((1 + 2 * ↑n) / 2) ≠ 0
h_Ga_eq :
  Complex.Gamma (1 + 2 * ↑n) =
    Complex.Gamma ((1 + 2 * ↑n) / 2) * Complex.Gamma ((1 + 2 * ↑n + 1) / 2) * 2 ^ (1 + 2 * ↑n - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((1 + 2 * ↑n + 1) / 2) ≠ 0
this : (1 - (1 + 2 * ↑n)) / 2 = -↑n
⊢ ↑π * (1 - (1 + 2 * ↑n)) / 2 = -↑n * ↑π
[PROOFSTEP]
field_simp
[GOAL]
h_sqrt : ↑(sqrt π) ≠ 0
n : ℕ
hs : ∀ (n_1 : ℕ), 1 + 2 * ↑n ≠ -↑n_1
hs' : 1 + 2 * ↑n ≠ 1
hs_ne : 1 + 2 * ↑n ≠ 0
h_pow : 2 ^ (1 + 2 * ↑n - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma ((1 + 2 * ↑n) / 2) ≠ 0
h_Ga_eq :
  Complex.Gamma (1 + 2 * ↑n) =
    Complex.Gamma ((1 + 2 * ↑n) / 2) * Complex.Gamma ((1 + 2 * ↑n + 1) / 2) * 2 ^ (1 + 2 * ↑n - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((1 + 2 * ↑n + 1) / 2) ≠ 0
this : (1 - (1 + 2 * ↑n)) / 2 = -↑n
⊢ ↑π * (2 * ↑n) = ↑n * ↑π * 2
[PROOFSTEP]
ring
[GOAL]
case pos.intro
h_sqrt : ↑(sqrt π) ≠ 0
n : ℕ
hs : ∀ (n_1 : ℕ), 1 + 2 * ↑n ≠ -↑n_1
hs' : 1 + 2 * ↑n ≠ 1
hs_ne : 1 + 2 * ↑n ≠ 0
h_pow : 2 ^ (1 + 2 * ↑n - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma ((1 + 2 * ↑n) / 2) ≠ 0
h_Ga_eq :
  Complex.Gamma (1 + 2 * ↑n) =
    Complex.Gamma ((1 + 2 * ↑n) / 2) * Complex.Gamma ((1 + 2 * ↑n + 1) / 2) * 2 ^ (1 + 2 * ↑n - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((1 + 2 * ↑n + 1) / 2) ≠ 0
this✝ : (1 - (1 + 2 * ↑n)) / 2 = -↑n
this : ↑π * (1 - (1 + 2 * ↑n)) / 2 = ↑(-↑n) * ↑π
⊢ 0 =
    2 ^ (1 - (1 + 2 * ↑n)) * ↑π ^ (-(1 + 2 * ↑n)) * Complex.Gamma (1 + 2 * ↑n) *
        Complex.sin (↑π * (1 - (1 + 2 * ↑n)) / 2) *
      (↑π ^ ((1 + 2 * ↑n) / 2) * riemannCompletedZeta (1 + 2 * ↑n))
[PROOFSTEP]
rw [this, Complex.sin_int_mul_pi, mul_zero, zero_mul]
[GOAL]
case neg
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
⊢ Complex.Gamma (s / 2) * (↑π ^ ((1 - s) / 2) * riemannCompletedZeta s) / Complex.Gamma ((1 - s) / 2) =
    2 ^ (1 - s) * ↑π ^ (-s) * Complex.Gamma s * Complex.sin (↑π * (1 - s) / 2) * (↑π ^ (s / 2) * riemannCompletedZeta s)
[PROOFSTEP]
have h_Ga_ne4 : Gamma ((1 - s) / 2) ≠ 0 :=
  by
  rw [Ne.def, Complex.Gamma_eq_zero_iff]
  contrapose! hs_pos_odd
  obtain ⟨m, hm⟩ := hs_pos_odd
  rw [div_eq_iff (two_ne_zero' ℂ), sub_eq_iff_eq_add, neg_mul, ← sub_eq_neg_add, eq_sub_iff_add_eq] at hm
  exact
    ⟨m, by rw [← hm, mul_comm]⟩
      -- At last the main proof
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
⊢ Complex.Gamma ((1 - s) / 2) ≠ 0
[PROOFSTEP]
rw [Ne.def, Complex.Gamma_eq_zero_iff]
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
⊢ ¬∃ m, (1 - s) / 2 = -↑m
[PROOFSTEP]
contrapose! hs_pos_odd
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ∃ m, (1 - s) / 2 = -↑m
⊢ ∃ n, s = 1 + 2 * ↑n
[PROOFSTEP]
obtain ⟨m, hm⟩ := hs_pos_odd
[GOAL]
case intro
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
m : ℕ
hm : (1 - s) / 2 = -↑m
⊢ ∃ n, s = 1 + 2 * ↑n
[PROOFSTEP]
rw [div_eq_iff (two_ne_zero' ℂ), sub_eq_iff_eq_add, neg_mul, ← sub_eq_neg_add, eq_sub_iff_add_eq] at hm
[GOAL]
case intro
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
m : ℕ
hm : 1 + ↑m * 2 = s
⊢ ∃ n, s = 1 + 2 * ↑n
[PROOFSTEP]
exact
  ⟨m, by rw [← hm, mul_comm]⟩
    -- At last the main proof
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
m : ℕ
hm : 1 + ↑m * 2 = s
⊢ s = 1 + 2 * ↑m
[PROOFSTEP]
rw [← hm, mul_comm]
[GOAL]
case neg
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
h_Ga_ne4 : Complex.Gamma ((1 - s) / 2) ≠ 0
⊢ Complex.Gamma (s / 2) * (↑π ^ ((1 - s) / 2) * riemannCompletedZeta s) / Complex.Gamma ((1 - s) / 2) =
    2 ^ (1 - s) * ↑π ^ (-s) * Complex.Gamma s * Complex.sin (↑π * (1 - s) / 2) * (↑π ^ (s / 2) * riemannCompletedZeta s)
[PROOFSTEP]
rw [show sin (↑π * (1 - s) / 2) = π * (Gamma ((1 - s) / 2) * Gamma (s / 2 + 1 / 2))⁻¹
    by
    have := congr_arg Inv.inv (Complex.Gamma_mul_Gamma_one_sub ((1 - s) / 2)).symm
    rwa [(by ring : 1 - (1 - s) / 2 = s / 2 + 1 / 2), inv_div, div_eq_iff (ofReal_ne_zero.mpr pi_pos.ne'),
      mul_comm _ (π : ℂ), mul_div_assoc'] at this ]
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
h_Ga_ne4 : Complex.Gamma ((1 - s) / 2) ≠ 0
⊢ Complex.sin (↑π * (1 - s) / 2) = ↑π * (Complex.Gamma ((1 - s) / 2) * Complex.Gamma (s / 2 + 1 / 2))⁻¹
[PROOFSTEP]
have := congr_arg Inv.inv (Complex.Gamma_mul_Gamma_one_sub ((1 - s) / 2)).symm
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
h_Ga_ne4 : Complex.Gamma ((1 - s) / 2) ≠ 0
this : (↑π / Complex.sin (↑π * ((1 - s) / 2)))⁻¹ = (Complex.Gamma ((1 - s) / 2) * Complex.Gamma (1 - (1 - s) / 2))⁻¹
⊢ Complex.sin (↑π * (1 - s) / 2) = ↑π * (Complex.Gamma ((1 - s) / 2) * Complex.Gamma (s / 2 + 1 / 2))⁻¹
[PROOFSTEP]
rwa [(by ring : 1 - (1 - s) / 2 = s / 2 + 1 / 2), inv_div, div_eq_iff (ofReal_ne_zero.mpr pi_pos.ne'),
  mul_comm _ (π : ℂ), mul_div_assoc'] at this
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
h_Ga_ne4 : Complex.Gamma ((1 - s) / 2) ≠ 0
this : (↑π / Complex.sin (↑π * ((1 - s) / 2)))⁻¹ = (Complex.Gamma ((1 - s) / 2) * Complex.Gamma (1 - (1 - s) / 2))⁻¹
⊢ 1 - (1 - s) / 2 = s / 2 + 1 / 2
[PROOFSTEP]
ring
[GOAL]
case neg
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
h_Ga_ne4 : Complex.Gamma ((1 - s) / 2) ≠ 0
⊢ Complex.Gamma (s / 2) * (↑π ^ ((1 - s) / 2) * riemannCompletedZeta s) / Complex.Gamma ((1 - s) / 2) =
    2 ^ (1 - s) * ↑π ^ (-s) * Complex.Gamma s * (↑π * (Complex.Gamma ((1 - s) / 2) * Complex.Gamma (s / 2 + 1 / 2))⁻¹) *
      (↑π ^ (s / 2) * riemannCompletedZeta s)
[PROOFSTEP]
rw [(by rw [← neg_sub] : (2 : ℂ) ^ (1 - s) = (2 : ℂ) ^ (-(s - 1))), cpow_neg, h_Ga_eq]
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
h_Ga_ne4 : Complex.Gamma ((1 - s) / 2) ≠ 0
⊢ 2 ^ (1 - s) = 2 ^ (-(s - 1))
[PROOFSTEP]
rw [← neg_sub]
[GOAL]
case neg
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
h_Ga_ne4 : Complex.Gamma ((1 - s) / 2) ≠ 0
⊢ Complex.Gamma (s / 2) * (↑π ^ ((1 - s) / 2) * riemannCompletedZeta s) / Complex.Gamma ((1 - s) / 2) =
    (2 ^ (s - 1))⁻¹ * ↑π ^ (-s) * (Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)) *
        (↑π * (Complex.Gamma ((1 - s) / 2) * Complex.Gamma (s / 2 + 1 / 2))⁻¹) *
      (↑π ^ (s / 2) * riemannCompletedZeta s)
[PROOFSTEP]
suffices (π : ℂ) ^ ((1 - s) / 2) = (π : ℂ) ^ (-s) * sqrt π * (π : ℂ) ^ (s / 2) by rw [this]; field_simp; ring_nf;
  rw [← ofReal_pow, sq_sqrt pi_pos.le]; ring
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
h_Ga_ne4 : Complex.Gamma ((1 - s) / 2) ≠ 0
this : ↑π ^ ((1 - s) / 2) = ↑π ^ (-s) * ↑(sqrt π) * ↑π ^ (s / 2)
⊢ Complex.Gamma (s / 2) * (↑π ^ ((1 - s) / 2) * riemannCompletedZeta s) / Complex.Gamma ((1 - s) / 2) =
    (2 ^ (s - 1))⁻¹ * ↑π ^ (-s) * (Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)) *
        (↑π * (Complex.Gamma ((1 - s) / 2) * Complex.Gamma (s / 2 + 1 / 2))⁻¹) *
      (↑π ^ (s / 2) * riemannCompletedZeta s)
[PROOFSTEP]
rw [this]
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
h_Ga_ne4 : Complex.Gamma ((1 - s) / 2) ≠ 0
this : ↑π ^ ((1 - s) / 2) = ↑π ^ (-s) * ↑(sqrt π) * ↑π ^ (s / 2)
⊢ Complex.Gamma (s / 2) * (↑π ^ (-s) * ↑(sqrt π) * ↑π ^ (s / 2) * riemannCompletedZeta s) /
      Complex.Gamma ((1 - s) / 2) =
    (2 ^ (s - 1))⁻¹ * ↑π ^ (-s) * (Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)) *
        (↑π * (Complex.Gamma ((1 - s) / 2) * Complex.Gamma (s / 2 + 1 / 2))⁻¹) *
      (↑π ^ (s / 2) * riemannCompletedZeta s)
[PROOFSTEP]
field_simp
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
h_Ga_ne4 : Complex.Gamma ((1 - s) / 2) ≠ 0
this : ↑π ^ ((1 - s) / 2) = ↑π ^ (-s) * ↑(sqrt π) * ↑π ^ (s / 2)
⊢ Complex.Gamma (s / 2) * (↑π ^ (-s) * ↑(sqrt π) * ↑π ^ (s / 2) * riemannCompletedZeta s) *
      (2 ^ (s - 1) * ↑(sqrt π) * (Complex.Gamma ((1 - s) / 2) * Complex.Gamma ((s + 1) / 2))) =
    ↑π ^ (-s) * (Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1)) * ↑π *
        (↑π ^ (s / 2) * riemannCompletedZeta s) *
      Complex.Gamma ((1 - s) / 2)
[PROOFSTEP]
ring_nf
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
h_Ga_ne4 : Complex.Gamma ((1 - s) / 2) ≠ 0
this : ↑π ^ ((1 - s) / 2) = ↑π ^ (-s) * ↑(sqrt π) * ↑π ^ (s / 2)
⊢ Complex.Gamma (s * (↑(Int.ofNat 1) / ↑2)) * ↑π ^ (-s) * ↑(sqrt π) ^ 2 * ↑π ^ (s * (↑(Int.ofNat 1) / ↑2)) *
            riemannCompletedZeta s *
          2 ^ (-1 + s) *
        Complex.Gamma (↑(Int.ofNat 1) / ↑2 + s * ↑(Int.negOfNat 1) * (↑(Int.ofNat 1) / ↑2)) *
      Complex.Gamma (↑(Int.ofNat 1) / ↑2 + s * (↑(Int.ofNat 1) / ↑2)) =
    Complex.Gamma (s * (↑(Int.ofNat 1) / ↑2)) * ↑π ^ (-s) * ↑π ^ (s * (↑(Int.ofNat 1) / ↑2)) * riemannCompletedZeta s *
            2 ^ (-1 + s) *
          Complex.Gamma (↑(Int.ofNat 1) / ↑2 + s * ↑(Int.negOfNat 1) * (↑(Int.ofNat 1) / ↑2)) *
        Complex.Gamma (↑(Int.ofNat 1) / ↑2 + s * (↑(Int.ofNat 1) / ↑2)) *
      ↑π
[PROOFSTEP]
rw [← ofReal_pow, sq_sqrt pi_pos.le]
[GOAL]
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
h_Ga_ne4 : Complex.Gamma ((1 - s) / 2) ≠ 0
this : ↑π ^ ((1 - s) / 2) = ↑π ^ (-s) * ↑(sqrt π) * ↑π ^ (s / 2)
⊢ Complex.Gamma (s * (↑(Int.ofNat 1) / ↑2)) * ↑π ^ (-s) * ↑π * ↑π ^ (s * (↑(Int.ofNat 1) / ↑2)) *
            riemannCompletedZeta s *
          2 ^ (-1 + s) *
        Complex.Gamma (↑(Int.ofNat 1) / ↑2 + s * ↑(Int.negOfNat 1) * (↑(Int.ofNat 1) / ↑2)) *
      Complex.Gamma (↑(Int.ofNat 1) / ↑2 + s * (↑(Int.ofNat 1) / ↑2)) =
    Complex.Gamma (s * (↑(Int.ofNat 1) / ↑2)) * ↑π ^ (-s) * ↑π ^ (s * (↑(Int.ofNat 1) / ↑2)) * riemannCompletedZeta s *
            2 ^ (-1 + s) *
          Complex.Gamma (↑(Int.ofNat 1) / ↑2 + s * ↑(Int.negOfNat 1) * (↑(Int.ofNat 1) / ↑2)) *
        Complex.Gamma (↑(Int.ofNat 1) / ↑2 + s * (↑(Int.ofNat 1) / ↑2)) *
      ↑π
[PROOFSTEP]
ring
[GOAL]
case neg
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
h_Ga_ne4 : Complex.Gamma ((1 - s) / 2) ≠ 0
⊢ ↑π ^ ((1 - s) / 2) = ↑π ^ (-s) * ↑(sqrt π) * ↑π ^ (s / 2)
[PROOFSTEP]
simp_rw [sqrt_eq_rpow, ofReal_cpow pi_pos.le, ← cpow_add _ _ (ofReal_ne_zero.mpr pi_pos.ne')]
[GOAL]
case neg
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
h_Ga_ne4 : Complex.Gamma ((1 - s) / 2) ≠ 0
⊢ ↑π ^ ((1 - s) / 2) = ↑π ^ (-s + ↑(1 / 2) + s / 2)
[PROOFSTEP]
congr 1
[GOAL]
case neg.e_a
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
h_Ga_ne4 : Complex.Gamma ((1 - s) / 2) ≠ 0
⊢ (1 - s) / 2 = -s + ↑(1 / 2) + s / 2
[PROOFSTEP]
push_cast
[GOAL]
case neg.e_a
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
h_Ga_ne4 : Complex.Gamma ((1 - s) / 2) ≠ 0
⊢ (1 - s) / 2 = -s + 1 / 2 + s / 2
[PROOFSTEP]
field_simp
[GOAL]
case neg.e_a
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
h_pow : 2 ^ (s - 1) ≠ 0
h_Ga_ne1 : Complex.Gamma (s / 2) ≠ 0
h_Ga_eq : Complex.Gamma s = Complex.Gamma (s / 2) * Complex.Gamma ((s + 1) / 2) * 2 ^ (s - 1) / ↑(sqrt π)
h_Ga_ne3 : Complex.Gamma ((s + 1) / 2) ≠ 0
hs_pos_odd : ¬∃ n, s = 1 + 2 * ↑n
h_Ga_ne4 : Complex.Gamma ((1 - s) / 2) ≠ 0
⊢ 1 - s = -(s * 2) + 1 + s
[PROOFSTEP]
ring
[GOAL]
k : ℕ
⊢ riemannZeta (-↑k) = (-1) ^ k * ↑(bernoulli (k + 1)) / (↑k + 1)
[PROOFSTEP]
rcases Nat.even_or_odd' k with ⟨m, rfl | rfl⟩
[GOAL]
case intro.inl
m : ℕ
⊢ riemannZeta (-↑(2 * m)) = (-1) ^ (2 * m) * ↑(bernoulli (2 * m + 1)) / (↑(2 * m) + 1)
[PROOFSTEP]
cases' m with m m
[GOAL]
case intro.inl.zero
⊢ riemannZeta (-↑(2 * Nat.zero)) = (-1) ^ (2 * Nat.zero) * ↑(bernoulli (2 * Nat.zero + 1)) / (↑(2 * Nat.zero) + 1)
[PROOFSTEP]
rw [Nat.zero_eq, mul_zero, Nat.cast_zero, pow_zero, one_mul, zero_add, neg_zero, zero_add, div_one, bernoulli_one,
  riemannZeta_zero]
[GOAL]
case intro.inl.zero
⊢ -1 / 2 = ↑(-1 / 2)
[PROOFSTEP]
norm_num
[GOAL]
case intro.inl.succ
m : ℕ
⊢ riemannZeta (-↑(2 * Nat.succ m)) =
    (-1) ^ (2 * Nat.succ m) * ↑(bernoulli (2 * Nat.succ m + 1)) / (↑(2 * Nat.succ m) + 1)
[PROOFSTEP]
rw [Nat.cast_mul, ← neg_mul, Nat.cast_two, Nat.cast_succ, riemannZeta_neg_two_mul_nat_add_one,
  bernoulli_eq_bernoulli'_of_ne_one]
[GOAL]
case intro.inl.succ
m : ℕ
⊢ 0 = (-1) ^ (2 * Nat.succ m) * ↑(bernoulli' (2 * Nat.succ m + 1)) / (2 * (↑m + 1) + 1)
case intro.inl.succ m : ℕ ⊢ 2 * Nat.succ m + 1 ≠ 1
[PROOFSTEP]
swap
[GOAL]
case intro.inl.succ
m : ℕ
⊢ 2 * Nat.succ m + 1 ≠ 1
[PROOFSTEP]
apply ne_of_gt
[GOAL]
case intro.inl.succ.h
m : ℕ
⊢ 1 < 2 * Nat.succ m + 1
[PROOFSTEP]
norm_num
[GOAL]
case intro.inl.succ
m : ℕ
⊢ 0 = (-1) ^ (2 * Nat.succ m) * ↑(bernoulli' (2 * Nat.succ m + 1)) / (2 * (↑m + 1) + 1)
[PROOFSTEP]
rw [bernoulli'_odd_eq_zero ⟨m + 1, rfl⟩ (by norm_num), Rat.cast_zero, mul_zero, zero_div]
[GOAL]
m : ℕ
⊢ 1 < 2 * (m + 1) + 1
[PROOFSTEP]
norm_num
[GOAL]
case intro.inr
m : ℕ
⊢ riemannZeta (-↑(2 * m + 1)) = (-1) ^ (2 * m + 1) * ↑(bernoulli (2 * m + 1 + 1)) / (↑(2 * m + 1) + 1)
[PROOFSTEP]
rw [Odd.neg_one_pow ⟨m, rfl⟩]
[GOAL]
case intro.inr
m : ℕ
⊢ riemannZeta (-↑(2 * m + 1)) = -1 * ↑(bernoulli (2 * m + 1 + 1)) / (↑(2 * m + 1) + 1)
[PROOFSTEP]
rw [show -(↑(2 * m + 1) : ℂ) = 1 - (2 * m + 2) by push_cast ; ring]
[GOAL]
m : ℕ
⊢ -↑(2 * m + 1) = 1 - (2 * ↑m + 2)
[PROOFSTEP]
push_cast
[GOAL]
m : ℕ
⊢ -(2 * ↑m + 1) = 1 - (2 * ↑m + 2)
[PROOFSTEP]
ring
[GOAL]
case intro.inr
m : ℕ
⊢ riemannZeta (1 - (2 * ↑m + 2)) = -1 * ↑(bernoulli (2 * m + 1 + 1)) / (↑(2 * m + 1) + 1)
[PROOFSTEP]
rw [riemannZeta_one_sub]
[GOAL]
case intro.inr
m : ℕ
⊢ 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) *
        Complex.sin (↑π * (1 - (2 * ↑m + 2)) / 2) *
      riemannZeta (2 * ↑m + 2) =
    -1 * ↑(bernoulli (2 * m + 1 + 1)) / (↑(2 * m + 1) + 1)
case intro.inr.hs
m : ℕ
⊢ ∀ (n : ℕ), 2 * ↑m + 2 ≠ -↑n
case intro.inr.hs' m : ℕ ⊢ 2 * ↑m + 2 ≠ 1
[PROOFSTEP]
rotate_left
[GOAL]
case intro.inr.hs
m : ℕ
⊢ ∀ (n : ℕ), 2 * ↑m + 2 ≠ -↑n
[PROOFSTEP]
intro n
[GOAL]
case intro.inr.hs
m n : ℕ
⊢ 2 * ↑m + 2 ≠ -↑n
[PROOFSTEP]
rw [(by norm_cast : 2 * (m : ℂ) + 2 = ↑(2 * m + 2)), ← Int.cast_neg_natCast, ← Int.cast_ofNat, Ne.def, Int.cast_inj]
[GOAL]
m n : ℕ
⊢ 2 * ↑m + 2 = ↑(2 * m + 2)
[PROOFSTEP]
norm_cast
[GOAL]
case intro.inr.hs
m n : ℕ
⊢ ¬↑(2 * m + 2) = -↑n
[PROOFSTEP]
apply ne_of_gt
[GOAL]
case intro.inr.hs.h
m n : ℕ
⊢ -↑n < ↑(2 * m + 2)
[PROOFSTEP]
exact lt_of_le_of_lt (by norm_num : (-n : ℤ) ≤ 0) (by positivity)
[GOAL]
m n : ℕ
⊢ -↑n ≤ 0
[PROOFSTEP]
norm_num
[GOAL]
m n : ℕ
⊢ 0 < ↑(2 * m + 2)
[PROOFSTEP]
positivity
[GOAL]
case intro.inr.hs'
m : ℕ
⊢ 2 * ↑m + 2 ≠ 1
[PROOFSTEP]
rw [(by norm_cast : 2 * (m : ℂ) + 2 = ↑(2 * m + 2)), Ne.def, Nat.cast_eq_one]
[GOAL]
m : ℕ
⊢ 2 * ↑m + 2 = ↑(2 * m + 2)
[PROOFSTEP]
norm_cast
[GOAL]
case intro.inr.hs'
m : ℕ
⊢ ¬2 * m + 2 = 1
[PROOFSTEP]
norm_num
  -- get rid of sine term
[GOAL]
case intro.inr
m : ℕ
⊢ 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) *
        Complex.sin (↑π * (1 - (2 * ↑m + 2)) / 2) *
      riemannZeta (2 * ↑m + 2) =
    -1 * ↑(bernoulli (2 * m + 1 + 1)) / (↑(2 * m + 1) + 1)
[PROOFSTEP]
rw [show Complex.sin (↑π * (1 - (2 * ↑m + 2)) / 2) = -(-1 : ℂ) ^ m
    by
    rw [(by field_simp; ring : (π : ℂ) * (1 - (2 * ↑m + 2)) / 2 = π / 2 - (π * m + π))]
    rw [Complex.sin_pi_div_two_sub, Complex.cos_add_pi, neg_inj]
    rcases Nat.even_or_odd' m with ⟨t, rfl | rfl⟩
    · rw [pow_mul, neg_one_sq, one_pow]
      convert Complex.cos_nat_mul_two_pi t using 2
      push_cast ; ring_nf
    · rw [pow_add, pow_one, pow_mul, neg_one_sq, one_pow, one_mul]
      convert Complex.cos_nat_mul_two_pi_add_pi t using 2
      push_cast ; ring_nf]
  -- substitute in what we know about zeta values at positive integers
[GOAL]
m : ℕ
⊢ Complex.sin (↑π * (1 - (2 * ↑m + 2)) / 2) = -(-1) ^ m
[PROOFSTEP]
rw [(by field_simp; ring : (π : ℂ) * (1 - (2 * ↑m + 2)) / 2 = π / 2 - (π * m + π))]
[GOAL]
m : ℕ
⊢ ↑π * (1 - (2 * ↑m + 2)) / 2 = ↑π / 2 - (↑π * ↑m + ↑π)
[PROOFSTEP]
field_simp
[GOAL]
m : ℕ
⊢ ↑π * (1 - (2 * ↑m + 2)) = ↑π - 2 * (↑π * ↑m + ↑π)
[PROOFSTEP]
ring
[GOAL]
m : ℕ
⊢ Complex.sin (↑π / 2 - (↑π * ↑m + ↑π)) = -(-1) ^ m
[PROOFSTEP]
rw [Complex.sin_pi_div_two_sub, Complex.cos_add_pi, neg_inj]
[GOAL]
m : ℕ
⊢ Complex.cos (↑π * ↑m) = (-1) ^ m
[PROOFSTEP]
rcases Nat.even_or_odd' m with ⟨t, rfl | rfl⟩
[GOAL]
case intro.inl
t : ℕ
⊢ Complex.cos (↑π * ↑(2 * t)) = (-1) ^ (2 * t)
[PROOFSTEP]
rw [pow_mul, neg_one_sq, one_pow]
[GOAL]
case intro.inl
t : ℕ
⊢ Complex.cos (↑π * ↑(2 * t)) = 1
[PROOFSTEP]
convert Complex.cos_nat_mul_two_pi t using 2
[GOAL]
case h.e'_2.h.e'_1
t : ℕ
⊢ ↑π * ↑(2 * t) = ↑t * (2 * ↑π)
[PROOFSTEP]
push_cast
[GOAL]
case h.e'_2.h.e'_1
t : ℕ
⊢ ↑π * (2 * ↑t) = ↑t * (2 * ↑π)
[PROOFSTEP]
ring_nf
[GOAL]
case intro.inr
t : ℕ
⊢ Complex.cos (↑π * ↑(2 * t + 1)) = (-1) ^ (2 * t + 1)
[PROOFSTEP]
rw [pow_add, pow_one, pow_mul, neg_one_sq, one_pow, one_mul]
[GOAL]
case intro.inr
t : ℕ
⊢ Complex.cos (↑π * ↑(2 * t + 1)) = -1
[PROOFSTEP]
convert Complex.cos_nat_mul_two_pi_add_pi t using 2
[GOAL]
case h.e'_2.h.e'_1
t : ℕ
⊢ ↑π * ↑(2 * t + 1) = ↑t * (2 * ↑π) + ↑π
[PROOFSTEP]
push_cast
[GOAL]
case h.e'_2.h.e'_1
t : ℕ
⊢ ↑π * (2 * ↑t + 1) = ↑t * (2 * ↑π) + ↑π
[PROOFSTEP]
ring_nf
[GOAL]
case intro.inr
m : ℕ
⊢ 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * -(-1) ^ m * riemannZeta (2 * ↑m + 2) =
    -1 * ↑(bernoulli (2 * m + 1 + 1)) / (↑(2 * m + 1) + 1)
[PROOFSTEP]
have step1 := congr_arg ((↑) : ℝ → ℂ) (hasSum_zeta_nat (by norm_num : m + 1 ≠ 0)).tsum_eq
[GOAL]
m : ℕ
⊢ m + 1 ≠ 0
[PROOFSTEP]
norm_num
[GOAL]
case intro.inr
m : ℕ
step1 :
  ↑(∑' (b : ℕ), 1 / ↑b ^ (2 * (m + 1))) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1))) / ↑(2 * (m + 1))!)
⊢ 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * -(-1) ^ m * riemannZeta (2 * ↑m + 2) =
    -1 * ↑(bernoulli (2 * m + 1 + 1)) / (↑(2 * m + 1) + 1)
[PROOFSTEP]
have step2 := zeta_nat_eq_tsum_of_gt_one (by rw [mul_add]; norm_num : 1 < 2 * (m + 1))
[GOAL]
m : ℕ
step1 :
  ↑(∑' (b : ℕ), 1 / ↑b ^ (2 * (m + 1))) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1))) / ↑(2 * (m + 1))!)
⊢ 1 < 2 * (m + 1)
[PROOFSTEP]
rw [mul_add]
[GOAL]
m : ℕ
step1 :
  ↑(∑' (b : ℕ), 1 / ↑b ^ (2 * (m + 1))) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1))) / ↑(2 * (m + 1))!)
⊢ 1 < 2 * m + 2 * 1
[PROOFSTEP]
norm_num
[GOAL]
case intro.inr
m : ℕ
step1 :
  ↑(∑' (b : ℕ), 1 / ↑b ^ (2 * (m + 1))) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1))) / ↑(2 * (m + 1))!)
step2 : riemannZeta ↑(2 * (m + 1)) = ∑' (n : ℕ), 1 / ↑n ^ (2 * (m + 1))
⊢ 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * -(-1) ^ m * riemannZeta (2 * ↑m + 2) =
    -1 * ↑(bernoulli (2 * m + 1 + 1)) / (↑(2 * m + 1) + 1)
[PROOFSTEP]
simp_rw [ofReal_tsum, ofReal_div, ofReal_one, ofReal_pow, ofReal_nat_cast] at step1
[GOAL]
case intro.inr
m : ℕ
step2 : riemannZeta ↑(2 * (m + 1)) = ∑' (n : ℕ), 1 / ↑n ^ (2 * (m + 1))
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * -(-1) ^ m * riemannZeta (2 * ↑m + 2) =
    -1 * ↑(bernoulli (2 * m + 1 + 1)) / (↑(2 * m + 1) + 1)
[PROOFSTEP]
rw [step1, (by norm_cast : (↑(2 * (m + 1)) : ℂ) = 2 * ↑m + 2)] at step2
[GOAL]
m : ℕ
step2 :
  riemannZeta ↑(2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ ↑(2 * (m + 1)) = 2 * ↑m + 2
[PROOFSTEP]
norm_cast
[GOAL]
case intro.inr
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * -(-1) ^ m * riemannZeta (2 * ↑m + 2) =
    -1 * ↑(bernoulli (2 * m + 1 + 1)) / (↑(2 * m + 1) + 1)
[PROOFSTEP]
rw [step2, mul_div]
  -- now the rest is just a lengthy but elementary rearrangement
[GOAL]
case intro.inr
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * -(-1) ^ m *
        ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) /
      ↑(2 * (m + 1))! =
    -1 * ↑(bernoulli (2 * m + 1 + 1)) / (↑(2 * m + 1) + 1)
[PROOFSTEP]
rw [show ((2 * (m + 1))! : ℂ) = Complex.Gamma (2 * m + 2) * (↑(2 * m + 1) + 1)
    by
    rw [(by push_cast ; ring : (2 * m + 2 : ℂ) = ↑(2 * m + 1) + 1), Complex.Gamma_nat_eq_factorial,
      (by ring : 2 * (m + 1) = 2 * m + 1 + 1), Nat.factorial_succ, Nat.cast_mul, mul_comm]
    norm_num]
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ ↑(2 * (m + 1))! = Complex.Gamma (2 * ↑m + 2) * (↑(2 * m + 1) + 1)
[PROOFSTEP]
rw [(by push_cast ; ring : (2 * m + 2 : ℂ) = ↑(2 * m + 1) + 1), Complex.Gamma_nat_eq_factorial,
  (by ring : 2 * (m + 1) = 2 * m + 1 + 1), Nat.factorial_succ, Nat.cast_mul, mul_comm]
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 * ↑m + 2 = ↑(2 * m + 1) + 1
[PROOFSTEP]
push_cast
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 * ↑m + 2 = 2 * ↑m + 1 + 1
[PROOFSTEP]
ring
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 * (m + 1) = 2 * m + 1 + 1
[PROOFSTEP]
ring
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ ↑(2 * m + 1)! * ↑(2 * m + 1 + 1) = ↑(2 * m + 1)! * (↑(2 * m + 1) + 1)
[PROOFSTEP]
norm_num
[GOAL]
case intro.inr
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * -(-1) ^ m *
        ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) /
      (Complex.Gamma (2 * ↑m + 2) * (↑(2 * m + 1) + 1)) =
    -1 * ↑(bernoulli (2 * m + 1 + 1)) / (↑(2 * m + 1) + 1)
[PROOFSTEP]
rw [← div_div, neg_one_mul]
[GOAL]
case intro.inr
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * -(-1) ^ m *
          ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) /
        Complex.Gamma (2 * ↑m + 2) /
      (↑(2 * m + 1) + 1) =
    -↑(bernoulli (2 * m + 1 + 1)) / (↑(2 * m + 1) + 1)
[PROOFSTEP]
congr 1
[GOAL]
case intro.inr.e_a
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * -(-1) ^ m *
        ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) /
      Complex.Gamma (2 * ↑m + 2) =
    -↑(bernoulli (2 * m + 1 + 1))
[PROOFSTEP]
rw [div_eq_iff (Gamma_ne_zero_of_re_pos _)]
[GOAL]
case intro.inr.e_a
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * -(-1) ^ m *
      ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) =
    -↑(bernoulli (2 * m + 1 + 1)) * Complex.Gamma (2 * ↑m + 2)
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 0 < (2 * ↑m + 2).re
[PROOFSTEP]
swap
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 0 < (2 * ↑m + 2).re
[PROOFSTEP]
rw [(by norm_num : 2 * (m : ℂ) + 2 = ↑(2 * (m : ℝ) + 2)), ofReal_re]
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 * ↑m + 2 = ↑(2 * ↑m + 2)
[PROOFSTEP]
norm_num
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 0 < 2 * ↑m + 2
[PROOFSTEP]
positivity
[GOAL]
case intro.inr.e_a
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * -(-1) ^ m *
      ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) =
    -↑(bernoulli (2 * m + 1 + 1)) * Complex.Gamma (2 * ↑m + 2)
[PROOFSTEP]
simp_rw [ofReal_mul, ← mul_assoc, ofReal_rat_cast, mul_add, Nat.add_assoc, mul_one, one_add_one_eq_two, mul_neg,
  neg_mul, neg_inj]
[GOAL]
case intro.inr.e_a
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * (-1) ^ m * ↑((-1) ^ (m + 2)) *
          ↑(2 ^ (2 * m + 2 - 1)) *
        ↑(π ^ (2 * m + 2)) *
      ↑(bernoulli (2 * m + 2)) =
    ↑(bernoulli (2 * m + 2)) * Complex.Gamma (2 * ↑m + 2)
[PROOFSTEP]
conv_rhs => rw [mul_comm]
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
| ↑(bernoulli (2 * m + 2)) * Complex.Gamma (2 * ↑m + 2)
[PROOFSTEP]
rw [mul_comm]
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
| ↑(bernoulli (2 * m + 2)) * Complex.Gamma (2 * ↑m + 2)
[PROOFSTEP]
rw [mul_comm]
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
| ↑(bernoulli (2 * m + 2)) * Complex.Gamma (2 * ↑m + 2)
[PROOFSTEP]
rw [mul_comm]
[GOAL]
case intro.inr.e_a
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * (-1) ^ m * ↑((-1) ^ (m + 2)) *
          ↑(2 ^ (2 * m + 2 - 1)) *
        ↑(π ^ (2 * m + 2)) *
      ↑(bernoulli (2 * m + 2)) =
    Complex.Gamma (2 * ↑m + 2) * ↑(bernoulli (2 * m + 2))
[PROOFSTEP]
congr 1
[GOAL]
case intro.inr.e_a.e_a
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * (-1) ^ m * ↑((-1) ^ (m + 2)) *
        ↑(2 ^ (2 * m + 2 - 1)) *
      ↑(π ^ (2 * m + 2)) =
    Complex.Gamma (2 * ↑m + 2)
[PROOFSTEP]
rw [ofReal_pow, ofReal_neg, ofReal_one, pow_add, neg_one_sq, mul_one]
[GOAL]
case intro.inr.e_a.e_a
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * (-1) ^ m * (-1) ^ m *
        ↑(2 ^ (2 * m + 2 - 1)) *
      ↑(π ^ (2 * m + 2)) =
    Complex.Gamma (2 * ↑m + 2)
[PROOFSTEP]
conv_lhs =>
  congr
  congr
  rw [mul_assoc, ← pow_add, ← two_mul, pow_mul, neg_one_sq, one_pow, mul_one]
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
| 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * (-1) ^ m * (-1) ^ m *
      ↑(2 ^ (2 * m + 2 - 1)) *
    ↑(π ^ (2 * m + 2))
[PROOFSTEP]
  congr
  congr
  rw [mul_assoc, ← pow_add, ← two_mul, pow_mul, neg_one_sq, one_pow, mul_one]
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
| 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * (-1) ^ m * (-1) ^ m *
      ↑(2 ^ (2 * m + 2 - 1)) *
    ↑(π ^ (2 * m + 2))
[PROOFSTEP]
  congr
  congr
  rw [mul_assoc, ← pow_add, ← two_mul, pow_mul, neg_one_sq, one_pow, mul_one]
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
| 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * (-1) ^ m * (-1) ^ m *
      ↑(2 ^ (2 * m + 2 - 1)) *
    ↑(π ^ (2 * m + 2))
[PROOFSTEP]
congr
[GOAL]
case a
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
| 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * (-1) ^ m * (-1) ^ m *
    ↑(2 ^ (2 * m + 2 - 1))
case a
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
| ↑(π ^ (2 * m + 2))
[PROOFSTEP]
congr
[GOAL]
case a.a
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
| 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * (-1) ^ m * (-1) ^ m
case a.a
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
| ↑(2 ^ (2 * m + 2 - 1))
case a
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
| ↑(π ^ (2 * m + 2))
[PROOFSTEP]
rw [mul_assoc, ← pow_add, ← two_mul, pow_mul, neg_one_sq, one_pow, mul_one]
[GOAL]
case intro.inr.e_a.e_a
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 ^ (1 - (2 * ↑m + 2)) * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * ↑(2 ^ (2 * m + 2 - 1)) *
      ↑(π ^ (2 * m + 2)) =
    Complex.Gamma (2 * ↑m + 2)
[PROOFSTEP]
rw [show (2 : ℂ) ^ (1 - (2 * (m : ℂ) + 2)) = (↑((2 : ℝ) ^ (2 * m + 2 - 1)))⁻¹
    by
    rw [ofReal_pow, ← cpow_nat_cast, ← cpow_neg, show (2 : ℝ) = (2 : ℂ) by norm_num]
    congr 1
    rw [Nat.add_sub_assoc one_le_two, Nat.cast_add, Nat.cast_mul, Nat.cast_two, (by norm_num : 2 - 1 = 1)]
    push_cast ; ring]
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 ^ (1 - (2 * ↑m + 2)) = (↑(2 ^ (2 * m + 2 - 1)))⁻¹
[PROOFSTEP]
rw [ofReal_pow, ← cpow_nat_cast, ← cpow_neg, show (2 : ℝ) = (2 : ℂ) by norm_num]
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ ↑2 = 2
[PROOFSTEP]
norm_num
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 ^ (1 - (2 * ↑m + 2)) = 2 ^ (-↑(2 * m + 2 - 1))
[PROOFSTEP]
congr 1
[GOAL]
case e_a
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 1 - (2 * ↑m + 2) = -↑(2 * m + 2 - 1)
[PROOFSTEP]
rw [Nat.add_sub_assoc one_le_two, Nat.cast_add, Nat.cast_mul, Nat.cast_two, (by norm_num : 2 - 1 = 1)]
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 2 - 1 = 1
[PROOFSTEP]
norm_num
[GOAL]
case e_a
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 1 - (2 * ↑m + 2) = -(2 * ↑m + ↑1)
[PROOFSTEP]
push_cast
[GOAL]
case e_a
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ 1 - (2 * ↑m + 2) = -(2 * ↑m + 1)
[PROOFSTEP]
ring
[GOAL]
case intro.inr.e_a.e_a
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ (↑(2 ^ (2 * m + 2 - 1)))⁻¹ * ↑π ^ (-(2 * ↑m + 2)) * Complex.Gamma (2 * ↑m + 2) * ↑(2 ^ (2 * m + 2 - 1)) *
      ↑(π ^ (2 * m + 2)) =
    Complex.Gamma (2 * ↑m + 2)
[PROOFSTEP]
rw [show (π : ℂ) ^ (-(2 * (m : ℂ) + 2)) = (↑(π ^ (2 * m + 2)))⁻¹ by
    rw [ofReal_pow, ← cpow_nat_cast, ← cpow_neg, Nat.cast_add, Nat.cast_mul, Nat.cast_two]]
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ ↑π ^ (-(2 * ↑m + 2)) = (↑(π ^ (2 * m + 2)))⁻¹
[PROOFSTEP]
rw [ofReal_pow, ← cpow_nat_cast, ← cpow_neg, Nat.cast_add, Nat.cast_mul, Nat.cast_two]
[GOAL]
case intro.inr.e_a.e_a
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ (↑(2 ^ (2 * m + 2 - 1)))⁻¹ * (↑(π ^ (2 * m + 2)))⁻¹ * Complex.Gamma (2 * ↑m + 2) * ↑(2 ^ (2 * m + 2 - 1)) *
      ↑(π ^ (2 * m + 2)) =
    Complex.Gamma (2 * ↑m + 2)
[PROOFSTEP]
rw [(by intros; ring : ∀ a b c d e : ℂ, a * b * c * d * e = a * d * (b * e) * c)]
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ ∀ (a b c d e : ℂ), a * b * c * d * e = a * d * (b * e) * c
[PROOFSTEP]
intros
[GOAL]
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
a✝ b✝ c✝ d✝ e✝ : ℂ
⊢ a✝ * b✝ * c✝ * d✝ * e✝ = a✝ * d✝ * (b✝ * e✝) * c✝
[PROOFSTEP]
ring
[GOAL]
case intro.inr.e_a.e_a
m : ℕ
step2 :
  riemannZeta (2 * ↑m + 2) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
step1 :
  ∑' (a : ℕ), 1 / ↑a ^ (2 * (m + 1)) =
    ↑((-1) ^ (m + 1 + 1) * 2 ^ (2 * (m + 1) - 1) * π ^ (2 * (m + 1)) * ↑(bernoulli (2 * (m + 1)))) / ↑(2 * (m + 1))!
⊢ (↑(2 ^ (2 * m + 2 - 1)))⁻¹ * ↑(2 ^ (2 * m + 2 - 1)) * ((↑(π ^ (2 * m + 2)))⁻¹ * ↑(π ^ (2 * m + 2))) *
      Complex.Gamma (2 * ↑m + 2) =
    Complex.Gamma (2 * ↑m + 2)
[PROOFSTEP]
rw [inv_mul_cancel (ofReal_ne_zero.mpr <| pow_ne_zero _ pi_pos.ne'),
  inv_mul_cancel (ofReal_ne_zero.mpr <| pow_ne_zero _ two_ne_zero), one_mul, one_mul]