Documentation

Linglib.Theories.Dialogue.CommitmentSpace

Commitment Space Semantics #

@cite{krifka-2015} @cite{cohen-krifka-2014}

Krifka's commitment-space framework: the discourse state is a tree — the root (√C) is the current CG holding speaker-indexed commitments S⊢φ, and continuations are proposed future states from questions.

Per-agent commitment slates track individual public commitments, enabling the commitment/belief separation (lying, hedging).

Speaker indexing #

The paper's central primitive is the Frege turnstile S⊢φ (p. 332): assertion is responsibility-undertaking, so what enters the CG is "speaker S is committed to the truth of φ", not bare φ. The substrate uses Core.Discourse.Commitment.IndexedCommitment to model this — the root holds indexed commitments, projected to a flat context set via IndexedCommitment.toCommitment for the CG-as-set view.

Sibling files #

Theories/Dialogue/LayeredAssertion.lean houses Krifka 2020's TP/JP/ComP/ActP layered-clause framework. The two files are independent (neither imports the other); study files target whichever fits.

Substrate scope #

The substrate is two-role discourse with doxastic/preferential force. Out of scope (would need substrate extensions):

Citation discipline #

Equation/page citations to @cite{krifka-2015} throughout this file (eqs. 1, 2, 3, 5, 6, 7, 9, 10, 14, 23, 27, 29, 30, 38, 39, 44, 45 with their respective pages 329-343) were verified against the SALT 25 paper PDF when added (cf. CHANGELOG entries 0.230.652–0.230.654). Flag drift on re-audit if substrate operators are renamed or restructured.

@[reducible, inline]

Agent type for two-participant discourse — abbreviation for the framework-agnostic Core.Discourse.DiscourseRole. The alias name KAgent mirrors Krifka's S₁/S₂ notation; semantically it IS DiscourseRole (no separate inductive, no bridge function).

