Salem-Spencer sets and Roth numbers #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This file defines Salem-Spencer sets and the Roth number of a set.
A Salem-Spencer set is a set without arithmetic progressions of length 3
. Equivalently, the
average of any two distinct elements is not in the set.
The Roth number of a finset is the size of its biggest Salem-Spencer subset. This is a more general
definition than the one often found in mathematical litterature, where the n
-th Roth number is
the size of the biggest Salem-Spencer subset of {0, ..., n - 1}
.
Main declarations #
mul_salem_spencer
: Predicate for a set to be multiplicative Salem-Spencer.add_salem_spencer
: Predicate for a set to be additive Salem-Spencer.mul_roth_number
: The multiplicative Roth number of a finset.add_roth_number
: The additive Roth number of a finset.roth_number_nat
: The Roth number of a natural. This corresponds toadd_roth_number (finset.range n)
.
TODO #
- Can
add_salem_spencer_iff_eq_right
be made more general? - Generalize
mul_salem_spencer.image
to Freiman homs
Tags #
Salem-Spencer, Roth, arithmetic progression, average, three-free
A Salem-Spencer, aka non averaging, set s
in an additive monoid
is a set such that the average of any two distinct elements is not in the set.
Instances for add_salem_spencer
A multiplicative Salem-Spencer, aka non averaging, set s
in a monoid is a set such that the
multiplicative average of any two distinct elements is not in the set.
Instances for mul_salem_spencer
Whether a given finset is Salem-Spencer is decidable.
Whether a given finset is Salem-Spencer is decidable.
The frontier of a closed strictly convex set only contains trivial arithmetic progressions. The idea is that an arithmetic progression is contained on a line and the frontier of a strictly convex set does not contain lines.
The additive Roth number of a finset is the cardinality of its biggest additive
Salem-Spencer subset. The usual Roth number corresponds to add_roth_number (finset.range n)
, see
roth_number_nat
.
The multiplicative Roth number of a finset is the cardinality of its biggest multiplicative Salem-Spencer subset.
The Roth number of a natural N
is the largest integer m
for which there is a subset of
range N
of size m
with no arithmetic progression of length 3.
Trivially, roth_number_nat N ≤ N
, but Roth's theorem (proved in 1953) shows that
roth_number_nat N = o(N)
and the construction by Behrend gives a lower bound of the form
N * exp(-C sqrt(log(N))) ≤ roth_number_nat N
.
A significant refinement of Roth's theorem by Bloom and Sisask announced in 2020 gives
roth_number_nat N = O(N / (log N)^(1+c))
for an absolute constant c
.
Equations
- roth_number_nat = {to_fun := λ (n : ℕ), ⇑add_roth_number (finset.range n), monotone' := roth_number_nat._proof_1}
A verbose specialization of add_salem_spencer.le_add_roth_number
, sometimes convenient in
practice.
The Roth number is a subadditive function. Note that by Fekete's lemma this shows that
the limit roth_number_nat N / N
exists, but Roth's theorem gives the stronger result that this
limit is actually 0
.
The Roth number has the trivial bound roth_number_nat N = O(N)
.