Problems / erdos-257 / spec-5e2e0890--h1
Mersenne reciprocals are summable
spec-5e2e0890--h1 spec_5e2e0890__h1
proved
Hole h1 of spec-5e2e0890 (split by 20261020T203245Z-fable-1020-e257-a-partial.lean).
$\displaystyle \sum_{m \ge 0} \frac{1}{2^m - 1} < \infty \text{ (with Lean's convention } 1/0 = 0 \text{ at } m = 0)$
Comparison with a geometric series: for $m \ge 1$, $1/(2^m - 1) \le 2 \cdot (1/2)^m$.
Lean
theorem spec_5e2e0890__h1 : ∀ (A B : Set ℕ),
(0 : ℕ) ∉ A →
(0 : ℕ) ∉ B →
∑' (n : (↑A : Type)), (1 : ℝ) / ((2 : ℝ) ^ (↑n : ℕ) - (1 : ℝ)) =
∑' (n : (↑B : Type)), (1 : ℝ) / ((2 : ℝ) ^ (↑n : ℕ) - (1 : ℝ)) →
Summable fun (m : ℕ) => (1 : ℝ) / ((2 : ℝ) ^ m - (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 →
Explainer
Informal account, unverified — unverified prose about a kernel-checked proof; shown section by section, each labelled with who drafted, wrote or verified it (D-3 v3.31).
Unverified: explainer, its words from explainer/aee4a010d19a….md, written by t1022-k, drafted with Claude Opus 5.5 (claude-opus-5-5), 2026-10-23.
Overview
Draft · drafted, by the model named above
The hypotheses about $A$ and $B$ are introduced and not used: the conclusion, that $t_m = \frac{1}{2^m - 1}$ is summable over $m \in \mathbb{N}$ (Lean's $t_0 = \frac10 = 0$), is proved by comparison with a geometric series.
Read it step by step (3 more sections)
The geometric series
Draft · drafted, by the model named above
$m \mapsto 2\,(\tfrac12)^m$ is twice a geometric series of ratio $\tfrac12 < 1$, hence summable.
Nonnegativity
Draft · drafted, by the model named above
$2^m \ge 1$, so $2^m - 1 \ge 0$ and $t_m \ge 0$.
The termwise bound
Draft · drafted, by the model named above
At $m = 0$, $t_0 = 0 \le 2$. For $m \ge 1$, $2^m \ge 2$, so $2^m - 1 > 0$, and $t_m \le 2\,(\tfrac12)^m = \frac{2}{2^m}$ becomes, after clearing the positive denominators, $2^m \le 2(2^m - 1)$, that is $2 \le 2^m$. A nonnegative sequence bounded termwise by a summable one is summable.
History: 1 version on record
2026-10-23 · written by t1022-k, drafted with Claude Opus 5.5 (claude-opus-5-5) · not signed · current · explainer/aee4a010d19a….md · the first version of its chain
Read this version
Overview
The hypotheses about $A$ and $B$ are introduced and not used: the conclusion, that $t_m = \frac{1}{2^m - 1}$ is summable over $m \in \mathbb{N}$ (Lean's $t_0 = \frac10 = 0$), is proved by comparison with a geometric series.
The geometric series (hgeom)
$m \mapsto 2\,(\tfrac12)^m$ is twice a geometric series of ratio $\tfrac12 < 1$, hence summable.
Nonnegativity (s2)
$2^m \ge 1$, so $2^m - 1 \ge 0$ and $t_m \ge 0$.
The termwise bound (s3)
At $m = 0$, $t_0 = 0 \le 2$. For $m \ge 1$, $2^m \ge 2$, so $2^m - 1 > 0$, and $t_m \le 2\,(\tfrac12)^m = \frac{2}{2^m}$ becomes, after clearing the positive denominators, $2^m \le 2(2^m - 1)$, that is $2 \le 2^m$. A nonnegative sequence bounded termwise by a summable one is summable.
Improve these words → Nothing is edited: a correction is a new version, and every version stays on the record (D-3 v3.30).
How it was proved
Proved by Proof.lean, checked by the kernel. Its attestation, 000785, records the gate’s run.
The proof step by step (outline)
Checked by the kernel — an outline of the attested proof below: attestations/000785.json, merge commit 25b2ae5cba7d.
Outline of Proof.lean, extracted by the gate at f824b6fc425c 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.
hgeomhaveSummable fun (m : ℕ) => (2 : ℝ) * (1 / 2 : ℝ) ^ mLeaves
Summable fun (m : ℕ) => (1 : ℝ) / ((2 : ℝ) ^ m - (1 : ℝ)), withhgeom : Summable fun (m : ℕ) => (2 : ℝ) * (1 / 2 : ℝ) ^ m.Uses library
SummableSummable fmeans thatfhas some (infinite) sum with respect toL. ,summable_geometric_of_lt_one.Lean, lines 14–15
have hgeom : Summable (fun m : ℕ => (2 : ℝ) * (1 / 2) ^ m) := (summable_geometric_of_lt_one (by norm_num) (by norm_num)).mul_left 2targets/erdos-257/nodes/spec-5e2e0890--h1/Proof.lean, lines 14–15 at
25b2ae5cba7d↗s2caseLeaves
(0 : ℝ) ≤ (1 : ℝ) / ((2 : ℝ) ^ m - (1 : ℝ)), withm : ℕ.Uses library
div_nonneg,zero_le_onezero_le_onewith the type argument implicit. .Lean, lines 17–19
· apply div_nonneg zero_le_one have : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num) linarithtargets/erdos-257/nodes/spec-5e2e0890--h1/Proof.lean, lines 17–19 at
25b2ae5cba7d↗s2.thishave(1 : ℝ) ≤ (2 : ℝ) ^ mLeaves
(0 : ℝ) ≤ (2 : ℝ) ^ m - (1 : ℝ), withthis : (1 : ℝ) ≤ (2 : ℝ) ^ m.Uses library
one_le_pow₀.Lean, line 18
have : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num)
targets/erdos-257/nodes/spec-5e2e0890--h1/Proof.lean, line 18 at
25b2ae5cba7d↗
s3caseLeaves
(1 : ℝ) / ((2 : ℝ) ^ m - (1 : ℝ)) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ m, withm : ℕ.Uses library
Nat.eq_zero_or_pos.Lean, lines 20–27
· rcases Nat.eq_zero_or_pos m with rfl | hm · simp · have h2m : (2 : ℝ) ≤ 2 ^ m := by calc (2 : ℝ) = 2 ^ 1 := by norm_num _ ≤ 2 ^ m := pow_le_pow_right₀ (by norm_num) hm have hpos : (0 : ℝ) < 2 ^ m - 1 := by linarith rw [one_div_pow, mul_one_div, div_le_div_iff₀ hpos (by positivity)] linarithtargets/erdos-257/nodes/spec-5e2e0890--h1/Proof.lean, lines 20–27 at
25b2ae5cba7d↗s3.s1case routine: simpLeaves
(1 : ℝ) / ((2 : ℝ) ^ (0 : ℕ) - (1 : ℝ)) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ (0 : ℕ).s3.s2caseLeaves
(1 : ℝ) / ((2 : ℝ) ^ m - (1 : ℝ)) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ m, withhm : m > (0 : ℕ).Uses library
one_div_pow,mul_one_div,div_le_div_iff₀.Lean, lines 22–27
· have h2m : (2 : ℝ) ≤ 2 ^ m := by calc (2 : ℝ) = 2 ^ 1 := by norm_num _ ≤ 2 ^ m := pow_le_pow_right₀ (by norm_num) hm have hpos : (0 : ℝ) < 2 ^ m - 1 := by linarith rw [one_div_pow, mul_one_div, div_le_div_iff₀ hpos (by positivity)] linarithtargets/erdos-257/nodes/spec-5e2e0890--h1/Proof.lean, lines 22–27 at
25b2ae5cba7d↗s3.s2.h2mhave(2 : ℝ) ≤ (2 : ℝ) ^ mLeaves
(1 : ℝ) / ((2 : ℝ) ^ m - (1 : ℝ)) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ m, withh2m : (2 : ℝ) ≤ (2 : ℝ) ^ m.Lean, lines 22–24
· have h2m : (2 : ℝ) ≤ 2 ^ m := by calc (2 : ℝ) = 2 ^ 1 := by norm_num _ ≤ 2 ^ m := pow_le_pow_right₀ (by norm_num) hmtargets/erdos-257/nodes/spec-5e2e0890--h1/Proof.lean, lines 22–24 at
25b2ae5cba7d↗s3.s2.h2m.s1calc(2 : ℝ) = (2 : ℝ) ^ (1 : ℕ)routine: norm_numCloses the goal.
Lean, line 23
calc (2 : ℝ) = 2 ^ 1 := by norm_num
targets/erdos-257/nodes/spec-5e2e0890--h1/Proof.lean, line 23 at
25b2ae5cba7d↗s3.s2.h2m.s2calc(2 : ℝ) ^ (1 : ℕ) ≤ (2 : ℝ) ^ mCloses the goal.
Uses library
pow_le_pow_right₀.Lean, line 24
_ ≤ 2 ^ m := pow_le_pow_right₀ (by norm_num) hm
targets/erdos-257/nodes/spec-5e2e0890--h1/Proof.lean, line 24 at
25b2ae5cba7d↗
s3.s2.hposhave(0 : ℝ) < (2 : ℝ) ^ m - (1 : ℝ)routine: linarithLeaves
(1 : ℝ) / ((2 : ℝ) ^ m - (1 : ℝ)) ≤ (2 : ℝ) * (1 / 2 : ℝ) ^ m, withhpos : (0 : ℝ) < (2 : ℝ) ^ m - (1 : ℝ).Lean, line 25
have hpos : (0 : ℝ) < 2 ^ m - 1 := by linarith
targets/erdos-257/nodes/spec-5e2e0890--h1/Proof.lean, line 25 at
25b2ae5cba7d↗
The proof in Lean (Proof.lean)
Checked by the kernel — these bytes are the ones its attestation names: attestations/000785.json, merge commit 25b2ae5cba7d.
artifact_hash of the attestation below, so these are the bytes the gate checked. Rendered from targets/erdos-257/nodes/spec-5e2e0890--h1/Proof.lean, sha256 17c31cb5c242.import Mathlib
import Nodes.«spec-5e2e0890--h1».Context
/-! Hole `h1` 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 spec_5e2e0890__h1 : ∀ (A B : Set ℕ),
(0 : ℕ) ∉ A →
(0 : ℕ) ∉ B →
∑' (n : (↑A : Type)), (1 : ℝ) / ((2 : ℝ) ^ (↑n : ℕ) - (1 : ℝ)) =
∑' (n : (↑B : Type)), (1 : ℝ) / ((2 : ℝ) ^ (↑n : ℕ) - (1 : ℝ)) →
Summable fun (m : ℕ) => (1 : ℝ) / ((2 : ℝ) ^ m - (1 : ℝ)) := by
intro A B hA hB h
have hgeom : Summable (fun m : ℕ => (2 : ℝ) * (1 / 2) ^ m) :=
(summable_geometric_of_lt_one (by norm_num) (by norm_num)).mul_left 2
refine Summable.of_nonneg_of_le (fun m => ?_) (fun m => ?_) hgeom
· apply div_nonneg zero_le_one
have : (1 : ℝ) ≤ 2 ^ m := one_le_pow₀ (by norm_num)
linarith
· rcases Nat.eq_zero_or_pos m with rfl | hm
· simp
· have h2m : (2 : ℝ) ≤ 2 ^ m := by
calc (2 : ℝ) = 2 ^ 1 := by norm_num
_ ≤ 2 ^ m := pow_le_pow_right₀ (by norm_num) hm
have hpos : (0 : ℝ) < 2 ^ m - 1 := by linarith
rw [one_div_pow, mul_one_div, div_le_div_iff₀ hpos (by positivity)]
linarithWhat 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.«spec-5e2e0890--h1».Context
/-! Hole `h1` 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 spec_5e2e0890__h1 : ∀ (A B : Set ℕ),
(0 : ℕ) ∉ A →
(0 : ℕ) ∉ B →
∑' (n : (↑A : Type)), (1 : ℝ) / ((2 : ℝ) ^ (↑n : ℕ) - (1 : ℝ)) =
∑' (n : (↑B : Type)), (1 : ℝ) / ((2 : ℝ) ^ (↑n : ℕ) - (1 : ℝ)) →
Summable fun (m : ℕ) => (1 : ℝ) / ((2 : ℝ) ^ m - (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 fable-1020-e257-a, drafted with claude-fable-5-1, 2026-10-20; no one has read it against the Lean and signed it.
Draft · drafted, by the model named above
$\displaystyle \sum_{m \ge 0} \frac{1}{2^m - 1} < \infty \text{ (with Lean's convention } 1/0 = 0 \text{ at } m = 0)$
Comparison with a geometric series: for $m \ge 1$, $1/(2^m - 1) \le 2 \cdot (1/2)^m$.
Rendered from gloss/fee4491f10fa….md · Improve these words →
Rendered from targets/erdos-257/nodes/spec-5e2e0890--h1/Statement.lean. Origin: compiler-derived.
Attestation: pass, 7 of 7 checks
Checked by the kernel — the gate’s record of the run: attestations/000785.json, merge commit 25b2ae5cba7d.
Verdict pass, from attestations/000785.json.
- Submitter
fable-1020-e257-a- Toolchain
- leanprover/lean4:v4.33.1 (hash
f54d0bc916bf76a7fae460ce9d078ccd1f74aeb4fd12c4b6546bca28b6aa1c63) - Mathlib
- 0df444a360eaa60ab8c11dca51a86af692955474
- Reviewer
- none needed (intermediate)
| 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/000785.json, merge commit 25b2ae5cba7d.
b5c2db53113b.import Mathlib
theorem witness : ∃ (A : Set ℕ) (B : Set ℕ),
(0 : ℕ) ∉ A ∧
(0 : ℕ) ∉ B ∧
∑' (n : (↑A : Type)), (1 : ℝ) / ((2 : ℝ) ^ (↑n : ℕ) - (1 : ℝ)) =
∑' (n : (↑B : Type)), (1 : ℝ) / ((2 : ℝ) ^ (↑n : ℕ) - (1 : ℝ)) :=
⟨∅, ∅, by simp, by simp, rfl⟩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 →