Partial Propositions #
@cite{heim-1983} @cite{schlenker-2009} @cite{von-fintel-1999} @cite{geurts-2005} @cite{belnap-1970}
Partial propositions — propositions that may be undefined at some evaluation points.
PrProp W: presup : W → Prop, assertion : W → Prop. The canonical type
for partial propositions. Following the Mathlib convention, fields are
Prop-valued; use open Classical + by_cases for case splits. For
finite worlds with DecidableEq, the predicates are auto-decidable and
PrProp.eval reduces via if_pos/if_neg.
PrValue W α (Bool-based presupposition, polymorphic value): a separate
type for presupposed non-boolean values (degrees, entities, etc.).
Domain generality #
PrProp W is parametric over W. Common instantiations:
PrProp World— classical presupposition over possible worldsPrProp (Possibility W E)— dynamic presupposition over world-assignment pairs
Satisfaction relations #
PrProp.defined w p— presupposition holds at wPrProp.holds w p— both presupposition and assertion hold
Connective systems #
The choice of connective system (how gaps behave under ∧/∨) is orthogonal
to the representation type — see Truth3.GapPolicy. The full set is provided:
classical, filtering (Karttunen), Belnap, flexible, Weak Kleene, K&P.
A presupposed value: a value that is only defined when its presupposition holds.
PrValue W α generalizes presuppositional propositions: the
presupposition is always W → Bool, but the at-issue content can be
any type — a truth value (Bool), a degree (ℚ), a measure, etc.
Linguistic motivation: many presupposition triggers return non-boolean
values. The revised per entry (@cite{bale-schwarz-2022}, eq. 43)
returns a presupposed pure number (ℚ). Definite descriptions return
presupposed entities. PrValue handles all of these uniformly.
- presup : W → Bool
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
- Core.Presupposition.PrValue.defined w pv = (pv.presup w = true)
Instances For
Create a presuppositionless value (always defined).
Equations
- Core.Presupposition.PrValue.pure a = { presup := fun (x : W) => true, value := a }
Instances For
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
Create a presuppositionless proposition from a W → Prop.
Equations
- Core.Presupposition.PrProp.ofProp' p = { presup := fun (x : W) => True, assertion := p }
Instances For
Convert a three-valued proposition to a PrProp.
Inverse of PrProp.eval: defined iff value ≠ indet,
assertion iff value = true.
Equations
- Core.Presupposition.PrProp.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. @cite{belnap-1970}, (3): "(A/B) is assertive_w just in case A is true_w. (A/B)_w = B_w."
Equations
- Core.Presupposition.PrProp.condAssert A B = { presup := A, assertion := B }
Instances For
Full satisfaction relation: both presupposition and assertion hold.
Argument order (w : W) (p : PrProp W) supports updateFromSat:
updateFromSat PrProp.holds p gives the full CCP (presupposition
test + assertion filter).
Equations
- Core.Presupposition.PrProp.holds w p = (p.presup w ∧ p.assertion w)
Instances For
Definedness relation: presupposition holds at the evaluation point.
Argument order (w : W) (p : PrProp W) supports updateFromSat:
updateFromSat PrProp.defined p gives the presupposition test CCP.
Equations
- Core.Presupposition.PrProp.defined w p = p.presup w
Instances For
Create a tautological presupposition.
Equations
- Core.Presupposition.PrProp.top = { presup := fun (x : W) => True, assertion := fun (x : W) => True }
Instances For
Create a contradictory presupposition.
Equations
- Core.Presupposition.PrProp.bot = { presup := fun (x : W) => True, assertion := fun (x : W) => False }
Instances For
Create a presupposition failure (never defined).
Equations
- Core.Presupposition.PrProp.undefined = { presup := fun (x : W) => False, assertion := fun (x : W) => False }
Instances For
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
Bochvar external (exclusion) negation: a plug.
Always defined; true when p is false or undefined, false only when
p is true. Equals neg (truthOp p) per @cite{karttunen-1973} §10
fn 18: ⌜¬A⌝ ≡ ⌜~t(A)⌝.
Instances For
Exclusive disjunction: both presuppositions must hold (no filtering).
Under Strong Kleene, Truth3.xor propagates undefinedness
unconditionally (xor_indet_iff), so exclusive disjunction never
filters presupposition failure from either disjunct.
@cite{wang-davidson-2026}
Equations
Instances For
Filtering conjunction: antecedent can satisfy consequent's presupposition.
Equations
Instances For
Filtering implication: antecedent can satisfy consequent's presupposition.
Equations
Instances For
Filtering disjunction: disjuncts can satisfy each other's presuppositions.
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
K&P two-dimensional disjunction (@cite{karttunen-peters-1979}).
Π(φ ∨ ψ) = (A(ψ) ∨ Π(φ)) ∧ (A(φ) ∨ Π(ψ)) A(φ ∨ ψ) = A(φ) ∨ A(ψ)
Uses the symmetric version from @cite{yagi-2025} Definition 2 (cf. @cite{kalomoiros-schwarz-2021} for experimental support of symmetry).
Equations
Instances For
Weak Kleene disjunction: undefined iff either operand undefined. Both disjuncts must be defined for the disjunction to be defined.
@cite{kleene-1952}: indet is absorbing for both ∧ and ∨.
Equations
Instances For
Flexible accommodation disjunction.
Each disjunct is evaluated only against worlds where its own presupposition holds. The overall presupposition is the disjunction of the individual presuppositions. This handles conflicting presuppositions (p ∧ q = ⊥): standard disjunction and filtering disjunction both fail for this case, but flexible accommodation correctly predicts presupposition p ∨ q and allows the disjunction to be false.
Formally, this is the static counterpart of @cite{yagi-2025}'s dynamic update.
Equations
Instances For
Flexible accommodation conjunction.
Each conjunct is evaluated only against worlds where its own presupposition
holds. Undefined conjuncts are vacuously true (the identity element for ∧),
so they don't constrain the result. Dual of orFlex.
Equations
Instances For
Belnap conjunction: assertive iff at least one conjunct is assertive. What it asserts = conjunction of assertive conjuncts' content.
@cite{belnap-1970}, (8). Contrast with classical PrProp.and (both
must be defined) and filtering PrProp.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.
@cite{belnap-1970}, (9).
Equations
Instances For
Belnap lift: uniform construction for conditional assertion connectives.
Given a binary Prop function f and its identity element id,
constructs a PrProp connective where:
- Defined (assertive) iff at least one operand is defined
- Assertion applies
fto each operand's content, substitutingidfor undefined operands (making them "silent")
@cite{belnap-1970}: 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
Strong entailment: p entails q at all worlds where both are defined.
Equations
- p.strongEntails q = ∀ (w : W), p.presup w → q.presup w → p.assertion 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 @cite{yagi-2025} 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, Core.Presupposition.PrProp.holds w p) ∧ ∃ w ∈ s, Core.Presupposition.PrProp.holds w q)
Instances For
Genuineness for disjunction (@cite{yagi-2025} Definition 8, after
@cite{zimmermann-2000}). 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 @cite{yagi-2025} §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 / orBelnap / 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.
Presupposition projection: get the presupposition as a W → Prop.
Equations
- p.projectPresup = p.presup
Instances For
Assertion extraction: get the assertion as a W → Prop.
Equations
- p.projectAssertion = p.assertion
Instances For
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. @cite{karttunen-1973} §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).
The filtering presupposition of impFilter and andFilter are identical.
This is the formal content of @cite{karttunen-1973} §8: the filtering
rules for if A then B and A and B coincide because both reduce to
p.presup ∧ (p.assertion → q.presup).
Filtering implication when antecedent false: result is true.
Filtering implication when antecedent true: depends on consequent.
Exclusive disjunction never filters: when either presupposition fails, the result is undefined. @cite{wang-davidson-2026}
When presuppositions conflict at w, K&P's presupposition entails the assertion: defined → true, so the disjunction can never be both defined and false. @cite{yagi-2025} §2.2
Flexible accommodation disjunction IS Belnap disjunction. The two concepts, developed independently (@cite{belnap-1970} vs @cite{geurts-2005}/@cite{aloni-2022}), produce identical truth conditions.
Flexible accommodation conjunction IS Belnap conjunction.
Extends orFlex_eq_orBelnap: the flex = Belnap identity holds for
all binary connectives, not just disjunction.
Belnap conjunction evaluates to Truth3.meetBelnap pointwise.
Belnap disjunction evaluates to Truth3.joinBelnap pointwise.
orFlex evaluates to Truth3.joinBelnap pointwise.
Corollary of orFlex_eq_orBelnap + eval_orBelnap.
andFlex evaluates to Truth3.meetBelnap pointwise.
orBelnap is the Belnap lift of (· ∨ ·) with identity False.
andBelnap is the Belnap lift of (· ∧ ·) with identity True.
orFlex is the Belnap lift of (· ∨ ·) with identity False.
Corollary: flexible accommodation = conditional assertion = Belnap lift,
all three for any binary connective.
andFlex 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 id is a right identity,
belnapLift returns the left operand's value: the right operand is
invisible.
When only the right operand is defined and id is a left identity,
belnapLift returns the right operand's value.
belnapLift is commutative when f is commutative.
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.
Prop3 → PrProp → Prop3 round-trip is the identity.
Genuineness is symmetric whenever the supplied disjunction connective is symmetric in its operands.
Asymmetric filtering disjunction: plain proposition ∨ PrProp.
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. @cite{karttunen-1973}, @cite{heim-1983}
Equations
- One or more equations did not get rendered due to their size.
Instances For
Embedding under a negative factive (e.g., "is unaware that").
"x is unaware that p" presupposes p and asserts ¬Bel_x(p). When the complement is a PrProp, the factive presupposes both the assertion and presupposition of its complement (i.e., full satisfaction), and asserts that the subject doesn't believe the assertive component.
@cite{heim-1992}: factives presuppose their complement. @cite{delpinal-bassi-sauerland-2024} §3: this is what makes pex solve the presupposed FC puzzle — the homogeneity presupposition projects through the factive independently of the belief content.
Equations
- complement.negFactive believes = { presup := fun (w : W) => Core.Presupposition.PrProp.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 @cite{karttunen-1973}'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 PrProp:
- asserts: ∀x ∈ S, assertion(φ(x))
- presupposes: ∀x ∈ S, presup(φ(x))
@cite{chemla-2009a}, @cite{fox-2013}, @cite{mayr-sauerland-2015}: presuppositions triggered in the scope of a universal quantifier tend to project universally.
Equations
- Core.Presupposition.PrProp.forallPr 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 still project universally, but the assertion is existential.
This models the pattern where ∃x ∈ S(φ(x)) presupposes ∀x ∈ S(presup(φ(x))) — the "universal projection from existential quantifier" pattern supported by @cite{chemla-2009a}.
Equations
- Core.Presupposition.PrProp.existsPrUniv 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
- Core.Presupposition.PrProp.negExistsPr S φ = { presup := fun (w : W) => ∀ (x : α), S x → (φ x).presup w, assertion := fun (w : W) => ¬∃ (x : α), S x ∧ (φ x).assertion w }
Instances For
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 → Bool— what is asserted of the chosen referent,
build the PrProp 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.