Anttila 1997: deriving variation from grammar #
Finnish genitive plurals come in a strong variant (heavy penult, naa.pu.rei.den) and a weak one (light penult, naa.pu.ri.en). Stems of one or two syllables choose categorically, longer CV-final stems vary, and the variation is biased by the stem-final vowel and by the weight of the antepenult. One partially ordered grammar covers all of it. Its constraints are the harmonic alignments of stress, weight, and sonority together with bans on adjacent syllables of equal stress or weight; Finnish stratifies them by promoting No Clash and the two stress–weight mismatches above the rest. Every total ranking consistent with the grammar picks a winner, and a variant's probability is the share of rankings under which it wins. The stress constraints decide short stems and stems with a heavy antepenult outright; where they tie, secondary stress being optional, the two internally unranked intermediate sets resolve the competition at rates that the corpus frequencies track.
Item and page numbers follow the ROA-63 manuscript.
Main definitions #
Syllable,Constraint: syllables as stress, weight, and nuclear sonority, and the twenty constraints of (50), withConstraint.violationscounting on a syllable string.finnishGrammar: the strata of (50) refined by the universal rankings (28).Shape.cands: the candidate sets of the categorical tableaux;word: the trisyllabic candidates of (52) by motif;wins: the rankings under which a variant wins its motif.predicted: the result column of (52), as the paper's fraction of rankings.
References #
Syllable prominence (25) #
Equations
- Anttila1997.instDecidableEqSonority x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
Equations
- Anttila1997.instReprSonority.repr Anttila1997.Sonority.i prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Anttila1997.Sonority.i")).group prec✝
- Anttila1997.instReprSonority.repr Anttila1997.Sonority.o prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Anttila1997.Sonority.o")).group prec✝
- Anttila1997.instReprSonority.repr Anttila1997.Sonority.a prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Anttila1997.Sonority.a")).group prec✝
Instances For
Equations
- Anttila1997.instReprSonority = { reprPrec := Anttila1997.instReprSonority.repr }
Equations
- Anttila1997.instFintypeSonority = { elems := { val := ↑Anttila1997.Sonority.enumList, nodup := Anttila1997.Sonority.enumList_nodup }, complete := Anttila1997.instFintypeSonority._proof_1 }
Position on the sonority hierarchy.
Equations
Instances For
Equations
Equations
- Anttila1997.instDecidableEqWeight x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
Equations
- Anttila1997.instReprWeight.repr Anttila1997.Weight.light prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Anttila1997.Weight.light")).group prec✝
- Anttila1997.instReprWeight.repr Anttila1997.Weight.heavy prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Anttila1997.Weight.heavy")).group prec✝
Instances For
Equations
- Anttila1997.instReprWeight = { reprPrec := Anttila1997.instReprWeight.repr }
Equations
- Anttila1997.instFintypeWeight = { elems := { val := ↑Anttila1997.Weight.enumList, nodup := Anttila1997.Weight.enumList_nodup }, complete := Anttila1997.instFintypeWeight._proof_1 }
Whether a weight is the prominent value of its scale, the one stress aligns with.
Equations
- Anttila1997.Weight.heavy.prominent = true
- Anttila1997.Weight.light.prominent = false
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
- Anttila1997.instReprSyllable = { reprPrec := Anttila1997.instReprSyllable.repr }
The constraints of (50): a starred stress–weight, weight–sonority, or stress–sonority combination within a syllable (28), or a starred adjacency of equal stress or weight (29).
- stressWeight (stressed : Bool) (w : Weight) : Constraint
- weightSonority (w : Weight) (s : Sonority) : Constraint
- stressSonority (stressed : Bool) (s : Sonority) : Constraint
- clash (stressed : Bool) : Constraint
- collision (w : Weight) : Constraint
Instances For
Equations
- One or more equations did not get rendered due to their size.
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.stressWeight stressed w) (Anttila1997.Constraint.weightSonority w_1 s) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.stressWeight stressed w) (Anttila1997.Constraint.stressSonority stressed_1 s) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.stressWeight stressed w) (Anttila1997.Constraint.clash stressed_1) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.stressWeight stressed w) (Anttila1997.Constraint.collision w_1) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.weightSonority w s) (Anttila1997.Constraint.stressWeight stressed w_1) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.weightSonority w s) (Anttila1997.Constraint.stressSonority stressed s_1) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.weightSonority w s) (Anttila1997.Constraint.clash stressed) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.weightSonority w s) (Anttila1997.Constraint.collision w_1) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.stressSonority stressed s) (Anttila1997.Constraint.stressWeight stressed_1 w) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.stressSonority stressed s) (Anttila1997.Constraint.weightSonority w s_1) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.stressSonority stressed s) (Anttila1997.Constraint.clash stressed_1) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.stressSonority stressed s) (Anttila1997.Constraint.collision w) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.clash stressed) (Anttila1997.Constraint.stressWeight stressed_1 w) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.clash stressed) (Anttila1997.Constraint.weightSonority w s) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.clash stressed) (Anttila1997.Constraint.stressSonority stressed_1 s) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.clash a) (Anttila1997.Constraint.clash b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.clash stressed) (Anttila1997.Constraint.collision w) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.collision w) (Anttila1997.Constraint.stressWeight stressed w_1) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.collision w) (Anttila1997.Constraint.weightSonority w_1 s) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.collision w) (Anttila1997.Constraint.stressSonority stressed s) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.collision w) (Anttila1997.Constraint.clash stressed) = isFalse ⋯
- Anttila1997.instDecidableEqConstraint.decEq (Anttila1997.Constraint.collision a) (Anttila1997.Constraint.collision b) = if h : a = b then h ▸ isTrue ⋯ else isFalse ⋯
Instances For
Equations
- Anttila1997.instReprConstraint = { reprPrec := Anttila1997.instReprConstraint.repr }
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.
Violations on a syllable string: the syllables showing the starred combination, or the adjacent pairs sharing the starred value.
Equations
- One or more equations did not get rendered due to their size.
- (Anttila1997.Constraint.stressWeight st w).violations x✝ = List.countP (fun (σ : Anttila1997.Syllable) => decide (σ.stressed = st ∧ σ.weight = some w)) x✝
- (Anttila1997.Constraint.weightSonority w s).violations x✝ = List.countP (fun (σ : Anttila1997.Syllable) => decide (σ.weight = some w ∧ σ.nucleus = some s)) x✝
- (Anttila1997.Constraint.stressSonority st s).violations x✝ = List.countP (fun (σ : Anttila1997.Syllable) => decide (σ.stressed = st ∧ σ.nucleus = some s)) x✝
- (Anttila1997.Constraint.clash st).violations x✝ = List.countP (fun (p : Anttila1997.Syllable × Anttila1997.Syllable) => decide (p.1.stressed = st ∧ p.2.stressed = st)) (x✝.zip x✝.tail)
Instances For
The grammar for Finnish (28), (50) #
Harmonic alignment (27) of sonority with a binary scale: on the scale's prominent value the constraint against the less sonorous nucleus ranks higher; on the other value, the more.
Equations
- Anttila1997.alignedAbove prominent s s' = if prominent = true then s < s' else s' < s
Instances For
Equations
- Anttila1997.instDecidableAlignedAbove p s s' = id inferInstance
The universal rankings (28): the stress–weight mismatches outrank the matches, and sonority aligns with weight and with stress.
Equations
- Anttila1997.Universal (Anttila1997.Constraint.stressWeight st w) (Anttila1997.Constraint.stressWeight st' w') = (st ≠ w.prominent ∧ st' = w'.prominent)
- Anttila1997.Universal (Anttila1997.Constraint.weightSonority w s) (Anttila1997.Constraint.weightSonority w' s') = (w = w' ∧ Anttila1997.alignedAbove w.prominent s s')
- Anttila1997.Universal (Anttila1997.Constraint.stressSonority st s) (Anttila1997.Constraint.stressSonority st' s') = (st = st' ∧ Anttila1997.alignedAbove st s s')
- Anttila1997.Universal x✝¹ x✝ = False
Instances For
Equations
- One or more equations did not get rendered due to their size.
The strata of (50): No Clash; the two stress–weight mismatches; the intermediary sets (49); the rest.
Equations
- (Anttila1997.Constraint.clash true).set = 0
- (Anttila1997.Constraint.stressWeight true Anttila1997.Weight.light).set = 1
- (Anttila1997.Constraint.stressWeight false Anttila1997.Weight.heavy).set = 1
- (Anttila1997.Constraint.weightSonority Anttila1997.Weight.heavy Anttila1997.Sonority.i).set = 2
- (Anttila1997.Constraint.stressSonority true Anttila1997.Sonority.i).set = 2
- (Anttila1997.Constraint.collision Anttila1997.Weight.light).set = 2
- (Anttila1997.Constraint.weightSonority Anttila1997.Weight.heavy Anttila1997.Sonority.o).set = 3
- (Anttila1997.Constraint.stressSonority true Anttila1997.Sonority.o).set = 3
- (Anttila1997.Constraint.weightSonority Anttila1997.Weight.light Anttila1997.Sonority.a).set = 3
- (Anttila1997.Constraint.collision Anttila1997.Weight.heavy).set = 3
- (Anttila1997.Constraint.stressWeight true Anttila1997.Weight.heavy).set = 3
- (Anttila1997.Constraint.clash false).set = 3
- x✝.set = 4
Instances For
Finnish only adds rankings to (28): no universal ranking is reversed across strata.
The roster in the column order of (50).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Stratum of a roster position.
Equations
Instances For
The universal rankings on the roster, reflexively.
Equations
- Anttila1997.universalOn a b = (a = b ∨ Anttila1997.Universal (Anttila1997.constraint a) (Anttila1997.constraint b))
Instances For
Equations
- Anttila1997.instDecidableRelFinOfNatNatUniversalOn a b = id inferInstance
Only Set 5 ranks constraints internally.
Below Set 5 the inner order is trivial.
The grammar for Finnish, final version (50).
Equations
Instances For
Categorical predictions (§5.1) #
Tableau syllables: stressed or unstressed, of unspecified, heavy, or light weight.
Equations
- Anttila1997.X' = { stressed := true }
Instances For
Equations
- Anttila1997.H' = { stressed := true, weight := some Anttila1997.Weight.heavy }
Instances For
Equations
- Anttila1997.H = { stressed := false, weight := some Anttila1997.Weight.heavy }
Instances For
Equations
- Anttila1997.L' = { stressed := true, weight := some Anttila1997.Weight.light }
Instances For
Equations
- Anttila1997.L = { stressed := false, weight := some Anttila1997.Weight.light }
Instances For
The stem shapes of the categorical tableaux, by their examples: (33) maa, (35) kala, (37) maailma, (39) ministeri, (40) margariini, (42) Aleksanteri, (43) koordinaatisto, (44) italiaano.
- maa : Shape
- kala : Shape
- maailma : Shape
- ministeri : Shape
- margariini : Shape
- aleksanteri : Shape
- koordinaatisto : Shape
- italiaano : Shape
Instances For
Equations
- Anttila1997.instDecidableEqShape 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.
- Anttila1997.instReprShape.repr Anttila1997.Shape.maa prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Anttila1997.Shape.maa")).group prec✝
- Anttila1997.instReprShape.repr Anttila1997.Shape.kala prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Anttila1997.Shape.kala")).group prec✝
- Anttila1997.instReprShape.repr Anttila1997.Shape.maailma prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Anttila1997.Shape.maailma")).group prec✝
- Anttila1997.instReprShape.repr Anttila1997.Shape.ministeri prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Anttila1997.Shape.ministeri")).group prec✝
- Anttila1997.instReprShape.repr Anttila1997.Shape.italiaano prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Anttila1997.Shape.italiaano")).group prec✝
Instances For
Equations
- Anttila1997.instReprShape = { reprPrec := Anttila1997.instReprShape.repr }
Equations
- Anttila1997.instFintypeShape = { elems := { val := ↑Anttila1997.Shape.enumList, nodup := Anttila1997.Shape.enumList_nodup }, complete := Anttila1997.instFintypeShape._proof_1 }
The candidates of the tableaux (32), (34), (36), (38), (41): the weak variant, the strong one, and after a heavy antepenult the strong one with its stress shifted.
Equations
- One or more equations did not get rendered due to their size.
- Anttila1997.Shape.maa.cands = {[Anttila1997.H', Anttila1997.H], [Anttila1997.L', Anttila1997.H]}
- Anttila1997.Shape.kala.cands = {[Anttila1997.X', Anttila1997.L, Anttila1997.H], [Anttila1997.X', Anttila1997.H, Anttila1997.H]}
- Anttila1997.Shape.maailma.cands = {[Anttila1997.X', Anttila1997.X, Anttila1997.H', Anttila1997.H], [Anttila1997.X', Anttila1997.X, Anttila1997.L, Anttila1997.H]}
- Anttila1997.Shape.ministeri.cands = {[Anttila1997.X', Anttila1997.X, Anttila1997.L, Anttila1997.L, Anttila1997.H], [Anttila1997.X', Anttila1997.X, Anttila1997.L, Anttila1997.H', Anttila1997.H]}
Instances For
The roster's constraints on the candidates of a shape's tableau.
Equations
- Anttila1997.tableauCon c x = (Anttila1997.constraint c).violations x.2
Instances For
The total rankings consistent with the Finnish grammar.
Instances For
A tableau candidate that every consistent ranking picks.
Equations
- s.Categorical cand = ∀ σ ∈ Anttila1997.rankings, OptimalityTheory.PicksAt Anttila1997.Shape.cands Anttila1997.tableauCon σ s cand
Instances For
Monosyllabic stems take the strong variant (32): mai.den, not ma.jen (33).
Disyllabic CV-final stems take the weak variant (34): ka.lo.jen, not ka.loi.den (35).
A heavy antepenult in a 4-syllabic stem is stressed and forces a light penult (38): mar.ga.rii.ni.en only (40).
A light ante-antepenult before a heavy antepenult likewise (41): i.ta.li.aa.no.jen only (44).
After a light antepenult, or a heavy one following a heavy ante-antepenult, the stress constraints tie (36), (38), (41): secondary stress is optional, and both variants survive Sets 1 and 2.
Quantitative predictions (§5.3) #
The two genitive-plural variants (1).
Instances For
Equations
- Anttila1997.instDecidableEqVariant x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
Equations
- Anttila1997.instReprVariant = { reprPrec := Anttila1997.instReprVariant.repr }
Equations
- Anttila1997.instReprVariant.repr Anttila1997.Variant.strong prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Anttila1997.Variant.strong")).group prec✝
- Anttila1997.instReprVariant.repr Anttila1997.Variant.weak prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "Anttila1997.Variant.weak")).group prec✝
Instances For
Equations
- Anttila1997.instFintypeVariant = { elems := { val := ↑Anttila1997.Variant.enumList, nodup := Anttila1997.Variant.enumList_nodup }, complete := Anttila1997.instFintypeVariant._proof_1 }
The other variant.
Equations
Instances For
A motif of (52): the antepenult's weight and the stem-final vowel.
Equations
Instances For
The penult of a variant with nucleus s: stressed and heavy, or unstressed and light.
Equations
- Anttila1997.penult Anttila1997.Variant.strong x✝ = { stressed := true, weight := some Anttila1997.Weight.heavy, nucleus := some x✝ }
- Anttila1997.penult Anttila1997.Variant.weak x✝ = { stressed := false, weight := some Anttila1997.Weight.light, nucleus := some x✝ }
Instances For
A trisyllabic candidate of (52): initial stress, an unstressed antepenult of the motif's weight, the variant's penult, and an unstressed heavy final.
Equations
- Anttila1997.word (w, s) x✝ = [Anttila1997.X', { stressed := false, weight := some w }, Anttila1997.penult x✝ s, Anttila1997.H]
Instances For
The roster's constraints on the variants of a motif.
Equations
- Anttila1997.con c x = (Anttila1997.constraint c).violations (Anttila1997.word x.1 x.2)
Instances For
The rankings under which variant v wins motif m.
Equations
- Anttila1997.wins m v = {σ ∈ Anttila1997.rankings | OptimalityTheory.PicksAt (fun (x : Anttila1997.Motif) => Finset.univ) Anttila1997.con σ m v}
Instances For
The deciding-stratum count: once the strata above k tie, the rankings won by v
stand to all rankings as stratum k's constraints favoring v stand to its active ones.
card_wins_mul with the two counts evaluated.
The result column of (52) for the strong variant: its share of the rankings, as the paper's fraction.
Equations
- Anttila1997.predictedStrong (Anttila1997.Weight.light, Anttila1997.Sonority.i) = (1, 3)
- Anttila1997.predictedStrong (Anttila1997.Weight.light, snd) = (1, 1)
- Anttila1997.predictedStrong (Anttila1997.Weight.heavy, Anttila1997.Sonority.a) = (1, 2)
- Anttila1997.predictedStrong (Anttila1997.Weight.heavy, Anttila1997.Sonority.o) = (1, 5)
- Anttila1997.predictedStrong (Anttila1997.Weight.heavy, Anttila1997.Sonority.i) = (0, 1)
Instances For
The result column of (52).
Equations
Instances For
A motif's strong share, from the counts behind the paper's fraction.
The shares of (52): decided in Set 3 after a light antepenult and for h.tii, in Set 4 for h.taa and h.too; the strata below never matter.
Every consistent ranking picks one of the two variants.
The weak variant's share is the complement of the strong one's.
The paper's data #
Antepenult weight from a motif label.
Equations
- Anttila1997.Weight.ofChar? 'l' = some Anttila1997.Weight.light
- Anttila1997.Weight.ofChar? 'h' = some Anttila1997.Weight.heavy
- Anttila1997.Weight.ofChar? x✝ = none
Instances For
Stem-final vowel from a motif label.
Equations
- Anttila1997.Sonority.ofChar? 'a' = some Anttila1997.Sonority.a
- Anttila1997.Sonority.ofChar? 'o' = some Anttila1997.Sonority.o
- Anttila1997.Sonority.ofChar? 'i' = some Anttila1997.Sonority.i
- Anttila1997.Sonority.ofChar? x✝ = none
Instances For
A motif label of (52)–(53): antepenult weight, t, and the stem-final vowel, doubled for
the strong variant.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The value of a digit string.
Equations
- Anttila1997.digits l = List.foldl (fun (n : ℕ) (c : Char) => 10 * n + (c.toNat - '0'.toNat)) 0 l
Instances For
A printed whole percentage.
Equations
- Anttila1997.percent? s = if s.toList.all Char.isDigit = true then some (Anttila1997.digits s.toList) else none
Instances For
A printed percentage in tenths: 99.4 as 994, 100 as 1000.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Table (53): the paper's predicted percentage is the share of (52) to the nearest percent.
Tables (48) and (53): the variant the grammar favors is the more frequent one.