Documentation

Linglib.Features.Number

Number #

@cite{corbett-2000} @cite{harbour-2014}

Two components of the number API:

§ 1–3: Number Categories (@cite{corbett-2000}). Eight analytical number values organized along two orthogonal dimensions:

§ 4–6: Number Features (@cite{harbour-2014}). Binary feature decomposition:

These features form a containment hierarchy: [+atomic] → [+minimal]. An atom is necessarily a minimal element of any lattice region it belongs to.

This containment parallels person features: [+author] → [+participant].

The three well-formed combinations yield the three basic number values:

Trial, unit augmented, and augmented arise from feature recursion (reapplying [±minimal] to subregions), which is theory-layer material. The approximative numbers (paucal, greater paucal, greater plural) require the additional feature [±additive], also theory-layer.

The full typological machinery (number systems, animacy profiles, agreement hierarchy, language data) remains in Phenomena/Agreement/Studies/Corbett2000.lean.

Number categories in @cite{corbett-2000}'s inventory.

Two orthogonal classifications:

  • System membership: general is outside the number system; all others are within it.
  • Determinacy: values whose cardinality boundary is fixed (singular=1, dual=2, trial=3) vs those whose boundary varies by context (paucal ≈ 2–6, greater plural ≈ all/abundance).
Instances For
    @[implicit_reducible]
    Equations
    Equations
    • One or more equations did not get rendered due to their size.
    Instances For

      A number category is determinate iff its cardinality boundary is fixed. Minimal and unit augmented are indeterminate: they depend on the composition of the group, not a fixed cardinality.

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

        A number category participates in the number system (is not general).

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

          Exact referent-set cardinality for determinate number categories.

          Singular denotes exactly 1 individual (atom), dual exactly 2 (pair), trial exactly 3 (triple). All other categories — plural, paucal, greaterPlural, minimal, augmented — have indeterminate or context-dependent cardinality and return none.

          Used by CoordinateResolution.canonicalResolve to derive resolution from cardinality addition: |A ⊔ B| = |A| + |B| for disjoint sets.

          Equations
          Instances For

            Whether a category belongs to the [±minimal] number system (without [±atomic]). In such systems, minimal = atoms ∪ minimal non-atoms, and augmented = everything else. Returns none for categories outside the MIN/AUG system.

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

              Map UD.Number to analytical number categories (partial).

              Seven core categories round-trip cleanly. Three UD values have no analytical equivalent:

              • Inv (inverse number): marks the unexpected number for a given noun — plural for some nouns, singular for others. Not a fixed cardinality.
              • Coll (collective): denotes a group-as-unit (Russian листва 'foliage'), distinct from general number which is non-committal to cardinality.
              • Count (count form): a special form after numerals (Hungarian, Welsh), not equivalent to singular (exactly one).
              Equations
              Instances For

                Round-trip: fromUD ∘ toUD = id for all in-system categories.

                Binary number features: [±atomic, ±minimal].

                These two features suffice for the three basic number distinctions:

                • singular: [+atomic, +minimal]
                • dual: [−atomic, +minimal]
                • plural: [−atomic, −minimal]

                The fourth combination [+atomic, −minimal] is ill-formed: an atom is necessarily a minimal element of any lattice region.

                • isAtomic : Bool

                  [+atomic]: referent is an atom (singleton individual).

                • isMinimal : Bool

                  [+minimal]: referent is a minimal element of the relevant lattice region.

                Instances For
                  def Features.Number.instDecidableEqFeatures.decEq (x✝ x✝¹ : Features) :
                  Decidable (x✝ = x✝¹)
                  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

                      Well-formedness: [+atomic] → [+minimal]. An atom (singleton) is necessarily a minimal element.

                      Equations
                      Instances For

                        Singular features: [+atomic, +minimal].

                        Equations
                        Instances For

                          Dual features: [−atomic, +minimal].

                          Equations
                          Instances For

                            Plural features: [−atomic, −minimal].

                            Equations
                            Instances For

                              Map number features to Corbett's analytical number categories.

                              The three well-formed base feature bundles map to three of @cite{corbett-2000}'s eight categories. The remaining (trial, paucal, etc.) arise from feature recursion and [±additive], which require compositional machinery beyond the base feature pair.

                              Equations
                              Instances For

                                Map Corbett's number categories to base features (partial).

                                Only the three categories derivable from the base [±atomic, ±minimal] system have feature equivalents. Trial, paucal, minimal, augmented, and the rest require feature recursion, [±additive], or different feature activation patterns.

                                Equations
                                Instances For
                                  @[implicit_reducible]

                                  Number features are a PhiFeatures instance: outer = isMinimal, inner = isAtomic.

                                  The containment [+atomic] → [+minimal] maps to PrivativePair's [+inner] → [+outer], unifying the structure with person features. All shared properties are inherited by construction.

                                  Equations
                                  • One or more equations did not get rendered due to their size.
                                  @[simp]

                                  The three canonical number values map to the three PrivativePair cells.

                                  theorem Features.Number.no_fourth_base_number (a b c d : Features) :
                                  a.wellFormed = trueb.wellFormed = truec.wellFormed = trued.wellFormed = truea ba ca db cb dc dFalse

                                  No 4-way base number distinction (inherited from PhiFeatures).

                                  theorem Features.Number.illFormed_only :
                                  { isAtomic := true, isMinimal := false }.wellFormed = false

                                  The ill-formed combination [+atomic, −minimal] is the only combination that violates well-formedness.

                                  theorem Features.Number.exactly_three_wellFormed :
                                  (List.filter Features.wellFormed [{ isAtomic := true, isMinimal := true }, { isAtomic := true, isMinimal := false }, { isAtomic := false, isMinimal := true }, { isAtomic := false, isMinimal := false }]).length = 3

                                  There are exactly 3 well-formed feature combinations (= 3 base numbers).

                                  Round-trip: fromCategory ∘ toCategory = some for all well-formed features.

                                  theorem Features.Number.illFormed_toCategory_none :
                                  { isAtomic := true, isMinimal := false }.toCategory = none

                                  toCategory returns none for the ill-formed bundle.

                                  theorem Features.Number.atomic_implies_minimal (f : Features) (hw : f.wellFormed = true) :
                                  f.isAtomic = truef.isMinimal = true

                                  Containment: [+atomic] → [+minimal] for all well-formed features.

                                  Lattice-Theoretic Grounding #

                                  Number features grounded in a join-semilattice of individuals.

                                  @cite{link-1983} models the domain of individuals as a join-semilattice ⟨D, ⊔⟩. Number categories correspond to lattice predicates:

                                  The containment [+atomic] → [+minimal] is a theorem of lattice theory, not a stipulation: atoms have no proper parts, so they are trivially minimal in any sublattice region (Mereology.Atom).

                                  The decidable functions isAtom and isMinimalNonAtom are parameterized by a join operation and a finite domain, making the lattice-theoretic grounding computationally verifiable. They are the Bool counterparts of Mereology.Atom and minimality-in-region.

                                  def Features.Number.bitmaskJoin (a b : ) :

                                  Powerset lattice join (bitwise OR). Atoms are powers of 2; sums are bitwise OR of their atoms. Used across §§8–10 and by CoordinateResolution for lattice verification.

                                  Equations
                                  Instances For
                                    def Features.Number.isAtom {D : Type} [DecidableEq D] (join : DDD) (domain : List D) (x : D) :
                                    Bool

                                    An element is an atom in a domain under the join-induced ordering: x ∈ domain and no element other than x is below it. Decidable counterpart of Mereology.Atom (∀ y, y ≤ x → y = x), parameterized by a concrete join operation and finite domain.

                                    Equations
                                    Instances For
                                      def Features.Number.isMinimalNonAtom {D : Type} [DecidableEq D] (join : DDD) (domain : List D) (x : D) :
                                      Bool

                                      An element is a minimal non-atom: not an atom, and no non-atom in the domain is strictly below it in the join-induced ordering. For number: minimal non-atoms are duals (pairs of exactly 2 atoms). Non-minimal non-atoms are plurals (groups of 3+).

                                      Equations
                                      • One or more equations did not get rendered due to their size.
                                      Instances For
                                        def Features.Number.latticeToFeatures {D : Type} [DecidableEq D] (join : DDD) (domain : List D) (x : D) :

                                        Convert lattice membership to number features using join structure. Atoms → singular, minimal non-atoms → dual, others → plural.

                                        Equations
                                        • One or more equations did not get rendered due to their size.
                                        Instances For
                                          theorem Features.Number.latticeToFeatures_wellFormed {D : Type} [DecidableEq D] (join : DDD) (domain : List D) (x : D) :
                                          (latticeToFeatures join domain x).wellFormed = true

                                          Containment follows from lattice structure: atoms always get [+minimal], so [+atomic] → [+minimal] holds by construction. Every branch of latticeToFeatures produces a well-formed bundle.

                                          Powerset lattice with 3 atoms: {0}=1, {1}=2, {2}=4. Pairs (3,5,6) are minimal non-atoms → dual. Triple (7) is non-minimal non-atom → plural. This demonstrates that isMinimalNonAtom correctly distinguishes duals from plurals in a non-trivial lattice (the 2-atom domain above has only one non-atom and cannot show this).

                                          Equations
                                          Instances For

                                            The Additive Feature #

                                            @cite{harbour-2014}

                                            [±additive] is the third number feature, characterizing join-completeness within a lattice region. Applied to the non-atomic region, it separates:

                                            The boundary is fixed by sociosemantic convention, subject to:

                                            Connection to CUM: [+additive] IS cumulativity restricted to a subregion. The link between number and aspect/telicity (@cite{harbour-2014} §4.4) runs through exactly this connection: mass nouns satisfy [+additive] (cumulative), count nouns satisfy [−additive] (quantized).

                                            def Features.Number.isJoinCompleteIn {D : Type} [DecidableEq D] (join : DDD) (region : List D) (x : D) :
                                            Bool

                                            An element is join-complete in a region under a given join operation. @cite{harbour-2014} (10): +additive ⟺ x ∈ Q ∧ ∀y ∈ Q, x ⊔ y ∈ Q.

                                            Equations
                                            Instances For
                                              def Features.Number.isRegionJoinComplete {D : Type} [DecidableEq D] (join : DDD) (region : List D) :
                                              Bool

                                              A region is globally join-complete: every element is [+additive]. Decidable counterpart of Mereology.CUM restricted to the region: CUM(Q) ⇔ ∀x,y ∈ Q, x ⊔ y ∈ Q.

                                              Equations
                                              Instances For

                                                Powerset Lattice Examples #

                                                Paucal vs plural on a powerset lattice (join = bitwise OR). Atoms encoded as powers of 2; sums as bitwise OR of their atoms.

                                                With 3 atoms, the non-atomic region is entirely join-complete, so [±additive] draws no distinction — paucal requires a richer lattice.

                                                With 5 atoms, the "paucal" region (2–3 atoms) is NOT join-complete: two small sums can join to exceed "a few." The "plural" region (≥ 4 atoms) IS join-complete, satisfying complement completeness.

                                                With 3 atoms, the entire non-atomic region is join-complete. [±additive] is vacuous — no paucal/plural split possible.

                                                The paucal region is NOT join-complete: {0,1}=3 ⊔ {2,3}=12 = {0,1,2,3}=15 has 4 atoms and escapes the region.

                                                The plural region IS join-complete: joining two large sums stays large. Satisfies complement completeness (@cite{harbour-2014} (11)).

                                                The paucal/plural asymmetry: the [+additive] region is join-complete, the [−additive] region is not. This is the formal content of the approximative number distinction (@cite{harbour-2014} §3).

                                                DUAL as predicate modifier #

                                                @cite{jeretic-bassi-gonzalez-yatsushiro-meyer-sauerland-2025}

                                                The paper proposes (eq 39 in §4.2.1, derived from Harbour features in §8 eq 98b) that the core concept DUAL has a predicate-modification semantics:

                                                ⟦DUAL⟧ = λP.λx. P(x) ∧ |{y : atom(y) ∧ y ⊑ x}| = 2

                                                In a join-semilattice, "exactly 2 atomic parts below x" coincides with "x is a minimal non-atom" — already formalized as isMinimalNonAtom. The bridge is therefore a one-line composition: filter P by the dual lattice predicate.

                                                This connects the Harbour feature bundle dualF = ⟨isAtomic := false, isMinimal := true⟩ to the predicate modifier required by the paper's Indirect Alternative analysis: les deux lexicalizes the predicate modifier dualPredOnLattice _ _ verres ('cup'), which is what blocks tous les NP.dual. See Phenomena/Presupposition/Studies/JereticEtAl2025.lean.

                                                def Features.Number.dualPredOnLattice {D : Type} [DecidableEq D] (join : DDD) (domain : List D) (P : DBool) (x : D) :
                                                Bool

                                                ⟦DUAL⟧ as a predicate modifier on a join-semilattice domain (@cite{jeretic-bassi-gonzalez-yatsushiro-meyer-sauerland-2025} eq 39).

                                                Given a property P over individuals and an element x, dualPredOnLattice holds of x iff P x and x has exactly 2 atomic parts. The latter is witnessed by isMinimalNonAtom, since in a join-semilattice the minimal non-atoms are precisely the joins of two atoms.

                                                Equations
                                                Instances For
                                                  theorem Features.Number.dualPredOnLattice_refines {D : Type} [DecidableEq D] (join : DDD) (domain : List D) (P : DBool) (x : D) :
                                                  dualPredOnLattice join domain P x = trueP x = true

                                                  dualPredOnLattice P strictly refines P: the dual reading of P is a subset of P.

                                                  theorem Features.Number.dualPredOnLattice_iff {D : Type} [DecidableEq D] (join : DDD) (domain : List D) (P : DBool) (x : D) :
                                                  dualPredOnLattice join domain P x = true P x = true isMinimalNonAtom join domain x = true

                                                  The dual reading of a property holds of x iff P x and x is a minimal non-atom in the domain.

                                                  theorem Features.Number.not_atom_of_isMinimalNonAtom {D : Type} [DecidableEq D] (join : DDD) (domain : List D) (x : D) (h : isMinimalNonAtom join domain x = true) :
                                                  isAtom join domain x = false

                                                  An element classified as a minimal non-atom is, by construction, not an atom. This is a structural fact about isMinimalNonAtom: it filters to the non-atom region of the domain before testing minimality.

                                                  theorem Features.Number.dualPredOnLattice_eq_via_features {D : Type} [DecidableEq D] (join : DDD) (domain : List D) (P : DBool) (x : D) :
                                                  dualPredOnLattice join domain P x = true P x = true latticeToFeatures join domain x = dualF

                                                  Bridge: the lattice predicate isMinimalNonAtom IS the condition latticeToFeatures uses to assign dualF. So dualPredOnLattice factors as P x ∧ latticeToFeatures … x = dualF.

                                                  This grounds the paper's predicate-modifier semantics (@cite{jeretic-bassi-gonzalez-yatsushiro-meyer-sauerland-2025} eq 39) in the existing Harbour feature decomposition (Number.lean §§4-5): DUAL is not a separate primitive but the same conditions used to classify a lattice element as [−atomic, +minimal].

                                                  theorem Features.Number.ps3_dual_pairs_satisfy :
                                                  dualPredOnLattice bitmaskJoin ps3Domain (fun (x : ) => true) 3 = true dualPredOnLattice bitmaskJoin ps3Domain (fun (x : ) => true) 5 = true dualPredOnLattice bitmaskJoin ps3Domain (fun (x : ) => true) 6 = true

                                                  On the 3-atom powerset, the dual reading of "is a non-atom" selects the three pairs (3, 5, 6) and excludes the triple (7).

                                                  Triples (≥3 atomic parts) fail the dual predicate.

                                                  Number opposition stages (@cite{cysouw-2009}, Fig 10.8). A coarsening over the eight @cite{corbett-2000} number values into a four-step hierarchy of typological "richness", from no number marking (N₁) to full number marking with restricted groups (N₃/N₄).

                                                  Used by both @cite{cysouw-2009} (paradigmatic person-marking) and @cite{corbett-2000} (NumberSystem.toNumberStage bridge in Phenomena/Agreement/Studies/Corbett2000.lean).

                                                  • N1 : NumberStage

                                                    Undifferentiated number marking (singular = group unmarked).

                                                  • N2 : NumberStage

                                                    Singular vs group (basic number opposition).

                                                  • N3 : NumberStage

                                                    Restricted group (dual/trial) distinguished from unrestricted.

                                                  • N4 : NumberStage

                                                    Small group (paucal) additionally distinguished.

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