Documentation

MiscYD.AddCombi.Kneser.Kneser

Kneser's addition theorem #

This file proves Kneser's theorem. This states that |s + H| + |t + H| - |H| ≤ |s + t| where s, t are finite nonempty sets in a commutative group and H is the stabilizer of s + t. Further, if the inequality is strict, then we in fact have |s + H| + |t + H| ≤ |s + t|.

Main declarations #

References #

Auxiliary results #

theorem Finset.mulStab_mul_ssubset_mulStab {α : Type u_1} [CommGroup α] [DecidableEq α] {s t C : Finset α} {a b : α} (hs₁ : (s ∩ a • C.mulStab).Nonempty) (ht₁ : (t ∩ b • C.mulStab).Nonempty) (hab : ¬(a * b) • C.mulStab ⊆ s * t) :
(s ∩ a • C.mulStab * (t ∩ b • C.mulStab)).mulStab ⊂ C.mulStab
theorem Finset.addStab_add_ssubset_addStab {α : Type u_1} [AddCommGroup α] [DecidableEq α] {s t C : Finset α} {a b : α} (hs₁ : (s ∩ (a +ᵥ C.addStab)).Nonempty) (ht₁ : (t ∩ (b +ᵥ C.addStab)).Nonempty) (hab : ¬(a + b) +ᵥ C.addStab ⊆ s + t) :
(s ∩ (a +ᵥ C.addStab) + t ∩ (b +ᵥ C.addStab)).addStab ⊂ C.addStab
theorem Finset.mulStab_union {α : Type u_1} [CommGroup α] [DecidableEq α] {s t C : Finset α} {a b : α} (hs₁ : (s ∩ a • C.mulStab).Nonempty) (ht₁ : (t ∩ b • C.mulStab).Nonempty) (hab : ¬(a * b) • C.mulStab ⊆ s * t) (hC : Disjoint C (s ∩ a • C.mulStab * (t ∩ b • C.mulStab))) :
(C ∪ s ∩ a • C.mulStab * (t ∩ b • C.mulStab)).mulStab = (s ∩ a • C.mulStab * (t ∩ b • C.mulStab)).mulStab
theorem Finset.addStab_union {α : Type u_1} [AddCommGroup α] [DecidableEq α] {s t C : Finset α} {a b : α} (hs₁ : (s ∩ (a +ᵥ C.addStab)).Nonempty) (ht₁ : (t ∩ (b +ᵥ C.addStab)).Nonempty) (hab : ¬(a + b) +ᵥ C.addStab ⊆ s + t) (hC : Disjoint C (s ∩ (a +ᵥ C.addStab) + t ∩ (b +ᵥ C.addStab))) :
(C ∪ (s ∩ (a +ᵥ C.addStab) + t ∩ (b +ᵥ C.addStab))).addStab = (s ∩ (a +ᵥ C.addStab) + t ∩ (b +ᵥ C.addStab)).addStab
theorem Finset.mul_aux1 {α : Type u_1} [CommGroup α] [DecidableEq α] {s s' t t' C : Finset α} (ih : (s' * (s' * t').mulStab).card + (t' * (s' * t').mulStab).card ≤ (s' * t').card + (s' * t').mulStab.card) (hconv : (s ∩ t).card + ((s ∪ t) * C.mulStab).card ≤ C.card + C.mulStab.card) (hnotconv : (C ∪ s' * t').card + (C ∪ s' * t').mulStab.card < (s ∩ t).card + ((s ∪ t) * (C ∪ s' * t').mulStab).card) (hCun : (C ∪ s' * t').mulStab = (s' * t').mulStab) (hdisj : Disjoint C (s' * t')) :
↑((s ∪ t) * C.mulStab).card - ↑((s ∪ t) * (s' * t').mulStab).card < ↑C.mulStab.card - ↑(s' * (s' * t').mulStab).card - ↑(t' * (s' * t').mulStab).card
theorem Finset.add_aux1 {α : Type u_1} [AddCommGroup α] [DecidableEq α] {s s' t t' C : Finset α} (ih : (s' + (s' + t').addStab).card + (t' + (s' + t').addStab).card ≤ (s' + t').card + (s' + t').addStab.card) (hconv : (s ∩ t).card + (s ∪ t + C.addStab).card ≤ C.card + C.addStab.card) (hnotconv : (C ∪ (s' + t')).card + (C ∪ (s' + t')).addStab.card < (s ∩ t).card + (s ∪ t + (C ∪ (s' + t')).addStab).card) (hCun : (C ∪ (s' + t')).addStab = (s' + t').addStab) (hdisj : Disjoint C (s' + t')) :
↑(s ∪ t + C.addStab).card - ↑(s ∪ t + (s' + t').addStab).card < ↑C.addStab.card - ↑(s' + (s' + t').addStab).card - ↑(t' + (s' + t').addStab).card
theorem Finset.disjoint_smul_mulStab {α : Type u_1} [CommGroup α] [DecidableEq α] {s t : Finset α} {a : α} (hst : s ⊆ t) (has : ¬a • s.mulStab ⊆ t) :
theorem Finset.disjoint_vadd_addStab {α : Type u_1} [AddCommGroup α] [DecidableEq α] {s t : Finset α} {a : α} (hst : s ⊆ t) (has : ¬a +ᵥ s.addStab ⊆ t) :
theorem Finset.disjoint_mul_sub_card_le {α : Type u_1} [CommGroup α] [DecidableEq α] {a : α} (b : α) {s t C : Finset α} (has : a ∈ s) (hsC : Disjoint t (a • C.mulStab)) (hst : (s ∩ a • C.mulStab * (t ∩ b • C.mulStab)).mulStab ⊆ C.mulStab) :
↑C.mulStab.card - ↑(s ∩ a • C.mulStab * (s ∩ a • C.mulStab * (t ∩ b • C.mulStab)).mulStab).card ≤ ↑((s ∪ t) * C.mulStab).card - ↑((s ∪ t) * (s ∩ a • C.mulStab * (t ∩ b • C.mulStab)).mulStab).card
theorem Finset.disjoint_add_sub_card_le {α : Type u_1} [AddCommGroup α] [DecidableEq α] {a : α} (b : α) {s t C : Finset α} (has : a ∈ s) (hsC : Disjoint t (a +ᵥ C.addStab)) (hst : (s ∩ (a +ᵥ C.addStab) + t ∩ (b +ᵥ C.addStab)).addStab ⊆ C.addStab) :
↑C.addStab.card - ↑(s ∩ (a +ᵥ C.addStab) + (s ∩ (a +ᵥ C.addStab) + t ∩ (b +ᵥ C.addStab)).addStab).card ≤ ↑(s ∪ t + C.addStab).card - ↑(s ∪ t + (s ∩ (a +ᵥ C.addStab) + t ∩ (b +ᵥ C.addStab)).addStab).card
theorem Finset.inter_mul_sub_card_le {α : Type u_1} [CommGroup α] [DecidableEq α] {a : α} {s t C : Finset α} (has : a ∈ s) (hst : (s ∩ a • C.mulStab * (t ∩ a • C.mulStab)).mulStab ⊆ C.mulStab) :
↑C.mulStab.card - ↑(s ∩ a • C.mulStab * (s ∩ a • C.mulStab * (t ∩ a • C.mulStab)).mulStab).card - ↑(t ∩ a • C.mulStab * (s ∩ a • C.mulStab * (t ∩ a • C.mulStab)).mulStab).card ≤ ↑((s ∪ t) * C.mulStab).card - ↑((s ∪ t) * (s ∩ a • C.mulStab * (t ∩ a • C.mulStab)).mulStab).card
theorem Finset.inter_add_sub_card_le {α : Type u_1} [AddCommGroup α] [DecidableEq α] {a : α} {s t C : Finset α} (has : a ∈ s) (hst : (s ∩ (a +ᵥ C.addStab) + t ∩ (a +ᵥ C.addStab)).addStab ⊆ C.addStab) :
↑C.addStab.card - ↑(s ∩ (a +ᵥ C.addStab) + (s ∩ (a +ᵥ C.addStab) + t ∩ (a +ᵥ C.addStab)).addStab).card - ↑(t ∩ (a +ᵥ C.addStab) + (s ∩ (a +ᵥ C.addStab) + t ∩ (a +ᵥ C.addStab)).addStab).card ≤ ↑(s ∪ t + C.addStab).card - ↑(s ∪ t + (s ∩ (a +ᵥ C.addStab) + t ∩ (a +ᵥ C.addStab)).addStab).card

