This repository contains the implementation of a simple rewrite system to normalize any LTL formula into the class Δ2 of the safety-progress hierarchy. More precisely, the normal forms produced are Boolean combinations of formulas in Σ2 and formulas in GF Σ1.
The ltlnorm
program interactively reads LTL formulas in the Spot format, line by line, and prints their normal forms using the same syntax.
Several test cases in tests
and auxiliary scripts in scripts
are provided to test and benchmark the implementation. For example, the following command runs a test suite of 1000 random formulas:
$ python scripts/check.py tests/random1000.spot
The option --equiv-check
can be passed to check the equivalence of the normal form with regard to the original formula (it may take some time). Owl can also be executed using this script. A statistical summary of the results can be obtained with
$ python scripts/summarize.py result.csv
Spot's Python library is required for the first and other scripts, and Pandas is required for the last one.
The Meson build system can be used to generate the ltlnorm
program.
$ meson --buildtype release build
Input formulas are parsed with Spot, so this library is a required dependency for ltlnorm
. If Spot is properly installed, it will be found by Meson through pkg-config
.