Hayes (1989): Compensatory Lengthening in Moraic Phonology #
This file formalizes the moraic theory of compensatory lengthening (CL) of [Hay89]: a
syllabification that gives vowels their moras underlyingly and coda consonants theirs by the
language-particular rule of Weight by Position, deletion on the segmental tier only, Parasitic
Delinking, and CL as the filling of a stranded mora by a language-particular convention, all
under the ban on crossing association lines. The typological argument of the paper's §5 is
derived from the representations: cl_delete_of_isOnset is the onset-deletion asymmetry (an
onset projects no mora, so its loss strands nothing, and Moraic Conservation holds by
construction), NoCrossing.cl says that filling from the nearest linked segment never crosses a
line, and not_noCrossing_link_of_onset is the vowel-loss asymmetry (the vowel to the right of
a stranded mora lies outside the mora's Autosegmental.window, past that syllable's onset
line). The seven CL types of the typology, the weight prerequisite of §6, and the two-mora
limit and trimoraic syllables of §7 are run as derivations on the paper's forms.
Implementation notes #
A Form places every prosodic node at the timeline slot of the segment that projected it, so
the syllable, mora, and segmental tiers share one order and the lines a syllable node draws
directly to its onset consonants can cross the lines of a mora; Autosegmental.IsNonCrossing
on the node-to-segment lines is then the ban on crossing association lines as (66) and (68)
use it. The melody alphabet Seg is schematic, as the paper's forms are: segment features play
no role in the argument. Intervocalic clusters divide after their first consonant; every form
below has a one-consonant onset, so the language-particular division principles of §2.1 are
not needed. A CL convention takes the nearest linked segment on its side; the vowel-only
restriction of (17b) and the sonority-graded Degemination (41) of Ilokano are not modelled.
TODO #
- The cluster cases of (27d), where Stray Erasure removes the unsyllabifiable half of the geminate, and Degemination (41).
- The X-theory derivations of §3.1, §4, and §5.3 that the moraic account is compared against.
References #
Prosodic nodes #
The prosodic tiers above the melody.
Instances For
Equations
- Hayes1989.instDecidableEqTier x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
Equations
- Hayes1989.instReprTier = { reprPrec := Hayes1989.instReprTier.repr }
Equations
- Hayes1989.instReprTier.repr Hayes1989.Tier.syl prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Tier.syl")).group prec✝
- Hayes1989.instReprTier.repr Hayes1989.Tier.mora prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Tier.mora")).group prec✝
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Hayes1989.instReprNode = { reprPrec := Hayes1989.instReprNode.repr }
The syllable node over the nucleus at slot v.
Equations
- Hayes1989.Node.σ v = { tier := Hayes1989.Tier.syl, slot := v }
Instances For
The k-th mora projected from slot i.
Equations
- Hayes1989.Node.μ i k = { tier := Hayes1989.Tier.mora, slot := i, idx := k }
Instances For
Nodes are ordered by slot: the order in which association lines are drawn.
Equations
- Hayes1989.Node.instPreorder = Preorder.lift Hayes1989.Node.slot
Equations
- a.instDecidableLT b = { decide := a.slot.succ.ble b.slot, reflects_decide := ⋯ }
Equations
- a.instDecidableLE b = { decide := a.slot.ble b.slot, reflects_decide := ⋯ }
Forms #
A moraic representation over a melody, in which segment i occupies timeline slot i.
- melody : List α
The segmental tier.
- nodes : Finset Node
The prosodic nodes present: a syllable deleted by Parasitic Delinking is gone, a stranded mora survives.
Domination of morae by syllable nodes.
- links : Finset (Node × ℕ)
Association lines run to the melody, from a syllable node to its onset consonants and from a mora to the segments it dominates.
Instances For
The ban on crossing association lines, on both layers.
Equations
Instances For
Equations
- f.instDecidableNoCrossing = id inferInstance
The slots node n is associated to.
Equations
- f.span n = Finset.image (fun (x : Hayes1989.Node × ℕ) => x.2) ({x ∈ f.links | x.1 = n})
Instances For
The morae of syllable node s.
Equations
- f.morae s = Finset.image (fun (x : Hayes1989.Node × Hayes1989.Node) => x.2) ({x ∈ f.dom | x.1 = s})
Instances For
The morae stranded by a deletion on the segmental tier are those dominating nothing.
Equations
- f.stranded = {n ∈ f.nodes | n.tier = Hayes1989.Tier.mora ∧ f.span n = ∅}
Instances For
Morae no syllable node dominates.
Equations
- f.free = {n ∈ f.nodes | n.tier = Hayes1989.Tier.mora ∧ n ∉ Finset.image (fun (x : Hayes1989.Node × Hayes1989.Node) => x.2) f.dom}
Instances For
The mora count of the form.
Equations
- f.moraCount = {x ∈ f.nodes | x.tier = Hayes1989.Tier.mora}.card
Instances For
The surface string after Stray Erasure pairs each linked segment with its number of lines.
Equations
Instances For
Operations #
Deletion on the segmental tier only ((17a)): slot i loses every association line, and
a mora that dominated it alone is stranded.
Equations
Instances For
delink erases one association line, as Glide Formation (37) disassociates a vowel from its
mora.
Equations
Instances For
link draws one association line, for spreading onto a stranded mora or adjunction of a
stray segment.
Equations
Instances For
Parasitic Delinking (23): a syllable node with no nuclear segment is deleted with its lines; its morae survive, now free.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A language's CL convention ((17b), (25a), (40a)): fill a stranded mora from the nearest segment linked to a node on its left, or on its right.
- fromLeft : Convention
- fromRight : Convention
Instances For
Equations
- Hayes1989.Form.instDecidableEqConvention 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
- Hayes1989.Form.instReprConvention = { reprPrec := Hayes1989.Form.instReprConvention.repr }
fills is the set of lines CL draws, from each stranded mora to the nearest segment linked
on the convention's side, the endpoint of the mora's window.
Equations
- f.fills Hayes1989.Form.Convention.fromLeft = f.stranded.biUnion fun (m : Hayes1989.Node) => WithBot.recBotCoe ∅ (fun (j : ℕ) => {(m, j)}) (Autosegmental.leftBound f.links m)
- f.fills Hayes1989.Form.Convention.fromRight = f.stranded.biUnion fun (m : Hayes1989.Node) => WithTop.recTopCoe ∅ (fun (j : ℕ) => {(m, j)}) (Autosegmental.rightBound f.links m)
Instances For
Compensatory lengthening fills every stranded mora with the convention's segment; a mora with none stays stranded, for Stray Erasure.
Equations
Instances For
Moraic Conservation (64) #
No operation but Stray Erasure touches the mora tier, so CL conserves mora count by construction.
Stranding #
Slot i is an onset: linked from syllable nodes only, so it projects no mora.
Equations
- f.IsOnset i = ∀ p ∈ f.links, p.2 = i → p.1.tier = Hayes1989.Tier.syl
Instances For
Equations
- One or more equations did not get rendered due to their size.
A form with no stranded mora is untouched by CL.
CL from onset deletion is impossible ((57), (63)): with nothing stranded, the convention finds nothing to fill, and the mora count could only grow by a mora the representation does not provide.
Crossing #
Removing lines keeps a form free of crossing lines, and so does CL, which links each stranded
mora to the endpoint of its window, the nearest segment linked on the convention's side. Only
link can cross, and noCrossing_link_iff says exactly when.
The lines CL draws from stranded morae to the nearest segment on one side cross neither one another nor the lines of a form without crossings.
Drawing a line keeps a form free of crossings iff its slot lies in the node's window.
A stranded mora to the left of a syllable cannot lengthen its nucleus v, which lies past
its window because the onset consonant c is linked from the syllable node to its right
(§5.3.2, (61) and (66)). Rightward CL through vowel loss is unattested.
(68): a moraic coda c between the nucleus v and a stranded mora to its right puts v
before the mora's window, so vowel-loss CL favours open syllables.
Syllabification (§2.1) #
An underlying form lists each segment with its mora count ((3)–(7)): none for a consonant or glide, one for a short vowel, two for a long vowel. Moraic segments are nuclei; a consonant adjoins as onset to the following nucleus when prevocalic and otherwise as coda to the preceding one; Weight by Position (10) gives a coda its own mora while the syllable is below the language's mora limit, and a later coda rides the syllable's last mora (§7, (73)).
An underlying form lists segments with their mora counts.
Equations
- Hayes1989.Underlying α = List (α × ℕ)
Instances For
The nucleus slots.
Equations
Instances For
The nucleus slot c is an onset consonant of, if any.
Instances For
The nucleus slot c is a coda consonant of, if any.
Instances For
The number of coda consonants of the same syllable before c.
Equations
Instances For
Weight by Position (10) gives coda c of the syllable at v its own mora: the language
has the rule and the syllable is still below its mora limit.
Instances For
Equations
- u.instDecidableProjects wbp limit v c = id inferInstance
The mora dominating coda c of the syllable at v: its own under Weight by Position,
else the syllable's last mora so far.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The onset lines.
Equations
- u.onsets = List.filterMap (fun (c : ℕ) => Option.map (fun (v : ℕ) => (Hayes1989.Node.σ v, c)) (u.onsetHost c)) (List.range (List.length u))
Instances For
The coda consonants with their syllables.
Equations
Instances For
Syllabification projects syllable nodes from nuclei over their morae, adjoins onsets to the
syllable node and codas to a mora, with Weight by Position for a language that has it
(wbp) up to its mora limit (two by default, §7).
Equations
- One or more equations did not get rendered due to their size.
Instances For
The forms of the paper #
Equations
- Hayes1989.instDecidableEqSeg x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
Equations
- Hayes1989.instReprSeg.repr Hayes1989.Seg.a prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.a")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.e prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.e")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.i prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.i")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.o prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.o")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.u prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.u")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.schwa prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.schwa")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.b prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.b")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.d prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.d")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.g prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.g")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.k prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.k")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.l prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.l")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.m prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.m")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.n prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.n")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.p prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.p")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.r prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.r")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.s prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.s")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.t prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.t")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.v prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.v")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.w prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.w")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.x prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.x")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.θ prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.θ")).group prec✝
- Hayes1989.instReprSeg.repr Hayes1989.Seg.ng prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Hayes1989.Seg.ng")).group prec✝
Instances For
Equations
- Hayes1989.instReprSeg = { reprPrec := Hayes1989.instReprSeg.repr }
A consonant or glide ((4), (5)).
Equations
- Hayes1989.C seg = (seg, 0)
Instances For
Classical CL: Latin (12), (17) #
Latin kasnus 'gray' ((12b)), CVC heavy.
Equations
- One or more equations did not get rendered due to their size.
Instances For
(17c): the stranded mora is filled by spreading from the left.
Equations
Instances For
Onset deletion: Latin (14), (18) and Turkish #
Latin smereō 'deserve' ((14)): word-initial s is an onset.
Equations
- One or more equations did not get rendered due to their size.
Instances For
As in (18) for snurus, deleting the onset s strands nothing, so the convention has nothing to fill.
Turkish savmak 'to get rid of' (§5.2.1, after Sezer 1986): coda v deletes with CL.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Turkish davul 'drum': onset v deletes without CL, [daul] and not *[daːul].
Equations
- One or more equations did not get rendered due to their size.
Instances For
Double flop: Ancient Greek (19), (21) #
East Ionic odwos 'threshold' ((19)): d is a moraic coda, w the next onset.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Deleting the onset w strands nothing; the d then resyllabifies as the onset of the following syllable, and only that strands its mora ((21)).
Equations
- Hayes1989.odwos_flop = ((Hayes1989.odwos.delete 2).delink (Hayes1989.Node.μ 1) 1).link (Hayes1989.Node.σ 3) 1
Instances For
In nonlocal CL the vowel that lengthens is not adjacent to the consonant that deleted.
Vowel loss: Middle English (24)–(26) and the asymmetry (61), (66), (68) #
Middle English tale 'tale' (Minkova 1982).
Equations
Instances For
Schwa Drop and Parasitic Delinking (24): the second syllable goes, its mora is free.
Equations
Instances For
(25)–(26): CL from the left, then the stray l adjoins to the migrated mora, which the first syllable adopts.
Equations
Instances For
The mirror image (61), (66): #ala with the first vowel deleted.
Equations
Instances For
After Parasitic Delinking the first mora is free, but the l remains the second syllable's onset.
Equations
Instances For
Rightward vowel lengthening crosses the onset line: #laː cannot arise.
The remaining option without crossings is (56): the l geminates, the first half in its own syllable.
(68): talpa with the final vowel deleted; the first syllable is closed by a moraic l.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Instances For
The vowel cannot lengthen across its coda's line.
The l could, at the price of a consonant linked to two morae of one syllable ((7)), the configuration Estonian permits.
Glide Formation: Ilokano (38)–(40) and Managerial Lengthening (44), (46) #
Ilokano bagi + en 'to have as one's own' ((27a)), CVC heavy.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Glide Formation (37) delinks the stem vowel from its mora, Parasitic Delinking removes its syllable, and the stray g and glide adjoin to the following syllable (39).
Equations
- Hayes1989.bagien_gf = ((Hayes1989.bagien.delink (Hayes1989.Node.μ 3) 3).parasitic.link (Hayes1989.Node.σ 4) 2).link (Hayes1989.Node.σ 4) 3
Instances For
Ilokano fills from the right ((40a)): the g, now an onset of the following syllable, spreads onto the mora, which the first syllable adopts, giving bag.gyen.
Instances For
Nothing but the convention keeps the preceding vowel from filling the mora instead ((44)): baagyen, the Managerial Lengthening of English patience ((46)).
Instances For
Total assimilation (49b) and prenasalization (52) #
Regressive total assimilation, asta → atta: the coda deletes and the following consonant fills its mora, the convention of Lesbian and Thessalian Greek (§3.3).
Equations
Instances For
Bantu prenasalization, amba → aːmba, which the paper lists without a derivation: here the nasal leaves its mora for the onset of the following syllable, and the vowel fills it.
Equations
Instances For
Equations
Instances For
Inverse CL: Luganda (55a) #
In Luganda aika → akka, the vowel deletes and the following consonant geminates.
Equations
Instances For
Equations
Instances For
The weight prerequisite (§6, (71)) #
In pas, in a language without Weight by Position, the coda rides the nucleus mora.
Equations
Instances For
pas in a language with Weight by Position.
Equations
Instances For
Without a weight distinction, coda deletion strands no mora and CL cannot occur.
The two-mora limit and trimoraic syllables (§7) #
Komi sult.ni 'to stand up' ((73)): in a doubly closed syllable under the two-mora limit the t shares the l's mora.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Deleting the l strands nothing, giving [sutni] with no CL.
Komi sul.ta.li 'I stood up': the l alone closes its syllable and bears a mora.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Proto-Germanic θangxta 'thought' ((74)): CL in a nonfinal doubly closed syllable needs a trimoraic syllable, a mora limit of three.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Dithmarschen German spreeke 'speak, 1sg' ((76c)): vowel loss with CL lengthens a long vowel to overlong, a trimoraic syllable ((77)).
Equations
- One or more equations did not get rendered due to their size.