Moraic Phonology #
Moraic representations following @cite{hayes-1989}: the mora (μ) as the fundamental unit of prosodic structure. Segments associate to morae, morae associate to syllables. This replaces the segmental prosodic tier (X theory, CV theory) with a prosodic tier whose elements directly encode weight.
Key design decisions from @cite{hayes-1989}:
- Onset consonants are non-moraic (universally)
- Short consonants are underlyingly moraless; coda consonants may receive a mora via Weight by Position (language-specific)
- Long vowels link to two morae; geminates link one segment to two morae
- Glides are moraless (zero morae)
The moraic tier σ → μ → segment replaces the List Segment representation
in Syllable.Defs, which is essentially a segmental (X-theory) view.
@cite{hayes-1989}
A segment's underlying moraic specification.
Following @cite{hayes-1989}:
- 0 morae: glides, onset consonants
- 1 mora: short vowels, short consonants (when moraic by WBP)
- 2 morae: long vowels, geminates, long syllabic consonants
Instances For
Equations
- Phonology.Moraic.instDecidableEqMoraCount x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Phonology.Moraic.instReprMoraCount = { reprPrec := Phonology.Moraic.instReprMoraCount.repr }
Equations
Instances For
Increment a mora count by one (capped at two).
Equations
Instances For
A syllable in moraic theory.
Following @cite{hayes-1989}: the syllable node σ directly dominates morae, which in turn dominate segments. Onset consonants adjoin directly to σ without intervening morae (they are weight-irrelevant).
The split between onset (non-moraic) and moraic (mora-bearing) segments
is the structural core of moraic theory — it is this split that derives the
onset deletion asymmetry.
- onset : List Segment
Onset consonants: directly adjoined to σ, no mora.
- moraic : List MoraicSeg
Mora-bearing segments: nucleus vowels and (optionally) coda consonants. Ordered left to right; nucleus segments precede coda segments.
Instances For
Language-specific parameters for moraic structure assignment.
Following @cite{hayes-1989}, Rule (10): moraic structure is partly language-specific. The key parameter is Weight by Position: whether coda consonants receive a mora. Languages like Latin have WBP (CVC = heavy); languages like Lardil lack it (CVC = light).
- wbp : Bool
Does this language assign morae to coda consonants?
Instances For
Assign moraic structure to a Syllable according to MoraicParams.
Following @cite{hayes-1989}, §2: the moraic structure assignment rules are:
- Nucleus segments receive one mora each
- Coda consonants receive a mora iff WBP is active
- Onset consonants are non-moraic
This is the key function that derives moraic syllables from the
existing segmental Syllable representation + language-specific params,
rather than stipulating mora counts by hand.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Convert an entire SyllabifiedForm to a MoraicForm.
Equations
- Phonology.Moraic.syllabifiedToMoraic params sf = { syllables := List.map (Phonology.Moraic.syllableToMoraic params) sf.syllables }
Instances For
Total mora count of a moraic syllable.
Equations
- σ.moraCount = List.foldl (fun (x1 : ℕ) (x2 : Phonology.Moraic.MoraicSeg) => x1 + x2.morae.toNat) 0 σ.moraic
Instances For
Total mora count of a moraic form.
Equations
- f.totalMorae = List.foldl (fun (x1 : ℕ) (x2 : Phonology.Moraic.MoraicSyllable) => x1 + x2.moraCount) 0 f.syllables
Instances For
Convert a moraic form to a PrWd (prosodic word) weight profile.
This connects moraic representations to the prosodic word layer, enabling minimal word constraints, metrical parsing, and stress assignment to operate on moraically-derived weight profiles.
Equations
- f.toPrWd = { syllables := List.map Phonology.Moraic.MoraicSyllable.toSyllWeight f.syllables }
Instances For
Helper: folding mora counts over a list of segments all mapped to the same
MoraCount equals init + length * moraCount.
General bridge: syllableToMoraic with WBP produces the same mora count
as Syllable.moraCount codaMoraic=true. Fully general over all syllables.
General bridge: syllableToMoraic without WBP produces the same mora count
as Syllable.moraCount codaMoraic=false.
General bridge: moraic weight classification agrees with segmental weight
classification for WBP languages. This connects MoraicSyllable.toSyllWeight
to Syllable.weight — two independently defined weight functions that
must agree for the moraic theory to be consistent with the segmental view.
General bridge for non-WBP languages.
syllableToMoraic preserves CV = light regardless of WBP.
A CV syllable (one monomoraic vowel, no coda) is light.
A CVV syllable (one bimoraic vowel) is heavy.
A CVC syllable with WBP (coda has one mora) is heavy.
A CVC syllable without WBP (coda has zero morae) is light.
A CVVC syllable (long vowel + moraic coda) is superheavy.
Geminate: one segment linked to two morae, straddling a syllable boundary. The first half contributes its mora(e) to the coda of σ₁.
The moraic minimal word: satisfiesMinWord checks ≥ 2 morae by default.
This connects moraic representations to PrWd's bimoraic minimum.
Round-trip fidelity: toSyllWeight.morae recovers the exact mora count.
No bounds needed — SyllWeight is now a Nat wrapper, not a lossy enum.