Harmony Systems #
@cite{rose-walker-2011}
General framework for phonological harmony following @cite{rose-walker-2011}: a process by which a distinctive feature value spreads from a trigger segment to target segments, optionally skipping transparent segments and halting at blocker (opaque) segments.
Components (§1) #
- Feature: which distinctive feature spreads ([back], [round], [ATR], ...)
- Trigger: which segments source the spreading feature value
- Target: which segments receive the spreading feature value
- Transparent: which segments are skipped without blocking
- Blocker: which segments halt spreading (opaque segments)
- Direction: rightward, leftward, or bidirectional
Operations #
harmonyDomain: extract the spreading domain (stem segments not separated from the suffix by a blocker)triggerValue: extract the harmony value from the domain (direction-aware)harmonizeOne: apply harmony to a single segmentspreadSuffix: apply harmony through a suffix, halting at blockers
Instances #
- Turkish palatal harmony: [back] from last stem vowel → all suffix vowels
- Turkish labial harmony: [round] from last stem vowel → high suffix vowels only
- Finnish palatal harmony: [back] from last harmonic stem vowel → non-neutral suffix vowels; neutral vowels (/e/, /i/) are transparent
- Hungarian palatal harmony: [back] from last harmonic stem vowel → non-neutral suffix vowels; neutral vowels (/i, í, e, é/) are transparent
Direction of harmony spreading.
- rightward : HarmonyDir
- leftward : HarmonyDir
- bidirectional : HarmonyDir
Instances For
Equations
- Theories.Phonology.Harmony.instBEqHarmonyDir.beq x✝ y✝ = (x✝.ctorIdx == y✝.ctorIdx)
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
A parameterized harmony system.
Following @cite{rose-walker-2011}'s decomposition into trigger, target, domain, and spreading feature. Each language's vowel harmony is an instance of this type.
The isBlocker field (default: no blockers) identifies opaque
segments that halt spreading. In Hungarian, low neutral vowels like
/e/ sometimes block back harmony from passing through — marking /e/
as a blocker rather than transparent yields different predictions for
stems like hotel.
- feature : Feature
The distinctive feature that spreads.
Trigger predicate: which segments source the feature value.
Target predicate: which segments undergo feature change.
Transparency predicate: which segments are skipped during spreading without blocking it.
Blocker predicate: which segments halt spreading (opaque). Default: no blockers.
- direction : HarmonyDir
Direction of spreading.
Instances For
The harmony domain: the portion of the stem that governs suffix harmony. For rightward spreading, this is everything after the last blocker; for leftward, everything before the first blocker.
Without blockers, the domain is the full stem.
Example: stem = [a, BLOCKER, i] with rightward spreading → domain = [i] (only the suffix-adjacent segment governs).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Extract the harmony trigger value from a segment sequence.
- Restrict to the harmony domain (respecting blockers)
- Filter for trigger segments within the domain
- Select the last trigger (rightward/bidirectional) or first trigger (leftward)
- Return the trigger's value for the harmony feature
Returns none if no trigger is found in the domain (e.g., stems
with only neutral vowels, or stems where a blocker separates all
triggers from the suffix boundary).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Apply harmony to a single segment: if the segment is a target, set the harmony feature to the given value; otherwise return unchanged.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Apply harmony through a suffix segment list, respecting blockers.
Walks through segments left-to-right:
- Blocker: halts spreading — this segment and all subsequent segments are returned unchanged.
- Target: harmonized (feature value set) and spreading continues.
- Other (transparent/inert): returned unchanged and spreading continues.
Without blockers (default), this reduces to mapping harmonizeOne
over the suffix.
Equations
Instances For
Non-target segments are unchanged by harmonization.
Spreading through an empty suffix returns an empty list.
Suffix length is preserved by spreading (even with blockers — blocked segments are returned unchanged, not removed).
The harmony domain is the full stem when there are no blockers.
Blockers in the suffix halt spreading: segments at and after the first blocker are returned unchanged.