Sets sumfree in a group, and the jump sequence of the grid
DefinitionClassicalSchurLiftThis bundle defines the objects of the lift from the group to block-sum sets (Lemma 3 of the note).
- Let be a set with an addition; in the mission , where denotes the integers modulo . A subset is sumfree in (Lean
GroupSumFree) if for all , with the sum taken in and allowed. - For put (Lean
liftPrefix m₁ M L) . If with , then . - For , the lifted sequence (Lean
liftSeq m₁ m₂ M) is the sequence of the successive differences of :
When and , the numbers are the elements, in increasing order, of the grid
and is the sequence of successive jumps of in the sense of Definition 2.6 of Eliahou and Revuelta. It consists of runs of entries equal to , separated by entries equal to . For example, and give seven runs of six entries separated by six entries : a sequence of length and sum .
The lift turns a cover of the nonzero elements of by sets that are sumfree in the group into a sequence of positive integers whose block sums have small Schur degree and whose prefix averages are bounded. It is the source of the lower bound .
Formalization Note The predicate GroupSumFree is stated for any type with an addition, and is Mathlib's ZMod m. liftPrefix and liftSeq are defined for all parameters: the differences use truncated subtraction on , the length is when , and for Lean's conventions and apply. The theorems of the mission use them only with and , where the description as holds.
-- Generated from lean/ClassicalSchur/Lift.lean by skeleton
-- subtraction: every declaration except the def-material below is deleted,
-- and project imports are rewritten to their platform Definitions bundles.
import Mathlib
namespace ClassicalSchur
/-- A subset of an additive group is sumfree in the group when it has no
`x, y, z` with `x + y = z` (`x = y` allowed). -/
def GroupSumFree {G : Type*} [Add G] (S : Set G) : Prop := ∀ x ∈ S, ∀ y ∈ S, x + y ∉ S
/-- The `L`-th element, in increasing order, of `X = {u + M·j}`: with
`L = j·m₁ + u` and `u < m₁` it is `u + M·j`. -/
def liftPrefix (m₁ M L : ℕ) : ℕ := L % m₁ + M * (L / m₁)
/-- The sequence `A = ΔX` of jumps of `X = {u + M·j : u < m₁, j < m₂}`. -/
def liftSeq (m₁ m₂ M : ℕ) : List ℕ :=
(List.range (m₁ * m₂ - 1)).map fun k => liftPrefix m₁ M (k + 1) - liftPrefix m₁ M k
end ClassicalSchur