The selection-driven head on the SO carrier #
[MCB25] §1.13 (Lemma 1.13.7). P3a of the single-carrier
program: the selection-driven head function on the SO carrier — the
section-free, computable head ([Adg03] "the item that projects is the item
that selects"). Re-homes selCheck/selHead/outerCatC onto SO, the foundation
the Phase API consumes (isPhaseHeadOf, P3b).
The carrier-free selection combinators selStep/selSide (commutative —
selStep_comm/selSide_comm) live here: they operate purely on selection states
(Option (LIToken × List Cat)), so they are shared by the SO-carrier tree
recursion below and the legacy section-based Selection.lean. Only the tree
recursion is re-homed onto RoseTree SOLabel + the SO lift, exactly as subtreesN
(P2a-ii). Index-free traces (P1): a bare trace leaf gets the canonical saturated
value (mkTraceToken 0, []) — selCheck reads only the token's category (.N) and
outerSel ([]), both index-independent, so this is behaviour-equivalent to the
legacy (mkTraceToken n, []).
Carrier-free selection combinators #
selStep/selSide combine two sisters' selection-check results into the node's
projecting head (selStep) and which daughter projects (selSide). Both are
order-independent (selStep_comm/selSide_comm) — the formal content of Merge's
unordered output — so they descend through the nonplanar quotient.
Combine two sisters' selection-check results. Order-independent (symmetric,
selStep_comm): whichever sister's head c-selects the saturated other
projects, yielding its residual stack; none at exocentric nodes (neither
or both qualify).
Equations
- Minimalist.selStep (some (ha, c :: rest)) (some (hb, [])) = if hb.item.outerCat = c then some (ha, rest) else none
- Minimalist.selStep (some (ha, [])) (some (hb, c :: rest)) = if ha.item.outerCat = c then some (hb, rest) else none
- Minimalist.selStep x✝¹ x✝ = none
Instances For
Which daughter projects at a binary node under c-selection: some true = the
left sister is the selector, some false = the right, none =
exocentric (neither uniquely selects the saturated other). Mirrors selStep.
Equations
- Minimalist.selSide (some (ha, c :: rest)) (some (hb, [])) = if hb.item.outerCat = c then some true else none
- Minimalist.selSide (some (ha, [])) (some (hb, c :: rest)) = if ha.item.outerCat = c then some false else none
- Minimalist.selSide x✝¹ x✝ = none
Instances For
When selStep returns a head, that head is the projecting daughter's head,
and selSide agrees on which daughter projects. The bridge between the
residual-tracking selStep and the order-determining selSide.
Selection check on the planar carrier #
Selection check on a planar SO-tree: the projecting head + residual pending
features, or none outside the endocentric domain. Lexical leaf ↦ its token +
outerSel; bare trace leaf ↦ canonical (mkTraceToken 0, []) (index-free);
bare binary node ↦ selStep of the daughters.
Equations
- Minimalist.selCheckPlanar (RoseTree.node (Sum.inl tok) children) = some (tok, tok.item.outerSel)
- Minimalist.selCheckPlanar (RoseTree.node (Sum.inr PUnit.unit) []) = some (Minimalist.mkTraceToken 0, [])
- Minimalist.selCheckPlanar (RoseTree.node (Sum.inr PUnit.unit) [l, r]) = Minimalist.selStep (Minimalist.selCheckPlanar l) (Minimalist.selCheckPlanar r)
- Minimalist.selCheckPlanar (RoseTree.node (Sum.inr PUnit.unit) children) = none
Instances For
selCheckPlanar is PermEquiv-invariant, so it descends to the quotient.
Selection check lifted to the nonplanar carrier.
Instances For
The selection-driven head on SO #
Selection-driven head check on SO ([MCB25]
Lemma 1.13.7): the projecting head + residual features, or none off the
endocentric domain. Section-free and computable.
Equations
- s.selCheck = Minimalist.selCheckN ↑s
Instances For
The projecting head's lexical item, by c-selection.
Equations
- s.selHead = Option.map (fun (x : Minimalist.LIToken × List Minimalist.Cat) => x.1) s.selCheck
Instances For
Residual pending selectional features (some [] = saturated).
Equations
- s.checkedSel = Option.map (fun (x : Minimalist.LIToken × List Minimalist.Cat) => x.2) s.selCheck