# mathlibdocumentation

combinatorics.set_family.compression.uv

# UV-compressions #

This file defines UV-compression. It is an operation on a set family that reduces its shadow.

UV-compressing a : α along u v : α means replacing a by (a ⊔ u) \ v if a and u are disjoint and v ≤ a. In some sense, it's moving a from v to u.

UV-compressions are immensely useful to prove the Kruskal-Katona theorem. The idea is that compressing a set family might decrease the size of its shadow, so iterated compressions hopefully minimise the shadow.

## Main declarations #

• uv.compress: compress u v a is a compressed along u and v.
• uv.compression: compression u v s is the compression of the set family s along u and v. It is the compressions of the elements of s whose compression is not already in s along with the element whose compression is already in s. This way of splitting into what moves and what does not ensures the compression doesn't squash the set family, which is proved by uv.card_compress.

## Notation #

𝓒 (typed with \MCC) is notation for uv.compression in locale finset_family.

## Notes #

Even though our emphasis is on finset α, we define UV-compressions more generally in a generalized boolean algebra, so that one can use it for set α.

## TODO #

Prove that compressing reduces the size of shadow. This result and some more already exist on the branch combinatorics.

## Tags #

theorem sup_sdiff_inj_on {α : Type u_1} (u v : α) :
set.inj_on (λ (x : α), (x u) \ v) {x : α | x v x}

UV-compression is injective on the elements it moves. See uv.compress.

### UV-compression in generalized boolean algebras #

def uv.compress {α : Type u_1} (u v a : α) :
α

To UV-compress a, if it doesn't touch U and does contain V, we remove V and put U in. We'll only really use this when |U| = |V| and U ∩ V = ∅.

Equations
def uv.compression {α : Type u_1} (u v : α) (s : finset α) :

To UV-compress a set family, we compress each of its elements, except that we don't want to reduce the cardinality, so we keep all elements whose compression is already present.

Equations
def uv.is_compressed {α : Type u_1} (u v : α) (s : finset α) :
Prop

is_compressed u v s expresses that s is UV-compressed.

Equations
• s = v s = s)
theorem uv.compress_of_disjoint_of_le {α : Type u_1} {u v a : α} (hua : a) (hva : v a) :
v a = (a u) \ v
theorem uv.mem_compression {α : Type u_1} {s : finset α} {u v a : α} :
a s a s v a s a s ∃ (b : α) (H : b s), v b = a

a is in the UV-compressed family iff it's in the original and its compression is in the original, or it's not in the original but it's the compression of something in the original.

@[simp]
theorem uv.compress_self {α : Type u_1} (u a : α) :
u a = a
@[simp]
theorem uv.compression_self {α : Type u_1} (u : α) (s : finset α) :
s = s
theorem uv.is_compressed_self {α : Type u_1} (u : α) (s : finset α) :
s

Any family is compressed along two identical elements.

theorem uv.compress_disjoint {α : Type u_1} {s : finset α} (u v : α) :
disjoint (finset.filter (λ (a : α), v a s) s) (finset.filter (λ (a : α), a s) (finset.image v) s))
@[simp]
theorem uv.compress_idem {α : Type u_1} (u v a : α) :
v v a) = v a

Compressing an element is idempotent.

theorem uv.compress_mem_compression {α : Type u_1} {s : finset α} {u v a : α} (ha : a s) :
v a s
theorem uv.compress_mem_compression_of_mem_compression {α : Type u_1} {s : finset α} {u v a : α} (ha : a s) :
v a s
@[simp]
theorem uv.compression_idem {α : Type u_1} (u v : α) (s : finset α) :
v s) = s

Compressing a family is idempotent.

theorem uv.card_compression {α : Type u_1} (u v : α) (s : finset α) :
v s).card = s.card

Compressing a family doesn't change its size.

theorem uv.sup_sdiff_mem_of_mem_compression {α : Type u_1} {s : finset α} {u v a : α} (ha : a s) (hva : v a) (hua : a) :
(a u) \ v s

If a is in the family compression and can be compressed, then its compression is in the original family.

theorem uv.mem_of_mem_compression {α : Type u_1} {s : finset α} {u v a : α} (ha : a s) (hva : v a) (hvu : v = u = ) :
a s

If a is in the u, v-compression but v ≤ a, then a must have been in the original family.

### UV-compression on finsets #

theorem uv.card_compress {α : Type u_1} [decidable_eq α] {U V : finset α} (hUV : U.card = V.card) (A : finset α) :
V A).card = A.card

Compressing a finset doesn't change its size.