Documentation

Linglib.Features.Number.Decomposition

Number — the Harbour feature decomposition and its lattice grounding #

[Har14a] [Lin83]

Binary feature decomposition of the number values ([Har14a]):

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]), but with an asymmetry worth marking: number's filter is a theorem of the lattice semantics (the grounding sections below — atoms are minimal; [Har16a] ch. 9.5 notes the odd cooccurrence is contradictory for ±atomic "by the logic of the system"), whereas person's filter is a descriptive convention the same chapter rejects. See Features/ContainmentPair.lean.

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

Trial, unit augmented, and augmented arise from feature recursion (reapplying [±minimal] to subregions; Syntax/Minimalist/Phi/Recursion.lean). The approximative numbers require the additional feature [±additive] (§ on the additive feature below).

Main declarations #

The feature bundle #

Bivalent 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 cut by the containment filter (WellFormed): an atom is necessarily a minimal element of any lattice region (a theorem of the semantics — §8).

  • 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 Number.instDecidableEqFeatures.decEq (x✝ x✝¹ : Features) :
    Decidable (x✝ = x✝¹)
    Equations
    • Number.instDecidableEqFeatures.decEq { isAtomic := a, isMinimal := a_1 } { isAtomic := b, isMinimal := b_1 } = if h : a = b then h if h : a_1 = b_1 then h isTrue else isFalse else isFalse
    Instances For
      @[implicit_reducible]
      Equations
      def Number.instReprFeatures.repr :
      FeaturesStd.Format
      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        @[implicit_reducible]
        Equations

        Singular features: [+atomic, +minimal].

        Equations
        Instances For

          Dual features: [−atomic, +minimal].

          Equations
          Instances For

            Plural features: [−atomic, −minimal].

            Equations
            Instances For

              Features ↔ value bridge #

              Map a feature bundle to the number value it realizes.

              The three well-formed base bundles map to three of [Cor00]'s values. The remaining (trial, paucal, etc.) arise from feature recursion and [±additive], which require compositional machinery beyond the base feature pair.

              Equations
              Instances For

                Map a number value to its base feature bundle (partial).

                Only the three values 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

                  The ContainmentPairLike presentation #

                  The [±atomic, ±minimal] decomposition is carrier-equivalent to the containment pair: outer = minimal, inner = atomic. The containment [+atomic] → [+minimal] maps to [+inner] → [+outer], unifying the structure with person features — one edge of the φ-feature iso-web (phiKernelEquiv, Studies/Harbour2016.lean).

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

                    The three canonical number values land on the three well-formed cells.

                    @[reducible, inline]

                    Well-formedness: [+atomic] → [+minimal] — an atom is necessarily a minimal element. Inherited from ContainmentPair.WellFormed through the presentation; for number this filter is a theorem of the lattice semantics (§8), not a stipulation.

                    Equations
                    Instances For
                      theorem Number.no_fourth_base_number (a b c d : Features) :
                      a.WellFormedb.WellFormedc.WellFormedd.WellFormeda ba ca db cb dc dFalse

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

                      Verification #

                      theorem Number.illFormed_only :
                      ¬{ isAtomic := true, isMinimal := false }.WellFormed

                      The filtered combination [+atomic, −minimal] is the only one that violates containment.

                      theorem Number.card_wellFormed :
                      Fintype.card { nf : Features // nf.WellFormed } = 3

                      Exactly 3 well-formed feature combinations (= 3 base numbers) — the carrier count of the containment chain (ContainmentPair.card_wellFormed).

                      theorem Number.roundtrip_ofNumber_toNumber :
                      ([singularF, dualF, pluralF].all fun (f : Features) => f.toNumber.bind Features.ofNumber == some f) = true

                      Round-trip: ofNumbertoNumber = some for all well-formed features.

                      theorem Number.illFormed_toNumber_none :
                      { isAtomic := true, isMinimal := false }.toNumber = none

                      toNumber returns none for the filtered bundle.

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

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

                      Lattice-theoretic grounding #

                      Number features grounded in a join-semilattice of individuals.

                      [Lin83] models the domain of individuals as a join-semilattice ⟨D, ⊔⟩. Number categories correspond to the lattice predicates of Features/Number/Interp.lean:

                      The containment [+atomic] → [+minimal] is a theorem of lattice theory (Number.singular_subset_minimal), not a stipulation. On finite carriers the predicates are decidable (instances in Interp.lean), so every concrete classification below is kernel-checked by decide: domains are Finset (Fin n) powerset lattices with join = union. Minimality is domain-relative (minimalIn (· ∈ domain)), agreeing with the global Mereology.Atom when the domain is downward closed in D⁺.

                      def Number.minimalNonAtomIn {D : Type u_1} [SemilatticeSup D] (domain : DProp) :
                      DProp

                      The minimal non-atoms of domain: minimal among its non-minimal elements — the dual's region ([Har14a] [−atomic, +minimal]).

                      Equations
                      Instances For
                        theorem Number.not_minimalIn_of_minimalNonAtomIn {D : Type u_1} [SemilatticeSup D] {domain : DProp} {x : D} (h : minimalNonAtomIn domain x) :
                        ¬minimalIn domain x

                        A minimal non-atom is not domain-minimal.

                        def Number.RegionAdditive {D : Type u_1} [SemilatticeSup D] (Q : DProp) :

                        A region is join-complete: every element is [+additive] in it — Mereology.CUM restricted to the region ([Har14a] (11), complement completeness).

                        Equations
                        Instances For
                          @[implicit_reducible]
                          instance Number.instDecidableMinimalNonAtomInOfDecidablePred {D : Type u_1} [SemilatticeSup D] [Fintype D] [DecidableEq D] [DecidableLE D] {domain : DProp} [DecidablePred domain] (x : D) :
                          Decidable (minimalNonAtomIn domain x)
                          Equations
                          @[implicit_reducible]
                          instance Number.instDecidableRegionAdditiveOfDecidablePred {D : Type u_1} [SemilatticeSup D] [Fintype D] {Q : DProp} [DecidablePred Q] :
                          Decidable (RegionAdditive Q)
                          Equations
                          def Number.latticeToFeatures {D : Type u_1} [SemilatticeSup D] [Fintype D] [DecidableEq D] [DecidableLE D] (domain : DProp) [DecidablePred domain] (x : D) :

                          Classify a lattice element by position: domain-minimal → singular, minimal non-atom → dual, otherwise → plural.

                          Equations
                          Instances For
                            theorem Number.latticeToFeatures_wellFormed {D : Type u_1} [SemilatticeSup D] [Fintype D] [DecidableEq D] [DecidableLE D] (domain : DProp) [DecidablePred domain] (x : D) :

                            Every branch of latticeToFeatures produces a well-formed bundle: [+atomic] → [+minimal] holds by construction.

                            Powerset lattice examples #

                            def Number.ps3 (s : Finset (Fin 3)) :

                            The 3-atom powerset domain: nonempty subsets of Fin 3. Pairs are minimal non-atoms → dual; the triple is non-minimal → plural (the 2-atom domain has a single non-atom and cannot show the split).

                            Equations
                            Instances For

                              The additive feature #

                              [Har14a]

                              [±additive] is the third number feature, characterizing join-completeness within a lattice region (Number.additiveIn). 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 (Number.additive_subregion_is_cum). The link between number and aspect/telicity ([Har14a] §4.4) runs through exactly this connection: mass nouns satisfy [+additive] (cumulative), count nouns [−additive] (quantized).

                              theorem Number.ps3_nonAtoms_joinComplete :
                              RegionAdditive fun (s : Finset (Fin 3)) => 2 s.card

                              With 3 atoms the entire non-atomic region is join-complete: [±additive] is vacuous — a paucal/plural split needs a richer lattice.

                              theorem Number.ps5_paucal_not_joinComplete :
                              ¬RegionAdditive fun (s : Finset (Fin 5)) => 2 s.card s.card 3

                              The "paucal" region of the 5-atom powerset (2–3 atoms) is NOT join-complete: {0,1} ⊔ {2,3} has four atoms and escapes the region.

                              theorem Number.ps5_plural_joinComplete :
                              RegionAdditive fun (s : Finset (Fin 5)) => 4 s.card

                              The "plural" region (≥ 4 atoms) IS join-complete: joining two large sums stays large. Satisfies complement completeness ([Har14a] (11)).

                              theorem Number.ps5_additive_asymmetry :
                              (RegionAdditive fun (s : Finset (Fin 5)) => 4 s.card) ¬RegionAdditive fun (s : Finset (Fin 5)) => 2 s.card s.card 3

                              The paucal/plural asymmetry: the [+additive] region is join-complete, the [−additive] region is not — the formal content of the approximative number distinction ([Har14a] §3).

                              DUAL as predicate modifier #

                              [JBG+25]

                              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" (minimalNonAtomIn). The bridge is therefore a one-line composition: restrict 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 Studies/JereticEtAl2025.lean.

                              def Number.dualPredOnLattice {D : Type u_1} [SemilatticeSup D] (domain P : DProp) (x : D) :

                              ⟦DUAL⟧ as a predicate modifier on a join-semilattice domain ([JBG+25] eq 39): P x, and x has exactly two atomic parts — i.e. is a minimal non-atom of the domain.

                              Equations
                              Instances For
                                @[implicit_reducible]
                                instance Number.instDecidableDualPredOnLatticeOfFintypeOfDecidableEqOfDecidableLEOfDecidablePred {D : Type u_1} [SemilatticeSup D] {domain P : DProp} [Fintype D] [DecidableEq D] [DecidableLE D] [DecidablePred domain] [DecidablePred P] (x : D) :
                                Decidable (dualPredOnLattice domain P x)
                                Equations
                                theorem Number.dualPredOnLattice_refines {D : Type u_1} [SemilatticeSup D] {domain P : DProp} {x : D} (h : dualPredOnLattice domain P x) :
                                P x

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

                                theorem Number.dualPredOnLattice_eq_via_features {D : Type u_1} [SemilatticeSup D] [Fintype D] [DecidableEq D] [DecidableLE D] (domain : DProp) [DecidablePred domain] (P : DProp) (x : D) :
                                dualPredOnLattice domain P x P x latticeToFeatures domain x = dualF

                                Bridge: the dual lattice predicate IS the condition latticeToFeatures uses to assign dualF, so dualPredOnLattice factors as P x ∧ latticeToFeatures … x = dualF. DUAL is not a separate primitive but the same condition that classifies a lattice element as [−atomic, +minimal] ([JBG+25] eq 39).

                                theorem Number.ps3_dual_pairs_satisfy :
                                dualPredOnLattice ps3 (fun (x : Finset (Fin 3)) => True) {0, 1} dualPredOnLattice ps3 (fun (x : Finset (Fin 3)) => True) {0, 2} dualPredOnLattice ps3 (fun (x : Finset (Fin 3)) => True) {1, 2}

                                On the 3-atom powerset, the dual reading of the trivial property selects the three pairs and excludes the triple.

                                theorem Number.ps3_dual_triple_excluded :
                                ¬dualPredOnLattice ps3 (fun (x : Finset (Fin 3)) => True) {0, 1, 2}

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