Skip to content

Add Erdős Problem 524 (Salem–Zygmund sup norm)#3758

Closed
kieranmcshane wants to merge 58 commits intogoogle-deepmind:mainfrom
kieranmcshane:add-erdos-524
Closed

Add Erdős Problem 524 (Salem–Zygmund sup norm)#3758
kieranmcshane wants to merge 58 commits intogoogle-deepmind:mainfrom
kieranmcshane:add-erdos-524

Conversation

@kieranmcshane
Copy link
Copy Markdown

@kieranmcshane kieranmcshane commented Apr 16, 2026

Summary

Formalizes Erdős Problem #524: the almost-sure order of magnitude of the sup norm of random polynomials with i.i.d. Rademacher coefficients on [-1, 1], per Chojecki's January 2026 resolution.

What is fully proven (no sorry)

Two-walk sandwich (Corollary 3) — FULLY PROVEN

  • Lower bound: max(|S_n|, |T_n|) ≤ M_n via endpoint evaluation
  • Upper bound: M_n ≤ max(max_k |S_k|, max_k |T_k|) via Abel summation identity + weight telescoping

Subgaussian tails (Proposition 4) — FULLY PROVEN

  • ℙ(M_n ≥ u√n) ≤ 4 exp(-u²/2) for n ≥ 1
  • Set containment via contrapositive of Abel bound + Finset.sup'_lt_iff
  • Union bound assembly with measure_union_le
  • Note: added 0 < n hypothesis (the original statement was false for n=0)

Running-max tail bound — FULLY PROVEN

  • ℙ(max_k |S_k| ≥ u√n) ≤ 2 exp(-u²/2) via union bound on one-sided bounds

Rademacher walk symmetry — FULLY PROVEN

  • ℙ(S_m ≥ 0) ≥ 1/2 via IdentDistrib.pi + measure_mem_eq
  • Rademacher symmetry: each a_k and -a_k identically distributed (four-case analysis on {±1} ae support)

Submartingale construction (partial)

  • Adapted: walk adapted to natural filtration + exp composition
  • Integrable: iIndepFun.integrable_exp_mul_sum with integrable_exp_mul_of_mem_Icc
  • One-step condition: pullout (condExp_mul_of_aestronglyMeasurable_left) + independence (condExp_indep_eq)
  • Remaining sorry: E[exp(λ·X)] ≥ 1 for Rademacher X (cosh(λ) ≥ 1)

Supporting infrastructure

  • randomPoly_at_one/neg_one, abs_randomPoly_le_supNorm, walk/alternatingWalk_le_supNorm
  • supNorm_le, abel_identity, weight_eq, abel_bound_nonneg
  • randomPoly_neg, walk_neg_eq_alternatingWalk, isRademacherSequence_neg_mul
  • rademacher_ae_mem_pm_one

What remains sorry and why

Theorem # sorrys Blocker
erdos_524 (meta) 1 Wraps sharp_upper_envelope + sparse_lower_envelope
sharp_upper_envelope (Thm 6) 1 Kolmogorov LIL not in Mathlib
levy_maximal_ineq 1 First-crossing-time decomposition + independence (~80 lines)
one_sided_running_max 2 cosh(λ) ≥ 1 computation + Doob assembly
sparse_lower_envelope (Thm 18) 1 2D KMT + Gao-Li-Wellner (multi-year)
exact_lower_constant (Rmk 19) 1 Open in mathematics

Verification

lake env lean FormalConjectures/ErdosProblems/524.lean — zero errors, 6 sorry warnings.

🤖 Generated with Claude Code

@github-actions github-actions bot added the erdos-problems Erdős Problems label Apr 16, 2026
@google-cla
Copy link
Copy Markdown

google-cla bot commented Apr 16, 2026

Thanks for your pull request! It looks like this may be your first contribution to a Google open source project. Before we can look at your pull request, you'll need to sign a Contributor License Agreement (CLA).

View this failed invocation of the CLA check for more information.

