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

sum_log_div_isBigO

PrimeNumberTheoremAnd.Consequences · PrimeNumberTheoremAnd/Consequences.lean:1741 to 1761

Mathematical statement

Exact Lean statement

lemma sum_log_div_isBigO : (fun x : ℝ => ∑ k ∈ Iic ⌊x⌋₊, log (x / k)) =O[atTop] id

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
lemma sum_log_div_isBigO : (fun x :  => ∑ k  Iic ⌊x⌋₊, log (x / k)) =O[atTop] id := by  have h_sum_log :  x : , 1  x  |∑ k  Finset.Iic ⌊x⌋₊, Real.log (x / k)|  2 * x := by    have h_sum_log_le_x :  x : , 1  x  ∑ k  Finset.Icc 1 ⌊x⌋₊, Real.log (x / k)  x := by      intro x hx      have h_sum_log : ∑ k  Finset.Icc 1 ⌊x⌋₊, Real.log (x / (k : ))  Real.log (x ^ ⌊x⌋₊ / Nat.factorial ⌊x⌋₊) := by        rw [ Real.log_prod]        · norm_num [Finset.prod_div_distrib]          erw [ Nat.cast_prod, Finset.prod_Ico_id_eq_factorial]        · exact fun n hn => div_ne_zero (by positivity) (Nat.cast_ne_zero.mpr <| by linarith [Finset.mem_Icc.mp hn])      have h_exp_bound : x ^ ⌊x⌋₊ / Nat.factorial ⌊x⌋₊  Real.exp x := by        have h_term : x ^ ⌊x⌋₊ / (⌊x⌋₊! : )  ∑' k : , x ^ k / (k ! : ) := by          exact Summable.le_tsum (show Summable _ from Real.summable_pow_div_factorial x) ⌊x⌋₊ (fun _ _ => by positivity)        simpa [Real.exp_eq_exp_, NormedSpace.exp_eq_tsum_div] using h_term      exact h_sum_log.trans (Real.log_le_iff_le_exp (by positivity) |>.2 h_exp_bound)    intros x hx    have h_sum_eq : ∑ k  Finset.Iic ⌊x⌋₊, Real.log (x / k) = ∑ k  Finset.Icc 1 ⌊x⌋₊, Real.log (x / k) := by      erw [Finset.sum_Ico_eq_sub _ _] <;> norm_num      erw [Finset.sum_Ico_eq_sub _ _] <;> norm_num    rw [abs_of_nonneg] <;> linarith [h_sum_log_le_x x hx, show 0  ∑ k  Finset.Icc 1 ⌊x⌋₊, Real.log (x / k) from Finset.sum_nonneg fun _ _ => Real.log_nonneg <| by rw [le_div_iff₀ <| Nat.cast_pos.mpr <| by linarith [Finset.mem_Icc.mp ‹_›]] ; linarith [Nat.floor_le <| show 0  x by linarith, show (↑‹› : )  ⌊x⌋₊ by exact_mod_cast Finset.mem_Icc.mp ‹_› |>.2]]  rw [Asymptotics.isBigO_iff]  exact 2, Filter.eventually_atTop.mpr 1, fun x hx => le_trans (h_sum_log x hx) (by norm_num [abs_of_nonneg (by linarith : 0  x)])⟩⟩