Problems / erdos-69 / spec-2e765953
Summability of the prime sum 1/(2^p - 1)
spec-2e765953 Opn.erdos_69_summable_prime_reciprocal
proved
Proposed by a contributor.
$\displaystyle \sum_{p\ \text{prime}}\frac{1}{2^{p}-1} < \infty$
The family p ↦ 1/(2^p − 1), indexed by the primes and valued in ℝ, is summable in Mathlib's sense (unconditionally; for a nonnegative real family this is ordinary convergence).
Lean
theorem Opn.erdos_69_summable_prime_reciprocal :
Summable (fun 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 was proved
Proved by Proof.lean, checked by the kernel. Its attestation, 000302, records the gate’s run.
The proof step by step (outline)
Checked by the kernel — an outline of the attested proof below: attestations/000302.json, merge commit f606a87ee3a9.
Outline of Proof.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.
hghaveSummable fun (n : ℕ) => (2 : ℝ) * (1 / 2 : ℝ) ^ nLeaves
Summable fun (p : Nat.Primes) => (1 : ℝ) / ((2 : ℝ) ^ (↑p : ℕ) - (1 : ℝ)), withhg : Summable fun (n : ℕ) => (2 : ℝ) * (1 / 2 : ℝ) ^ n.Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,summable_geometric_two.Lean, lines 8–9
have hg : Summable (fun n : ℕ => (2 : ℝ) * (1 / 2) ^ n) := summable_geometric_two.mul_left 2targets/erdos-69/nodes/spec-2e765953/Proof.lean, lines 8–9 at
f606a87ee3a9↗hsubhaveSummable fun (p : Nat.Primes) => (2 : ℝ) * (1 / 2 : ℝ) ^ (↑p : ℕ)Leaves
Summable fun (p : Nat.Primes) => (1 : ℝ) / ((2 : ℝ) ^ (↑p : ℕ) - (1 : ℝ)), withhsub : Summable fun (p : Nat.Primes) => (2 : ℝ) * (1 / 2 : ℝ) ^ (↑p : ℕ).Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,Nat.PrimesThe type of prime numbers ,Subtype.val_injective.Lean, lines 10–11
have hsub : Summable (fun p : Nat.Primes => (2 : ℝ) * (1 / 2) ^ (p : ℕ)) := hg.comp_injective Subtype.val_injectivetargets/erdos-69/nodes/spec-2e765953/Proof.lean, lines 10–11 at
f606a87ee3a9↗s3caseLeaves
(0 : ℝ) ≤ (1 : ℝ) / ((2 : ℝ) ^ (↑p : ℕ) - (1 : ℝ)).Lean, lines 13–15
· have h1 : (1 : ℝ) ≤ 2 ^ (p : ℕ) := one_le_pow₀ (by norm_num) have h0 : (0 : ℝ) ≤ 2 ^ (p : ℕ) - 1 := by linarith positivitytargets/erdos-69/nodes/spec-2e765953/Proof.lean, lines 13–15 at
f606a87ee3a9↗s3.h1have(1 : ℝ) ≤ (2 : ℝ) ^ (↑p : ℕ)Leaves
(0 : ℝ) ≤ (1 : ℝ) / ((2 : ℝ) ^ (↑p : ℕ) - (1 : ℝ)), withh1 : (1 : ℝ) ≤ (2 : ℝ) ^ (↑p : ℕ).Uses library
one_le_pow₀.Lean, line 13
· have h1 : (1 : ℝ) ≤ 2 ^ (p : ℕ) := one_le_pow₀ (by norm_num)
targets/erdos-69/nodes/spec-2e765953/Proof.lean, line 13 at
f606a87ee3a9↗s3.h0have(0 : ℝ) ≤ (2 : ℝ) ^ (↑p : ℕ) - (1 : ℝ)routine: linarithLeaves
(0 : ℝ) ≤ (1 : ℝ) / ((2 : ℝ) ^ (↑p : ℕ) - (1 : ℝ)), withh0 : (0 : ℝ) ≤ (2 : ℝ) ^ (↑p : ℕ) - (1 : ℝ).Lean, line 14
have h0 : (0 : ℝ) ≤ 2 ^ (p : ℕ) - 1 := by linarith
targets/erdos-69/nodes/spec-2e765953/Proof.lean, line 14 at
f606a87ee3a9↗
s4caseLeaves
(1 : ℝ) / ((2 : ℝ) ^ (↑p : ℕ) - (1 : ℝ)) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ (↑p : ℕ).Lean, lines 16–30
· have hp : 1 ≤ (p : ℕ) := p.2.one_lt.le have h2 : (2 : ℝ) ^ (p : ℕ) = 2 * 2 ^ ((p : ℕ) - 1) := by rw [← pow_succ'] congr 1 omega have hpos : (0 : ℝ) < 2 ^ ((p : ℕ) - 1) := by positivity have hden : (2 : ℝ) ^ ((p : ℕ) - 1) ≤ 2 ^ (p : ℕ) - 1 := by have h1 : (1 : ℝ) ≤ 2 ^ ((p : ℕ) - 1) := one_le_pow₀ (by norm_num) rw [h2] linarith calc (1 : ℝ) / (2 ^ (p : ℕ) - 1) ≤ 1 / 2 ^ ((p : ℕ) - 1) := one_div_le_one_div_of_le hpos hden _ = 2 * (1 / 2) ^ (p : ℕ) := by rw [one_div_pow, h2] field_simptargets/erdos-69/nodes/spec-2e765953/Proof.lean, lines 16–30 at
f606a87ee3a9↗s4.hphave(1 : ℕ) ≤ (↑p : ℕ)Leaves
(1 : ℝ) / ((2 : ℝ) ^ (↑p : ℕ) - (1 : ℝ)) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ (↑p : ℕ), withhp : (1 : ℕ) ≤ (↑p : ℕ).Lean, line 16
· have hp : 1 ≤ (p : ℕ) := p.2.one_lt.le
targets/erdos-69/nodes/spec-2e765953/Proof.lean, line 16 at
f606a87ee3a9↗s4.h2have(2 : ℝ) ^ (↑p : ℕ) = (2 : ℝ) * (2 : ℝ) ^ ((↑p : ℕ) - (1 : ℕ))Leaves
(1 : ℝ) / ((2 : ℝ) ^ (↑p : ℕ) - (1 : ℝ)) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ (↑p : ℕ), withh2 : (2 : ℝ) ^ (↑p : ℕ) = (2 : ℝ) * (2 : ℝ) ^ ((↑p : ℕ) - (1 : ℕ)).Uses library
pow_succ'.Lean, lines 17–20
have h2 : (2 : ℝ) ^ (p : ℕ) = 2 * 2 ^ ((p : ℕ) - 1) := by rw [← pow_succ'] congr 1 omegatargets/erdos-69/nodes/spec-2e765953/Proof.lean, lines 17–20 at
f606a87ee3a9↗s4.hposhave(0 : ℝ) < (2 : ℝ) ^ ((↑p : ℕ) - (1 : ℕ))routine: positivityLeaves
(1 : ℝ) / ((2 : ℝ) ^ (↑p : ℕ) - (1 : ℝ)) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ (↑p : ℕ), withhpos : (0 : ℝ) < (2 : ℝ) ^ ((↑p : ℕ) - (1 : ℕ)).Lean, line 21
have hpos : (0 : ℝ) < 2 ^ ((p : ℕ) - 1) := by positivity
targets/erdos-69/nodes/spec-2e765953/Proof.lean, line 21 at
f606a87ee3a9↗s4.hdenhave(2 : ℝ) ^ ((↑p : ℕ) - (1 : ℕ)) ≤ (2 : ℝ) ^ (↑p : ℕ) - (1 : ℝ)Leaves
(1 : ℝ) / ((2 : ℝ) ^ (↑p : ℕ) - (1 : ℝ)) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ (↑p : ℕ), withhden : (2 : ℝ) ^ ((↑p : ℕ) - (1 : ℕ)) ≤ (2 : ℝ) ^ (↑p : ℕ) - (1 : ℝ).Lean, lines 22–25
have hden : (2 : ℝ) ^ ((p : ℕ) - 1) ≤ 2 ^ (p : ℕ) - 1 := by have h1 : (1 : ℝ) ≤ 2 ^ ((p : ℕ) - 1) := one_le_pow₀ (by norm_num) rw [h2] linarithtargets/erdos-69/nodes/spec-2e765953/Proof.lean, lines 22–25 at
f606a87ee3a9↗s4.hden.h1have(1 : ℝ) ≤ (2 : ℝ) ^ ((↑p : ℕ) - (1 : ℕ))Leaves
(2 : ℝ) ^ ((↑p : ℕ) - (1 : ℕ)) ≤ (2 : ℝ) ^ (↑p : ℕ) - (1 : ℝ), withh1 : (1 : ℝ) ≤ (2 : ℝ) ^ ((↑p : ℕ) - (1 : ℕ)).Uses library
one_le_pow₀.Lean, line 23
have h1 : (1 : ℝ) ≤ 2 ^ ((p : ℕ) - 1) := one_le_pow₀ (by norm_num)
targets/erdos-69/nodes/spec-2e765953/Proof.lean, line 23 at
f606a87ee3a9↗
s4.s5calc(1 : ℝ) / ((2 : ℝ) ^ (↑p : ℕ) - (1 : ℝ)) ≤ (1 : ℝ) / (2 : ℝ) ^ ((↑p : ℕ) - (1 : ℕ))Closes the goal.
Uses library
one_div_le_one_div_of_le.Lean, lines 26–27
calc (1 : ℝ) / (2 ^ (p : ℕ) - 1) ≤ 1 / 2 ^ ((p : ℕ) - 1) := one_div_le_one_div_of_le hpos hdentargets/erdos-69/nodes/spec-2e765953/Proof.lean, lines 26–27 at
f606a87ee3a9↗s4.s6calcCloses the goal.
Uses library
one_div_pow.Lean, lines 28–30
_ = 2 * (1 / 2) ^ (p : ℕ) := by rw [one_div_pow, h2] field_simptargets/erdos-69/nodes/spec-2e765953/Proof.lean, lines 28–30 at
f606a87ee3a9↗
The proof in Lean (Proof.lean)
Checked by the kernel — these bytes are the ones its attestation names: attestations/000302.json, merge commit f606a87ee3a9.
artifact_hash of the attestation below, so these are the bytes the gate checked. Rendered from targets/erdos-69/nodes/spec-2e765953/Proof.lean, sha256 b34e84a4542b.import Mathlib
import Nodes.«spec-2e765953».Context
/-- The prime-indexed Lambert series of the root's identity converges: the sum over primes `p`
of `1 / (2 ^ p - 1)` is summable in ℝ. This is the right-hand side of `erdos-69--h1-v2`. -/
theorem Opn.erdos_69_summable_prime_reciprocal :
Summable (fun p : Nat.Primes => (1 : ℝ) / (2 ^ (p : ℕ) - 1)) := by
have hg : Summable (fun n : ℕ => (2 : ℝ) * (1 / 2) ^ n) :=
summable_geometric_two.mul_left 2
have hsub : Summable (fun p : Nat.Primes => (2 : ℝ) * (1 / 2) ^ (p : ℕ)) :=
hg.comp_injective Subtype.val_injective
refine Summable.of_nonneg_of_le (fun p => ?_) (fun p => ?_) hsub
· have h1 : (1 : ℝ) ≤ 2 ^ (p : ℕ) := one_le_pow₀ (by norm_num)
have h0 : (0 : ℝ) ≤ 2 ^ (p : ℕ) - 1 := by linarith
positivity
· have hp : 1 ≤ (p : ℕ) := p.2.one_lt.le
have h2 : (2 : ℝ) ^ (p : ℕ) = 2 * 2 ^ ((p : ℕ) - 1) := by
rw [← pow_succ']
congr 1
omega
have hpos : (0 : ℝ) < 2 ^ ((p : ℕ) - 1) := by positivity
have hden : (2 : ℝ) ^ ((p : ℕ) - 1) ≤ 2 ^ (p : ℕ) - 1 := by
have h1 : (1 : ℝ) ≤ 2 ^ ((p : ℕ) - 1) := one_le_pow₀ (by norm_num)
rw [h2]
linarith
calc (1 : ℝ) / (2 ^ (p : ℕ) - 1) ≤ 1 / 2 ^ ((p : ℕ) - 1) :=
one_div_le_one_div_of_le hpos hden
_ = 2 * (1 / 2) ^ (p : ℕ) := by
rw [one_div_pow, h2]
field_simpWhat is known
Work on it
No explainer yet. This proof written as a journal would print it, labelled unverified, is the next thing a writer could add, by pull request (D-3, D-36; the guide shows how).
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.«spec-2e765953».Context
/-- The prime-indexed Lambert series of the root's identity converges: the sum over primes `p`
of `1 / (2 ^ p - 1)` is summable in ℝ. This is the right-hand side of `erdos-69--h1-v2`. -/
theorem Opn.erdos_69_summable_prime_reciprocal :
Summable (fun 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 \sum_{p\ \text{prime}}\frac{1}{2^{p}-1} < \infty$
The family p ↦ 1/(2^p − 1), indexed by the primes and valued in ℝ, is summable in Mathlib's sense (unconditionally; for a nonnegative real family this is ordinary convergence).
Rendered from gloss/dbcb1e0b510c….md · Improve these words →
Rendered from targets/erdos-69/nodes/spec-2e765953/Statement.lean. Origin: authored.
Attestation: pass, 7 of 7 checks
Checked by the kernel — the gate’s record of the run: attestations/000302.json, merge commit f606a87ee3a9.
Verdict pass, from attestations/000302.json.
- Submitter
t0929-4- Toolchain
- leanprover/lean4:v4.33.1 (hash
f54d0bc916bf76a7fae460ce9d078ccd1f74aeb4fd12c4b6546bca28b6aa1c63) - Mathlib
- 0df444a360eaa60ab8c11dca51a86af692955474
- Reviewer
- none needed (calibration)
| Step | Check | Result |
|---|---|---|
| 1 | toolchain | pass |
| 2 | paths | pass |
| 4 | kernel-replay | pass |
| 5 | axioms | pass |
| 6 | hazards | pass |
| 7 | witness | pass |
| 8 | deps | pass |
Witness
Checked by the kernel — step 7 passed in the run its attestation records: attestations/000302.json, merge commit f606a87ee3a9.
fba89731e33c.import Mathlib /-! Non-vacuity witness (D-4 step 7): the statement has no hypotheses, so the expected witness type is `True`. -/ theorem witness : True := trivial
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 →
Acknowledged findings (1)
Untrusted contributor text — the prover’s justification for a finding.
Untrusted: acknowledgment of a div-zero finding at 1 / (2 ^ ↑p - 1)
For a prime p, p >= 2, so the real divisor 2^p - 1 is at least 3 and never 0; no term takes Lean's junk value. The expression is the right-hand side of the proved erdos-69--h1-v2 as written there.