Documentation

Cslib.Logics.Propositional.Defs

Propositions and theories #

Main definitions #

Notation #

We instantiate the notation classes HasAnd, HasOr, HasImpl and HasNot for Proposition Atom to give access to, respectively, the notations ∧, ∨, → and ¬ for propositional connectives. In the case that Atom has a bottom element (respectively, is inhabited) we give instances HasBot (Proposition Atom) and (respectively, HasTop (Proposition Atom)).

inductive Cslib.Logic.PL.Proposition (Atom : Type u) :

Propositions.

Instances For
    def Cslib.Logic.PL.instDecidableEqProposition.decEq {Atom✝ : Type u_1} [DecidableEq Atom✝] (x✝ x✝¹ : Proposition Atom✝) :
    Decidable (x✝ = x✝¹)
    Instances For
      @[instance_reducible]
      @[instance_reducible]
      instance Cslib.Logic.PL.instBEqProposition {Atom✝ : Type u_1} [BEq Atom✝] :
      BEq (Proposition Atom✝)
      def Cslib.Logic.PL.instBEqProposition.beq {Atom✝ : Type u_1} [BEq Atom✝] :
      Proposition Atom✝ → Proposition Atom✝ → Bool
      Instances For
        @[instance_reducible]
        instance Cslib.Logic.PL.instBotProposition {Atom : Type u} [Bot Atom] :
        @[instance_reducible]
        instance Cslib.Logic.PL.instInhabitedOfBot {Atom : Type u} [Bot Atom] :
        @[reducible, inline]
        abbrev Cslib.Logic.PL.Proposition.neg {Atom : Type u} [Bot Atom] :
        Proposition Atom → Proposition Atom

        We view negation as a defined connective ~A := A → ⊥

        Instances For
          @[reducible, inline]

          A fixed choice of a derivable proposition (of course any two are equivalent).

          Instances For
            @[instance_reducible]
            @[instance_reducible]
            @[instance_reducible]
            @[instance_reducible]
            @[instance_reducible]
            theorem Cslib.Logic.PL.not_eq {Atom : Type u} [Bot Atom] (A : Proposition Atom) :
            def Cslib.Logic.PL.Proposition.subst {Atom Atom' : Type u} (f : Atom → Proposition Atom') :
            Proposition Atom → Proposition Atom'

            Substitute each atom in a proposition for a proposition, possibly changing the atomic language.

            Instances For
              @[reducible, inline]
              abbrev Cslib.Logic.PL.Theory (Atom : Type u_1) :
              Type u_1

              Theories are arbitrary sets of propositions.

              Instances For
                def Cslib.Logic.PL.Theory.subst {Atom Atom' : Type u} (T : Theory Atom) (f : Atom → Proposition Atom') :
                Theory Atom'

                Extend a substitution from Proposition to Theory.

                Instances For
                  @[reducible, inline]
                  abbrev Cslib.Logic.PL.Theory.MPL (Atom : Type u) :
                  Theory Atom

                  The empty theory corresponds to minimal propositional logic.

                  Instances For
                    @[reducible, inline]
                    abbrev Cslib.Logic.PL.Theory.IPL (Atom : Type u) [Bot Atom] :
                    Theory Atom

                    Intuitionistic propositional logic adds the principle of explosion (ex falso quodlibet).

                    Instances For
                      theorem Cslib.Logic.PL.Theory.efq_mem_ipl {Atom : Type u} [Bot Atom] (A : Proposition Atom) :
                      @[reducible]

                      Attach a bottom element to a theory T, and the principle of explosion for that bottom.

                      Instances For
                        @[reducible, inline]
                        abbrev Cslib.Logic.PL.Theory.CPL (Atom : Type u) [Bot Atom] :
                        Theory Atom

                        Classical logic further adds double negation elimination.

                        Instances For
                          class Cslib.Logic.PL.Theory.IsIntuitionistic (Atom : Type u) [Bot Atom] (S : Type u_1) [InferenceSystem S (Proposition Atom)] :
                          Sort (max (u + 1) u_2)

                          An inference system is intuitionistic if it derives ex falso quodlibet. TODO: this should be generalised outside the PL scope, once we have typeclasses to express that a type possesses an implication connective.

                          Instances
                            class Cslib.Logic.PL.Theory.IsClassical (Atom : Type u) [Bot Atom] (S : Type u_1) [InferenceSystem S (Proposition Atom)] :
                            Sort (max (u + 1) u_2)

                            An inference system is classical if it validates double-negation elimination. TODO: this should be generalised outside the PL scope, once we have typeclasses to express that a type possesses an implication connective.

                            Instances