l3lab/ntp-mathlib huggingface dataset:
/-- Explicit formula for `ζ (2 * k)`, for `k ∈ ℕ` with `k ≠ 0`: we have
`ζ (2 * k) = (-1) ^ (k + 1) * 2 ^ (2 * k - 1) * π ^ (2 * k) * bernoulli (2 * k) / (2 * k)!`.
Compare `hasSum_zeta_nat` for a version formulated explicitly as a sum, and
`riemannZeta_neg_nat_eq_bernoulli` for values at negative integers (equivalent to the above via
the functional equation). -/
theorem riemannZeta_two_mul_nat {k : ℕ} (hk : k ≠ 0) :
    riemannZeta (2 * k) = (-1 : ℂ) ^ (k + 1) * (2 : ℂ) ^ (2 * k - 1)
      * (π : ℂ) ^ (2 * k) * bernoulli (2 * k) / (2 * k)! := by
  convert congr_arg ((↑) : ℝ → ℂ) (hasSum_zeta_nat hk).tsum_eq
  · rw [← Nat.cast_two, ← Nat.cast_mul, zeta_nat_eq_tsum_of_gt_one]
    · 

Proof state:
case h.e'_2
k : ℕ
hk : k ≠ 0
⊢ ∑' (n : ℕ), 1 / ↑n ^ (2 * k) = ↑(∑' (b : ℕ), 1 / ↑b ^ (2 * k))

Next tactic:
rw [ofReal_tsum]
/-- Explicit formula for `ζ (2 * k)`, for `k ∈ ℕ` with `k ≠ 0`: we have
`ζ (2 * k) = (-1) ^ (k + 1) * 2 ^ (2 * k - 1) * π ^ (2 * k) * bernoulli (2 * k) / (2 * k)!`.
Compare `hasSum_zeta_nat` for a version formulated explicitly as a sum, and
`riemannZeta_neg_nat_eq_bernoulli` for values at negative integers (equivalent to the above via
the functional equation). -/
theorem riemannZeta_two_mul_nat {k : ℕ} (hk : k ≠ 0) :
    riemannZeta (2 * k) = (-1 : ℂ) ^ (k + 1) * (2 : ℂ) ^ (2 * k - 1)
      * (π : ℂ) ^ (2 * k) * bernoulli (2 * k) / (2 * k)! := by
  convert congr_arg ((↑) : ℝ → ℂ) (hasSum_zeta_nat hk).tsum_eq
  · rw [← Nat.cast_two, ← Nat.cast_mul, zeta_nat_eq_tsum_of_gt_one]
    · rw [ofReal_tsum]
      

Proof state:
case h.e'_2
k : ℕ
hk : k ≠ 0
⊢ ∑' (n : ℕ), 1 / ↑n ^ (2 * k) = ∑' (a : ℕ), ↑(1 / ↑a ^ (2 * k))

Next tactic:
norm_num
/-- Explicit formula for `ζ (2 * k)`, for `k ∈ ℕ` with `k ≠ 0`: we have
`ζ (2 * k) = (-1) ^ (k + 1) * 2 ^ (2 * k - 1) * π ^ (2 * k) * bernoulli (2 * k) / (2 * k)!`.
Compare `hasSum_zeta_nat` for a version formulated explicitly as a sum, and
`riemannZeta_neg_nat_eq_bernoulli` for values at negative integers (equivalent to the above via
the functional equation). -/
theorem riemannZeta_two_mul_nat {k : ℕ} (hk : k ≠ 0) :
    riemannZeta (2 * k) = (-1 : ℂ) ^ (k + 1) * (2 : ℂ) ^ (2 * k - 1)
      * (π : ℂ) ^ (2 * k) * bernoulli (2 * k) / (2 * k)! := by
  convert congr_arg ((↑) : ℝ → ℂ) (hasSum_zeta_nat hk).tsum_eq
  · rw [← Nat.cast_two, ← Nat.cast_mul, zeta_nat_eq_tsum_of_gt_one]
    · rw [ofReal_tsum]
      norm_num
    · 

