Skip to main content
AlexKontorovich/PrimeNumberTheoremAnd
Source indexedlemma · leanprover/lean4:v4.32.0

LogDerivZetaBdd_of_Re_ge_three_halves

PrimeNumberTheoremAnd.StrongPNT · PrimeNumberTheoremAnd/StrongPNT.lean:1747 to 1805

Source documentation

The logarithmic derivative of the Riemann zeta function is bounded in the half-plane Re(s) >= 3/2.

Exact Lean statement

lemma LogDerivZetaBdd_of_Re_ge_three_halves :
    ∃ C, ∀ (s : ℂ), 3/2 ≤ s.re → ‖deriv riemannZeta s / riemannZeta s‖ ≤ C

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
lemma LogDerivZetaBdd_of_Re_ge_three_halves :     C,  (s : ℂ), 3/2  s.re  ‖deriv riemannZeta s / riemannZeta s‖  C := by  have h_sum_converges : Summable (fun n :   vonMangoldt n / (n : ) ^ (3 / 2 : )) := by    have h_summable : Summable (fun n :   (Real.log n : ) / (n : ) ^ (3 / 2 : )) := by      obtain C, hC_pos, hC :  C > 0,  n : , n  2  Real.log n  C * (n : ) ^ (1/4 : ) := by        use 4, by grind, fun n hn  by          have := Real.log_le_sub_one_of_pos (by positivity : 0 < (n : ) ^ (1/4 : ))          rw [Real.log_rpow (by positivity)] at this          nlinarith [Real.rpow_pos_of_pos (by positivity : 0 < (n : )) (1/4 : )]      have hBound :  n : , n  2           (Real.log n : ) / (n : ) ^ (3 / 2 : )  C / (n : ) ^ (5 / 4 : ) := fun n hn  by        rw [div_le_div_iff₀ (by positivity) (by positivity)]        convert mul_le_mul_of_nonneg_right (hC n hn)          (by positivity : 0  (n : ) ^ (5 / 4 : )) using 1        rw [mul_assoc,  Real.rpow_add (by positivity)]        grind      rw [ summable_nat_add_iff 2]      exact Summable.of_nonneg_of_le        (fun n  div_nonneg (Real.log_nonneg (by grind))          (Real.rpow_nonneg (Nat.cast_nonneg _) _))        (fun n  hBound _ (by grind))        (Summable.mul_left _ <| by simpa using summable_nat_add_iff 2 |>.2 <|          Real.summable_one_div_nat_rpow.2 <| by grind)    refine .of_nonneg_of_le (fun n  ?_) (fun n  ?_) h_summable    · exact div_nonneg (by exact_mod_cast ArithmeticFunction.vonMangoldt_nonneg)        (by positivity)    · rcases eq_or_ne n 0 with (rfl | hn) <;>        simp_all [ArithmeticFunction.vonMangoldt]      field_simp      split_ifs      · exact Real.log_le_log (Nat.cast_pos.mpr (Nat.minFac_pos _))          (Nat.cast_le.mpr (Nat.minFac_le (Nat.pos_of_ne_zero hn)))      · exact Real.log_nonneg (Nat.one_le_cast.mpr (Nat.pos_of_ne_zero hn))  have h_log_deriv_sum :  s : ℂ, 3 / 2  s.re       deriv riemannZeta s / riemannZeta s = -∑' n : , (vonMangoldt n : ℂ) / (n : ℂ) ^ s := by    intro s hs; have h := LogDerivativeDirichlet s (by grind); linear_combination -h  have h_triangle :  s : ℂ,      ‖∑' n : , (vonMangoldt n : ℂ) / (n : ℂ) ^ s‖         ∑' n : , ‖(vonMangoldt n : ℂ) / (n : ℂ) ^ s‖ := fun s  by    by_cases h : Summable fun n  (ArithmeticFunction.vonMangoldt n : ℂ) / (n : ℂ) ^ s    · exact norm_tsum_le_tsum_norm h.norm    · simp only [tsum_eq_zero_of_not_summable h, norm_zero]      exact tsum_nonneg fun _  by positivity  have h_norm_summand :  s : ℂ, 3 / 2  s.re   n : ,      ‖(vonMangoldt n : ℂ) / (n : ℂ) ^ s‖  (vonMangoldt n : ) / (n : ) ^ (3 / 2 : ) := by    intro s hs n    by_cases hn : n = 0 <;> simp_all [Complex.norm_cpow_of_ne_zero]    ring_nf; norm_num    rw [abs_of_nonneg ArithmeticFunction.vonMangoldt_nonneg]    exact mul_le_mul_of_nonneg_left (inv_anti₀ (by positivity)      (Real.rpow_le_rpow_of_exponent_le (mod_cast Nat.one_le_iff_ne_zero.mpr hn) hs))      ArithmeticFunction.vonMangoldt_nonneg  refine ∑' n : , (ArithmeticFunction.vonMangoldt n : ) / (n : ) ^ (3 / 2 : ),    fun s hs  ?_  have hSum : Summable fun n  ‖(vonMangoldt n : ℂ) / (n : ℂ) ^ s‖ :=    Summable.of_nonneg_of_le (fun n  by positivity)      (fun n  h_norm_summand s hs n) h_sum_converges  simpa [neg_div, h_log_deriv_sum s hs] using (h_triangle s).trans    (hSum.tsum_le_tsum (fun n  h_norm_summand s hs n) h_sum_converges)