Research notes on every problem, and a library of the papers behind them. Built from the open erdos repository.
Updated
This proves the entire statement of
L22
by machine-checked Lean, at tier 2 for the Lean sources of 2026-09-28 that
the card's standing names; the prose route it formalizes is the section "Proved
near-logarithmic bound via a binary tree" of
the proof sketch, together with that
page's reduction of a real configuration to an integer one. The formal entry
point is Erdos.Problem963.exists_real_dissociated_large in
lean/Erdos/Problem963/CardBound.lean: it takes a dissociated subset of
of maximum size (Finset.exists_max_image), applies
real_card_bound_of_integer_card_bound to integer_card_bound to get
, and finishes with log_bound_of_card_le.
The modules, all in the namespace Erdos.Problem963, cover the argument as
follows. BinaryWords.lean encodes bounded natural numbers as binary words
(encodeNat, codeSet) and proves that a set of more than words
contains a word with companions at pairwise distinct first-difference
levels (card_le_pow_of_branchRank_le, exists_large_levels,
exists_firstDiff_companions); this is the prose count of branching vertices
on a root-to-leaf path, with words of length the largest element in place of
residues modulo . BitValuation.lean identifies the first differing
bit of two bounded naturals with the 2-adic valuation of their integer
difference (firstDiff_encodeNat_eq_padicValInt). ResidueTree.lean turns
this into a pivot with more than companions whose differences from
have pairwise distinct 2-adic valuations, first for natural numbers and
then, after translation by the minimum, for integers
(exists_nat_valuation_companions, exists_int_valuation_companions).
Valuation.lean proves that nonzero integers with distinct valuations cannot
sum to zero (sum_ne_zero_of_distinct_valuation,
signed_sum_ne_zero_of_distinct_valuation), that the companions of the pivot
are dissociated (zero_pivot_dissociated), and that a nonzero pivot
together with companions whose valuations avoid the
values starting at the pivot's own valuation is
dissociated (pivot_coefficient_valuation_bound, pivot_dissociated); the
last converts two equal subset sums into a signed relation whose pivot
coefficient has magnitude at most . CardBound.lean assembles the
integer estimate
(integer_card_le_pow, integer_card_bound). IntegerModel.lean builds
the integer model of a finite real set: a -linear functional
that does not vanish on any of the finitely many nonzero differences of
subset sums (Module.exists_dual_forall_apply_ne_zero), with its
denominators cleared (IsLocalization.exist_integer_multiples), gives an
injective map to the integers preserving and reflecting every subset-sum
equality (exists_rational_subset_sum_model,
exists_integer_subset_sum_model); dissociation and the cardinal bound
transfer along it (addDissociated_image_of_subset_sum_reflection,
real_card_bound_of_integer_card_bound). Unlike the prose reduction, which
chooses a rational functional preserving the signs of all nonzero ternary
combinations, this model preserves subset-sum equalities only, which is all
the argument uses. LogBound.lean converts with into
by the two cases and
(log_bound_of_card_le).