Documentation

Linglib.Core.Logic.PolarizedIndividuals

Polarized Individuals and the Birkhoff Representation @cite{elliott-2025} #

@cite{van-benthem-1984}

Entity–polarity pairs, trivalent functions, and the Birkhoff representation theorem for conservative GQs.

Overview #

@cite{elliott-2025} argues that determiners denote sets of polarized individuals — entity–polarity pairs (e, ±) that encode whether an entity witnesses the restrictor ∩ scope (positive) or the restrictor ∖ scope (negative). The conservative GQ lattice (ConsGQ, §12 of Core.Logic.Quantification) is the algebraic setting.

The module is organized in five sections:

  1. Trivalent values (Tri): three-valued type {pos, neg, blank} encoding an entity's status relative to a quantifier.

  2. Encoding/decoding (triFunction, triSupport, triPositive): round-trip between (R, S) predicate pairs and trivalent functions α → Tri. This gives the concrete representation of the polarized domain D_e^± from Elliott §4.3.

  3. Birkhoff representation (consGQOrderIso): the order-isomorphism ConsGQ α ≃o ((α → Tri) → Prop), using mathlib's Equiv.toOrderIso. This is the concrete Birkhoff representation: conservative GQs are exactly predicates on trivalent functions. Conservativity is a structural consequence of the encoding — predToGQ_conservative shows any predicate on trivalent functions yields a conservative GQ.

  4. Entity–polarity pairs (PolInd α = α × Bool): the compositionally useful type. A polarized individual (e, p) maps to the GQ λ R S => R(e) ∧ (S(e) ↔ p) via polarized functional application. Under the Birkhoff representation, each PolInd corresponds to an atomic predicate checking a single entity's polarity.

  5. Boolean algebra structure: ConsGQ α is a Boolean algebra.

Trivalent value: the polarity of an entity relative to a quantifier.

  • pos: entity is in restrictor ∩ scope
  • neg: entity is in restrictor ∖ scope
  • blank: entity is irrelevant (not constrained by the quantifier) @cite{elliott-2025}, §4.3.
