Documentation

Linglib.Core.Question.Relevance

Roberts (2012) QUD relevance — Prop predicates on Core.Question #

@cite{roberts-2012} @cite{groenendijk-stokhof-1984}

Mathlib-style Prop predicates with Decidable instances. Successor of an earlier Bool/List partiallyAnswers/questionEntails/isSubquestion/ moveRelevant API (now removed) that operated on a Hamblin list-of-alternatives Question type.

The predicates operate directly on Core.Question, ranging over alt P (the maximal-resolving propositions). For computability, an Question must expose a finite alternative-list witness via HasAltList. The canonical witness for a polar question is HasAltList.polar; for an arbitrary Hamblin issue, define a HasAltList instance via the ofList smart constructor (Core/Question/Hamblin.lean).

Decidability of σ ⊆ p for σ p : Set W is not automatic in mathlib (unlike Finset). The local instance Set.decidableSubsetOfFintype below plugs the gap: it derives Decidable (s ⊆ t) from [Fintype W] plus DecidablePred (· ∈ s) and DecidablePred (· ∈ t). Consumers building Set W from W → Bool predicates get the per-set DecidablePred for free.

Note that the [∀ p, Decidable (σ ⊆ p ∨ σ ⊆ pᶜ)] hypothesis on the instances below ranges over all p : Set W — Lean cannot synthesize this universally because DecidablePred (· ∈ p) is not derivable for arbitrary p. Consumers should either supply this hypothesis at the call site (typically via decide_partiallyAnswers_polar for polar questions) or invoke a specialized decision procedure tied to the specific alternative list.

def Core.Question.partiallyAnswers {W : Type u} (P : Question W) (σ : Set W) :

σ partially answers P: settles at least one alternative either positively (σ ⊆ p) or negatively (σ ⊆ pᶜ). @cite{roberts-2012} Def. 3a.

