The monoidal category of autosegmental representations #
An autosegmental representation (APR; [Gol76]) of a word is a finite
labeled bipartite graph: an upper tier of αs (the melody — tones, features), a
lower tier of βs (the timing/segmental backbone), and a finite set of
association lines between their positions. This file builds the object, its
concatenation monoidal category, and the well-formed (planar) subcategory cut out
by the No-Crossing Constraint, following [JH15].
The arc, in three layers:
Graph α β— the bipartite object. PlanarityIsPlanaris [Gol76]'s No-Crossing Constraint ([JH15] Axiom 4) — the sole structural well-formedness condition ([Pul86]); saturation (Goldsmith's original WFC) is language-particular, so floating elements are well-formed.AR α β— the in-bounds object (every association line falls within the tier lengths) and the base of the category; morphisms are label- and link-preserving position maps.concatis morpheme concatenation ([JH15] §5): the empty graph is the unit (Theorem 1) andconcatis associative (Theorem 3). The paper calls it "a modification of [the] disjoint union"; its disjoint-union core — before the OCP-merging step, modeled separately asOCP.collapse— is the categorical coproduct (HasBinaryCoproducts), so the monoidal product is cocartesian.WellFormedAR α β— the full monoidal subcategory of planar ARs. The No-Crossing Constraint is morpheme-modular (ncc_isMonoidal, [JH15] Theorem 4): planarity is stable under⊗. The OCP ([McC86]) is not (ocp_not_isMonoidal, Axiom 5) — concatenation can abut identical autosegments across a morpheme boundary — so it drives a boundary repair (OCP.collapse).
Main definitions #
Graph/AR/WellFormedAR— the three layers of the autosegmental object.Graph.IsPlanar— the No-Crossing Constraint, via theMonovaryOn-basedNonCrossingsubstrate.AR.concat/AR.empty— concatenation and its unit;HasBinaryCoproductexhibitsconcatas the categorical coproduct,emptyas the initial object.MonoidalCategory (AR α β)/MonoidalCategory (WellFormedAR α β).
Main results #
Graph.isPlanar_concat— concatenation preserves planarity ([JH15] Theorem 4).ncc_isMonoidal/ocp_not_isMonoidal— the NCC is morpheme-modular, the OCP is not;ncc_modular_ocp_notis the discriminating dichotomy.collapse_repairs_boundary— fusion restores OCP-cleanness across a boundary.
Categorical recognition #
AR α β is the Grothendieck construction ∫ F of the relation functor
F : (LabeledTuple α × LabeledTuple β) ⥤ Cat sending a tier-pair (U, V) to the
⊆-poset of relations Finset (Fin U.len × Fin V.len) and a position-map pair to
image-pushforward. An object is (tiers, relation); the Grothendieck fiber morphism
— a ≤ in the thin poset fiber — is exactly Hom.links_preserve (image ⊆ target).
So AR is the category of labeled finite bipartite graphs, and concat/empty
are the coproduct/initial object it carries as such.
This is realized concretely, not via CategoryTheory.Grothendieck: the literal
construction inherits only the bare Category (recorded here anyway as HasInitial
and HasBinaryCoproduct), forces the Fin (m + n) length-casts that the raw-ℕ
NonCrossing substrate and the omega-based consumers (Floating, LaoideKemp2026)
are built to avoid, and leaves the monoidal/coproduct layer hand-built regardless —
mathlib has neither a monoidal Grothendieck construction nor a cocartesian
ofChosenFiniteCoproducts builder (both upstream TODOs). The choice mirrors
LabeledTuple's and SimplexCategory's Fin-skeleton: state the universal
properties as theorems, and keep a definitional tensorObj := concat for the
decide/prop_tensor/eqToIso-coherence consumers.
Implementation notes #
Tiers are LabeledTuples; links : Finset (ℕ × ℕ) keeps raw natural-number
indexing — matching the MonovaryOn-based NonCrossing substrate and keeping the
monoid laws free of dependent-type casts — with in-bounds a separable Prop
(Graph.InBounds) rather than a structural invariant. Because the object-Monoid
laws hold as strict equalities, the associator and unitors are eqToIso of
mul_assoc/one_mul/mul_one, so AR is strict monoidal over its object-monoid.
The autosegmental graph (the bipartite object) #
A bipartite autosegmental representation: two ordered labeled tiers and a finite set of association lines (index pairs) between them.
- upper : LabeledTuple α
The upper tier (e.g., tonal tier, melodic tier, root).
- lower : LabeledTuple β
The lower tier (e.g., segmental backbone, skeleton, template).
- links : Finset (ℕ × ℕ)
Association lines as a finite set of index pairs
(upper-index, lower-index).
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Construction #
The empty bipartite representation with no tiers and no links.
Equations
- Autosegmental.Graph.empty = { upper := LabeledTuple.empty, lower := LabeledTuple.empty, links := ∅ }
Instances For
Planarity (no-crossing) #
Link rewrites #
Index predicates #
Upper index i is linked to some lower position (no in-bounds check).
Equations
- r.IsLinkedUpper i = ∃ p ∈ r.links, p.1 = i
Instances For
Lower index j is linked to some upper position (no in-bounds check).
Equations
- r.IsLinkedLower j = ∃ p ∈ r.links, p.2 = j
Instances For
Lower node j surfaces with label a: some a-labeled upper node is linked
to it — the labeled refinement of IsLinkedLower.
Equations
- r.SurfacesWith a j = ∃ (i : ℕ), (i, j) ∈ r.links ∧ r.upper.get? i = some a
Instances For
Equations
- r.instDecidableSurfacesWithOfDecidableEq a j = decidable_of_iff (∃ p ∈ r.links, p.2 = j ∧ r.upper.get? p.1 = some a) ⋯
Upper index i is floating: in-bounds but unlinked.
Equations
- r.IsFloatingUpper i = (i < r.upper.len ∧ ¬r.IsLinkedUpper i)
Instances For
Lower index j is floating: in-bounds but unlinked (segmentally empty).
Equations
- r.IsFloatingLower j = (j < r.lower.len ∧ ¬r.IsLinkedLower j)
Instances For
Decidability of index predicates #
Equations
Equations
In-bounds predicate #
Left-to-right concatenation of a list of graphs ([JH15] §5): tier juxtaposition with index-shifted links.
Equations
- Autosegmental.Graph.concatList gs = List.foldr Autosegmental.Graph.concat Autosegmental.Graph.empty gs
Instances For
Concatenation preserves planarity, given A.InBounds: A.links and the
shifted B.links are each non-crossing (monovaryOn_union +
isNonCrossing_image_shiftLink), and A sits entirely before B.
The base object of the autosegmental category: an in-bounds autosegmental
graph (every association line falls within the tier lengths). Planarity is
not carried here — it is the constraint defining the subcategory WellFormedAR.
- upper : LabeledTuple α
- lower : LabeledTuple β
- links : Finset (ℕ × ℕ)
- inBounds : self.InBounds
Instances For
Morphisms #
A label- and link-preserving morphism. The tier maps are LabeledTuple.Homs
(each bundles a position map with its label-preservation b.label ∘ f = a.label);
link preservation routes a link's (in-bounds) endpoints through those maps.
Vertex map on the upper tier (a label-preserving
LabeledTuplemorphism).Vertex map on the lower tier.
- links_preserve {i j : ℕ} (hi : i < A.upper.len) (hj : j < A.lower.len) : (i, j) ∈ A.links → (↑(self.fU.toFun ⟨i, hi⟩), ↑(self.fL.toFun ⟨j, hj⟩)) ∈ B.links
Association lines are preserved.
Instances For
The identity morphism.
Equations
- Autosegmental.AR.Hom.id A = { fU := LabeledTuple.Hom.id A.upper, fL := LabeledTuple.Hom.id A.lower, links_preserve := ⋯ }
Instances For
Extensionality at the index level: morphisms agree if their tier maps agree on
the underlying ℕ indices. Collapses the
Hom.ext → LabeledTuple.Hom.ext → funext → Fin.ext ladder used throughout the
category/coherence proofs.
Equations
- Autosegmental.AR.instCategoryStruct = { Hom := Autosegmental.AR.Hom, id := Autosegmental.AR.Hom.id, comp := fun {X Y Z : Autosegmental.AR α β} (f : X.Hom Y) (g : Y.Hom Z) => f.comp g }
Equations
- Autosegmental.AR.instCategory = { toCategoryStruct := Autosegmental.AR.instCategoryStruct, id_comp := ⋯, comp_id := ⋯, assoc := ⋯ }
Concatenation: the tensor object #
The concatenation bifunctor concatMap (the tensor on morphisms) #
The tier action delegates to the keystone LabeledTuple.Hom.concatMap; only link
preservation is bespoke, routing the A-block through f (unshifted) and the
B-block through g (shifted past A') via Fin.appendMap_val.
The concatenation bifunctor on morphisms (f ⊗ g): f on the A-block,
g (shifted) on the B-block. Tiers via LabeledTuple.Hom.concatMap.
Equations
Instances For
Monoid structure on objects #
The empty (unit) object: no tiers, no links.
Equations
- Autosegmental.AR.empty = { toGraph := Autosegmental.Graph.empty, inBounds := ⋯ }
Instances For
Equations
- A.instDecidableEq B = decidable_of_iff (A.toGraph = B.toGraph) ⋯
Objects form a Monoid under concatenation, with empty as unit
([JH15] Theorems 1, 3): the laws lift the Graph monoid laws
through ext_toGraph.
Equations
- Autosegmental.AR.instMonoid = { mul := Autosegmental.AR.concat, mul_assoc := ⋯, one := Autosegmental.AR.empty, one_mul := ⋯, mul_one := ⋯, npow_zero := ⋯, npow_succ := ⋯ }
Concatenation is the categorical coproduct #
empty is the initial object and concat the categorical coproduct — the
disjoint union of the two labeled bipartite graphs, with coprojections the
tier coprojections (LabeledTuple.inl/inr) carrying links forward. This is the
autosegmental analogue of LabeledTuple's cocartesian structure (and of
disjoint-union-of-graphs). [JH15] describes concatenation as "a
modification of [the] disjoint union" (§5) with the empty graph as identity
(Theorem 1); its disjoint-union core — the part before the OCP-merging
modification, modeled separately as OCP.collapse — is exactly this coproduct.
So the monoidal product is cocartesian.
The left coprojection A ⟶ A.concat B: tier inclusions plus the identity on
A's links, which sit unshifted in the first block.
Instances For
The right coprojection B ⟶ A.concat B: tier inclusions plus A's
index-shift on B's links (the second block).
Instances For
The copairing of f : A ⟶ T and g : B ⟶ T: f on the first block, g on
the (shifted) second block — Fin.append on tiers, case-split on links.
Equations
- Autosegmental.AR.coprodDesc f g = { fU := LabeledTuple.coprodDesc f.fU g.fU, fL := LabeledTuple.coprodDesc f.fL g.fL, links_preserve := ⋯ }
Instances For
concat is the categorical coproduct: inl/inr are the coprojections and
coprodDesc the copairing — the disjoint-union universal property.
Monoidal category structure #
(AR α β, concat, empty) is a monoidal category. Because the object Monoid
laws hold as strict equalities, the associator and unitors are eqToIso of
mul_assoc/one_mul/mul_one, so the coherence laws reduce to eqToHom
algebra (pentagon, triangle) or Fin-index arithmetic (naturalities).
The upper tier map of an eqToHom, as a function: the length-cast Fin.cast
(goes straight to the len level, avoiding a nested LabeledTuple eqToHom).
Tensoring an identity (left) with an eqToHom (right) is an eqToHom.
Tensoring an eqToHom (left) with an identity (right) is an eqToHom.
The tensor is concat; associator and unitors are eqToIso of the object
Monoid laws (AR is strict monoidal over its object-monoid).
Equations
- One or more equations did not get rendered due to their size.
The monoidal product is the object-monoid multiplication (both are concat): the
explicit bridge between the categorical ⊗ and the decategorified *.
Equations
- Autosegmental.AR.instMonoidalCategory = CategoryTheory.MonoidalCategory.ofTensorHom ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
The well-formed (planar) monoidal subcategory #
Planarity as a monoidal object-property #
Planarity is a monoidal property: the unit is planar and concat
preserves planarity (using the left factor's in-boundedness via
Graph.isPlanar_concat). This is the categorical content of [JH15]'s
NCC-preservation result (their Theorem 4: every concatenation satisfies the NCC).
The well-formed autosegmental category WellFormedAR α β: the full monoidal
subcategory of AR cut out by planarity. Objects are planar in-bounds graphs;
the MonoidalCategory instance is inherited from AR via
ObjectProperty.fullMonoidalSubcategory.
Equations
- Autosegmental.WellFormedAR α β = Autosegmental.isPlanar.FullSubcategory
Instances For
Build a WellFormedAR from an in-bounds representation and a planarity proof.
Equations
- Autosegmental.WellFormedAR.mk A h = { obj := A, property := h }
Instances For
The No-Crossing Constraint is morpheme-modular #
The No-Crossing Constraint ([Gol76], [Pul86]) is
morpheme-modular: planarity is a monoidal property of AR, so the planar
(well-formed) ARs form the monoidal subcategory WellFormedAR. This is the
linguistic content witnessed by the MonoidalCategory (WellFormedAR α β) instance.
The OCP is not morpheme-modular #
OCP-cleanness is not closed under the bare coproduct ⊗ (concat): concatenation
can abut an identical autosegment pair at the morpheme boundary — a violation present in
neither factor. Witnessed by two single-autosegment reps (⟨[true], [], ∅⟩) whose
concatenation has upper tier [true, true]. This is why [JH15] build the
melody-tier merge into their concatenation ◦: the bare coproduct here is ◦ with the
merge stripped out, and the merge restores the OCP (their Theorem 5; OCP.collapse as the
repair, collapse_repairs_boundary; Collapse.isCleanAR_gconcatAR for closure under ◦).
So the OCP is a monoidal quotient (closed under fusion-◦), not a monoidal sub-object
(closed under the coproduct) — the dual situation to the NCC (ncc_isMonoidal).
The discriminating dichotomy ([JH15] Theorems 4 vs 5): under the bare
coproduct ⊗ the NCC is preserved (closed, a monoidal sub-object) but the OCP is not
(boundary-spanning). The OCP is recovered only as a quotient, by the fusion merge that
◦ builds in. The two halves cannot be interchanged — that is what makes the monoidal
product load-bearing rather than decorative.
Fusion as the forced boundary repair #
Because the OCP is not morpheme-modular, well-formedness must be restored at
the morpheme boundary by a repair. [McC86]'s fusion (OCP.collapse)
is exactly such a repair: it maps the autosegmental tier of any concatenation
back into the OCP-clean set. The non-modularity of the OCP
(ocp_not_isMonoidal) is what makes a repair necessary; this theorem
exhibits one.