Chains and flags #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
This file defines chains for an arbitrary relation and flags for an order and proves Hausdorff's Maximality Principle.
Main declarations #
is_chain s
: A chains
is a set of comparable elements.max_chain_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 #
super_chain s t
means that t
is a chain that strictly includes s
.
Equations
- super_chain r s t = (is_chain r t ∧ s ⊂ t)
Given a set s
, if there exists a chain t
strictly including s
, then succ_chain s
is one of these chains. Otherwise it is s
.
Equations
- succ_chain r s = dite (∃ (t : set α), is_chain r s ∧ super_chain r s t) (λ (h : ∃ (t : set α), is_chain r s ∧ super_chain r s t), classical.some h) (λ (h : ¬∃ (t : set α), is_chain r s ∧ super_chain r s t), s)
- succ : ∀ {α : Type u_1} {r : α → α → Prop} {s : set α}, chain_closure r s → chain_closure r (succ_chain r s)
- union : ∀ {α : Type u_1} {r : α → α → Prop} {s : set (set α)}, (∀ (a : set α), a ∈ s → chain_closure r a) → chain_closure r (⋃₀ s)
Predicate for whether a set is reachable from ∅
using succ_chain
and ⋃₀
.
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 #
Equations
- flag.set_like = {coe := flag.carrier _inst_1, coe_injective' := _}
Equations
Equations
- s.linear_order = {le := partial_order.le (subtype.partial_order (λ (x : α), x ∈ s)), lt := partial_order.lt (subtype.partial_order (λ (x : α), x ∈ s)), le_refl := _, le_trans := _, lt_iff_le_not_le := _, le_antisymm := _, le_total := _, decidable_le := subtype.decidable_le (λ (x : α), x ∈ s), decidable_eq := subtype.decidable_eq (λ (a b : α), _inst_2 a b), decidable_lt := subtype.decidable_lt (λ (x : α), x ∈ s), max := max_default (λ (a b : ↥s), subtype.decidable_le a b), max_def := _, min := min_default (λ (a b : ↥s), subtype.decidable_le a b), min_def := _}
Equations
- flag.unique = {to_inhabited := {default := {carrier := set.univ α, chain' := _, max_chain' := _}}, uniq := _}