tl: eight new simplification rules

* NEWS, doc/tl/tl.tex: Document the rules.
* spot/tl/simplify.cc: Implement them.
* tests/core/reduccmp.test: Test them.
* tests/core/det.test, tests/core/ltl2tgba2.test,
tests/python/stutter-inv.ipynb, tests/core/385.test: Adjust.
This commit is contained in:
Alexandre Duret-Lutz 2019-07-08 10:59:36 +02:00
parent d244ff5432
commit 0d9cc29b46
8 changed files with 203 additions and 19 deletions

View file

@ -36,7 +36,7 @@ EOF
# Some of the following are still not optimal.
cat >expected <<EOF
1,GF(!a | !d | !e)
6,G(Gc | F(a | (!c & F!e)))
6,G(Fa | (c W (!c & F!e)))
2,Ge | G(Fd & FGe & Fc)
1,F(G(Fb & FGc) | Ge)
4,G(F!d | (!c & G!b))

View file

@ -26,7 +26,7 @@ cat >formulas <<'EOF'
1,5,X(((a & b) R (!a U !c)) R b)
1,8,XXG(Fa U Xb)
1,5,(!a M !b) W F!c
1,3,(b & Fa & GFc) R a
1,3,(b & GFc) R a
1,2,(a R (b W a)) W G(!a M (b | c))
1,11,(Fa W b) R (!a | Fc)
1,6,X(G(!a M !b) | G(a | G!a))

View file

@ -77,7 +77,7 @@ dac-patterns,37, 4,56, 4,56, 4,56, 4,56
dac-patterns,38, 4,56, 4,56, 4,56, 4,56
dac-patterns,39, 4,112, 4,112, 4,112, 4,112
dac-patterns,40, 3,88, 3,88, 3,88, 3,88
dac-patterns,41, 6,54, 6,54, 7,56, 7,56
dac-patterns,41, 4,32, 4,32, 4,32, 4,32
dac-patterns,42, 6,96, 6,96, 6,96, 6,96
dac-patterns,43, 5,80, 5,80, 5,80, 5,80
dac-patterns,44, 10,300, 10,300, 13,372, 13,372

View file

@ -298,17 +298,36 @@ a W ((a&b) W c), a W c
(a R b) M (c&a), b M (c&a)
(a M b) M (c&a), b M (c&a)
(a R (b&c)) R (c), (a&b&c) R c
(a M (b&c)) R (c), (a&b&c) R c
(x M y) M y, x M y
(x R y) R y, x R y
(x & y) M y, x M y
(x & y) R y, x R y
(a R (b&c)) R (c), (a&b) R c
(a M (b&c)) R (c), (a&b) R c
# not reduced
(a R (b&c)) M (c), (a R (b&c)) M (c)
(a M (b&c)) M (c), (a&b&c) M c
(a M (b&c)) M (c), (a&b) M c
(a W (c&b)) W b, (a W (c&b)) | b
(a U (c&b)) W b, (a U (c&b)) | b
(a U (c&b)) U b, (a U (c&b)) | b
# not reduced
(a W (c&b)) U b, (a W (c&b)) U b
!x U (x & Fa), F(x & Fa)
!x R (x | Ga), G(x | Ga)
!x U ((x | c) & Fa & Fb), F((x | c) & Fa & Fb)
!x R ((x & c) | Ga | Gb), G((x & c) | Ga | Gb)
G!f | F((f|g) & Fa & Fb), !f W ((f | g) & Fa & Fb)
F!f & G((f&g) | Ga | Gb), !f M ((f & g) | Ga | Gb)
(x|b) W (x|a), b W (x|a)
(x|b) U (x|a), b U (x|a)
!x U ((x | c) & Fa & Fb), F((x | c) & Fa & Fb)
!x R ((x & c) | Ga | Gb), G((x & c) | Ga | Gb)
# Eventuality and universality class reductions
Fa M b, Fa & b
GFa M b, GFa & b

View file

@ -302,7 +302,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f691c29f3f0> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fc090629840> >"
]
},
"metadata": {},
@ -603,7 +603,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f691c31c360> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fc090629db0> >"
]
},
"metadata": {},
@ -812,7 +812,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f691c31c360> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fc090629db0> >"
]
},
"metadata": {},
@ -964,7 +964,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f691c29f840> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fc0905b5960> >"
]
},
"metadata": {},
@ -1062,7 +1062,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f691c29f690> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fc0905b5840> >"
]
},
"metadata": {},
@ -1272,7 +1272,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f691c29f7e0> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fc0905c34e0> >"
]
},
"metadata": {},
@ -1401,7 +1401,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f691c29f780> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fc0905c3570> >"
]
},
"metadata": {},
@ -1532,7 +1532,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f691c29f810> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fc0905c3f90> >"
]
},
"metadata": {},
@ -1792,7 +1792,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f691c23bb10> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fc0905c3240> >"
]
},
"metadata": {},
@ -2106,7 +2106,7 @@
"</svg>\n"
],
"text/plain": [
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7f691c23bb10> >"
"<spot.twa_graph; proxy of <Swig Object of type 'std::shared_ptr< spot::twa_graph > *' at 0x7fc0905c3240> >"
]
},
"metadata": {},
@ -2192,7 +2192,7 @@
"G!p0 | (!p0 U (p0 & (F(p1 & XFp2) -> (!p 4 2 1\n",
"G((p0 & Fp1) -> (!(!p1 & p2 & X(!p1 U (! 4 1 1\n",
"G(p0 -> ((!(!p1 & p2 & X(!p1 U (!p1 & p3 3 0 1\n",
"G((p0 & XFp1) -> XF(p1 & Fp2)) 6 1 1\n",
"G((p0 & XFp1) -> XF(p1 & Fp2)) 4 0 1\n",
"Fp0 -> (((p1 & X(!p0 U p2)) -> X(!p0 U ( 6 2 1\n",
"G(p0 -> G((p1 & XFp2) -> X(!p2 U (p2 & F 5 0 1\n",
"G((p0 & Fp1) -> (((p2 & X(!p1 U p3)) -> 10 2 1\n",
@ -2318,7 +2318,7 @@
{
"data": {
"text/plain": [
"55.749128919860624"
"55.78947368421053"
]
},
"execution_count": 31,