Olson's Lemma 3.1: some translate meets in points
ProvedErdos131.olson_lemma3_1Let be an abelian group and let be non-empty and proper, with either or its complement finite. Put
Let be distinct non-zero elements of and suppose the subgroup they generate has . Then
for at least one index .
This is the averaging step of Olson's paper: it says that among prescribed non-zero elements, some translate of must stick out of by a definite amount. It is what makes the induction of Theorem 3.1 gain roughly new subset sums at each step, and it is proved in the paper's §4 from Theorem 2.2 by subadditivity of .
Formalisation notes.
is a Set G rather than a Finset G because Olson explicitly allows to be infinite with finite complement. The number is pinned down by
(k : ℕ∞) = min B.encard Bᶜ.encard;
working in ℕ∞ is what makes mean what Olson means, since an infinite side is and the minimum is then the finite side.
The hypothesis hfin : B.Finite ∨ Bᶜ.Finite is the source's "either or is finite". It is logically redundant — if both sides were infinite the minimum would be , which is not the image of any natural number, so hk would already be unsatisfiable — but it is kept because the source states it.
The size condition on is also compared in ℕ∞, so the Remark that follows the lemma in the paper ("the subgroup may be infinite, in which case the condition is satisfied") is covered with no case split.
The elements are carried by a Finset G, which supplies their distinctness for free; is T.card and hT0 is the non-zeroness. The translate is written as the image of , and as Set.ncard — the intersection is finite whichever of is, so ncard is the honest count.
Olson states the lemma for an arbitrary (possibly non-abelian) group. This card is the abelian case, which is the one this mission consumes; in the abelian case left and right translates agree, so nothing else changes.
import Definitions.Def_Erdos131_NonDividing import Mathlib.Tactic open Erdos131
theorem Erdos131.olson_lemma3_1 {G : Type*} [AddCommGroup G]
(B : Set G) (hBne : B.Nonempty) (hBproper : B ≠ Set.univ)
(hfin : B.Finite ∨ Bᶜ.Finite)
(k : ℕ) (hk : (k : ℕ∞) = min B.encard Bᶜ.encard)
(T : Finset G) (hT0 : (0 : G) ∉ T)
(hH : (2 * k : ℕ∞) ≤ (AddSubgroup.closure (T : Set G) : Set G).encard) :
∃ v ∈ T, min (((k : ℝ) + 1) / 2) (((T.card : ℝ) + 2) / 4)
≤ (((fun x => x + v) '' B) ∩ Bᶜ).ncard := by sorry