Open Proof Network

Problems / erdos-257 / variant-41d1f19b

long gaps ⇒ irrational

variant-41d1f19b

proved

Restated as hole h_long_gaps of erdos-257 (split by 20261023T133841Z-t1023-f1-partial.lean).

$\displaystyle \forall A \subseteq \mathbb{N}:\quad A \text{ infinite},\ 0 \notin A,\ \Bigl(\forall C \in \mathbb{N}\ \exists m \in A:\ C + \sum_{a \in A,\ a < m} a \le m\Bigr) \ \Longrightarrow\ \sum_{n \in A} \frac{1}{2^n - 1} \notin \mathbb{Q}.$

In the Lean the finite set $\{a \in A : a < m\}$ is given as a Finset $F$ with $a \in F \iff a \in A \wedge a < m$. The sum on the right is over the elements of $A$; $0 \notin A$ excludes Lean's junk value at $n = 0$.

unverified · history

Lean
theorem Opn.erdos_257_long_gaps :
    ∀ (A : Set ℕ), A.Infinite → 0 ∉ A →
    (∀ C : ℕ, ∃ m ∈ A, ∃ F : Finset ℕ, (∀ a, a ∈ F ↔ a ∈ A ∧ a < m) ∧ C + ∑ a ∈ F, a ≤ m) →
    Irrational (∑' n : A, (1 : ℝ) / (2 ^ n.1 - 1)) := 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 was proved

Proved by Proof.lean, checked by the kernel. Its attestation, 000917, records the gate’s run.

The proof step by step (outline)

Checked by the kernel — an outline of the attested proof below: attestations/000917.json, merge commit 903332347889.

Outline of Proof.lean, extracted by the gate at 1bd7ca70c9ee 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.

  1. s1 obtain ∃ m ∈ A, ∃ (F : Finset ℕ), (∀ (a : ℕ), a ∈ F ↔ a ∈ A ∧ a < m) ∧ C + ∑ a ∈ F, a ≤ m

    Leaves ∃ m ∈ A, ∃ (L : ℕ), (0 : ℕ) < L ∧ (∀ a ∈ A, a < m → (2 : ℕ) ^ a - (1 : ℕ) ∣ L) ∧ (2 : ℕ) ^ C * L ≤ (2 : ℕ) ^ m, with m : ℕ, hmA : m ∈ A, F : Finset ℕ, hF : ∀ (a : ℕ), a ∈ F ↔ a ∈ A ∧ a < m, hCm : C + ∑ a ∈ F, a ≤ m.

    Lean, line 165
      obtain ⟨m, hmA, F, hF, hCm⟩ := hA C

    targets/erdos-257/nodes/variant-41d1f19b/Proof.lean, line 165 at 903332347889 ↗

  2. s2 case

    Leaves (0 : ℕ) < ∏ a ∈ F, ((2 : ℕ) ^ a - (1 : ℕ)).

    Uses library Finset.prod_pos.

    Lean, lines 167–171
      · apply Finset.prod_pos
        intro a ha
        have ha0 : a ≠ 0 := fun h => h0 (h ▸ ((hF a).1 ha).1)
        have := Nat.one_lt_two_pow ha0
        omega

    targets/erdos-257/nodes/variant-41d1f19b/Proof.lean, lines 167–171 at 903332347889 ↗

    1. s2.ha0 have a ≠ (0 : ℕ)

      Leaves (0 : ℕ) < (2 : ℕ) ^ a - (1 : ℕ), with ha0 : a ≠ (0 : ℕ).

      Lean, line 169
          have ha0 : a ≠ 0 := fun h => h0 (h ▸ ((hF a).1 ha).1)

      targets/erdos-257/nodes/variant-41d1f19b/Proof.lean, line 169 at 903332347889 ↗

    2. s2.this have (1 : ℕ) < (2 : ℕ) ^ a

      Leaves (0 : ℕ) < (2 : ℕ) ^ a - (1 : ℕ), with this : (1 : ℕ) < (2 : ℕ) ^ a.

      Uses library Nat.one_lt_two_pow.

      Lean, line 170
          have := Nat.one_lt_two_pow ha0

      targets/erdos-257/nodes/variant-41d1f19b/Proof.lean, line 170 at 903332347889 ↗

  3. s3 case

    Leaves ∀ a ∈ A, a < m → (2 : ℕ) ^ a - (1 : ℕ) ∣ ∏ a ∈ F, ((2 : ℕ) ^ a - (1 : ℕ)).

    Uses library Finset.dvd_prod_of_mem, And.intro And.intro : a → b → a ∧ b is the constructor for the And operation. .

    Lean, lines 172–173
      · intro a ha ham
        exact Finset.dvd_prod_of_mem _ ((hF a).2 ⟨ha, ham⟩)

    targets/erdos-257/nodes/variant-41d1f19b/Proof.lean, lines 172–173 at 903332347889 ↗

  4. s4 case

    Leaves (2 : ℕ) ^ C * ∏ a ∈ F, ((2 : ℕ) ^ a - (1 : ℕ)) ≤ (2 : ℕ) ^ m.

    Lean, lines 174–179
      · have hL : ∏ a ∈ F, (2 ^ a - 1) ≤ 2 ^ (∑ a ∈ F, a) := by
          rw [← Finset.prod_pow_eq_pow_sum]
          exact Finset.prod_le_prod' (fun a _ => Nat.sub_le _ _)
        calc 2 ^ C * ∏ a ∈ F, (2 ^ a - 1) ≤ 2 ^ C * 2 ^ (∑ a ∈ F, a) := Nat.mul_le_mul_left _ hL
          _ = 2 ^ (C + ∑ a ∈ F, a) := by rw [pow_add]
          _ ≤ 2 ^ m := Nat.pow_le_pow_right (by norm_num) hCm

    targets/erdos-257/nodes/variant-41d1f19b/Proof.lean, lines 174–179 at 903332347889 ↗

    1. s4.hL have ∏ a ∈ F, ((2 : ℕ) ^ a - (1 : ℕ)) ≤ (2 : ℕ) ^ ∑ a ∈ F, a

      Leaves (2 : ℕ) ^ C * ∏ a ∈ F, ((2 : ℕ) ^ a - (1 : ℕ)) ≤ (2 : ℕ) ^ m, with hL : ∏ a ∈ F, ((2 : ℕ) ^ a - (1 : ℕ)) ≤ (2 : ℕ) ^ ∑ a ∈ F, a.

      Uses library Finset.prod_pow_eq_pow_sum, Finset.prod_le_prod' In an ordered commutative monoid, if each factor f i of one finite product is less than or equal to the corresponding factor g i of another finite product, then ∏ i ∈ s, f i ≤ ∏ i ∈ s, g i. , Nat.sub_le.

      Lean, lines 174–176
        · have hL : ∏ a ∈ F, (2 ^ a - 1) ≤ 2 ^ (∑ a ∈ F, a) := by
            rw [← Finset.prod_pow_eq_pow_sum]
            exact Finset.prod_le_prod' (fun a _ => Nat.sub_le _ _)

      targets/erdos-257/nodes/variant-41d1f19b/Proof.lean, lines 174–176 at 903332347889 ↗

    2. s4.s2 calc (2 : ℕ) ^ C * ∏ a ∈ F, ((2 : ℕ) ^ a - (1 : ℕ)) ≤ (2 : ℕ) ^ C * (2 : ℕ) ^ ∑ a ∈ F, a

      Closes the goal.

      Uses library Nat.mul_le_mul_left.

      Lean, line 177
          calc 2 ^ C * ∏ a ∈ F, (2 ^ a - 1) ≤ 2 ^ C * 2 ^ (∑ a ∈ F, a) := Nat.mul_le_mul_left _ hL

      targets/erdos-257/nodes/variant-41d1f19b/Proof.lean, line 177 at 903332347889 ↗

    3. s4.s3 calc

      Closes the goal.

      Uses library pow_add.

      Lean, line 178
            _ = 2 ^ (C + ∑ a ∈ F, a) := by rw [pow_add]

      targets/erdos-257/nodes/variant-41d1f19b/Proof.lean, line 178 at 903332347889 ↗

    4. s4.s4 calc (2 : ℕ) ^ (C + ∑ a ∈ F, a) ≤ (2 : ℕ) ^ m

      Closes the goal.

      Uses library Nat.pow_le_pow_right.

      Lean, line 179
            _ ≤ 2 ^ m := Nat.pow_le_pow_right (by norm_num) hCm

      targets/erdos-257/nodes/variant-41d1f19b/Proof.lean, line 179 at 903332347889 ↗

The proof in Lean (Proof.lean)

Checked by the kernel — these bytes are the ones its attestation names: attestations/000917.json, merge commit 903332347889.

Proof.lean — its sha256 is the artifact_hash of the attestation below, so these are the bytes the gate checked. Rendered from targets/erdos-257/nodes/variant-41d1f19b/Proof.lean, sha256 481fd166f7cd.
import Mathlib
import Nodes.«variant-41d1f19b».Context

private lemma lac_f_nonneg (n : ℕ) : 0 ≤ (1 : ℝ) / (2 ^ n - 1) := by
  apply div_nonneg zero_le_one
  have : (1 : ℝ) ≤ 2 ^ n := one_le_pow₀ (by norm_num)
  linarith

private lemma lac_f_le (n : ℕ) : (1 : ℝ) / (2 ^ n - 1) ≤ 2 * (1 / 2) ^ n := by
  rcases Nat.eq_zero_or_pos n with rfl | hn
  · norm_num
  · have h2 : (2 : ℝ) ≤ 2 ^ n := by
      calc (2 : ℝ) = 2 ^ 1 := by norm_num
        _ ≤ 2 ^ n := pow_le_pow_right₀ (by norm_num) hn
    have hpos : (0 : ℝ) < 2 ^ n - 1 := by linarith
    have hp : (0 : ℝ) < 2 ^ n := by positivity
    rw [one_div_pow, div_le_iff₀ hpos]
    have e : (2 : ℝ) * (1 / 2 ^ n) * (2 ^ n - 1) = 2 - 2 / 2 ^ n := by
      field_simp
    have h3 : 2 / (2 : ℝ) ^ n ≤ 1 := (div_le_one hp).mpr h2
    linarith

private lemma lac_summable : Summable (fun n : ℕ => (1 : ℝ) / (2 ^ n - 1)) :=
  Summable.of_nonneg_of_le lac_f_nonneg lac_f_le
    ((summable_geometric_of_lt_one (by norm_num) (by norm_num)).mul_left 2)

private lemma lac_tail_le (A : Set ℕ) (m : ℕ) :
    ∑' k : ℕ, A.indicator (fun n : ℕ => (1 : ℝ) / (2 ^ n - 1)) (k + m) ≤ 4 * (1 / 2) ^ m := by
  classical
  have hrw : ∀ k : ℕ, 2 * (1 / 2 : ℝ) ^ (k + m) = (2 * (1 / 2) ^ m) * (1 / 2) ^ k := by
    intro k; rw [pow_add]; ring
  have hg : Summable (fun k : ℕ => 2 * (1 / 2 : ℝ) ^ (k + m)) := by
    simp_rw [hrw]
    exact (summable_geometric_of_lt_one (by norm_num) (by norm_num)).mul_left _
  have hle : ∀ k, A.indicator (fun n : ℕ => (1 : ℝ) / (2 ^ n - 1)) (k + m)
      ≤ 2 * (1 / 2 : ℝ) ^ (k + m) := by
    intro k
    rw [Set.indicator_apply]
    split_ifs
    · exact lac_f_le _
    · positivity
  have hs : Summable (fun k : ℕ => A.indicator (fun n : ℕ => (1 : ℝ) / (2 ^ n - 1)) (k + m)) :=
    Summable.of_nonneg_of_le (fun k => Set.indicator_nonneg (fun n _ => lac_f_nonneg n) _) hle hg
  calc _ ≤ ∑' k : ℕ, 2 * (1 / 2 : ℝ) ^ (k + m) := Summable.tsum_le_tsum hle hs hg
    _ = 4 * (1 / 2) ^ m := by
      simp_rw [hrw]
      rw [tsum_mul_left, tsum_geometric_of_lt_one (by norm_num) (by norm_num)]
      norm_num
      ring

private lemma liou_int (L : ℕ) (F : Finset ℕ) (hF : ∀ a ∈ F, 2 ^ a - 1 ∣ L)
    (hF0 : ∀ a ∈ F, a ≠ 0) :
    ∃ N : ℤ, (L : ℝ) * ∑ a ∈ F, (1 : ℝ) / (2 ^ a - 1) = N := by
  rw [Finset.mul_sum]
  have : ∀ a ∈ F, ∃ c : ℤ, (L : ℝ) * (1 / ((2 : ℝ) ^ a - 1)) = c := by
    intro a ha
    obtain ⟨c, hc⟩ := hF a ha
    refine ⟨c, ?_⟩
    have h1 : (1 : ℝ) < 2 ^ a := one_lt_pow₀ (by norm_num) (hF0 a ha)
    have h0 : (2 : ℝ) ^ a - 1 ≠ 0 := by linarith
    have hc' : (L : ℝ) = ((2 : ℝ) ^ a - 1) * c := by
      have h2 : 1 ≤ 2 ^ a := Nat.one_le_two_pow
      rw [hc]; push_cast [Nat.cast_sub h2]; ring
    rw [hc']; field_simp
    norm_cast
  choose c hc using this
  refine ⟨∑ a ∈ F.attach, c a.1 a.2, ?_⟩
  push_cast
  rw [← Finset.sum_attach F]
  exact Finset.sum_congr rfl (fun a _ => hc a.1 a.2)

private lemma r2_liou :
    ∀ (A : Set ℕ), A.Infinite → 0 ∉ A →
    (∀ C : ℕ, ∃ m ∈ A, ∃ L : ℕ, 0 < L ∧ (∀ a ∈ A, a < m → 2 ^ a - 1 ∣ L) ∧ 2 ^ C * L ≤ 2 ^ m) →
    Irrational (∑' n : A, (1 : ℝ) / (2 ^ n.1 - 1)) := by
  classical
  intro A _ h0 hA
  rintro ⟨r, hr⟩
  have hsum : Summable (A.indicator (fun n : ℕ => (1 : ℝ) / (2 ^ n - 1))) :=
    lac_summable.indicator A
  have hrA : (r : ℝ) = ∑' n, A.indicator (fun n : ℕ => (1 : ℝ) / (2 ^ n - 1)) n :=
    hr.trans (tsum_subtype A (fun n : ℕ => (1 : ℝ) / (2 ^ n - 1)))
  set q : ℕ := r.den with hq
  obtain ⟨m, hmA, L, hL0, hLdvd, hLm⟩ := hA (4 * q)
  have hm1 : 1 ≤ m := by
    rcases Nat.eq_zero_or_pos m with h | h
    · exact absurd (h ▸ hmA) h0
    · exact h
  set F := (Finset.range m).filter (· ∈ A) with hF
  have hsplit := hsum.sum_add_tsum_nat_add m
  have hfin : ∑ i ∈ Finset.range m, A.indicator (fun n : ℕ => (1 : ℝ) / (2 ^ n - 1)) i
      = ∑ a ∈ F, (1 : ℝ) / (2 ^ a - 1) := by
    rw [hF, Finset.sum_filter]
    simp [Set.indicator_apply]
  set T := ∑' i, A.indicator (fun n : ℕ => (1 : ℝ) / (2 ^ n - 1)) (i + m) with hT
  have hTs : Summable (fun i => A.indicator (fun n : ℕ => (1 : ℝ) / (2 ^ n - 1)) (i + m)) :=
    (summable_nat_add_iff m).mpr hsum
  have hTpos : 0 < T := by
    apply Summable.tsum_pos hTs (fun i => Set.indicator_nonneg (fun n _ => lac_f_nonneg n) _) 0
    rw [zero_add, Set.indicator_of_mem hmA]
    have : (1 : ℝ) < 2 ^ m := one_lt_pow₀ (by norm_num) (by omega)
    apply div_pos one_pos; linarith
  have hTle : T ≤ 4 * (1 / 2) ^ m := lac_tail_le A m
  have hrT : (r : ℝ) = (∑ a ∈ F, (1 : ℝ) / (2 ^ a - 1)) + T := by
    rw [hrA, ← hsplit, hfin]
  obtain ⟨N, hN⟩ := liou_int L F
    (fun a ha => hLdvd a (Finset.mem_filter.1 ha).2 (Finset.mem_range.1 (Finset.mem_filter.1 ha).1))
    (fun a ha h => h0 (h ▸ (Finset.mem_filter.1 ha).2))
  have hPpos : (0 : ℝ) < L := by exact_mod_cast hL0
  have hqr : (r : ℝ) * q = r.num := by
    rw [hq]; exact_mod_cast Rat.mul_den_eq_num r
  have hZ : (q : ℝ) * L * T = ((L : ℤ) * r.num - q * N : ℤ) := by
    push_cast
    rw [← hN, ← hqr]
    have : T = r - ∑ a ∈ F, (1 : ℝ) / (2 ^ a - 1) := by linarith
    rw [this]; ring
  have hqpos : (0 : ℝ) < q := by
    rw [hq]; exact_mod_cast r.den_pos
  have hpos : (0 : ℝ) < (q : ℝ) * L * T := by positivity
  have hge : (1 : ℝ) ≤ (q : ℝ) * L * T := by
    rw [hZ] at hpos ⊢
    have : (0 : ℤ) < (L : ℤ) * r.num - q * N := by exact_mod_cast hpos
    exact_mod_cast this
  have hLm' : (2 : ℝ) ^ (4 * q) * L ≤ 2 ^ m := by exact_mod_cast hLm
  have hbig : (4 * q : ℝ) < 2 ^ (4 * q) := by
    have h1 : 4 * q < 2 ^ (4 * q) := Nat.lt_two_pow_self
    exact_mod_cast h1
  have h2m : (2 : ℝ) ^ m * (1 / 2) ^ m = 1 := by rw [← mul_pow]; norm_num
  have hupper : (q : ℝ) * L * T < 1 := by
    have hA1 : (q : ℝ) * L * T ≤ q * L * (4 * (1 / 2) ^ m) :=
      mul_le_mul_of_nonneg_left hTle (by positivity)
    have hA2 : (2 : ℝ) ^ (4 * q) * ((q : ℝ) * L * (4 * (1 / 2) ^ m))
        ≤ 4 * q * (2 ^ m * (1 / 2) ^ m) := by
      have := mul_le_mul_of_nonneg_right hLm' (by positivity : (0 : ℝ) ≤ 4 * q * (1 / 2) ^ m)
      nlinarith [this]
    rw [h2m, mul_one] at hA2
    have hpow : (0 : ℝ) < 2 ^ (4 * q) := by positivity
    have : (q : ℝ) * L * (4 * (1 / 2) ^ m) < 1 := by
      by_contra hc
      have hc2 := not_lt.mp hc
      nlinarith
    linarith
  linarith

/-- Erdős 257 for sets with arbitrarily long gaps: let `A` be an infinite set of positive
integers such that, for every `C`, some `m ∈ A` exceeds the sum of all elements of `A` below it
by at least `C`. Then `∑_{n ∈ A} 1/(2^n - 1)` is irrational.

The hypothesis allows long dense blocks between the gaps, so the reciprocal sum `∑_{n ∈ A} 1/n`
may diverge: for `A = ⋃_j [X_j, 2X_j]` with `X_{j+1} = 4X_j^2` each block contributes more than
`1/2` to it, while the elements below `X_{j+1}` sum to less than `3X_j^2`. Such sets are covered
neither by Erdős (Math. Student 36, 1968), whose sets have summable reciprocals, nor by the
periodic and multiplicative cases listed in the literature record.

Proof (Liouville's criterion, `Opn.erdos_257_liouville_criterion`, with the product of the
`2^a - 1` over the elements below `m` as the common denominator, which is at most
`2^(m - C)`). -/
theorem Opn.erdos_257_long_gaps :
    ∀ (A : Set ℕ), A.Infinite → 0 ∉ A →
    (∀ C : ℕ, ∃ m ∈ A, ∃ F : Finset ℕ, (∀ a, a ∈ F ↔ a ∈ A ∧ a < m) ∧ C + ∑ a ∈ F, a ≤ m) →
    Irrational (∑' n : A, (1 : ℝ) / (2 ^ n.1 - 1)) := by
  intro A hinf h0 hA
  apply r2_liou A hinf h0
  intro C
  obtain ⟨m, hmA, F, hF, hCm⟩ := hA C
  refine ⟨m, hmA, ∏ a ∈ F, (2 ^ a - 1), ?_, ?_, ?_⟩
  · apply Finset.prod_pos
    intro a ha
    have ha0 : a ≠ 0 := fun h => h0 (h ▸ ((hF a).1 ha).1)
    have := Nat.one_lt_two_pow ha0
    omega
  · intro a ha ham
    exact Finset.dvd_prod_of_mem _ ((hF a).2 ⟨ha, ham⟩)
  · have hL : ∏ a ∈ F, (2 ^ a - 1) ≤ 2 ^ (∑ a ∈ F, a) := by
      rw [← Finset.prod_pow_eq_pow_sum]
      exact Finset.prod_le_prod' (fun a _ => Nat.sub_le _ _)
    calc 2 ^ C * ∏ a ∈ F, (2 ^ a - 1) ≤ 2 ^ C * 2 ^ (∑ a ∈ F, a) := Nat.mul_le_mul_left _ hL
      _ = 2 ^ (C + ∑ a ∈ F, a) := by rw [pow_add]
      _ ≤ 2 ^ m := Nat.pow_le_pow_right (by norm_num) hCm

What 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).

Write the explainer →

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.«variant-41d1f19b».Context

/-- Erdős 257 for sets with arbitrarily long gaps: let `A` be an infinite set of positive
integers such that, for every `C`, some `m ∈ A` exceeds the sum of all elements of `A` below it
by at least `C`. Then `∑_{n ∈ A} 1/(2^n - 1)` is irrational.

The hypothesis allows long dense blocks between the gaps, so the reciprocal sum `∑_{n ∈ A} 1/n`
may diverge: for `A = ⋃_j [X_j, 2X_j]` with `X_{j+1} = 4X_j^2` each block contributes more than
`1/2` to it, while the elements below `X_{j+1}` sum to less than `3X_j^2`. Such sets are covered
neither by Erdős (Math. Student 36, 1968), whose sets have summable reciprocals, nor by the
periodic and multiplicative cases listed in the literature record.

Proof (Liouville's criterion, `Opn.erdos_257_liouville_criterion`, with the product of the
`2^a - 1` over the elements below `m` as the common denominator, which is at most
`2^(m - C)`). -/
theorem Opn.erdos_257_long_gaps :
    ∀ (A : Set ℕ), A.Infinite → 0 ∉ A →
    (∀ C : ℕ, ∃ m ∈ A, ∃ F : Finset ℕ, (∀ a, a ∈ F ↔ a ∈ A ∧ a < m) ∧ C + ∑ a ∈ F, a ≤ m) →
    Irrational (∑' n : A, (1 : ℝ) / (2 ^ n.1 - 1)) := 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 t1022-b, drafted with Claude Opus 5.5 via Claude Code, 2026-10-22; no one has read it against the Lean and signed it.

Draft · drafted, by the model named above

$\displaystyle \forall A \subseteq \mathbb{N}:\quad A \text{ infinite},\ 0 \notin A,\ \Bigl(\forall C \in \mathbb{N}\ \exists m \in A:\ C + \sum_{a \in A,\ a < m} a \le m\Bigr) \ \Longrightarrow\ \sum_{n \in A} \frac{1}{2^n - 1} \notin \mathbb{Q}.$

In the Lean the finite set $\{a \in A : a < m\}$ is given as a Finset $F$ with $a \in F \iff a \in A \wedge a < m$. The sum on the right is over the elements of $A$; $0 \notin A$ excludes Lean's junk value at $n = 0$.

Rendered from gloss/63d3b216fc2c….md · Improve these words →

Rendered from targets/erdos-257/nodes/variant-41d1f19b/Statement.lean. Origin: variant (partial).

Attestation: pass, 7 of 7 checks

Checked by the kernel — the gate’s record of the run: attestations/000917.json, merge commit 903332347889.

Verdict pass, from attestations/000917.json.

Submitter
t1022-b
Toolchain
leanprover/lean4:v4.33.1 (hash f54d0bc916bf76a7fae460ce9d078ccd1f74aeb4fd12c4b6546bca28b6aa1c63)
Mathlib
0df444a360eaa60ab8c11dca51a86af692955474
Reviewer
none needed (intermediate)
StepCheckResult
1toolchainpass
2pathspass
4kernel-replaypass
5axiomspass
6hazardspass
7witnesspass
8depspass
Witness

Checked by the kernel — step 7 passed in the run its attestation records: attestations/000917.json, merge commit 903332347889.

Witness.lean — checked at step 7 of the run recorded below: pass. Rendered from targets/erdos-257/nodes/variant-41d1f19b/Witness.lean, sha256 f35401223308.
import Mathlib

theorem witness : ∃ (A : Set ℕ), A.Infinite ∧ (0 : ℕ) ∉ A ∧
    ∀ C : ℕ, ∃ m ∈ A, ∃ F : Finset ℕ, (∀ a, a ∈ F ↔ a ∈ A ∧ a < m) ∧ C + ∑ a ∈ F, a ≤ m := by
  have hsum : ∀ k : ℕ, k + ∑ j ∈ Finset.range k, 4 ^ j ≤ 4 ^ k := by
    intro k
    induction k with
    | zero => simp
    | succ k ih =>
      rw [Finset.sum_range_succ, pow_succ]
      have : 1 ≤ 4 ^ k := Nat.one_le_pow _ _ (by norm_num)
      omega
  have hinj : Function.Injective (fun k : ℕ => 4 ^ k) := Nat.pow_right_injective (by norm_num)
  refine ⟨Set.range (fun k : ℕ => 4 ^ k), Set.infinite_range_of_injective hinj, ?_, ?_⟩
  · rintro ⟨k, hk⟩
    exact absurd hk (by positivity)
  · intro C
    refine ⟨4 ^ C, ⟨C, rfl⟩, (Finset.range C).image (fun k : ℕ => 4 ^ k), ?_, ?_⟩
    · intro a
      simp only [Finset.mem_image, Finset.mem_range, Set.mem_range]
      constructor
      · rintro ⟨j, hj, rfl⟩
        exact ⟨⟨j, rfl⟩, Nat.pow_lt_pow_right (by norm_num) hj⟩
      · rintro ⟨⟨j, rfl⟩, hj⟩
        exact ⟨j, (Nat.pow_lt_pow_iff_right (by norm_num)).1 hj, rfl⟩
    · rw [Finset.sum_image (fun x _ y _ h => hinj h)]
      exact hsum C

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 →

Relation to the problem’s statement

Checked by the kernel — checked at admission (D-30); no proof of the node is implied.

Relation.lean — the implication between this variant and the problem’s statement, checked by the gate when the variant was admitted and immutable after (D-30). Rendered from targets/erdos-257/nodes/variant-41d1f19b/Relation.lean, sha256 400dfd4ed2f9.
-- relation: partial
import Mathlib

/-! The variant is a partial form of the root (D-30, `partial`): the root, for every infinite
set, specialises to the sets with arbitrarily long gaps. -/

theorem relation :
    (∀ (A : Set ℕ), A.Infinite → Irrational (∑' n : A, (1 : ℝ) / (2 ^ n.1 - 1))) →
    (∀ (A : Set ℕ), A.Infinite → 0 ∉ A →
      (∀ C : ℕ, ∃ m ∈ A, ∃ F : Finset ℕ, (∀ a, a ∈ F ↔ a ∈ A ∧ a < m) ∧ C + ∑ a ∈ F, a ≤ m) →
      Irrational (∑' n : A, (1 : ℝ) / (2 ^ n.1 - 1))) := by
  intro h A hA _ _
  exact h A hA

No gloss yet: no one has written in words what this relation says (D-3 v3.30); the Lean above is the relation. 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 ^ ↑n - 1)

Real division; the hypothesis 0 ∉ A keeps every divisor 2^n - 1 positive, so the junk value at n = 0 never enters the sum (same reading as the root's acknowledgement).

How to read this page