Subtree extraction #
All subtrees of an SO (including self)
Equations
Instances For
Proper subtrees (excluding self)
Equations
- (Minimalism.SyntacticObject.leaf a).properSubtrees = []
- (a.node b).properSubtrees = a.subtrees ++ b.subtrees
Instances For
Internal nodes (subtrees that are.node)
Equations
- (Minimalism.SyntacticObject.leaf a).internalNodes = []
- (a.node b).internalNodes = a.node b :: (a.internalNodes ++ b.internalNodes)
Instances For
Internal node count (= nodeCount from SyntacticObjects.lean)
Leaf multisets (frontier tokens) #
The multiset of leaf tokens at the frontier of an SO
Equations
- (Minimalism.SyntacticObject.leaf a).leafMultiset = [a]
- (a.node b).leafMultiset = a.leafMultiset ++ b.leafMultiset
Instances For
Leaf multiset as a Multiset — the mathematically correct type
(frontier token identity is order-independent).
Equations
- so.leafMultisetM = ↑so.leafMultiset
Instances For
Accessible terms (Definition 2.4) #
For a tree T, the accessible terms are the leaf-sets of subtrees rooted at internal nodes. That is, for each internal node v, we take L(T_v) = the leaf multiset of the subtree rooted at v.
Accessible terms: leaf-multisets of subtrees at internal nodes
Equations
- (Minimalism.SyntacticObject.leaf a).accessibleTerms = []
- (a.node b).accessibleTerms = (a.node b).leafMultiset :: (a.accessibleTerms ++ b.accessibleTerms)
Instances For
Accessible terms as Multiset of Multisets — order-independent identity.
Equations
- so.accessibleTermsM = ↑(List.map (fun (x : List Minimalism.LIToken) => ↑x) so.accessibleTerms)
Instances For
Number of accessible terms = number of internal nodes
Workspace counting (Definition 2.4, equations 2.8–2.9) #
A workspace (forest) is a list of SOs = the connected components.
Total accessible terms across all trees in forest
Equations
- Minimalism.numAcc F = (List.map (fun (x : Minimalism.SyntacticObject) => x.accessibleTerms.length) F).sum
Instances For
σ(F) = b₀(F) + #Acc(F) (eq 2.8)
Equations
Instances For
Total internal nodes across all trees in forest
Equations
- Minimalism.numVertices F = (List.map (fun (x : Minimalism.SyntacticObject) => x.nodeCount) F).sum
Instances For
σ̂(F) = b₀(F) + #V(F) (eq 2.9)
Equations
Instances For
numAcc and numVertices agree: accessible term count = internal node count per tree, so the sums coincide.
σ̂ = σ since #Acc = #V (both equal total nodeCount)
Depth of a subtree occurrence #
Depth of β in α (0 if β = α, +1 per level)
Equations
Instances For
Proposition 2.17: Counting behavior of EM vs IM #
External Merge takes two trees T₁, T₂ from workspace F and creates merge(T₁, T₂), reducing components by 1 and adding a new root node.
Internal Merge takes a tree T from F with a contained subtree β, re-merging β at the root: merge(β, T), keeping the same components.
List filter/count helpers #
External Merge: workspace goes from F to F' where T₁,T₂ ∈ F replaced by merge(T₁,T₂)
Equations
- Minimalism.emWorkspace T₁ T₂ F = List.filter (fun (x : Minimalism.SyntacticObject) => x != T₂) (Minimalism.merge T₁ T₂ :: List.filter (fun (x : Minimalism.SyntacticObject) => x != T₁) F)
Instances For
Internal Merge: workspace goes from F to F' where T ∈ F replaced by merge(β, T)
Equations
- Minimalism.imWorkspace T β F = Minimalism.merge β T :: List.filter (fun (x : Minimalism.SyntacticObject) => x != T) F
Instances For
EM: b₀ decreases by 1 (two components become one)
EM: accessible terms increase by 2 (new root adds one for each child subtree plus the root itself, but the children's accessible terms are preserved)
EM: σ increases by 1 (Δb₀ = -1, Δ#Acc = +1, net = 0... but σ = b₀ + #Acc so Δσ = -1 + 1 = 0 — actually MCB2023 Table says Δσ = +1 for EM. This is because Δ#Acc = +2 in their counting.
IM: b₀ preserved (same number of components)
IM: accessible terms increase by 1 + β.nodeCount.
merge(β, T) =.node β T has nodeCount = 1 + β.nodeCount + T.nodeCount. Since T is replaced in the forest, the net change in numVertices (= numAcc) is 1 + β.nodeCount. Note: β's subtree is duplicated (it remains inside T and also appears as a new child of the root). In MCB2023's sharing model β would not be duplicated and the change would be just +1; here we track the tree-copy semantics faithfully.
IM: σ̂ increases by 1 + β.nodeCount.
wsSizeAlt = b₀ + numVertices. Under IM, b₀ is preserved and
numVertices increases by 1 + β.nodeCount (see im_acc_change).
Corollary 2.22: Sideward/Countercyclic Merge violates constraints #
Sideward Merge: merge(β, T₂) where β is contained in T₁, and T₁ ≠ T₂. This extracts a subterm from one tree and merges it with another.
Countercyclic Merge: merge(T₁, T₂) where one is contained in the other but NOT as a root constituent.
Sideward Merge condition: β is in T₁, we merge β with T₂
- T₁ : SyntacticObject
- T₂ : SyntacticObject
- β : SyntacticObject
Instances For
Sideward Merge workspace: remove nothing (β stays in T₁), add merge(β, T₂)
Equations
- Minimalism.sidewardWorkspace sm F = Minimalism.merge sm.β sm.T₂ :: F
Instances For
Sideward Merge violates b₀ preservation: it adds a component without removing one. This is the key constraint violation that distinguishes it from standard EM/IM.
Bridge: counting behavior consistent with EM/IM trichotomy #
The counting characterization aligns with the order-theoretic partition from MergeUnification.lean.
When α and β are incomparable (EM case), merge reduces component count by 1. Requires uniqueness of α and β in F (each appears exactly once).
When one contains the other (IM case), merge preserves component count. Requires uniqueness of α in F.