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

Erdos392.prod_one_sub_one_div_prime_tendsto_zero

PrimeNumberTheoremAnd.IEANTN.Erdos392 · PrimeNumberTheoremAnd/IEANTN/Erdos392.lean:2581 to 2607

Source documentation

The product ∏ p ≤ n, (1 - 1/p) over primes tends to zero as n → ∞.

Exact Lean statement

lemma prod_one_sub_one_div_prime_tendsto_zero :
    Filter.Tendsto
      (fun n ↦ ∏ p ∈ filter Prime (range n), (1 - 1 / (p : ℝ)))
      .atTop (nhds 0)

Complete declaration

Lean source

Canonical source
Full Lean sourceLean 4
lemma prod_one_sub_one_div_prime_tendsto_zero :    Filter.Tendsto      (fun n  ∏ p  filter Prime (range n), (1 - 1 / (p : )))      .atTop (nhds 0) := by  have h_exp_neg_sum : Filter.Tendsto      (fun n :   Real.exp        (-∑ p  filter Prime (range n), (1 / p : )))      .atTop (nhds 0) := by    have h_not_summable : ¬Summable (fun p :   if p.Prime then (1 / p : ) else 0) := by      have h_primes : ¬Summable (fun p : Nat.Primes  (1 / p : )) := by        convert Primes.not_summable_one_div      contrapose! h_primes      convert! h_primes.comp_injective (fun a b h  Subtype.ext h) using 1      ext p, hp      simp [hp]    have h_diverge : Filter.Tendsto        (fun n :   ∑ p  range n, if p.Prime then (1 / p : ) else 0) .atTop .atTop :=      (not_summable_iff_tendsto_nat_atTop_of_nonneg (fun _  by positivity)).mp h_not_summable    simpa [sum_filter] using h_diverge  refine squeeze_zero (fun n  prod_nonneg fun _ hx     sub_nonneg.mpr <| div_le_self zero_le_one <| mod_cast (mem_filter.mp hx).2.pos) ?_ h_exp_neg_sum  intro n  rw [exp_neg, exp_sum,  prod_inv_distrib]  refine prod_le_prod (fun _ hx  sub_nonneg.mpr <| div_le_self zero_le_one <|    mod_cast (mem_filter.mp hx).2.pos) fun _ _  ?_  rw [ Real.exp_neg]  exact (Real.add_one_le_exp _).trans' (by norm_num)