Discourse State #
Formalizes the discourse state model from @cite{farkas-bruce-2010} "On Reacting to Assertions and Polar Questions", which provides a unified framework for understanding how conversation advances through assertions and questions.
Key Concepts #
Farkas & Bruce decompose the discourse state into five components:
| Component | Description |
|---|---|
| dcS | Speaker's discourse commitments (not yet joint) |
| dcL | Listener's discourse commitments |
| cg | Common ground (joint commitments) |
| table | Stack of issues under discussion |
| ps | Projected set (derivable from cg + table) |
Connection to RSA Models #
Current RSA models for presupposition projection use the BeliefState slot
for different components of the discourse state:
- @cite{scontras-tonhauser-2025}: BeliefState = dcS (speaker's private assumptions)
- @cite{warstadt-2022} / @cite{qing-goodman-lassiter-2016}: BeliefState = cg (common ground)
This module provides explicit types for these components, making the theoretical distinctions clear while maintaining computational compatibility with existing RSA infrastructure.
Architecture note #
§ Bridge theorems (formerly Theories/Dialogue/FarkasAdapter.lean,
dissolved per CLAUDE.md "no bridge files"): assertion vs acceptance
properties — assert_adds_to_dcS, assert_preserves_cg,
assert_not_stable, accept_adds_to_cg, accept_restores_stability.
Conversational participants.
Following Farkas & Bruce, we model two discourse roles: speaker and listener. These roles are relative to a given utterance (they can swap between turns).
- speaker : Participant
- listener : Participant
Instances For
Equations
- Dialogue.FarkasBruce.instDecidableEqParticipant x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Equations
Sentence forms (clause types) that determine discourse effects.
Following Farkas & Bruce:
- Declaratives default-commit the speaker to the content
- Interrogatives raise an issue without commitment
- declarative : SentenceForm
- interrogative : SentenceForm
Instances For
Equations
- Dialogue.FarkasBruce.instDecidableEqSentenceForm x✝ y✝ = if h : x✝.ctorIdx = y✝.ctorIdx then isTrue ⋯ else isFalse ⋯
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
An issue on the conversational table.
In Farkas & Bruce's model, the table is a stack of issues that need to be resolved before the conversation can return to a stable state.
For polar questions, alternatives is [p, ¬p].
For wh-questions, alternatives is the set of possible answers.
- form : SentenceForm
The form of the sentence that raised this issue
- alternatives : List (Set W)
The proposition(s) at issue
- source : Participant
Who raised this issue
Instances For
Discourse State following @cite{farkas-bruce-2010}.
This structure captures the conversational state at a given point in time. It's parameterized by the World type for type-safe propositions.
Note: We omit ps (projected set) because it's derivable from cg and table.
The projected set contains worlds compatible with cg and at least one complete
answer to each issue on the table.
- dcS : List (Set W)
Speaker's discourse commitments (what speaker takes for granted)
- dcL : List (Set W)
Listener's discourse commitments
- cg : List (Set W)
Common ground (joint commitments)
- table : List (RaisedIssue W)
The table: stack of issues under discussion
Instances For
Empty/initial discourse state.
At the start of a conversation, there are no commitments and no issues on the table. This is a "stable" state in F&B's terminology.
Equations
- Dialogue.FarkasBruce.DiscourseState.empty = { dcS := [], dcL := [], cg := [], table := [] }
Instances For
Convert common ground to a ContextSet (worlds where all cg props hold).
Bridges to the existing Core.CommonGround infrastructure as the
fold-intersection of the cg list.
Equations
- ds.toContextSet = List.foldr (fun (x1 x2 : Core.CommonGround.ContextSet W) => x1 ∩ x2) Set.univ ds.cg
Instances For
World compatibility: thin alias for membership in toContextSet.
Equations
- ds.compatible w = (w ∈ ds.toContextSet)
Instances For
Check if the table is empty (stable state).
A discourse state is stable when the table is empty, meaning all issues have been resolved and there's nothing pending.
Instances For
Check if a world is compatible with speaker's commitments.
This is what @cite{scontras-tonhauser-2025} call "speakerCredence": the speaker only considers worlds compatible with their private assumptions.
Equations
- ds.speakerCompatible w = ∀ p ∈ ds.dcS, p w
Instances For
Check if a world is compatible with listener's commitments.
Equations
- ds.listenerCompatible w = ∀ p ∈ ds.dcL, p w
Instances For
Add a proposition to the common ground.
This models acceptance of an assertion: the proposition moves from a participant's discourse commitments to the joint common ground.
Instances For
Add a proposition to speaker's discourse commitments.
This models the speaker asserting a proposition, which commits the speaker but doesn't yet affect the common ground.
Instances For
Add a proposition to listener's discourse commitments.
Instances For
Push an issue onto the table.
This models raising a question or making an assertion (which implicitly raises the issue of whether the content should be accepted).
Equations
Instances For
Pop an issue from the table (when resolved).
Instances For
Effect of a declarative assertion.
Following F&B: an assertion of p by the speaker:
- Adds p to dcS (speaker's commitments)
- Pushes the issue {p} onto the table
The listener can then respond by:
- Accepting (adds p to dcL and cg, pops table)
- Rejecting (adds ¬p to dcL, creating a conflict)
- Neither (leaving p "on the table")
Equations
- ds.assertDeclarative p = (ds.addToDcS p).pushIssue { form := Dialogue.FarkasBruce.SentenceForm.declarative, alternatives := [p] }
Instances For
Effect of a polar question.
Following F&B: a polar question about p:
- Pushes the issue {p, ¬p} onto the table
- Does not add commitments (questions don't commit)
Equations
- ds.askPolarQuestion p = ds.pushIssue { form := Dialogue.FarkasBruce.SentenceForm.interrogative, alternatives := [p, pᶜ] }
Instances For
Accept the top issue on the table.
This models the listener accepting an assertion (adding to dcL and cg) or answering a question (adding the chosen alternative to cg).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Convert the common ground component to a CG structure.
Instances For
Create a discourse state from a CG structure.
Sets cg, dcS, and dcL all to the CG propositions (everyone agrees).
Equations
- Dialogue.FarkasBruce.DiscourseState.fromCG cg = { dcS := cg.propositions, dcL := cg.propositions, cg := cg.propositions, table := [] }
Instances For
Connection to RSA Presupposition Models #
@cite{scontras-tonhauser-2025} @cite{warstadt-2022} @cite{qing-goodman-lassiter-2016}
RSA models for presupposition projection use different components of the discourse state as the latent variable that L1 infers:
@cite{scontras-tonhauser-2025}: Inferring dcS #
The BeliefState type represents different possible values of dcS (what
the speaker privately assumes). L1 infers which dcS best explains the
speaker's utterance choice.
The speaker may assume things not yet in the common ground, which is why S&T prefer "private assumptions" over "common ground."
@cite{warstadt-2022} / @cite{qing-goodman-lassiter-2016}: Inferring cg #
The Context type represents different possible values of cg (what's
jointly accepted). L1 infers which cg state the speaker is acting on.
Accommodation is updating one's model of the common ground.
Assertion-vs-acceptance properties for assertDeclarative and
acceptTop. These were previously hosted in a separate
FarkasAdapter.lean "bridge file"; CLAUDE.md prohibits bridge
files, so the content lives here alongside the operators it
characterizes.
Assertion adds to dcS, not directly to cg. This is the key F&B insight: assertion first commits the speaker, then the listener can accept (moving to cg) or reject.
Assertion does not immediately change the common ground.
Assertion is not stable: it pushes an issue onto the table.
Acceptance moves the proposition to the common ground.
After acceptance, the state returns to stable (table is popped).
F&B states project to a context set via cg-only intersection
(toContextSet). Note: this projection deliberately ignores
dcS/dcL and table — F&B's whole point is that assertion
operates on those layers without (yet) reaching cg. As a
consequence, F&B does NOT instantiate Assertable (assertion
doesn't narrow the projected context set in one step). See the
Assertable.lean module docstring.