Docs / Syntax / Minimalist / Workspace / Merge / Sideward

Sideward Merge

import Linglib.Syntax.Minimalist.Workspace.Merge.Sideward · namespace Minimalist.Merge

Sideward Merge is Merge M_{S,S'} where at least one of S, S' is an accessible term of a component of the workspace, other than in Internal Merge. Marcolli, Chomsky and Berwick distinguish three cases (their §1.4.1): in 2(b) S is a component and S' an accessible term of another component; in 3(a) both are accessible terms of one component; in 3(b) they are accessible terms of two different components. Lemmas 1.4.4 and 1.4.5 show that the Merge operator of Definition 1.3.4 realizes all three, so Merge alone does not rule them out.

Each case evaluates the Merge formula mergeOpG_apply_of' on the workspace. On a single tree the matching cuts are the cuts with crown {S, S'}, since the tree itself is a one-element crown. On two trees the hypotheses force each matching forest cut to take S from the first tree and S' from the second, so the sum factors through the two one-tree sums. A spectator workspace passes through unchanged (mergeOpG_of'_mul).

Main results

Implementation notes

The book states each lemma for the term that extracts the matching objects. With several occurrences Merge sums over them, as (1.3.11) does, so the results are sums over the cuts with the matching crown, and a workspace without one is sent to 0.

The lemmas hold over enumerations admitting Merge (IsMergeCuts), which the deletion cuts of the book's mergeOp are not; on objects without unary vertices mergeOp_eq_rename_contractUnary_comp carries them to mergeOp, contracting the trunks.

References

Declarations

Merge on a one-tree workspace is Sideward Merge of type 3(a) (Marcolli et al. 2025 Lemma 1.4.5).

theorem mergeOpG_sideward_3aL81–87
{R : Type u_1} [CommSemiring R] {α : Type u_2} [DecidableEq (UnorderedTree α)] {cuts : UnorderedTree α → Multiset (UnorderedTree.Forest (UnorderedTree α) × UnorderedTree α)} (lbl : α) (S S' T : UnorderedTree α) :
(mergeOpG cuts lbl S S') (ConnesKreimer.of' {T}) = ConnesKreimer.of' {UnorderedTree.node lbl {S, S'}} * (Multiset.map (fun (p : UnorderedTree.Forest (UnorderedTree α) × UnorderedTree α) => ConnesKreimer.ofTree p.2) (Multiset.filter (fun (x : UnorderedTree.Forest (UnorderedTree α) × UnorderedTree α) => x.1 = {S, S'}) (cuts T))).sum

Merging a component T with a term S' of another component is Sideward Merge of type 2(b) (Marcolli et al. 2025 Lemma 1.4.4).

theorem mergeOpG_sideward_2bL89–110
{R : Type u_1} [CommSemiring R] {α : Type u_2} [DecidableEq (UnorderedTree α)] {cuts : UnorderedTree α → Multiset (UnorderedTree.Forest (UnorderedTree α) × UnorderedTree α)} [IsMergeCuts cuts] (lbl : α) {T T' S' : UnorderedTree α} (hT : T ∉ T'.subtrees) (hS' : S' ≠ T') :
(mergeOpG cuts lbl T S') (ConnesKreimer.of' {T, T'}) = ConnesKreimer.of' {UnorderedTree.node lbl {T, S'}} * (Multiset.map (fun (p : UnorderedTree.Forest (UnorderedTree α) × UnorderedTree α) => ConnesKreimer.ofTree p.2) (Multiset.filter (fun (x : UnorderedTree.Forest (UnorderedTree α) × UnorderedTree α) => x.1 = {S'}) (cuts T'))).sum

Merging terms S of T and S' of T' is Sideward Merge of type 3(b) (Marcolli et al. 2025 Lemma 1.4.4).

theorem mergeOpG_sideward_3bL112–131
{R : Type u_1} [CommSemiring R] {α : Type u_2} [DecidableEq (UnorderedTree α)] {cuts : UnorderedTree α → Multiset (UnorderedTree.Forest (UnorderedTree α) × UnorderedTree α)} [IsMergeCuts cuts] (lbl : α) {T T' S S' : UnorderedTree α} (hST : S ≠ T) (hS'T' : S' ≠ T') (hST' : S ∉ T'.subtrees) (hS'T : S' ∉ T.subtrees) :
(mergeOpG cuts lbl S S') (ConnesKreimer.of' {T, T'}) = ConnesKreimer.of' {UnorderedTree.node lbl {S, S'}} * (Multiset.map (fun (p : UnorderedTree.Forest (UnorderedTree α) × UnorderedTree α) => ConnesKreimer.ofTree p.2) (Multiset.filter (fun (x : UnorderedTree.Forest (UnorderedTree α) × UnorderedTree α) => x.1 = {S}) (cuts T))).sum * (Multiset.map (fun (p : UnorderedTree.Forest (UnorderedTree α) × UnorderedTree α) => ConnesKreimer.ofTree p.2) (Multiset.filter (fun (x : UnorderedTree.Forest (UnorderedTree α) × UnorderedTree α) => x.1 = {S'}) (cuts T'))).sum