Documentation

Linglib.Phonology.Tone.Constraints

Tonal constraints #

OT/HS constraint constructors over the FloatingForm S TRN autosegmental representation (Phonology/Autosegmental/Floating.lean), generic over the segment type S. Each is a canonical Constraints.Constraint — a scalar · → ℕ violation count. Equation numbers below are [McPL26]'s.

Main definitions #

Implementation notes #

Faithfulness (maxTone, maxLinkTone, depLinkTone) compares surface state to the immutable underlying state stored in FloatingForm. Without that underlying-form tracking, faithfulness can't fire and the [McPL26] LR-vs-RL multi-step asymmetry collapses.

Directionality is not a separate kind of constraint. Following [Lam22d] (directionality is a property of EVAL), *FLOAT is a position-indexed block of scalar float-flag constraints (starFloatBlock): coordinate i is floatIndicator's i-th entry, so splicing the block into a ranking and comparing under the canonical lexicographic profile order recovers the directional EVAL exactly (Core.Optimization.Evaluation.lexLE_ofFn). The block is laid out left-to-right for *FLOAT^→ (starFloatBlock) or right-to-left for *FLOAT^← (starFloatBlockRev); starFloatCount is the count collapse (parallel *FLOAT). They agree on at most one floating tone but diverge as the set grows — a single count cannot tell "delete leftmost" from "delete rightmost" ([McPL26]'s eq. (62) divergent tie).

Tone-value predicate #

Link faithfulness (FloatingForm.IsInsertedLink / IsDeletedLink) and the morpheme accessors (upperMorpheme? / lowerMorpheme? / morphemes) are tone-agnostic and live on FloatingForm; only the TRN-reading predicate is here.

@[reducible, inline]

The tone at index k has value t.

Equations
Instances For

    *FLOAT (Directional) #

    *FLOAT (paper, eq. 16) as a position-indexed block of scalar constraints: coordinate i flags whether underlying tone i is currently floating (= the i-th entry of floatIndicator). Splice forward for L→R (*FLOAT^→); the directional EVAL is recovered as the canonical lex order over this block ([Lam22d]). k is the underlying tone count f.upper.len, invariant under GEN, so it is a fixed literal per tableau.

    Equations
    Instances For

      *FLOAT^← (right-to-left): starFloatBlock laid out in reverse position order.

      Equations
      Instances For

        *FLOAT (count): the parallel/count variant — the total floating-tone count as a single scalar constraint (the degree collapse of starFloatBlock).

        Equations
        Instances For

          *TAUTDOCK #

          *TAUTDOCK (paper, eq. 15, after [Wol07]): one violation per GEN-inserted tautomorphemic surface link.

          Equations
          Instances For

            *CROWD (per-morpheme tone count) #

            The tone indices counting toward morpheme m's tonal mass: surviving underlying tones of m, plus tones surface-linked to TBUs of m.

            Equations
            Instances For
              def Tone.starCrowd {S : Type u_1} (threshold : := 2) :

              *CROWD (paper eq. 5): one violation per morpheme with more than threshold tones (default 2), counting its surviving underlying tones plus tones docked onto its TBUs from other morphemes.

              Equations
              Instances For

                *FALL (falling contours on multi-linked TBUs) #

                @[reducible, inline]
                abbrev Tone.IsFallingPair (t1 t2 : TRN) :

                A tone pair (t1, t2) (in tier order) is falling iff it is HM, HL, or ML (paper eq. 23).

                Equations
                Instances For
                  def Tone.HasFall :
                  List TRNProp

                  A tone sequence contains a falling adjacent pair.

                  Equations
                  Instances For
                    @[implicit_reducible]
                    instance Tone.decidableHasFall (ts : List TRN) :
                    Decidable (HasFall ts)
                    Equations

                    *FALL (paper eq. 23): one violation per syllable with a falling contour (HM, HL, ML).

                    Equations
                    Instances For

                      *M<L (M-then-L adjacency on the tier) #

                      *M<L (paper eq. 29): one violation per M tone immediately preceding an L on the tonal tier — adjacency measured over the surviving (non-deleted) tones in ulTier order (deletions skip positions).

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For

                        HAVETONE #

                        HAVETONE (paper, eq. 17): one violation per syllable not associated to any tone.

                        Equations
                        Instances For

                          Faithfulness — Generic over Tone Value #

                          MAX(T) (paper, eq. 7c): one violation per underlying tone of value t deleted by GEN.

                          Equations
                          Instances For

                            DEP(link)/T (paper, eq. 7a): one violation per surface link inserted by GEN whose linked tone has value t.

                            Equations
                            Instances For

                              MAX(link)/T (paper, eq. 7b): one violation per underlying link of value t deleted by GEN.

                              Equations
                              Instances For

                                INTEGRITY ([McCP95]; [AF26]): no input tone has multiple output correspondents — here, alive ulTier entries sharing tone value t and morpheme m. Spreading (one multi-linked entry) → 0; copying (n such entries) → n - 1 violations.

                                Equations
                                Instances For