Dilworth's theorem
DefinitionChain cover#✓fully proved
Let \(\alpha\) be a partially ordered set. A finite set \(C\) of finite subsets of \(\alpha\) is a chain cover of \(\alpha\) when every member of \(C\) is a chain and every element of \(\alpha\) lies in some member of \(C\).
def IsChainCoverFin {α : Type*} [PartialOrder α] (C : Finset (Finset α)) : Prop :=
(∀ s ∈ C, IsChain (· ≤ ·) (s : Set α)) ∧ ∀ a : α, ∃ s ∈ C, a ∈ s
DefinitionMaximum antichain size#✓fully proved
For a finite partially ordered set \(\alpha\), the maximum antichain size of \(\alpha\) (its width) is the largest number of elements of an antichain in \(\alpha\).
noncomputable def maxAntichainSize
(α : Type*) [Fintype α] [PartialOrder α] : ℕ :=
((Finset.univ : Finset α).powerset).sup fun s =>
if IsAntichain (· ≤ ·) (s : Set α) then s.card else 0
DefinitionMinimum chain cover size#✓fully proved
For a finite partially ordered set \(\alpha\), the minimum chain cover size of \(\alpha\) is the smallest number of chains in a chain cover of \(\alpha\), that is, in a finite set of chains of \(\alpha\) whose union is \(\alpha\).
noncomputable def minChainCoverSize
(α : Type*) [Fintype α] [PartialOrder α] : ℕ :=
let all : Finset (Finset (Finset α)) := (Finset.univ.powerset).powerset
let valid := all.filter fun C => IsChainCoverFin (α := α) C
if h : valid.Nonempty then valid.inf' h fun C => C.card else 0
def IsChainCoverFin {α : Type*} [PartialOrder α] (C : Finset (Finset α)) : Prop :=
(∀ s ∈ C, IsChain (· ≤ ·) (s : Set α)) ∧ ∀ a : α, ∃ s ∈ C, a ∈ s
MathlibExt/Combinatorics/Order/Dilworth.lean:28
Uses 1 · Used by 3
TheoremAntichains are no larger than the maximum antichain size#✓fully proved
Let \(\alpha\) be a finite partially ordered set. Every antichain \(A\) in \(\alpha\) has at most as many elements as the maximum antichain size of \(\alpha\).
theorem card_le_maxAntichainSize {α : Type*} [Fintype α] [PartialOrder α]
{A : Finset α} (hA : IsAntichain (· ≤ ·) (A : Set α)) : A.card ≤ maxAntichainSize α
noncomputable def maxAntichainSize
(α : Type*) [Fintype α] [PartialOrder α] : ℕ :=
((Finset.univ : Finset α).powerset).sup fun s =>
if IsAntichain (· ≤ ·) (s : Set α) then s.card else 0
MathlibExt/Combinatorics/Order/Dilworth.lean:33
Uses 1
TheoremChain covers bound the minimum chain cover size#✓fully proved
Let \(\alpha\) be a finite partially ordered set. If \(C\) is a chain cover of \(\alpha\), that is, a finite set of chains of \(\alpha\) whose union is \(\alpha\), then the minimum chain cover size of \(\alpha\) is at most the number of chains in \(C\).
theorem minChainCoverSize_le_card {α : Type*} [Fintype α] [PartialOrder α]
{C : Finset (Finset α)} (hC : IsChainCoverFin (α := α) C) :
minChainCoverSize α ≤ C.card
def IsChainCoverFin {α : Type*} [PartialOrder α] (C : Finset (Finset α)) : Prop :=
(∀ s ∈ C, IsChain (· ≤ ·) (s : Set α)) ∧ ∀ a : α, ∃ s ∈ C, a ∈ s
MathlibExt/Combinatorics/Order/Dilworth.lean:28
noncomputable def minChainCoverSize
(α : Type*) [Fintype α] [PartialOrder α] : ℕ :=
let all : Finset (Finset (Finset α)) := (Finset.univ.powerset).powerset
let valid := all.filter fun C => IsChainCoverFin (α := α) C
if h : valid.Nonempty then valid.inf' h fun C => C.card else 0
MathlibExt/Combinatorics/Order/Dilworth.lean:40
Uses 2 · Used by 2
TheoremDilworth's theorem#✓fully proved
Let \(\alpha\) be a finite partially ordered set. The maximum antichain size of \(\alpha\) equals its minimum chain cover size: the largest number of elements of an antichain in \(\alpha\) equals the smallest number of chains whose union is \(\alpha\).
theorem dilworth_decomposition
{α : Type*} [Fintype α] [PartialOrder α] :
maxAntichainSize α = minChainCoverSize α
noncomputable def maxAntichainSize
(α : Type*) [Fintype α] [PartialOrder α] : ℕ :=
((Finset.univ : Finset α).powerset).sup fun s =>
if IsAntichain (· ≤ ·) (s : Set α) then s.card else 0
MathlibExt/Combinatorics/Order/Dilworth.lean:33
noncomputable def minChainCoverSize
(α : Type*) [Fintype α] [PartialOrder α] : ℕ :=
let all : Finset (Finset (Finset α)) := (Finset.univ.powerset).powerset
let valid := all.filter fun C => IsChainCoverFin (α := α) C
if h : valid.Nonempty then valid.inf' h fun C => C.card else 0
MathlibExt/Combinatorics/Order/Dilworth.lean:40
Sources
- R. P. Dilworth, A decomposition theorem for partially ordered sets, Annals of Mathematics 51 (1950), 161-166, DOI 10.2307/1969503.
Uses 4 · Used by 1
TheoremThe maximum antichain size is attained#✓fully proved
Let \(\alpha\) be a finite partially ordered set. Some antichain in \(\alpha\) has exactly as many elements as the maximum antichain size of \(\alpha\).
theorem exists_isAntichain_card_eq_maxAntichainSize {α : Type*} [Fintype α]
[PartialOrder α] :
∃ A : Finset α, IsAntichain (· ≤ ·) (A : Set α) ∧ A.card = maxAntichainSize α
noncomputable def maxAntichainSize
(α : Type*) [Fintype α] [PartialOrder α] : ℕ :=
((Finset.univ : Finset α).powerset).sup fun s =>
if IsAntichain (· ≤ ·) (s : Set α) then s.card else 0
MathlibExt/Combinatorics/Order/Dilworth.lean:33
Uses 1
TheoremThe minimum chain cover size is attained#✓fully proved
Let \(\alpha\) be a finite partially ordered set. Some chain cover \(C\) of \(\alpha\), a finite set of chains of \(\alpha\) whose union is \(\alpha\), consists of exactly as many chains as the minimum chain cover size of \(\alpha\).
theorem exists_isChainCoverFin_card_eq_minChainCoverSize {α : Type*} [Fintype α]
[PartialOrder α] :
∃ C : Finset (Finset α), IsChainCoverFin C ∧ C.card = minChainCoverSize α
def IsChainCoverFin {α : Type*} [PartialOrder α] (C : Finset (Finset α)) : Prop :=
(∀ s ∈ C, IsChain (· ≤ ·) (s : Set α)) ∧ ∀ a : α, ∃ s ∈ C, a ∈ s
MathlibExt/Combinatorics/Order/Dilworth.lean:28
noncomputable def minChainCoverSize
(α : Type*) [Fintype α] [PartialOrder α] : ℕ :=
let all : Finset (Finset (Finset α)) := (Finset.univ.powerset).powerset
let valid := all.filter fun C => IsChainCoverFin (α := α) C
if h : valid.Nonempty then valid.inf' h fun C => C.card else 0
MathlibExt/Combinatorics/Order/Dilworth.lean:40
Uses 5
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.