Left-linear orders #
A partial order is left-linear when the predecessors of every element are linearly
ordered: a ≤ c → b ≤ c → a ≤ b ∨ b ≤ a. Equivalently, every principal down-set Iic m
is a chain. This is the order-theoretic notion of a tree: the order may branch upward but
never downward.
Linear orders are left-linear, and so is every rooted tree in the sense of
Mathlib/Order/SuccPred/Tree.lean: a PredOrder with archimedean predecessor is left-linear by
mathlib's le_total_of_directed. Left-linearity also pulls back along any order embedding
(OrderEmbedding.isLeftLinear), so a suborder of a tree is left-linear. Branching-time frames,
which need not have predecessors, assume left-linearity directly.
The flags of a left-linear order, mathlib's maximal chains, behave like the branches of a tree:
a flag through an element contains its entire past (Flag.Iic_subset), the down-set of a maximal
element is a flag (Flag.ofIsMax), and on a finite order every flag arises this way
(Flag.exists_isMax_eq_ofIsMax), which turns quantification over flags into quantification over
maximal elements (Flag.forall_mem_iff) and so makes it decidable.
Main definitions #
IsLeftLinear M: the predecessors of every element are linearly ordered.Flag.ofIsMax: the down-set of a maximal element, as a flag.
Main results #
IsLeftLinear.isChain_Iic: every principal down-set is a chain.Flag.exists_mem_gt_of_lt: a flag cannot stop at an element with a strict successor; this holds in any order.Flag.exists_isMax_eq_ofIsMax,Flag.forall_mem_iff: on a finite left-linear order the flags are the down-sets of the maximal elements.
A partial order is left-linear when the predecessors of every element are linearly ordered, so that it never branches backward.
- comparable_of_le_common ⦃a b c : M⦄ : a ≤ c → b ≤ c → a ≤ b ∨ b ≤ a
The predecessors of any element are pairwise comparable.
Instances
A linear order is left-linear.
A PredOrder with archimedean predecessor, such as a rooted tree, is left-linear.
Left-linearity pulls back along an order embedding.
In a left-linear order the principal down-set Iic m is a chain.
In a left-linear order everything strictly below an element is below the element it covers, its mother in a tree.
Flags #
In a left-linear order a flag, mathlib's maximal chain, is a branch: it contains the whole past of each of its elements, and when the order is finite it is the down-set of a maximal element.
Maximality is decidable on a finite type.
Equations
- instDecidableIsMaxOfFintypeOfDecidableLE_linglib x = decidable_of_iff (∀ (b : M), x ≤ b → b ≤ x) ⋯
A flag through a non-maximal element contains a strictly larger one; otherwise inserting the successor would extend the chain.
In a left-linear order a flag contains the entire past of each of its elements.
The down-set of a maximal element of a left-linear order, as a flag.
Equations
- Flag.ofIsMax hx = { carrier := Set.Iic x, Chain' := ⋯, max_chain' := ⋯ }
Instances For
A flag through a maximal element is its down-set.
On a finite left-linear order every flag is the down-set of a maximal element, since the flag has a greatest element, which a strict successor would contradict.
On a finite left-linear order, quantifying over the flags through an element is quantifying over the maximal elements above it.