All proofs
Project-declaredLean 4.32.0 · mathlib@81a5d257c8e4

Pn pn plus one

pn_pn_plus_one

Plain-language statement

Consecutive prime gaps are small relative to the primes themselves. If pnp_n is the nnth prime, then pn+1pn=o(pn).p_{n+1}-p_n=o(p_n). Formally, there is a sequence cn0c_n\to0 such that pn+1pn=cnpnp_{n+1}-p_n=c_np_n for every nn.

Exact Lean statement

@[blueprint
  (title := "pn-pn-plus-one")
  (statement := /--
  We have $p_{n+1} - p_n = o(p_n)$
    as $n \to \infty$.
  -/)
  (proof := /-- Easy consequence of preceding proposition. -/)
  (latexEnv := "corollary")]
theorem pn_pn_plus_one : ∃ c : ℕ → ℝ, c =o[atTop] (fun _ ↦ (1 : ℝ)) ∧
    ∀ n : ℕ, nth_prime (n + 1) - nth_prime n = (c n) * nth_prime n

Formal artifact

Lean source

Canonical source
Full Lean sourceLean 4
@[blueprint  (title := "pn-pn-plus-one")  (statement := /--  We have $p_{n+1} - p_n = o(p_n)$    as $n \to \infty$.  -/)  (proof := /-- Easy consequence of preceding proposition. -/)  (latexEnv := "corollary")]theorem pn_pn_plus_one :  c :   , c =o[atTop] (fun _  (1 : ))      n : , nth_prime (n + 1) - nth_prime n = (c n) * nth_prime n := by  use (fun n => (nth_prime (n+1) - nth_prime n) / nth_prime n)  refine ?_, ?_  · obtain k, k_o1, p_n_eq := pn_asymptotic    simp only [isLittleO_one_iff]    rw [Filter.tendsto_congr' (f₂ := fun n         ((1 + k (n+1))*(n+1)*log (n+1) - (1 + k n)*n*log n) / ((1 + k n)*n*log n))]    swap    · simp only [EventuallyEq, eventually_atTop]      use 2; intro n hn      rw [p_n_eq n (by linarith), p_n_eq (n+1) (by linarith)]      grind    simp_rw [sub_div]    have zero_eq_minus: (0 : ) = 1 - 1 := by      simp    rw [zero_eq_minus]    apply Filter.Tendsto.sub    · conv =>        arg 1        intro n        equals ((1 + k (n + 1)) / (1 + k n) ) * ((↑n + 1) * log (↑n + 1) / (↑n * log ↑n)) =>          field_simp      nth_rw 6 [ (one_mul 1)]      apply Filter.Tendsto.mul      · have one_div: nhds 1 = nhds ((1: ) / 1) := by simp        rw [one_div]        apply Filter.Tendsto.div        · nth_rw 3 [ (AddMonoid.add_zero 1)]          apply Filter.Tendsto.add          · simp          · rw [Filter.tendsto_add_atTop_iff_nat]            rw [Asymptotics.isLittleO_iff_tendsto] at k_o1            · simp only [div_one] at k_o1              exact k_o1            · simp        · nth_rw 2 [ (AddMonoid.add_zero 1)]          apply Filter.Tendsto.add          · simp          · rw [Asymptotics.isLittleO_iff_tendsto] at k_o1            · simp only [div_one] at k_o1              exact k_o1            · simp         simp      · conv =>          arg 1          intro x          equals ((↑x + 1) / x) * (log (↑x + 1) / (log ↑x)) =>            field_simp        nth_rw 3 [ (one_mul 1)]        apply Filter.Tendsto.mul        · simp_rw [add_div]          nth_rw 2 [ (AddMonoid.add_zero 1)]          apply Filter.Tendsto.add          · rw [ Filter.tendsto_add_atTop_iff_nat 1]            field_simp            simp          · simp only [one_div]            exact tendsto_inv_atTop_nhds_zero_nat        · have log_eq:  (n: ), log (↑n + 1) = log ↑n + log (1 + 1/n) := by            intro n            by_cases n_eq_zero: n = 0            · simp [n_eq_zero]            · calc                _ = log (n * (1 + 1 / n)) := by field_simp                _ = log n + log (1 + 1/n) := by                  rw [Real.log_mul]                  · simpa                  · simp only [one_div, ne_eq]                    positivity           simp_rw [log_eq]          simp_rw [add_div]          nth_rw 3 [ (AddMonoid.add_zero 1)]          apply Filter.Tendsto.add          · rw [ Filter.tendsto_add_atTop_iff_nat 2]            have log_not_zero:  n: , log (n + 2)  0 := by              intro n              simp only [ne_eq, log_eq_zero, not_or]              refine ?_, ?_, ?_              · norm_cast              · norm_cast                simp              · norm_cast            simp [log_not_zero]          · rw [ Filter.tendsto_add_atTop_iff_nat 2]            apply squeeze_zero (g := fun (n: ) => (log 2 / log (n + 2)))            · intro n              have log_plus_nonzero: 0  log (1 + 1 / ↑(n + 2)) := by                apply log_nonneg                simp only [cast_add, cast_ofNat, one_div, le_add_iff_nonneg_right, inv_nonneg]                norm_cast                simp only [le_add_iff_nonneg_left, _root_.zero_le]              exact div_nonneg log_plus_nonzero (log_natCast_nonneg (n + 2))            · intro n              norm_cast              have log_le_2: log (1 + 1 / ↑(n + 2))  log 2 := by                apply Real.log_le_log                · positivity                · have two_eq_one_plus_one: (2 : ) = 1 + 1 := by                    norm_num                  rw [two_eq_one_plus_one]                  simp only [cast_add, cast_ofNat, one_div, add_le_add_iff_left, ge_iff_le]                  apply inv_le_one_of_one_le₀                  linarith               rw [div_le_div_iff_of_pos_right]              · exact log_le_2              · apply Real.log_pos                norm_cast                simp            · apply Filter.Tendsto.div_atTop (l := atTop) (a := log 2)              · simp              · norm_cast                have shift_fn :=                  Filter.tendsto_add_atTop_iff_nat (f := fun n => log (n)) (l := atTop) 2                rw [shift_fn]                apply Filter.Tendsto.comp Real.tendsto_log_atTop                exact tendsto_natCast_atTop_atTop     · have eventually_nonzero:  t, t > 2   n, 1 + k (n + t)  0 := by        rw [Asymptotics.isLittleO_iff_tendsto] at k_o1        · rw [NormedAddGroup.tendsto_nhds_zero] at k_o1          specialize k_o1 ((1 : ) / 2)          simp only [one_div, gt_iff_lt, inv_pos, ofNat_pos, div_one, norm_eq_abs, eventually_atTop, forall_const] at k_o1          obtain a, ha := k_o1          use (a + 3)          refine by simp, ?_          intro n          specialize ha (n + (a + 3))          have a_le_plus: a  n + (a + 3) := by omega          simp only [a_le_plus, forall_const] at ha           by_contra!          rw [add_eq_zero_iff_eq_neg] at this          rw [ abs_neg] at ha          rw [ this] at ha          simp only [abs_one] at ha          have two_inv_lt := inv_lt_one_of_one_lt₀ (a := (2 : )) (by simp)          linarith        · simp       obtain t, t_gt_2, ht := eventually_nonzero      rw [ Filter.tendsto_add_atTop_iff_nat t]      have denom_nonzero:  n, ((1 + k (n + t)) * ↑(n + t) * log ↑(n + t))  0 := by        intro n        simp only [cast_add, ne_eq, _root_.mul_eq_zero, log_eq_zero, not_or]        refine ⟨⟨?_, ?_, ?_, ?_        · exact ht n        · norm_cast          omega        · norm_cast          omega        · refine ?_, by norm_cast          norm_cast          omega      conv =>        arg 1        intro n        rw [div_self (denom_nonzero n)]      simp  · intro n    have nth_nonzero: nth_prime n  0 := by      exact Nat.Prime.ne_zero (prime_nth_prime n)    simp [nth_nonzero]
Project
Prime Number Theorem and More
License
Apache-2.0
Commit
a93551347dce
Source
PrimeNumberTheoremAnd/Consequences.lean:997-1170

Reuse this declaration

Bring the exact result into your workflow

The import identifies the source module. Your project still needs the pinned package dependency shown on this page.

What this badge means

This completion status comes from the project or community source. It has not yet been represented here as an independent rebuild and axiom audit.

Continue in this project

Related declarations

Project-declaredLean 4.32.0

Admissible bound mono

admissible_bound.mono

Plain-language statement

For positive parameters A,B,C,RA,B,C,R, the classical error-bound function A(logxR)Bexp ⁣(ClogxR)A\left(\frac{\log x}{R}\right)^B\exp\!\left(-C\sqrt{\frac{\log x}{R}}\right) is nonincreasing once xexp ⁣(R(2B/C)2)x\ge \exp\!\left(R(2B/C)^2\right).

analytic number theoryprime numbersasymptotics

Source project: Prime Number Theorem and More

Person-level attribution pending.

View proof record
Project-declaredLean 4.32.0

Analytic On div Removable zero

AnalyticOn_divRemovable_zero

Plain-language statement

Let ff be analytic on an open set ss containing 00, and suppose f(0)=0f(0)=0. Define g(z)=f(z)/zg(z)=f(z)/z for z0z\ne0 and g(0)=f(0)g(0)=f'(0). Then the apparent singularity at 00 is removable and gg is analytic throughout ss.

analytic number theoryprime numbersasymptotics

Source project: Prime Number Theorem and More

Person-level attribution pending.

View proof record
Project-declaredLean 4.32.0

Analytic On div Removable zero closed Ball

AnalyticOn_divRemovable_zero_closedBall

Plain-language statement

Suppose R>0R>0 and ff is analytic on the closed disc zR|z|\le R with f(0)=0f(0)=0. Define g(z)=f(z)/zg(z)=f(z)/z for z0z\ne0 and g(0)=f(0)g(0)=f'(0). Then gg is analytic on the entire closed disc, including at the removed singularity.

analytic number theoryprime numbersasymptotics

Source project: Prime Number Theorem and More

Person-level attribution pending.

View proof record