Documentation

Linglib.Logic.Team.BSML.Defs

Bilateral state-based modal logic #

Aloni's bilateral state-based modal logic (BSML) evaluates formulas against teams, finite sets of worlds of a Kripke model, in two polarities: support (⊨⁺) and anti-support (⊨⁻). Negation swaps the polarities, and the non-emptiness atom NE, supported exactly by the non-empty teams, is the source of the free-choice effects. BSML is static: formulas are evaluated against teams, not updated by them. QBSML runs the same recursion over quantified atoms.

Main definitions #

Implementation notes #

The support and anti-support clauses are dual: ∧ and ∨ swap, ◇ and □ swap, and atoms flip their truth value.

ConnectiveSupport (⊨⁺)Anti-support (⊨⁻)
p (atom)∀w∈s: V(w,p)=1∀w∈s: V(w,p)=0
¬φs ⊨⁻ φs ⊨⁺ φ
φ ∧ ψs ⊨⁺ φ ∧ s ⊨⁺ ψ∃t,u: t∪u=s ∧ t ⊨⁻ φ ∧ u ⊨⁻ ψ
φ ∨ ψ∃t,u: t∪u=s ∧ t ⊨⁺ φ ∧ u ⊨⁺ ψs ⊨⁻ φ ∧ s ⊨⁻ ψ
◇φ∀w∈s: ∃ ne t⊆R[w]: t ⊨⁺ φ∀w∈s: R[w] ⊨⁻ φ
□φ∀w∈s: R[w] ⊨⁺ φ∀w∈s: ∃ ne t⊆R[w]: t ⊨⁻ φ
NEs ≠ ∅s = ∅

Each clause applies an operation of Team/Operations.lean to the support sets of the subformulas, so the closure properties of Properties.lean are folds over the per-connective lemmas there. One eval for both polarities makes double-negation elimination rfl. eval is Prop-valued with a Decidable instance, so concrete claims close by decide.

References #

Formulas #

inductive BSML.Formula (Atom : Type u_1) :
Type u_1

The formulas of BSML over an atom type are built from atoms and NE by ¬, ∧, split ∨ and ◇; □ is the abbreviation Formula.nec.

