Chains and flags #
This file defines chains for an arbitrary relation and flags for an order and proves Hausdorff's Maximality Principle.
Main declarations #
IsChain s
: A chains
is a set of comparable elements.maxChain_spec
: Hausdorff's Maximality Principle.Flag
: The type of flags, aka maximal chains, of an order.
Notes #
Originally ported from Isabelle/HOL. The original file was written by Jacques D. Fleuriot, Tobias Nipkow, Christian Sternagel.
Chains #
SuperChain s t
means that t
is a chain that strictly includes s
.
Equations
- SuperChain r s t = (IsChain r t ∧ s ⊂ t)
Instances For
@[deprecated IsChain.empty]
Alias of IsChain.empty
.
theorem
isChain_of_trichotomous
{α : Type u_1}
{r : α → α → Prop}
[IsTrichotomous α r]
(s : Set α)
:
IsChain r s
theorem
Monotone.isChain_range
{α : Type u_1}
{β : Type u_2}
[LinearOrder α]
[Preorder β]
{f : α → β}
(hf : Monotone f)
:
theorem
IsChain.lt_of_le
{α : Type u_1}
[PartialOrder α]
{s : Set α}
(h : IsChain (fun (x1 x2 : α) => x1 ≤ x2) s)
:
theorem
IsChain.directedOn
{α : Type u_1}
{r : α → α → Prop}
{s : Set α}
[IsRefl α r]
(H : IsChain r s)
:
DirectedOn r s
theorem
IsMaxChain.isChain
{α : Type u_1}
{r : α → α → Prop}
{s : Set α}
(h : IsMaxChain r s)
:
IsChain r s
theorem
IsMaxChain.not_superChain
{α : Type u_1}
{r : α → α → Prop}
{s t : Set α}
(h : IsMaxChain r s)
:
¬SuperChain r s t
theorem
IsMaxChain.bot_mem
{α : Type u_1}
{s : Set α}
[LE α]
[OrderBot α]
(h : IsMaxChain (fun (x1 x2 : α) => x1 ≤ x2) s)
:
theorem
IsMaxChain.top_mem
{α : Type u_1}
{s : Set α}
[LE α]
[OrderTop α]
(h : IsMaxChain (fun (x1 x2 : α) => x1 ≤ x2) s)
:
theorem
IsMaxChain.image
{α : Type u_1}
{β : Type u_2}
{r : α → α → Prop}
{s : β → β → Prop}
(e : r ≃r s)
{c : Set α}
(hc : IsMaxChain r c)
:
IsMaxChain s (⇑e '' c)
Given a set s
, if there exists a chain t
strictly including s
, then SuccChain s
is one of these chains. Otherwise it is s
.
Instances For
theorem
succChain_spec
{α : Type u_1}
{r : α → α → Prop}
{s : Set α}
(h : ∃ (t : Set α), IsChain r s ∧ SuperChain r s t)
:
SuperChain r s (SuccChain r s)
theorem
IsChain.superChain_succChain
{α : Type u_1}
{r : α → α → Prop}
{s : Set α}
(hs₁ : IsChain r s)
(hs₂ : ¬IsMaxChain r s)
:
SuperChain r s (SuccChain r s)
Predicate for whether a set is reachable from ∅
using SuccChain
and ⋃₀
.
- succ {α : Type u_1} {r : α → α → Prop} {s : Set α} : ChainClosure r s → ChainClosure r (SuccChain r s)
- union {α : Type u_1} {r : α → α → Prop} {s : Set (Set α)} : (∀ a ∈ s, ChainClosure r a) → ChainClosure r (⋃₀ s)
Instances For
theorem
ChainClosure.total
{α : Type u_1}
{r : α → α → Prop}
{c₁ c₂ : Set α}
(hc₁ : ChainClosure r c₁)
(hc₂ : ChainClosure r c₂)
:
theorem
ChainClosure.succ_fixpoint
{α : Type u_1}
{r : α → α → Prop}
{c₁ c₂ : Set α}
(hc₁ : ChainClosure r c₁)
(hc₂ : ChainClosure r c₂)
(hc : SuccChain r c₂ = c₂)
:
c₁ ⊆ c₂
theorem
ChainClosure.isChain
{α : Type u_1}
{r : α → α → Prop}
{c : Set α}
(hc : ChainClosure r c)
:
IsChain r c
Hausdorff's maximality principle
There exists a maximal totally ordered set of α
.
Note that we do not require α
to be partially ordered by r
.
Flags #
theorem
Flag.maxChain
{α : Type u_1}
[LE α]
(s : Flag α)
:
IsMaxChain (fun (x1 x2 : α) => x1 ≤ x2) ↑s
def
Flag.ofIsMaxChain
{α : Type u_1}
[LE α]
(c : Set α)
(hc : IsMaxChain (fun (x1 x2 : α) => x1 ≤ x2) c)
:
Flag α
Reinterpret a maximal chain as a flag.
Equations
- Flag.ofIsMaxChain c hc = { carrier := c, Chain' := ⋯, max_chain' := ⋯ }
Instances For
@[simp]
theorem
Flag.coe_ofIsMaxChain
{α : Type u_1}
[LE α]
(c : Set α)
(hc : IsMaxChain (fun (x1 x2 : α) => x1 ≤ x2) c)
:
↑(Flag.ofIsMaxChain c hc) = c
instance
Flag.instOrderTopSubtypeMem
{α : Type u_1}
[Preorder α]
[OrderTop α]
(s : Flag α)
:
OrderTop ↥s
Equations
- s.instOrderTopSubtypeMem = Subtype.orderTop ⋯
instance
Flag.instOrderBotSubtypeMem
{α : Type u_1}
[Preorder α]
[OrderBot α]
(s : Flag α)
:
OrderBot ↥s
Equations
- s.instOrderBotSubtypeMem = Subtype.orderBot ⋯
instance
Flag.instBoundedOrderSubtypeMem
{α : Type u_1}
[Preorder α]
[BoundedOrder α]
(s : Flag α)
:
BoundedOrder ↥s
Equations
- s.instBoundedOrderSubtypeMem = Subtype.boundedOrder ⋯ ⋯
Flags are preserved under order isomorphisms.
Equations
- Flag.map e = { toFun := fun (s : Flag α) => Flag.ofIsMaxChain (⇑e '' ↑s) ⋯, invFun := fun (s : Flag β) => Flag.ofIsMaxChain (⇑e.symm '' ↑s) ⋯, left_inv := ⋯, right_inv := ⋯ }
Instances For
instance
Flag.instLinearOrderSubtypeMemOfLeOfDecidableRelLt
{α : Type u_1}
[PartialOrder α]
[DecidableRel fun (x1 x2 : α) => x1 ≤ x2]
[DecidableRel fun (x1 x2 : α) => x1 < x2]
(s : Flag α)
:
LinearOrder ↥s
Equations
- s.instLinearOrderSubtypeMemOfLeOfDecidableRelLt = LinearOrder.mk ⋯ Subtype.decidableLE decidableEqOfDecidableLE Subtype.decidableLT ⋯ ⋯ ⋯
Equations
- Flag.instUnique = { default := { carrier := Set.univ, Chain' := ⋯, max_chain' := ⋯ }, uniq := ⋯ }