Documentation

Mathlib.Combinatorics.SetFamily.KruskalKatona

Kruskal-Katona theorem #

This file proves the Kruskal-Katona theorem. This is a sharp statement about how many sets of size k - 1 are covered by a family of sets of size k, given only its size.

Main declarations #

The key results proved here are:

TODO #

References #

Tags #

kruskal-katona, kruskal, katona, shadow, initial segments, intersecting

theorem Finset.Colex.shadow_initSeg {α : Type u_1} [LinearOrder α] {s : Finset α} [Fintype α] (hs : s.Nonempty) :
(Finset.Colex.initSeg s).shadow = Finset.Colex.initSeg (s.erase (s.min' hs))

This is important for iterating Kruskal-Katona: the shadow of an initial segment is also an initial segment.

theorem Finset.Colex.IsInitSeg.shadow {α : Type u_1} [LinearOrder α] {𝒜 : Finset (Finset α)} {r : } [Finite α] (h₁ : Finset.Colex.IsInitSeg 𝒜 r) :
Finset.Colex.IsInitSeg 𝒜.shadow (r - 1)

The shadow of an initial segment is also an initial segment.

theorem Finset.UV.toColex_compress_lt_toColex {α : Type u_1} [LinearOrder α] {s : Finset α} {U : Finset α} {V : Finset α} {hU : U.Nonempty} {hV : V.Nonempty} (h : U.max' hU < V.max' hV) (hA : UV.compress U V s s) :
{ ofColex := UV.compress U V s } < { ofColex := s }

Applying the compression makes the set smaller in colex. This is intuitive since a portion of the set is being "shifted down" as max U < max V.

theorem Finset.UV.isInitSeg_of_compressed {α : Type u_1} [LinearOrder α] {ℬ : Finset (Finset α)} {r : } (h₁ : Set.Sized r ) (h₂ : ∀ (U V : Finset α), Finset.UV.UsefulCompression U VUV.IsCompressed U V ) :

If we're compressed by all useful compressions, then we're an initial segment. This is the other key Kruskal-Katona part.

theorem Finset.kruskal_katona {n : } {r : } {𝒜 : Finset (Finset (Fin n))} {𝒞 : Finset (Finset (Fin n))} (h𝒜r : Set.Sized r 𝒜) (h𝒞𝒜 : 𝒞.card 𝒜.card) (h𝒞 : Finset.Colex.IsInitSeg 𝒞 r) :
𝒞.shadow.card 𝒜.shadow.card

The Kruskal-Katona theorem.

Given a set family 𝒜 consisting of r-sets, and 𝒞 an initial segment of the colex order of the same size, the shadow of 𝒞 is smaller than the shadow of 𝒜. In particular, this gives that the minimum shadow size is achieved by initial segments of colex.

theorem Finset.iterated_kk {n : } {r : } {k : } {𝒜 : Finset (Finset (Fin n))} {𝒞 : Finset (Finset (Fin n))} (h₁ : Set.Sized r 𝒜) (h₂ : 𝒞.card 𝒜.card) (h₃ : Finset.Colex.IsInitSeg 𝒞 r) :
(Finset.shadow^[k] 𝒞).card (Finset.shadow^[k] 𝒜).card

An iterated form of the Kruskal-Katona theorem. In particular, the minimum possible iterated shadow size is attained by initial segments.