Proof state:
case h.e'_2
k : ℕ
hk : k ≠ 0
⊢ 1 < 2 * k

Next tactic:
refine one_lt_two.trans_le ?_
/-- Explicit formula for `ζ (2 * k)`, for `k ∈ ℕ` with `k ≠ 0`: we have
`ζ (2 * k) = (-1) ^ (k + 1) * 2 ^ (2 * k - 1) * π ^ (2 * k) * bernoulli (2 * k) / (2 * k)!`.
Compare `hasSum_zeta_nat` for a version formulated explicitly as a sum, and
`riemannZeta_neg_nat_eq_bernoulli` for values at negative integers (equivalent to the above via
the functional equation). -/
theorem riemannZeta_two_mul_nat {k : ℕ} (hk : k ≠ 0) :
    riemannZeta (2 * k) = (-1 : ℂ) ^ (k + 1) * (2 : ℂ) ^ (2 * k - 1)
      * (π : ℂ) ^ (2 * k) * bernoulli (2 * k) / (2 * k)! := by
  convert congr_arg ((↑) : ℝ → ℂ) (hasSum_zeta_nat hk).tsum_eq
  · rw [← Nat.cast_two, ← Nat.cast_mul, zeta_nat_eq_tsum_of_gt_one]
    · rw [ofReal_tsum]
      norm_num
    · refine one_lt_two.trans_le ?_
      

Proof state:
case h.e'_2
k : ℕ
hk : k ≠ 0
⊢ 2 ≤ 2 * k

Next tactic:
conv_lhs => rw [← mul_one 2]
/-- Explicit formula for `ζ (2 * k)`, for `k ∈ ℕ` with `k ≠ 0`: we have
`ζ (2 * k) = (-1) ^ (k + 1) * 2 ^ (2 * k - 1) * π ^ (2 * k) * bernoulli (2 * k) / (2 * k)!`.
Compare `hasSum_zeta_nat` for a version formulated explicitly as a sum, and
`riemannZeta_neg_nat_eq_bernoulli` for values at negative integers (equivalent to the above via
the functional equation). -/
theorem riemannZeta_two_mul_nat {k : ℕ} (hk : k ≠ 0) :
    riemannZeta (2 * k) = (-1 : ℂ) ^ (k + 1) * (2 : ℂ) ^ (2 * k - 1)
      * (π : ℂ) ^ (2 * k) * bernoulli (2 * k) / (2 * k)! := by
  convert congr_arg ((↑) : ℝ → ℂ) (hasSum_zeta_nat hk).tsum_eq
  · rw [← Nat.cast_two, ← Nat.cast_mul, zeta_nat_eq_tsum_of_gt_one]
    · rw [ofReal_tsum]
      norm_num
    · refine one_lt_two.trans_le ?_
      conv_lhs => 

Proof state:
k : ℕ
hk : k ≠ 0
| 2

Next tactic:
rw [← mul_one 2]
/-- Explicit formula for `ζ (2 * k)`, for `k ∈ ℕ` with `k ≠ 0`: we have
`ζ (2 * k) = (-1) ^ (k + 1) * 2 ^ (2 * k - 1) * π ^ (2 * k) * bernoulli (2 * k) / (2 * k)!`.
Compare `hasSum_zeta_nat` for a version formulated explicitly as a sum, and
`riemannZeta_neg_nat_eq_bernoulli` for values at negative integers (equivalent to the above via
the functional equation). -/
theorem riemannZeta_two_mul_nat {k : ℕ} (hk : k ≠ 0) :
    riemannZeta (2 * k) = (-1 : ℂ) ^ (k + 1) * (2 : ℂ) ^ (2 * k - 1)
      * (π : ℂ) ^ (2 * k) * bernoulli (2 * k) / (2 * k)! := by
  convert congr_arg ((↑) : ℝ → ℂ) (hasSum_zeta_nat hk).tsum_eq
  · rw [← Nat.cast_two, ← Nat.cast_mul, zeta_nat_eq_tsum_of_gt_one]
    · rw [ofReal_tsum]
      norm_num
    · refine one_lt_two.trans_le ?_
      conv_lhs => rw [← mul_one 2]
      

