Documentation

Linglib.Phonology.Prosody.Word

Prosodic words (ω) #

[Sel80] [NV86] [LP77] [Hay95a] [IM09] [McCP93] [Sel96] [IM03] [PS93] [Dol20]

A prosodic word ω is a node of the prosodic tree (Prosody.Tree), and well-formedness is a declarative property of that carrier rather than a separate inductive. IsWord carves out the well-formed ω-trees as the Strict-Layer core ([Sel96]): an ω-node whose daughters are only feet, recursive sub-words (ω-over-ω), or stray (unfooted) syllables — the inviolable Layeredness constraint (no φ/ι/AP inside an ω). The library's OT studies score raw Tree candidates, so theorems take IsWord as a hypothesis on the carrier rather than bundling a subtype.

Exhaustivity and No-Recursion are violable OT constraints, not part of IsWord: a stray σ (a free clitic) and an ω-over-ω (the extended prosodic word of [IM09]) are both admitted. They are scored on the carrier by parseInto/noRec and ranked by a grammar — that is where they belong. Headedness (that an ω dominates a foot, the minimal-word effect of [Sel96]) is the typical case but is not presupposed: footless languages have ω directly over σ (DeLisi 2015, per [Dol20]), and the OT recursion candidates here abstract the foot level. Prominence-head marking is likewise a refinement, not enforced.

Main definitions #

Main results #

Prosodic OT constraints over the Tree carrier #

The violable constraints scoring prosodic candidates are Constraints.Constraint Tree values ([PS93]); a grammar ranks them and scores with the OT engine (OptimalityTheory.Tableau.ofRanking). They are defined on the carrier Tree (which holds the ill-formed candidates IsWord rules out). List-recursion auxes are local wheres.

No-Recursion ([IM09]): parent–child pairs sharing a level (an element parsed into the same category twice).

