Documentation

LeanPool.PFR.AddCombi.BSG

The Balog-Szemerédi-Gowers theorem #

A straightforward calculation shows that sets of small doubling have large additive energy. The converse is almost true, in the sense that a set of large additive energy contains a large set of small doubling. This is the content of the Balog-Szemerédi-Gowers theorem, which this file proves.

theorem oneOfPair_aux {α : Type u_1} [DecidableEq α] {H : Finset (α × α)} {X : Finset α} {x : α} (hH : HX ×ˢ X) :
{yzH | yz.1 = x}.card = {cX | (x, c) H}.card
noncomputable def oneOfPair {α : Type u_1} [Fintype α] [DecidableEq α] (H : Finset (α × α)) (X : Finset α) :

Elements of X with at least the threshold density of partners in H.

Equations
Instances For
    theorem oneOfPair_subset {α : Type u_1} [Fintype α] [DecidableEq α] {H : Finset (α × α)} {X : Finset α} :
    oneOfPair H XX
    theorem mem_oneOfPair {α : Type u_1} [Fintype α] [DecidableEq α] {H : Finset (α × α)} {X : Finset α} {x : α} :
    x oneOfPair H X x X 3 / 4 * X.dens {cX | (x, c) H}.dens
    theorem oneOfPair_bound_one {α : Type u_1} [Fintype α] [DecidableEq α] {H : Finset (α × α)} {X : Finset α} :
    (∑ xX \ oneOfPair H X, {cX | (x, c) H}.dens) / (Fintype.card α) 3 / 4 * X.dens ^ 2
    theorem oneOfPair_bound_two {α : Type u_1} [Fintype α] [DecidableEq α] {H : Finset (α × α)} {X : Finset α} (hH : HX ×ˢ X) (Hcard : 7 / 8 * X.dens ^ 2 H.dens) :
    1 / 8 * X.dens ^ 2 X.dens * (oneOfPair H X).dens
    theorem quadruple_bound_c {α : Type u_1} [Fintype α] [DecidableEq α] {H : Finset (α × α)} {X : Finset α} {a b : α} (ha : a oneOfPair H X) (hb : b oneOfPair H X) :
    X.dens / 2 {cX | (a, c) H (b, c) H}.dens
    theorem quadruple_bound_right {G : Type u_1} [AddCommGroup G] [DecidableEq G] {B : Finset G} {x a b : G} (H : Finset (G × G)) (X : Finset G) (h : x = a - b) :
    ({cX | (a, c) H (b, c) H}.sigma fun (c : G) => {x ∈ (B ×ˢ B) ×ˢ B ×ˢ B | match x with | ((a₁, a₂), a₃, a₄) => a₁ - a₂ = a - c a₃ - a₄ = b - c}).card {x ∈ (B ×ˢ B) ×ˢ B ×ˢ B | match x with | ((a₁, a₂), a₃, a₄) => a₁ - a₂ - (a₃ - a₄) = a - b}.card
    theorem claim_one {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] {A B : Finset G} {K : Type u_2} [Semifield K] [CharZero K] [StarRing K] :
    (Finset.univ.expect fun (x : G) => (((↑A).indicator fun (x : G) => 1) (↑B).indicator fun (x : G) => 1) x * (A (x +ᵥ B)).dens) = (A.addEnergy' B)
    theorem claim_two {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] {A B : Finset G} :
    (A.addEnergy' B) ^ 2 / (A.dens * B.dens) Finset.univ.expect fun (x : G) => (((↑A).indicator fun (x : G) => 1) (↑B).indicator fun (x : G) => 1) x * (A (x +ᵥ B)).dens ^ 2
    theorem claim_three {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] {A B : Finset G} {H : Finset (G × G)} (hH : HA ×ˢ A) :
    (Finset.univ.expect fun (x : G) => (((↑A).indicator fun (x : G) => 1) (↑B).indicator fun (x : G) => 1) x * ((A (x +ᵥ B)) ×ˢ (A (x +ᵥ B)) H).dens) = (∑ abH, Finset.univ.expect fun (x : G) => (((↑A).indicator fun (x : G) => 1) (↑B).indicator fun (x : G) => 1) x * ((↑B).indicator (fun (x : G) => 1) (ab.1 - x) * (↑B).indicator (fun (x : G) => 1) (ab.2 - x))) / (Fintype.card G) ^ 2
    theorem claim_four {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] {A B : Finset G} (ab : G × G) :
    (Finset.univ.expect fun (x : G) => (((↑A).indicator fun (x : G) => 1) (↑B).indicator fun (x : G) => 1) x * ((↑B).indicator (fun (x : G) => 1) (ab.1 - x) * (↑B).indicator (fun (x : G) => 1) (ab.2 - x))) B.dens * (((↑B).indicator fun (x : G) => 1) (↑B).indicator fun (x : G) => 1) (ab.1 - ab.2)
    theorem claim_five {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] {A B : Finset G} {H : Finset (G × G)} (hH : HA ×ˢ A) :
    (Finset.univ.expect fun (x : G) => (((↑A).indicator fun (x : G) => 1) (↑B).indicator fun (x : G) => 1) x * ((A (x +ᵥ B)) ×ˢ (A (x +ᵥ B)) H).dens) (B.dens * abH, (((↑B).indicator fun (x : G) => 1) (↑B).indicator fun (x : G) => 1) (ab.1 - ab.2)) / (Fintype.card G) ^ 2
    noncomputable def choiceH {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] (A B : Finset G) (c : ) :
    Finset (G × G)

    Pairs in A × A whose difference has bounded convolution weight in B.

    Equations
    Instances For
      theorem choiceH_subset {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] {A B : Finset G} {c : } :
      choiceH A B cA ×ˢ A
      theorem claim_six {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] {A B : Finset G} (c : ) (hc : 0 c) :
      (Finset.univ.expect fun (x : G) => (((↑A).indicator fun (x : G) => 1) (↑B).indicator fun (x : G) => 1) x * ((A (x +ᵥ B)) ×ˢ (A (x +ᵥ B)) choiceH A B c).dens) c / 2 * ((A.addEnergy' B) ^ 2 / (A.dens * B.dens))
      theorem claim_seven {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] {A B : Finset G} {c : } (hc : 0 c) :
      (Finset.univ.expect fun (x : G) => (((↑A).indicator fun (x : G) => 1) (↑B).indicator fun (x : G) => 1) x * (c / 2 * ((A.addEnergy' B) ^ 2 / (A.dens ^ 2 * B.dens ^ 2)) + ((A (x +ᵥ B)) ×ˢ (A (x +ᵥ B)) choiceH A B c).dens)) Finset.univ.expect fun (x : G) => (((↑A).indicator fun (x : G) => 1) (↑B).indicator fun (x : G) => 1) x * (c * (A (x +ᵥ B)).dens ^ 2)
      theorem claim_eight {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] {c : } (hc : 0 c) (A B : Finset G) :
      ∃ (x : G), c / 2 * ((A.addEnergy' B) ^ 2 / (A.dens ^ 2 * B.dens ^ 2)) + ((A (x +ᵥ B)) ×ˢ (A (x +ᵥ B)) choiceH A B c).dens c * (A (x +ᵥ B)).dens ^ 2
      theorem lemma_one {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] {A B : Finset G} {c K : } (hc : 0 < c) (hK : 0 < K) (hE : K⁻¹ * (A.dens ^ 2 * B.dens) (A.addEnergy' B)) (hA : A.Nonempty) (hB : B.Nonempty) :
      ∃ (x : G), XA (x +ᵥ B), A.dens / (2 * K) X.dens (1 - c) * X.dens ^ 2 {xX ×ˢ X | match x with | (a, b) => c / 2 * (K ^ 2)⁻¹ * A.dens (((↑B).indicator fun (x : G) => 1) (↑B).indicator fun (x : G) => 1) (a - b)}.dens
      theorem lemma_one' {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] {A B : Finset G} {c K : } (hc : 0 < c) (hK : 0 < K) (hE : K⁻¹ * (A.dens ^ 2 * B.dens) (A.addEnergy' B)) (hA : A.Nonempty) (hB : B.Nonempty) :
      ∃ (x : G), XA (x +ᵥ B), A.dens / (2 * K) X.dens (1 - c) * X.dens ^ 2 {xX ×ˢ X | match x with | (a, b) => c / 2 * (K ^ 2)⁻¹ * A.dens (((↑B).indicator fun (x : G) => 1) (↑B).indicator fun (x : G) => 1) (a - b)}.dens
      theorem quadruple_bound_other {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] {A B : Finset G} {a b c : G} {K : } {H : Finset (G × G)} (hac : (a, c) H) (hbc : (b, c) H) (hH : xH, A.dens / (2 ^ 4 * K ^ 2) (((↑B).indicator fun (x : G) => 1) (↑B).indicator fun (x : G) => 1) (x.1 - x.2)) :
      (A.dens / (2 ^ 4 * K ^ 2)) ^ 2 {x ∈ (B ×ˢ B) ×ˢ B ×ˢ B | match x with | ((a₁, a₂), a₃, a₄) => a₁ - a₂ = a - c a₃ - a₄ = b - c}.card / (Fintype.card G) ^ 2
      theorem quadruple_bound_left {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] {A B X : Finset G} {a b : G} {K : } {H : Finset (G × G)} (ha : a oneOfPair H X) (hb : b oneOfPair H X) (hH : xH, A.dens / (2 ^ 4 * K ^ 2) (((↑B).indicator fun (x : G) => 1) (↑B).indicator fun (x : G) => 1) (x.1 - x.2)) :
      X.dens / 2 * (A.dens / (2 ^ 4 * K ^ 2)) ^ 2 ({cX | (a, c) H (b, c) H}.sigma fun (c : G) => {x ∈ (B ×ˢ B) ×ˢ B ×ˢ B | match x with | ((a₁, a₂), a₃, a₄) => a₁ - a₂ = a - c a₃ - a₄ = b - c}).card / (Fintype.card G) ^ 3
      theorem quadruple_bound {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] {A B : Finset G} {H : Finset (G × G)} {X : Finset G} {K : } {x : G} (hx : x oneOfPair H X - oneOfPair H X) (hH : xH, A.dens / (2 ^ 4 * K ^ 2) (((↑B).indicator fun (x : G) => 1) (↑B).indicator fun (x : G) => 1) (x.1 - x.2)) :
      A.dens ^ 2 * X.dens / (2 ^ 9 * K ^ 4) {x_1 ∈ (B ×ˢ B) ×ˢ B ×ˢ B | match x_1 with | ((a₁, a₂), a₃, a₄) => a₁ - a₂ - (a₃ - a₄) = x}.card / (Fintype.card G) ^ 3
      theorem big_quadruple_bound {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] {A B : Finset G} {H : Finset (G × G)} {X : Finset G} {K : } (hH : xH, A.dens / (2 ^ 4 * K ^ 2) (((↑B).indicator fun (x : G) => 1) (↑B).indicator fun (x : G) => 1) (x.1 - x.2)) (hX : A.dens / (2 * K) X.dens) :
      (oneOfPair H X - oneOfPair H X).dens * (A.dens ^ 3 / (2 ^ 10 * K ^ 5)) B.dens ^ 4
      theorem BSG_aux {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] {A B : Finset G} {K : } (hK : 0 < K) (hA : A.Nonempty) (hB : B.Nonempty) (hAB : K⁻¹ * (A.dens ^ 2 * B.dens) (A.addEnergy' B)) :
      ∃ (x : G), A'A (x +ᵥ B), (2 ^ 4)⁻¹ * K⁻¹ * A.dens A'.dens (A' - A').dens 2 ^ 10 * K ^ 5 * B.dens ^ 4 / A.dens ^ 3
      theorem BSG {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] {A B : Finset G} {K : } (hK : 0 K) (hB : B.Nonempty) (hAB : K⁻¹ * (A.dens ^ 2 * B.dens) (A.addEnergy' B)) :
      A'A, (2 ^ 4)⁻¹ * K⁻¹ * A.dens A'.dens (A' - A').dens 2 ^ 10 * K ^ 5 * B.dens ^ 4 / A.dens ^ 3

      The Balog-Szemerédi-Gowers theorem for two sets.

      If two sets A and B have large energy, then there exists a large subset A' of A of small difference.

      theorem BSG_self {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] {A : Finset G} {K : } (hK : 0 K) (hA : A.Nonempty) (hAK : K⁻¹ * A.dens ^ 3 (A.addEnergy' A)) :
      A'A, (2 ^ 4)⁻¹ * K⁻¹ * A.dens A'.dens (A' - A').dens 2 ^ 10 * K ^ 5 * A.dens

      The Balog-Szemerédi-Gowers theorem for two sets.

      If a set A has large energy, then there exists a large subset A' of A of small difference.

      theorem BSG_self' {G : Type u_1} [AddCommGroup G] [Fintype G] [DecidableEq G] {A : Finset G} {K : } (hK : 0 K) (hA : A.Nonempty) (hAK : K⁻¹ * A.dens ^ 3 (A.addEnergy' A)) :
      A'A, (2 ^ 4)⁻¹ * K⁻¹ * A.dens A'.dens (A' - A').dens 2 ^ 14 * K ^ 6 * A'.dens

      The Balog-Szemerédi-Gowers theorem for two sets.

      If a set A has large energy, then there exists a large subset A' of A of small difference.