Kneser's theorem #

theorem Finset.mul_kneser {α : Type u_1} [CommGroup α] [DecidableEq α] (s t : Finset α) :
(s * (s * t).mulStab).card + (t * (s * t).mulStab).card ≤ (s * t).card + (s * t).mulStab.card

Kneser's multiplication theorem: A lower bound on the size of s * t in terms of its stabilizer.

theorem Finset.add_kneser {α : Type u_1} [AddCommGroup α] [DecidableEq α] (s t : Finset α) :
(s + (s + t).addStab).card + (t + (s + t).addStab).card ≤ (s + t).card + (s + t).addStab.card

Kneser's addition theorem: A lower bound on the size of s + t in terms of its stabilizer.

theorem Finset.mul_strict_kneser {α : Type u_1} [CommGroup α] [DecidableEq α] (s t : Finset α) (h : (s * (s * t).mulStab).card + (t * (s * t).mulStab).card < (s * t).card + (s * t).mulStab.card) :
(s * (s * t).mulStab).card + (t * (s * t).mulStab).card ≤ (s * t).card

The strict version of Kneser's multiplication theorem. If the LHS of Finset.mul_kneser does not equal the RHS, then it is in fact much smaller.

theorem Finset.add_strict_kneser {α : Type u_1} [AddCommGroup α] [DecidableEq α] (s t : Finset α) (h : (s + (s + t).addStab).card + (t + (s + t).addStab).card < (s + t).card + (s + t).addStab.card) :
(s + (s + t).addStab).card + (t + (s + t).addStab).card ≤ (s + t).card

The strict version of Kneser's addition theorem. If the LHS of Finset.add_kneser does not equal the RHS, then it is in fact much smaller.