For the most up to date status, view the checks section at the bottom of the pull request.

@kieranmcshane
Copy link
Copy Markdown
Author

@googlebot I signed it!

Formalize and partially certify Chojecki (Jan 2026) resolution of
Erdős Problem 524 on sup norm of random ±1 polynomials on [-1,1].

Machine-verified proofs (sorry-free, Lean kernel checked):
- Two-walk sandwich (Corollary 3): Abel summation + weight telescoping
- Subgaussian tails assembly: measure_mono + union bound + 2+2=4
- Running-max tail bound: set decomposition + neg Rademacher + arithmetic
- Submartingale adapted + integrable cases: Filtration.natural + exp composition
- isRademacherSequence_neg_mul: iIndepFun.comp + parity case split
- rademacher_ae_mem_pm_one, rademacher_walk_nonneg_prob, identDistrib helpers

Remaining sorry's (infrastructure gaps, not paper errors):
- one_sided_running_max: Doob maximal_ineq wiring (~50 lines)
- sharp_upper_envelope: Kolmogorov LIL (not in Mathlib)
- sparse_lower_envelope: 2D KMT coupling (multi-year project)
- exact_lower_constant: open problem in mathematics

Paper: https://www.ulam.ai/research/erdos524.pdf
kieranmcshane and others added 7 commits April 16, 2026 11:43
Restore the 1073-line proof version from reflog (831ff19).
Break the one_sided_running_max sorry into two modular pieces:
- hdobo: Doob's maximal inequality application (sorry)
- hmgf: sub-Gaussian MGF bound via Hoeffding's lemma (sorry)
- Combination step: fully proven via exp_sub + field_simp algebra

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Prove E[exp(λ·S_n)] ≤ exp(λ²n/2) via:
- iIndepFun.mgf_sum: factorize MGF of walk as product of individual MGFs
- hasSubgaussianMGF_of_mem_Icc_of_integral_eq_zero (Hoeffding's lemma):
  each Rademacher a_j ∈ [-1,1] with E[a_j]=0 gives mgf ≤ exp(lam²/2)
- Product of exp = exp of sum: ∏ exp(lam²/2) = exp(n·lam²/2)

Also prove the Doob+MGF combination step:
  P(walk≥t) ≤ E[f_n]/exp(λt) ≤ exp(λ²n/2)/exp(λt) = exp(-t²/(2n))

Only sorry remaining in one_sided_running_max: the Doob maximal
inequality application (connecting maximal_ineq to the probability bound).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…is sorry-free

Complete the final sorry in one_sided_running_max by applying Doob's
maximal inequality (maximal_ineq) to the exponential submartingale:
- Set containment: {walk ≥ t} ⊆ {sup' f ≥ exp(λt)} via exp monotonicity
- Doob bound: ε·ℙ(sup'≥ε) ≤ E[f_n·1_{sup'≥ε}] ≤ E[f_n]
- ENNReal→ℝ conversion: ℙ(A) ≤ E[f_n]/exp(λt)

Combined with the previously proven sub-Gaussian MGF bound and
combination algebra, one_sided_running_max is now fully proven.

Sorry count: 6 → 5. Remaining sorrys:
- erdos_524 (meta-wrapper)
- sharp_upper_envelope (Kolmogorov LIL not in Mathlib)
- levy_maximal_ineq (first-crossing decomposition)
- sparse_lower_envelope (2D KMT, multi-year)
- exact_lower_constant (open in mathematics)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add section LIL with:
- lilNorm: normalizing function √(2n log log n)
- walk_tail_bound: ℙ(S_n ≥ t) ≤ exp(-t²/(2n)), proven via
  one_sided_running_max (corollary of Doob's maximal inequality)
- kolmogorov_lil_upper_bound: limsup S_n/√(2n log log n) ≤ 1 a.s.
  (sorry'd — proof sketch via sparse subsequence + first BC +
  interpolation documented in docstring)

The walk_tail_bound is the key input for the Borel-Cantelli argument.
The full LIL proof requires ~300 more lines of real-analysis estimates.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add lil_upper_for_eps (core: sparse subsequence + first BC + interpolation)
and kolmogorov_lil_upper_bound (assembly: take ε → 0).
Both sorry'd pending ~300 lines of real-analysis estimates.

walk_tail_bound is proven (ℙ(S_n ≥ t) ≤ exp(-t²/(2n)) via one_sided_running_max).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Prove ℙ(S_n ≥ (1+ε)·√(2n log log n)) ≤ exp(-(1+ε)²·log log n)
via walk_tail_bound + algebraic simplification of the exponent.

This is the key input for the first Borel-Cantelli argument on
the sparse subsequence in the LIL upper bound proof.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Break kolmogorov_lil_upper_bound into 4 modular components:

1. lil_tail_at_scale (PROVEN): ℙ(S_n ≥ (1+ε)·φ(n)) ≤ exp(-(1+ε)²·log log n)
2. lil_sparse_bc (sorry): a.s. eventually S_{n_k} < (1+ε)·φ(n_k)
   on sparse subsequence, via summability + first Borel-Cantelli
3. lil_interpolation (sorry): |S_n - S_{n_k}| ≤ ε·φ(n) a.s. eventually,
   via running-max bound on increments + Borel-Cantelli
4. lil_upper_for_eps (sorry): assembly combining 2+3
5. kolmogorov_lil_upper_bound (sorry): take ε → 0

Each sorry has a clear proof sketch. The main blockers are:
- Summability estimates (∑ k^{-p} for p > 1)
- Real-analysis bounds on ⌊c^k⌋ growth and log log asymptotics
- Independence of walk increments for the interpolation step

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@Smetalo
Copy link
Copy Markdown
Contributor

Smetalo commented Apr 16, 2026

Is it planned to merge this PR or #3587 (that contains problem 524, among other things)?

In lil_sparse_bc, prove the first Borel-Cantelli application:
- Define events E_k = {S_{n_k} ≥ (1+ε)·φ(n_k)}
- Apply measure_setOf_frequently_eq_zero (first BC)
- Convert "not frequently E_k" to "eventually S_{n_k} < bound"

Remaining sorry: hsum (∑ ℙ(E_k) < ∞), which requires:
- lil_tail_at_scale to bound each ℙ(E_k)
- lil_tail_summable (sorry) for the series comparison

Also added lil_tail_summable as a separate sorry for the
real-analysis estimate that ∑ exp(-(1+ε)²·log log ⌊c^k⌋₊) < ∞.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@kieranmcshane
Copy link
Copy Markdown
Author

kieranmcshane commented Apr 16, 2026

@Smetalo My PR updates 524 to reflect Chojecki's 2026 resolution (solved, not open) and includes proven lemmas. Happy to coordinate with @ryantuck

kieranmcshane and others added 9 commits April 16, 2026 13:01
Prove the ε → 0 step: if for each m ≥ 1 a.s. eventually f(n) ≤ 1+1/m,
then a.s. limsup f ≤ 1. Uses ae_all_iff for the countable intersection.

The final limsup_le step is sorry'd pending IsCobounded/IsBounded
conditions for the walk ratio (straightforward from walk growth bounds).

Also proves the Borel-Cantelli logic in lil_sparse_bc: the conversion
from "not frequently" to "eventually not" is machine-verified.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Refine the sorry decomposition in the LIL upper bound:
- lil_sparse_bc: BC logic proven, hsum sorry isolated to
  pointwise ℙ(E_k) ≤ ofReal(exp(...)) comparison
- kolmogorov_lil_upper_bound: countable intersection proven,
  final limsup_le sorry isolated to IsCobounded/IsBounded conditions
- lil_tail_summable: sorry isolated to p-series convergence estimate

The logical backbone (Doob → tail → Chebyshev → BC → countable ∩)
is fully machine-verified. Remaining sorrys are pure real-analysis
estimates (floor asymptotics, p-series, log growth, toReal↔ofReal).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The hsum comparison requires splitting the tsum at k=N where n_k
becomes large enough for lil_tail_at_scale. For k < N, use ℙ ≤ 1
(finite sum). For k ≥ N, use the exponential tail bound + comparison
with lil_tail_summable.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Show how sparse BC + interpolation combine to give the full result:
- Choose δ = ε/3 and c = 1 + δ
- Apply lil_sparse_bc (a.s. eventually S_{n_k} < (1+δ)·φ(n_k))
- Apply lil_interpolation (a.s. eventually |increment| ≤ δ·φ(n))
- Combine: S_n ≤ S_{n_k} + |increment| < (1+2δ)·φ(n) ≤ (1+ε)·φ(n)

Remaining sorry: the arithmetic combining step
(S_n decomposition + φ monotonicity + 2δ ≤ ε).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- lil_interpolation: detailed 5-step proof route documented
  (shifted walk independence, running-max tail, summability, asymptotics, BC)
- kolmogorov_lil_upper_bound: by_contra + Archimedean structure
  (find m with 1+1/m < limsup, contradict eventually ≤ 1+1/m)
- lil_upper_for_eps: assembly structure proven (δ=ε/3, c=1+δ, combine)

All sorry routes are clearly documented. The logical backbone is verified.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Apply Summable.of_norm_bounded_eventually_nat with comparison function
k^{-(1+ε)²} and Real.summable_nat_rpow for the convergence (since
(1+ε)² > 1 implies -(1+ε)² < -1).

Remaining sorry: the pointwise eventually bound
  ‖exp(-(1+ε)²·log log ⌊c^k⌋₊)‖ ≤ k^{-(1+ε)²}
which is a floor/log asymptotic estimate (log ⌊c^k⌋₊ ≥ k for large k).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Simplify lil_tail_summable sorry to a clean single sorry with
documented proof route (p-series comparison via summable_nat_rpow
+ floor/log asymptotics).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove levy_maximal_ineq (unused standalone sorry) since
one_sided_running_max provides the stronger exp(-t²/(2n)) bound
via Doob's inequality. This eliminates one sorry warning.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
kieranmcshane and others added 26 commits April 16, 2026 15:41
Two new sorry-free lemmas for the LIL summability chain:
- floor_c_pow_lower: eventually ⌊c^k⌋₊ ≥ c^k/2 (via Nat.sub_one_lt_floor)
- log_floor_c_pow_lower: eventually log ⌊c^k⌋₊ ≥ k·log(c)/2
  (via floor bound + Real.log_div + Real.log_pow + field_simp arithmetic)

Also refactored lil_tail_summable to use these lemmas.
Added log_log_floor_ge_log (sorry) as the remaining bridge.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Prove that exp(-p·log log ⌊c^k⌋₊) ≤ (log c/2)^{-p} · k^{-p} eventually,
using:
- log_floor_c_pow_lower for the floor/log bound
- Real.rpow_def_of_pos for exp(log x · y) = x^y
- mul_rpow for (a·b)^p = a^p · b^p

This replaces the old log_log_floor_ge_log which required p ≥ 2.
The new comparison works for ALL p > 0, avoiding the p < 2 issue.

Sorry count: 10 → 9. Three new sorry-free lemmas in this session:
floor_c_pow_lower, log_floor_c_pow_lower, exp_neg_p_log_log_floor_le.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Close the last sorry in lil_tail_summable by chaining:
- exp_neg_p_log_log_floor_le: exp(-p·log log n_k) ≤ C·k^{-p} eventually
- Real.summable_nat_rpow: ∑ k^{-p} converges for p > 1
- Summable.of_norm_bounded_eventually_nat: comparison test

The full chain floor_c_pow_lower → log_floor_c_pow_lower →
exp_neg_p_log_log_floor_le → lil_tail_summable is machine-verified.

Sorry count: 9 → 8.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Close the hsum sorry in lil_sparse_bc by pointwise comparison:
- ℙ(E k) ≤ ofReal(exp(-(1+ε)²·log log n_k)) for ALL k
- When log log n_k ≤ 0: exp(nonneg) ≥ 1 ≥ ℙ(E k)
- When log log n_k > 0 and n_k ≥ 1: lil_tail_at_scale
- When n_k = 0: log 0 = 0, so exp(0) = 1 ≥ ℙ(E k)
- Sum comparison via lil_tail_summable (now sorry-free)

Uses le_ofReal_iff_toReal_le for the ENNReal↔ℝ conversion.

Sorry count: 8 → 7.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The 3 remaining LIL sorrys form a chain:
  lil_interpolation → lil_upper_for_eps → kolmogorov_lil_upper_bound

lil_interpolation needs:
  (1) shifted walk Rademacher property (iIndepFun.comp with injective shift)
  (2) running_max_tail on the increment
  (3) second BC application with summable tails
  (4) asymptotic comparison C·√(Δn_k·log k) vs ε·φ(n)

kolmogorov_lil_upper_bound needs IsCoboundedUnder, which requires
applying lil_upper_for_eps to -walk (Rademacher symmetry).

7 sorrys, 0 errors. ~30 sorry-free theorems.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The shifted Rademacher sequence (fun j => a (m+j)) is i.i.d. Rademacher
because iIndepFun.precomp with the injective shift (m+·) preserves
independence, and the marginals are unchanged.

This is the key ingredient for lil_interpolation's shifted walk argument.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
All ingredients for lil_interpolation are now proven and available:
- isRademacherSequence_shift (sorry-free): shifted walk is Rademacher
- running_max_tail (sorry-free): bounds running max of Rademacher walk
- measure_setOf_frequently_eq_zero (Mathlib): first Borel-Cantelli
- floor_exp_tendsto (sorry-free): ⌊c^k⌋₊ → ∞

The sorry is pure assembly: reindex the walk sum, apply running_max_tail,
BC summability, and asymptotic comparison (~50 lines).

7 sorrys, 0 errors, ~35 sorry-free theorems.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
All ingredients proven. Sorry is pure assembly (~50 lines):
- Finset sum reindexing for walk difference identity
- running_max_tail on shifted Rademacher walk
- BC summability with 2/(k+2)²
- Asymptotic: Δn_k·log(k+2)/(n·log log n) → 0

1465 lines, 7 sorrys, 0 errors, ~35 sorry-free theorems.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The outer Borel-Cantelli structure of lil_interpolation is verified:
- Define events F_k (increment running max exceeds ε·lilNorm)
- hFsum: ∑ ℙ(F_k) < ∞ (sorry — needs running_max_tail + comparison)
- measure_setOf_frequently_eq_zero: a.s. eventually ¬F_k
- calc chain: convert ¬(eventually bounded) to frequently F_k (sorry)

The BC logic itself is machine-verified. Two inner sorrys remain:
(1) hFsum summability (running_max_tail application)
(2) set inclusion (walk difference = shifted walk + lilNorm monotonicity)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1483 lines, 8 sorrys, 0 errors, ~35 sorry-free theorems.

LIL sorry chain (4 sorrys, all pure assembly):
- hFsum (1199): running_max_tail on shifted walk + summability comparison
- set inclusion (1212): walk difference identity + lilNorm monotonicity
- lil_upper_for_eps (1239): covering + decomposition + δ-arithmetic
- kolmogorov_lil_upper_bound (1272): IsCoboundedUnder + Archimedean

Non-LIL sorrys (4):
- erdos_524 (385): meta-wrapper
- sharp_upper_envelope (414): needs full LIL + Chung
- sparse_lower_envelope (1448): blocked (2D KMT)
- exact_lower_constant (1481): open mathematics

All mathematical ingredients are sorry-free. Remaining work is
Lean API plumbing for connecting proven components.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Redefine the bad events in lil_interpolation to use threshold
2√(Δn_k·log(k+2)) instead of ε·lilNorm(n_k). This gives:
- ℙ(F_k) ≤ 2/(k+2)² via running_max_tail with u=2√(log(k+2))
- Summable tails (∑ 2/(k+2)² converges) for ALL ε > 0 and c > 1
- Eventually 2√(Δn_k·log(k+2)) ≤ ε·lilNorm(n) (asymptotic comparison)

The old threshold ε·lilNorm(n_k) required ε²/c > 1 which fails for small ε.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The tsum comparison structure for hFsum in lil_interpolation is verified:
- ne_top_of_le_ne_top with summable bound
- ENNReal.tsum_le_tsum for pointwise comparison
- Summable bound: 2 * (summable_one_div_nat_pow shifted by +2)
  via comp_injective with Nat.add_right_cancel

Remaining sorry: pointwise ℙ(F k) ≤ ofReal(2*exp(-2*log(k+2)))
(running_max_tail on shifted walk + exp↔rpow conversion).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When Δn_k = ⌊c^(k+1)⌋₊ - ⌊c^k⌋₊ = 0, the Finset.Icc 1 0 is empty,
so F k = ∅ and ℙ(F k) = 0. Proved via Finset.mem_Icc + omega.

The Δ > 0 case (running_max_tail application) remains sorry'd.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The running_max_tail on the shifted Rademacher walk (isRademacherSequence_shift)
compiles with u = 2√(log(k+2)) and Δ steps.

Remaining sorry: set equality (F k = running_max event) + ENNReal conversion
+ exp(-2log(k+2)) = 1/(k+2)² arithmetic.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Close the exp↔rpow conversion step in the hFsum calc:
- u² = 4·log(k+2) via sq_sqrt
- exp(-2·log(k+2)) = (k+2)^{-2} via rpow_def_of_pos
- (k+2)^{-2} = 1/(k+2)² via rpow_neg + rpow_natCast + push_cast

Remaining sorry in hFsum: connecting F_k set to running_max_tail
(set containment + measure_mono + toReal conversion).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The hFsum calc proof is nearly complete:
- Δ=0 case: proven (empty Finset.Icc)
- Δ>0 case: running_max_tail compiles, exp(-2log(k+2))=1/(k+2)² proven
- Remaining: set containment F_k = running_max event (~5 lines, Nat.cast issue)

The exp↔rpow conversion chain is fully verified:
u²=4log(k+2) → exp(-2log(k+2)) → rpow_neg → rpow_natCast → 1/(k+2)²

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The hFsum proof structure is nearly complete:
- Δ=0 case: proven
- Δ>0 case: running_max_tail compiles, exp arithmetic proven
- Remaining: threshold equality (Nat.cast_sub + √(a·b)=√a·√b)
  and measure_mono from set containment.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Close the hFsum sorry in lil_interpolation:
- Set equality: F_k = running_max event via hthresh (Nat.cast_sub +
  sqrt_mul + mul_assoc) and hthresh ▸ for both Iff directions
- Running_max_tail on shifted walk: isRademacherSequence_shift
- Exp arithmetic: exp(-2log(k+2)) = 1/(k+2)² via rpow chain
- Summability: ∑ 2/(k+2)² via summable_one_div_nat_pow + comp_injective
- First BC: measure_setOf_frequently_eq_zero

Sorry count: 8 → 7.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@kieranmcshane kieranmcshane mentioned this pull request Apr 17, 2026
2 tasks
All closeable proof obligations discharged. The full LIL upper bound
chain is machine-verified: Rademacher infrastructure, submartingale
construction, Doob maximal inequality, sub-Gaussian MGF, running max
tail bound, LIL summability, sparse Borel-Cantelli, interpolation,
assembly, and limsup bound. 4 blocked sorrys remain (Chung's exact
LIL / LIL lower bound — not in Mathlib).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@kieranmcshane
Copy link
Copy Markdown
Author

Closing in favor of a new PR from the statements-only branch (per repo guidelines). Full proofs remain at https://github.com/kieranmcshane/formal-conjectures/tree/add-erdos-524

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

erdos-problems Erdős Problems

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants