The ray of a front #
Given a front F on M and a node [a] of its tree (i.e. a is the least element of some
element of F), the ray F after a (terminology from the author's EMS survey Towards better:
A motivated introduction to better-quasi-orders) is the front obtained by stripping the leading
a from the elements of F that start with a. It is a front on M after a, the infinite set
{n ∈ M : n > a}, itself represented enumeration-first as the subsequence M ∘ (· + j) where
j is the least index at which M passes a.
("Ray" is not to be confused with the derivative, the tree-to-tree leaf-removal operation whose iteration computes the rank.)
Main definitions #
rayEnum M a: the enumerationM ∘ (· + afterShift M a)of{n ∈ M : n > a}(front- independent).Front.ray F a: the ray{t | a :: t ∈ F}.
Main results #
Front.ray_isFront: the rayF after ais a front onM after a.Front.IsFront.singleton_mem_tree: in a nontrivial front ([] ∉ F) everyn ∈ Mheads an element, i.e.[n] ∈ tree F.Front.IsFront.ray_isFront_mem: for a nontrivial front andn ∈ M,F after nis a front onM after n.
Nontriviality #
The trivial front is {[]} (rank 0). For a front, [] ∉ F, F ≠ {[]}, ⋃ F = M, and
"[n] ∈ tree F for every n ∈ M" are all equivalent; [] ∉ F is the canonical working flag
(see IsFront.nil_not_mem_iff).
Enumeration operations #
afterShift and rayEnum operate on a strictly monotone enumeration M : ℕ → ℕ; they do not
depend on any front, so they live outside the Front namespace.
M after a: the increasing enumeration of {n ∈ M : n > a}, as the subsequence
M ∘ (· + afterShift M a). A StrictMono-to-StrictMono operation on enumerations.
Equations
- rayEnum M a i = M (i + afterShift M a)
Instances For
The head-stripping construction: if [a] is in the tree and Q is a strictly monotone
subsequence of M with a < Q 0, then some a :: t ∈ F with t an initial segment of Q.
Rank of the ray #
The ray strictly lowers the rank. This is what makes the Nash-Williams recursion well-founded.
The tree of ray F a is the subtree of tree F sitting above the node [a], transported by
t ↦ a :: t; mem_tree_ray is the membership bridge (the single point of contact with the
concrete tree representation — a later switch to Descriptive.Tree.subAt would rewrite only
this lemma).