OCP-merging collapse of autosegmental representations #
A merging tone realization ([Jar19]; the melody-merging naming function of
[JH15], Mende example) is OCP-merging: a tonal melody Hⁿ realizes as a
single H node multiply associated to the n morae, not n separate H nodes. The
project's Autosegmental.AR.realize (Realization.lean) instead uses the bridge-only
concat (the categorical coproduct), which keeps the n H nodes apart. This file
supplies the missing merge as a post-processing retraction on the upper tier:
collapseGraph/collapseAR— fuse each maximal run of identical adjacent upper-tier labels into one node, carrying the association lines along: a link(k, j)is repointed to(ρ k, j), whereρ(runIdx) sends an upper position to the index of its run in the collapsed tier. The lower tier is untouched, so a merged node keeps all the morae its run was associated with (multiple association).AR.realizeMerged := collapseAR ∘ AR.realize— the OCP-merging realization.
The upper-tier collapse is exactly OCP.collapse (= List.destutter (· ≠ ·)); the
link pushforward is the SimpleGraph.map/Quiver.Push idiom
(Finset.image (Prod.map ρ id)); planarity survives because ρ is monotone
(IsNonCrossing.image_monotone, NonCrossing.lean).
The AR-level OCP quotient monoid #
collapseAR is the AR-level lift of FreeMonoid.destutterHom: a retraction onto the OCP-clean
ARs that descends to a quotient of the concat monoid AR α β. The key congruence is
collapseAR_concat — the AR shadow of OCP.collapse_append, whose links half reduces to
runIdx commuting with the collapse-collapse seam (runIdx_append_collapse_left/right,
in turn the boundary-length lemma List.destutter_append_length_clean). It bundles as
collapseARHom : AR α β →* {A // IsCleanAR A}, whose mathlib quotient
(ocpARQuotientEquiv) is the concrete OCP-clean model.
Main results #
collapseGraph_concat/collapseAR_concat— the collapse congruence (in-bounds free at AR level), the AR lift ofOCP.collapse_append.collapseAR_id_on_clean—collapseARretracts onto its OCP-clean fixed points.instMonoidCleanAR/collapseARHom/ocpARQuotientEquiv— the AR-level OCP quotient monoid, its bundled hom, and the first-isomorphism equivalence.upperHom/upperHomClean_comp_collapseARHom— the upper-tier projection and the decategorification square: the AR-level OCP quotient maps onto the tier-level one.autosegment_mul_self/ocpPresentation— the tier-level OCP-clean monoid is presented by idempotent autosegments⟨α | a · a = a⟩; the OCP is a monoidal quotient, the counterpart to the No-Crossing Constraint's monoidal subcategory (ncc_isMonoidal).collapse_not_reflective— that quotient does not categorify:collapseis not a reflector (a morphism can split a geminate), so the OCP quotient lives on the object monoid, not the category — the precise sense in which OCP and NCC differ.
The collapse in coordinates #
The OCP merge on the graph foundation: destutter melody tier m's word and
repoint its links through runIdx. Like normalize the result is a
AR on a sigma-Fin carrier, but the merge is not a pullback —
runIdx is monotone, not bijective — so the structural axioms are proved
directly on the merged carrier.
Tier words after collapsing melody tier m: destuttered at m, untouched
elsewhere.
Equations
- Autosegmental.AR.collapsedWord X m = Function.update (fun (i : ι) => Autosegmental.AR.tierWord i) m (OCP.collapse (Autosegmental.AR.tierWord m))
Instances For
Position repointing: runIdx on the melody tier, identity elsewhere.
Equations
- Autosegmental.AR.collapseIdx X m i p = if i = m then OCP.runIdx (Autosegmental.AR.tierWord m) p else p
Instances For
The OCP-merging collapse: melody tier m destuttered, links repointed
through runIdx, other tiers untouched.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The collapsed fiber at i is enumerated by its position range.
Equations
- Autosegmental.AR.collapseFiberEnum X m i = StrictMono.orderIsoOfSurjective (fun (p : Fin (Autosegmental.AR.collapsedWord X m i).length) => ⟨⟨i, p⟩, ⋯⟩) ⋯ ⋯
Instances For
The collapse does what it says: its tier words are the collapsed
words — destuttered at m (Function.update_self), untouched elsewhere.
The word half of the OCP congruence: collapsing a tensor computes the same
tier words as collapsing the tensor of the collapsed factors —
OCP.collapse_append lifted through the readers.
The collapse's links are the image of the original links under the
repointing — edges_normalize's analogue for the merge.
Left-block positions commute with the collapse-collapse seam.
Right-block positions commute with the collapse-collapse seam.
The OCP congruence: collapsing a concatenation is isomorphic to collapsing the concatenation of the collapses — [JH15]'s melody-merge law, by the classification theorem.
Equations
Instances For
OCP-cleanliness at melody tier m: the tier word has no adjacent
repeats.
Equations
Instances For
The OCP-merging realization at melody tier m — [Jar19]'s merging
g_T: AR.realize, then merge the melody runs.
Equations
- Autosegmental.realizeMerged m g₀ w = Autosegmental.AR.collapse (Autosegmental.AR.realize g₀ w) m
Instances For
On a normal form, one position covers another in the arc order iff it is its immediate successor.