Documentation

Linglib.Phonology.Tone.Plateauing

Unbounded tonal plateauing #

[HK10]'s plateauing rule for Luganda: every tone-bearing unit between two H-toned units surfaces H. Formalized over the string rendering of [Jar16]: a word over TBU records each timing unit's association state (H associated to a H tone, O unassociated), and utp — a Tone.Surfacing process — rewrites it pointwise by its surfacing predicate. What surfaces is the representation: utp.Surfaces w i is by definition H-linkedness of timing node i in the output representation plateauAR w (the OCP-merged input, hull-closed — fusion then spreading); the string reading is the derived utp.surfaces_def. The map is utp.map, the surfacing set plateau.

The map is the flagship unbounded circumambient process: whether a position changes depends on unboundedly distant material on both sides (utp.isUnboundedCircumambient), and in the strong witness form utp.requiresBothSides — perturbing either far side alone reverts the change — which feeds the weak-determinism exclusion theorems of Studies/Jardine2016Tone (bimachine rendering) and Studies/Yolyan2025 (BMRS rendering).

Main definitions #

Main results #

The tone-bearing-unit alphabet #

A tone-bearing unit's association state: H is a TBU associated to a H tone, O an unspecified TBU ([Jar16]'s Ø).

Instances For
    @[implicit_reducible]
    Equations
    def Tone.Plateauing.instReprTBU.repr :
    TBUStd.Format
    Equations
    Instances For
      @[implicit_reducible]
      Equations

      The output representation #

      The string rendering embeds into autosegmental representations, and plateauing on representations is OCP-fusion followed by hull-closure of the association lines ([HK10]'s rule as an operation on structures). What surfaces is the representation: utp.Surfaces is by definition H-linkedness in the output representation plateauAR w; the string-level take/drop reading is the derived characterization utp.surfaces_def.

      A H-toned TBU is one H melody node linked to its timing unit; a toneless TBU a bare timing unit.

      Equations
      Instances For
        theorem Tone.Plateauing.linearize_realize_toAR (w : List TBU) :
        (Autosegmental.realize toAR w).linearize = List.map (fun (a : TBU) => ((), if a = TBU.H then [TRN.H] else [])) w
        theorem Tone.Plateauing.upper_realize_toAR (v : List TBU) :
        (Autosegmental.realize toAR v).upper.toList = List.replicate (List.count TBU.H v) TRN.H
        theorem Tone.Plateauing.lower_realize_toAR (v : List TBU) :
        (Autosegmental.realize toAR v).lower.toList = List.replicate v.length ()

        The lower tier of the realization is the bare timing tier.

        A timing node of the input representation is linked iff its TBU is H-toned.

        The melodic tier of the merged representation: one fused H if any, else empty.

        theorem Tone.Plateauing.lower_realizeMerged_toAR (v : List TBU) :
        (Autosegmental.realizeMerged toAR v).lower.toList = List.replicate v.length ()

        The timing tier survives merging: the bare tier of the input's length.

        With any H present, the fused melody node is the H at index 0.

        The output representation: fuse, then spread — the merged input, hull-closed.

        Equations
        Instances For
          theorem Tone.Plateauing.surfacesWith_plateauAR {w : List TBU} {i : } :
          (plateauAR w).SurfacesWith TRN.H i TBU.H List.take (i + 1) w TBU.H List.drop i w

          What surfaces is the representation: i is H-linked in plateauAR w iff some H-toned TBU lies at or before i and some at or after it — the string-level reading.

          The plateauing process #

          Unbounded tonal plateauing as a surfacing process: a TBU surfaces the marked tone H iff its timing node is H-linked in the output representation.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            theorem Tone.Plateauing.utp.surfaces_def {w : List TBU} {i : } :
            utp.Surfaces w i TBU.H List.take (i + 1) w TBU.H List.drop i w

            The string-level reading of surfacing: the windowed form, now derived.

            theorem Tone.Plateauing.utp.surfaces_iff {w : List TBU} {i : } :
            utp.Surfaces w i (∃ ji, w[j]? = some TBU.H) ji, w[j]? = some TBU.H

            Positionwise reading of surfacing: a H at some j ≤ i and a H at some j ≥ i.

            theorem Tone.Surfacing.Surfaces.of_le_of_le {w : List Plateauing.TBU} {i j k : } (hi : Plateauing.utp.Surfaces w i) (hk : Plateauing.utp.Surfaces w k) (hij : i j) (hjk : j k) :

            The surfacing set is convex: the windows only widen.

            theorem Tone.Plateauing.utp.surfaces_reverse {w : List TBU} {i : } (hi : i < w.length) :
            utp.Surfaces w.reverse i utp.Surfaces w (w.length - 1 - i)

            Reversal symmetry: under reverse the two windows swap.

            theorem Tone.Plateauing.utp.surfaces_split {w : List TBU} {i : } {a : TBU} (h : w[i]? = some a) :
            utp.Surfaces w i a = TBU.H TBU.H List.take i w TBU.H List.drop (i + 1) w

            TBU i surfaces iff it is itself a H or is strictly flanked.

            theorem Tone.Plateauing.utp.map_getElem? {w : List TBU} {i : } :
            (utp.map w)[i]? = Option.map (fun (x : TBU) => if utp.Surfaces w i then TBU.H else TBU.O) w[i]?
            theorem Tone.Plateauing.utp.map_getElem?_H_iff {w : List TBU} {j : } :
            (utp.map w)[j]? = some TBU.H utp.Surfaces w j
            theorem Tone.Plateauing.utp.map_getElem?_O_iff {w : List TBU} {j : } :
            (utp.map w)[j]? = some TBU.O j < w.length ¬utp.Surfaces w j
            theorem Tone.Plateauing.utp.map_reverse {w : List TBU} :
            utp.map w.reverse = (utp.map w).reverse

            Plateauing is symmetric under string reversal.

            The plateau set #

            def Tone.Plateauing.plateau (w : List TBU) :
            Finset

            The plateau of w: the set of positions that surface H.

            Equations
            Instances For
              @[simp]
              theorem Tone.Plateauing.mem_plateau {w : List TBU} {j : } :
              j plateau w utp.Surfaces w j
              @[simp]
              theorem Tone.Plateauing.plateau_nonempty {w : List TBU} :
              (plateau w).Nonempty TBU.H w
              theorem Tone.Plateauing.utp_eq_plateau_indicator {w : List TBU} :
              utp.map w = List.map (fun (i : ) => if i plateau w then TBU.H else TBU.O) (List.range w.length)

              utp.map writes the indicator word of its plateau.

              theorem Tone.Plateauing.plateau_eq_Icc_of {w : List TBU} {lo hi : } (hlo : w[lo]? = some TBU.H) (hhi : w[hi]? = some TBU.H) (hb : ∀ (j : ), w[j]? = some TBU.Hlo j j hi) :
              plateau w = Finset.Icc lo hi

              Sandwich characterization: a word with Hs at lo and hi and none outside [lo, hi] has plateau exactly Finset.Icc lo hi.

              theorem Tone.Plateauing.plateau_eq_Icc {w : List TBU} (hne : (plateau w).Nonempty) :
              plateau w = Finset.Icc ((plateau w).min' hne) ((plateau w).max' hne)

              The plateau is an interval, from the first trigger to the last.

              Closure laws #

              Plateauing is a closure operator in the pointwise H-order: extensive (utp.map_getElem?_H_of_getElem?_H), monotone (utp.map_mono), idempotent (utp.map_map). The engine is convexity: the output's Hs are the plateau, an interval, so plateauing the output surfaces nothing new (utp.surfaces_map).

              theorem Tone.Plateauing.utp.map_getElem?_H_of_getElem?_H {w : List TBU} {i : } (h : w[i]? = some TBU.H) :
              (utp.map w)[i]? = some TBU.H

              Extensivity: every H survives plateauing.

              theorem Tone.Surfacing.Surfaces.mono {w : List Plateauing.TBU} {i : } {w' : List Plateauing.TBU} (hw : ∀ (j : ), w[j]? = some Plateauing.TBU.Hw'[j]? = some Plateauing.TBU.H) (h : Plateauing.utp.Surfaces w i) :

              Surfacing is monotone in the word's H-set.

              theorem Tone.Plateauing.utp.map_mono {w w' : List TBU} (hw : ∀ (j : ), w[j]? = some TBU.Hw'[j]? = some TBU.H) (j : ) (h : (utp.map w)[j]? = some TBU.H) :
              (utp.map w')[j]? = some TBU.H

              Monotonicity: pointwise more Hs in, pointwise more Hs out.

              theorem Tone.Plateauing.utp.H_mem_map {w : List TBU} :
              TBU.H utp.map w TBU.H w

              Plateauing preserves the presence of a trigger in both directions.

              theorem Tone.Plateauing.utp.surfaces_map {w : List TBU} {i : } :
              utp.Surfaces (utp.map w) i utp.Surfaces w i

              Surfacing is invariant under plateauing: the output's Hs are the plateau, whose convexity flanks no new positions.

              @[simp]
              @[simp]
              theorem Tone.Plateauing.utp.map_map {w : List TBU} :
              utp.map (utp.map w) = utp.map w

              Idempotence: a plateau is already closed.

              The plateauing rule #

              The rule schemata as theorems about utp rather than clauses of its definition.

              theorem Tone.Plateauing.utp.map_toneless (n : ) :
              utp.map (List.replicate n TBU.O) = List.replicate n TBU.O

              A toneless word is unchanged.

              theorem Tone.Plateauing.utp.map_single (m n : ) :
              utp.map (List.replicate m TBU.O ++ TBU.H :: List.replicate n TBU.O) = List.replicate m TBU.O ++ TBU.H :: List.replicate n TBU.O

              A word with a single H is unchanged — one H cannot trigger a plateau.

              theorem Tone.Plateauing.utp.map_plateau (m p : ) (w : List TBU) :
              utp.map (List.replicate m TBU.O ++ TBU.H :: (w ++ TBU.H :: List.replicate p TBU.O)) = List.replicate m TBU.O ++ (List.replicate (w.length + 2) TBU.H ++ List.replicate p TBU.O)

              Everything between the outermost Hs surfaces H; the medial material w is arbitrary.

              The commuting square #

              The string map linearizes the representational operation: realizing the output string gives back exactly the output representation. utp.Surfaces reads plateauAR by definition; the square closes the loop at the level of whole representations.

              The commuting square: the merged representation of the output string is the output representation — fusion-plus-spreading followed by linearization equals utp.map followed by realization.

              Unbounded circumambience #

              Whether the target surfaces is controlled by unboundedly distant flanks: instantiate the flank-witness template with 2d+2 toneless TBUs between the flanks.

              UTP requires both sides ([HL13]): its trigger is the two-sided window conjunction, so deleting either flanking H reverts the plateau target.

              UTP is an unbounded circumambient process: whether a position changes depends on unboundedly distant material on both sides.