Syllables #
[Hay89] [Hym85] [Sel82] [Cle90]
The syllable (σ) — the level above the mora in the prosodic hierarchy: a headed
moraic constituent ([Hay89]; [Hym85]). A non-moraic onset sits over a
moraic spine whose head is the nucleus — the sonority peak ([Cle90]; the
"nucleus = head of σ" reading follows dependency/government phonology).
The nucleus mora is mandatory and structurally initial (a σ has ≥1 mora by
construction; there is no head-direction parameter — unlike the foot); tail carries
any further nuclear morae (long vowels) and a moraic coda.
The moraic structure is the carrier (weight is mora-based and load-bearing, so —
unlike the foot — the tree and onset-rime are secondary). The rival onset-rime
theory ([Sel82]) is a re-representation (toOnsetRime), proved to agree with the
moraic carrier on weight; the segment string is the yield.
Main definitions #
Syllable— a headed moraic σ:onset, a nucleusheadmora, and atailof morae.Syllable.morae/nucleusMora/nucleusSegments/weight/moraCount.Syllable.IsHeavy/IsLight— the weight inventory (sonority/SSP well-formedness is a syllabification follow-up).Syllable.ofCV/mk'— smart constructors (a non-empty nucleus is required).Syllable.yield/toOnsetRime— re-representations;toOnsetRime_weightis the weight-correspondence between the moraic and onset-rime theories.Syllable.Weight—Nat(the mora count), with.light/.heavy/.superheavy.
Syllables #
σ — a headed moraic syllable ([Hay89]): a non-moraic onset, a nucleus head
mora (the sonority peak; mandatory, so σ has ≥1 mora and the head is initial by
construction), and a tail of further morae (long-vowel morae + a moraic coda).
- onset : List Phonology.Segment
The non-moraic onset melody.
- head : Mora
The nucleus mora — the sonority peak; mandatory, so σ has ≥ 1 mora.
- tail : List Mora
Further morae: long-vowel morae and a moraic coda.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Syllable weight is just the mora count — there is no separate weight type.
.light (1μ), .heavy (2μ), .superheavy (3μ) name the common values for
readable weight profiles in metrical and accentual computations.
Equations
Instances For
Equations
Instances For
Equations
Instances For
Equations
Instances For
The nucleus — the head mora (the sonority peak).
Equations
- σ.nucleusMora = σ.head
Instances For
The number of morae — the syllable's weight.
Instances For
A heavy syllable: at least two morae.
Equations
- σ.IsHeavy = (Prosody.Syllable.Weight.heavy ≤ σ.weight)
Instances For
A light syllable: exactly one mora.
Equations
- σ.IsLight = (σ.weight = Prosody.Syllable.Weight.light)
Instances For
Equations
- σ.instDecidableIsHeavy = id inferInstance
Equations
- σ.instDecidableIsLight = id inferInstance
Build a syllable from an explicit nucleus mora (+ optional further/coda morae).
Equations
- Prosody.Syllable.mk' onset nucleus coda = { onset := onset, head := nucleus, tail := coda }
Instances For
Build a syllable from an onset and a non-empty mora spine (nucleus = first mora).
Equations
- Prosody.Syllable.ofMorae onset ms h = { onset := onset, head := ms.head h, tail := ms.tail }
Instances For
Build a syllable from a segmental onset–nucleus–coda string. Each nucleus segment projects a mora (the first is the nucleus head); a coda segment projects its own mora iff Weight-by-Position is active ([Hay89]), else it rides the last nucleus mora (a non-moraic coda). A non-empty nucleus is required.
Equations
- One or more equations did not get rendered due to their size.
- Prosody.Syllable.ofCV onset [] coda wbp h = ⋯.elim
Instances For
The segment string (yield) of a syllable: onset followed by the moraic melody.
Equations
- σ.yield = σ.onset ++ List.flatMap (fun (x : Prosody.Mora) => x.dominates) σ.morae
Instances For
Moraic operations (stranding and re-licensing) #
The moraic-syllabification operations of [Hay89]: segment deletion strands a μ
(an empty prosodic position), which is then re-licensed by re-association ([Ito86]'s
Prosodic Licensing) or else erased. This is the mechanism of compensatory lengthening —
"CL" the phenomenon is a composition of these operations, documented per-language in
Studies/Hayes1989. Mora count is conserved by construction (the μ survives deletion).
Delete the segment under mora i, leaving the μ stranded (it survives,
dominating nothing) — the engine of compensatory lengthening.
Equations
Instances For
Delete an onset segment. Onsets are non-moraic, so this strands no μ — the onset-deletion asymmetry: it cannot feed compensatory lengthening ([Hay89]).
Instances For
The number of stranded (segmentally unaffiliated) morae.
Equations
- σ.strandedCount = List.countP (fun (μ : Prosody.Mora) => decide μ.IsStranded) σ.morae
Instances For
Tautosyllabic re-licensing ([Ito86]): re-associate σ's stranded morae to the nucleus, within σ. Length-preserving on the spine, so weight is conserved.
Equations
- σ.relicense = Prosody.Syllable.rebuild✝ σ (Prosody.Syllable.relink✝ [] σ.morae) ⋯
Instances For
Heterosyllabic re-licensing (Parasitic Delinking, [Hay89]): a stranded
nucleus μ delinks — the syllable, now nucleus-less, is deleted (none), and its μ
migrates onto the preceding host's nucleus, lengthening it (the host vowel spans
two morae). A no-op if the target's nucleus is not stranded.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Mora conservation, by construction.
The onset-deletion asymmetry ([Hay89]): deleting an onset strands no μ.
Heterosyllabic re-licensing conserves the total mora count across the boundary: the migrated μ leaves the (deleted) target and is gained by the host.
Onset-rime re-representation #
The onset-rime structure ([Sel82]): a rival theory of σ structure, an onset
over a rime. Here a re-representation of the canonical moraic Syllable.
- onset : List Phonology.Segment
The non-moraic onset melody.
- rime : List Mora
The rime: the moraic spine.
Instances For
Equations
- Prosody.instDecidableEqOnsetRime.decEq { onset := a, rime := a_1 } { onset := b, rime := b_1 } = if h : a = b then h ▸ if h : a_1 = b_1 then h ▸ isTrue ⋯ else isFalse ⋯ else isFalse ⋯
Instances For
Yield #
A yield: the terminal σ-weight string of a prosodic structure — the
unparsed input, or the leaves of a prosodic Tree. Distinct from the prosodic
word ω (an IsWord tree), which is a headed constituent: a yield is just the
weight profile, with no head and no constituency.
Equations
Instances For
The weight profile of fully-moraified syllables — the σ → yield bridge.
Equations
- Prosody.Yield.ofSyllables σs = List.map Prosody.Syllable.weight σs
Instances For
The minimal-word size constraint ([McCP93]): at least
minMorae morae (default 2, the moraic-trochee minimum) — the moraic size floor on a
prosodic word. Whether an ω must structurally contain a foot is a separate, non-presupposed
matter (footless languages have ω directly over σ, [Dol20]).
Equations
- y.satisfiesMinWord minMorae = (minMorae ≤ y.moraCount)
Instances For
The prosodic-tree carrier #
The recursive prosodic constituent ([IM03]): the Core ordered rose tree
RoseTree labeled by prosodic-level Constituents — the violable OT candidate
carrier for ω/φ/… structures, including the ill-formed ones (a footless ω, a stray under
φ) that IsWord rules out. Its OT constraints are
Constraints.Constraint Tree values, defined alongside IsWord. Homed here because
Constituent.weight/.syl need Syllable.Weight; it inherits DecidableEq/map from
RoseTree.
A prosodic node — the level is the constructor: a σ carries its mora weight and isHead,
every non-root level carries isHead (whether it heads its parent). Constructor defaults match
the former smart constructors, so node literals are unchanged; illegal nodes (a weight on a
foot, a head on the ι root) are unrepresentable.
- syl
(weight : Syllable.Weight := 0)
(isHead : Bool := false)
: Constituent
A syllable of the given
weight, optionally the head of its foot. - ft
(isHead : Bool := false)
: Constituent
A foot, optionally the head foot of its word.
- om
(isHead : Bool := false)
: Constituent
A prosodic word ω, optionally the head word of its phrase.
- ph
(isHead : Bool := false)
: Constituent
A phonological phrase φ, optionally the head phrase of its intonational phrase.
- iota : Constituent
An intonational phrase ι — the root of the utterance-level hierarchy, headless.
Instances For
Equations
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.syl a a_1) (Prosody.Constituent.syl b b_1) = if h : a = b then h ▸ if h : a_1 = b_1 then h ▸ isTrue ⋯ else isFalse ⋯ else isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.syl weight isHead) (Prosody.Constituent.ft isHead_1) = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.syl weight isHead) (Prosody.Constituent.om isHead_1) = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.syl weight isHead) (Prosody.Constituent.ph isHead_1) = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.syl weight isHead) Prosody.Constituent.iota = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.ft isHead) (Prosody.Constituent.syl weight isHead_1) = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.ft a) (Prosody.Constituent.ft b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.ft isHead) (Prosody.Constituent.om isHead_1) = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.ft isHead) (Prosody.Constituent.ph isHead_1) = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.ft isHead) Prosody.Constituent.iota = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.om isHead) (Prosody.Constituent.syl weight isHead_1) = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.om isHead) (Prosody.Constituent.ft isHead_1) = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.om a) (Prosody.Constituent.om b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.om isHead) (Prosody.Constituent.ph isHead_1) = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.om isHead) Prosody.Constituent.iota = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.ph isHead) (Prosody.Constituent.syl weight isHead_1) = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.ph isHead) (Prosody.Constituent.ft isHead_1) = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.ph isHead) (Prosody.Constituent.om isHead_1) = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.ph a) (Prosody.Constituent.ph b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq (Prosody.Constituent.ph isHead) Prosody.Constituent.iota = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq Prosody.Constituent.iota (Prosody.Constituent.syl weight isHead) = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq Prosody.Constituent.iota (Prosody.Constituent.ft isHead) = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq Prosody.Constituent.iota (Prosody.Constituent.om isHead) = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq Prosody.Constituent.iota (Prosody.Constituent.ph isHead) = isFalse ⋯
- Prosody.instDecidableEqConstituent.decEq Prosody.Constituent.iota Prosody.Constituent.iota = isTrue ⋯
Instances For
Equations
- Prosody.instReprConstituent = { reprPrec := Prosody.instReprConstituent.repr }
Equations
- One or more equations did not get rendered due to their size.
- Prosody.instReprConstituent.repr Prosody.Constituent.iota prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Prosody.Constituent.iota")).group prec✝
Instances For
Whether a node heads its parent (a σ heads its foot, a foot heads its word, an ω its phrase,
a φ its intonational phrase); false for the ι root.
Equations
- (Prosody.Constituent.syl a a_1).isHead = a_1
- (Prosody.Constituent.ft a).isHead = a
- (Prosody.Constituent.om a).isHead = a
- (Prosody.Constituent.ph a).isHead = a
- Prosody.Constituent.iota.isHead = false
Instances For
The mora weight of a σ node; none for non-σ nodes.
Equations
- (Prosody.Constituent.syl w isHead).weight? = some w
- x✝.weight? = none
Instances For
A syllable (σ) node.
Equations
- (Prosody.Constituent.syl w isHead).isSyl = true
- x✝.isSyl = false
Instances For
A prosodic-word (ω) node.
Equations
- (Prosody.Constituent.om isHead).isOm = true
- x✝.isOm = false
Instances For
A phonological-phrase (φ) node.
Equations
- (Prosody.Constituent.ph isHead).isPh = true
- x✝.isPh = false
Instances For
An intonational-phrase (ι) node.
Equations
- Prosody.Constituent.iota.isIota = true
- x✝.isIota = false
Instances For
Two nodes at the same prosodic level (the same constructor, ignoring weight/head) — the same-category test the No-Recursion family reads off the carrier.
Equations
- (Prosody.Constituent.syl weight isHead).sameLevel (Prosody.Constituent.syl weight_1 isHead_1) = true
- (Prosody.Constituent.ft isHead).sameLevel (Prosody.Constituent.ft isHead_1) = true
- (Prosody.Constituent.om isHead).sameLevel (Prosody.Constituent.om isHead_1) = true
- (Prosody.Constituent.ph isHead).sameLevel (Prosody.Constituent.ph isHead_1) = true
- Prosody.Constituent.iota.sameLevel Prosody.Constituent.iota = true
- x✝¹.sameLevel x✝ = false
Instances For
The level family is exclusive: a foot is not a syllable.
The level family is exclusive: a prosodic word is not a syllable.
A prosodic tree: the Core ordered rose tree RoseTree labeled by
Constituents. Ordered children give No-Tangling by construction.
Equations
Instances For
A σ-leaf — the metrical terminal: a syllable of weight w, head-marked h.
Equations
- Prosody.Tree.σ w h = RoseTree.node (Prosody.Constituent.syl w h) []
Instances For
A foot node over cs, optionally the head foot of its word.
Equations
- Prosody.Tree.ft h cs = RoseTree.node (Prosody.Constituent.ft h) cs
Instances For
A prosodic-word (ω) node over cs.
Equations
Instances For
A phonological-phrase (φ) node over cs — interim, until Prosody.Phrase lands.
Equations
Instances For
Leaf/branch induction on a prosodic tree. A σ-leaf is a base case; every other node — a
foot, word, phrase, or degenerate/ill-formed node — is a branch, carrying the induction
hypothesis over its children and the fact that it is not a σ-leaf. This is what lets proofs
reduce the σ-leaf if the reader equations carry (via if_pos ⟨ha, rfl⟩ / if_neg hne)
instead of splitting it.