Documentation

Cslib.Logics.Modal.Basic

Modal Logic #

Modal logic is a logic for reasoning about (possibly polyadic) relational structures, studying qualified statements through the use of modalities (like necessity, possibility, knowledge, belief, permission, etc.).

This module formalises general modal logic, parameterised over a signature of modal operators. A signature is formalised as a polynomial functor (PFunctor), generalising the concept of modal similarity types from the literature [BRV01].

Implementation notes #

References #

inductive Cslib.Logic.Modal.Proposition (τ : PFunctor.{u_1, u_2}) (Atom : Type u) :
Type (max (max u u_1) u_2)

A modal proposition.

Instances For
    @[reducible, inline]
    abbrev Cslib.Logic.Modal.PropositionMap (τ : PFunctor.{u_1, u_2}) (op : τ.A) (Atom : Type u_3) :
    Type (max (max u_2 u_1) u_3)

    A map of propositions for the operator op in the polynomial functor τ.

    Equations
    Instances For
      @[instance_reducible]
      instance Cslib.Logic.Modal.instCoeProposition {Atom : Type u_1} {τ : PFunctor.{u_2, u_3}} :
      Coe Atom (Proposition τ Atom)

      Utility to coerce atoms into atomic propositions.

      Equations
      theorem Cslib.Logic.Modal.Proposition.or_def {τ : PFunctor.{u_1, u_2}} {Atom : Type u_3} (φ₁ φ₂ : Proposition τ Atom) :
      φ₁.or φ₂ = HasOr.or φ₁ φ₂
      theorem Cslib.Logic.Modal.Proposition.triangle_def {Atom : Type u_1} {τ : PFunctor.{u_2, u_3}} (op : τ.A) (φs : τ.B op → Proposition τ Atom) :
      @[match_pattern]
      def Cslib.Logic.Modal.Proposition.and {τ : PFunctor.{u_1, u_2}} {Atom : Type u_3} (φ₁ φ₂ : Proposition τ Atom) :
      Proposition τ Atom

      Conjunction.

      Equations
      Instances For
        theorem Cslib.Logic.Modal.Proposition.and_def {τ : PFunctor.{u_1, u_2}} {Atom : Type u_3} (φ₁ φ₂ : Proposition τ Atom) :
        φ₁.and φ₂ = HasAnd.and φ₁ φ₂
        @[match_pattern]
        def Cslib.Logic.Modal.Proposition.imp {τ : PFunctor.{u_1, u_2}} {Atom : Type u_3} (φ₁ φ₂ : Proposition τ Atom) :
        Proposition τ Atom

        Implication.

        Equations
        Instances For
          theorem Cslib.Logic.Modal.Proposition.imp_def {τ : PFunctor.{u_1, u_2}} {Atom : Type u_3} (φ₁ φ₂ : Proposition τ Atom) :
          φ₁.imp φ₂ = HasImp.imp φ₁ φ₂
          @[match_pattern]
          def Cslib.Logic.Modal.Proposition.iff {τ : PFunctor.{u_1, u_2}} {Atom : Type u_3} (φ₁ φ₂ : Proposition τ Atom) :
          Proposition τ Atom

          Bi-implication.

          Equations
          Instances For
            theorem Cslib.Logic.Modal.Proposition.iff_def {τ : PFunctor.{u_1, u_2}} {Atom : Type u_3} (φ₁ φ₂ : Proposition τ Atom) :
            φ₁.iff φ₂ = HasIff.iff φ₁ φ₂
            def Cslib.Logic.Modal.PropositionMap.not {τ : PFunctor.{u_1, u_2}} {op : τ.A} {Atom : Type u_3} (φs : PropositionMap τ op Atom) (i : τ.B op) :
            Proposition τ Atom

            Point-wise negation of a proposition map.

            Equations
            Instances For
              @[simp]
              theorem Cslib.Logic.Modal.PropositionMap.not_apply {τ : PFunctor.{u_1, u_2}} {op : τ.A} {Atom : Type u_3} {φs : PropositionMap τ op Atom} (i : τ.B op) :
              HasNot.not φs i = HasNot.not (φs i)
              def Cslib.Logic.Modal.PropositionMap.and {τ : PFunctor.{u_1, u_2}} {op : τ.A} {Atom : Type u_3} (φs₁ φs₂ : PropositionMap τ op Atom) (i : τ.B op) :
              Proposition τ Atom

              Point-wise conjunction of proposition maps.

              Equations
              Instances For
                theorem Cslib.Logic.Modal.PropositionMap.and_apply {τ : PFunctor.{u_1, u_2}} {op : τ.A} {Atom : Type u_3} (φs₁ φs₂ : PropositionMap τ op Atom) (i : τ.B op) :
                HasAnd.and φs₁ φs₂ i = HasAnd.and (φs₁ i) (φs₂ i)
                def Cslib.Logic.Modal.PropositionMap.or {τ : PFunctor.{u_1, u_2}} {op : τ.A} {Atom : Type u_3} (φs₁ φs₂ : PropositionMap τ op Atom) (i : τ.B op) :
                Proposition τ Atom

                Point-wise disjunction of proposition maps.

                Equations
                Instances For
                  def Cslib.Logic.Modal.PropositionMap.imp {τ : PFunctor.{u_1, u_2}} {op : τ.A} {Atom : Type u_3} (φs₁ φs₂ : PropositionMap τ op Atom) (i : τ.B op) :
                  Proposition τ Atom

                  Point-wise implication of proposition maps.

                  Equations
                  Instances For
                    def Cslib.Logic.Modal.PropositionMap.iff {τ : PFunctor.{u_1, u_2}} {op : τ.A} {Atom : Type u_3} (φs₁ φs₂ : PropositionMap τ op Atom) (i : τ.B op) :
                    Proposition τ Atom

                    Point-wise bi-implication of proposition maps.

                    Equations
                    Instances For
                      @[simp]
                      theorem Cslib.Logic.Modal.PropositionMap.or_apply {τ : PFunctor.{u_1, u_2}} {op : τ.A} {Atom : Type u_3} (φs ψs : PropositionMap τ op Atom) (i : τ.B op) :
                      HasOr.or φs ψs i = HasOr.or (φs i) (ψs i)
                      @[simp]
                      theorem Cslib.Logic.Modal.PropositionMap.imp_apply {τ : PFunctor.{u_1, u_2}} {op : τ.A} {Atom : Type u_3} (φs ψs : PropositionMap τ op Atom) (i : τ.B op) :
                      HasImp.imp φs ψs i = HasImp.imp (φs i) (ψs i)
                      @[simp]
                      theorem Cslib.Logic.Modal.PropositionMap.iff_apply {τ : PFunctor.{u_1, u_2}} {op : τ.A} {Atom : Type u_3} (φs ψs : PropositionMap τ op Atom) (i : τ.B op) :
                      HasIff.iff φs ψs i = HasIff.iff (φs i) (ψs i)
                      @[match_pattern]
                      def Cslib.Logic.Modal.Proposition.nabla {Atom : Type u_1} {τ : PFunctor.{u_2, u_3}} (op : τ.A) (φs : τ.B op → Proposition τ Atom) :
                      Proposition τ Atom

                      Generalised necessity, or nabla (∇), dual of triangle.

                      Equations
                      Instances For
                        theorem Cslib.Logic.Modal.Proposition.nabla_def {Atom : Type u_1} {τ : PFunctor.{u_2, u_3}} (op : τ.A) (φs : τ.B op → Proposition τ Atom) :
                        nabla op φs = HasNabla.nabla op φs
                        @[reducible, inline]
                        abbrev Cslib.Logic.Modal.PropositionMap.const {Atom : Type u_1} {τ : PFunctor.{u_2, u_3}} (op : τ.A) (φ : Proposition τ Atom) :
                        PropositionMap τ op Atom

                        The constant proposition map for the operator op, used for applying a modality uniformly. This supplies the same proposition φ to every argument position of op.

                        Equations
                        Instances For
                          @[simp]
                          theorem Cslib.Logic.Modal.PropositionMap.const_not {Atom : Type u_1} {τ : PFunctor.{u_2, u_3}} (op : τ.A) (φ : Proposition τ Atom) :

                          Negation commutes with constant proposition maps.

                          @[simp]
                          theorem Cslib.Logic.Modal.PropositionMap.const_and {Atom : Type u_1} {τ : PFunctor.{u_2, u_3}} (op : τ.A) (φ ψ : Proposition τ Atom) :
                          const op (HasAnd.and φ ψ) = HasAnd.and (const op φ) (const op ψ)

                          Conjunction commutes with constant proposition maps.

                          @[simp]
                          theorem Cslib.Logic.Modal.PropositionMap.const_or {Atom : Type u_1} {τ : PFunctor.{u_2, u_3}} (op : τ.A) (φ ψ : Proposition τ Atom) :
                          const op (HasOr.or φ ψ) = HasOr.or (const op φ) (const op ψ)

                          Disjunction commutes with constant proposition maps.

                          @[simp]
                          theorem Cslib.Logic.Modal.PropositionMap.const_imp {Atom : Type u_1} {τ : PFunctor.{u_2, u_3}} (op : τ.A) (φ ψ : Proposition τ Atom) :
                          const op (HasImp.imp φ ψ) = HasImp.imp (const op φ) (const op ψ)

                          Implication commutes with constant proposition maps.

                          @[simp]
                          theorem Cslib.Logic.Modal.PropositionMap.const_iff {Atom : Type u_1} {τ : PFunctor.{u_2, u_3}} (op : τ.A) (φ ψ : Proposition τ Atom) :
                          const op (HasIff.iff φ ψ) = HasIff.iff (const op φ) (const op ψ)

                          Bi-implication commutes with constant proposition maps.