Equations
Instances For
    def Prosody.noRec.go :
    Tree
    Equations
    Instances For

      Maximal and minimal projections #

      The projections of a level ([IM09]) are the same family of carrier folds as noRecnoRec looks at same-level parent–child pairs, the projections at the extremal same-level nodes. The maximal ℓ-projections are the topmost ℓ-nodes (no ℓ-ancestor), read off by an under-flag fold (cf. parseInto) that prunes a subtree once the first ℓ is hit; the minimal ℓ-projections are the bottommost ℓ-nodes (no ℓ-descendant). The asymmetry is intentional: maximality is context-relative (membership in maximalProjections ℓ root), whereas minimality is intrinsic to a node (IsMinimalProj), so only the latter carries a one-argument predicate. The intonational utterance υ is just the maximal ι-projection. List (not Finset) keeps the duplicate-position counts that Match-style correspondence ([Sel96]) reads.

      def Prosody.maximalProjections (p : ConstituentBool) (t : Tree) :
      List Tree

      The maximal projections of t selected by p: the topmost p-nodes (those with no p-ancestor), in tree order. A top-down under-flag fold (cf. parseInto) pruning a subtree once the first p-node is hit.

      Equations
      Instances For
        def Prosody.maximalProjections.go (p : ConstituentBool) (under : Bool) :
        TreeList Tree
        Equations
        Instances For
          def Prosody.maximalProjections.goList (p : ConstituentBool) (under : Bool) :
          List TreeList Tree
          Equations
          Instances For
            def Prosody.anyAtLevel (p : ConstituentBool) :
            TreeBool

            A p-node occurs somewhere in t (the root included).

            Equations
            Instances For
              def Prosody.anyAtLevel.go (p : ConstituentBool) :
              TreeBool
              Equations
              Instances For
                def Prosody.anyAtLevel.goList (p : ConstituentBool) :
                List TreeBool
                Equations
                Instances For
                  def Prosody.isMinimalProj (p : ConstituentBool) :
                  TreeBool

                  The intrinsic minimal-p test: a p-node no proper descendant of which is a p-node.

                  Equations
                  Instances For
                    def Prosody.minimalProjections (p : ConstituentBool) (t : Tree) :
                    List Tree

                    The minimal projections of t selected by p: the bottommost p-nodes (those with no p-descendant), in tree order.

                    Equations
                    Instances For
                      def Prosody.minimalProjections.go (p : ConstituentBool) :
                      TreeList Tree
                      Equations
                      Instances For
                        def Prosody.IsMinimalProj (p : ConstituentBool) (t : Tree) :

                        A minimal p-projection: a p-node none of whose proper descendants is a p-node — the intrinsic, context-free dual of (context-relative) maximality.

                        Equations
                        Instances For
                          def Prosody.noLevelRec (p : ConstituentBool) :
                          TreeBool

                          Transitive No-Recursion at : no ℓ-node properly dominates an ℓ-node — every ℓ-node is a minimal projection. This — not noRec — is what collapses the maximal and minimal ℓ-projections (noLevelRec_imp_max_eq_min): noRec t = 0 forbids only direct ℓ-over-ℓ, while ω(f(ω)) recurses through an intervening foot (noRec = 0, yet maximal ≠ minimal); the one-step noRec is the shadow this casts on the strictly-layered trees IsWord carves out.

                          Equations
                          Instances For
                            def Prosody.noLevelRec.go (p : ConstituentBool) :
                            TreeBool
                            Equations
                            Instances For
                              def Prosody.noLevelRec.goList (p : ConstituentBool) :
                              List TreeBool
                              Equations
                              Instances For
                                Properties #

                                Each where-aux goList is the matching List combinator over its go (flatMap/any/all), proved once below so every projection lemma is a single Branching.inductionOn over the carrier (the principle Tree already rides, Core/Order/Branching.lean) plus standard List reasoning.

                                theorem Prosody.mem_maximalProjections_level {p : ConstituentBool} {s t : Tree} (h : s maximalProjections p t) :
                                p (RoseTree.value s) = true

                                Every maximal p-projection is a p-node.

                                Minimality is intrinsic: a node returned as a minimal ℓ-projection of any tree is itself a minimal ℓ-projection (IsMinimalProj) — it does not depend on the ambient tree. The maximal/minimal asymmetry: a node is maximal only relative to an ambient tree (its ℓ-ancestors), but minimal in itself.

                                theorem Prosody.isMinimalProj_level {p : ConstituentBool} {s : Tree} (h : IsMinimalProj p s) :
                                p (RoseTree.value s) = true

                                A minimal p-projection is a p-node.

                                theorem Prosody.mem_minimalProjections_level {p : ConstituentBool} {s t : Tree} (h : s minimalProjections p t) :
                                p (RoseTree.value s) = true

                                Every minimal p-projection is a p-node.

                                No-Recursion collapses the projections. Under transitive No-Recursion at (noLevelRec: no ℓ-node properly dominates an ℓ-node), the topmost and bottommost ℓ-nodes coincide — every ℓ-node is at once maximal and minimal. The naive noRec t = 0 (no direct ℓ-over-ℓ) does not suffice — ω(f(ω)) has noRec = 0 yet maximal ≠ minimal — but on the strictly-layered words IsWord cuts out, the two conditions agree.

                                Parse-into-p ([IM03]): σ-leaves dominated by no p-node.

                                Equations
                                Instances For
                                  def Prosody.parseInto.go (p : ConstituentBool) (under : Bool) :
                                  Tree
                                  Equations
                                  Instances For
                                    def Prosody.parseInto.goList (p : ConstituentBool) (under : Bool) :
                                    List Tree
                                    Equations
                                    Instances For
                                      def Prosody.feet :
                                      TreeList (List Syllable.Weight)

                                      The feet of a prosodic tree: the σ-weight content of every f-node.

                                      Equations
                                      Instances For
                                        def Prosody.feet.go :
                                        TreeList (List Syllable.Weight)
                                        Equations
                                        Instances For
                                          def Prosody.feet.goList :
                                          List TreeList (List Syllable.Weight)
                                          Equations
                                          Instances For

                                            Syllables parsed into no foot — parseInto (·.isFt).

                                            Equations
                                            Instances For
                                              def Prosody.moraCount :
                                              Tree

                                              Total mora count: the sum of the tree's σ-weights.

                                              Equations
                                              Instances For

                                                The well-formed prosodic word ω #

                                                isWordTree is the structural Bool realization of the inviolable Layeredness core ([Sel96]); IsWord is the declarative predicate it backs, and Word the carrier subtype. Both checkers mirror the go/goList structural recursion of noRec, so they are decide-reducible — a winner can be certified IsWord by decide.

                                                def Prosody.isWordTree :
                                                TreeBool

                                                The structural Layeredness checker: an ω-node every daughter of which is a well-formed foot (isFootTree, in Foot), a recursive ω (the ω-over-ω arm), or a stray σ-leaf.

                                                Equations
                                                Instances For

                                                  A well-formed prosodic word: an ω-node dominating only feet, recursive ω's, and stray σ — never φ/ι. This is the inviolable Layeredness core. Headedness (a foot daughter — the minimal-word effect, [Sel96]) is the typical case but is not presupposed: footless languages have ω directly over σ (DeLisi 2015, per [Dol20]), and the OT recursion candidates abstract the foot level. Exhaustivity (a stray σ) and Nonrecursivity (ω-over-ω) are violable OT constraints, so both are admitted here.

                                                  Equations
                                                  Instances For
                                                    @[implicit_reducible]
                                                    instance Prosody.instDecidableIsWord (t : Tree) :
                                                    Decidable (IsWord t)
                                                    Equations
                                                    theorem Prosody.isWordTree.goList_all (cs : List Tree) :
                                                    goList cs = cs.all fun (c : Tree) => isFootTree c || go c || (RoseTree.value c).isSyl && (RoseTree.children c).isEmpty

                                                    isWordTree.goList as a List.all over children.

                                                    theorem Prosody.isWord_children {a : Constituent} {cs : List Tree} (hw : IsWord (RoseTree.node a cs)) (hr : noRec (RoseTree.node a cs) = 0) :
                                                    a.isOm = true ccs, isFootTree c = true (RoseTree.value c).isSyl = true RoseTree.children c = []

                                                    A non-recursive word is an ω over well-formed feet and stray σ-leaves — the structural content of IsWordnoRec = 0, used to read the grid off a word.

                                                    Word-size predicates #

                                                    def Prosody.MinimalWord (measure : List Syllable.Weight) (t : Tree) :

                                                    Minimal word ([McCP93]): contains a well-formed foot (PrWd ⊇ Ft).

                                                    Equations
                                                    Instances For
                                                      @[implicit_reducible]
                                                      instance Prosody.instDecidableMinimalWord {measure : List Syllable.Weight} {t : Tree} :
                                                      Decidable (MinimalWord measure t)
                                                      Equations
                                                      def Prosody.MaximalWord (measure : List Syllable.Weight) (t : Tree) :

                                                      Maximal word ([UMR21]): ≤ one well-formed foot, exhaustively parsed — the upper size bound.

                                                      Equations
                                                      Instances For
                                                        @[implicit_reducible]
                                                        instance Prosody.instDecidableMaximalWord {measure : List Syllable.Weight} {t : Tree} :
                                                        Decidable (MaximalWord measure t)
                                                        Equations
                                                        def Prosody.PerfectWord (measure : List Syllable.Weight) (t : Tree) :

                                                        The perfect prosodic word ([IM09]): ω coextensive with one well-formed foot.

                                                        Equations
                                                        Instances For
                                                          @[implicit_reducible]
                                                          instance Prosody.instDecidablePerfectWord {measure : List Syllable.Weight} {t : Tree} :
                                                          Decidable (PerfectWord measure t)
                                                          Equations
                                                          theorem Prosody.PerfectWord.minimal {measure : List Syllable.Weight} {t : Tree} (h : PerfectWord measure t) :
                                                          MinimalWord measure t

                                                          A perfect word is minimal.

                                                          theorem Prosody.PerfectWord.maximal {measure : List Syllable.Weight} {t : Tree} (h : PerfectWord measure t) :
                                                          MaximalWord measure t

                                                          A perfect word is maximal.

                                                          theorem Prosody.perfectWord_iff_minimal_and_maximal {measure : List Syllable.Weight} {t : Tree} :
                                                          PerfectWord measure t MinimalWord measure t MaximalWord measure t

                                                          The perfect word is exactly minimal-and-maximal.

                                                          theorem Prosody.MaximalWord.minimal {measure : List Syllable.Weight} {t : Tree} (hne : feet t []) (h : MaximalWord measure t) :
                                                          MinimalWord measure t

                                                          Maximality entails minimality for a footed word ([UMR21]).

                                                          Worked examples #