/logic-translation

Translation from FOL to LTL+Past and LTL, via separation of LTL+Past

Primary LanguageHaskellGNU Lesser General Public License v3.0LGPL-3.0

Introduction

Translation from FOL to LTL+Past and LTL, via separation of LTL+Past

The general idea, algorithms and proofs of correctness can be found in the paper.

Usage

You can run with

stack run

There is help under --help describring the various options and the syntax for the formulas. To view the help:

$ stack run -- --help

The default is to read a FOMLO formula from stdin and output a separated simplified formula to stdout.

It currently supports three algorithms (with or without general simplification enabled):

  • Translation from FOMLO to LTL+Past (the default)
  • Translation from FOMLO to LTL (equivalent at the starting point)
  • Separation of an LTL+Past formula

Example:

$ stack run -- --sep

stdin:

(G (-> (<-> p1 (F-1 (G-1 p1)))
       (<-> p0 (F-1 (G-1 p0)))))

stdout:

(¬ (∨ (∧ p0
         p1
         (U p0
            (∧ p1
               (U p1
                  (◊ (∧ p1 (¬ p0))))))
         (U p1
            (∧ p1
               (U p1
                  (◊ (∧ p1 (¬ p0))))))
         (¬ (⧫ (¬ p0)))
         (¬ (⧫ (¬ p1))))
      (∧ p0
         (¬ (⧫ (¬ p0)))
         (∨ (∧ p1
               (U p0
                  (∧ p0
                     (U p0
                        (◊ (∧ p1 (¬ p0))))))
               (U p1
                  (∧ p0
                     (U p0
                        (◊ (∧ p1 (¬ p0))))))
               (¬ (⧫ (¬ p1))))
            (∧ (U p0
                  (◊ (∧ p1 (¬ p0))))
               (∨ (⧫ (¬ (⧫ (¬ p1))))
                  (¬ (⧫ (¬ p1)))))))
      (∧ (⧫ (¬ p0))
         (⧫ (¬ p1))
         (◊ (∧ p0 (¬ p1)))
         (¬ (⧫ (¬ (⧫ (¬ p0)))))
         (¬ (⧫ (¬ (⧫ (¬ p1))))))
      (∧ (⧫ (¬ p0))
         (¬ (⧫ (¬ (⧫ (¬ p0)))))
         (∨ (∧ p1
               (U p1
                  (◊ (∧ p0 p1)))
               (¬ (⧫ (¬ p1))))
            (∧ (◊ (∧ p0 p1))
               (∨ (⧫ (¬ (⧫ (¬ p1))))
                  (¬ (⧫ (¬ p1)))))))
      (∧ (⧫ (¬ p1))
         (¬ (⧫ (¬ (⧫ (¬ p1)))))
         (∨ (∧ p0
               (U p0
                  (◊ (∧ (¬ p0) (¬ p1))))
               (¬ (⧫ (¬ p0))))
            (∧ (◊ (∧ (¬ p0) (¬ p1)))
               (∨ (⧫ (¬ (⧫ (¬ p0))))
                  (¬ (⧫ (¬ p0)))))))
      (∧ (∨ (⧫ (¬ (⧫ (¬ p0))))
            (¬ (⧫ (¬ p0))))
         (∨ (∧ p1
               (U p1
                  (◊ (∧ p1 (¬ p0))))
               (¬ (⧫ (¬ p1))))
            (∧ (◊ (∧ p1 (¬ p0)))
               (∨ (⧫ (¬ (⧫ (¬ p1))))
                  (¬ (⧫ (¬ p1)))))))))