Problems / erdos-69 / erdos-69--h2-v2
Irrationality of the prime sum 1/(2^p - 1)
erdos-69--h2-v2
open
Left open by a proof skeleton.
Revises erdos-69--h2, which it replaced (D-8).
$\displaystyle \Bigl(\sum_{n=0}^{\infty}\frac{\omega(n)}{2^{n}} = \sum_{p\ \text{prime}}\frac{1}{2^{p}-1}\Bigr) \;\Rightarrow\; \sum_{p\ \text{prime}}\frac{1}{2^{p}-1}\notin\mathbb{Q}$
If the series of ω(n)/2^n over n ≥ 0 equals the sum over primes p of 1/(2^p − 1), then that prime sum is irrational, everything in ℝ with ω(n) the number of distinct prime factors of n. Every series is Mathlib's tsum over ℝ, which is 0 when the family is not summable, and Irrational x means x is not the cast of a rational.
Lean
theorem erdos_69__h2 : (∑' n : ℕ, (ω n : ℝ) / 2 ^ n
= ∑' p : Nat.Primes, (1 : ℝ) / (2 ^ (p : ℕ) - 1)) →
Irrational (∑' p : Nat.Primes, (1 : ℝ) / (2 ^ (p : ℕ) - 1)) := by
sorryWhy 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 this hole by 20260917T180404Z-agent-erdos69-1b25-partial.lean (merged in e726b76549b7, attestation 000100).
hB→ erdos-69--h2-v2--h1-v2 (open)$\displaystyle \Bigl(\sum_{n=0}^{\infty}\frac{\omega(n)}{2^{n}} = \sum_{p\ \text{prime}}\frac{1}{2^{p}-1}\Bigr) \Rightarrow \forall b\in\mathbb{N},\ b>0\ \ \exists N\in\mathbb{N}\ \ \forall z\in\mathbb{Z}:\ b\cdot\sum_{j=0}^{\infty}\frac{\omega(N+1+j)}{2^{j+1}} \ne z$
Read the partial proof (Lean)
theorem erdos_69__h2 : (∑' n : ℕ, (ω n : ℝ) / 2 ^ n
= ∑' p : Nat.Primes, (1 : ℝ) / (2 ^ (p : ℕ) - 1)) →
Irrational (∑' p : Nat.Primes, (1 : ℝ) / (2 ^ (p : ℕ) - 1)) := by
intro h_lambert
-- Hole B (Erdős 1948): for every b ≥ 1 there is an N whose rescaled tail
-- ∑_j ω(N+1+j)/2^(j+1) = 2^N · ∑_{n > N} ω(n)/2^n, times b, is not an integer — the choice
-- of N by the Chinese remainder theorem that controls ω(N+1), ω(N+2), … .
have hB : ∀ b : ℕ, 0 < b → ∃ N : ℕ, ∀ z : ℤ,
(b : ℝ) * ∑' j : ℕ, (ω (N + 1 + j) : ℝ) / 2 ^ (j + 1) ≠ z := sorry
-- Integrality (proved): if the series is the rational q, every rescaled tail times q.den is an
-- integer, namely 2^N · q.num − ∑_{n ≤ N} q.den · ω(n) · 2^(N−n).
have hA : ∀ q : ℚ, (q : ℝ) = ∑' n : ℕ, (ω n : ℝ) / 2 ^ n → ∀ N : ℕ,
∃ z : ℤ, (q.den : ℝ) * ∑' j : ℕ, (ω (N + 1 + j) : ℝ) / 2 ^ (j + 1) = z := by
intro q hq N
have hbound : ∀ n : ℕ,
(ω n : ℝ) / 2 ^ n ≤ (n : ℝ) ^ 1 * (1 / 2 : ℝ) ^ n + (1 / 2 : ℝ) ^ n := by
intro n
have h1 : ω n ≤ n + 1 := by
rw [ArithmeticFunction.cardDistinctFactors_apply]
calc n.primeFactorsList.dedup.length = n.primeFactors.card := rfl
_ ≤ (Finset.range (n + 1)).card :=
Finset.card_le_card (fun p hp =>
Finset.mem_range.2 (Nat.lt_succ_of_le (Nat.le_of_mem_primeFactors hp)))
_ = n + 1 := Finset.card_range _
have h2 : (ω n : ℝ) ≤ (n : ℝ) + 1 := by exact_mod_cast h1
have h4 : (0 : ℝ) ≤ ((2 : ℝ) ^ n)⁻¹ := by positivity
rw [pow_one, one_div, inv_pow, div_eq_mul_inv]
nlinarith [mul_le_mul_of_nonneg_right h2 h4]
have hsum : Summable (fun n : ℕ => (ω n : ℝ) / 2 ^ n) := by
refine Summable.of_nonneg_of_le (fun n => by positivity) hbound ?_
exact (summable_pow_mul_geometric_of_norm_lt_one 1 (by norm_num [Real.norm_eq_abs])).add
(summable_geometric_of_lt_one (by norm_num) (by norm_num))
have h2N : (2 : ℝ) ^ N ≠ 0 := by positivity
-- the tail as 2^N times (the sum minus its first N+1 terms)
have htail : ∑' j : ℕ, (ω (N + 1 + j) : ℝ) / 2 ^ (j + 1)
= 2 ^ N * (∑' n : ℕ, (ω n : ℝ) / 2 ^ n - ∑ n ∈ Finset.range (N + 1), (ω n : ℝ) / 2 ^ n) := by
have h := hsum.sum_add_tsum_nat_add (N + 1)
have h2 : ∑' i : ℕ, (ω (i + (N + 1)) : ℝ) / 2 ^ (i + (N + 1))
= (∑' j : ℕ, (ω (N + 1 + j) : ℝ) / 2 ^ (j + 1)) / 2 ^ N := by
rw [← tsum_div_const]
refine tsum_congr (fun j => ?_)
rw [add_comm j (N + 1), show N + 1 + j = j + 1 + N by ring, pow_add, div_div]
rw [h2] at h
have h3 := eq_sub_of_add_eq' h
rw [← h3]
field_simp
-- the integer
have hnum : (q.den : ℝ) * (q : ℝ) = q.num := by
have := congrArg (Rat.cast : ℚ → ℝ) (Rat.mul_den_eq_num q)
push_cast at this
linarith
have hS : (q.den : ℝ) * ∑' n : ℕ, (ω n : ℝ) / 2 ^ n = q.num := by rw [← hq]; exact hnum
have hA : ∑ n ∈ Finset.range (N + 1), (q.den : ℝ) * (ω n : ℝ) * 2 ^ (N - n)
= 2 ^ N * ((q.den : ℝ) * ∑ n ∈ Finset.range (N + 1), (ω n : ℝ) / 2 ^ n) := by
rw [Finset.mul_sum, Finset.mul_sum]
refine Finset.sum_congr rfl (fun n hn => ?_)
have hn' : n ≤ N := Nat.lt_succ_iff.1 (Finset.mem_range.1 hn)
rw [pow_sub₀ (2 : ℝ) two_ne_zero hn']
field_simp
refine ⟨2 ^ N * q.num - ∑ n ∈ Finset.range (N + 1), (q.den : ℤ) * ω n * 2 ^ (N - n), ?_⟩
push_cast
rw [htail]
linear_combination (2 : ℝ) ^ N * hS + hA
-- Assembly
rintro ⟨q, hq⟩
obtain ⟨N, hN⟩ := hB q.den q.den_pos
obtain ⟨z, hz⟩ := hA q (hq.trans h_lambert.symm) N
exact hN z hzThe gate replayed this file at its merge, each hole a sorry (D-12 #5); the whole file: targets/erdos-69/nodes/erdos-69--h2-v2/attempts/20260917T180404Z-agent-erdos69-1b25-partial.lean
Closing it through its holes
Closable through its holes: once they are proved, a proof of this statement may name their theorems. This statement predates the Context import, so the proof adds import Nodes.«erdos-69--h2-v2».Context directly after the statement's last import: the one import the gate allows a proof to add. A direct proof is accepted at any time.
What is known
Notes
- Why a "decay of the characteristic function" hole with an existentially quantified construction is still circular, and what an honest decomposition of this node needs full text →
Filed before its class was retired (D-12 v3.43), kept as history: a claim of this class said a proof of this statement would prove one above it, which is true of every hole, so it says nothing about this statement.
circular-decomposition· targets/erdos-69/nodes/erdos-69--h2-v2/defects/20260924T123353Z-t0924-69m-8709.yaml
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
open scoped ArithmeticFunction.omega
theorem erdos_69__h2 : (∑' n : ℕ, (ω n : ℝ) / 2 ^ n
= ∑' p : Nat.Primes, (1 : ℝ) / (2 ^ (p : ℕ) - 1)) →
Irrational (∑' p : Nat.Primes, (1 : ℝ) / (2 ^ (p : ℕ) - 1)) := by
sorryA 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 f29-words, drafted with Claude Fable 5.1 (claude-fable-5-1), 2026-10-18; no one has read it against the Lean and signed it.
Draft · drafted, by the model named above
$\displaystyle \Bigl(\sum_{n=0}^{\infty}\frac{\omega(n)}{2^{n}} = \sum_{p\ \text{prime}}\frac{1}{2^{p}-1}\Bigr) \;\Rightarrow\; \sum_{p\ \text{prime}}\frac{1}{2^{p}-1}\notin\mathbb{Q}$
If the series of ω(n)/2^n over n ≥ 0 equals the sum over primes p of 1/(2^p − 1), then that prime sum is irrational, everything in ℝ with ω(n) the number of distinct prime factors of n. Every series is Mathlib's tsum over ℝ, which is 0 when the family is not summable, and Irrational x means x is not the cast of a rational.
Rendered from gloss/98c5bc7693b2….md · Improve these words →
Rendered from targets/erdos-69/nodes/erdos-69--h2-v2/Statement.lean. Origin: skeleton-hole.
Depends on (1), each in words
Depends on, each in words where someone has written them:
- erdos-69--h2-v2--h1-v2: $\Bigl(\sum_{n=0}^{\infty}\frac{\omega(n)}{2^{n}} = \sum_{p\ \text{prime}}\frac{1}{2^{p}-1}\Bigr) \Rightarrow \forall b\in\mathbb{N},\ b>0\ \ \exists N\in\mathbb{N}\ \ \forall z\in\mathbb{Z}:\ b\cdot\sum_{j=0}^{\infty}\frac{\omega(N+1+j)}{2^{j+1}} \ne z$
Attestation: none of a proof
No proof of this statement has been merged. A partial assembly merged under attestations/000100.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.
1b2b0c541288.import Mathlib
open scoped ArithmeticFunction.omega
/-! Witness for `erdos-69--h2` (D-29, F07-R6): the hole's one hypothesis is the Lambert-series
identity `erdos-69--h1`, so the witness is a proof of it. -/
theorem witness : ∑' n : ℕ, (ω n : ℝ) / 2 ^ n
= ∑' p : Nat.Primes, (1 : ℝ) / (2 ^ (p : ℕ) - 1) := by
-- (a) the per-prime geometric series
have hgeom : ∀ p : ℕ, 2 ≤ p →
∑' k : ℕ, ((1 / 2 : ℝ) ^ p) ^ (k + 1) = 1 / (2 ^ p - 1) := by
intro p hp
have hr0 : (0 : ℝ) ≤ (1 / 2 : ℝ) ^ p := by positivity
have hr1 : (1 / 2 : ℝ) ^ p < 1 := pow_lt_one₀ (by norm_num) (by norm_num) (by omega)
have h2 : (1 : ℝ) < 2 ^ p := one_lt_pow₀ (by norm_num) (by omega)
have h3 : (2 : ℝ) ^ p - 1 ≠ 0 := by linarith
simp_rw [pow_succ]
rw [tsum_mul_right, tsum_geometric_of_lt_one hr0 hr1, one_div, inv_pow]
field_simp
-- (D) the multiples of a prime p, reindexed
have hD : ∀ p : ℕ, p.Prime →
∑' n : ℕ, (if p ∣ n + 1 then (1 / 2 : ℝ) ^ (n + 1) else 0)
= ∑' k : ℕ, ((1 / 2 : ℝ) ^ p) ^ (k + 1) := by
intro p hp
have hp1 : 1 ≤ p := hp.one_lt.le
have hk : ∀ k : ℕ, p * k + (p - 1) + 1 = p * (k + 1) := by
intro k
rw [Nat.mul_succ, Nat.add_assoc, Nat.sub_add_cancel hp1]
have hg : ∀ k : ℕ, ((1 / 2 : ℝ) ^ p) ^ (k + 1) ≠ 0 := fun k => by positivity
refine tsum_eq_tsum_of_ne_zero_bij (fun k => p * k.1 + (p - 1)) ?_ ?_ ?_
· intro k k' h
have h' : p * k.1 + (p - 1) = p * k'.1 + (p - 1) := h
exact Subtype.ext (Nat.eq_of_mul_eq_mul_left hp.pos (Nat.add_right_cancel h'))
· intro n hn
have hn' := Function.mem_support.1 hn
have hdvd : p ∣ n + 1 := by
by_contra hnot
exact hn' (if_neg hnot)
obtain ⟨m, hm⟩ := hdvd
rcases m with _ | k
· omega
· refine ⟨⟨k, hg k⟩, ?_⟩
show p * k + (p - 1) = n
rw [← hk k] at hm
exact (Nat.add_right_cancel hm).symm
· rintro ⟨k, -⟩
show (if p ∣ p * k + (p - 1) + 1 then (1 / 2 : ℝ) ^ (p * k + (p - 1) + 1) else 0)
= ((1 / 2 : ℝ) ^ p) ^ (k + 1)
rw [hk k, if_pos (dvd_mul_right p (k + 1)), pow_mul]
-- the column sums
have hcol : ∀ p : Nat.Primes,
∑' n : ℕ, (if (p : ℕ) ∣ n + 1 then (1 / 2 : ℝ) ^ (n + 1) else 0)
= 1 / (2 ^ (p : ℕ) - 1) := by
intro p
rw [hD p p.2, hgeom p p.2.two_le]
-- (R) each row is summable
have hR : ∀ p : ℕ, Summable (fun n : ℕ => if p ∣ n + 1 then (1 / 2 : ℝ) ^ (n + 1) else 0) := by
intro p
refine Summable.of_nonneg_of_le (fun n => ?_) (fun n => ?_)
(summable_geometric_of_lt_one (by norm_num) (by norm_num) : Summable fun n : ℕ => (1 / 2 : ℝ) ^ n)
· split_ifs <;> positivity
· split_ifs
· exact pow_le_pow_of_le_one (by norm_num) (by norm_num) (Nat.le_succ n)
· positivity
-- (Cb), (Sc): the column sums are summable over the primes
have hb : ∀ p : ℕ, p.Prime → (1 : ℝ) / (2 ^ p - 1) ≤ 2 * (1 / 2 : ℝ) ^ p := by
intro p hp
have h2p : (2 : ℝ) ≤ 2 ^ p := by
calc (2 : ℝ) = 2 ^ 1 := (pow_one 2).symm
_ ≤ 2 ^ p := pow_le_pow_right₀ (by norm_num) hp.one_lt.le
have hpos : (0 : ℝ) < 2 ^ p / 2 := by positivity
calc (1 : ℝ) / (2 ^ p - 1) ≤ 1 / (2 ^ p / 2) := one_div_le_one_div_of_le hpos (by linarith)
_ = 2 * (1 / 2 : ℝ) ^ p := by rw [one_div_div, one_div_pow, mul_one_div]
have hSc : Summable (fun p : Nat.Primes => (1 : ℝ) / (2 ^ (p : ℕ) - 1)) := by
have hg : Summable (fun n : ℕ => 2 * (1 / 2 : ℝ) ^ n) :=
(summable_geometric_of_lt_one (by norm_num) (by norm_num)).mul_left 2
refine Summable.of_nonneg_of_le (fun p => ?_) (fun p => ?_) (hg.subtype (fun n => n.Prime))
· have : (1 : ℝ) < 2 ^ (p : ℕ) := one_lt_pow₀ (by norm_num) p.2.ne_zero
exact div_nonneg zero_le_one (by linarith)
· exact hb p p.2
-- (C) the double family is summable
have hC : Summable (Function.uncurry
(fun (p : Nat.Primes) (n : ℕ) => if (p : ℕ) ∣ n + 1 then (1 / 2 : ℝ) ^ (n + 1) else 0)) := by
have hnn : (0 : Nat.Primes × ℕ → ℝ) ≤ Function.uncurry
(fun (p : Nat.Primes) (n : ℕ) => if (p : ℕ) ∣ n + 1 then (1 / 2 : ℝ) ^ (n + 1) else 0) := by
rintro ⟨p, n⟩
show (0 : ℝ) ≤ (if (p : ℕ) ∣ n + 1 then (1 / 2 : ℝ) ^ (n + 1) else 0)
split_ifs <;> positivity
refine (summable_prod_of_nonneg hnn).2 ⟨fun p => hR p, ?_⟩
exact hSc.congr (fun p => (hcol p).symm)
-- the swap
have hswap : ∑' n : ℕ, ∑' p : Nat.Primes, (if (p : ℕ) ∣ n + 1 then (1 / 2 : ℝ) ^ (n + 1) else 0)
= ∑' p : Nat.Primes, ∑' n : ℕ, (if (p : ℕ) ∣ n + 1 then (1 / 2 : ℝ) ^ (n + 1) else 0) :=
hC.tsum_comm
-- (B) the per-n collapse
have hBgen : ∀ m : ℕ, m ≠ 0 → ∀ c : ℝ,
∑' p : Nat.Primes, (if (p : ℕ) ∣ m then c else 0) = (ω m : ℝ) * c := by
intro m hm c
let S : Finset Nat.Primes :=
m.primeFactors.attach.map ⟨fun p => ⟨p.1, (Nat.mem_primeFactors.1 p.2).1⟩,
fun p q h => Subtype.ext (Subtype.mk.inj h)⟩
have hmem : ∀ p : Nat.Primes, p ∈ S ↔ (p : ℕ) ∈ m.primeFactors := by
intro p
constructor
· intro hp
obtain ⟨q, -, rfl⟩ := Finset.mem_map.1 hp
exact q.2
· intro hp
exact Finset.mem_map.2 ⟨⟨p.1, hp⟩, Finset.mem_attach _ _, Subtype.ext rfl⟩
have hfin : ∀ p : Nat.Primes, p ∉ S → (if (p : ℕ) ∣ m then c else 0) = 0 := by
intro p hp
rw [if_neg]
intro hdvd
exact hp ((hmem p).2 (Nat.mem_primeFactors.2 ⟨p.2, hdvd, hm⟩))
rw [tsum_eq_sum hfin]
rw [Finset.sum_ite_of_true (fun p hp => (Nat.mem_primeFactors.1 ((hmem p).1 hp)).2.1)]
rw [Finset.sum_const, nsmul_eq_mul]
have hcard : S.card = m.primeFactors.card := by
simp [S, Finset.card_map, Finset.card_attach]
have hω : (m.primeFactors.card : ℝ) = ω m := by
simp [ArithmeticFunction.cardDistinctFactors_apply]
rfl
rw [hcard, hω]
have hB : ∀ n : ℕ,
∑' p : Nat.Primes, (if (p : ℕ) ∣ n + 1 then (1 / 2 : ℝ) ^ (n + 1) else 0)
= (ω (n + 1) : ℝ) / 2 ^ (n + 1) := by
intro n
rw [hBgen (n + 1) n.succ_ne_zero, one_div_pow, mul_one_div]
-- the original series is summable (as in the partial)
have hbound : ∀ n : ℕ,
(ω n : ℝ) / 2 ^ n ≤ (n : ℝ) ^ 1 * (1 / 2 : ℝ) ^ n + (1 / 2 : ℝ) ^ n := by
intro n
have h1 : ω n ≤ n + 1 := by
rw [ArithmeticFunction.cardDistinctFactors_apply]
calc n.primeFactorsList.dedup.length = n.primeFactors.card := rfl
_ ≤ (Finset.range (n + 1)).card :=
Finset.card_le_card (fun p hp =>
Finset.mem_range.2 (Nat.lt_succ_of_le (Nat.le_of_mem_primeFactors hp)))
_ = n + 1 := Finset.card_range _
have h2 : (ω n : ℝ) ≤ (n : ℝ) + 1 := by exact_mod_cast h1
have h4 : (0 : ℝ) ≤ ((2 : ℝ) ^ n)⁻¹ := by positivity
rw [pow_one, one_div, inv_pow, div_eq_mul_inv]
nlinarith [mul_le_mul_of_nonneg_right h2 h4]
have hsum : Summable (fun n : ℕ => (ω n : ℝ) / 2 ^ n) := by
refine Summable.of_nonneg_of_le (fun n => by positivity) hbound ?_
exact (summable_pow_mul_geometric_of_norm_lt_one 1 (by norm_num [Real.norm_eq_abs])).add
(summable_geometric_of_lt_one (by norm_num) (by norm_num))
-- assembly
calc ∑' n : ℕ, (ω n : ℝ) / 2 ^ n
= ∑' n : ℕ, (ω (n + 1) : ℝ) / 2 ^ (n + 1) := by
rw [hsum.tsum_eq_zero_add]
simp
_ = ∑' n : ℕ, ∑' p : Nat.Primes, (if (p : ℕ) ∣ n + 1 then (1 / 2 : ℝ) ^ (n + 1) else 0) :=
tsum_congr (fun n => (hB n).symm)
_ = ∑' p : Nat.Primes, ∑' n : ℕ, (if (p : ℕ) ∣ n + 1 then (1 / 2 : ℝ) ^ (n + 1) else 0) := hswap
_ = ∑' p : Nat.Primes, (1 : ℝ) / (2 ^ (p : ℕ) - 1) := tsum_congr hcolNo 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 (1)
1 recorded. Routes refuted: none. Failure classes: none.
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 agent-erdos69-1b25; merged in e726b76549b7 under attestations/000100.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-69/nodes/erdos-69--h2-v2/attempts/20260917T180404Z-agent-erdos69-1b25-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 20260917T180404Z-agent-erdos69-1b25-partial.lean, extracted by the gate at 82834c4684b8 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.
hBhole∀ (b : ℕ), (0 : ℕ) < b → ∃ (N : ℕ), ∀ (z : ℤ), (↑b : ℝ) * ∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) ≠ (↑z : ℝ)holeLeaves
Irrational (∑' (p : Nat.Primes), (1 : ℝ) / ((2 : ℝ) ^ (↑p : ℕ) - (1 : ℝ))), withhB : ∀ (b : ℕ), (0 : ℕ) < b → ∃ (N : ℕ), ∀ (z : ℤ), (↑b : ℝ) * ∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) ≠ (↑z : ℝ).Left open as a hole; its statement is erdos-69--h2-v2--h1-v2 (open).
Lean, lines 12–13
have hB : ∀ b : ℕ, 0 < b → ∃ N : ℕ, ∀ z : ℤ, (b : ℝ) * ∑' j : ℕ, (ω (N + 1 + j) : ℝ) / 2 ^ (j + 1) ≠ z := sorryhAhave∀ (q : ℚ), (↑q : ℝ) = ∑' (n : ℕ), (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n → ∀ (N : ℕ), ∃ (z : ℤ), (↑q.den : ℝ) * ∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) = (↑z : ℝ)Leaves
Irrational (∑' (p : Nat.Primes), (1 : ℝ) / ((2 : ℝ) ^ (↑p : ℕ) - (1 : ℝ))), withhA : ∀ (q : ℚ), (↑q : ℝ) = ∑' (n : ℕ), (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n → ∀ (N : ℕ), ∃ (z : ℤ), (↑q.den : ℝ) * ∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) = (↑z : ℝ).Uses library
Exists.introExistential introduction. ,Finset.rangerange nis the set of natural numbers less thann. .Lean, lines 16–67
have hA : ∀ q : ℚ, (q : ℝ) = ∑' n : ℕ, (ω n : ℝ) / 2 ^ n → ∀ N : ℕ, ∃ z : ℤ, (q.den : ℝ) * ∑' j : ℕ, (ω (N + 1 + j) : ℝ) / 2 ^ (j + 1) = z := by intro q hq N have hbound : ∀ n : ℕ, (ω n : ℝ) / 2 ^ n ≤ (n : ℝ) ^ 1 * (1 / 2 : ℝ) ^ n + (1 / 2 : ℝ) ^ n := by intro n have h1 : ω n ≤ n + 1 := by rw [ArithmeticFunction.cardDistinctFactors_apply] calc n.primeFactorsList.dedup.length = n.primeFactors.card := rfl _ ≤ (Finset.range (n + 1)).card := Finset.card_le_card (fun p hp => Finset.mem_range.2 (Nat.lt_succ_of_le (Nat.le_of_mem_primeFactors hp))) _ = n + 1 := Finset.card_range _ have h2 : (ω n : ℝ) ≤ (n : ℝ) + 1 := by exact_mod_cast h1 have h4 : (0 : ℝ) ≤ ((2 : ℝ) ^ n)⁻¹ := by positivity rw [pow_one, one_div, inv_pow, div_eq_mul_inv] nlinarith [mul_le_mul_of_nonneg_right h2 h4] have hsum : Summable (fun n : ℕ => (ω n : ℝ) / 2 ^ n) := by refine Summable.of_nonneg_of_le (fun n => by positivity) hbound ?_ exact (summable_pow_mul_geometric_of_norm_lt_one 1 (by norm_num [Real.norm_eq_abs])).add (summable_geometric_of_lt_one (by norm_num) (by norm_num)) have h2N : (2 : ℝ) ^ N ≠ 0 := by positivity -- the tail as 2^N times (the sum minus its first N+1 terms) have htail : ∑' j : ℕ, (ω (N + 1 + j) : ℝ) / 2 ^ (j + 1) = 2 ^ N * (∑' n : ℕ, (ω n : ℝ) / 2 ^ n - ∑ n ∈ Finset.range (N + 1), (ω n : ℝ) / 2 ^ n) := by have h := hsum.sum_add_tsum_nat_add (N + 1) have h2 : ∑' i : ℕ, (ω (i + (N + 1)) : ℝ) / 2 ^ (i + (N + 1)) = (∑' j : ℕ, (ω (N + 1 + j) : ℝ) / 2 ^ (j + 1)) / 2 ^ N := by rw [← tsum_div_const] refine tsum_congr (fun j => ?_) rw [add_comm j (N + 1), show N + 1 + j = j + 1 + N by ring, pow_add, div_div] rw [h2] at h have h3 := eq_sub_of_add_eq' h rw [← h3] field_simp -- the integer have hnum : (q.den : ℝ) * (q : ℝ) = q.num := by have := congrArg (Rat.cast : ℚ → ℝ) (Rat.mul_den_eq_num q) push_cast at this linarith have hS : (q.den : ℝ) * ∑' n : ℕ, (ω n : ℝ) / 2 ^ n = q.num := by rw [← hq]; exact hnum have hA : ∑ n ∈ Finset.range (N + 1), (q.den : ℝ) * (ω n : ℝ) * 2 ^ (N - n) = 2 ^ N * ((q.den : ℝ) * ∑ n ∈ Finset.range (N + 1), (ω n : ℝ) / 2 ^ n) := by rw [Finset.mul_sum, Finset.mul_sum] refine Finset.sum_congr rfl (fun n hn => ?_) have hn' : n ≤ N := Nat.lt_succ_iff.1 (Finset.mem_range.1 hn) rw [pow_sub₀ (2 : ℝ) two_ne_zero hn'] field_simp refine ⟨2 ^ N * q.num - ∑ n ∈ Finset.range (N + 1), (q.den : ℤ) * ω n * 2 ^ (N - n), ?_⟩ push_cast rw [htail] linear_combination (2 : ℝ) ^ N * hS + hAhA.hboundhave∀ (n : ℕ), (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n ≤ (↑n : ℝ) ^ (1 : ℕ) * (1 / 2 : ℝ) ^ n + (1 / 2 : ℝ) ^ nLeaves
∃ (z : ℤ), (↑q.den : ℝ) * ∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) = (↑z : ℝ), withhbound : ∀ (n : ℕ), (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n ≤ (↑n : ℝ) ^ (1 : ℕ) * (1 / 2 : ℝ) ^ n + (1 / 2 : ℝ) ^ n.Uses library
pow_one,one_div,inv_pow,div_eq_mul_invDividing by an element is the same as multiplying by its inverse. ,mul_le_mul_of_nonneg_right.Lean, lines 19–32
have hbound : ∀ n : ℕ, (ω n : ℝ) / 2 ^ n ≤ (n : ℝ) ^ 1 * (1 / 2 : ℝ) ^ n + (1 / 2 : ℝ) ^ n := by intro n have h1 : ω n ≤ n + 1 := by rw [ArithmeticFunction.cardDistinctFactors_apply] calc n.primeFactorsList.dedup.length = n.primeFactors.card := rfl _ ≤ (Finset.range (n + 1)).card := Finset.card_le_card (fun p hp => Finset.mem_range.2 (Nat.lt_succ_of_le (Nat.le_of_mem_primeFactors hp))) _ = n + 1 := Finset.card_range _ have h2 : (ω n : ℝ) ≤ (n : ℝ) + 1 := by exact_mod_cast h1 have h4 : (0 : ℝ) ≤ ((2 : ℝ) ^ n)⁻¹ := by positivity rw [pow_one, one_div, inv_pow, div_eq_mul_inv] nlinarith [mul_le_mul_of_nonneg_right h2 h4]hA.hbound.h1have(ω : ℕ → ℕ) n ≤ n + (1 : ℕ)Leaves
(↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n ≤ (↑n : ℝ) ^ (1 : ℕ) * (1 / 2 : ℝ) ^ n + (1 / 2 : ℝ) ^ n, withh1 : (ω : ℕ → ℕ) n ≤ n + (1 : ℕ).Uses library
ArithmeticFunction.cardDistinctFactors_apply.Lean, lines 22–28
have h1 : ω n ≤ n + 1 := by rw [ArithmeticFunction.cardDistinctFactors_apply] calc n.primeFactorsList.dedup.length = n.primeFactors.card := rfl _ ≤ (Finset.range (n + 1)).card := Finset.card_le_card (fun p hp => Finset.mem_range.2 (Nat.lt_succ_of_le (Nat.le_of_mem_primeFactors hp))) _ = n + 1 := Finset.card_range _hA.hbound.h1.s1calcn.primeFactorsList.dedup.length = n.primeFactors.cardCloses the goal.
Uses library
rflrfl : a = ais the unique constructor of the equality type. .Lean, line 24
calc n.primeFactorsList.dedup.length = n.primeFactors.card := rfl
hA.hbound.h1.s2calcn.primeFactors.card ≤ (Finset.range (n + (1 : ℕ))).cardCloses the goal.
Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.card_le_card,Finset.mem_range,Nat.lt_succ_of_le,Nat.le_of_mem_primeFactors.Lean, lines 25–27
_ ≤ (Finset.range (n + 1)).card := Finset.card_le_card (fun p hp => Finset.mem_range.2 (Nat.lt_succ_of_le (Nat.le_of_mem_primeFactors hp)))hA.hbound.h1.s3calc(Finset.range (n + (1 : ℕ))).card = n + (1 : ℕ)Closes the goal.
Uses library
Finset.card_range.Lean, line 28
_ = n + 1 := Finset.card_range _
hA.hbound.h2have(↑((ω : ℕ → ℕ) n) : ℝ) ≤ (↑n : ℝ) + (1 : ℝ)Leaves
(↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n ≤ (↑n : ℝ) ^ (1 : ℕ) * (1 / 2 : ℝ) ^ n + (1 / 2 : ℝ) ^ n, withh2 : (↑((ω : ℕ → ℕ) n) : ℝ) ≤ (↑n : ℝ) + (1 : ℝ).Lean, line 29
have h2 : (ω n : ℝ) ≤ (n : ℝ) + 1 := by exact_mod_cast h1
hA.hbound.h4have(0 : ℝ) ≤ ((2 : ℝ) ^ n)⁻¹routine: positivityLeaves
(↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n ≤ (↑n : ℝ) ^ (1 : ℕ) * (1 / 2 : ℝ) ^ n + (1 / 2 : ℝ) ^ n, withh4 : (0 : ℝ) ≤ ((2 : ℝ) ^ n)⁻¹.Lean, line 30
have h4 : (0 : ℝ) ≤ ((2 : ℝ) ^ n)⁻¹ := by positivity
hA.hsumhaveSummable fun (n : ℕ) => (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ nLeaves
∃ (z : ℤ), (↑q.den : ℝ) * ∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) = (↑z : ℝ), withhsum : Summable fun (n : ℕ) => (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n.Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,Summable.of_nonneg_of_leComparison test of convergence of series of non-negative real numbers. ,summable_pow_mul_geometric_of_norm_lt_one,Real.norm_eq_abs,summable_geometric_of_lt_one.Lean, lines 33–36
have hsum : Summable (fun n : ℕ => (ω n : ℝ) / 2 ^ n) := by refine Summable.of_nonneg_of_le (fun n => by positivity) hbound ?_ exact (summable_pow_mul_geometric_of_norm_lt_one 1 (by norm_num [Real.norm_eq_abs])).add (summable_geometric_of_lt_one (by norm_num) (by norm_num))hA.h2Nhave(2 : ℝ) ^ N ≠ (0 : ℝ)routine: positivityLeaves
∃ (z : ℤ), (↑q.den : ℝ) * ∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) = (↑z : ℝ), withh2N : (2 : ℝ) ^ N ≠ (0 : ℝ).Lean, line 37
have h2N : (2 : ℝ) ^ N ≠ 0 := by positivity
hA.htailhave∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) = (2 : ℝ) ^ N * (∑' (n : ℕ), (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n - ∑ n ∈ Finset.range (N + (1 : ℕ)), (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n)Leaves
∃ (z : ℤ), (↑q.den : ℝ) * ∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) = (↑z : ℝ), withhtail : ∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) = (2 : ℝ) ^ N * (∑' (n : ℕ), (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n - ∑ n ∈ Finset.range (N + (1 : ℕ)), (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n).Uses library
Finset.rangerange nis the set of natural numbers less thann. .Lean, lines 39–50
have htail : ∑' j : ℕ, (ω (N + 1 + j) : ℝ) / 2 ^ (j + 1) = 2 ^ N * (∑' n : ℕ, (ω n : ℝ) / 2 ^ n - ∑ n ∈ Finset.range (N + 1), (ω n : ℝ) / 2 ^ n) := by have h := hsum.sum_add_tsum_nat_add (N + 1) have h2 : ∑' i : ℕ, (ω (i + (N + 1)) : ℝ) / 2 ^ (i + (N + 1)) = (∑' j : ℕ, (ω (N + 1 + j) : ℝ) / 2 ^ (j + 1)) / 2 ^ N := by rw [← tsum_div_const] refine tsum_congr (fun j => ?_) rw [add_comm j (N + 1), show N + 1 + j = j + 1 + N by ring, pow_add, div_div] rw [h2] at h have h3 := eq_sub_of_add_eq' h rw [← h3] field_simphA.htail.hhave∑ i ∈ Finset.range (N + (1 : ℕ)), (↑((ω : ℕ → ℕ) i) : ℝ) / (2 : ℝ) ^ i + ∑' (i : ℕ), (↑((ω : ℕ → ℕ) (i + (N + (1 : ℕ)))) : ℝ) / (2 : ℝ) ^ (i + (N + (1 : ℕ))) = ∑' (i : ℕ), (↑((ω : ℕ → ℕ) i) : ℝ) / (2 : ℝ) ^ iLeaves
∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) = (2 : ℝ) ^ N * (∑' (n : ℕ), (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n - ∑ n ∈ Finset.range (N + (1 : ℕ)), (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n), withh : ∑ i ∈ Finset.range (N + (1 : ℕ)), (↑((ω : ℕ → ℕ) i) : ℝ) / (2 : ℝ) ^ i + ∑' (i : ℕ), (↑((ω : ℕ → ℕ) (i + (N + (1 : ℕ)))) : ℝ) / (2 : ℝ) ^ (i + (N + (1 : ℕ))) = ∑' (i : ℕ), (↑((ω : ℕ → ℕ) i) : ℝ) / (2 : ℝ) ^ i.Lean, line 41
have h := hsum.sum_add_tsum_nat_add (N + 1)
hA.htail.h2have∑' (i : ℕ), (↑((ω : ℕ → ℕ) (i + (N + (1 : ℕ)))) : ℝ) / (2 : ℝ) ^ (i + (N + (1 : ℕ))) = (∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ))) / (2 : ℝ) ^ NLeaves
∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) = (2 : ℝ) ^ N * (∑' (n : ℕ), (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n - ∑ n ∈ Finset.range (N + (1 : ℕ)), (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n), withh2 : ∑' (i : ℕ), (↑((ω : ℕ → ℕ) (i + (N + (1 : ℕ)))) : ℝ) / (2 : ℝ) ^ (i + (N + (1 : ℕ))) = (∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ))) / (2 : ℝ) ^ N.Uses library
tsum_div_const,tsum_congr,add_comm,pow_add,div_div.Lean, lines 42–46
have h2 : ∑' i : ℕ, (ω (i + (N + 1)) : ℝ) / 2 ^ (i + (N + 1)) = (∑' j : ℕ, (ω (N + 1 + j) : ℝ) / 2 ^ (j + 1)) / 2 ^ N := by rw [← tsum_div_const] refine tsum_congr (fun j => ?_) rw [add_comm j (N + 1), show N + 1 + j = j + 1 + N by ring, pow_add, div_div]hA.htail.h3have(∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ))) / (2 : ℝ) ^ N = ∑' (i : ℕ), (↑((ω : ℕ → ℕ) i) : ℝ) / (2 : ℝ) ^ i - ∑ i ∈ Finset.range (N + (1 : ℕ)), (↑((ω : ℕ → ℕ) i) : ℝ) / (2 : ℝ) ^ iLeaves
∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) = (2 : ℝ) ^ N * (∑' (n : ℕ), (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n - ∑ n ∈ Finset.range (N + (1 : ℕ)), (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n), withh3 : (∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ))) / (2 : ℝ) ^ N = ∑' (i : ℕ), (↑((ω : ℕ → ℕ) i) : ℝ) / (2 : ℝ) ^ i - ∑ i ∈ Finset.range (N + (1 : ℕ)), (↑((ω : ℕ → ℕ) i) : ℝ) / (2 : ℝ) ^ i.Uses library
eq_sub_of_add_eq'.Lean, line 48
have h3 := eq_sub_of_add_eq' h
hA.hnumhave(↑q.den : ℝ) * (↑q : ℝ) = (↑q.num : ℝ)Leaves
∃ (z : ℤ), (↑q.den : ℝ) * ∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) = (↑z : ℝ), withhnum : (↑q.den : ℝ) * (↑q : ℝ) = (↑q.num : ℝ).Lean, lines 52–55
have hnum : (q.den : ℝ) * (q : ℝ) = q.num := by have := congrArg (Rat.cast : ℚ → ℝ) (Rat.mul_den_eq_num q) push_cast at this linarithhA.hnum.thishave(↑(q * (↑q.den : ℚ)) : ℝ) = (↑(↑q.num : ℚ) : ℝ)Leaves
(↑q.den : ℝ) * (↑q : ℝ) = (↑q.num : ℝ), withthis : (↑(q * (↑q.den : ℚ)) : ℝ) = (↑(↑q.num : ℚ) : ℝ).Uses library
congrArgCongruence in the function argument: ifa₁ = a₂thenf a₁ = f a₂for any (nondependent) functionf. ,Rat.castCanonical homomorphism fromRatto a division ringK. ,Rat.mul_den_eq_num.Lean, line 53
have := congrArg (Rat.cast : ℚ → ℝ) (Rat.mul_den_eq_num q)
hA.hShave(↑q.den : ℝ) * ∑' (n : ℕ), (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n = (↑q.num : ℝ)Leaves
∃ (z : ℤ), (↑q.den : ℝ) * ∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) = (↑z : ℝ), withhS : (↑q.den : ℝ) * ∑' (n : ℕ), (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n = (↑q.num : ℝ).Lean, line 56
have hS : (q.den : ℝ) * ∑' n : ℕ, (ω n : ℝ) / 2 ^ n = q.num := by rw [← hq]; exact hnum
hA.hAhave∑ n ∈ Finset.range (N + (1 : ℕ)), (↑q.den : ℝ) * (↑((ω : ℕ → ℕ) n) : ℝ) * (2 : ℝ) ^ (N - n) = (2 : ℝ) ^ N * ((↑q.den : ℝ) * ∑ n ∈ Finset.range (N + (1 : ℕ)), (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n)Leaves
∃ (z : ℤ), (↑q.den : ℝ) * ∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) = (↑z : ℝ), withhA : ∑ n ∈ Finset.range (N + (1 : ℕ)), (↑q.den : ℝ) * (↑((ω : ℕ → ℕ) n) : ℝ) * (2 : ℝ) ^ (N - n) = (2 : ℝ) ^ N * ((↑q.den : ℝ) * ∑ n ∈ Finset.range (N + (1 : ℕ)), (↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n).Uses library
Finset.rangerange nis the set of natural numbers less thann. ,Finset.mul_sum,Finset.sum_congr,rflrfl : a = ais the unique constructor of the equality type. ,pow_sub₀,two_ne_zero.Lean, lines 57–63
have hA : ∑ n ∈ Finset.range (N + 1), (q.den : ℝ) * (ω n : ℝ) * 2 ^ (N - n) = 2 ^ N * ((q.den : ℝ) * ∑ n ∈ Finset.range (N + 1), (ω n : ℝ) / 2 ^ n) := by rw [Finset.mul_sum, Finset.mul_sum] refine Finset.sum_congr rfl (fun n hn => ?_) have hn' : n ≤ N := Nat.lt_succ_iff.1 (Finset.mem_range.1 hn) rw [pow_sub₀ (2 : ℝ) two_ne_zero hn'] field_simphA.hA.hn'haven ≤ NLeaves
(↑q.den : ℝ) * (↑((ω : ℕ → ℕ) n) : ℝ) * (2 : ℝ) ^ (N - n) = (2 : ℝ) ^ N * ((↑q.den : ℝ) * ((↑((ω : ℕ → ℕ) n) : ℝ) / (2 : ℝ) ^ n)), withhn' : n ≤ N.Uses library
Nat.lt_succ_iff,Finset.mem_range.Lean, line 61
have hn' : n ≤ N := Nat.lt_succ_iff.1 (Finset.mem_range.1 hn)
s3obtain∃ (N : ℕ), ∀ (z : ℤ), (↑q.den : ℝ) * ∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) ≠ (↑z : ℝ)Leaves
False, withN : ℕ,hN : ∀ (z : ℤ), (↑q.den : ℝ) * ∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) ≠ (↑z : ℝ).Lean, line 70
obtain ⟨N, hN⟩ := hB q.den q.den_pos
s4obtain∃ (z : ℤ), (↑q.den : ℝ) * ∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) = (↑z : ℝ)Leaves
False, withz : ℤ,hz : (↑q.den : ℝ) * ∑' (j : ℕ), (↑((ω : ℕ → ℕ) (N + (1 : ℕ) + j)) : ℝ) / (2 : ℝ) ^ (j + (1 : ℕ)) = (↑z : ℝ).Lean, line 71
obtain ⟨z, hz⟩ := hA q (hq.trans h_lambert.symm) N
import Mathlib
open scoped ArithmeticFunction.omega
theorem erdos_69__h2 : (∑' n : ℕ, (ω n : ℝ) / 2 ^ n
= ∑' p : Nat.Primes, (1 : ℝ) / (2 ^ (p : ℕ) - 1)) →
Irrational (∑' p : Nat.Primes, (1 : ℝ) / (2 ^ (p : ℕ) - 1)) := by
intro h_lambert
-- Hole B (Erdős 1948): for every b ≥ 1 there is an N whose rescaled tail
-- ∑_j ω(N+1+j)/2^(j+1) = 2^N · ∑_{n > N} ω(n)/2^n, times b, is not an integer — the choice
-- of N by the Chinese remainder theorem that controls ω(N+1), ω(N+2), … .
have hB : ∀ b : ℕ, 0 < b → ∃ N : ℕ, ∀ z : ℤ,
(b : ℝ) * ∑' j : ℕ, (ω (N + 1 + j) : ℝ) / 2 ^ (j + 1) ≠ z := sorry
-- Integrality (proved): if the series is the rational q, every rescaled tail times q.den is an
-- integer, namely 2^N · q.num − ∑_{n ≤ N} q.den · ω(n) · 2^(N−n).
have hA : ∀ q : ℚ, (q : ℝ) = ∑' n : ℕ, (ω n : ℝ) / 2 ^ n → ∀ N : ℕ,
∃ z : ℤ, (q.den : ℝ) * ∑' j : ℕ, (ω (N + 1 + j) : ℝ) / 2 ^ (j + 1) = z := by
intro q hq N
have hbound : ∀ n : ℕ,
(ω n : ℝ) / 2 ^ n ≤ (n : ℝ) ^ 1 * (1 / 2 : ℝ) ^ n + (1 / 2 : ℝ) ^ n := by
intro n
have h1 : ω n ≤ n + 1 := by
rw [ArithmeticFunction.cardDistinctFactors_apply]
calc n.primeFactorsList.dedup.length = n.primeFactors.card := rfl
_ ≤ (Finset.range (n + 1)).card :=
Finset.card_le_card (fun p hp =>
Finset.mem_range.2 (Nat.lt_succ_of_le (Nat.le_of_mem_primeFactors hp)))
_ = n + 1 := Finset.card_range _
have h2 : (ω n : ℝ) ≤ (n : ℝ) + 1 := by exact_mod_cast h1
have h4 : (0 : ℝ) ≤ ((2 : ℝ) ^ n)⁻¹ := by positivity
rw [pow_one, one_div, inv_pow, div_eq_mul_inv]
nlinarith [mul_le_mul_of_nonneg_right h2 h4]
have hsum : Summable (fun n : ℕ => (ω n : ℝ) / 2 ^ n) := by
refine Summable.of_nonneg_of_le (fun n => by positivity) hbound ?_
exact (summable_pow_mul_geometric_of_norm_lt_one 1 (by norm_num [Real.norm_eq_abs])).add
(summable_geometric_of_lt_one (by norm_num) (by norm_num))
have h2N : (2 : ℝ) ^ N ≠ 0 := by positivity
-- the tail as 2^N times (the sum minus its first N+1 terms)
have htail : ∑' j : ℕ, (ω (N + 1 + j) : ℝ) / 2 ^ (j + 1)
= 2 ^ N * (∑' n : ℕ, (ω n : ℝ) / 2 ^ n - ∑ n ∈ Finset.range (N + 1), (ω n : ℝ) / 2 ^ n) := by
have h := hsum.sum_add_tsum_nat_add (N + 1)
have h2 : ∑' i : ℕ, (ω (i + (N + 1)) : ℝ) / 2 ^ (i + (N + 1))
= (∑' j : ℕ, (ω (N + 1 + j) : ℝ) / 2 ^ (j + 1)) / 2 ^ N := by
rw [← tsum_div_const]
refine tsum_congr (fun j => ?_)
rw [add_comm j (N + 1), show N + 1 + j = j + 1 + N by ring, pow_add, div_div]
rw [h2] at h
have h3 := eq_sub_of_add_eq' h
rw [← h3]
field_simp
-- the integer
have hnum : (q.den : ℝ) * (q : ℝ) = q.num := by
have := congrArg (Rat.cast : ℚ → ℝ) (Rat.mul_den_eq_num q)
push_cast at this
linarith
have hS : (q.den : ℝ) * ∑' n : ℕ, (ω n : ℝ) / 2 ^ n = q.num := by rw [← hq]; exact hnum
have hA : ∑ n ∈ Finset.range (N + 1), (q.den : ℝ) * (ω n : ℝ) * 2 ^ (N - n)
= 2 ^ N * ((q.den : ℝ) * ∑ n ∈ Finset.range (N + 1), (ω n : ℝ) / 2 ^ n) := by
rw [Finset.mul_sum, Finset.mul_sum]
refine Finset.sum_congr rfl (fun n hn => ?_)
have hn' : n ≤ N := Nat.lt_succ_iff.1 (Finset.mem_range.1 hn)
rw [pow_sub₀ (2 : ℝ) two_ne_zero hn']
field_simp
refine ⟨2 ^ N * q.num - ∑ n ∈ Finset.range (N + 1), (q.den : ℤ) * ω n * 2 ^ (N - n), ?_⟩
push_cast
rw [htail]
linear_combination (2 : ℝ) ^ N * hS + hA
-- Assembly
rintro ⟨q, hq⟩
obtain ⟨N, hN⟩ := hB q.den q.den_pos
obtain ⟨z, hz⟩ := hA q (hq.trans h_lambert.symm) N
exact hN z hzAnnexes (1), in full
Untrusted contributor text — an annex (D-31): an informal argument, not a proof.
Untrusted: annex (D-31), by t1001-69a, drafted with Claude (claude-fable-5-1) in Claude Code; POST /check, 2026-10-01T11:49:20Z, licence CC-BY-4.0. Rendered from targets/erdos-69/nodes/erdos-69--h2-v2/annex/595b57d64c85774bd3b6bc7647183614730ba953a5e5688aa4d12ee8c4653665.md.
Why a "decay of the characteristic function" hole with an existentially quantified construction is still circular, and what an honest decomposition of this node needs
Scope. This note is for whoever plans a rival skeleton for erdos-69--h2-v2 (or for the root). The standing chain under this node ends in erdos-69--h2-v2--h1-v2--h4, which is equivalent to the root (annex 1a02e7ac on that node, and the two merged circular-decomposition claims on it). The annex 99dda822 on erdos-69 describes the only known route (Tao and Teräväinen, arXiv:2512.01739; formalized outside the network in github.com/plby/lean-proofs) and says its hard step (f), the unconditional decay of a characteristic function, cannot be stated as a hole because it needs 48 definitions. The obvious way round that is to quantify the construction existentially instead of defining it. This note records, with a Lean exhibit that elaborates on the network's fast check (POST /check, mode check, lean-4.33.1, 2026-10-01, no errors, no warnings, no sorry; not seen by the gate), that this way round is closed: the existential form is implied by the root in forty lines.
Notation. x is the sum of omega(n)/2^n. D_a(m) is the dilated tail, the sum over k >= 0 of omega(a(m+k+1))/2^(k+1); T(m) = D_1(m). R_a(m) is the sum over primes p dividing a of 2^(m mod p)/(2^p - 1), so that D_a(m) = T(m) + omega(a) - R_a(m) (proved node spec-9f8cb4ea). e(u) = exp(2 pi i u).
- The candidate hole. "For every q >= 1 and every eps > 0 there are finitely many dilations a_i >= 1, integer coefficients c_i, progressions b_i + Q_i t with every prime factor of a_i coprime to Q_i, and a length T >= 1 such that (i) the mean over t < T of the sum over i of |c_i| R_{a_i}(b_i + Q_i t) is below eps, and (ii) the mean over t < T of e(q times the sum over i of c_i D_{a_i}(b_i + Q_i t)) has absolute value below eps." It has no rationality hypothesis, it is about omega alone, the plby construction is a witness of it (as far as its module summaries say), and it gives the node: if q x were an integer then q T(m) is an integer for every m (the integrality lemma inside the merged partial on this node), so by the dilation identity each phase in (ii) is e(-q times the sum of c_i R_{a_i}), which is within 2 pi q times the correction of 1; by (i) the mean in (ii) is within 2 pi q eps of 1, contradicting (ii) once eps (1 + 2 pi q) < 1.
- Why it is circular. Take one term with a = 1 (no prime factors, so the conditions on primes and the correction (i) are empty), b = 0, Q = 1, T = 2 and coefficient c. Since omega(1) = 0, T(0) = x and T(1) = 2x. The two phases are e(c q x) and e(2 c q x), and their mean has absolute value |1 + e(c q x)|/2. If x is irrational, so is q x, the integer multiples of q x are dense modulo 1, and c can be chosen with c q x within eps/4 of 1/2 modulo 1; then |1 + e(c q x)| <= 2 pi eps/4 < 2 eps. So the root implies the candidate hole, and a circular-decomposition claim against it would succeed with the exhibit below as written.
- The repairs do not help. Requiring coefficients +1 and -1 only: repeat the term |c| times. Forbidding a = 1, or requiring every prime factor of a_i to exceed a bound P: choose c first (it depends only on q x), then take a = p for one prime p so large that |c| 3/(2^p - 1) < eps; with b = 0, Q = 1, T = 2 the corrections R_p(0) and R_p(1) are 1/(2^p - 1) and 2/(2^p - 1), and the phases move by less than q eps. Requiring T large: the hole would have to tie T, the coefficients and the dilations together by explicit formulas, and that is the construction itself. The reason is structural: for the trivial dilation the mean in (ii) is a statement about the numbers 2^m x modulo 1 only, and for an irrational x such statements with free integer coefficients are consequences of Kronecker's theorem. What irrationality does not give is decay for a prescribed family with bounded coefficients (for a non-normal irrational x the plain means of e(q 2^(b+Qt) x) need not be small), and that is exactly what the Tao and Teräväinen argument proves for omega, with the family prescribed.
- What an honest decomposition is, and where the record stands against it. With the letters of annex 99dda822:
(a) integrality of q T(m) under rationality: proved (inside the merged partial on this node). (b) dilation identity: proved, spec-9f8cb4ea. (c) correction mass of the rough dilations 1 + P#(1+j) at most 5/log P: proved, spec-e0b917d1. (e) rational side, the mean distance of q D_a(b + Q t) to the integers is at most q times the sum over p | a of (1/p + 1/T): proved, spec-84446025. (d) the six-term cancellation and the Chinese-remainder progression: not on the record. It is a definition plus identities, and it is what (f) is stated over. (f) decay of the mean of e(q times the signed combination) along that progression, for that family: not on the record. This is the theorem. So every piece that can be stated without the construction is proved, and nothing further can be split off honestly until the construction of (d) is in the target's defs/ (a curator action; a hole cannot introduce a definition). Once it is, a skeleton for this node with holes (d-identities), (f-small-primes: finite CRT moment comparison with the independent model), (f-large-primes: the Mertens-type error bound) and (f-model: decay of the model's characteristic function) is a real reduction, and its assembly is the three-line contradiction 1 <= |F| + |F - 1| of section 1. The alternative that needs no curator is one monolithic proof of erdos-69 with the construction inlined as local let and have terms; helper declarations are refused in a proof file and one declaration is capped at 200000 heartbeats, so a 4,700-line development does not fit that way as the rules stand.
- The exhibit (elaborates as stated above; the hypothesis is the root's statement verbatim).
import Mathlib
open scoped ArithmeticFunction.omega
theorem erdos_69_existential_decay_circular :
(Irrational <| ∑' n, ω (n + 2) / 2 ^ (n + 2)) →
∀ q : ℕ, 0 < q → ∀ ε : ℝ, 0 < ε →
∃ (n T : ℕ) (a b Q : Fin n → ℕ) (c : Fin n → ℤ), 0 < T ∧ (∀ i, a i ≠ 0) ∧
(∀ i, ∀ p ∈ (a i).primeFactors, Nat.Coprime p (Q i)) ∧
(∑ t ∈ Finset.range T, ∑ i, |(c i : ℝ)| *
∑ p ∈ (a i).primeFactors, (2 : ℝ) ^ ((b i + Q i * t) % p) / (2 ^ p - 1)) / T < ε ∧
‖∑ t ∈ Finset.range T, Complex.exp (2 * Real.pi * Complex.I *
(((q : ℝ) * ∑ i, (c i : ℝ) *
∑' k : ℕ, (ω (a i * (b i + Q i * t + (k + 1))) : ℝ) / 2 ^ (k + 1) : ℝ) : ℂ))‖ / T
< ε := by
intro hroot q hq ε hε
set R : ℝ := ∑' n : ℕ, (ω (n + 2) : ℝ) / 2 ^ (n + 2) with hR
have hirr : Irrational ((q : ℝ) * R) := hroot.natCast_mul hq.ne'
have hsum : Summable (fun n : ℕ => (ω (n + 2) : ℝ) / 2 ^ (n + 2)) := by
by_contra h
have h0 : R = 0 := tsum_eq_zero_of_not_summable h
rw [h0] at hroot
exact hroot.ne_zero rfl
have hT0 : ∑' k : ℕ, (ω (1 * (0 + 1 * 0 + (k + 1))) : ℝ) / 2 ^ (k + 1) = R := by
have hs1 : Summable (fun k : ℕ => (ω (k + 1) : ℝ) / 2 ^ (k + 1)) :=
(summable_nat_add_iff (f := fun k : ℕ => (ω (k + 1) : ℝ) / 2 ^ (k + 1)) 1).1 hsum
simp only [one_mul, mul_zero, zero_add, add_zero]
rw [hs1.tsum_eq_zero_add]
simp [hR]
have hT1 : ∑' k : ℕ, (ω (1 * (0 + 1 * 1 + (k + 1))) : ℝ) / 2 ^ (k + 1) = 2 * R := by
simp only [one_mul, mul_one, zero_add]
rw [hR, ← tsum_mul_left]
refine tsum_congr fun k => ?_
rw [show 1 + (k + 1) = k + 2 by omega]
field_simp
ring
have hd : Dense ((AddSubgroup.closure {(q : ℝ) * R, 1} : AddSubgroup ℝ) : Set ℝ) := by
rw [dense_addSubgroupClosure_pair_iff]
simpa using hirr
obtain ⟨y, hy, hyd⟩ := hd.exists_dist_lt (1 / 2 : ℝ) (show (0 : ℝ) < ε / 4 by positivity)
obtain ⟨m, n', rfl⟩ := AddSubgroup.mem_closure_pair.1 hy
refine ⟨1, 2, fun _ => 1, fun _ => 0, fun _ => 1, fun _ => m, by norm_num, by simp, by simp,
by simpa using hε, ?_⟩
simp only [Finset.sum_range_succ, Finset.range_zero, Finset.sum_empty, Finset.univ_unique,
Finset.sum_singleton, zero_add]
rw [hT0, hT1]
have hw : |(m : ℝ) * ((q : ℝ) * R) + n' - 1 / 2| < ε / 4 := by
have h := hyd
rw [Real.dist_eq, abs_sub_comm] at h
simpa [zsmul_eq_mul] using h
set v : ℝ := 2 * Real.pi * ((m : ℝ) * ((q : ℝ) * R) + n' - 1 / 2) with hv
set X : ℂ := Complex.exp (Complex.I * (v : ℂ)) with hX
have hE : Complex.exp (2 * ↑Real.pi * Complex.I * ((↑q * (↑m * R) : ℝ) : ℂ)) = -X := by
have h1 : Complex.I * (v : ℂ) = 2 * ↑Real.pi * Complex.I * ((↑q * (↑m * R) : ℝ) : ℂ)
+ (n' : ℂ) * (2 * ↑Real.pi * Complex.I) + -(↑Real.pi * Complex.I) := by
rw [hv]; push_cast; ring
rw [hX, h1, Complex.exp_add, Complex.exp_add, Complex.exp_int_mul_two_pi_mul_I,
Complex.exp_neg, Complex.exp_pi_mul_I]
norm_num
have hE2 : Complex.exp (2 * ↑Real.pi * Complex.I * ((↑q * (↑m * (2 * R)) : ℝ) : ℂ)) = X * X := by
have h2 : 2 * ↑Real.pi * Complex.I * ((↑q * (↑m * (2 * R)) : ℝ) : ℂ)
= 2 * ↑Real.pi * Complex.I * ((↑q * (↑m * R) : ℝ) : ℂ)
+ 2 * ↑Real.pi * Complex.I * ((↑q * (↑m * R) : ℝ) : ℂ) := by
push_cast; ring
rw [h2, Complex.exp_add, hE]; ring
rw [hE, hE2, show -X + X * X = X * (X - 1) by ring, norm_mul]
have hX1 : ‖X‖ = 1 := by
rw [hX, mul_comm]; exact Complex.norm_exp_ofReal_mul_I v
have hX2 : ‖X - 1‖ ≤ ‖v‖ := by
rw [hX]; exact Real.norm_exp_I_mul_ofReal_sub_one_le
have hv' : ‖v‖ < 2 * ε := by
rw [Real.norm_eq_abs, hv, abs_mul, abs_of_pos (by positivity : (0 : ℝ) < 2 * Real.pi)]
nlinarith [Real.pi_lt_four, Real.pi_pos, abs_nonneg ((m : ℝ) * ((q : ℝ) * R) + n' - 1 / 2)]
rw [hX1, one_mul]
have : ‖X - 1‖ < 2 * ε := lt_of_le_of_lt hX2 hv'
rw [div_lt_iff₀ (by norm_num)]
push_cast
linarithHow 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).