Instances For
    @[implicit_reducible]
    Equations
    def Core.Quantification.instReprTri.repr :
    TriStd.Format
    Equations
    • One or more equations did not get rendered due to their size.
    Instances For

      Whether a trivalent value is non-blank (= in the restrictor).

      Equations
      Instances For

        Whether a trivalent value is positive (= in restrictor ∩ scope).

        Equations
        Instances For
          @[implicit_reducible]
          Equations
          • One or more equations did not get rendered due to their size.
          @[implicit_reducible]
          Equations
          • One or more equations did not get rendered due to their size.
          noncomputable def Core.Quantification.triFunction {α : Type u_1} (R S : αProp) :
          αTri

          Encode a (restrictor, scope) pair as a trivalent function. pos = R ∩ S, neg = R ∖ S, blank = outside R. Noncomputable: uses classical decidability of the input predicates.

          Equations
          Instances For
            def Core.Quantification.triSupport {α : Type u_1} (f : αTri) :
            αProp

            Decode the restrictor from a trivalent function.

            Equations
            Instances For
              def Core.Quantification.triPositive {α : Type u_1} (f : αTri) :
              αProp

              Decode the positive part (R ∩ S) from a trivalent function.

              Equations
              Instances For
                @[simp]
                theorem Core.Quantification.triSupport_triFunction {α : Type u_1} (R S : αProp) :
                @[simp]
                theorem Core.Quantification.triPositive_triFunction {α : Type u_1} (R S : αProp) :
                triPositive (triFunction R S) = fun (e : α) => R e S e
                @[simp]
                noncomputable def Core.Quantification.predToGQ {α : Type u_1} (P : (αTri)Prop) :
                GQ α

                Map a predicate on trivalent functions to a GQ. @cite{elliott-2025}, §4.3.2, equation (44).

                Equations
                Instances For
                  def Core.Quantification.gqToPred {α : Type u_1} (Q : GQ α) :
                  (αTri)Prop

                  Map a GQ to a predicate on trivalent functions. @cite{elliott-2025}, §4.3.1, equation (40).

                  Equations
                  Instances For
                    noncomputable def Core.Quantification.predToConsGQ {α : Type u_1} (P : (αTri)Prop) :
                    (ConsGQ α)

                    Lift predToGQ into the conservative GQ sublattice.

                    Equations
                    Instances For
                      theorem Core.Quantification.gqToPred_predToGQ {α : Type u_1} (P : (αTri)Prop) :

                      Round-trip: encoding then decoding is the identity.

                      theorem Core.Quantification.predToConsGQ_gqToPred {α : Type u_1} (Q : (ConsGQ α)) :

                      Round-trip: decoding then encoding a conservative GQ is the identity. Uses conservativity in the key step.

                      @[simp]
                      theorem Core.Quantification.predToConsGQ_val {α : Type u_1} (P : (αTri)Prop) (R S : αProp) :
                      (predToConsGQ P) R S = P (triFunction R S)
                      noncomputable def Core.Quantification.consGQOrderIso {α : Type u_1} :
                      (ConsGQ α) ≃o ((αTri)Prop)

                      Birkhoff Representation for ConsGQ.

                      Conservative GQs are order-isomorphic to predicates on trivalent functions (= the powerset of the polarized domain D_e^±).

                      This is the concrete Birkhoff representation: the abstract version (OrderIso.lowerSetSupIrred in Mathlib.Order.Birkhoff) identifies any finite distributive lattice with the lattice of lower sets of its sup-irreducible elements. Our isomorphism makes this explicit for ConsGQ using Equiv.toOrderIso from mathlib.

                      The isomorphism is constructive in shape (though predToGQ is noncomputable due to classical decidability) and works for any α.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For
                        theorem Core.Quantification.predToGQ_gqToPred_eq {α : Type u_1} (Q : GQ α) (R S : αProp) :
                        predToGQ (gqToPred Q) R S Q R fun (x : α) => R x S x

                        For any GQ (not necessarily conservative), the Birkhoff round-trip replaces S with R ∩ S. Conservative GQs are exactly those for which this substitution is the identity. Non-conservative determiners cannot be expressed as predicates on trivalent functions. @cite{elliott-2025}, §4.3, eq. (43).

                        @[reducible, inline]
                        abbrev Core.Quantification.PolInd (α : Type u_2) :
                        Type u_2

                        Polarized individual: an entity paired with a polarity. (e, true) = positive (e⁺): entity witnesses restrictor ∩ scope. (e, false) = negative (e⁻): entity witnesses restrictor ∖ scope.

                        Equations
                        Instances For
                          def Core.Quantification.PolInd.toGQ {α : Type u_2} (x : PolInd α) :
                          GQ α

                          GQ denotation via polarized functional application. ⟦(e, true)⟧(R, S) = R(e) ∧ S(e) — entity in restrictor ∩ scope. ⟦(e, false)⟧(R, S) = R(e) ∧ ¬S(e) — entity in restrictor ∖ scope.

                          Equations
                          • x.toGQ R S = (R x.1 if x.2 = true then S x.1 else ¬S x.1)
                          Instances For

                            The GQ of a polarized individual is conservative.

                            def Core.Quantification.PolInd.toConsGQ {α : Type u_2} (x : PolInd α) :
                            (ConsGQ α)

                            Lift a polarized individual into the conservative GQ sublattice.

                            Equations
                            Instances For
                              @[simp]
                              theorem Core.Quantification.PolInd.toGQ_apply {α : Type u_2} (x : PolInd α) (R S : αProp) :
                              x.toGQ R S = (R x.1 if x.2 = true then S x.1 else ¬S x.1)
                              @[simp]
                              theorem Core.Quantification.PolInd.toConsGQ_val {α : Type u_2} (x : PolInd α) :
                              x.toConsGQ = x.toGQ
                              theorem Core.Quantification.PolInd.toGQ_pos {α : Type u_2} (e : α) (R S : αProp) :
                              toGQ (e, true) R S R e S e
                              theorem Core.Quantification.PolInd.toGQ_neg {α : Type u_2} (e : α) (R S : αProp) :
                              toGQ (e, false) R S R e ¬S e
                              theorem Core.Quantification.PolInd.toGQ_pos_eq_individual {α : Type u_2} (e : α) (R S : αProp) :
                              toGQ (e, true) R S R e individual e S

                              The positive polarized individual (e, true) restricts the Montagovian individual individual e to entities in the restrictor.

                              theorem Core.Quantification.PolInd.toGQ_eq_predToGQ {α : Type u_2} (x : PolInd α) :
                              x.toGQ = predToGQ fun (f : αTri) => (f x.1).IsNonBlank if x.2 = true then (f x.1).IsPos else ¬(f x.1).IsPos

                              Under the Birkhoff representation, an entity-polarity pair corresponds to an atomic predicate: (e, p) maps to the predicate that checks whether e is in the restrictor and has matching polarity in the trivalent function.

                              theorem Core.Quantification.PolInd.pos_sup_neg {α : Type u_2} (e : α) :
                              toConsGQ (e, true)toConsGQ (e, false) = fun (R x : αProp) => R e,

                              Positive and negative polarized individuals for the same entity are complementary within the restrictor: their join covers all cases where e ∈ R, and their meet is ⊥ (restricted to R).

                              This is the lattice-theoretic content of the "split reading": e⁺ ⊔ e⁻ = λR S. R(e) (the individual-restrictor GQ).

                              theorem Core.Quantification.PolInd.pos_inf_neg {α : Type u_2} (e : α) :
                              toConsGQ (e, true)toConsGQ (e, false) =
                              theorem Core.Quantification.PolInd.toConsGQ_le_iff {α : Type u_2} [DecidableEq α] (x y : PolInd α) :
                              x.toConsGQ y.toConsGQ x = y

                              toConsGQ x ≤ toConsGQ y iff x = y: distinct polarized individuals are incomparable in the ConsGQ lattice (they form an antichain).

                              TODO: revive proof after Bool→Prop GQ migration. The original proof instantiates the implication at a witness pair (· = x.1, λ _ => x.2); after the migration, the subtype no longer applies as cleanly and the case-split on x.2 / y.2 interacts awkwardly with Prop equality. The downstream code uses pos_sup_neg/pos_inf_neg rather than this antichain lemma, so the gap is non-blocking.

                              theorem Core.Quantification.PolInd.toConsGQ_injective {α : Type u_2} [DecidableEq α] :
                              Function.Injective toConsGQ

                              The embedding is order-reflecting: an injection into ConsGQ α.

                              @[implicit_reducible]
                              noncomputable instance Core.Quantification.instComplSubtypeGQMemSublatticeConsGQ {α : Type u_2} :
                              Compl (ConsGQ α)
                              Equations
                              @[implicit_reducible]
                              noncomputable instance Core.Quantification.instSDiffSubtypeGQMemSublatticeConsGQ {α : Type u_2} :
                              SDiff (ConsGQ α)
                              Equations
                              @[implicit_reducible]
                              noncomputable instance Core.Quantification.instHImpSubtypeGQMemSublatticeConsGQ {α : Type u_2} :
                              HImp (ConsGQ α)
                              Equations
                              @[implicit_reducible]
                              noncomputable instance Core.Quantification.instBooleanAlgebraSubtypeGQMemSublatticeConsGQ {α : Type u_2} :
                              BooleanAlgebra (ConsGQ α)
                              Equations
                              • One or more equations did not get rendered due to their size.
                              @[simp]
                              theorem Core.Quantification.ConsGQ.compl_val {α : Type u_2} (q : (ConsGQ α)) (R S : αProp) :
                              q R S = ¬q R S