translate: extract obligations terms when translating LTL to Parity

* spot/twaalgos/translate.cc: Here.
* NEWS: Mention the change.
* tests/core/genltl.test: Add parity automata sizes for a set of
formulas.
* tests/core/parity2.test: Add another formula to the tests.
This commit is contained in:
Alexandre Duret-Lutz 2018-06-25 15:36:05 +02:00
parent 0690a547a5
commit 0a8c6479b7
4 changed files with 948 additions and 94 deletions

26
NEWS
View file

@ -64,10 +64,11 @@ New in spot 2.5.3.dev (not yet released)
These are now used by the main translation routine, and can be These are now used by the main translation routine, and can be
disabled by passing -x '!gf-guarantee' to ltl2tgba. For example, disabled by passing -x '!gf-guarantee' to ltl2tgba. For example,
here are the size of deterministic transition-based Büchi automata here are the size of deterministic transition-based generalized
constructed from four GF(guarantee) formulas with two versions of Büchi automata constructed from four GF(guarantee) formulas with
Spot, and converted to other types of deterministic automata by two versions of Spot, and converted to other types of
other tools. "x(y)" means x states and y acceptance sets. deterministic automata by other tools. "x(y)" means x states and
y acceptance sets.
ltl2tgba -D rabinizer 4 ltl2tgba -D rabinizer 4
2.5 2.6 delag ltl2dra 2.5 2.6 delag ltl2dra
@ -101,7 +102,7 @@ New in spot 2.5.3.dev (not yet released)
sizes of deterministic automata produced with generic acceptance sizes of deterministic automata produced with generic acceptance
using two versions of ltl2tgba and delag for reference. using two versions of ltl2tgba and delag for reference.
ltl2tgba -GD rabinizer 4 ltl2tgba -DG rabinizer 4
2.5 2.6 delag 2.5 2.6 delag
------------- ----------- ------------- -----------
FGa0&GFb0 2(2) 1(2) 1(2) FGa0&GFb0 2(2) 1(2) 1(2)
@ -120,9 +121,22 @@ New in spot 2.5.3.dev (not yet released)
FG(a|b)|FG(!a|Xb)|FG(a|XXb) 21(2) 4(3) 4(3) FG(a|b)|FG(!a|Xb)|FG(a|XXb) 21(2) 4(3) 4(3)
FG(a|b)|FG(!a|Xb)|FG(a|XXb)|FG(!a|XXXb) 170(2) 8(4) 8(4) FG(a|b)|FG(!a|Xb)|FG(a|XXb)|FG(!a|XXXb) 170(2) 8(4) 8(4)
- For 'parity' output, the 'ltl-split' optimization just separate
obligation subformulas from the rest, where a determinization is
still performed.
ltl2tgba -DP ltl3dra rabinizer 4
2.5 2.6 0.2.3 ltl2dpa
-------------- ------- -----------
FGp0 & (Gp1 | XFp2) 6(2) 4(1) 4(1) 4(2)
G!p0 | F(p0 & (!p1 W p2)) 5(2) 4(2) n/a 5(2)
(p0 W XXGp0) & GFp1 & FGp2 6(2) 5(2) n/a 6(3)
(The above just show a few cases that were improved. There are
many cases where ltl2dpa still produces smaller automata.)
- The automaton postprocessor will now simplify acceptance - The automaton postprocessor will now simplify acceptance
conditions more aggressively, calling spot::simplify_acceptance() conditions more aggressively, calling spot::simplify_acceptance()
or spot::cleanup_acceptance() depanding on the optimization level. or spot::cleanup_acceptance() depending on the optimization level.
- print_dot(), used to print automata in GraphViz's format, - print_dot(), used to print automata in GraphViz's format,
underwent several changes: underwent several changes:

View file

