Aggregation of Truth3 Lists by Projection Type #
@cite{barwise-cooper-1981}
Universal vs existential aggregation as the ⊓/⊔ projections of the
∃ ⊣ Δ ⊣ ∀ adjunction, parameterized by ProjectionType (declared in
Truth3.lean).
§ 1. Truth3 Aggregation #
aggregate (d : ProjectionType) : List Truth3 → Truth3— fold by projection type. Conjunctive:⊓-fold from⊤. Disjunctive:⊔-fold from⊥.
§ 2. Prop-valued Quantifier Projection #
The Prop-valued counterparts of existsAny/forallAll are just ∃/∀
from Lean core. De Morgan duality uses not_forall/not_exists from
Mathlib.
Aggregate a list according to projection type.
Conjunctive (∀-like): ⊓-fold from ⊤.
Disjunctive (∃-like): ⊔-fold from ⊥.
Equations
- Core.Duality.aggregate Core.Duality.ProjectionType.disjunctive l = List.foldl (fun (x1 x2 : Core.Duality.Truth3) => max x1 x2) ⊥ l
- Core.Duality.aggregate Core.Duality.ProjectionType.conjunctive l = List.foldl (fun (x1 x2 : Core.Duality.Truth3) => min x1 x2) ⊤ l
Instances For
Existential (disjunctive) aggregation: true if ANY true.
Equations
Instances For
Universal (conjunctive) aggregation: true only if ALL true.
Equations
Instances For
Equations
- Core.Duality.const t x✝ = t
Instances For
Equations
- Core.Duality.exists' P l = Core.Duality.existsAny (List.map P l)
Instances For
Equations
- Core.Duality.forall' P l = Core.Duality.forallAll (List.map P l)
Instances For
The aggregation operators defined in § 1 are List.foldl over the
Truth3 lattice. Their behavior is determined by two algebraic
facts:
1. **Idempotency** (`sup_idem`, `inf_idem`): every element of a
lattice is a fixed point of `⊔` and `⊓`. With initial accumulator
`⊥` (resp. `⊤`), folding `⊔` (resp. `⊓`) over `List.replicate n
.indet` gets absorbed by `.indet` after the first step (identity
element transition).
2. **Lattice homomorphism** (`Truth3.ofBoolHom`): `ofBool` embeds
`Bool` into the `{⊥, ⊤}` sublattice of `Truth3`, preserving both
`⊔` and `⊓`. Folding lattice operations over `bs.map ofBool`
reduces to folding the corresponding Boolean operations
(`||`/`&&`) over `bs` — which is always definite, so the
aggregation result avoids `.indet`.
These two facts are the algebraic basis for the architectural
distinction in trivalent semantics for quantified counterfactuals
(@cite{ramotowska-marty-romoli-santorio-2025}) and deontic modality
(@cite{agha-jeretic-2022} §4.2): inputs containing `.indet`
propagate it through aggregation regardless of duality type, while
inputs lifted from `Bool` always commit to a definite truth value.
Aggregation over List.replicate n .indet collapses to .indet
regardless of duality type. The duality type is invisible: this is
the algebraic reason "local-scope" trivalent semantics erases
quantifier strength.
Existential aggregation through Truth3.ofBool reduces to Boolean
disjunction. Witness of the lattice-homomorphism property of
Truth3.ofBoolHom propagating through fold.
Universal aggregation through Truth3.ofBool reduces to Boolean
conjunction.
Aggregation through Truth3.ofBool never produces .indet —
Boolean inputs leave the gap-free sublattice {⊥, ⊤} invariant.
The algebraic basis for "global-scope" trivalent semantics where
the quantifier sees only Boolean values.
Mixed Boolean inputs (some true, some false) split the duality
types: existential aggregation gives .true, universal gives
.false. This IS the strength effect — algebraic reason
selectional-architecture trivalent semantics predicts the
quantifier-strength contrast on mixed scenarios.
The dist operator is finite-domain Boolean supervaluation:
given a Finset s and a Boolean predicate P, classify (s, P) as
super-true (P holds at every element), super-false (P fails at
every element of nonempty s), or indeterminate (mixed). This is the
construction introduced by @cite{van-fraassen-1966} (Definition 10,
p. 487) for free logic with non-denoting names and named "super-truth"
by @cite{fine-1975} (§3, p. 273) when applied to vagueness via
specification spaces.
In linguistic semantics the same operation is @cite{schwarzschild-1996}'s
**DIST** operator for distributive plural predication (the source of
the name `dist`); @cite{kriz-2016} and @cite{kriz-spector-2021}
formalize the modern trivalent-homogeneity treatment.
Reachable cases on a Finset `s : Finset α` and predicate `P : α → Prop`
with `[DecidablePred P]`:
| `∀ a ∈ s, P a` | `∃ a ∈ s, P a` | meaning | `dist s P` |
|----------------|----------------|----------------------|------------|
| `true` | `true` | nonempty, all P | `.true` |
| `true` | `false` | empty (vacuous) | `.true` |
| `false` | `true` | mixed | `.indet` |
| `false` | `false` | nonempty, no P | `.false` |
Trivalent classifier (Fine super-truth, finite-Boolean specialization).
dist s P is .true if P holds at every element of s (vacuously
on ∅), .false if P fails at every element of nonempty s,
.indet (mixed) otherwise. The supervaluation's universal/existential
decision pair (∀, ∃) is the kernel; the if-chain classifies it into
Truth3.
Equations
- Core.Duality.dist s P = if ∀ a ∈ s, P a then Core.Duality.Truth3.true else if ∃ a ∈ s, P a then Core.Duality.Truth3.indet else Core.Duality.Truth3.false
Instances For
List variant of dist — direct definition over ∀/∃ on a List,
no [DecidableEq α] required. Same trichotomy: .true on (vacuously
or genuinely) all-P, .false on nonempty-but-no-P, .indet mixed.
Agrees with dist l.toFinset P when [DecidableEq α] is available.
Equations
- Core.Duality.distList l P = if ∀ a ∈ l, P a then Core.Duality.Truth3.true else if ∃ a ∈ l, P a then Core.Duality.Truth3.indet else Core.Duality.Truth3.false
Instances For
dist is .true on the empty Finset (vacuous super-truth).
dist on a singleton: .true if P a holds, .false otherwise.
dist is .true on the constantly-true predicate.
distList is .true on the empty list (vacuous super-truth).
distList on a singleton: .true if P a holds, .false otherwise.
distList is .true on the constantly-true predicate.
The Truth3 aggregation above (§ 1) is the decidable/three-valued
version of quantifier projection. The classical Prop-valued
counterparts are just ∃ and ∀ from Lean core — the left and
right adjoints to the diagonal in the adjunction ∃ ⊣ Δ ⊣ ∀.
Many parameterized semantic theories (comparison classes, precisifications,
accessible worlds, variable assignments) project out a hidden index
via one of these two operations:
| Theory | Index I | ∃-projection | ∀-projection | Mathlib hook |
|------------------------|----------------------|--------------------|-----------------|----------------------------------------|
| @cite{klein-1980} | comparison class C | comparative (more) | at-least-as | `measureDelineation_mono_in_class` |
| @cite{fine-1975} | precisification | sub-truth | super-truth | `Preorder SpecSpace`, stability |
| @cite{caie-2023} | comp. context | disjunctive update | — | `disjunctiveUpdate_mono_interp` |
| @cite{kratzer-1981} | accessible world | ◇ (possibility) | □ (necessity) | `GaloisConnection` (Proposition.lean) |
| @cite{kamp-1975} | completion | strict comparative | at-least-as | `Antitone` in S (via `kampPreorder`) |
The projections themselves are just `∃`/`∀`. De Morgan duality uses
`not_forall` / `not_exists` from Lean core. The deeper Mathlib
connections are on the **parameter spaces**: `Monotone`/`Antitone`
for how the projections vary as the parameter space changes,
`IsLeast`/`IsGreatest` for monotone collapse, and `GaloisConnection`
for the extension/intension adjunction.
See `ParameterizedUpdate.lean` for the shared framework (monotone
collapse via `IsLeast`/`IsGreatest` + `Antitone`, borderline region
characterization, sequential update with pruning).