Documentation

Cslib.Logics.Propositional.Defs

Propositions and theories #

Main definitions #

Notation #

We introduce notation for the logical connectives: ⊥ ⊤ ∧ ∨ → ¬ for, respectively, falsum, verum, conjunction, disjunction, implication and negation.

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✝¹)
    Equations
    Instances For
      @[implicit_reducible]
      instance Cslib.Logic.PL.instBEqProposition {Atom✝ : Type u_1} [BEq Atom✝] :
      BEq (Proposition Atom✝)
      Equations
      @[implicit_reducible]
      instance Cslib.Logic.PL.instInhabitedOfBot {Atom : Type u} [Bot Atom] :
      Equations
      @[reducible, inline]
      abbrev Cslib.Logic.PL.Proposition.neg {Atom : Type u} [Bot Atom] :
      Proposition AtomProposition Atom

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

      Equations
      Instances For
        @[reducible, inline]

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

        Equations
        Instances For

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

          Equations
          Instances For
            @[implicit_reducible]
            Equations
            • One or more equations did not get rendered due to their size.
            @[reducible, inline]
            abbrev Cslib.Logic.PL.Theory (Atom : Type u_1) :
            Type u_1

            Theories are arbitrary sets of propositions.

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

              Extend a substitution from Proposition to Theory.

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

                The empty theory corresponds to minimal propositional logic.

                Equations
                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).

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

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

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

                      Classical logic further adds double negation elimination.

                      Equations
                      Instances For
                        theorem Cslib.Logic.PL.Theory.dne_mem_cpl {Atom : Type u} [Bot Atom] (A : Proposition Atom) :
                        A.neg.neg.impl A CPL Atom
                        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