Partial Propositions #
Partial propositions — propositions that may be undefined at some evaluation points. References: [Hei83], [Sch09a], [vF99a], [Geu05], [Bel70], [Kar73], [KP79], [Boc37].
Main declarations #
PartialProp W— partial proposition withpresup, assertion : W → Prop. The canonical type for partial propositions. Fields areProp-valued following the mathlib convention.PartialValue W α— presupposed value polymorphic in the at-issue content type (α = ℚfor degrees,α = Efor entities). Presupposition is alsoW → Prop.- Connective families on
PartialProp W: classical (and,or,imp,xor), filtering / Karttunen (andFilter,impFilter,orFilter), K&P symmetric disjunction (orKPSymmetric), positive-antecedent disjunction (orPositive, a documented rival), Strong Kleene (andStrong,orStrong— theTruth3lattice meet/join), and Belnap conditional assertion (andBelnap,orBelnap; the flexible-accommodationandFlex/orFlexare definitionally the same operators). Classicaland/orare simultaneously Weak Kleene; the filtering connectives are Peters' middle Kleene ([Pet79],eval_andFilter/eval_orFilter). belnapLift— unifier showing Belnap = flexible accommodation for any binaryPropoperator with an identity.strawsonEntails,strongEntails— entailment relations: the canonical [vF99a] form (presup-as-premise) and the stronger variant that additionally requiresq's presupposition to project fromp's satisfaction.liveness,genuineness— [Yag25] disjunction-update conditions.presupOfReferent— definite-description combinator (single source of truth for singular definite denotations).
Implementation notes #
PartialProp W is parametric over the evaluation point. Common instantiations:
PartialProp World (classical possible worlds), PartialProp (Possibility W E)
(dynamic world-assignment pairs).
The choice of connective system (how gaps behave under ∧/∨) is orthogonal
to the representation type — see Truth3.GapPolicy. Connectives are
paired with eval_* bridge theorems mapping each to the corresponding
Truth3 operator on the evaluation.
open Classical is in scope at the namespace level because most
theorems case-split on Prop-valued fields. Mathlib uses the same
idiom in logic-heavy files such as Mathlib/Order/Filter/Basic.lean.
Todo #
PartialProp W = PartialValue W Propunification:PartialValuealready generalizesPartialPropat the type level; unifying would let the connective zoo lift to arbitrary at-issue carriers.evalLift : (Truth3 → Truth3 → Truth3) → (PartialProp W → PartialProp W → PartialProp W)would collapsexor,andBelnap,orBelnapinto one definition each, with one bridge theorem instead of eight.
A presupposed value: a value that is only defined when its presupposition holds.
PartialValue W α generalizes presuppositional propositions: the
presupposition is W → Prop, and the at-issue content is any type — a
truth value (Bool), a degree (ℚ), a measure, etc.
Linguistic motivation: many presupposition triggers return non-boolean
values. The revised per entry ([BS22], eq. 43)
returns a presupposed pure number (ℚ). Definite descriptions return
presupposed entities. PartialValue handles all of these uniformly.
- presup : W → Prop
The presupposition (must hold for definedness).
- value : W → α
The at-issue content (value).
Instances For
A presupposed value is defined at w iff its presupposition holds.
Equations
- Semantics.Presupposition.PartialValue.defined w pv = pv.presup w
Instances For
PartialProp: Prop-based partial propositions #
A presuppositional proposition: assertion + presupposition.
Fields are Prop-valued following the Mathlib convention. Construct
directly with { presup := ..., assertion := ... }; for finite worlds
with DecidableEq, the predicates are auto-decidable.
- presup : W → Prop
The presupposition (must hold for definedness).
- assertion : W → Prop
The at-issue content (assertion).
Instances For
Constructors #
Create a presuppositionless proposition from a W → Prop.
Equations
- Semantics.Presupposition.PartialProp.ofProp p = { presup := fun (x : W) => True, assertion := p }
Instances For
Convert a three-valued proposition to a PartialProp.
Inverse of PartialProp.eval: defined iff value ≠ indet,
assertion iff value = true.
Equations
- Semantics.Presupposition.PartialProp.ofProp3 p = { presup := fun (w : W) => p w ≠ Core.Duality.Truth3.indet, assertion := fun (w : W) => p w = Core.Duality.Truth3.true }
Instances For
Belnap's conditional assertion (A/B): assert B on condition A.
Assertive_w iff A is true at w; what is asserted = B. [Bel70], (3): "(A/B) is assertive_w just in case A is true_w. (A/B)_w = B_w."
Equations
- Semantics.Presupposition.PartialProp.condAssert A B = { presup := A, assertion := B }
Instances For
Satisfaction relations #
Full satisfaction relation: both presupposition and assertion hold.
Argument order (w : W) (p : PartialProp W) supports updateFromSat:
updateFromSat PartialProp.holds p gives the full CCP (presupposition
test + assertion filter).
Equations
- Semantics.Presupposition.PartialProp.holds w p = (p.presup w ∧ p.assertion w)
Instances For
Definedness relation: presupposition holds at the evaluation point.
Argument order (w : W) (p : PartialProp W) supports updateFromSat:
updateFromSat PartialProp.defined p gives the presupposition test CCP.
Equations
Instances For
Constants #
Create a tautological presupposition.
Equations
- Semantics.Presupposition.PartialProp.top = { presup := fun (x : W) => True, assertion := fun (x : W) => True }
Instances For
Create a contradictory presupposition.
Equations
- Semantics.Presupposition.PartialProp.bot = { presup := fun (x : W) => True, assertion := fun (x : W) => False }
Instances For
Create a presupposition failure (never defined).
Equations
- Semantics.Presupposition.PartialProp.undefined = { presup := fun (x : W) => False, assertion := fun (x : W) => False }
Instances For
Evaluation #
Evaluate a presuppositional proposition to three-valued truth. Noncomputable because it decides Prop-valued presupposition and assertion via classical logic.
Equations
- p.eval w = if p.presup w then if p.assertion w then Core.Duality.Truth3.true else Core.Duality.Truth3.false else Core.Duality.Truth3.indet
Instances For
Classical connectives #
Classical (internal / choice) negation: a hole. Lets the presupposition through unchanged.
Instances For
Classical conjunction: both presuppositions must hold. This is also Weak Kleene conjunction ([Kle52]: indet is absorbing).
Equations
Instances For
Classical implication: both presuppositions must hold.
Equations
Instances For
Filtering connectives (Karttunen) #
Filtering conjunction ([Kar73], [Pet79]): the first conjunct can satisfy the second's presupposition.
Equations
Instances For
Filtering implication ([Kar73], [Pet79]): the antecedent can satisfy the consequent's presupposition.
Equations
Instances For
Filtering disjunction (asymmetric, [Kar73]): the negation of the first disjunct can satisfy the second's presupposition — Either there is no bathroom or the bathroom is upstairs is defined because the second disjunct's bathroom presupposition is required only at worlds where the first disjunct is false.
Generalizes disjFilterLeft to a presuppositional first disjunct
(orFilter_ofProp). The symmetric K&P variant is orKPSymmetric;
the positive-antecedent variant is orPositive.
Equations
Instances For
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
Equations
- One or more equations did not get rendered due to their size.
Instances For
Positive-antecedent symmetric disjunction #
Positive-antecedent symmetric disjunction: each disjunct's
presupposition is required where the other disjunct's assertion
holds, plus at least one disjunct defined. This is NOT Karttunen
filtering (orFilter): it demands the second disjunct's
presupposition exactly where the first is true, un-filtering
bathroom-sentence data. Retained as a documented rival:
[Sha25] identifies it as the root cause of K/P-style failure
(Studies/Sharvit2025.lean), and [Yag25] §2.2 discusses the
Π(φ) ∨ Π(ψ) conjunct as a candidate fix (Studies/Yagi2025.lean).
Equations
Instances For
K&P two-dimensional disjunction #
Symmetric two-dimensional disjunction in the K&P ([KP79]) tradition:
Π(φ ∨ ψ) = (A(ψ) ∨ Π(φ)) ∧ (A(φ) ∨ Π(ψ)) A(φ ∨ ψ) = A(φ) ∨ A(ψ)
The name carries the Symmetric suffix because the literal K&P 1979
formulation was asymmetric (it would project the first disjunct's
presupposition unconditionally; [Yag25] fn 2). This is the
symmetrized variant standard in post-2021 literature, matching
[Yag25] Definition 2 (cf. [KS21a] for
experimental support of symmetry).
Equations
Instances For
Strong Kleene #
Strong Kleene disjunction ([Kle52]): defined iff both disjuncts
are defined or either is defined-and-true (T ∨ # = T, F ∨ # = #).
This is the Truth3 lattice join — see eval_orStrong.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Strong Kleene conjunction: defined iff both conjuncts are defined or
either is defined-and-false (F ∧ # = F, T ∧ # = #). This is the
Truth3 lattice meet — see eval_andStrong.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Belnap conditional assertion ([Bel70]) #
Under the Belnap reading, presup is the assertive field — whether the
proposition asserts something at w (vs being nonassertive / silent).
Belnap conjunction: assertive iff at least one conjunct is assertive. What it asserts = conjunction of assertive conjuncts' content.
[Bel70], (8). Contrast with classical PartialProp.and (both
must be defined) and filtering PartialProp.andFilter (left-to-right).
Equations
Instances For
Belnap disjunction: assertive iff at least one disjunct is assertive. What it asserts = disjunction of assertive disjuncts' content.
[Bel70], (9).
Equations
Instances For
Flexible accommodation #
The flexible-accommodation connectives of the pragmatic tradition ([Geu05], [Alo22], the static counterpart of [Yag25]'s dynamic update) are definitionally the Belnap connectives: each operand is evaluated only against worlds where its own presupposition holds, which handles conflicting presuppositions (where classical and filtering disjunction both fail). The two traditions differ in the accommodation theory surrounding the operator (default ⊤ vs unconditional assertive), not in the operator itself — see [Yag25] §3.2 for the distinction.
Flexible accommodation disjunction = orBelnap.
Equations
Instances For
Flexible accommodation conjunction = andBelnap.
Equations
Instances For
Belnap lift: uniform construction for conditional assertion connectives.
Given a binary Prop function f and its identity element unit,
constructs a PartialProp connective where:
- Defined (assertive) iff at least one operand is defined
- Assertion applies
fto each operand's content, substitutingunitfor undefined operands (making them "silent")
[Bel70]: undefined operands contribute the identity element.
Noncomputable because it uses classical if on Props.
Defined instances:
belnapLift (· ∨ ·) False=orBelnap=orFlex(False is identity for ∨)belnapLift (· ∧ ·) True=andBelnap=andFlex(True is identity for ∧)
Equations
- One or more equations did not get rendered due to their size.
Instances For
Entailment relations #
Strawson entailment ([vF99a]): p entails q at every
world where both presuppositions hold. The conclusion q's
presupposition is a premise added to the entailment, not something
the entailment delivers. Matches Semantics.Dynamic.Bilateral.BUS's
strawsonEntails (canonical Strawson).
Equations
- p.strawsonEntails q = ∀ (w : W), p.presup w → q.presup w → p.assertion w → q.assertion w
Instances For
Strong (Strawson-projecting) entailment: at every world where p is
defined and true, q is both defined and true. Stronger than
strawsonEntails: this variant also requires that q's
presupposition projects from p's satisfaction (so it embeds a
presupposition-projection burden the canonical von Fintel form
exempts).
Equations
- p.strongEntails q = ∀ (w : W), p.presup w → p.assertion w → q.presup w ∧ q.assertion w
Instances For
Strawson equivalence: mutual Strawson entailment.
Equations
- p.strawsonEquiv q = (p.strawsonEntails q ∧ q.strawsonEntails p)
Instances For
Liveness for disjunction: each disjunct is satisfied (presupposition AND assertion hold) at some world of the state.
This is the singleton-survival side of [Yag25] Definition 8:
{w}[φ] = {w} for some w ∈ s. The disjunction-update side
(w ∈ s[φ ∨ ψ]) is the additional constraint expressed by
genuineness below.
Equations
- p.liveness q s = ((∃ w ∈ s, Semantics.Presupposition.PartialProp.holds w p) ∧ ∃ w ∈ s, Semantics.Presupposition.PartialProp.holds w q)
Instances For
Genuineness for disjunction ([Yag25] Definition 8, after
[Zim00]). A disjunction p ∨ q, with disjunction-update
realised by the connective disj, follows genuineness in a state s iff
there are worlds w, w' ∈ s such that:
{w}[p] = {w}ANDw ∈ s[p ∨ q]— the left disjunct's witness survives both its own update (=p.holds w) and the disjunction's update (=disj.holds w).{w'}[q] = {w'}ANDw' ∈ s[p ∨ q]— analogously for the right disjunct.
The disjunction-update side rules out witnesses that survive the local
presupposition+assertion update but are eliminated by the joint update —
a vacuous addition under orFlex/orBelnap (liveness_implies_genuineness_orFlex),
but the substantive constraint [Yag25] §3.2 invokes for dynamic
negation: genuineness must hold even within the scope of negation, where
"we end up negating both disjuncts".
The disj argument is parametric so the substrate stays
framework-neutral; consumers supply the disjunction connective whose
update they wish to test against (orFlex / classical or / Geurts
modal split).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Under orFlex, liveness implies genuineness: each witness for
p.holds/q.holds automatically survives the disjunction's update,
because (orFlex p q).holds w reduces to p.holds w ∨ q.holds w.
Negation theorems #
Negation preserves presupposition.
Double negation restores assertion (classical).
Double negation identity.
The truth operator is always defined (it's a plug).
External negation is always defined (it's a plug).
Internal and external negation agree on assertion when the presupposition
holds. They diverge only at presupposition failure: neg p is undefined,
negExt p is true. [Kar73] §10 fn 18.
External negation has the dual assertion to the truth operator at every
world: negExt = ¬truthOp extensionally, by definition (negExt = neg ∘ truthOp
and neg is ¬ on assertion).
Karttunen §10 fn 18 truth table for external negation, presup-failure case:
when p's presupposition fails, negExt p is true (the plug behavior).
Filtering theorems #
Filtering implication eliminates presupposition when antecedent entails it.
When A(p) = P(q), filtering implication has trivial presupposition.
The filtering presupposition of impFilter and andFilter are identical.
This is the formal content of [Kar73] §8: the filtering
rules for if A then B and A and B coincide because both reduce to
p.presup ∧ (p.assertion → q.presup).
Evaluation theorems #
Evaluation is defined iff presupposition holds.
Negation evaluation.
Classical conjunction evaluation (both defined).
Filtering implication when antecedent false: result is true.
Filtering implication when antecedent true: depends on consequent.
orStrong evaluates to the Truth3 lattice join pointwise: Strong
Kleene disjunction is ⊔ in the false < indet < true order,
unconditionally.
andStrong evaluates to the Truth3 lattice meet pointwise,
unconditionally.
Karttunen filtering conjunction is Peters' middle Kleene
([Pet79]): andFilter evaluates to the asymmetric
Truth3.meetMiddle on both dimensions, unconditionally.
Karttunen filtering disjunction is Peters' middle Kleene
([Pet79]): orFilter evaluates to the asymmetric
Truth3.joinMiddle on both dimensions, unconditionally.
Exclusive disjunction never filters: when either presupposition fails, the result is undefined. [WD26]
orKPSymmetric theorem #
When presuppositions conflict at w, the symmetric K&P presupposition entails the assertion: defined → true, so the disjunction can never be both defined and false. [Yag25] §2.2
Flex collapse theorems #
orFlex reduces to standard disjunction when both presuppositions hold.
orFlex presupposition is weaker than or's (p ∨ q vs p ∧ q).
andFlex reduces to standard conjunction when both presuppositions hold.
andFlex presupposition is weaker than and's (p ∨ q vs p ∧ q).
Eval: Weak Kleene / Belnap #
or evaluates to Truth3.joinWeak pointwise (classical disjunction
is Weak Kleene).
Belnap conjunction evaluates to Truth3.meetBelnap pointwise.
Belnap disjunction evaluates to Truth3.joinBelnap pointwise.
Belnap lift: unification #
orBelnap is the Belnap lift of (· ∨ ·) with identity False.
andBelnap is the Belnap lift of (· ∧ ·) with identity True.
Belnap lift reduces to the classical operation when both presuppositions hold. The identity element is never used — both operands contribute directly.
When only the left operand is defined and unit is a right identity,
belnapLift returns the left operand's value: the right operand is
invisible.
When only the right operand is defined and unit is a left identity,
belnapLift returns the right operand's value.
belnapLift is commutative when f is commutative.
Collapse: all connective families agree when both defined #
When both presuppositions hold at w, ALL disjunction connectives agree on assertion: classical = filtering = K&P = flex = Belnap. The theories diverge only when presuppositions conflict.
When both presuppositions hold at w, ALL conjunction connectives agree on assertion: classical = filtering = flex = Belnap. The theories diverge only when presuppositions conflict.
Round-trip: Prop3 ↔ PartialProp #
Prop3 → PartialProp → Prop3 round-trip is the identity.
Genuineness theorems #
Liveness is symmetric.
Genuineness is symmetric whenever the supplied disjunction connective is symmetric in its operands.
Asymmetric filtering disjunction: plain proposition ∨ PartialProp.
For "A ∨ B_ψ" where only B carries a presupposition ψ, the overall presupposition is ¬A → ψ (Karttunen's generalization for disjunction). The assertion is A ∨ B.
This is the standard projection rule for presuppositions in the second disjunct of a disjunction. [Kar73], [Hei83]
Equations
- One or more equations did not get rendered due to their size.
Instances For
orFilter with a presuppositionless first disjunct is disjFilterLeft.
Embedding under a negative factive (e.g., "is unaware that").
"x is unaware that p" presupposes p and asserts ¬Bel_x(p).
The choice of complement.holds (presupposition AND assertion) for the
factive's presupposition is the [DPBS24]
treatment, where projection-through-factive requires both the trigger's
presupposition and the at-issue complement to be carried. The
[Hei92] standard for atomic complements is complement.assertion
alone; the two coincide when complement itself carries no presupposition
but diverge when the complement contains its own embedded presupposition
trigger (the case Del Pinal-Bassi-Sauerland use to handle presupposed
free choice).
Equations
- complement.negFactive believes = { presup := fun (w : W) => Semantics.Presupposition.PartialProp.holds w complement, assertion := fun (w : W) => ¬believes complement.assertion w }
Instances For
When the first disjunct is false, disjFilterLeft recovers full
satisfaction of the second disjunct.
When ¬A entails q's presupposition pointwise, disjFilterLeft A q
is presuppositionless (the filtering condition is satisfied at every
world). The substrate-side fact behind [Kar73]'s
asymmetric disjunction filtering rule (24b), p. 181: "A or B" carries
no residual presupposition from B when ¬A entails it.
Presupposition of negFactive is full satisfaction of the complement.
Universal presupposition projection: presuppositions project universally from the scope of a universal quantifier.
For ∀x ∈ S, φ(x) where φ(x) is a PartialProp:
- asserts: ∀x ∈ S, assertion(φ(x))
- presupposes: ∀x ∈ S, presup(φ(x))
[Che09a], [Fox13]: presuppositions triggered in the scope of a universal quantifier tend to project universally. ([MS15b] dissent: semantic projection is existential, pragmatically strengthened — cf. [SS17].)
Equations
- Semantics.Presupposition.PartialProp.forallPartial S φ = { presup := fun (w : W) => ∀ (x : α), S x → (φ x).presup w, assertion := fun (w : W) => ∀ (x : α), S x → (φ x).assertion w }
Instances For
Existential presupposition projection — universal presup, existential assert.
For ∃x ∈ S, φ(x): presuppositions project universally, but the
assertion is existential. This is the projection choice supported
experimentally by [Che09a]; whether it is the right
default is empirically contested — see [SS17] for
conditions under which a non-universal (existential) reading is
preferred. Consumers committing to a projection theory should pick
existsPartialUniv or existsPartialExist explicitly.
Equations
- Semantics.Presupposition.PartialProp.existsPartialUniv S φ = { presup := fun (w : W) => ∀ (x : α), S x → (φ x).presup w, assertion := fun (w : W) => ∃ (x : α), S x ∧ (φ x).assertion w }
Instances For
Existential presupposition projection — existential presup, existential
assert. The non-universal alternative to existsPartialUniv; see
[SS17] for the empirical debate.
Equations
- Semantics.Presupposition.PartialProp.existsPartialExist S φ = { presup := fun (w : W) => ∃ (x : α), S x ∧ (φ x).presup w, assertion := fun (w : W) => ∃ (x : α), S x ∧ (φ x).assertion w }
Instances For
Negated existential with universal presupposition projection.
For ¬∃x ∈ S, φ(x): equivalent to ∀x ∈ S, ¬φ(x). Presuppositions project universally.
Equations
- Semantics.Presupposition.PartialProp.negExistsPartial S φ = { presup := fun (w : W) => ∀ (x : α), S x → (φ x).presup w, assertion := fun (w : W) => ¬∃ (x : α), S x ∧ (φ x).assertion w }
Instances For
forallPartial holds iff every member satisfies both presupposition and assertion.
Definite-description combinator #
The canonical definite-description combinator. Given:
referent : W → Option E— a partial selector returning the referent at each world (ornonewhen no unique referent is determined),scope : E → W → Prop— what is asserted of the chosen referent,
build the PartialProp that presupposes referent definedness and asserts the
scope of the referent. This is the single source of truth for all definite
denotations in the library: uniqueness-based (russellIotaList domain R),
familiarity-based (russellIotaList dc.salient R), anaphoric
(russellIotaList domain (R ∧ Q)), and Donnellan's attributive
(attributiveContent domain R) all instantiate the selector slot.
Equations
- One or more equations did not get rendered due to their size.
Instances For
presupOfReferent is defined iff a referent is selected at w.
When a referent is selected, the assertion is the scope applied to it.
Without a referent, the assertion is False.