Equations
Instances For
    structure Dialogue.Krifka.CommitmentSpace (W : Type u_1) (G : Type u_2) :
    Type (max u_1 u_2)

    A commitment space (@cite{krifka-2015}, eq. (2), p. 329).

    A set of commitment states organized as root + continuations:

    • root (√C): the current commitment state — a list of speaker-indexed commitments S⊢φ (IndexedCommitment.commit) or refusals ¬S⊢φ (IndexedCommitment.refuse). All worlds compatible with the commit-projected propositions are "live".
    • continuations: proposed future states, each extending the root with additional commitments. Added by questions, resolved by acceptance (one becomes the new root) or rejection (one is pruned).

    Correspondence to Krifka's set-theoretic model #

    Krifka's eq. (2) p. 329: C is a commitment space if C is a set of commitment states, ∩C ≠ ∅ and ∩C ∈ C. The set of states represented by this structure is root :: continuationsroot IS √C (= ∩C, always present as a state in C), and continuations are the additional non-root states. Krifka's {√C} ∪ X operands in eqs. (23) and (27) correspond to keeping root as the always-present floor while unioning state-sets into continuations. The rejectFirst operation realises Krifka's ℜ retraction (eq. 10, p. 331): pruning a proposed continuation leaves √C as the only remaining floor, which is exactly the {√C} disjunct.

    Krifka's key operations #

    • Assert C + S⊢φ (eq. (1) and (3), p. 329): adds commit S φ to root and continuations, narrowing every state.
    • Monopolar question C + ?φ (eq. (27), p. 336): {√C} ∪ (C + S₂⊢φ) — preserve root, propose addressee committing to φ.
    • Bipolar question (eq. (23), p. 335): {√C} ∪ (C + S₂⊢φ) ∪ (C + S₂⊢¬φ) — two non-contradictory siblings.
    • Accept: take a continuation as the new root.
    • Reject: prune a continuation (= return to {√C} disjunct).

    The tree structure captures the assertion/question asymmetry: assertions modify the root (the CG changes), while questions only add continuations (the CG is preserved until acceptance).

    • Root commitment state √C: indexed commitments currently in the CG. The grade type G lets the same shape host binary (G = Prop), distributional (G = ℝ), or credence-bounded (G = ℚ) commitments.

    • continuations : List (List (Core.Discourse.Commitment.IndexedWeightedCommitment W G))

      Proposed future states. Questions add these; acceptance promotes one to root. Each continuation is a list of indexed commitments that extends (narrows) the root.

    Instances For

      The empty commitment space: no commitments, no continuations.

      Equations
      Instances For

        Assert weight weight on behalf of committer (@cite{krifka-2015}, eq. (1) and (3), p. 329).

        C + S⊢φ: adds commit committer force weight to the root and to every continuation. Any accepted continuation will also entail the weight (with the speaker index recorded). The force defaults to .doxastic (Krifka's standard declarative case); pass .preferential for the @cite{lauer-2013} imperative-as-PEP case.

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For

          Monopolar question: propose that the addressee commit to weight weight (@cite{krifka-2015}, eq. (27), p. 336).

          C + ?φ = {√C} ∪ (C + S₂⊢φ)

          The root stays unchanged (CG preserved). A new continuation is added where the addressee has committed to weight. Existing continuations are also extended by the addressee-commitment. The committer is hardcoded to .addressee per Krifka's discussion of (30), p. 337: "the ? head identifies the committer as S₂".

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For

            High-negation polar question (@cite{krifka-2015}, §4 around eq. (39), p. 340).

            Didn't I win? = monopolar question with negation at the ComP layer (denegation of the addressee's commitment to φ). Proposes that the addressee NOT commit to φ — pragmatically weaker than committing to ¬φ.

            Polymorphic in G: the refuse constructor's content is always W → Prop (a meta-fact about the agent's slate, not a graded weight), so this operator works for any grade type.

            Per @cite{krifka-2015} p. 340: "adding ¬S₂⊢φ to the commitment space precludes commitment to φ, but is compatible with commitment to ¬φ. Hence ¬S₂⊢φ is pragmatically weaker than S₂⊢¬φ."

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For

              The space has no open continuations (no unresolved proposals).

              Renamed from isSettled — Krifka has no stability/settledness notion in the paper; questions just "restrict legal continuations" (p. 335). The right characterization of this state is structural, not pragmatic.

              Equations
              Instances For
                @[implicit_reducible]
                Equations
                • One or more equations did not get rendered due to their size.

                Accept the first continuation: it becomes the new root. The CG is updated to the accepted proposal's content.

                Equations
                Instances For

                  Reject the first continuation: prune it. The CG is unchanged; the proposal is discarded.

                  Equations
                  Instances For
                    def Dialogue.Krifka.CommitmentSpace.denegate {W : Type u_1} {G : Type u_2} (actMarker : Core.Discourse.Commitment.IndexedWeightedCommitment W GProp) [DecidablePred actMarker] (cs : CommitmentSpace W G) :

                    Denegate a speech act ~A. Originally introduced by @cite{cohen-krifka-2014} §2 (around eq. (26), p. 51, with full development through eqs. 31–38, pp. 52–53); inherited by @cite{krifka-2015} eq. (5), p. 330.

                    C + ~A = C — [C + A]: the result keeps √C and prunes the legal continuations that would arise from performing the act A. The caller supplies a Prop-valued predicate actMarker identifying the commitment that A would add to continuations, plus a DecidablePred instance for the filter. We keep continuations that do NOT contain a matching commitment.

                    Concrete example: denegate cs (fun ic => ic matches ASSERT(speaker, doxastic, φ)) is ~ASSERT(φ) — the GRANT(¬φ) of @cite{cohen-krifka-2014} eq. (38).

                    Polymorphic in G. The predicate-based formulation avoids the soundness issue of trying to decide equality on W → G (generally undecidable for infinite W).

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      @[simp]
                      theorem Dialogue.Krifka.CommitmentSpace.denegate_preserves_root {W : Type u_1} {G : Type u_2} (cs : CommitmentSpace W G) (actMarker : Core.Discourse.Commitment.IndexedWeightedCommitment W GProp) [DecidablePred actMarker] :
                      (denegate actMarker cs).root = cs.root

                      Denegation preserves the root (CG unchanged) — Krifka 2015 p. 330: "denegation does not change the root of the commitment space, but prunes its legal developments."

                      theorem Dialogue.Krifka.CommitmentSpace.denegate_idempotent {W : Type u_1} {G : Type u_2} (cs : CommitmentSpace W G) (actMarker : Core.Discourse.Commitment.IndexedWeightedCommitment W GProp) [DecidablePred actMarker] :
                      denegate actMarker (denegate actMarker cs) = denegate actMarker cs

                      Denegation is idempotent: filtering twice with the same marker is the same as filtering once (List.filter_filter over the same predicate). Worth noting because Krifka's set-difference semantics has the same property: (C - X) - X = C - X.

                      theorem Dialogue.Krifka.CommitmentSpace.denegate_continuation_count_le {W : Type u_1} {G : Type u_2} (cs : CommitmentSpace W G) (actMarker : Core.Discourse.Commitment.IndexedWeightedCommitment W GProp) [DecidablePred actMarker] :
                      (denegate actMarker cs).continuations.length cs.continuations.length

                      Denegation never grows the continuation list — List.filter is length-monotone.

                      theorem Dialogue.Krifka.CommitmentSpace.denegate_no_match_eq_self {W : Type u_1} {G : Type u_2} (cs : CommitmentSpace W G) (actMarker : Core.Discourse.Commitment.IndexedWeightedCommitment W GProp) [DecidablePred actMarker] (h : contcs.continuations, ¬iccont, actMarker ic) :
                      denegate actMarker cs = cs

                      If no continuation matches the marker, denegation is the identity. The substrate-level form of "you can only denegate what's actually in play".

                      theorem Dialogue.Krifka.CommitmentSpace.denegate_surviving_no_match {W : Type u_1} {G : Type u_2} (cs : CommitmentSpace W G) (actMarker : Core.Discourse.Commitment.IndexedWeightedCommitment W GProp) [DecidablePred actMarker] (cont : List (Core.Discourse.Commitment.IndexedWeightedCommitment W G)) :
                      cont (denegate actMarker cs).continuations¬iccont, actMarker ic

                      Converse of denegate_no_match_eq_self: every continuation that SURVIVES denegation does not match the marker. The structural fact that justifies calling denegate "filtering out matching paths".

                      Polymorphic operators via [CommitmentGrade G] #

                      The following operators are polymorphic in G via the CommitmentGrade typeclass (Core/Discourse/Commitment.lean §4): bipolarQuestion and negatedQuestionLow use complement to construct the "no" branch; toContextSet and the force-aware variants use support to project per-world weights to Prop.

                      Instances are provided for G = Prop (complement := Not, support := id) and G = Bool (complement := !, support := (· = true)). For other G (ℚ, ℝ), provide the instance at the consumer's site.

                      Bipolar question: propose two sibling continuations, one where the addressee commits to φ and one where the addressee commits to complement φ (@cite{krifka-2015}, eq. (23), p. 335).

                      C + ?φ_bi = {√C} ∪ (C + S₂⊢φ) ∪ (C + S₂⊢¬φ)

                      Polymorphic in G via [CommitmentGrade G]'s complement.

                      Equations
                      • One or more equations did not get rendered due to their size.
                      Instances For

                        Low-negation polar question (@cite{krifka-2015}, §4 around eq. (29), p. 339).

                        Did I not win? = monopolar question with complement φ as TP content. Proposes that the addressee commit to ¬φ. Polymorphic in G via [CommitmentGrade G]'s complement.

                        Equations
                        Instances For

                          Context set from root: worlds compatible with all root commitments, projected via IndexedWeightedCommitment.toCommitment (which uses the typeclass's support predicate per-grade-value).

                          Conflates doxastic and preferential commitments — both narrow the context set. For force-aware projections that separate the two attitudes (per @cite{condoravdi-lauer-2012}), use toDoxasticContextSet / toPreferentialContextSet.

                          Equations
                          Instances For

                            Doxastic-only context set: worlds compatible with the root's force = .doxastic commitments only (preferential commitments are ignored).

                            Models @cite{condoravdi-lauer-2012}'s PB_w(Sp, p) projection: "the public BELIEFS the speaker is committed to". A declarative assertion contributes here; an imperative utterance does not.

                            Equations
                            Instances For

                              Preferential-only context set: worlds compatible with the root's force = .preferential commitments only (doxastic commitments are ignored).

                              Models @cite{condoravdi-lauer-2012}'s PEP_w(Sp, p) projection: "the public PREFERENCES the speaker is committed to act on". An imperative utterance contributes here; a declarative assertion does not. The two projections are independent (Lauer 2013 Ch. 5 closure (5.33b) pep(p) ∈ PB ⟺ p ∈ PEP is a HIGHER-ORDER interaction not modeled by these flat projections).

                              Equations
                              Instances For

                                Sanity: the conflated toContextSet is the conjunction of the two force-projections. (refuse cases project to True regardless of force, so the doxastic and preferential projections agree on them.)

                                Theorems #

                                Empty space has no open continuations.

                                Assertion preserves the no-open-continuations property (no new continuations are added by assert).

                                theorem Dialogue.Krifka.CommitmentSpace.monopolar_opens {W : Type u_1} {G : Type u_2} (cs : CommitmentSpace W G) (_weight : WG) (h : cs.hasNoOpenContinuations) :

                                Monopolar question creates an open continuation (negation of the no-open property).

                                Accepting a monopolar question's sole continuation re-closes the space.

                                Root after assertion (binary case) contains the asserted indexed commitment.

                                @[simp]
                                theorem Dialogue.Krifka.CommitmentSpace.monopolarQuestion_preserves_root {W : Type u_1} {G : Type u_2} (cs : CommitmentSpace W G) (weight : WG) :
                                (cs.monopolarQuestion weight).root = cs.root

                                Monopolar question preserves the root (CG unchanged).

                                @[simp]

                                Bipolar question preserves the root (CG unchanged).

                                structure Dialogue.Krifka.KrifkaState (W : Type u_1) :
                                Type u_1

                                Krifka's discourse state: per-agent commitment slates + shared commitment space (tree).

                                The commitment space tracks the shared discourse structure: what's in the CG (root) and what's been proposed (continuations). Per-agent slates track individual public commitments, enabling the commitment/belief separation central to Krifka's theory.

                                Instances For

                                  Initial state: no commitments, empty space.

                                  Equations
                                  • One or more equations did not get rendered due to their size.
                                  Instances For

                                    Krifka's commitment operator +_S₁ S₁⊢p (@cite{krifka-2015}, eq. (14), p. 332).

                                    Speaker (default) commits to p, narrowing the entire space and recording on the speaker's slate. Pass committer := .addressee for the addressee-commits case. The force defaults to .doxastic (declarative assertion); pass .preferential for the @cite{condoravdi-lauer-2012} imperative-as-PEP analysis.

                                    Equations
                                    Instances For

                                      Monopolar question (@cite{krifka-2015}, eq. (27), p. 336): speaker proposes that addressee commit to φ.

                                      Equations
                                      Instances For

                                        Bipolar question (@cite{krifka-2015}, eq. (23), p. 335): propose two sibling continuations (φ-commit and ¬φ-commit).

                                        Equations
                                        Instances For

                                          Low-negation polar question (@cite{krifka-2015}, §4): Did I not win?.

                                          Equations
                                          Instances For

                                            High-negation polar question (@cite{krifka-2015}, §4): Didn't I win?.

                                            Equations
                                            Instances For

                                              Accept the first continuation: it becomes the new CG root.

                                              Equations
                                              Instances For

                                                Reject the first continuation: prune it.

                                                Equations
                                                Instances For

                                                  Context set: from the commitment space root (= CG), via IndexedCommitment.toCommitment projection.

                                                  Equations
                                                  Instances For

                                                    The space has no open continuations.

                                                    Equations
                                                    Instances For

                                                      Commitment Closure: assertion immediately narrows the commitment space. The root after asserting φ on behalf of committer is the original root with the indexed commit committer φ prepended.

                                                      In the tree model, this is definitional: assert adds the indexed commitment to all nodes including the root.

                                                      Questions don't change the CG: the root is preserved.

                                                      Question then accept ≈ assert (on the root): accepting a monopolar question's sole continuation yields the same CG as the addressee directly asserting φ.

                                                      This connects the two modes of updating: direct assertion (committer imposes) and question-then-accept (speaker proposes, addressee accepts by committing themselves). The roots match because both produce commit .addressee φ :: root₀.

                                                      The two discourse roles in a speech act.

                                                      Every speech act has an actor (who performs the act) and a committer (who undertakes the commitment). These can diverge:

                                                      • Assertion: actor = speaker, committer = speaker
                                                      • Monopolar question: actor = speaker, committer = addressee (the speaker proposes that the addressee commit)

                                                      Per @cite{krifka-2015} p. 337 around eq. (30): the ? ActP head identifies the committer as S₂, the addressee; the actor of the speech act itself remains S₁.

                                                      Instances For
                                                        def Dialogue.Krifka.instDecidableEqActorCommitter.decEq (x✝ x✝¹ : ActorCommitter) :
                                                        Decidable (x✝ = x✝¹)
                                                        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

                                                            In assertions, speaker is both actor and committer.

                                                            Equations
                                                            Instances For

                                                              In monopolar questions, speaker acts but addressee commits (@cite{krifka-2015}, p. 337 discussion of eq. (30)).

                                                              Equations
                                                              Instances For
                                                                structure Dialogue.Krifka.SpeechAct (W : Type u_1) :
                                                                Type u_1

                                                                A speech act in Krifka's framework: ActP content with its discourse function (assertion vs question).

                                                                @cite{krifka-2015} clause structure: ActP > ComP > TP (three layers). @cite{krifka-2020} refines this to ActP > ComP > JP > TP.

                                                                Instances For

                                                                  Construct a monopolar question speech act (@cite{krifka-2015}, eq. (27), p. 336): proposes a single continuation where the addressee commits to φ.

                                                                  Equations
                                                                  Instances For
                                                                    inductive Dialogue.Krifka.ComplexSpeechAct (W : Type u_1) :
                                                                    Type u_1

                                                                    Complex speech act: conjunction or disjunction of atomic acts (@cite{krifka-2015}, eqs. (6)–(7), p. 330).

                                                                    @cite{krifka-2015}, §5: question tags involve composition of speech acts. The difference between matching and reverse tags is conjunction vs disjunction:

                                                                    • conj: both acts performed as one complex move (matching tag, eq. (44), p. 342)
                                                                    • disj: addressee chooses one continuation (reverse tag, eq. (45), p. 343)
                                                                    Instances For

                                                                      Extract the component speech acts from a complex speech act.

                                                                      Equations
                                                                      Instances For

                                                                        A matching question tag (@cite{krifka-2015}, eq. (44), p. 342): conjunction of assertion + monopolar question with same content.

                                                                        "I have won the race, have I?" = speaker asserts φ AND asks addressee to confirm. Per Krifka p. 342: "this is not a move in which the speaker first makes an assertion and then asks the addressee to make the same assertion. Rather, the two speech acts are first conjoined, and then applied as one complex speech act to the commitment space."

                                                                        The committers diverge: speaker for the assertion-leg, addressee for the question-leg.

                                                                        Equations
                                                                        Instances For
                                                                          def Dialogue.Krifka.reverseTag {W : Type u_1} (φ negφ : WProp) :

                                                                          A reverse question tag (@cite{krifka-2015}, eq. (45), p. 343): disjunction of assertion + monopolar question with opposite content.

                                                                          "I have won the race, haven't I?" = speaker offers two continuations. The addressee picks one.

                                                                          Equations
                                                                          Instances For
                                                                            theorem Dialogue.Krifka.matching_tag_shared_content {W : Type u_1} (φ : WProp) :
                                                                            List.map SpeechAct.content (matchingTag φ).components = [φ, φ]

                                                                            In a matching tag, the assertion and question share content.

                                                                            In a matching tag, the speaker is actor in both acts.

                                                                            In a matching tag, the committers differ: speaker for assertion, addressee for question.

                                                                            theorem Dialogue.Krifka.tag_type_distinction {W : Type u_1} (φ negφ : WProp) :
                                                                            (∃ (a : SpeechAct W) (b : SpeechAct W), matchingTag φ = ComplexSpeechAct.conj a b) ∃ (a : SpeechAct W) (b : SpeechAct W), reverseTag φ negφ = ComplexSpeechAct.disj a b

                                                                            Matching tags are conjunctions, reverse tags are disjunctions.

                                                                            Apply a single atomic speech act, dispatching on actType and roles.committer to the right operator.

                                                                            Equations
                                                                            Instances For

                                                                              Apply a complex speech act to a Krifka state.

                                                                              For .conj a b: per Krifka eq. (6), [C + 𝔄 & 𝔅] = [C + 𝔄] ∩ [C + 𝔅] ≈ C + 𝔄 + 𝔅 ≈ C + 𝔅 + 𝔄 — sequential composition is the paper's own approximation when there are no anaphoric ties. We compose sequentially.

                                                                              For .disj a b: speech-act disjunction (eq. (7), p. 330) is [C + 𝔄] ∪ [C + 𝔅] on commitment-space sets; the union of two list-shaped continuation structures is non-trivial and may produce a non-rooted space (per Krifka's prose on Figure 5, p. 330). Left as sorry to avoid silently returning a wrong answer. Reverse-tag worked examples are blocked on this; the structural theorem reverse_tag_is_disjunction does not depend on applyComplex.

                                                                              Equations
                                                                              Instances For
                                                                                @[implicit_reducible]

                                                                                A polymorphic commitment space projects to a context set via its root, using the [HasSupport G] typeclass's support projection. Recovers the binary case at G = Prop definitionally (via support := id in the Prop instance). Anderson 2021's distributional CG (G = ℝ) becomes a consumer via HasSupport ℝ provided in Anderson2021.lean.

                                                                                Equations
                                                                                @[implicit_reducible]

                                                                                A Krifka state projects to a context set via the commitment space root.

                                                                                Equations