QUD (Question Under Discussion) @cite{roberts-2012} #
A QUD partitions the meaning space into equivalence classes. Two meanings are equivalent under a QUD if they "answer the question the same way."
The file also contains inquisitive semantics core types (InfoState, Issue)
and @cite{roberts-2012}'s formalization of question entailment, subquestions, and
discourse move relevance.
A QUD partitions the meaning space via an equivalence relation. Two meanings are equivalent if they "answer the question the same way."
- sameAnswer : M → M → Bool
Are two meanings equivalent under this QUD?
Equivalence must be reflexive
Equivalence must be symmetric
- trans (m1 m2 m3 : M) : self.sameAnswer m1 m2 = true → self.sameAnswer m2 m3 = true → self.sameAnswer m1 m3 = true
Equivalence must be transitive
- name : String
Name for display/debugging
Instances For
Reflexivity is guaranteed by construction
Symmetry is guaranteed by construction
Transitivity is guaranteed by construction
Convert QUD's equivalence relation to a Mathlib Setoid.
This enables Finpartition.ofSetoid for partition-based expected utility
decomposition, replacing ~200 lines of custom foldl arithmetic.
Instances For
Equations
- q.decidableRel_toSetoid a b = inferInstanceAs (Decidable (q.sameAnswer a b = true))
Trivial QUD: all meanings are equivalent (speaker doesn't care about this dimension).
Equations
- QUD.trivial = { sameAnswer := fun (x x_1 : M) => true, refl := ⋯, symm := ⋯, trans := ⋯, name := "trivial" }
Instances For
Compose two QUDs: equivalent iff equivalent under both.
Equations
Instances For
Two meanings are in the same cell iff they have the same answer.
Build QUD from a projection function using DecidableEq on the codomain.
Avoids the need for BEq + LawfulBEq; useful when the codomain only derives
DecidableEq (which is common for inductive types in Lean 4).
Example: QUD.ofDecEq MagriWorld.grade partitions by grade value.
Equations
Instances For
Build QUD from a projection function with BEq/LawfulBEq codomain.
This is the primary constructor for QUDs over types with Boolean equality.
exact, binaryPartition, and PrecisionProjection.applyToQUD all
delegate to this.
Equations
- QUD.ofProject f name = { sameAnswer := fun (m1 m2 : M) => f m1 == f m2, refl := ⋯, symm := ⋯, trans := ⋯, name := name }
Instances For
sameAnswer for projection QUD iff same image under f.
QUD that cares only about first component
Equations
- ProductQUD.fst = QUD.ofProject Prod.fst "fst"
Instances For
QUD that cares only about second component
Equations
- ProductQUD.snd = QUD.ofProject Prod.snd "snd"
Instances For
Precision projection for numeric meanings (approximate vs exact).
- round : N → N
Round/approximate the value
- name : String
Name
Instances For
Exact precision: no rounding
Equations
- PrecisionProjection.exact = { round := id, name := "exact" }
Instances For
Round to nearest multiple of k
Equations
Instances For
Compose precision with a QUD. Delegates to QUD.ofProject.
Equations
- prec.applyToQUD proj = QUD.ofProject (prec.round ∘ proj) prec.name
Instances For
An information state: worlds compatible with current information.
In standard Inquisitive Semantics, an info state is a SET of worlds. Here we represent it as a characteristic function σ : W → Bool.
Semantically: σ w = true means "world w is compatible with the information". The empty info state (σ = λ_ => false) represents inconsistent information.
Equations
- Discourse.InfoState W = (W → Bool)
Instances For
The absurd/inconsistent info state: no worlds are compatible.
Equations
Instances For
The trivial info state: all worlds are compatible (total ignorance).
Equations
Instances For
Info state σ supports proposition p iff σ ⊆ ⟦p⟧.
This is the fundamental relation in Inquisitive Semantics: σ ⊨ p (σ supports p) iff every world in σ makes p true.
If σ is empty, it supports every proposition (ex falso quodlibet).
Instances For
Propositional entailment: p entails q iff every p-world is a q-world.
Equivalently: the info state ⟦p⟧ supports ⟦q⟧ over all worlds.
Equations
- Discourse.propEntails p q worlds = worlds.all fun (w : W) => !p w || q w
Instances For
An issue: set of information states that resolve the question.
In full Inquisitive Semantics, issues must be:
- Downward-closed: if σ resolves and σ' ⊆ σ, then σ' resolves
- Non-empty: the absurd state ∅ resolves every issue
Here we represent an issue by its maximal (largest) resolving states, called alternatives. Downward closure is then implicit.
This representation aligns with Hamblin semantics: the alternatives are the possible complete answers.
The maximal resolving states (alternatives)
Instances For
Check if an info state resolves the issue.
σ resolves Q iff σ is contained in some alternative. (Downward closure: any sub-state of an alternative also resolves.)
Equations
- q.resolves σ worlds = q.alternatives.any fun (alt : Discourse.InfoState W) => σ.subset alt worlds
Instances For
An issue is inquisitive if it has multiple alternatives.
Non-inquisitive issues have exactly one alternative (assertions). Inquisitive issues genuinely ask for information.
Equations
- q.isInquisitive = decide (q.alternatives.length > 1)
Instances For
An issue is informative if not all states resolve it.
Non-informative issues are resolved by the trivial state (tautologies). Informative issues rule out some possibilities.
Equations
- q.isInformative worlds = !q.resolves Discourse.trivialState worlds
Instances For
The empty issue: resolved by any info state.
Equations
- Discourse.Issue.empty = { alternatives := [Discourse.trivialState] }
Instances For
The absurd issue: resolved only by the absurd state.
Equations
- Discourse.Issue.absurd = { alternatives := [Discourse.absurdState] }
Instances For
A proposition is a mention-some answer to Q: it resolves Q by settling at least one alternative without settling all of them.
In the decision-theoretic setting, mention-some answerhood is defined
relative to a decision problem (see Core.Agent.DecisionTheory.isMentionSome).
This definition is the purely logical version from inquisitive semantics:
an answer settles Q partially.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A proposition is a mention-all answer to Q: it settles all alternatives (resolves Q completely by being contained in every alternative).
Equations
- q.isMentionAllAnswer answer worlds = q.alternatives.all fun (alt : Discourse.InfoState W) => answer.subset alt worlds
Instances For
Number of alternatives (possible complete answers).
Equations
Instances For
Union of two issues (disjunction): Q ∪ Q'.
Equations
- q.union q' = { alternatives := q.alternatives ++ q'.alternatives }
Instances For
Create an Issue from a list of alternatives (direct construction).
Equations
- Discourse.Issue.ofAlternatives alts = { alternatives := alts }
Instances For
The informational content of an issue: the union of all alternatives.
This is what the issue "presupposes" — the proposition that SOME alternative is true.
Equations
- q.infoContent w = q.alternatives.any fun (alt : Discourse.InfoState W) => alt w
Instances For
The highlighted/informational content of an issue. Alias for infoContent.
In the standard inquisitive semantics framework, the informational content (union of all alternatives) IS the highlighted content for declarative sentences. We keep this alias because @cite{ippolito-kiss-williams-2025} Def. 16 uses "highlighted content" terminology in defining the at-issue content of discourse only.
Equations
- q.highlighted = q.infoContent
Instances For
Polar questions are always inquisitive (two alternatives).
The empty issue is not inquisitive.
A proposition p partially answers an issue q if p entails at least one of q's alternatives.
@cite{roberts-2012}: a partial answer to Q is a proposition that, when added to the common ground, resolves at least one alternative. We use the strong version: p entails (is a subset) some alternative of q.
Equations
- Discourse.partiallyAnswers p q worlds = q.alternatives.any fun (alt : Discourse.InfoState W) => Discourse.propEntails p alt worlds
Instances For
Question q₁ entails question q₂ iff every alternative of q₁ entails some alternative of q₂.
@cite{roberts-2012} Def. 8 (following @cite{groenendijk-stokhof-1984}:16): "One interrogative q₁ entails another q₂ iff every proposition that answers q₁ answers q₂ as well."
At the partition level, this corresponds to QUD.refines (Core/Partition.lean):
if Q refines q, then knowing Q's answer determines q's answer.
Equations
- One or more equations did not get rendered due to their size.
Instances For
q is a subquestion of Q iff Q entails q: answering Q yields a complete answer to q.
@cite{roberts-2012} Def. 8–9. At the partition level, this is QUD.refines:
the parent question's partition is a refinement of the subquestion's.
Equations
- Discourse.isSubquestion q parent worlds = Discourse.questionEntails parent q worlds
Instances For
A discourse move (assertion or question) is relevant to the QUD if it partially answers the QUD or a subquestion.
@cite{roberts-2012} Def. 15 / @cite{ippolito-kiss-williams-2025} assumption iii, p. 225: "S is relevant to QUD if S is either a subquestion of QUD or an answer to a subquestion q of QUD."
For assertions (single-alternative issues): checks whether the propositional content partially answers the QUD or a subquestion. For questions (multi-alternative issues): checks whether any alternative partially answers the QUD or a subquestion — resolving the question would inform a subquestion.
Equations
- One or more equations did not get rendered due to their size.
Instances For
propEntails is reflexive.
questionEntails is reflexive: every question entails itself.
Subquestion is reflexive: every question is a subquestion of itself.
Partial answerhood of an alternative implies move relevance.
If some alternative of a move partially answers the QUD directly, the move is relevant (even without subquestions).