Proof state:
case h.e'_2
k : ℕ
hk : k ≠ 0
⊢ 2 * 1 ≤ 2 * k

Next tactic:
rwa [mul_le_mul_left (zero_lt_two' ℕ), Nat.one_le_iff_ne_zero]
/-- Explicit formula for `ζ (2 * k)`, for `k ∈ ℕ` with `k ≠ 0`: we have
`ζ (2 * k) = (-1) ^ (k + 1) * 2 ^ (2 * k - 1) * π ^ (2 * k) * bernoulli (2 * k) / (2 * k)!`.
Compare `hasSum_zeta_nat` for a version formulated explicitly as a sum, and
`riemannZeta_neg_nat_eq_bernoulli` for values at negative integers (equivalent to the above via
the functional equation). -/
theorem riemannZeta_two_mul_nat {k : ℕ} (hk : k ≠ 0) :
    riemannZeta (2 * k) = (-1 : ℂ) ^ (k + 1) * (2 : ℂ) ^ (2 * k - 1)
      * (π : ℂ) ^ (2 * k) * bernoulli (2 * k) / (2 * k)! := by
  convert congr_arg ((↑) : ℝ → ℂ) (hasSum_zeta_nat hk).tsum_eq
  · rw [← Nat.cast_two, ← Nat.cast_mul, zeta_nat_eq_tsum_of_gt_one]
    · rw [ofReal_tsum]
      norm_num
    · refine one_lt_two.trans_le ?_
      conv_lhs => rw [← mul_one 2]
      rwa [mul_le_mul_left (zero_lt_two' ℕ), Nat.one_le_iff_ne_zero]
  · 

Proof state:
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)!)

Next tactic:
norm_num
theorem riemannZeta_two : riemannZeta 2 = (π : ℂ) ^ 2 / 6 := by
  

Proof state:
⊢ riemannZeta 2 = ↑π ^ 2 / 6

Next tactic:
convert congr_arg ((↑) : ℝ → ℂ) hasSum_zeta_two.tsum_eq
theorem riemannZeta_two : riemannZeta 2 = (π : ℂ) ^ 2 / 6 := by
  convert congr_arg ((↑) : ℝ → ℂ) hasSum_zeta_two.tsum_eq
  · 

Proof state:
case h.e'_2
⊢ riemannZeta 2 = ↑(∑' (b : ℕ), 1 / ↑b ^ 2)

Next tactic:
rw [← Nat.cast_two, zeta_nat_eq_tsum_of_gt_one one_lt_two, ofReal_tsum]
theorem riemannZeta_two : riemannZeta 2 = (π : ℂ) ^ 2 / 6 := by
  convert congr_arg ((↑) : ℝ → ℂ) hasSum_zeta_two.tsum_eq
  · rw [← Nat.cast_two, zeta_nat_eq_tsum_of_gt_one one_lt_two, ofReal_tsum]
    

Proof state:
case h.e'_2
⊢ ∑' (n : ℕ), 1 / ↑n ^ 2 = ∑' (a : ℕ), ↑(1 / ↑a ^ 2)

Next tactic:
norm_num
theorem riemannZeta_two : riemannZeta 2 = (π : ℂ) ^ 2 / 6 := by
  convert congr_arg ((↑) : ℝ → ℂ) hasSum_zeta_two.tsum_eq
  · rw [← Nat.cast_two, zeta_nat_eq_tsum_of_gt_one one_lt_two, ofReal_tsum]
    norm_num
  · 

Proof state:
case h.e'_3
⊢ ↑π ^ 2 / 6 = ↑(π ^ 2 / 6)

Next tactic:
norm_num
theorem riemannZeta_four : riemannZeta 4 = π ^ 4 / 90 := by
  

Proof state:
⊢ riemannZeta 4 = ↑π ^ 4 / 90

Next tactic:
convert congr_arg ((↑) : ℝ → ℂ) hasSum_zeta_four.tsum_eq
theorem riemannZeta_four : riemannZeta 4 = π ^ 4 / 90 := by
  convert congr_arg ((↑) : ℝ → ℂ) hasSum_zeta_four.tsum_eq
  · 

Proof state:
case h.e'_2
⊢ riemannZeta 4 = ↑(∑' (b : ℕ), 1 / ↑b ^ 4)

Next tactic:
rw [← Nat.cast_one, show (4 : ℂ) = (4 : ℕ) by norm_num,
      zeta_nat_eq_tsum_of_gt_one (by norm_num : 1 < 4), ofReal_tsum]
theorem riemannZeta_four : riemannZeta 4 = π ^ 4 / 90 := by
  convert congr_arg ((↑) : ℝ → ℂ) hasSum_zeta_four.tsum_eq
  · rw [← Nat.cast_one, show (4 : ℂ) = (4 : ℕ) by 

Proof state:
⊢ 4 = ↑4

Next tactic:
norm_num
theorem riemannZeta_four : riemannZeta 4 = π ^ 4 / 90 := by
  convert congr_arg ((↑) : ℝ → ℂ) hasSum_zeta_four.tsum_eq
  · rw [← Nat.cast_one, show (4 : ℂ) = (4 : ℕ) by norm_num,
      zeta_nat_eq_tsum_of_gt_one (by 

Proof state:
⊢ 1 < 4

Next tactic:
norm_num
theorem riemannZeta_four : riemannZeta 4 = π ^ 4 / 90 := by
  convert congr_arg ((↑) : ℝ → ℂ) hasSum_zeta_four.tsum_eq
  · rw [← Nat.cast_one, show (4 : ℂ) = (4 : ℕ) by norm_num,
      zeta_nat_eq_tsum_of_gt_one (by norm_num : 1 < 4), ofReal_tsum]
    

Proof state:
case h.e'_2
⊢ ∑' (n : ℕ), 1 / ↑n ^ 4 = ∑' (a : ℕ), ↑(↑1 / ↑a ^ 4)

Next tactic:
norm_num
theorem riemannZeta_four : riemannZeta 4 = π ^ 4 / 90 := by
  convert congr_arg ((↑) : ℝ → ℂ) hasSum_zeta_four.tsum_eq
  · rw [← Nat.cast_one, show (4 : ℂ) = (4 : ℕ) by norm_num,
      zeta_nat_eq_tsum_of_gt_one (by norm_num : 1 < 4), ofReal_tsum]
    norm_num
  · 

Proof state:
case h.e'_3
⊢ ↑π ^ 4 / 90 = ↑(π ^ 4 / 90)

Next tactic:
norm_num
/-- Riemann zeta functional equation, formulated for `Λ₀`: for any complex `s` we have
`Λ₀(1 - s) = Λ₀ s`. -/
theorem riemannCompletedZeta₀_one_sub (s : ℂ) :
    riemannCompletedZeta₀ (1 - s) = riemannCompletedZeta₀ s := by
  

Proof state:
s : ℂ
⊢ riemannCompletedZeta₀ (1 - s) = riemannCompletedZeta₀ s

Next tactic:
have := mellin_comp_rpow zetaKernel₂ (s / 2 - 1 / 2) (-1)
/-- Riemann zeta functional equation, formulated for `Λ₀`: for any complex `s` we have
`Λ₀(1 - s) = Λ₀ s`. -/
theorem riemannCompletedZeta₀_one_sub (s : ℂ) :
    riemannCompletedZeta₀ (1 - s) = riemannCompletedZeta₀ s := by
  have := mellin_comp_rpow zetaKernel₂ (s / 2 - 1 / 2) (-1)
  

Proof state:
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

Next tactic:
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
/-- Riemann zeta functional equation, formulated for `Λ₀`: for any complex `s` we have
`Λ₀(1 - s) = Λ₀ s`. -/
theorem riemannCompletedZeta₀_one_sub (s : ℂ) :
    riemannCompletedZeta₀ (1 - s) = riemannCompletedZeta₀ s := by
  have := mellin_comp_rpow zetaKernel₂ (s / 2 - 1 / 2) (-1)
  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
  

Proof state:
s : ℂ
this : mellin (fun t => zetaKernel₂ (1 / t)) (s / 2 - 1 / 2) = mellin zetaKernel₂ (1 / 2 - s / 2)
⊢ riemannCompletedZeta₀ (1 - s) = riemannCompletedZeta₀ s

Next tactic:
conv_lhs => rw [riemannCompletedZeta₀, sub_div, ← this]
/-- Riemann zeta functional equation, formulated for `Λ₀`: for any complex `s` we have
`Λ₀(1 - s) = Λ₀ s`. -/
theorem riemannCompletedZeta₀_one_sub (s : ℂ) :
    riemannCompletedZeta₀ (1 - s) = riemannCompletedZeta₀ s := by
  have := mellin_comp_rpow zetaKernel₂ (s / 2 - 1 / 2) (-1)
  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
  conv_lhs => 

Proof state:
s : ℂ
this : mellin (fun t => zetaKernel₂ (1 / t)) (s / 2 - 1 / 2) = mellin zetaKernel₂ (1 / 2 - s / 2)
| riemannCompletedZeta₀ (1 - s)

Next tactic:
rw [riemannCompletedZeta₀, sub_div, ← this]
/-- Riemann zeta functional equation, formulated for `Λ₀`: for any complex `s` we have
`Λ₀(1 - s) = Λ₀ s`. -/
theorem riemannCompletedZeta₀_one_sub (s : ℂ) :
    riemannCompletedZeta₀ (1 - s) = riemannCompletedZeta₀ s := by
  have := mellin_comp_rpow zetaKernel₂ (s / 2 - 1 / 2) (-1)
  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
  conv_lhs => rw [riemannCompletedZeta₀, sub_div, ← this]
  

Proof state:
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

Next tactic:
refine set_integral_congr measurableSet_Ioi fun t ht => ?_
/-- Riemann zeta functional equation, formulated for `Λ₀`: for any complex `s` we have
`Λ₀(1 - s) = Λ₀ s`. -/
theorem riemannCompletedZeta₀_one_sub (s : ℂ) :
    riemannCompletedZeta₀ (1 - s) = riemannCompletedZeta₀ s := by
  have := mellin_comp_rpow zetaKernel₂ (s / 2 - 1 / 2) (-1)
  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
  conv_lhs => rw [riemannCompletedZeta₀, sub_div, ← this]
  refine set_integral_congr measurableSet_Ioi fun t ht => ?_
  

Proof state:
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

Next tactic:
simp_rw [zetaKernel₂_one_div (le_of_lt 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)]
/-- Riemann zeta functional equation, formulated for `Λ₀`: for any complex `s` we have
`Λ₀(1 - s) = Λ₀ s`. -/
theorem riemannCompletedZeta₀_one_sub (s : ℂ) :
    riemannCompletedZeta₀ (1 - s) = riemannCompletedZeta₀ s := by
  have := mellin_comp_rpow zetaKernel₂ (s / 2 - 1 / 2) (-1)
  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
  conv_lhs => rw [riemannCompletedZeta₀, sub_div, ← this]
  refine set_integral_congr measurableSet_Ioi fun t ht => ?_
  simp_rw [zetaKernel₂_one_div (le_of_lt 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)]
  

Proof state:
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

Next tactic:
congr 2
/-- Riemann zeta functional equation, formulated for `Λ₀`: for any complex `s` we have
`Λ₀(1 - s) = Λ₀ s`. -/
theorem riemannCompletedZeta₀_one_sub (s : ℂ) :
    riemannCompletedZeta₀ (1 - s) = riemannCompletedZeta₀ s := by
  have := mellin_comp_rpow zetaKernel₂ (s / 2 - 1 / 2) (-1)
  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
  conv_lhs => rw [riemannCompletedZeta₀, sub_div, ← this]
  refine set_integral_congr measurableSet_Ioi fun t ht => ?_
  simp_rw [zetaKernel₂_one_div (le_of_lt 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)]
  congr 2
  

Proof state:
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

Next tactic:
push_cast
/-- Riemann zeta functional equation, formulated for `Λ₀`: for any complex `s` we have
`Λ₀(1 - s) = Λ₀ s`. -/
theorem riemannCompletedZeta₀_one_sub (s : ℂ) :
    riemannCompletedZeta₀ (1 - s) = riemannCompletedZeta₀ s := by
  have := mellin_comp_rpow zetaKernel₂ (s / 2 - 1 / 2) (-1)
  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
  conv_lhs => rw [riemannCompletedZeta₀, sub_div, ← this]
  refine set_integral_congr measurableSet_Ioi fun t ht => ?_
  simp_rw [zetaKernel₂_one_div (le_of_lt 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)]
  congr 2
  push_cast
  

Proof state:
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

Next tactic:
ring
/-- Riemann zeta functional equation, formulated for `Λ`: for any complex `s` we have
`Λ (1 - s) = Λ s`. -/
theorem riemannCompletedZeta_one_sub (s : ℂ) :
    riemannCompletedZeta (1 - s) = riemannCompletedZeta s := by
  

Proof state:
s : ℂ
⊢ riemannCompletedZeta (1 - s) = riemannCompletedZeta s

Next tactic:
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]
/-- Riemann zeta functional equation, formulated for `Λ`: for any complex `s` we have
`Λ (1 - s) = Λ s`. -/
theorem riemannCompletedZeta_one_sub (s : ℂ) :
    riemannCompletedZeta (1 - s) = riemannCompletedZeta s := by
  simp_rw [riemannCompletedZeta, riemannCompletedZeta₀_one_sub, sub_add, (by 

Proof state:
s : ℂ
⊢ 1 - s - 1 = -s

Next tactic:
abel
/-- Riemann zeta functional equation, formulated for `Λ`: for any complex `s` we have
`Λ (1 - s) = Λ s`. -/
theorem riemannCompletedZeta_one_sub (s : ℂ) :
    riemannCompletedZeta (1 - s) = riemannCompletedZeta s := by
  simp_rw [riemannCompletedZeta, riemannCompletedZeta₀_one_sub, sub_add, (by abel : 1 - s - 1 = -s),
    (by 

Proof state:
s : ℂ
⊢ 1 - s = -(s - 1)

Next tactic:
abel
/-- Riemann zeta functional equation, formulated for `ζ`: if `1 - s ∉ ℕ`, then we have
`ζ (1 - s) = 2 ^ (1 - s) * π ^ (-s) * Γ s * sin (π * (1 - s) / 2) * ζ s`. -/
theorem riemannZeta_one_sub {s : ℂ} (hs : ∀ n : ℕ, s ≠ -n) (hs' : s ≠ 1) :
    riemannZeta (1 - s) =
      (2 : ℂ) ^ (1 - s) * (π : ℂ) ^ (-s) * Gamma s * sin (π * (1 - s) / 2) * riemannZeta s := by
  -- Deducing this from the previous formulations is quite involved. The proof uses two
  -- nontrivial facts (the doubling formula and reflection formula for Gamma) and a lot of careful
  -- rearrangement, requiring several non-vanishing statements as input to `field_simp`.
  

Proof state:
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

Next tactic:
have hs_ne : s ≠ 0 := by contrapose! hs; rw [hs]; exact ⟨0, by rw [Nat.cast_zero, neg_zero]⟩
/-- Riemann zeta functional equation, formulated for `ζ`: if `1 - s ∉ ℕ`, then we have
`ζ (1 - s) = 2 ^ (1 - s) * π ^ (-s) * Γ s * sin (π * (1 - s) / 2) * ζ s`. -/
theorem riemannZeta_one_sub {s : ℂ} (hs : ∀ n : ℕ, s ≠ -n) (hs' : s ≠ 1) :
    riemannZeta (1 - s) =
      (2 : ℂ) ^ (1 - s) * (π : ℂ) ^ (-s) * Gamma s * sin (π * (1 - s) / 2) * riemannZeta s := by
  -- Deducing this from the previous formulations is quite involved. The proof uses two
  -- nontrivial facts (the doubling formula and reflection formula for Gamma) and a lot of careful
  -- rearrangement, requiring several non-vanishing statements as input to `field_simp`.
  have hs_ne : s ≠ 0 := by 

Proof state:
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
⊢ s ≠ 0

Next tactic:
contrapose! hs
/-- Riemann zeta functional equation, formulated for `ζ`: if `1 - s ∉ ℕ`, then we have
`ζ (1 - s) = 2 ^ (1 - s) * π ^ (-s) * Γ s * sin (π * (1 - s) / 2) * ζ s`. -/
theorem riemannZeta_one_sub {s : ℂ} (hs : ∀ n : ℕ, s ≠ -n) (hs' : s ≠ 1) :
    riemannZeta (1 - s) =
      (2 : ℂ) ^ (1 - s) * (π : ℂ) ^ (-s) * Gamma s * sin (π * (1 - s) / 2) * riemannZeta s := by
  -- Deducing this from the previous formulations is quite involved. The proof uses two
  -- nontrivial facts (the doubling formula and reflection formula for Gamma) and a lot of careful
  -- rearrangement, requiring several non-vanishing statements as input to `field_simp`.
  have hs_ne : s ≠ 0 := by contrapose! hs; 

Proof state:
s : ℂ
hs' : s ≠ 1
hs : s = 0
⊢ ∃ n, s = -↑n

Next tactic:
rw [hs]
/-- Riemann zeta functional equation, formulated for `ζ`: if `1 - s ∉ ℕ`, then we have
`ζ (1 - s) = 2 ^ (1 - s) * π ^ (-s) * Γ s * sin (π * (1 - s) / 2) * ζ s`. -/
theorem riemannZeta_one_sub {s : ℂ} (hs : ∀ n : ℕ, s ≠ -n) (hs' : s ≠ 1) :
    riemannZeta (1 - s) =
      (2 : ℂ) ^ (1 - s) * (π : ℂ) ^ (-s) * Gamma s * sin (π * (1 - s) / 2) * riemannZeta s := by
  -- Deducing this from the previous formulations is quite involved. The proof uses two
  -- nontrivial facts (the doubling formula and reflection formula for Gamma) and a lot of careful
  -- rearrangement, requiring several non-vanishing statements as input to `field_simp`.
  have hs_ne : s ≠ 0 := by contrapose! hs; rw [hs]; 

Proof state:
s : ℂ
hs' : s ≠ 1
hs : s = 0
⊢ ∃ n, 0 = -↑n

Next tactic:
exact ⟨0, by rw [Nat.cast_zero, neg_zero]⟩
/-- Riemann zeta functional equation, formulated for `ζ`: if `1 - s ∉ ℕ`, then we have
`ζ (1 - s) = 2 ^ (1 - s) * π ^ (-s) * Γ s * sin (π * (1 - s) / 2) * ζ s`. -/
theorem riemannZeta_one_sub {s : ℂ} (hs : ∀ n : ℕ, s ≠ -n) (hs' : s ≠ 1) :
    riemannZeta (1 - s) =
      (2 : ℂ) ^ (1 - s) * (π : ℂ) ^ (-s) * Gamma s * sin (π * (1 - s) / 2) * riemannZeta s := by
  -- Deducing this from the previous formulations is quite involved. The proof uses two
  -- nontrivial facts (the doubling formula and reflection formula for Gamma) and a lot of careful
  -- rearrangement, requiring several non-vanishing statements as input to `field_simp`.
  have hs_ne : s ≠ 0 := by contrapose! hs; rw [hs]; exact ⟨0, by 

Proof state:
s : ℂ
hs' : s ≠ 1
hs : s = 0
⊢ 0 = -↑0

Next tactic:
rw [Nat.cast_zero, neg_zero]
/-- Riemann zeta functional equation, formulated for `ζ`: if `1 - s ∉ ℕ`, then we have
`ζ (1 - s) = 2 ^ (1 - s) * π ^ (-s) * Γ s * sin (π * (1 - s) / 2) * ζ s`. -/
theorem riemannZeta_one_sub {s : ℂ} (hs : ∀ n : ℕ, s ≠ -n) (hs' : s ≠ 1) :
    riemannZeta (1 - s) =
      (2 : ℂ) ^ (1 - s) * (π : ℂ) ^ (-s) * Gamma s * sin (π * (1 - s) / 2) * riemannZeta s := by
  -- Deducing this from the previous formulations is quite involved. The proof uses two
  -- nontrivial facts (the doubling formula and reflection formula for Gamma) and a lot of careful
  -- rearrangement, requiring several non-vanishing statements as input to `field_simp`.
  have hs_ne : s ≠ 0 := by contrapose! hs; rw [hs]; exact ⟨0, by rw [Nat.cast_zero, neg_zero]⟩
  

Proof state:
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

Next tactic:
have h_sqrt : (sqrt π : ℂ) ≠ 0 := ofReal_ne_zero.mpr (sqrt_ne_zero'.mpr pi_pos)
/-- Riemann zeta functional equation, formulated for `ζ`: if `1 - s ∉ ℕ`, then we have
`ζ (1 - s) = 2 ^ (1 - s) * π ^ (-s) * Γ s * sin (π * (1 - s) / 2) * ζ s`. -/
theorem riemannZeta_one_sub {s : ℂ} (hs : ∀ n : ℕ, s ≠ -n) (hs' : s ≠ 1) :
    riemannZeta (1 - s) =
      (2 : ℂ) ^ (1 - s) * (π : ℂ) ^ (-s) * Gamma s * sin (π * (1 - s) / 2) * riemannZeta s := by
  -- Deducing this from the previous formulations is quite involved. The proof uses two
  -- nontrivial facts (the doubling formula and reflection formula for Gamma) and a lot of careful
  -- rearrangement, requiring several non-vanishing statements as input to `field_simp`.
  have hs_ne : s ≠ 0 := by contrapose! hs; rw [hs]; exact ⟨0, by rw [Nat.cast_zero, neg_zero]⟩
  have h_sqrt : (sqrt π : ℂ) ≠ 0 := ofReal_ne_zero.mpr (sqrt_ne_zero'.mpr pi_pos)
  

Proof state:
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

Next tactic:
have h_pow : (2 : ℂ) ^ (s - 1) ≠ 0 := by
    rw [Ne.def, cpow_eq_zero_iff, not_and_or]
    exact Or.inl two_ne_zero
/-- Riemann zeta functional equation, formulated for `ζ`: if `1 - s ∉ ℕ`, then we have
`ζ (1 - s) = 2 ^ (1 - s) * π ^ (-s) * Γ s * sin (π * (1 - s) / 2) * ζ s`. -/
theorem riemannZeta_one_sub {s : ℂ} (hs : ∀ n : ℕ, s ≠ -n) (hs' : s ≠ 1) :
    riemannZeta (1 - s) =
      (2 : ℂ) ^ (1 - s) * (π : ℂ) ^ (-s) * Gamma s * sin (π * (1 - s) / 2) * riemannZeta s := by
  -- Deducing this from the previous formulations is quite involved. The proof uses two
  -- nontrivial facts (the doubling formula and reflection formula for Gamma) and a lot of careful
  -- rearrangement, requiring several non-vanishing statements as input to `field_simp`.
  have hs_ne : s ≠ 0 := by contrapose! hs; rw [hs]; exact ⟨0, by rw [Nat.cast_zero, neg_zero]⟩
  have h_sqrt : (sqrt π : ℂ) ≠ 0 := ofReal_ne_zero.mpr (sqrt_ne_zero'.mpr pi_pos)
  have h_pow : (2 : ℂ) ^ (s - 1) ≠ 0 := by
    

Proof state:
s : ℂ
hs : ∀ (n : ℕ), s ≠ -↑n
hs' : s ≠ 1
hs_ne : s ≠ 0
h_sqrt : ↑(sqrt π) ≠ 0
⊢ 2 ^ (s - 1) ≠ 0

Next tactic:
rw [Ne.def, cpow_eq_zero_iff, not_and_or]