Partial-Rank Orders #
The partial order induced by a partial rank function r : α → Option β:
ranked elements compare by strict rank comparison, unranked elements are
isolated — comparable only to themselves.
This is the order-theoretic gadget behind linguistic hierarchies that are
deliberately silent on part of the inventory: Caha's case-containment
order (Syntax/Case/Order.lean) ranks NOM < ACC < GEN < DAT < LOC and
says nothing about ERG or ABS, and the silence is theoretical content.
No pullback produces this. Preorder.lift through r (the
PullbackPreorder construction) would make all unranked elements
mutually equivalent — r a = r b = none gives a ≤ b ≤ a — losing
antisymmetry and the isolation.
The order structure itself is mathlib's: RankLT is a strict order
(IsStrictOrder instance below), so partialOrderOfRank is
partialOrderOfSO (RankLT r) and RankLE (a = b ∨ RankLT r a b) is
exactly the reflexive-closure shape partialOrderOfSO uses for ≤.
This file's value-add is RankLT itself, its decidability, and the
isolation lemmas. There is no total variant: isolation precludes
totality whenever any element is unranked.
Main declarations #
Core.Order.RankLT— strict comparison through a partial rankCore.Order.RankLE— its reflexive closureCore.Order.rankLE_iff_eq_left/rankLE_iff_eq_right— isolation: an unranked element is≤-related only to itselfCore.Order.partialOrderOfRank—partialOrderOfSOatRankLT r;<is definitionallyRankLTand≤isRankLECore.Order.rankShells— the canonical down-set decompositionIic ∘ r, andrankLT_iff_rankShells: the rank order is the shadow of inclusion between the down-sets (the structural fact behind nanosyntactic "feature stack" decompositions, replacing per-instance stipulate-a-table-and-decide)
Strict comparison through a partial rank: both elements are ranked and the ranks compare strictly. Unranked elements relate to nothing.
Equations
- Core.Order.RankLT r a b = match r a, r b with | some x, some y => x < y | x, x_1 => False
Instances For
Non-strict comparison through a partial rank: the reflexive closure
of RankLT. Unranked elements are isolated — ≤-related only to
themselves.
Equations
- Core.Order.RankLE r a b = (a = b ∨ Core.Order.RankLT r a b)
Instances For
Equations
An unranked element is ≤-related only to itself (left).
An unranked element is ≤-related only to itself (right).
The partial order induced by a partial rank: partialOrderOfSO at
RankLT r, so < is definitionally RankLT r and ≤ is
RankLE r. Intended for scoped instances: a theoretical hierarchy
is borne by a feature type as an opt-in commitment, never as a
global instance.
See note [reducible non-instances].
Equations
- Core.Order.partialOrderOfRank r = partialOrderOfSO (Core.Order.RankLT r)
Instances For
The canonical down-set decomposition of a partial rank: an element's
content is the initial segment Finset.Iic of its rank (its "shell stack";
cf. the order-theoretic primitive LowerSet.Iic). For a rank into a chain an
element is this down-set, and the rank order is the shadow of inclusion
between the down-sets (rankLT_iff_rankShells). The structure behind
nanosyntactic feature-stack decompositions (Syntax/Case/Order.lean).
Equations
- Core.Order.rankShells r a = Option.map Finset.Iic (r a)
Instances For
The rank order is the shadow of its down-set decomposition. Strict-rank
comparison through r coincides with strict inclusion of the shell stacks
rankShells r — Finset.Iic being strictly monotone
(Finset.Iic_ssubset_Iic). Generic over any rank into a locally-finite-below
preorder, replacing per-instance "stipulate a shells table + decide it
agrees with the rank".