Algebraic Mereology #
[Cha17] [Kri89] [Kri98] [Lin83]
Framework-agnostic mereological infrastructure formalized over Mathlib's
SemilatticeSup (binary join = mereological sum ⊕) and PartialOrder
(part-of = ≤). All definitions are polymorphic over any semilattice,
making them usable for entities, events, times, paths, or any domain
with part-whole structure.
Algebraic Closure (*P) #
Algebraic closure of a predicate P under join (⊔): *P is the smallest set containing P and closed under ⊔. Originates in [Lin83] (D.32); formulation follows [Cha17] Ch. 2.
- base
{α : Type u_1}
[SemilatticeSup α]
{P : α → Prop}
{x : α}
: P x → AlgClosure P x
Base case: everything in P is in *P.
- sum
{α : Type u_1}
[SemilatticeSup α]
{P : α → Prop}
{x y : α}
: AlgClosure P x → AlgClosure P y → AlgClosure P (x ⊔ y)
Closure: if x, y ∈ *P then x ⊔ y ∈ *P.
Instances For
Higher-Order Mereological Properties #
Cumulative reference (CUM): P is closed under join. Grounded in mathlib's
SupClosed — CUM P is SupClosed {x | P x} (the sup-closed-set
predicate). Apply a CUM hypothesis directly (hC hx hy : P (x ⊔ y));
construct one with a direct lambda (fun _ hx _ hy => …), as for any
SupClosed (cf. mathlib IsUpperSet.supClosed).
[Lin83] (T.11); [Kri89] D 12; [Cha17] §2.3.2:
CUMₛ(P) ⇔ ∀x,y. P(x) ∧ P(y) → P(x ∪ₛ y).
Activities and states are canonically cumulative.
Equations
- Mereology.CUM P = SupClosed {x : α | P x}
Instances For
Divisive reference (DIV): P is closed downward under ≤. Grounded in
mathlib's IsLowerSet — DIV P is IsLowerSet {x | P x}. Apply a
DIV hypothesis directly (hDiv hle hz : P w from hle : w ≤ z,
hz : P z); construct one with a direct lambda (fun _ _ hba ha => …).
Equivalently DIV P ↔ Antitone P via mathlib's isLowerSet_setOf.
[Cha17] §2.3.3: DIV(P) ⇔ ∀x,y. P(x) ∧ y ≤ x → P(y).
This is the mereological analog of the subinterval property.
Only requires Preorder since the definition only uses ≤.
Equations
- Mereology.DIV P = IsLowerSet {x : α | P x}
Instances For
Quantized reference (QUA): no proper part of a P-entity is also P.
[Kri89] D 14: QUAₛ(P) ⇔ ∀x,y. P(x) ∧ P(y) → ¬ y ⊂ₛ x.
[Cha17] §2.3.5 reformulates as ∀x,y. P(x) ∧ y < x → ¬P(y),
which is propositionally equivalent ((A → B → ¬C) ↔ (A → C → ¬B)).
Grounded in mathlib's IsAntichain — QUA P is
IsAntichain (· ≤ ·) {x | P x} (a quantized predicate's extension is an
antichain: its members are pairwise incomparable). A QUA hypothesis is
applied directly as an antichain (hQ hPx hPy hne : ¬ x ≤ y); to build one
from Champollion's paper form, use qua_of_forall.
Equations
- Mereology.QUA P = IsAntichain (fun (x1 x2 : α) => x1 ≤ x2) {x : α | P x}
Instances For
Converge Champollion's paper condition into the mathlib IsAntichain normal
form: if no P-element sits strictly below another P-element, the extension is
an antichain. This is the construction direction (paper form ⟹ QUA); to
use a QUA hypothesis, apply it directly as an antichain. There is no
QUA ⟹ ∀ x y unfold by design — that runs against the simp grain.
Mereological atom: x has no proper part — grounded as mathlib's IsMin
(minimal element). [Lin83] (D.10); [Cha17] §2.2:
Atom(x) ⇔ ¬∃y. y < x. This is the absolute (P-independent) notion;
the P-relative one (Krifka D17, "no proper P-part") is atomize /
mathlib Minimal P. No OrderBot needed — many mereological domains lack
a bottom.
Equations
- Mereology.Atom x = IsMin x
Instances For
An atom's only part is itself — the y = x elimination form of IsMin.
Key Theorems #
*P is always cumulative. This is the fundamental property of algebraic closure.
P ⊆ *P: algebraic closure extends the original predicate.
Every element of *P has a base element below it: if x ∈ *P, then ∃ a ∈ P, a ≤ x. Useful for extracting witnesses from algebraic closures.
Closure of a cumulative predicate is itself: *P = P when CUM(P). Mass nouns and bare plurals are already cumulative, so closure is a no-op — the key to Krifka's absorption rule ⊔⊔S = ⊔S.
Atoms form an antichain — the absolute case of mathlib's
setOf_minimal_antichain (atoms are the Minimal (fun _ => True) elements,
via minimal_true). The engine behind qua_of_atom.
Combinator: a predicate holding only of atoms is quantized — its
extension is a subset of the atoms, which form an antichain
(IsAntichain.subset). Factors the recurring "atomic ⟹ QUA" pattern
(mass-noun part predicates, classifier atoms).
Atoms are trivially quantized: the singleton {x} is QUA when x is an atom.
AlgClosure is idempotent: *(∗P) = *P.
AlgClosure is a closure operator on the predicate lattice (α → Prop, ⊆),
grounded in mathlib's ClosureOperator via its three axioms:
subset_algClosure→le_closure'(extensive)algClosure_mono→monotone'(monotone)algClosure_idempotent+subset_algClosure→idempotent'
Equations
- Mereology.algClosureOp = { toFun := Mereology.AlgClosure, monotone' := ⋯, le_closure' := ⋯, idempotent' := ⋯, isClosed_iff := ⋯ }
Instances For
Sum Homomorphism #
A sum homomorphism preserves the join operation. [Cha17] §2.5: thematic roles and τ are sum homomorphisms. f(x ⊕ y) = f(x) ⊕ f(y).
- map_sup (x y : α) : f (x ⊔ y) = f x ⊔ f y
f preserves binary join.
Instances
Convert an IsSumHom witness to Mathlib's bundled SupHom.
This grounds linglib's unbundled IsSumHom typeclass in Mathlib's
bundled SupHom α β, the hom-set in SLat (join semilattices
with join-preserving maps).
Equations
- hf.toSupHom = { toFun := f, map_sup' := ⋯ }
Instances For
Sum homomorphisms are order-preserving (monotone). If x ≤ y then f(x) ≤ f(y).
Sum homomorphisms preserve CUM: if P is CUM then P ∘ f⁻¹ is CUM. More precisely: if P is CUM then (fun x => P (f x)) is CUM.
Mereological overlap: x and y share a common part. [Kri98] eq. (1e): O(x, y) ⇔ ∃z. z ≤ x ∧ z ≤ y.
Equations
- Mereology.Overlap x y = ∃ z ≤ x, z ≤ y
Instances For
Overlap is reflexive: every element overlaps itself (via x ≤ x).
Overlap is symmetric.
Classical (extensional) mereology ([Hov09]) #
[Hov09] catalogs the equivalent axiomatizations of classical mereology.
We adopt his headline characterization: classical mereology is the partial-order
parthood axioms together with type-2 fusion existence (Fusion2E) and
weak supplementation (WeakSup); equivalently (Tarski) a complete Boolean
algebra with the zero element removed. Overlap is Hovda's ∘, proper part is
the order <, and disjointness is ¬ Overlap. Mathlib's IsLUB plays the role
of Hovda's minimal upper bound Mub (minimal coincides with least under
antisymmetry), so the fusion-existence axiom delivers binary sums for free.
Type-2 (Tarski) fusion ([Hov09] §1.1.2): t fuses the P-things iff
t is an upper bound on P and every part of t overlaps some P-thing.
Equations
- Mereology.IsFusion P t = ((∀ (x : α), P x → x ≤ t) ∧ ∀ y ≤ t, ∃ (x : α), P x ∧ Mereology.Overlap y x)
Instances For
Classical (extensional) mereology ([Hov09] §3): parthood is a partial
order closed under type-2 fusion of every inhabited predicate (Fusion2E) and
satisfying weak supplementation (WeakSup).
Fusion2E: every inhabited predicate has a type-2 fusion.WeakSup: a proper part is supplemented by a disjoint part.
Instances
A type-2 fusion of P is the least upper bound of P ([Hov09] Fu2MUB):
weak supplementation forces the fusion (which is by definition an upper bound)
to be the least one.
Type-2 fusions are unique ([Hov09] Fu2Uniqueness): immediate from
IsFusion.isLUB and antisymmetry of the parthood order.
In a classical mereology every pair has a least upper bound (the binary sum
a ⊕ b), obtained by fusing {a, b}.
The binary-sum (join-semilattice) structure carried by every classical
mereology, with parthood ≤ as its order. The join a ⊔ b is the unique
type-2 fusion of {a, b}; noncomputable because it is extracted by choice from
the fusion-existence axiom.
Equations
- Mereology.ClassicalMereology.toSemilatticeSup = { toPartialOrder := inst✝¹, sup := fun (a b : α) => Classical.choose ⋯, le_sup_left := ⋯, le_sup_right := ⋯, sup_le := ⋯ }
Instances For
Atomic domains (discrete orders) #
The sort-level, instance-resolvable companion of QUA. An IsAtomicDomain is a
PartialOrder every element of which is an Atom (IsMin) — equivalently a
discrete order (a ≤ b ↔ a = b), equivalently a sort on which
QUA (fun _ => True) holds. It is the single consolidation point for the
"flat/atomic domain" that recurs across studies (the Student-style fixtures)
and that distributive determiners (English each, the ONE_AT presupposition)
require of their restrictor sort: a sort with a non-atomic element (time
intervals) simply has no instance. Everything below reduces to the existing
Atom/QUA/IsAntichain machinery — this class adds resolution ergonomics, not
a new notion.
A PartialOrder all of whose elements are atoms (IsMin) — a discrete order
/ a ≤-antichain on the whole type.
- all_atoms (x : α) : Atom x
Every element is an atom.
Instances
A discrete order (a ≤ b ↔ a = b) is an atomic domain — the canonical way to
discharge the instance for Student-style flat fixtures.
The whole type of an atomic domain is quantized — the sort-level face of
QUA, routed through qua_of_atom.
In an atomic domain, overlapping elements are equal (atoms are disjoint).
Extensive measure function: additive over non-overlapping entities.
[Kri98] §2.2, eq. (7): μ(x ⊕ y) = μ(x) + μ(y) when ¬O(x,y).
Examples: weight, volume, number (cardinality). Order-interval sibling:
IsIntervalContent (Core/Order/IntervalContent.lean) — disjoint
intervals have no interval join, so the two substrates coexist.
- additive (x y : α) : ¬Overlap x y → μ (x ⊔ y) = μ x + μ y
Additivity: μ is additive over non-overlapping entities.
Positivity: every entity has positive measure.
Strict monotonicity: proper parts have strictly smaller measure. In a CEM with complementation, this follows from additivity + positivity: y < x implies x = y ⊔ z with ¬O(y,z), so μ(x) = μ(y) + μ(z) > μ(y). We axiomatize it directly since
SemilatticeSuplacks complementation.
Instances
Measure phrases create QUA predicates: {x : μ(x) = n} is QUA whenever
μ is an extensive measure ([Kri98] §2.2: "two kilograms of flour" is
QUA because no proper part of a 2kg entity also weighs 2kg). The theorem
extMeasure_qua is stated in §9 below, derived via qua_pullback.
Quantizing modification: intersect predicate R with a measure constraint. [Kri89]: QMOD(R, μ, n) = λx. R(x) ∧ μ(x) = n. "three kilos of rice" = QMOD(rice, μ_kg, 3). This is the operation that turns a CUM mass noun into a QUA measure phrase.
Equations
- Mereology.QMOD R μ n x = (R x ∧ μ x = n)
Instances For
Atomize restricts: atomize P ⊆ P.
Count atoms below x, as the cardinality of the (classically finite)
set of atomic parts. Used by [Cha21] for cardinality tests on
plural individuals.
Equations
- Mereology.atomCount α x = {a : α | Mereology.Atom a ∧ a ≤ x}.ncard
Instances For
If P is CUM and x, y are both maximal in P, then x = y. Cumulative predicates have at most one maximal element: the join of all P-elements.
CUM pullback along a sum homomorphism: CUM P → CUM (P ∘ d). The CUM twin
of qua_pullback; wraps IsSumHom.cum_preimage.
ExtMeasure → StrictMono Bridge #
Extract StrictMono from an extensive measure.
ExtMeasure.strict_mono axiomatizes that proper parts have strictly
smaller measure; this is exactly StrictMono μ.
Singleton predicates are quantized: {x | x = n} is QUA on any partial
order (a subsingleton is an antichain).
Measure phrases are quantized: {x | μ x = n} is QUA when μ is an extensive
measure ([Kri98] §2.2) — singleton_qua pulled back along μ.
Combinator: a measure-quantizing modification is quantized.
QMOD R μ n ⊆ {μ = n}, an antichain by extMeasure_qua, so any subset is
too (IsAntichain.subset).
Functional QUA propagation #
QUA propagation through an injective sum homomorphism: the functional case
of [Kri98] §3.3 (SINC reduces to IsSumHom + injective), where the
relational qua_propagation (Krifka1998.lean) becomes qua_pullback.
CUM/QUA Pullback Interaction #
Equations
- Mereology.gHomogeneous P = ∀ (x y : α), P x → y < x → ∃ z ≤ y, P z
Instances For
DIV implies g-homogeneity: if every part of a P-entity is P, then a fortiori every proper part has a P-part (itself).
Equations
- Mereology.FakeMass P = (Mereology.CUM P ∧ ¬Mereology.gHomogeneous P)
Instances For
Predicate disjointness and individuation perspectives #
A predicate is overlapping if two distinct members share a part, and
disjoint otherwise; a maximally disjoint subset is an individuation
perspective ([Lan11]'s variants; [Lan20]'s disjointness
thesis: counting requires a disjoint base). The null schema unions all
perspectives ([SF21]). Parameterized over an arbitrary
overlap relation ov (mereologically, x ⊓ y ≠ ⊥); graduated from
Studies/SuttonFilip2021.lean on gaining its second consumer
(Studies/Landman2020.lean).
Two distinct members of P share a part.
Equations
- Mereology.OverlapPred ov P = ∃ x ∈ P, ∃ y ∈ P, x ≠ y ∧ ov x y
Instances For
No two distinct members of P share a part.
Equations
- Mereology.DisjointPred ov P = ¬Mereology.OverlapPred ov P
Instances For
OverlapPred is monotone under inclusion.
A subset of a disjoint predicate is disjoint.
A maximally disjoint subset of P: disjoint, and unextendable within
P — an individuation perspective.
Equations
- Mereology.IsMaxDisjointIn ov D P = (D ⊆ P ∧ Mereology.DisjointPred ov D ∧ ∀ x ∈ P, x ∉ D → Mereology.OverlapPred ov (insert x D))
Instances For
The null individuation schema: the union of all maximally disjoint subsets — what counts as 'one' under any perspective ([SF21] (32), after [Lan11]).
Equations
- Mereology.nullSchema ov P = {x : α | ∃ (D : Set α), Mereology.IsMaxDisjointIn ov D P ∧ x ∈ D}
Instances For
The union of two distinct maximal disjoint subsets overlaps: if x
distinguishes D₂ from D₁, then D₁'s maximality makes
insert x D₁ overlap, and the offending pair lies in D₁ ∪ D₂.
If two distinct maximal disjoint subsets exist, the null schema is overlapping: null-schema counting bases are mass exactly when individuation is perspectival.
A disjoint predicate is its own unique perspective: the null schema returns it unchanged.
Down clause of conjunctive parthood: every element of p has a
part in q. Generic poset relation; specialized in
Semantics/Truthmaker/Basic.lean to content parthood.
Equations
- Mereology.IsSubsumedBy q p = ∀ (s : α), p s → ∃ (t : α), q t ∧ t ≤ s
Instances For
Up clause of conjunctive parthood: every element of q extends
to an element of p.
Equations
- Mereology.Subserves q p = ∀ (s : α), q s → ∃ (t : α), p t ∧ s ≤ t
Instances For
Conjunctive parthood ([JR26] Def 5):
q is a content part of p iff both Down (IsSubsumedBy) and Up
(Subserves) clauses hold.
Equations
- Mereology.IsContentPart q p = (Mereology.IsSubsumedBy q p ∧ Mereology.Subserves q p)
Instances For
Mereological dimensions #
Strictly monotone maps along which QUA pulls back — the dimension
chains of [Kri89]'s linking theory (Events →θ Entities →μ ℚ),
bundling the three sources of StrictMono (ExtMeasure, injective
IsSumHom, compositions).
- toStrictMono : StrictMono d
The underlying strict monotonicity proof.
Instances
Composition of MereoDim morphisms. Captures Krifka's dimension
chains: Events →θ Entities →μ ℚ gives MereoDim (μ ∘ θ) when
both components are MereoDim.
Stated as a theorem (not an instance) to avoid typeclass inference loops from decomposing arbitrary composed functions.
QUA pullback via MereoDim: typeclass-dispatched version of
qua_pullback. When [MereoDim d] is available (automatically
for any ExtMeasure), QUA pulls back without manual StrictMono
threading.
The composed map is a MereoDim.
Equations
- ⋯ = ⋯