Documentation

LeanPool.LeanModelChecking.LTLNNF

Negation normal form for Linear Temporal Logic #

We define negation normal form (NNF) formulas, their language, and a translation LTL.toNNF from LTL formulas to equivalent NNF formulas. The main result LTL.exists_equiv_nnf shows every LTL formula has an equivalent NNF formula.

inductive LeanModelChecking.NNF (AP : Type) :

Linear temporal logic formulas in negation normal form over atomic propositions AP: negation is pushed to the atoms (atom/not_atom), and the temporal operators are next, until, and the dual release.

Instances For
    def LeanModelChecking.instDecidableEqNNF.decEq {AP✝ : Type} [DecidableEq AP✝] (x✝ x✝¹ : NNF AP✝) :
    Decidable (x✝ = x✝¹)
    Equations
    Instances For
      def LeanModelChecking.NNF.language {AP : Type} (f : NNF AP) (w : Letter AP) :

      The language of an NNF formula: the predicate on infinite words w that holds exactly when w satisfies f at position 0.

      Equations
      Instances For
        theorem LeanModelChecking.not_exists_until_iff_forall {P Q : Prop} :
        (¬ (i : ), Q i ∀ (k : ), k < iP k) ∀ (i : ), ¬Q i (k : ), k < i ¬P k
        def LeanModelChecking.LTL.toNNF {AP : Type} (f : LTL AP) :
        NNF AP

        The NNF formula equivalent to the LTL formula f.

        Equations
        Instances For
          def LeanModelChecking.LTL.toNNFNeg {AP : Type} (f : LTL AP) :
          NNF AP

          The NNF formula equivalent to the negation of the LTL formula f.

          Equations
          Instances For
            theorem LeanModelChecking.LTL.toNNFCore_sound {AP : Type} (f : LTL AP) :
            (∀ (w : Letter AP), f.language w f.toNNF.language w) ∀ (w : Letter AP), ¬f.language w f.toNNFNeg.language w