Instances For
    @[instance_reducible]
    instance BSML.instReprFormula {Atom✝ : Type u_1} [Repr Atom✝] :
    Repr (Formula Atom✝)
    Equations
    def BSML.instReprFormula.repr {Atom✝ : Type u_1} [Repr Atom✝] :
    Formula Atom✝ → ℕ → Std.Format
    Equations
    • One or more equations did not get rendered due to their size.
    • BSML.instReprFormula.repr BSML.Formula.ne prec✝ = Repr.addAppParen (Std.Format.nest (if prec✝ ≥ 1024 then 1 else 2) (Std.Format.text "BSML.Formula.ne")).group prec✝
    Instances For
      def BSML.Formula.nec {Atom : Type u_1} (φ : Formula Atom) :
      Formula Atom

      Necessity □φ abbreviates ¬◇¬φ. A team supports it when the successors of each of its worlds support φ, and anti-supports it when each world has a non-empty set of successors anti-supporting φ.

      Equations
      Instances For

        Syntactic fragments #

        def BSML.Formula.NEFree {Atom : Type u_1} :
        Formula Atom → Prop

        Formula.NEFree φ holds when φ contains no NE atom — the fragment on which BSML collapses to classical modal logic on singleton teams (BSML/Classical.lean).

        Equations
        Instances For
          @[instance_reducible]
          instance BSML.instDecidableNEFree {Atom : Type u_1} (φ : Formula Atom) :
          Decidable φ.NEFree
          Equations
          def BSML.Formula.Positive {Atom : Type u_1} :
          Formula Atom → Prop

          Formula.Positive φ holds when φ contains no negation.

          Equations
          Instances For
            @[instance_reducible]
            instance BSML.instDecidablePositive {Atom : Type u_1} (φ : Formula Atom) :
            Decidable φ.Positive
            Equations
            def BSML.Formula.modalDepth {Atom : Type u_1} :
            Formula Atom → ℕ

            The modal depth of a formula is the greatest number of nested ◇s in it ([AAY24]).

            Equations
            Instances For

              Contradictions #

              def BSML.Formula.falsum {Atom : Type u_1} [Inhabited Atom] :
              Formula Atom

              The weak contradiction ⊥ := p ∧ ¬p for a fixed atom p, the default one ([Alo22]; [AAY24] take ⊥ as primitive instead).

              Equations
              Instances For
                def BSML.Formula.strongFalsum {Atom : Type u_1} [Inhabited Atom] :
                Formula Atom

                The strong contradiction ⊥⊥ := ⊥ ∧ NE ([AAY24]).

                Equations
                Instances For
                  @[simp]
                  theorem BSML.Formula.neFree_falsum {Atom : Type u_1} [Inhabited Atom] :

                  Bilateral evaluation #

                  def BSML.eval {Atom : Type u_1} {W : Type u_2} [DecidableEq W] (M : ModalLogic.KripkeModel W Atom) :
                  Bool → Formula Atom → Finset W → Prop

                  Bilateral evaluation eval M b φ t is support (⊨⁺) when b is true and anti-support (⊨⁻) when b is false. Negation flips the polarity, and the split clauses, support of ∨ and anti-support of ∧, are Team.tensor.

                  Equations
                  Instances For
                    @[reducible, inline]
                    abbrev BSML.support {Atom : Type u_1} {W : Type u_2} [DecidableEq W] (M : ModalLogic.KripkeModel W Atom) (φ : Formula Atom) (t : Finset W) :

                    Support is evaluation in the positive polarity.

                    Equations
                    Instances For
                      @[reducible, inline]
                      abbrev BSML.antiSupport {Atom : Type u_1} {W : Type u_2} [DecidableEq W] (M : ModalLogic.KripkeModel W Atom) (φ : Formula Atom) (t : Finset W) :

                      Anti-support is evaluation in the negative polarity.

                      Equations
                      Instances For

                        Unfolding lemmas #

                        @[simp]
                        theorem BSML.support_neg {Atom : Type u_1} {W : Type u_2} [DecidableEq W] (M : ModalLogic.KripkeModel W Atom) (φ : Formula Atom) (t : Finset W) :
                        support M φ.neg t ↔ antiSupport M φ t
                        @[simp]
                        theorem BSML.antiSupport_neg {Atom : Type u_1} {W : Type u_2} [DecidableEq W] (M : ModalLogic.KripkeModel W Atom) (φ : Formula Atom) (t : Finset W) :
                        antiSupport M φ.neg t ↔ support M φ t
                        @[simp]
                        theorem BSML.support_conj {Atom : Type u_1} {W : Type u_2} [DecidableEq W] (M : ModalLogic.KripkeModel W Atom) (φ ψ : Formula Atom) (t : Finset W) :
                        support M (φ.conj ψ) t ↔ support M φ t ∧ support M ψ t
                        @[simp]
                        theorem BSML.antiSupport_disj {Atom : Type u_1} {W : Type u_2} [DecidableEq W] (M : ModalLogic.KripkeModel W Atom) (φ ψ : Formula Atom) (t : Finset W) :
                        antiSupport M (φ.disj ψ) t ↔ antiSupport M φ t ∧ antiSupport M ψ t
                        theorem BSML.empty_supports_atom {Atom : Type u_1} {W : Type u_2} [DecidableEq W] (M : ModalLogic.KripkeModel W Atom) (p : Atom) :

                        The empty team supports every atom, vacuously.

                        @[simp]
                        theorem BSML.support_falsum {Atom : Type u_1} {W : Type u_2} [DecidableEq W] [Inhabited Atom] (M : ModalLogic.KripkeModel W Atom) (t : Finset W) :
                        support M Formula.falsum t ↔ t = ∅

                        The weak contradiction is supported by the empty team only.

                        theorem BSML.not_support_strongFalsum {Atom : Type u_1} {W : Type u_2} [DecidableEq W] [Inhabited Atom] (M : ModalLogic.KripkeModel W Atom) (t : Finset W) :

                        The strong contradiction is supported by no team.

                        Consequence and equivalence #

                        def BSML.Consequence {Atom : Type u_1} {W : Type u_2} [DecidableEq W] (φ ψ : Formula Atom) :

                        ψ is a consequence of φ when every team supporting φ supports ψ.

                        Equations
                        Instances For
                          def BSML.Equivalent {Atom : Type u_1} {W : Type u_2} [DecidableEq W] (φ ψ : Formula Atom) :

                          Two formulas are equivalent, φ ≡ ψ, when they have the same support in every model ([Alo22] p. 5:30, [Ant21] Definition 2.1.6, [AAY24] p. 5).

                          Equations
                          Instances For
                            theorem BSML.equivalent_iff {Atom : Type u_1} {W : Type u_2} [DecidableEq W] {φ ψ : Formula Atom} :
                            Equivalent φ ψ ↔ Consequence φ ψ ∧ Consequence ψ φ

                            Equivalence is mutual consequence.

                            def BSML.StronglyEquivalent {Atom : Type u_1} {W : Type u_2} [DecidableEq W] (φ ψ : Formula Atom) :

                            Two formulas are strongly equivalent when they and their negations are equivalent ([AAY24] p. 5), that is, when they have the same support and the same anti-support.

                            Equations
                            Instances For

                              BSML* #

                              def BSML.evalStar {Atom : Type u_1} {W : Type u_2} [DecidableEq W] (M : ModalLogic.KripkeModel W Atom) :
                              Bool → Formula Atom → Finset W → Prop

                              Bilateral evaluation for BSML* ([Alo22] §6.3.1) differs from eval in that ∅ is not among the possible states, so each part of a split is intersected with Team.ne. The exclusion applies wherever states are quantified, in the splits here and on the outer team in ConsequenceStar; the atom, ne and modal clauses keep their BSML form.

                              Equations
                              Instances For
                                @[reducible, inline]
                                abbrev BSML.supportStar {Atom : Type u_1} {W : Type u_2} [DecidableEq W] (M : ModalLogic.KripkeModel W Atom) (φ : Formula Atom) (t : Finset W) :

                                BSML* support is evalStar in the positive polarity.

                                Equations
                                Instances For
                                  @[reducible, inline]
                                  abbrev BSML.antiSupportStar {Atom : Type u_1} {W : Type u_2} [DecidableEq W] (M : ModalLogic.KripkeModel W Atom) (φ : Formula Atom) (t : Finset W) :

                                  BSML* anti-support is evalStar in the negative polarity.

                                  Equations
                                  Instances For
                                    @[simp]
                                    theorem BSML.supportStar_neg {Atom : Type u_1} {W : Type u_2} [DecidableEq W] (M : ModalLogic.KripkeModel W Atom) (φ : Formula Atom) (t : Finset W) :
                                    supportStar M φ.neg t ↔ antiSupportStar M φ t
                                    @[simp]
                                    theorem BSML.antiSupportStar_neg {Atom : Type u_1} {W : Type u_2} [DecidableEq W] (M : ModalLogic.KripkeModel W Atom) (φ : Formula Atom) (t : Finset W) :
                                    antiSupportStar M φ.neg t ↔ supportStar M φ t
                                    def BSML.ConsequenceStar {Atom : Type u_1} {W : Type u_2} [DecidableEq W] (φ ψ : Formula Atom) :

                                    In BSML*, ψ is a consequence of φ when every non-empty team supporting φ supports ψ.

                                    Equations
                                    Instances For

                                      Decidability of evaluation #

                                      def BSML.decidableEval {Atom : Type u_1} {W : Type u_2} [DecidableEq W] [Fintype W] (M : ModalLogic.KripkeModel W Atom) [DecidableRel M.val] (pol : Bool) (φ : Formula Atom) (t : Finset W) :
                                      Decidable (eval M pol φ t)

                                      Decidability of eval by structural recursion on the formula, through the operators' instances.

                                      Equations
                                      Instances For
                                        @[instance_reducible]
                                        instance BSML.instDecidableEval {Atom : Type u_1} {W : Type u_2} [DecidableEq W] [Fintype W] (M : ModalLogic.KripkeModel W Atom) [DecidableRel M.val] (pol : Bool) (φ : Formula Atom) (t : Finset W) :
                                        Decidable (eval M pol φ t)
                                        Equations