Salem-Spencer sets and Roth numbers #
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 literature, where the n-th Roth number is
the size of the biggest Salem-Spencer subset of {0, ..., n - 1}.
Main declarations #
MulSalemSpencer: Predicate for a set to be multiplicative Salem-Spencer.AddSalemSpencer: Predicate for a set to be additive Salem-Spencer.mulRothNumber: The multiplicative Roth number of a finset.addRothNumber: The additive Roth number of a finset.rothNumberNat: The Roth number of a natural. This corresponds toaddRothNumber (Finset.range n).
TODO #
- Can
addSalemSpencer_iff_eq_rightbe made more general? - Generalize
MulSalemSpencer.imageto 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
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
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 addRothNumber (Finset.range n), see
rothNumberNat.
Equations
- addRothNumber = { toFun := fun (s : Finset α) => Nat.findGreatest (fun (m : ℕ) => ∃ (t : Finset α) (_ : t ⊆ s), t.card = m ∧ AddSalemSpencer ↑t) s.card, monotone' := ⋯ }
Instances For
The multiplicative Roth number of a finset is the cardinality of its biggest multiplicative Salem-Spencer subset.
Equations
- mulRothNumber = { toFun := fun (s : Finset α) => Nat.findGreatest (fun (m : ℕ) => ∃ (t : Finset α) (_ : t ⊆ s), t.card = m ∧ MulSalemSpencer ↑t) s.card, monotone' := ⋯ }
Instances For
Equations
- ⋯ = ⋯
Instances For
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, rothNumberNat N ≤ N, but Roth's theorem (proved in 1953) shows that
rothNumberNat N = o(N) and the construction by Behrend gives a lower bound of the form
N * exp(-C sqrt(log(N))) ≤ rothNumberNat N.
A significant refinement of Roth's theorem by Bloom and Sisask announced in 2020 gives
rothNumberNat N = O(N / (log N)^(1+c)) for an absolute constant c.
Equations
- rothNumberNat = { toFun := fun (n : ℕ) => addRothNumber (Finset.range n), monotone' := rothNumberNat.proof_1 }
Instances For
A verbose specialization of addSalemSpencer.le_addRothNumber, sometimes convenient in
practice.
The Roth number is a subadditive function. Note that by Fekete's lemma this shows that
the limit rothNumberNat N / N exists, but Roth's theorem gives the stronger result that this
limit is actually 0.
The Roth number has the trivial bound rothNumberNat N = O(N).