Equations
Instances For

    Question entailment: every alternative of P entails some alternative of Q. @cite{roberts-2012} Def. 8 (after @cite{groenendijk-stokhof-1984}). At the partition level this is QUD.refines: P refines Q iff knowing P's answer determines Q's answer.

    Equations
    Instances For
      def Core.Question.isSubquestion {W : Type u} (q parent : Question W) :

      q is a subquestion of parent: answering parent settles q.

      Equations
      Instances For
        def Core.Question.moveRelevant {W : Type u} (den qud : Question W) (subquestions : List (Question W)) :

        A discourse move den is relevant to the QUD if some alternative partially answers the QUD or any of the subquestions. The QUD-relevance idea traces to @cite{roberts-2012}; the present formulation is the one @cite{ippolito-kiss-williams-2025} ex. (16) assumption iii uses for discourse only's definedness condition.

        Equations
        Instances For

          The dual of questionEntails: every nonempty alternative of Q is covered by a nonempty alternative of P.

          On partition questions this is equivalent to questionEntails P Q; for general inquisitive Question W, the two directions are independent. The decision-relevance preservation theorem in Theories.Semantics.Questions.DecisionTheoretic requires this dual form, not questionEntails. The nonempty clause matches IsDecisionRelevant's requirement that witnessing alternatives be substantive — without it, -style questions trivially "cover" anything via the empty set.

          Equations
          • P.CoversAltsOf Q = qQ.alt, q.NonemptypP.alt, p.Nonempty p q
          Instances For

            Reflexivity / transitivity #

            Lattice → entailment #

            The workhorse: P ≤ Q in the inquisitive lattice (P.props ⊆ Q.props) implies questionEntails P Q. Every alternative of P resolves Q and therefore extends to a maximal Q-resolving proposition.

            theorem Core.Question.questionEntails_of_le {W : Type u} {P Q : Question W} (h : P Q) (hQ : Q.props.Finite) :

            P ≤ Q (inquisitive entailment) implies questionEntails P Q (Roberts question entailment). The bridge from the lattice order to the alternative-set quantification. Requires Q.props.Finite to guarantee maximal extensions exist.

            theorem Core.Question.questionEntails_of_le' {W : Type u} [Fintype W] [DecidableEq W] {P Q : Question W} (h : P Q) :

            Variant of questionEntails_of_le with [Fintype W] [DecidableEq W] discharging the finiteness hypothesis (via Fintype (Set W) then Set.toFinite). Convenient for finite-world studies.

            theorem Core.Question.isSubquestion_trans {W : Type u} {q r s : Question W} (hqr : q.isSubquestion r) (hrs : r.isSubquestion s) :
            theorem Core.Question.partiallyAnswers_imp_moveRelevant {W : Type u} {den qud : Question W} {a : Set W} (ha : a den.alt) (h : qud.partiallyAnswers a) :
            den.moveRelevant qud []

            A move whose alternative directly partially answers the QUD is relevant (no subquestions needed).

            Generic Set ⊆ Set decidability for finite types #

            Mathlib provides Set.Subset decidability only via Finset. For Question consumers that build alternatives as Set W from Bool-valued predicates, the gap is plugged by deriving from Fintype W plus per-set DecidablePred witnesses.

            @[implicit_reducible]
            instance Core.Question.Set.decidableSubsetOfFintype {α : Type u_1} [Fintype α] (s t : Set α) [DecidablePred fun (x : α) => x s] [DecidablePred fun (x : α) => x t] :
            Decidable (s t)
            Equations

            Decidability via HasAltList #

            class Core.Question.HasAltList {W : Type u} (P : Question W) :

            A finite-presentation witness for a Question's alternatives. The altList is a List (Set W) whose elements correspond bijectively (modulo set-equality) to alt P.

            • altList : List (Set W)

              The finite list of alternatives.

            • mem_altList (p : Set W) : p P.alt p altList P

              The list exhausts alt P.

            Instances
              @[implicit_reducible]
              instance Core.Question.partiallyAnswers_decidable {W : Type u} (P : Question W) [HP : P.HasAltList] (σ : Set W) [(p : Set W) → Decidable (σ p σ p)] :
              Decidable (P.partiallyAnswers σ)

              partiallyAnswers decides via the alternative list, given decidability of each alternative-subset / complement-subset check.

              Equations
              @[implicit_reducible]
              instance Core.Question.questionEntails_decidable {W : Type u} (P Q : Question W) [HP : P.HasAltList] [HQ : Q.HasAltList] [(p q : Set W) → Decidable (p q)] :
              Decidable (P.questionEntails Q)

              questionEntails decides via the alternative lists, given decidability of pairwise subset checks.

              Equations
              @[implicit_reducible]
              instance Core.Question.isSubquestion_decidable {W : Type u} (q parent : Question W) [q.HasAltList] [parent.HasAltList] [(p₁ p₂ : Set W) → Decidable (p₁ p₂)] :
              Decidable (q.isSubquestion parent)
              Equations
              @[implicit_reducible]
              instance Core.Question.moveRelevant_decidable {W : Type u} (den qud : Question W) (subquestions : List (Question W)) [HD : den.HasAltList] [(a : Set W) → Decidable (qud.partiallyAnswers a)] [(q : Question W) → (a : Set W) → Decidable (q.partiallyAnswers a)] :
              Decidable (den.moveRelevant qud subquestions)

              moveRelevant decides via the move's alternative list, given decidability of partial answerhood against the QUD and each subquestion.

              Equations

              HasAltList constructors #

              @[reducible]
              def Core.Question.HasAltList.polar {W : Type u} (p : Set W) [DecidablePred fun (x : W) => x p] (hne : p ) (hnu : p Set.univ) :

              HasAltList witness for a polar question whose proposition is non-trivial (neither nor Set.univ). The two alternatives are p and pᶜ. Not an instance: nontriviality must be supplied.

              Equations
              Instances For
                @[reducible]
                def Core.Question.HasAltList.ofList {W : Type u} (L : List (Set W)) (hL : L []) (hdisj : p₁L, p₂L, p₁ p₂Disjoint p₁ p₂) (hne : pL, p ) :

                HasAltList witness for a Hamblin question built from an explicit alternative list under pairwise disjointness + nonempty cells. The Hamblin construction Question.ofList L has alt = {p | p ∈ L} by alt_ofList_of_pairwise_disjoint_nonempty. Not an instance: the structural hypotheses must be supplied at the call site.

                Equations
                Instances For
                  @[reducible]
                  def Core.Question.HasAltList.ofListAntichain {W : Type u} (L : List (Set W)) (hL : L []) (hac : p₁L, p₂L, p₁ p₂¬p₁ p₂) (hne : pL, p ) :

                  HasAltList witness for a Hamblin question built from an explicit alternative list under the antichain condition (no cell contained in another) + nonempty cells. Weaker than HasAltList.ofList — cells may overlap as long as none is a subset of another distinct cell. Useful for Hamblin alternatives whose truth-sets share worlds (e.g., two polar question alternatives with overlap).

                  Equations
                  Instances For

                    Iff-rewrite lemmas for polar #

                    These reduce partiallyAnswers/questionEntails/moveRelevant on polar questions to plain Set operations, so consumers can rw and then decide (the residual Set subset checks fire from Set.decidableSubsetOfFintype plus per-set DecidablePred).

                    theorem Core.Question.partiallyAnswers_polar_iff {W : Type u} {p σ : Set W} (hne : p ) (hnu : p Set.univ) :
                    (polar p).partiallyAnswers σ σ p σ p
                    theorem Core.Question.questionEntails_polar_polar_iff {W : Type u} {p q : Set W} (hne_p : p ) (hnu_p : p Set.univ) (hne_q : q ) (hnu_q : q Set.univ) :
                    (polar p).questionEntails (polar q) (p q p q) (p q p q)
                    theorem Core.Question.moveRelevant_polar_iff {W : Type u} {p : Set W} {qud : Question W} {subquestions : List (Question W)} (hne : p ) (hnu : p Set.univ) :
                    (polar p).moveRelevant qud subquestions (qud.partiallyAnswers p Qsubquestions, Q.partiallyAnswers p) qud.partiallyAnswers p Qsubquestions, Q.partiallyAnswers p