Harmony systems #
A harmony system in the [RW11] typological decomposition: a
distinctive feature value spreads from trigger segments to target segments,
optionally skipping transparent segments and halting at opaque blockers
([RW11], [Bel26]). System couples the tier-based AGREE
recognizer with the transduction discipline that turns it into a
structure-changing map.
System is alphabet-generic; at each concrete alphabet it instantiates to a
familiar finite-state object — transduce to a subsequential transducer whose
only state is one lens readout (at Turkish's alphabet, the classic two-state
front/back machine), the recognizer to a last-trigger-decides subsequential
function. The theorems are proved once, generically; every instantiation
inherits them. Finiteness is supplied at instantiation, not in the structure
(mathlib's DFA convention: [Fintype α] appears only on the theorems that
consume it).
Main definitions #
Subregular.Harmony.System: aPhonology.Harmony.Patternplus the mechanism-side residue — trigger context, targets, and the feature write. The valuation and write form a lawful lens (System.lens, aLens); blockers, the tier, and the recognizer (System.toTierRule) are derived from the pattern;System.mk'compiles the six-way decomposition.Subregular.Harmony.harmonyDomain,triggerValue: the stem portion governing suffix harmony, and the recognizer's prediction over it.System.transduce: the harmonized-string function, as a 2-OSL rule ([CEH15]).
Main results #
System.transduce_isLeftOSL: the harmonized string is 2-OSL by construction, not by post-hoc classification.Phonology.Harmony.Pattern.harmonic_iff_mem_tsl: a pattern's surface harmonicity is membership in a TSL₂ language ([ARGH24]).
Implementation notes #
This is the tier-based (TSL/OSL) analysis — one live account, not a settled
reduction: autosegmental spreading ([Gol76]),
Agreement-by-Correspondence ([RW04a]), and OT SPREAD/ALIGN remain
rivals with divergent predictions on transparency and opacity, and the
single-tier commitment is not universally adequate — Uyghur backness harmony
is provably non-TSL ([MM18]). Only the identity-tier case is
currently proved subsequential. The theory-neutral pattern vocabulary the
rival accounts share lives in Phonology/Harmony/Basic.lean; language
instances live in Fragments/{Turkish,Finnish,Hungarian}/VowelHarmony.lean.
Direction #
Compile a direction to the TierRule context side (bidirectional ↦ rightward).
Equations
Instances For
System — a pattern plus its transduction discipline #
Write harmonic value v into a segment's feature slot: the function-type
lens (Lens.proj) written at feature.
Equations
- Subregular.Harmony.writeFeature feature v s = Function.update s feature (some v)
Instances For
A harmony system: the descriptive Phonology.Harmony.Pattern (valuation,
blockers, transparency, direction) plus the mechanism-side residue — the
trigger context, the targets, and the feature write.
- pattern : Phonology.Harmony.Pattern α Bool
The descriptive pattern the system realizes.
- targetIsContext : α → Prop
The natural class of triggering context segments.
- decContext : DecidablePred self.targetIsContext
- isTarget : α → Prop
Which segments undergo the feature change.
- decTarget' : DecidablePred self.isTarget
- write : Bool → α → α
Write the harmonic value into a segment.
Reading back a written value gives that value.
Instances For
Opaque blockers, read off the pattern.
Equations
- sys.isBlocker s = (sys.pattern.participation s = Phonology.Harmony.Participation.opaque)
Instances For
Equations
- Subregular.Harmony.instDecidablePredIsBlocker sys s = id inferInstance
The system's lens: (pattern.value, write) with the put-get law. The slot
readout is the only state the OSL transducer carries.
Instances For
The recognizer core, derived from the pattern: an agree TierRule over the
pattern's tier, reading the pattern's valuation from the pattern's side.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Compile the [RW11] six-way decomposition into a System;
Bool lambdas are stored as the decidable Prop fields.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Recovering the Rose-Walker Typology #
The trigger predicate: Bool accessor for targetIsContext.
Equations
- Subregular.Harmony.isTrigger sys s = decide (sys.targetIsContext s)
Instances For
Harmony Domain #
The stem portion governing suffix harmony: everything after (rightward) or before (leftward) the blocker nearest the suffix.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Trigger Value Extraction #
The harmony value predicted at the suffix slot: the recognizer applied to the harmony domain.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Segment-Level Harmony #
Set a target's harmony feature to the given value; non-targets are unchanged.
Equations
- Subregular.Harmony.harmonizeOne sys val s = if sys.isTarget s then sys.write val s else s
Instances For
Suffix Spreading (convenience over the recognizer) #
Walk a suffix: blockers halt spreading, targets harmonize, all else passes
through. For the re-triggering subregular semantics, see transduce.
Equations
- Subregular.Harmony.spreadSuffix sys val [] = []
- Subregular.Harmony.spreadSuffix sys val (s :: rest) = if sys.isBlocker s then s :: rest else Subregular.Harmony.harmonizeOne sys val s :: Subregular.Harmony.spreadSuffix sys val rest
Instances For
Transducer grounding — harmony as an OSL function #
Harmony as a 2-OSL rule ([CEH15]): each target copies the harmonic value of the preceding output segment; blockers re-trigger.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The harmonized-string function of a harmony system: the OSL transduction.
Equations
- sys.transduce = sys.spreadRule.apply
Instances For
The harmonized string is 2-OSL by construction.
Properties #
Non-target segments are unchanged by harmonization.
Spreading through an empty suffix returns an empty list.
Spreading preserves length: blocked segments are kept, not removed.
The harmony domain is the full stem when there are no blockers.
A leading blocker halts spreading: the suffix is returned unchanged.
Harmony is TSL₂ by construction: the tier supplies both the unbounded distance
strictly local grammars lack and the blocking strictly piecewise grammars lack
([ARGH24]; for the latter,
McMullin2016.blockingLang_not_isStrictlyPiecewise).