Rewrite a&XGa as Ga, and a|XFa as Fa.

The actual rules are a bit more complex:
a & X(G(a&b...)&c...) = Ga & X(G(b...)&c...)
a | X(Fa | c) = F(a) | c
with the second rule being applied only if all XF can
be removed.  See the documentation for an example.

* src/ltlvisit/simplify.cc: Implement these new rules.
* doc/tl/tl.tex: Document them.
* src/ltltest/reduccmp.test: Add test cases.
This commit is contained in:
Alexandre Duret-Lutz 2012-01-17 11:50:32 +01:00
parent 58f99203ad
commit 395793d986
3 changed files with 273 additions and 5 deletions

View file

@ -171,6 +171,16 @@ for x in ../reduccmp ../reductaustr; do
run 0 $x 'G(a R b)' 'Gb'
run 0 $x 'G(a W b)' 'G(a | b)'
run 0 $x 'a & XGa' 'Ga'
run 0 $x 'a & XG(a&b)' '(XGb)&(Ga)'
run 0 $x 'a & b & XG(a&b)' 'G(a&b)'
run 0 $x 'a & b & X(Ga&Gb)' 'G(a&b)'
run 0 $x 'a & b & XGa &XG(b)' 'G(a&b)'
run 0 $x 'a & b & XGa & XGc' 'b & Ga & XGc'
run 0 $x 'a & b & X(G(a&d) & b) & X(Gc)' 'b & Ga & X(b & G(c&d))'
run 0 $x 'a|b|c|X(F(a|b)|F(c)|Gd)' 'F(a|b|c)|XGd'
run 0 $x 'b|c|X(F(a|b)|F(c)|Gd)' 'b|c|X(F(a|b|c)|Gd)'
# Syntactic implication
run 0 $x '(a & b) R (a R c)' '(a & b)R c'
run 0 $x 'a R ((a & b) R c)' '(a & b)R c'