@ -168,7 +168,8 @@ namespace spot
twa_graph_ptr aut; twa_graph_ptr aut;
twa_graph_ptr aut2 = nullptr; twa_graph_ptr aut2 = nullptr;
if (ltl_split_ && type_ == Generic && !r.is_syntactic_obligation()) if (ltl_split_ && (type_ == Generic
|| (type_ & Parity)) && !r.is_syntactic_obligation())
{ {
formula r2 = r; formula r2 = r;
unsigned leading_x = 0; unsigned leading_x = 0;
@ -177,28 +178,31 @@ namespace spot
r2 = r2[0]; r2 = r2[0];
++leading_x; ++leading_x;
} }
// F(q|u|f) = q|F(u)|F(f) if (type_ == Generic)
// G(q&e&f) = q&G(e)&G(f)
bool want_u = r2.is({op::F, op::Or});
if (want_u || r2.is({op::G, op::And}))
{ {
std::vector<formula> susp; // F(q|u|f) = q|F(u)|F(f)
std::vector<formula> rest; // G(q&e&f) = q&G(e)&G(f)
auto op1 = r2.kind(); bool want_u = r2.is({op::F, op::Or});
auto op2 = r2[0].kind(); if (want_u || r2.is({op::G, op::And}))
for (formula child: r2[0])
{ {
bool u = child.is_universal(); std::vector<formula> susp;
bool e = child.is_eventual(); std::vector<formula> rest;
if (u && e) auto op1 = r2.kind();
susp.push_back(child); auto op2 = r2[0].kind();
else if ((want_u && u) || (!want_u && e)) for (formula child: r2[0])
susp.push_back(formula::unop(op1, child)); {
else bool u = child.is_universal();
rest.push_back(child); bool e = child.is_eventual();
if (u && e)
susp.push_back(child);
else if ((want_u && u) || (!want_u && e))
susp.push_back(formula::unop(op1, child));
else
rest.push_back(child);
}
susp.push_back(formula::unop(op1, formula::multop(op2, rest)));
r2 = formula::multop(op2, susp);
} }
susp.push_back(formula::unop(op1, formula::multop(op2, rest)));
r2 = formula::multop(op2, susp);
} }
if (r2.is_syntactic_obligation() || !r2.is(op::And, op::Or)) if (r2.is_syntactic_obligation() || !r2.is(op::And, op::Or))
goto nosplit; goto nosplit;
@ -212,7 +216,8 @@ namespace spot
{ {
if (child.is_syntactic_obligation()) if (child.is_syntactic_obligation())
oblg.push_back(child); oblg.push_back(child);
else if (child.is_eventual() && child.is_universal()) else if (child.is_eventual() && child.is_universal()
&& (type_ == Generic))
susp.push_back(child); susp.push_back(child);
else else
rest.push_back(child); rest.push_back(child);
@ -243,13 +248,24 @@ namespace spot
if (!rest.empty()) if (!rest.empty())
{ {
formula rest_f = formula::multop(r2.kind(), rest); formula rest_f = formula::multop(r2.kind(), rest);
twa_graph_ptr rest_aut = transrun(rest_f); // In case type_ is Parity, all suspendable formulas have
if (aut == nullptr) // been put into rest_f. But if the entire rest_f is
aut = rest_aut; // suspendable, we want to handle it like so.
else if (is_and) if (rest_f.is_eventual() && rest_f.is_universal())
aut = product(aut, rest_aut); {
assert(susp.empty());
susp.push_back(rest_f);
}
else else
aut = product_or(aut, rest_aut); {
twa_graph_ptr rest_aut = transrun(rest_f);
if (aut == nullptr)
aut = rest_aut;
else if (is_and)
aut = product(aut, rest_aut);
else
aut = product_or(aut, rest_aut);
}
} }
if (!susp.empty()) if (!susp.empty())
{ {

View file

@ -156,60 +156,61 @@ test $(genltl --kr-n=4 | ltl2tgba --low --stats=%s) -ge 16
genltl --ms-example=0..4 --ms-phi-r=0..2 --ms-phi-s=0..2 --ms-phi-h=0..4 \ genltl --ms-example=0..4 --ms-phi-r=0..2 --ms-phi-s=0..2 --ms-phi-h=0..4 \
--gf-equiv=0..5 --gf-implies=0..5 --gf-equiv-xn=1..3 --gf-implies-xn=3 \ --gf-equiv=0..5 --gf-implies=0..5 --gf-equiv-xn=1..3 --gf-implies-xn=3 \
--format='"%F=%L",%f' | --format='"%F=%L",%f' |
ltl2tgba -G -D -F-/2 --stats='%<,%s' > out ltl2tgba -G -D -F-/2 --stats='%f,%<,%s' |
ltl2tgba -P -D -F-/1 --stats='%>,%s' > out
cat >exp<<EOF cat >exp<<EOF
"ms-example=0,0",1 "ms-example=0,0",1,1
"ms-example=0,1",2 "ms-example=0,1",2,2
"ms-example=0,2",3 "ms-example=0,2",3,3
"ms-example=0,3",4 "ms-example=0,3",4,4
"ms-example=0,4",5 "ms-example=0,4",5,5
"ms-example=1,0",1 "ms-example=1,0",1,1
"ms-example=1,1",2 "ms-example=1,1",2,2
"ms-example=1,2",3 "ms-example=1,2",3,3
"ms-example=1,3",4 "ms-example=1,3",4,4
"ms-example=1,4",5 "ms-example=1,4",5,5
"ms-example=2,0",2 "ms-example=2,0",2,2
"ms-example=2,1",3 "ms-example=2,1",3,3
"ms-example=2,2",4 "ms-example=2,2",4,4
"ms-example=2,3",5 "ms-example=2,3",5,5
"ms-example=2,4",6 "ms-example=2,4",6,6
"ms-example=3,0",4 "ms-example=3,0",4,4
"ms-example=3,1",5 "ms-example=3,1",5,5
"ms-example=3,2",6 "ms-example=3,2",6,6
"ms-example=3,3",7 "ms-example=3,3",7,7
"ms-example=3,4",8 "ms-example=3,4",8,8
"ms-example=4,0",8 "ms-example=4,0",8,8
"ms-example=4,1",9 "ms-example=4,1",9,9
"ms-example=4,2",10 "ms-example=4,2",10,10
"ms-example=4,3",11 "ms-example=4,3",11,11
"ms-example=4,4",12 "ms-example=4,4",12,12
"ms-phi-r=0",1 "ms-phi-r=0",1,2
"ms-phi-r=1",1 "ms-phi-r=1",1,16
"ms-phi-r=2",1 "ms-phi-r=2",1,29
"ms-phi-s=0",1 "ms-phi-s=0",1,5
"ms-phi-s=1",1 "ms-phi-s=1",1,8
"ms-phi-s=2",1 "ms-phi-s=2",1,494
"ms-phi-h=0",1 "ms-phi-h=0",1,1
"ms-phi-h=1",2 "ms-phi-h=1",2,3
"ms-phi-h=2",4 "ms-phi-h=2",4,7
"ms-phi-h=3",8 "ms-phi-h=3",8,15
"ms-phi-h=4",16 "ms-phi-h=4",16,31
"gf-equiv=0",1 "gf-equiv=0",1,1
"gf-equiv=1",1 "gf-equiv=1",1,4
"gf-equiv=2",1 "gf-equiv=2",1,8
"gf-equiv=3",1 "gf-equiv=3",1,21
"gf-equiv=4",1 "gf-equiv=4",1,81
"gf-equiv=5",1 "gf-equiv=5",1,431
"gf-implies=0",1 "gf-implies=0",1,1
"gf-implies=1",1 "gf-implies=1",1,5
"gf-implies=2",1 "gf-implies=2",1,12
"gf-implies=3",1 "gf-implies=3",1,41
"gf-implies=4",1 "gf-implies=4",1,186
"gf-implies=5",1 "gf-implies=5",1,1047
"gf-equiv-xn=1",2 "gf-equiv-xn=1",2,2
"gf-equiv-xn=2",4 "gf-equiv-xn=2",4,4
"gf-equiv-xn=3",8 "gf-equiv-xn=3",8,8
"gf-implies-xn=3",1 "gf-implies-xn=3",1,1
EOF EOF
diff out exp diff out exp
@ -217,7 +218,8 @@ diff out exp
genltl --ms-example=0..4 --ms-phi-r=0..2 --ms-phi-s=0..2 --ms-phi-h=0..4 \ genltl --ms-example=0..4 --ms-phi-r=0..2 --ms-phi-s=0..2 --ms-phi-h=0..4 \
--gf-equiv=0..5 --gf-implies=0..5 --gf-equiv-xn=1..3 --gf-implies-xn=3 \ --gf-equiv=0..5 --gf-implies=0..5 --gf-equiv-xn=1..3 --gf-implies-xn=3 \
--format='"%F=%L",%f' | --format='"%F=%L",%f' |
ltldo -F-/2 'ltl2tgba -G -D' --stats='%<,%s' > out ltldo 'ltl2tgba -DG' -F-/2 --stats='%f,%<,%s' |
ltldo 'ltl2tgba -DP' -F-/1 --stats='%>,%s' > out
diff out exp diff out exp
# Test out-of-range conditions # Test out-of-range conditions

View file

@ -21,13 +21,13 @@
. ./defs . ./defs
set -e set -e
rm -rf res res2
for x in P 'Pmin odd' 'Pmax even' p 'pmin odd' 'pmax even'; do for x in P 'Pmin odd' 'Pmax even' p 'pmin odd' 'pmax even'; do
ltl2tgba "-$x" FGa 'GFa & GFb' >>res ltl2tgba "-$x" FGa 'GFa & GFb' '(p0 W XXGp0) & GFp1 & FGp2' >>res
ltl2tgba FGa 'GFa & GFb' | autfilt --name=%M --high "-$x" >>res2 ltl2tgba FGa 'GFa & GFb' '(p0 W XXGp0) & GFp1 & FGp2' |
ltl2tgba -D "-$x" FGa 'GFa & GFb' >>res3 autfilt --name=%M --high "-$x" >>res2
ltl2tgba FGa 'GFa & GFb' | autfilt -D --name=%M --high "-$x" >>res4 ltl2tgba -D "-$x" FGa 'GFa & GFb' '(p0 W XXGp0) & GFp1 & FGp2' >>res3
ltl2tgba FGa 'GFa & GFb' '(p0 W XXGp0) & GFp1 & FGp2' |
autfilt -D --name=%M --high "-$x" >>res4
done done
cat >expected<<EOF cat >expected<<EOF
@ -64,6 +64,33 @@ State: 1
[!0] 1 [!0] 1
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 5
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: Buchi
Acceptance: 1 Inf(0)
properties: trans-labels explicit-labels trans-acc
--BODY--
State: 0
[0] 0
[!0] 1
[0&1&2] 2
State: 1
[t] 3
[1&2] 4
State: 2
[!0] 1
[0&!1&2] 2
[0&1&2] 2 {0}
State: 3
[0] 3
[0&1&2] 4
State: 4
[0&!1&2] 4
[0&1&2] 4 {0}
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 1 States: 1
Start: 0 Start: 0
@ -96,6 +123,33 @@ State: 1
[!0] 1 [!0] 1
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 5
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: Rabin 1
Acceptance: 2 Fin(0) & Inf(1)
properties: trans-labels explicit-labels trans-acc
--BODY--
State: 0
[0] 0
[!0] 1
[0&1&2] 2
State: 1
[t] 3
[1&2] 4
State: 2
[!0] 1
[0&!1&2] 2
[0&1&2] 2 {1}
State: 3
[0] 3
[0&1&2] 4
State: 4
[0&!1&2] 4
[0&1&2] 4 {1}
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 1 States: 1
Start: 0 Start: 0
@ -128,6 +182,33 @@ State: 1
[!0] 1 [!0] 1
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 5
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: Buchi
Acceptance: 1 Inf(0)
properties: trans-labels explicit-labels trans-acc
--BODY--
State: 0
[0] 0
[!0] 1
[0&1&2] 2
State: 1
[t] 3
[1&2] 4
State: 2
[!0] 1
[0&!1&2] 2
[0&1&2] 2 {0}
State: 3
[0] 3
[0&1&2] 4
State: 4
[0&!1&2] 4
[0&1&2] 4 {0}
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 1 States: 1
Start: 0 Start: 0
@ -160,6 +241,33 @@ State: 1
[!0] 1 {0} [!0] 1 {0}
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 5
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: parity max even 3
Acceptance: 3 Inf(2) | (Fin(1) & Inf(0))
properties: trans-labels explicit-labels trans-acc colored
--BODY--
State: 0
[0] 0 {1}
[!0] 1 {0}
[0&1&2] 2 {0}
State: 1
[t] 3 {0}
[1&2] 4 {0}
State: 2
[!0] 1 {0}
[0&!1&2] 2 {1}
[0&1&2] 2 {2}
State: 3
[0] 3 {1}
[0&1&2] 4 {0}
State: 4
[0&!1&2] 4 {1}
[0&1&2] 4 {2}
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 1 States: 1
Start: 0 Start: 0
@ -192,6 +300,33 @@ State: 1
[!0] 1 {2} [!0] 1 {2}
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 5
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: parity min odd 4
Acceptance: 4 Fin(0) & (Inf(1) | (Fin(2) & Inf(3)))
properties: trans-labels explicit-labels trans-acc colored
--BODY--
State: 0
[0] 0 {2}
[!0] 1 {3}
[0&1&2] 2 {3}
State: 1
[t] 3 {3}
[1&2] 4 {3}
State: 2
[!0] 1 {3}
[0&1&2] 2 {1}
[0&!1&2] 2 {2}
State: 3
[0] 3 {2}
[0&1&2] 4 {3}
State: 4
[0&1&2] 4 {1}
[0&!1&2] 4 {2}
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 1 States: 1
Start: 0 Start: 0
@ -223,6 +358,33 @@ State: 1
[0] 0 {2} [0] 0 {2}
[!0] 1 {1} [!0] 1 {1}
--END-- --END--
HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 5
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: parity max even 3
Acceptance: 3 Inf(2) | (Fin(1) & Inf(0))
properties: trans-labels explicit-labels trans-acc colored
--BODY--
State: 0
[0] 0 {1}
[!0] 1 {1}
[0&1&2] 2 {1}
State: 1
[t] 3 {1}
[1&2] 4 {1}
State: 2
[!0] 1 {1}
[0&!1&2] 2 {1}
[0&1&2] 2 {2}
State: 3
[0] 3 {1}
[0&1&2] 4 {1}
State: 4
[0&!1&2] 4 {1}
[0&1&2] 4 {2}
--END--
EOF EOF
diff expected res diff expected res
@ -263,6 +425,35 @@ State: 1
[!0] 1 [!0] 1
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 6
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: Buchi
Acceptance: 1 Inf(0)
properties: trans-labels explicit-labels trans-acc
--BODY--
State: 0
[0] 0
[t] 2
[0&1&2] 3
State: 1
[2] 4
State: 2
[1&2] 4
[t] 5
State: 3
[2] 1
[0&!1&2] 3
[0&1&2] 3 {0}
State: 4
[0&!1&2] 4
[0&1&2] 4 {0}
State: 5
[0&1&2] 4
[0] 5
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 2 States: 2
Start: 0 Start: 0
@ -297,6 +488,35 @@ State: 1
[!0] 1 [!0] 1
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 6
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: Rabin 1
Acceptance: 2 Fin(0) & Inf(1)
properties: trans-labels explicit-labels trans-acc
--BODY--
State: 0
[0] 0
[t] 2
[0&1&2] 3
State: 1
[2] 4
State: 2
[1&2] 4
[t] 5
State: 3
[2] 1
[0&!1&2] 3
[0&1&2] 3 {1}
State: 4
[0&!1&2] 4
[0&1&2] 4 {1}
State: 5
[0&1&2] 4
[0] 5
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 2 States: 2
Start: 0 Start: 0
@ -331,6 +551,35 @@ State: 1
[!0] 1 [!0] 1
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 6
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: Buchi
Acceptance: 1 Inf(0)
properties: trans-labels explicit-labels trans-acc
--BODY--
State: 0
[0] 0
[t] 2
[0&1&2] 3
State: 1
[2] 4
State: 2
[1&2] 4
[t] 5
State: 3
[2] 1
[0&!1&2] 3
[0&1&2] 3 {0}
State: 4
[0&!1&2] 4
[0&1&2] 4 {0}
State: 5
[0&1&2] 4
[0] 5
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 2 States: 2
Start: 0 Start: 0
@ -365,6 +614,35 @@ State: 1
[!0] 1 {0} [!0] 1 {0}
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 6
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: Streett 1
Acceptance: 2 Fin(0) | Inf(1)
properties: trans-labels explicit-labels trans-acc colored
--BODY--
State: 0
[0] 0 {0}
[t] 2 {0}
[0&1&2] 3 {0}
State: 1
[2] 4 {0}
State: 2
[1&2] 4 {0}
[t] 5 {0}
State: 3
[2] 1 {0}
[0&!1&2] 3 {0}
[0&1&2] 3 {1}
State: 4
[0&!1&2] 4 {0}
[0&1&2] 4 {1}
State: 5
[0&1&2] 4 {0}
[0] 5 {0}
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 2 States: 2
Start: 0 Start: 0
@ -399,6 +677,35 @@ State: 1
[!0] 1 {2} [!0] 1 {2}
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 6
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: parity min odd 3
Acceptance: 3 Fin(0) & (Inf(1) | Fin(2))
properties: trans-labels explicit-labels trans-acc colored
--BODY--
State: 0
[0] 0 {2}
[t] 2 {2}
[0&1&2] 3 {2}
State: 1
[2] 4 {2}
State: 2
[1&2] 4 {2}
[t] 5 {2}
State: 3
[2] 1 {2}
[0&!1&2] 3 {2}
[0&1&2] 3 {1}
State: 4
[0&!1&2] 4 {2}
[0&1&2] 4 {1}
State: 5
[0&1&2] 4 {2}
[0] 5 {2}
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 2 States: 2
Start: 0 Start: 0
@ -432,6 +739,35 @@ State: 1
[0] 0 {2} [0] 0 {2}
[!0] 1 {1} [!0] 1 {1}
--END-- --END--
HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 6
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: parity max even 3
Acceptance: 3 Inf(2) | (Fin(1) & Inf(0))
properties: trans-labels explicit-labels trans-acc colored
--BODY--
State: 0
[0] 0 {1}
[t] 2 {1}
[0&1&2] 3 {1}
State: 1
[2] 4 {1}
State: 2
[1&2] 4 {1}
[t] 5 {1}
State: 3
[2] 1 {1}
[0&!1&2] 3 {1}
[0&1&2] 3 {2}
State: 4
[0&!1&2] 4 {1}
[0&1&2] 4 {2}
State: 5
[0&1&2] 4 {1}
[0] 5 {1}
--END--
EOF EOF
diff expected2 res2 diff expected2 res2
@ -469,6 +805,35 @@ State: 1
[0&1] 1 {0} [0&1] 1 {0}
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 5
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: Rabin 1
Acceptance: 2 Fin(0) & Inf(1)
properties: trans-labels explicit-labels trans-acc deterministic
--BODY--
State: 0
[0&!1 | 0&!2] 0
[!0] 1
[0&1&2] 2 {1}
State: 1
[!1 | !2] 3
[1&2] 4
State: 2
[0&!2] 0 {0}
[!0] 1
[0&!1&2] 2
[0&1&2] 2 {1}
State: 3
[0&!1 | 0&!2] 3
[0&1&2] 4 {1}
State: 4
[0&!2] 3 {0}
[0&!1&2] 4
[0&1&2] 4 {1}
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 1 States: 1
Start: 0 Start: 0
@ -501,6 +866,35 @@ State: 1
[0&1] 1 {1} [0&1] 1 {1}
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 5
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: Rabin 1
Acceptance: 2 Fin(0) & Inf(1)
properties: trans-labels explicit-labels trans-acc deterministic
--BODY--
State: 0
[0&!1 | 0&!2] 0
[!0] 1
[0&1&2] 2 {1}
State: 1
[!1 | !2] 3
[1&2] 4
State: 2
[0&!2] 0 {0}
[!0] 1
[0&!1&2] 2
[0&1&2] 2 {1}
State: 3
[0&!1 | 0&!2] 3
[0&1&2] 4 {1}
State: 4
[0&!2] 3 {0}
[0&!1&2] 4
[0&1&2] 4 {1}
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 1 States: 1
Start: 0 Start: 0
@ -533,6 +927,35 @@ State: 1
[0&1] 1 {0} [0&1] 1 {0}
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 5
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: parity max even 2
Acceptance: 2 Fin(1) & Inf(0)
properties: trans-labels explicit-labels trans-acc deterministic
--BODY--
State: 0
[0&!1 | 0&!2] 0
[!0] 1
[0&1&2] 2 {0}
State: 1
[!1 | !2] 3
[1&2] 4
State: 2
[0&!2] 0 {1}
[!0] 1
[0&!1&2] 2
[0&1&2] 2 {0}
State: 3
[0&!1 | 0&!2] 3
[0&1&2] 4 {0}
State: 4
[0&!2] 3 {1}
[0&!1&2] 4
[0&1&2] 4 {0}
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 1 States: 1
Start: 0 Start: 0
@ -565,6 +988,36 @@ State: 1
[0&1] 1 {1} [0&1] 1 {1}
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 5
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: parity min odd 4
Acceptance: 4 Fin(0) & (Inf(1) | (Fin(2) & Inf(3)))
properties: trans-labels explicit-labels trans-acc colored
properties: deterministic
--BODY--
State: 0
[0&!1 | 0&!2] 0 {2}
[!0] 1 {3}
[0&1&2] 2 {1}
State: 1
[!1 | !2] 3 {3}
[1&2] 4 {3}
State: 2
[0&!2] 0 {0}
[!0] 1 {3}
[0&1&2] 2 {1}
[0&!1&2] 2 {2}
State: 3
[0&!1 | 0&!2] 3 {2}
[0&1&2] 4 {1}
State: 4
[0&!2] 3 {0}
[0&1&2] 4 {1}
[0&!1&2] 4 {2}
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 1 States: 1
Start: 0 Start: 0
@ -597,6 +1050,36 @@ State: 1
[0&1] 1 {1} [0&1] 1 {1}
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 5
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: parity min odd 4
Acceptance: 4 Fin(0) & (Inf(1) | (Fin(2) & Inf(3)))
properties: trans-labels explicit-labels trans-acc colored
properties: deterministic
--BODY--
State: 0
[0&!1 | 0&!2] 0 {2}
[!0] 1 {3}
[0&1&2] 2 {1}
State: 1
[!1 | !2] 3 {3}
[1&2] 4 {3}
State: 2
[0&!2] 0 {0}
[!0] 1 {3}
[0&1&2] 2 {1}
[0&!1&2] 2 {2}
State: 3
[0&!1 | 0&!2] 3 {2}
[0&1&2] 4 {1}
State: 4
[0&!2] 3 {0}
[0&1&2] 4 {1}
[0&!1&2] 4 {2}
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 1 States: 1
Start: 0 Start: 0
@ -628,6 +1111,36 @@ State: 1
[!0] 1 {1} [!0] 1 {1}
[0&1] 1 {2} [0&1] 1 {2}
--END-- --END--
HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 5
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: parity max even 4
Acceptance: 4 Fin(3) & (Inf(2) | (Fin(1) & Inf(0)))
properties: trans-labels explicit-labels trans-acc colored
properties: deterministic
--BODY--
State: 0
[0&!1 | 0&!2] 0 {1}
[!0] 1 {1}
[0&1&2] 2 {2}
State: 1
[!1 | !2] 3 {1}
[1&2] 4 {1}
State: 2
[0&!2] 0 {3}
[!0] 1 {1}
[0&!1&2] 2 {1}
[0&1&2] 2 {2}
State: 3
[0&!1 | 0&!2] 3 {1}
[0&1&2] 4 {2}
State: 4
[0&!2] 3 {3}
[0&!1&2] 4 {1}
[0&1&2] 4 {2}
--END--
EOF EOF
diff expected3 res3 diff expected3 res3
@ -668,6 +1181,57 @@ State: 1
[!0] 1 [!0] 1
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 10
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: Rabin 1
Acceptance: 2 Fin(0) & Inf(1)
properties: trans-labels explicit-labels trans-acc deterministic
--BODY--
State: 0
[!0] 1
[0&!1 | 0&!2] 2
[0&1&2] 3
State: 1
[!1 | !2] 4
[1&2] 5
State: 2
[!0&!1 | !0&!2] 1
[0&!1 | 0&!2] 2
[0&1&2] 3
[!0&1&2] 6
State: 3
[!0&!2] 1
[0&!2] 2 {0}
[!0&!1&2] 7
[!0&1&2] 8
[0&!1&2] 9
[0&1&2] 9 {1}
State: 4
[0&!1 | 0&!2] 4
[0&1&2] 5
State: 5
[0&!2] 4 {0}
[0&!1&2] 5
[0&1&2] 5 {1}
State: 6
[!0&!1 | !2] 4
[0&2 | 1&2] 5
State: 7
[!2] 4
[2] 5
State: 8
[!2] 4
[2] 5
State: 9
[!0&!2] 1
[0&!2] 2 {0}
[!0&2] 8
[0&!1&2] 9
[0&1&2] 9 {1}
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 2 States: 2
Start: 0 Start: 0
@ -703,6 +1267,57 @@ State: 1
[!0] 1 [!0] 1
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 10
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: Rabin 1
Acceptance: 2 Fin(0) & Inf(1)
properties: trans-labels explicit-labels trans-acc deterministic
--BODY--
State: 0
[!0] 1
[0&!1 | 0&!2] 2
[0&1&2] 3
State: 1
[!1 | !2] 4
[1&2] 5
State: 2
[!0&!1 | !0&!2] 1
[0&!1 | 0&!2] 2
[0&1&2] 3
[!0&1&2] 6
State: 3
[!0&!2] 1
[0&!2] 2 {0}
[!0&!1&2] 7
[!0&1&2] 8
[0&!1&2] 9
[0&1&2] 9 {1}
State: 4
[0&!1 | 0&!2] 4
[0&1&2] 5
State: 5
[0&!2] 4 {0}
[0&!1&2] 5
[0&1&2] 5 {1}
State: 6
[!0&!1 | !2] 4
[0&2 | 1&2] 5
State: 7
[!2] 4
[2] 5
State: 8
[!2] 4
[2] 5
State: 9
[!0&!2] 1
[0&!2] 2 {0}
[!0&2] 8
[0&!1&2] 9
[0&1&2] 9 {1}
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 2 States: 2
Start: 0 Start: 0
@ -738,6 +1353,57 @@ State: 1
[!0] 1 [!0] 1
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 10
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: parity max even 2
Acceptance: 2 Fin(1) & Inf(0)
properties: trans-labels explicit-labels trans-acc deterministic
--BODY--
State: 0
[!0] 1
[0&!1 | 0&!2] 2
[0&1&2] 3
State: 1
[!1 | !2] 4
[1&2] 5
State: 2
[!0&!1 | !0&!2] 1
[0&!1 | 0&!2] 2
[0&1&2] 3
[!0&1&2] 6
State: 3
[!0&!2] 1
[0&!2] 2 {1}
[!0&!1&2] 7
[!0&1&2] 8
[0&!1&2] 9
[0&1&2] 9 {0}
State: 4
[0&!1 | 0&!2] 4
[0&1&2] 5
State: 5
[0&!2] 4 {1}
[0&!1&2] 5
[0&1&2] 5 {0}
State: 6
[!0&!1 | !2] 4
[0&2 | 1&2] 5
State: 7
[!2] 4
[2] 5
State: 8
[!2] 4
[2] 5
State: 9
[!0&!2] 1
[0&!2] 2 {1}
[!0&2] 8
[0&!1&2] 9
[0&1&2] 9 {0}
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 2 States: 2
Start: 0 Start: 0
@ -773,6 +1439,58 @@ State: 1
[!0] 1 {0} [!0] 1 {0}
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 10
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: parity min odd 3
Acceptance: 3 Fin(0) & (Inf(1) | Fin(2))
properties: trans-labels explicit-labels trans-acc colored
properties: deterministic
--BODY--
State: 0
[!0] 1 {2}
[0&!1 | 0&!2] 2 {2}
[0&1&2] 3 {2}
State: 1
[!1 | !2] 4 {2}
[1&2] 5 {2}
State: 2
[!0&!1 | !0&!2] 1 {2}
[0&!1 | 0&!2] 2 {2}
[0&1&2] 3 {2}
[!0&1&2] 6 {2}
State: 3
[!0&!2] 1 {2}
[0&!2] 2 {0}
[!0&!1&2] 7 {2}
[!0&1&2] 8 {2}
[0&!1&2] 9 {2}
[0&1&2] 9 {1}
State: 4
[0&!1 | 0&!2] 4 {2}
[0&1&2] 5 {2}
State: 5
[0&!2] 4 {0}
[0&!1&2] 5 {2}
[0&1&2] 5 {1}
State: 6
[!0&!1 | !2] 4 {2}
[0&2 | 1&2] 5 {2}
State: 7
[!2] 4 {2}
[2] 5 {2}
State: 8
[!2] 4 {2}
[2] 5 {2}
State: 9
[!0&!2] 1 {2}
[0&!2] 2 {0}
[!0&2] 8 {2}
[0&!1&2] 9 {2}
[0&1&2] 9 {1}
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 2 States: 2
Start: 0 Start: 0
@ -808,6 +1526,58 @@ State: 1
[!0] 1 {2} [!0] 1 {2}
--END-- --END--
HOA: v1 HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 10
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: parity min odd 3
Acceptance: 3 Fin(0) & (Inf(1) | Fin(2))
properties: trans-labels explicit-labels trans-acc colored
properties: deterministic
--BODY--
State: 0
[!0] 1 {2}
[0&!1 | 0&!2] 2 {2}
[0&1&2] 3 {2}
State: 1
[!1 | !2] 4 {2}
[1&2] 5 {2}
State: 2
[!0&!1 | !0&!2] 1 {2}
[0&!1 | 0&!2] 2 {2}
[0&1&2] 3 {2}
[!0&1&2] 6 {2}
State: 3
[!0&!2] 1 {2}
[0&!2] 2 {0}
[!0&!1&2] 7 {2}
[!0&1&2] 8 {2}
[0&!1&2] 9 {2}
[0&1&2] 9 {1}
State: 4
[0&!1 | 0&!2] 4 {2}
[0&1&2] 5 {2}
State: 5
[0&!2] 4 {0}
[0&!1&2] 5 {2}
[0&1&2] 5 {1}
State: 6
[!0&!1 | !2] 4 {2}
[0&2 | 1&2] 5 {2}
State: 7
[!2] 4 {2}
[2] 5 {2}
State: 8
[!2] 4 {2}
[2] 5 {2}
State: 9
[!0&!2] 1 {2}
[0&!2] 2 {0}
[!0&2] 8 {2}
[0&!1&2] 9 {2}
[0&1&2] 9 {1}
--END--
HOA: v1
name: "FGa" name: "FGa"
States: 2 States: 2
Start: 0 Start: 0
@ -842,9 +1612,61 @@ State: 1
[0] 0 {2} [0] 0 {2}
[!0] 1 {1} [!0] 1 {1}
--END-- --END--
HOA: v1
name: "(p0 W XXGp0) & G(Fp1 & FGp2)"
States: 10
Start: 0
AP: 3 "p0" "p1" "p2"
acc-name: parity max even 4
Acceptance: 4 Fin(3) & (Inf(2) | (Fin(1) & Inf(0)))
properties: trans-labels explicit-labels trans-acc colored
properties: deterministic
--BODY--
State: 0
[!0] 1 {1}
[0&!1 | 0&!2] 2 {1}
[0&1&2] 3 {1}
State: 1
[!1 | !2] 4 {1}
[1&2] 5 {1}
State: 2
[!0&!1 | !0&!2] 1 {1}
[0&!1 | 0&!2] 2 {1}
[0&1&2] 3 {1}
[!0&1&2] 6 {1}
State: 3
[!0&!2] 1 {1}
[0&!2] 2 {3}
[!0&!1&2] 7 {1}
[!0&1&2] 8 {1}
[0&!1&2] 9 {1}
[0&1&2] 9 {2}
State: 4
[0&!1 | 0&!2] 4 {1}
[0&1&2] 5 {1}
State: 5
[0&!2] 4 {3}
[0&!1&2] 5 {1}
[0&1&2] 5 {2}
State: 6
[!0&!1 | !2] 4 {1}
[0&2 | 1&2] 5 {1}
State: 7
[!2] 4 {1}
[2] 5 {1}
State: 8
[!2] 4 {1}
[2] 5 {1}
State: 9
[!0&!2] 1 {1}
[0&!2] 2 {3}
[!0&2] 8 {1}
[0&!1&2] 9 {1}
[0&1&2] 9 {2}
--END--
EOF EOF
diff expected4 res4 diff expected4 res4
ltlcross 'ltl2tgba -P' 'ltl2tgba -P"odd max"' 'ltl2tgba -P"even min"' \ ltlcross 'ltl2tgba -P' 'ltl2tgba -P"odd max"' 'ltl2tgba -P"even min"' \
'ltl2tgba -p' 'ltl2tgba -p"odd max"' 'ltl2tgba -p"even min"' \ 'ltl2tgba -p' 'ltl2tgba -p"odd max"' 'ltl2tgba -p"even min"' \
-f FGa -f 'GFa&GFb' -f 'GF(a <-> XXXb)' -f FGa -f 'GFa&GFb' -f 'GF(a <-> XXXb)' -f '(p0 W XXGp0) & GFp1 & FGp2'