The update algebra #
Dynamic meanings come in two forms: a relational update Update S relates
input states to output states, and a context change potential CCP S
transforms sets of states as wholes. lift sends an update to its image
transformer, lower recovers it, and the distributive transformers are
exactly the relational images. A satisfaction relation induces the standard
eliminative fragment (updateFromSat), which PLA, DRT, and DPL instantiate.
The monadic reading of the pair is in Collapse.lean.
Main definitions #
Update S,Condition S: relations on states, properties of states.Update.test,Update.neg,Update.seq,Update.impl,Update.disj,Update.closure: the relational connectives.Update.IsTest: updates that never change the state.CCP.guard,CCP.might,CCP.must,CCP.negTest: whole-state tests.CCP.IsEliminative,CCP.IsTest,CCP.IsDistributive,CCP.IsClassical: the classification of transformers.CCP.up,CCP.down: the content–update coercions.lift,lower: the bridge between the two forms.supportOf,contentOf,updateFromSat,dynamicEntailsOf: the layer a satisfaction relation induces.
Main results #
Update Sis aMonoidand anIsQuantaleunder sequencing (scoped); tests are its subidentities (Update.isTest_iff_le_one).Update.IsTest.eq_test_closure,CCP.IsTest.eq_guard: a test is the test of its truth condition, a guard of its acceptance condition.lower_lift,lift_lower:liftandlowerare mutually inverse on distributive transformers.CCP.isClassical_iff_up_down_eq,exists_eq_lift_test_iff: the classical transformers are exactly the static ones —upof their own content, the lifted test filters;CCP.might_not_isDistributiveseparates.support_iff_update_eq: support is being a fixed point of the update.
Implementation notes #
The algebraic instances are scoped: Update S and CCP S abbreviate
function types. updateFromSat is the literal filter rather than
lift (test _) so that instantiating frameworks connect to it by rfl.
Update.neg does not validate double-negation elimination and CCP.negTest
is not CCP.neg; the framework-specific repairs and comparisons live in the
studies. [GS91a]'s entailment notions live in
Studies/GroenendijkStokhof1991.lean.
References #
- J. Groenendijk and M. Stokhof, Dynamic Predicate Logic
- H. Kamp and U. Reyle, From Discourse to Logic
- R. Muskens, Combining Montague Semantics and Discourse Representation
- I. Heim, The Semantics of Definite and Indefinite Noun Phrases
- I. Heim, On the Projection Problem for Presuppositions
- J. Groenendijk and M. Stokhof, Two Theories of Dynamic Semantics
- F. Veltman, Defaults in Update Semantics
- R. Muskens, J. van Benthem, and A. Visser, Dynamics
- J. van Benthem, Essays in Logical Semantics
- D. Rothschild and S. Yalcin, Three Notions of Dynamicness in Language
- A. Gillies, On Groenendijk and Stokhof's "Dynamic Predicate Logic"
The relational face #
A dynamic meaning as a binary relation between input and output states.
Equations
- DynamicSemantics.Update S = (S → S → Prop)
Instances For
A static property of a single state; test embeds conditions into updates.
Equations
- DynamicSemantics.Condition S = (S → Prop)
Instances For
The connectives #
test C checks C without changing the state.
Equations
- DynamicSemantics.Update.test C i j = (i = j ∧ C j)
Instances For
The update quantale #
Update S is a quantale: sequencing distributes over arbitrary unions of
updates, so mathlib's residuation vocabulary applies (scoped).
Tests are the subidentities #
A test is the test of its own closure ([GS91a]'s
Fact 6); the transformer-face mirror is CCP.IsTest.eq_guard.
The transformer face #
A context change potential: a transformer of whole information states.
Equations
- DynamicSemantics.CCP S = (Set S → Set S)
Instances For
CCP S is a monoid under seq (scoped; see the implementation notes).
Equations
- DynamicSemantics.CCP.instMonoid = { mul := DynamicSemantics.CCP.seq, mul_assoc := ⋯, one := id, one_mul := ⋯, mul_one := ⋯, npow_zero := ⋯, npow_succ := ⋯ }
Instances For
Whole-state tests #
guard C passes a state through iff it satisfies C, else crashes to ∅.
Equations
- DynamicSemantics.CCP.guard C s = {p : S | p ∈ s ∧ C s}
Instances For
A guard whose condition holds passes the state through.
A guard whose condition fails crashes to ∅.
negTest φ passes iff φ crashes — a whole-state consistency test, not
the set-difference neg (see the implementation notes).
Equations
- φ.negTest = DynamicSemantics.CCP.guard fun (s : Set S) => ¬(φ s).Nonempty
Instances For
might φ passes iff φ yields a nonempty result ([Vel96]).
Equations
- φ.might = DynamicSemantics.CCP.guard fun (s : Set S) => (φ s).Nonempty
Instances For
must φ passes iff φ returns its input unchanged ([Vel96]).
Equations
- φ.must = DynamicSemantics.CCP.guard fun (s : Set S) => φ s = s
Instances For
Classification #
A transformer is eliminative if it never adds possibilities.
Equations
- u.IsEliminative = (u ≤ id)
Instances For
The identity is eliminative.
Sequencing preserves eliminativity.
A transformer is a test if it passes its input through or crashes to
∅ — [Vel96]'s tests, Update.IsTest one carrier up.
Equations
- u.IsTest = ∀ (s : Set S), u s = s ∨ u s = ∅
Instances For
Tests are eliminative.
A test is the guard of its own acceptance condition — the mirror of
Update.IsTest.eq_test_closure.
A transformer is distributive if it acts per-element:
φ s = ⋃ i ∈ s, φ {i} — equivalently, it preserves arbitrary joins
(Collapse.lean's isDistributive_iff_map_sSup).
Equations
- φ.IsDistributive = ∀ (s : Set S), φ s = {p : S | ∃ i ∈ s, p ∈ φ {i}}
Instances For
The classical fragment #
The static update a content determines: intersection with it.
Equations
- DynamicSemantics.CCP.up c s = s ∩ c
Instances For
The content an update determines: the indices whose singleton it updates successfully.
Equations
- u.down = {i : S | (u {i}).Nonempty}
Instances For
On eliminative updates, content is acceptance on singletons.
An update is classical if it is eliminative and distributive.
Equations
- u.IsClassical = (u.IsEliminative ∧ u.IsDistributive)
Instances For
Static updates are classical.
might is not distributive: a whole-state test can pass where every
per-singleton test fails.
The bridge #
The relational image: lift R σ collects the R-outputs of the elements
of σ — the strongest postcondition of [MvBV11].
Equations
- DynamicSemantics.lift R σ = {j : S | ∃ i ∈ σ, R i j}
Instances For
lower φ i j holds iff j is an output of φ on the singleton {i}.
Equations
- DynamicSemantics.lower φ i j = (j ∈ φ {i})
Instances For
lift (test C) is the filter by C.
Lifted transformers are distributive.
lift is a right inverse of lower on distributive transformers.
Test filters #
lift (test C) is eliminative: it only removes elements.
Composing test filters conjoins the conditions.
Test filters are idempotent.
Contradictory test filters compose to the empty state.
Covering test filters partition the state.
The static fragment #
Van Benthem's additivity ([vB86]; [RY16]; [Gil22]): the classical transformers are exactly the lifted test filters. Update semantics keeps eliminativity but its whole-state tests break distributivity; DPL's random reassignment does the reverse ([GS91b], §4).
up of a condition's extension is its lifted test filter.
A transformer is a lifted test filter iff it is classical.
The classical updates are exactly the static ones: up ∘ down is
their normal form.
The satisfaction layer #
A satisfaction relation sat : S → φ → Prop induces the standard eliminative
fragment, and the layer reduces to mathlib's intersection–subset API: the
induced update intersects with content (definitionally), support is inclusion
in content, and dynamic entailment is content inclusion
(dynamicEntailsOf_iff_content_subset). PLA, DRT, and DPL instantiate
sat.
The content of a formula: all possibilities satisfying it.
Equations
- DynamicSemantics.contentOf sat ψ = {p : S | sat p ψ}
Instances For
s supports ψ when every possibility in s satisfies ψ: inclusion
in content.
Equations
- DynamicSemantics.supportOf sat s ψ = (s ⊆ DynamicSemantics.contentOf sat ψ)
Instances For
Filtering a set by a predicate is monotone.
Filtering a set by a predicate is eliminative.
The update a satisfaction relation induces: filter to the satisfying possibilities (see the implementation notes on the choice of body).
Equations
- DynamicSemantics.updateFromSat sat ψ s = {p : S | p ∈ s ∧ sat p ψ}
Instances For
Induced updates are eliminative.
updateFromSat is monotone in the state argument.
Updating is intersecting with the content.
The induced update is the lift of the satisfaction test.
Induced updates are distributive.
Support is being a fixed point of the update ([Dek12]'s Proper Support).
Dynamic entailment: updating with ψ₁ always yields a state supporting
ψ₂.
Equations
- DynamicSemantics.dynamicEntailsOf sat ψ₁ ψ₂ = ∀ (s : Set S), DynamicSemantics.supportOf sat (DynamicSemantics.updateFromSat sat ψ₁ s) ψ₂
Instances For
Dynamic entailment is content inclusion — the layer's consequence relation is classical entailment on contents.
Dynamic entailment is acceptance consequence of the induced updates.
Dynamic entailment is reflexive.
Dynamic entailment is transitive.