Problems / erdos-1094 / erdos-1094--h3--h3--h1--h1--h1
Prime number theorem for psi
erdos-1094--h3--h3--h1--h1--h1
open
Hole h_psi of erdos-1094--h3--h3--h1--h1 (split by 20261018T192634Z-t1018-e-partial.lean).
$$\psi(x) = x + o(x)$, i.e. $\forall \varepsilon>0\ \exists X\ \forall x\ge X,\ |\psi(x)-x|\le\varepsilon x$$
The prime number theorem in Chebyshev's ψ form: Hadamard (1896), de la Vallée Poussin (1896); e.g. Ingham, The Distribution of Prime Numbers (1932), Thm 3 / Apostol, Intro. to Analytic NT, Thm 4.4 + §13.
Lean
theorem erdos_1094__h3__h3__h1__h1__h1 : ∀ (ε : ℝ), (0 : ℝ) < ε → ∃ (X : ℝ), ∀ (x : ℝ), X ≤ x → |Chebyshev.psi x - x| ≤ ε * x := by sorry
Why does it end in sorry?
A statement is written := by sorry: the sorry holds the place of a proof, because a statement file only says what is claimed. A proof the gate checked is its own file, Proof.lean. How to read a proof page →
How it is being proved
Open. A direct proof, or proofs of its holes, close it.
Proved from these holes by 20261018T200210Z-t1018-e-partial.lean (merged in 354268ac2650, attestation 000770).
h_wi→ erdos-1094--h3--h3--h1--h1--h1--h1 (open)$$f\ge0$, $\sum f(n)n^{-s}$ converges for $\Re s>1$ and $F(s)-A/(s-1)$ extends continuously to $\Re s\ge1$ $\Rightarrow$ $\frac1N\sum_{n<N}f(n)\to A$$
h_ext→ erdos-1094--h3--h3--h1--h1--h1--h2 (open)$$\sum_n \Lambda(n) n^{-s} - \frac{1}{s-1}$ extends continuously to $\Re s\ge 1$$
Read the partial proof (Lean)
theorem erdos_1094__h3__h3__h1__h1__h1 : ∀ (ε : ℝ), (0 : ℝ) < ε → ∃ (X : ℝ), ∀ (x : ℝ), X ≤ x → |Chebyshev.psi x - x| ≤ ε * x := by
-- approach: Wiener–Ikehara Tauberian theorem applied to the von Mangoldt L-series -ζ'/ζ (Ingham 1932; Korevaar 2004, Newman 1980)
-- licence: CC-BY-4.0
have hall : (∀ (f : ℕ → ℝ) (A : ℝ), (∀ n, 0 ≤ f n) →
(∀ s : ℂ, 1 < s.re → LSeriesSummable (fun n => (f n : ℂ)) s) →
(∃ G : ℂ → ℂ, ContinuousOn G {s | 1 ≤ s.re} ∧
∀ s : ℂ, 1 < s.re → G s = LSeries (fun n => (f n : ℂ)) s - A / (s - 1)) →
Filter.Tendsto (fun N : ℕ => (∑ n ∈ Finset.range N, f n) / (N : ℝ)) Filter.atTop (nhds A)) ∧ (∃ G : ℂ → ℂ, ContinuousOn G {s | 1 ≤ s.re} ∧
∀ s : ℂ, 1 < s.re → G s =
LSeries (fun n => ((ArithmeticFunction.vonMangoldt n : ℝ) : ℂ)) s - 1 / (s - 1)) := by
refine ⟨?_, ?_⟩
· -- First lemma.
-- label: Wiener–Ikehara Tauberian theorem
-- claim: $f\ge0$, $\sum f(n)n^{-s}$ converges for $\Re s>1$ and $F(s)-A/(s-1)$ extends continuously to $\Re s\ge1$ $\Rightarrow$ $\frac1N\sum_{n<N}f(n)\to A$
-- Wiener (1932), Ikehara (1931); continuous-boundary form: Korevaar, Bull. AMS 39 (2002), Thm 4.2 / Tauberian Theory (2004) III.4.
have h_wi : ∀ (f : ℕ → ℝ) (A : ℝ), (∀ n, 0 ≤ f n) →
(∀ s : ℂ, 1 < s.re → LSeriesSummable (fun n => (f n : ℂ)) s) →
(∃ G : ℂ → ℂ, ContinuousOn G {s | 1 ≤ s.re} ∧
∀ s : ℂ, 1 < s.re → G s = LSeries (fun n => (f n : ℂ)) s - A / (s - 1)) →
Filter.Tendsto (fun N : ℕ => (∑ n ∈ Finset.range N, f n) / (N : ℝ)) Filter.atTop (nhds A) := sorry
exact h_wi
· -- Second lemma.
-- label: -ζ'/ζ minus the pole extends to Re s ≥ 1
-- claim: $\sum_n \Lambda(n) n^{-s} - \frac{1}{s-1}$ extends continuously to $\Re s\ge 1$
-- From ζ's simple pole of residue 1 at s = 1 and ζ(s) ≠ 0 on Re s ≥ 1 (Mathlib: riemannZeta_residue_one,
-- riemannZeta_ne_zero_of_one_le_re, ArithmeticFunction.LSeries_vonMangoldt_eq_deriv_riemannZeta_div).
have h_ext : ∃ G : ℂ → ℂ, ContinuousOn G {s | 1 ≤ s.re} ∧
∀ s : ℂ, 1 < s.re → G s =
LSeries (fun n => ((ArithmeticFunction.vonMangoldt n : ℝ) : ℂ)) s - 1 / (s - 1) := sorry
exact h_ext
obtain ⟨h_wi, h_ext⟩ := hall
intro ε hε
have hlim := h_wi (fun n => ArithmeticFunction.vonMangoldt n) 1
(fun n => ArithmeticFunction.vonMangoldt_nonneg)
(fun s hs => ArithmeticFunction.LSeriesSummable_vonMangoldt hs) h_ext
have hev := (Metric.tendsto_atTop.mp hlim) (ε / 2) (by positivity)
obtain ⟨N₀, hN₀⟩ := hev
refine ⟨(N₀ : ℝ) + 4 / ε + 1, fun x hx => ?_⟩
have hx0 : 0 ≤ x := by have : (0:ℝ) ≤ N₀ := Nat.cast_nonneg _; have : 0 < 4 / ε := by positivity
linarith
set m := ⌊x⌋₊ with hm
have hmx : (m : ℝ) ≤ x := Nat.floor_le hx0
have hxm : x < (m : ℝ) + 1 := Nat.lt_floor_add_one x
have hpsi : Chebyshev.psi x = ∑ n ∈ Finset.range (m + 1), ArithmeticFunction.vonMangoldt n := by
show ∑ n ∈ Finset.Ioc 0 m, ArithmeticFunction.vonMangoldt n = _
rw [Finset.range_eq_Ico, Finset.sum_eq_sum_Ico_succ_bot (by omega)]
have hI : Finset.Ico (0 + 1) (m + 1) = Finset.Ioc 0 m := by
ext n; simp only [Finset.mem_Ico, Finset.mem_Ioc]; omega
rw [hI]; simp
have hM := hN₀ (m + 1) (by
have : (N₀ : ℝ) < (m : ℝ) + 1 := by have : 0 < 4 / ε := by positivity
linarith
exact_mod_cast this.le)
rw [Real.dist_eq] at hM
have hMpos : (0 : ℝ) < ((m + 1 : ℕ) : ℝ) := by positivity
rw [← hpsi] at hM
have hM' : |Chebyshev.psi x - ((m + 1 : ℕ) : ℝ)| < ε / 2 * ((m + 1 : ℕ) : ℝ) := by
have h1 : Chebyshev.psi x / ((m + 1 : ℕ) : ℝ) - 1 = (Chebyshev.psi x - ((m + 1 : ℕ) : ℝ)) / ((m + 1 : ℕ) : ℝ) := by
field_simp
rw [h1, abs_div, abs_of_pos hMpos, div_lt_iff₀ hMpos] at hM
exact hM
push_cast at hM'
have hx4 : 4 / ε + 1 ≤ x := by have : (0:ℝ) ≤ N₀ := Nat.cast_nonneg _
linarith
have hεx : ε + 4 ≤ ε * x := by
have h4 : ε * (4 / ε) = 4 := by field_simp
nlinarith
rw [abs_lt] at hM'
rw [abs_le]
constructor <;> nlinarith [hM'.1, hM'.2]The gate replayed this file at its merge, each hole a sorry (D-12 #5); the whole file: targets/erdos-1094/nodes/erdos-1094--h3--h3--h1--h1--h1/attempts/20261018T200210Z-t1018-e-partial.lean
Closing it through its holes
Closable through its holes: once they are proved, a proof of this statement may name their theorems, which its Context already carries. A direct proof is accepted at any time.
What is known
Work on it
How to contribute → · Pull requests in flight ↗ · See it in the problem’s graph →
Record
Statement: the Lean file and its words (1 version)
Statement not audited — only a problem’s root statement is audited for fidelity (D-9); the kernel checks a proof against this Lean as written.
import Mathlib import Nodes.«erdos-1094--h3--h3--h1--h1--h1».Context open scoped Nat /-! Hole `h_psi` of a merged partial proof, as a node (D-12 #5, D-29). Statement generated by the gate from the assembly; immutable (D-3). -/ theorem erdos_1094__h3__h3__h1__h1__h1 : ∀ (ε : ℝ), (0 : ℝ) < ε → ∃ (X : ℝ), ∀ (x : ℝ), X ≤ x → |Chebyshev.psi x - x| ≤ ε * x := by sorry
A statement is written := by sorry: the sorry holds the place of a proof, because a statement file only says what is claimed. A proof the gate checked is its own file, Proof.lean. How to read a proof page →
In words, unverified — what this statement says; written by t1018-e, drafted with claude-opus-5-5, 2026-10-18; no one has read it against the Lean and signed it.
Draft · drafted, by the model named above
$$\psi(x) = x + o(x)$, i.e. $\forall \varepsilon>0\ \exists X\ \forall x\ge X,\ |\psi(x)-x|\le\varepsilon x$$
The prime number theorem in Chebyshev's ψ form: Hadamard (1896), de la Vallée Poussin (1896); e.g. Ingham, The Distribution of Prime Numbers (1932), Thm 3 / Apostol, Intro. to Analytic NT, Thm 4.4 + §13.
Rendered from gloss/4cc4201bc032….md · Improve these words →
Rendered from targets/erdos-1094/nodes/erdos-1094--h3--h3--h1--h1--h1/Statement.lean. Origin: compiler-derived.
Depends on (2), each in words
Depends on, each in words where someone has written them:
- erdos-1094--h3--h3--h1--h1--h1--h1: $f\ge0$, $\sum f(n)n^{-s}$ converges for $\Re s>1$ and $F(s)-A/(s-1)$ extends continuously to $\Re s\ge1$ $\Rightarrow$ $\frac1N\sum_{n<N}f(n)\to A$
- erdos-1094--h3--h3--h1--h1--h1--h2: $\sum_n \Lambda(n) n^{-s} - \frac{1}{s-1}$ extends continuously to $\Re s\ge 1$
Attestation: none of a proof
No proof of this statement has been merged. A partial assembly merged under attestations/000770.json: it records an attempt, not a proof (see Attempts below).
Witness
Not checked — no run on this page records step 7 passing for it.
a5713c2dfba6.import Mathlib open scoped Nat theorem witness : ∃ (ε : ℝ), (0 : ℝ) < ε := ⟨1, one_pos⟩
No gloss yet: no one has written in words what this witness says (D-3 v3.30); the Lean above is the witness. How to write one →
Attempts (2)
2 recorded. Routes refuted: none. Failure classes: missing-library 1.
Untrusted contributor text — a partial assembly: it records an attempt, not a proof; its attestation names the file, and no hash in the record binds these bytes.
Untrusted: partial assembly (D-12 #5), by t1018-e; merged in 354268ac2650 under attestations/000770.json, whose step 2 took this file as a partial. A partial records an attempt, not a proof: the gate replayed it with its holes left as sorry. Rendered from targets/erdos-1094/nodes/erdos-1094--h3--h3--h1--h1--h1/attempts/20261018T200210Z-t1018-e-partial.lean.
Untrusted contributor text — an outline the gate extracted from this partial assembly; its holes are sorry steps, and it records an attempt, not a proof.
Outline of 20261018T200210Z-t1018-e-partial.lean, extracted by the gate at 32961c7678e9 from the proof’s elaboration: each step is a claim the proof establishes and the goal it leaves. Open a step for what it uses and its Lean lines.
hallhave(∀ (f : ℕ → ℝ) (A : ℝ), (∀ (n : ℕ), (0 : ℝ) ≤ f n) → (∀ (s : ℂ), (1 : ℝ) < s.re → LSeriesSummable (fun (n : ℕ) => (↑(f n) : ℂ)) s) → (∃ (G : ℂ → ℂ), ContinuousOn G {s : ℂ | (1 : ℝ) ≤ s.re} ∧ ∀ (s : ℂ), (1 : ℝ) < s.re → G s = LSeries (fun (n : ℕ) => (↑(f n) : ℂ)) s - (↑A : ℂ) / (s - (1 : ℂ))) → Filter.Tendsto (fun (N : ℕ) => (∑ n ∈ Finset.range N, f n) / (↑N : ℝ)) Filter.atTop (nhds A)) ∧ ∃ (G : ℂ → ℂ), ContinuousOn G {s : ℂ | (1 : ℝ) ≤ s.re} ∧ ∀ (s : ℂ), (1 : ℝ) < s.re → G s = LSeries (fun (n : ℕ) => (↑((ArithmeticFunction.vonMangoldt : ℕ → ℝ) n) : ℂ)) s - (1 : ℂ) / (s - (1 : ℂ))Leaves
∀ (ε : ℝ), (0 : ℝ) < ε → ∃ (X : ℝ), ∀ (x : ℝ), X ≤ x → |Chebyshev.psi x - x| ≤ ε * x, withhall : (∀ (f : ℕ → ℝ) (A : ℝ), (∀ (n : ℕ), (0 : ℝ) ≤ f n) → (∀ (s : ℂ), (1 : ℝ) < s.re → LSeriesSummable (fun (n : ℕ) => (↑(f n) : ℂ)) s) → (∃ (G : ℂ → ℂ), ContinuousOn G {s : ℂ | (1 : ℝ) ≤ s.re} ∧ ∀ (s : ℂ), (1 : ℝ) < s.re → G s = LSeries (fun (n : ℕ) => (↑(f n) : ℂ)) s - (↑A : ℂ) / (s - (1 : ℂ))) → Filter.Tendsto (fun (N : ℕ) => (∑ n ∈ Finset.range N, f n) / (↑N : ℝ)) Filter.atTop (nhds A)) ∧ ∃ (G : ℂ → ℂ), ContinuousOn G {s : ℂ | (1 : ℝ) ≤ s.re} ∧ ∀ (s : ℂ), (1 : ℝ) < s.re → G s = LSeries (fun (n : ℕ) => (↑((ArithmeticFunction.vonMangoldt : ℕ → ℝ) n) : ℂ)) s - (1 : ℂ) / (s - (1 : ℂ)).Uses library
LSeriesSummableLSeriesSummable f sindicates that the L-series offconverges absolutely ats. ,ContinuousOnA function between topological spaces is continuous on a subsetswhen it's continuous at every point ofswithins. ,LSeriesThe value of the L-series of the sequencefat the pointsif it converges absolutely there, and0otherwise. ,Filter.TendstoFilter.Tendstois the generic "limit of a function" predicate. ,Finset.rangerange nis the set of natural numbers less thann. ,Filter.atTopatTopis the filter representing the limit→ ∞on an ordered set. ,nhdsA set is called a neighborhood ofxif it contains an open set aroundx. ,ArithmeticFunction.vonMangoldtThevonMangoldtfunction is the function on natural numbers that returnslog pif the input can be expressed asp^kfor a primep. ,And.introAnd.intro : a → b → a ∧ bis the constructor for the And operation. .Lean, lines 12–38
have hall : (∀ (f : ℕ → ℝ) (A : ℝ), (∀ n, 0 ≤ f n) → (∀ s : ℂ, 1 < s.re → LSeriesSummable (fun n => (f n : ℂ)) s) → (∃ G : ℂ → ℂ, ContinuousOn G {s | 1 ≤ s.re} ∧ ∀ s : ℂ, 1 < s.re → G s = LSeries (fun n => (f n : ℂ)) s - A / (s - 1)) → Filter.Tendsto (fun N : ℕ => (∑ n ∈ Finset.range N, f n) / (N : ℝ)) Filter.atTop (nhds A)) ∧ (∃ G : ℂ → ℂ, ContinuousOn G {s | 1 ≤ s.re} ∧ ∀ s : ℂ, 1 < s.re → G s = LSeries (fun n => ((ArithmeticFunction.vonMangoldt n : ℝ) : ℂ)) s - 1 / (s - 1)) := by refine ⟨?_, ?_⟩ · -- First lemma. -- label: Wiener–Ikehara Tauberian theorem -- claim: $f\ge0$, $\sum f(n)n^{-s}$ converges for $\Re s>1$ and $F(s)-A/(s-1)$ extends continuously to $\Re s\ge1$ $\Rightarrow$ $\frac1N\sum_{n<N}f(n)\to A$ -- Wiener (1932), Ikehara (1931); continuous-boundary form: Korevaar, Bull. AMS 39 (2002), Thm 4.2 / Tauberian Theory (2004) III.4. have h_wi : ∀ (f : ℕ → ℝ) (A : ℝ), (∀ n, 0 ≤ f n) → (∀ s : ℂ, 1 < s.re → LSeriesSummable (fun n => (f n : ℂ)) s) → (∃ G : ℂ → ℂ, ContinuousOn G {s | 1 ≤ s.re} ∧ ∀ s : ℂ, 1 < s.re → G s = LSeries (fun n => (f n : ℂ)) s - A / (s - 1)) → Filter.Tendsto (fun N : ℕ => (∑ n ∈ Finset.range N, f n) / (N : ℝ)) Filter.atTop (nhds A) := sorry exact h_wi · -- Second lemma. -- label: -ζ'/ζ minus the pole extends to Re s ≥ 1 -- claim: $\sum_n \Lambda(n) n^{-s} - \frac{1}{s-1}$ extends continuously to $\Re s\ge 1$ -- From ζ's simple pole of residue 1 at s = 1 and ζ(s) ≠ 0 on Re s ≥ 1 (Mathlib: riemannZeta_residue_one, -- riemannZeta_ne_zero_of_one_le_re, ArithmeticFunction.LSeries_vonMangoldt_eq_deriv_riemannZeta_div). have h_ext : ∃ G : ℂ → ℂ, ContinuousOn G {s | 1 ≤ s.re} ∧ ∀ s : ℂ, 1 < s.re → G s = LSeries (fun n => ((ArithmeticFunction.vonMangoldt n : ℝ) : ℂ)) s - 1 / (s - 1) := sorry exact h_exthall.s1caseLeaves
∀ (f : ℕ → ℝ) (A : ℝ), (∀ (n : ℕ), (0 : ℝ) ≤ f n) → (∀ (s : ℂ), (1 : ℝ) < s.re → LSeriesSummable (fun (n : ℕ) => (↑(f n) : ℂ)) s) → (∃ (G : ℂ → ℂ), ContinuousOn G {s : ℂ | (1 : ℝ) ≤ s.re} ∧ ∀ (s : ℂ), (1 : ℝ) < s.re → G s = LSeries (fun (n : ℕ) => (↑(f n) : ℂ)) s - (↑A : ℂ) / (s - (1 : ℂ))) → Filter.Tendsto (fun (N : ℕ) => (∑ n ∈ Finset.range N, f n) / (↑N : ℝ)) Filter.atTop (nhds A).Lean, lines 20–29
· -- First lemma. -- label: Wiener–Ikehara Tauberian theorem -- claim: $f\ge0$, $\sum f(n)n^{-s}$ converges for $\Re s>1$ and $F(s)-A/(s-1)$ extends continuously to $\Re s\ge1$ $\Rightarrow$ $\frac1N\sum_{n<N}f(n)\to A$ -- Wiener (1932), Ikehara (1931); continuous-boundary form: Korevaar, Bull. AMS 39 (2002), Thm 4.2 / Tauberian Theory (2004) III.4. have h_wi : ∀ (f : ℕ → ℝ) (A : ℝ), (∀ n, 0 ≤ f n) → (∀ s : ℂ, 1 < s.re → LSeriesSummable (fun n => (f n : ℂ)) s) → (∃ G : ℂ → ℂ, ContinuousOn G {s | 1 ≤ s.re} ∧ ∀ s : ℂ, 1 < s.re → G s = LSeries (fun n => (f n : ℂ)) s - A / (s - 1)) → Filter.Tendsto (fun N : ℕ => (∑ n ∈ Finset.range N, f n) / (N : ℝ)) Filter.atTop (nhds A) := sorry exact h_wihall.s1.h_wihole∀ (f : ℕ → ℝ) (A : ℝ), (∀ (n : ℕ), (0 : ℝ) ≤ f n) → (∀ (s : ℂ), (1 : ℝ) < s.re → LSeriesSummable (fun (n : ℕ) => (↑(f n) : ℂ)) s) → (∃ (G : ℂ → ℂ), ContinuousOn G {s : ℂ | (1 : ℝ) ≤ s.re} ∧ ∀ (s : ℂ), (1 : ℝ) < s.re → G s = LSeries (fun (n : ℕ) => (↑(f n) : ℂ)) s - (↑A : ℂ) / (s - (1 : ℂ))) → Filter.Tendsto (fun (N : ℕ) => (∑ n ∈ Finset.range N, f n) / (↑N : ℝ)) Filter.atTop (nhds A)holeLeaves
∀ (f : ℕ → ℝ) (A : ℝ), (∀ (n : ℕ), (0 : ℝ) ≤ f n) → (∀ (s : ℂ), (1 : ℝ) < s.re → LSeriesSummable (fun (n : ℕ) => (↑(f n) : ℂ)) s) → (∃ (G : ℂ → ℂ), ContinuousOn G {s : ℂ | (1 : ℝ) ≤ s.re} ∧ ∀ (s : ℂ), (1 : ℝ) < s.re → G s = LSeries (fun (n : ℕ) => (↑(f n) : ℂ)) s - (↑A : ℂ) / (s - (1 : ℂ))) → Filter.Tendsto (fun (N : ℕ) => (∑ n ∈ Finset.range N, f n) / (↑N : ℝ)) Filter.atTop (nhds A), withh_wi : ∀ (f : ℕ → ℝ) (A : ℝ), (∀ (n : ℕ), (0 : ℝ) ≤ f n) → (∀ (s : ℂ), (1 : ℝ) < s.re → LSeriesSummable (fun (n : ℕ) => (↑(f n) : ℂ)) s) → (∃ (G : ℂ → ℂ), ContinuousOn G {s : ℂ | (1 : ℝ) ≤ s.re} ∧ ∀ (s : ℂ), (1 : ℝ) < s.re → G s = LSeries (fun (n : ℕ) => (↑(f n) : ℂ)) s - (↑A : ℂ) / (s - (1 : ℂ))) → Filter.Tendsto (fun (N : ℕ) => (∑ n ∈ Finset.range N, f n) / (↑N : ℝ)) Filter.atTop (nhds A).Uses library
LSeriesSummableLSeriesSummable f sindicates that the L-series offconverges absolutely ats. ,ContinuousOnA function between topological spaces is continuous on a subsetswhen it's continuous at every point ofswithins. ,LSeriesThe value of the L-series of the sequencefat the pointsif it converges absolutely there, and0otherwise. ,Filter.TendstoFilter.Tendstois the generic "limit of a function" predicate. ,Finset.rangerange nis the set of natural numbers less thann. ,Filter.atTopatTopis the filter representing the limit→ ∞on an ordered set. ,nhdsA set is called a neighborhood ofxif it contains an open set aroundx. .Left open as a hole; its statement is erdos-1094--h3--h3--h1--h1--h1--h1 (open).
Lean, lines 24–28
have h_wi : ∀ (f : ℕ → ℝ) (A : ℝ), (∀ n, 0 ≤ f n) → (∀ s : ℂ, 1 < s.re → LSeriesSummable (fun n => (f n : ℂ)) s) → (∃ G : ℂ → ℂ, ContinuousOn G {s | 1 ≤ s.re} ∧ ∀ s : ℂ, 1 < s.re → G s = LSeries (fun n => (f n : ℂ)) s - A / (s - 1)) → Filter.Tendsto (fun N : ℕ => (∑ n ∈ Finset.range N, f n) / (N : ℝ)) Filter.atTop (nhds A) := sorry
hall.s2caseLeaves
∃ (G : ℂ → ℂ), ContinuousOn G {s : ℂ | (1 : ℝ) ≤ s.re} ∧ ∀ (s : ℂ), (1 : ℝ) < s.re → G s = LSeries (fun (n : ℕ) => (↑((ArithmeticFunction.vonMangoldt : ℕ → ℝ) n) : ℂ)) s - (1 : ℂ) / (s - (1 : ℂ)).Lean, lines 30–38
· -- Second lemma. -- label: -ζ'/ζ minus the pole extends to Re s ≥ 1 -- claim: $\sum_n \Lambda(n) n^{-s} - \frac{1}{s-1}$ extends continuously to $\Re s\ge 1$ -- From ζ's simple pole of residue 1 at s = 1 and ζ(s) ≠ 0 on Re s ≥ 1 (Mathlib: riemannZeta_residue_one, -- riemannZeta_ne_zero_of_one_le_re, ArithmeticFunction.LSeries_vonMangoldt_eq_deriv_riemannZeta_div). have h_ext : ∃ G : ℂ → ℂ, ContinuousOn G {s | 1 ≤ s.re} ∧ ∀ s : ℂ, 1 < s.re → G s = LSeries (fun n => ((ArithmeticFunction.vonMangoldt n : ℝ) : ℂ)) s - 1 / (s - 1) := sorry exact h_exthall.s2.h_exthole∃ (G : ℂ → ℂ), ContinuousOn G {s : ℂ | (1 : ℝ) ≤ s.re} ∧ ∀ (s : ℂ), (1 : ℝ) < s.re → G s = LSeries (fun (n : ℕ) => (↑((ArithmeticFunction.vonMangoldt : ℕ → ℝ) n) : ℂ)) s - (1 : ℂ) / (s - (1 : ℂ))holeLeaves
∃ (G : ℂ → ℂ), ContinuousOn G {s : ℂ | (1 : ℝ) ≤ s.re} ∧ ∀ (s : ℂ), (1 : ℝ) < s.re → G s = LSeries (fun (n : ℕ) => (↑((ArithmeticFunction.vonMangoldt : ℕ → ℝ) n) : ℂ)) s - (1 : ℂ) / (s - (1 : ℂ)), withh_ext : ∃ (G : ℂ → ℂ), ContinuousOn G {s : ℂ | (1 : ℝ) ≤ s.re} ∧ ∀ (s : ℂ), (1 : ℝ) < s.re → G s = LSeries (fun (n : ℕ) => (↑((ArithmeticFunction.vonMangoldt : ℕ → ℝ) n) : ℂ)) s - (1 : ℂ) / (s - (1 : ℂ)).Uses library
ContinuousOnA function between topological spaces is continuous on a subsetswhen it's continuous at every point ofswithins. ,LSeriesThe value of the L-series of the sequencefat the pointsif it converges absolutely there, and0otherwise. ,ArithmeticFunction.vonMangoldtThevonMangoldtfunction is the function on natural numbers that returnslog pif the input can be expressed asp^kfor a primep. .Left open as a hole; its statement is erdos-1094--h3--h3--h1--h1--h1--h2 (open).
Lean, lines 35–37
have h_ext : ∃ G : ℂ → ℂ, ContinuousOn G {s | 1 ≤ s.re} ∧ ∀ s : ℂ, 1 < s.re → G s = LSeries (fun n => ((ArithmeticFunction.vonMangoldt n : ℝ) : ℂ)) s - 1 / (s - 1) := sorry
s2obtain(∀ (f : ℕ → ℝ) (A : ℝ), (∀ (n : ℕ), (0 : ℝ) ≤ f n) → (∀ (s : ℂ), (1 : ℝ) < s.re → LSeriesSummable (fun (n : ℕ) => (↑(f n) : ℂ)) s) → (∃ (G : ℂ → ℂ), ContinuousOn G {s : ℂ | (1 : ℝ) ≤ s.re} ∧ ∀ (s : ℂ), (1 : ℝ) < s.re → G s = LSeries (fun (n : ℕ) => (↑(f n) : ℂ)) s - (↑A : ℂ) / (s - (1 : ℂ))) → Filter.Tendsto (fun (N : ℕ) => (∑ n ∈ Finset.range N, f n) / (↑N : ℝ)) Filter.atTop (nhds A)) ∧ ∃ (G : ℂ → ℂ), ContinuousOn G {s : ℂ | (1 : ℝ) ≤ s.re} ∧ ∀ (s : ℂ), (1 : ℝ) < s.re → G s = LSeries (fun (n : ℕ) => (↑((ArithmeticFunction.vonMangoldt : ℕ → ℝ) n) : ℂ)) s - (1 : ℂ) / (s - (1 : ℂ))Leaves
∀ (ε : ℝ), (0 : ℝ) < ε → ∃ (X : ℝ), ∀ (x : ℝ), X ≤ x → |Chebyshev.psi x - x| ≤ ε * x, withh_wi : ∀ (f : ℕ → ℝ) (A : ℝ), (∀ (n : ℕ), (0 : ℝ) ≤ f n) → (∀ (s : ℂ), (1 : ℝ) < s.re → LSeriesSummable (fun (n : ℕ) => (↑(f n) : ℂ)) s) → (∃ (G : ℂ → ℂ), ContinuousOn G {s : ℂ | (1 : ℝ) ≤ s.re} ∧ ∀ (s : ℂ), (1 : ℝ) < s.re → G s = LSeries (fun (n : ℕ) => (↑(f n) : ℂ)) s - (↑A : ℂ) / (s - (1 : ℂ))) → Filter.Tendsto (fun (N : ℕ) => (∑ n ∈ Finset.range N, f n) / (↑N : ℝ)) Filter.atTop (nhds A),h_ext : ∃ (G : ℂ → ℂ), ContinuousOn G {s : ℂ | (1 : ℝ) ≤ s.re} ∧ ∀ (s : ℂ), (1 : ℝ) < s.re → G s = LSeries (fun (n : ℕ) => (↑((ArithmeticFunction.vonMangoldt : ℕ → ℝ) n) : ℂ)) s - (1 : ℂ) / (s - (1 : ℂ)).Lean, line 39
obtain ⟨h_wi, h_ext⟩ := hall
hlimhaveFilter.Tendsto (fun (N : ℕ) => (∑ n ∈ Finset.range N, (ArithmeticFunction.vonMangoldt : ℕ → ℝ) n) / (↑N : ℝ)) Filter.atTop (nhds (1 : ℝ))Leaves
∃ (X : ℝ), ∀ (x : ℝ), X ≤ x → |Chebyshev.psi x - x| ≤ ε * x, withhlim : Filter.Tendsto (fun (N : ℕ) => (∑ n ∈ Finset.range N, (ArithmeticFunction.vonMangoldt : ℕ → ℝ) n) / (↑N : ℝ)) Filter.atTop (nhds (1 : ℝ)).Uses library
ArithmeticFunction.vonMangoldtThevonMangoldtfunction is the function on natural numbers that returnslog pif the input can be expressed asp^kfor a primep. ,ArithmeticFunction.vonMangoldt_nonneg,ArithmeticFunction.LSeriesSummable_vonMangoldtThe L-series of the von Mangoldt functionΛconverges atswhenre s > 1. .Lean, lines 41–43
have hlim := h_wi (fun n => ArithmeticFunction.vonMangoldt n) 1 (fun n => ArithmeticFunction.vonMangoldt_nonneg) (fun s hs => ArithmeticFunction.LSeriesSummable_vonMangoldt hs) h_exthevhave∃ (N : ℕ), ∀ n ≥ N, dist ((∑ n ∈ Finset.range n, (ArithmeticFunction.vonMangoldt : ℕ → ℝ) n) / (↑n : ℝ)) (1 : ℝ) < ε / (2 : ℝ)Leaves
∃ (X : ℝ), ∀ (x : ℝ), X ≤ x → |Chebyshev.psi x - x| ≤ ε * x, withhev : ∃ (N : ℕ), ∀ n ≥ N, dist ((∑ n ∈ Finset.range n, (ArithmeticFunction.vonMangoldt : ℕ → ℝ) n) / (↑n : ℝ)) (1 : ℝ) < ε / (2 : ℝ).Uses library
Metric.tendsto_atTop.Lean, line 44
have hev := (Metric.tendsto_atTop.mp hlim) (ε / 2) (by positivity)
s5obtain∃ (N : ℕ), ∀ n ≥ N, dist ((∑ n ∈ Finset.range n, (ArithmeticFunction.vonMangoldt : ℕ → ℝ) n) / (↑n : ℝ)) (1 : ℝ) < ε / (2 : ℝ)Leaves
∃ (X : ℝ), ∀ (x : ℝ), X ≤ x → |Chebyshev.psi x - x| ≤ ε * x, withN₀ : ℕ,hN₀ : ∀ n ≥ N₀, dist ((∑ n ∈ Finset.range n, (ArithmeticFunction.vonMangoldt : ℕ → ℝ) n) / (↑n : ℝ)) (1 : ℝ) < ε / (2 : ℝ).Lean, line 45
obtain ⟨N₀, hN₀⟩ := hev
hx0have(0 : ℝ) ≤ xLeaves
|Chebyshev.psi x - x| ≤ ε * x, withhx0 : (0 : ℝ) ≤ x.Lean, lines 47–48
have hx0 : 0 ≤ x := by have : (0:ℝ) ≤ N₀ := Nat.cast_nonneg _; have : 0 < 4 / ε := by positivity linarithhx0.s1have(0 : ℝ) ≤ (↑N₀ : ℝ)Leaves
(0 : ℝ) ≤ x, withthis : (0 : ℝ) ≤ (↑N₀ : ℝ).Uses library
Nat.cast_nonnegSpecialisation ofNat.cast_nonneg', which seems to be easier for Lean to use. .Lean, line 47
have hx0 : 0 ≤ x := by have : (0:ℝ) ≤ N₀ := Nat.cast_nonneg _; have : 0 < 4 / ε := by positivity
hx0.s2have(0 : ℝ) < (4 : ℝ) / εroutine: positivityLeaves
(0 : ℝ) ≤ x, withthis : (0 : ℝ) < (4 : ℝ) / ε.Lean, line 47
have hx0 : 0 ≤ x := by have : (0:ℝ) ≤ N₀ := Nat.cast_nonneg _; have : 0 < 4 / ε := by positivity
hmxhave(↑m : ℝ) ≤ xLeaves
|Chebyshev.psi x - x| ≤ ε * x, withhmx : (↑m : ℝ) ≤ x.Uses library
Nat.floor_le.Lean, line 50
have hmx : (m : ℝ) ≤ x := Nat.floor_le hx0
hxmhavex < (↑m : ℝ) + (1 : ℝ)Leaves
|Chebyshev.psi x - x| ≤ ε * x, withhxm : x < (↑m : ℝ) + (1 : ℝ).Uses library
Nat.lt_floor_add_one.Lean, line 51
have hxm : x < (m : ℝ) + 1 := Nat.lt_floor_add_one x
hpsihaveChebyshev.psi x = ∑ n ∈ Finset.range (m + (1 : ℕ)), (ArithmeticFunction.vonMangoldt : ℕ → ℝ) nLeaves
|Chebyshev.psi x - x| ≤ ε * x, withhpsi : Chebyshev.psi x = ∑ n ∈ Finset.range (m + (1 : ℕ)), (ArithmeticFunction.vonMangoldt : ℕ → ℝ) n.Uses library
Chebyshev.psiThe sum ofArithmeticFunction.vonMangoldtover integersn ≤ x. ,Finset.rangerange nis the set of natural numbers less thann. ,ArithmeticFunction.vonMangoldtThevonMangoldtfunction is the function on natural numbers that returnslog pif the input can be expressed asp^kfor a primep. ,Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. ,Finset.range_eq_Ico,Finset.sum_eq_sum_Ico_succ_bot.Lean, lines 52–57
have hpsi : Chebyshev.psi x = ∑ n ∈ Finset.range (m + 1), ArithmeticFunction.vonMangoldt n := by show ∑ n ∈ Finset.Ioc 0 m, ArithmeticFunction.vonMangoldt n = _ rw [Finset.range_eq_Ico, Finset.sum_eq_sum_Ico_succ_bot (by omega)] have hI : Finset.Ico (0 + 1) (m + 1) = Finset.Ioc 0 m := by ext n; simp only [Finset.mem_Ico, Finset.mem_Ioc]; omega rw [hI]; simphpsi.hIhaveFinset.Ico ((0 : ℕ) + (1 : ℕ)) (m + (1 : ℕ)) = Finset.Ioc (0 : ℕ) mLeaves
∑ n ∈ Finset.Ioc (0 : ℕ) m, (ArithmeticFunction.vonMangoldt : ℕ → ℝ) n = (ArithmeticFunction.vonMangoldt : ℕ → ℝ) (0 : ℕ) + ∑ k ∈ Finset.Ico ((0 : ℕ) + (1 : ℕ)) (m + (1 : ℕ)), (ArithmeticFunction.vonMangoldt : ℕ → ℝ) k, withhI : Finset.Ico ((0 : ℕ) + (1 : ℕ)) (m + (1 : ℕ)) = Finset.Ioc (0 : ℕ) m.Uses library
Finset.IcoThe finset $[a, b)$ of elementsxsuch thata ≤ xandx < b. ,Finset.IocThe finset $(a, b]$ of elementsxsuch thata < xandx ≤ b. ,Finset.mem_Ico,Finset.mem_Ioc.Lean, lines 55–56
have hI : Finset.Ico (0 + 1) (m + 1) = Finset.Ioc 0 m := by ext n; simp only [Finset.mem_Ico, Finset.mem_Ioc]; omega
hMhavedist ((∑ n ∈ Finset.range (m + (1 : ℕ)), (ArithmeticFunction.vonMangoldt : ℕ → ℝ) n) / (↑(m + (1 : ℕ)) : ℝ)) (1 : ℝ) < ε / (2 : ℝ)Leaves
|Chebyshev.psi x - x| ≤ ε * x, withhM : dist ((∑ n ∈ Finset.range (m + (1 : ℕ)), (ArithmeticFunction.vonMangoldt : ℕ → ℝ) n) / (↑(m + (1 : ℕ)) : ℝ)) (1 : ℝ) < ε / (2 : ℝ).Lean, lines 58–61
have hM := hN₀ (m + 1) (by have : (N₀ : ℝ) < (m : ℝ) + 1 := by have : 0 < 4 / ε := by positivity linarith exact_mod_cast this.le)hM.thishave(↑N₀ : ℝ) < (↑m : ℝ) + (1 : ℝ)Leaves
m + (1 : ℕ) ≥ N₀, withthis : (↑N₀ : ℝ) < (↑m : ℝ) + (1 : ℝ).Lean, lines 59–60
have : (N₀ : ℝ) < (m : ℝ) + 1 := by have : 0 < 4 / ε := by positivity linarithhM.this.thishave(0 : ℝ) < (4 : ℝ) / εroutine: positivityLeaves
(↑N₀ : ℝ) < (↑m : ℝ) + (1 : ℝ), withthis : (0 : ℝ) < (4 : ℝ) / ε.Lean, line 59
have : (N₀ : ℝ) < (m : ℝ) + 1 := by have : 0 < 4 / ε := by positivity
hMposhave(0 : ℝ) < (↑(m + (1 : ℕ)) : ℝ)routine: positivityLeaves
|Chebyshev.psi x - x| ≤ ε * x, withhMpos : (0 : ℝ) < (↑(m + (1 : ℕ)) : ℝ).Lean, line 63
have hMpos : (0 : ℝ) < ((m + 1 : ℕ) : ℝ) := by positivity
hM'have|Chebyshev.psi x - (↑(m + (1 : ℕ)) : ℝ)| < ε / (2 : ℝ) * (↑(m + (1 : ℕ)) : ℝ)Leaves
|Chebyshev.psi x - x| ≤ ε * x, withhM' : |Chebyshev.psi x - (↑(m + (1 : ℕ)) : ℝ)| < ε / (2 : ℝ) * (↑(m + (1 : ℕ)) : ℝ).Uses library
Chebyshev.psiThe sum ofArithmeticFunction.vonMangoldtover integersn ≤ x. ,abs_div,abs_of_pos,div_lt_iff₀Seediv_lt_iff₀'for a version with multiplication on the other side. .Lean, lines 65–69
have hM' : |Chebyshev.psi x - ((m + 1 : ℕ) : ℝ)| < ε / 2 * ((m + 1 : ℕ) : ℝ) := by have h1 : Chebyshev.psi x / ((m + 1 : ℕ) : ℝ) - 1 = (Chebyshev.psi x - ((m + 1 : ℕ) : ℝ)) / ((m + 1 : ℕ) : ℝ) := by field_simp rw [h1, abs_div, abs_of_pos hMpos, div_lt_iff₀ hMpos] at hM exact hMhM'.h1haveChebyshev.psi x / (↑(m + (1 : ℕ)) : ℝ) - (1 : ℝ) = (Chebyshev.psi x - (↑(m + (1 : ℕ)) : ℝ)) / (↑(m + (1 : ℕ)) : ℝ)routine: field_simpLeaves
|Chebyshev.psi x - (↑(m + (1 : ℕ)) : ℝ)| < ε / (2 : ℝ) * (↑(m + (1 : ℕ)) : ℝ), withh1 : Chebyshev.psi x / (↑(m + (1 : ℕ)) : ℝ) - (1 : ℝ) = (Chebyshev.psi x - (↑(m + (1 : ℕ)) : ℝ)) / (↑(m + (1 : ℕ)) : ℝ).Uses library
Chebyshev.psiThe sum ofArithmeticFunction.vonMangoldtover integersn ≤ x. .Lean, lines 66–67
have h1 : Chebyshev.psi x / ((m + 1 : ℕ) : ℝ) - 1 = (Chebyshev.psi x - ((m + 1 : ℕ) : ℝ)) / ((m + 1 : ℕ) : ℝ) := by field_simp
hx4have(4 : ℝ) / ε + (1 : ℝ) ≤ xLeaves
|Chebyshev.psi x - x| ≤ ε * x, withhx4 : (4 : ℝ) / ε + (1 : ℝ) ≤ x.Lean, lines 71–72
have hx4 : 4 / ε + 1 ≤ x := by have : (0:ℝ) ≤ N₀ := Nat.cast_nonneg _ linarithhx4.thishave(0 : ℝ) ≤ (↑N₀ : ℝ)Leaves
(4 : ℝ) / ε + (1 : ℝ) ≤ x, withthis : (0 : ℝ) ≤ (↑N₀ : ℝ).Uses library
Nat.cast_nonnegSpecialisation ofNat.cast_nonneg', which seems to be easier for Lean to use. .Lean, line 71
have hx4 : 4 / ε + 1 ≤ x := by have : (0:ℝ) ≤ N₀ := Nat.cast_nonneg _
h_x3b5x(hεx) haveε + (4 : ℝ) ≤ ε * xLeaves
|Chebyshev.psi x - x| ≤ ε * x, withhεx : ε + (4 : ℝ) ≤ ε * x.Lean, lines 73–75
have hεx : ε + 4 ≤ ε * x := by have h4 : ε * (4 / ε) = 4 := by field_simp nlinarithh_x3b5x.h4haveε * ((4 : ℝ) / ε) = (4 : ℝ)routine: field_simpLeaves
ε + (4 : ℝ) ≤ ε * x, withh4 : ε * ((4 : ℝ) / ε) = (4 : ℝ).Lean, line 74
have h4 : ε * (4 / ε) = 4 := by field_simp
closeterm|Chebyshev.psi x - x| ≤ ε * xCloses the goal.
Uses library
abs_lt,abs_le.Lean, lines 76–78
rw [abs_lt] at hM' rw [abs_le] constructor <;> nlinarith [hM'.1, hM'.2]
import Mathlib
import Nodes.«erdos-1094--h3--h3--h1--h1--h1».Context
open scoped Nat
/-! Hole `h_psi` of a merged partial proof, as a node (D-12 #5, D-29).
Statement generated by the gate from the assembly; immutable (D-3). -/
theorem erdos_1094__h3__h3__h1__h1__h1 : ∀ (ε : ℝ), (0 : ℝ) < ε → ∃ (X : ℝ), ∀ (x : ℝ), X ≤ x → |Chebyshev.psi x - x| ≤ ε * x := by
-- approach: Wiener–Ikehara Tauberian theorem applied to the von Mangoldt L-series -ζ'/ζ (Ingham 1932; Korevaar 2004, Newman 1980)
-- licence: CC-BY-4.0
have hall : (∀ (f : ℕ → ℝ) (A : ℝ), (∀ n, 0 ≤ f n) →
(∀ s : ℂ, 1 < s.re → LSeriesSummable (fun n => (f n : ℂ)) s) →
(∃ G : ℂ → ℂ, ContinuousOn G {s | 1 ≤ s.re} ∧
∀ s : ℂ, 1 < s.re → G s = LSeries (fun n => (f n : ℂ)) s - A / (s - 1)) →
Filter.Tendsto (fun N : ℕ => (∑ n ∈ Finset.range N, f n) / (N : ℝ)) Filter.atTop (nhds A)) ∧ (∃ G : ℂ → ℂ, ContinuousOn G {s | 1 ≤ s.re} ∧
∀ s : ℂ, 1 < s.re → G s =
LSeries (fun n => ((ArithmeticFunction.vonMangoldt n : ℝ) : ℂ)) s - 1 / (s - 1)) := by
refine ⟨?_, ?_⟩
· -- First lemma.
-- label: Wiener–Ikehara Tauberian theorem
-- claim: $f\ge0$, $\sum f(n)n^{-s}$ converges for $\Re s>1$ and $F(s)-A/(s-1)$ extends continuously to $\Re s\ge1$ $\Rightarrow$ $\frac1N\sum_{n<N}f(n)\to A$
-- Wiener (1932), Ikehara (1931); continuous-boundary form: Korevaar, Bull. AMS 39 (2002), Thm 4.2 / Tauberian Theory (2004) III.4.
have h_wi : ∀ (f : ℕ → ℝ) (A : ℝ), (∀ n, 0 ≤ f n) →
(∀ s : ℂ, 1 < s.re → LSeriesSummable (fun n => (f n : ℂ)) s) →
(∃ G : ℂ → ℂ, ContinuousOn G {s | 1 ≤ s.re} ∧
∀ s : ℂ, 1 < s.re → G s = LSeries (fun n => (f n : ℂ)) s - A / (s - 1)) →
Filter.Tendsto (fun N : ℕ => (∑ n ∈ Finset.range N, f n) / (N : ℝ)) Filter.atTop (nhds A) := sorry
exact h_wi
· -- Second lemma.
-- label: -ζ'/ζ minus the pole extends to Re s ≥ 1
-- claim: $\sum_n \Lambda(n) n^{-s} - \frac{1}{s-1}$ extends continuously to $\Re s\ge 1$
-- From ζ's simple pole of residue 1 at s = 1 and ζ(s) ≠ 0 on Re s ≥ 1 (Mathlib: riemannZeta_residue_one,
-- riemannZeta_ne_zero_of_one_le_re, ArithmeticFunction.LSeries_vonMangoldt_eq_deriv_riemannZeta_div).
have h_ext : ∃ G : ℂ → ℂ, ContinuousOn G {s | 1 ≤ s.re} ∧
∀ s : ℂ, 1 < s.re → G s =
LSeries (fun n => ((ArithmeticFunction.vonMangoldt n : ℝ) : ℂ)) s - 1 / (s - 1) := sorry
exact h_ext
obtain ⟨h_wi, h_ext⟩ := hall
intro ε hε
have hlim := h_wi (fun n => ArithmeticFunction.vonMangoldt n) 1
(fun n => ArithmeticFunction.vonMangoldt_nonneg)
(fun s hs => ArithmeticFunction.LSeriesSummable_vonMangoldt hs) h_ext
have hev := (Metric.tendsto_atTop.mp hlim) (ε / 2) (by positivity)
obtain ⟨N₀, hN₀⟩ := hev
refine ⟨(N₀ : ℝ) + 4 / ε + 1, fun x hx => ?_⟩
have hx0 : 0 ≤ x := by have : (0:ℝ) ≤ N₀ := Nat.cast_nonneg _; have : 0 < 4 / ε := by positivity
linarith
set m := ⌊x⌋₊ with hm
have hmx : (m : ℝ) ≤ x := Nat.floor_le hx0
have hxm : x < (m : ℝ) + 1 := Nat.lt_floor_add_one x
have hpsi : Chebyshev.psi x = ∑ n ∈ Finset.range (m + 1), ArithmeticFunction.vonMangoldt n := by
show ∑ n ∈ Finset.Ioc 0 m, ArithmeticFunction.vonMangoldt n = _
rw [Finset.range_eq_Ico, Finset.sum_eq_sum_Ico_succ_bot (by omega)]
have hI : Finset.Ico (0 + 1) (m + 1) = Finset.Ioc 0 m := by
ext n; simp only [Finset.mem_Ico, Finset.mem_Ioc]; omega
rw [hI]; simp
have hM := hN₀ (m + 1) (by
have : (N₀ : ℝ) < (m : ℝ) + 1 := by have : 0 < 4 / ε := by positivity
linarith
exact_mod_cast this.le)
rw [Real.dist_eq] at hM
have hMpos : (0 : ℝ) < ((m + 1 : ℕ) : ℝ) := by positivity
rw [← hpsi] at hM
have hM' : |Chebyshev.psi x - ((m + 1 : ℕ) : ℝ)| < ε / 2 * ((m + 1 : ℕ) : ℝ) := by
have h1 : Chebyshev.psi x / ((m + 1 : ℕ) : ℝ) - 1 = (Chebyshev.psi x - ((m + 1 : ℕ) : ℝ)) / ((m + 1 : ℕ) : ℝ) := by
field_simp
rw [h1, abs_div, abs_of_pos hMpos, div_lt_iff₀ hMpos] at hM
exact hM
push_cast at hM'
have hx4 : 4 / ε + 1 ≤ x := by have : (0:ℝ) ≤ N₀ := Nat.cast_nonneg _
linarith
have hεx : ε + 4 ≤ ε * x := by
have h4 : ε * (4 / ε) = 4 := by field_simp
nlinarith
rw [abs_lt] at hM'
rw [abs_le]
constructor <;> nlinarith [hM'.1, hM'.2]How to read this page
No explainer yet. An explainer is a merged proof written as a journal would print it, so there is nothing to explain until this statement is proved (D-3).