Commit ef2355a5 authored by Alexandre GBAGUIDI AISSE's avatar Alexandre GBAGUIDI AISSE
Browse files

twaalgos: Set 'dicho' algo as default for SAT-based minimization

* python/spot/__init__.py: Handle options.
* spot/twaalgos/dtwasat.cc: Handle options.
* spot/twaalgos/postproc.cc: Handle options.
* spot/twaalgos/postproc.hh: Handle options.
* tests/core/satmin.test: Update tests.
Now use 'sat-minimize=4' to use the naive algo.
* tests/core/satmin2.test: Update tests.
Now use --sat-minimize='naive' to use the naive algo.
* tests/python/satmin.py: Update tests.
Now use 'naive=True' to use the naive algo.
parent 67e3a4f2
......@@ -858,8 +858,8 @@ for fun in ['remove_x', 'relabel', 'relabel_bse',
# Better interface to the corresponding C++ function.
def sat_minimize(aut, acc=None, colored=False,
state_based=False, states=0,
max_states=0, dicho=False,
param=0, incr=False, assume=False):
max_states=0, sat_naive=False, sat_langmap=False,
sat_incr=0, sat_incr_steps=0):
args=''
if acc is not None:
if type(acc) is not str:
......@@ -875,14 +875,14 @@ def sat_minimize(aut, acc=None, colored=False,
if type(max_states) is not int or max_states < 0:
raise ValueError("argument 'states' should be a positive integer")
args += ',max-states=' + str(max_states)
if dicho:
args += ',dicho';
if param:
args += ',param=' + str(param)
if incr:
args += ',incr'
if assume:
args += ',assume'
if sat_naive:
args += ',sat-naive'
if sat_langmap:
args += ',sat-langmap'
if sat_incr:
args += ',sat-incr=' + str(sat_incr)
args += ',sat-incr-steps=' + str(sat_incr_steps)
from spot.impl import sat_minimize as sm
return sm(aut, args, state_based)
......
......@@ -1391,17 +1391,23 @@ namespace spot
throw std::runtime_error
("SAT-based minimization only works with deterministic automata");
bool incr = om.get("incr", 0);
bool assume = om.get("assume", 0);
int param = om.get("param", 0);
bool dicho = om.get("dicho", 0);
bool dicho_langmap = om.get("langmap", 0);
int sat_incr = om.get("sat-incr", 0);
int sat_incr_steps = om.get("sat-incr-steps", 0);
bool sat_naive = om.get("sat-naive", 0);
bool sat_langmap = om.get("sat-langmap", 0);
int states = om.get("states", -1);
int max_states = om.get("max-states", -1);
auto accstr = om.get_str("acc");
bool colored = om.get("colored", 0);
int preproc = om.get("preproc", 3);
// Set default sat-incr-steps value if not provided and used.
if (sat_incr == 1 && !sat_incr_steps) // Assume
sat_incr_steps = 6;
else if (sat_incr == 2 && !sat_incr_steps) // Incremental
sat_incr_steps = 2;
// No more om.get() below this.
om.report_unused_options();
......@@ -1494,36 +1500,39 @@ namespace spot
auto orig = a;
if (!target_is_buchi || !a->acc().is_buchi() || colored)
{
if (incr)
a = dtwa_sat_minimize_incr(a, nacc, target_acc, state_based,
max_states, colored, param);
if (sat_naive)
a = dtwa_sat_minimize
(a, nacc, target_acc, state_based, max_states, colored);
else if (assume)
else if (sat_incr == 1)
a = dtwa_sat_minimize_assume(a, nacc, target_acc, state_based,
max_states, colored, param);
max_states, colored, sat_incr_steps);
else if (sat_incr == 2)
a = dtwa_sat_minimize_incr(a, nacc, target_acc, state_based,
max_states, colored, sat_incr_steps);
else if (dicho)
else
a = dtwa_sat_minimize_dichotomy
(a, nacc, target_acc, state_based, dicho_langmap, max_states,
(a, nacc, target_acc, state_based, sat_langmap, max_states,
colored);
else
a = dtwa_sat_minimize
(a, nacc, target_acc, state_based, max_states, colored);
}
else
{
if (incr)
a = dtba_sat_minimize_incr(a, state_based, max_states, param);
if (sat_naive)
a = dtba_sat_minimize(a, state_based, max_states);
else if (assume)
a = dtba_sat_minimize_assume(a, state_based, max_states, assume);
else if (sat_incr == 1)
a = dtba_sat_minimize_assume(a, state_based, max_states,
sat_incr_steps);
else if (dicho)
a = dtba_sat_minimize_dichotomy
(a, state_based, dicho_langmap, max_states);
else if (sat_incr == 2)
a = dtba_sat_minimize_incr(a, state_based, max_states,
sat_incr_steps);
else
a = dtba_sat_minimize(a, state_based, max_states);
a = dtba_sat_minimize_dichotomy
(a, state_based, sat_langmap, max_states);
}
if (!a && !user_supplied_acc)
......
......@@ -70,15 +70,15 @@ namespace spot
ba_simul_ = opt->get("ba-simul", -1);
tba_determinisation_ = opt->get("tba-det", 0);
sat_minimize_ = opt->get("sat-minimize", 0);
param_ = opt->get("param", 0);
dicho_langmap_ = opt->get("langmap", 0);
sat_incr_steps_ = opt->get("sat-incr-steps", -2); // -2 or any num < -1
sat_langmap_ = opt->get("sat-langmap", 0);
sat_acc_ = opt->get("sat-acc", 0);
sat_states_ = opt->get("sat-states", 0);
state_based_ = opt->get("state-based", 0);
wdba_minimize_ = opt->get("wdba-minimize", 1);
if (sat_acc_ && sat_minimize_ == 0)
sat_minimize_ = 1; // 2?
sat_minimize_ = 1; // Dicho.
if (sat_states_ && sat_minimize_ == 0)
sat_minimize_ = 1;
if (sat_minimize_)
......@@ -89,6 +89,12 @@ namespace spot
if (sat_states_ <= 0)
sat_states_ = -1;
}
// Set default param value if not provided and used.
if (sat_minimize_ == 2 && sat_incr_steps_ < 0) // Assume algorithm.
sat_incr_steps_ = 6;
else if (sat_minimize_ == 3 && sat_incr_steps_ < -1) // Incr algorithm.
sat_incr_steps_ = 2;
}
}
......@@ -427,15 +433,17 @@ namespace spot
{
if (sat_states_ != -1)
res = dtba_sat_synthetize(res, sat_states_, state_based_);
else if (sat_minimize_ == 1 || sat_minimize_ == -1)
res = dtba_sat_minimize(res, state_based_);
else if (sat_minimize_ == 2)
else if (sat_minimize_ == 1)
res = dtba_sat_minimize_dichotomy
(res, state_based_, dicho_langmap_);
(res, state_based_, sat_langmap_);
else if (sat_minimize_ == 2)
res = dtba_sat_minimize_assume(res, state_based_, -1,
sat_incr_steps_);
else if (sat_minimize_ == 3)
res = dtba_sat_minimize_incr(res, state_based_, -1, param_);
else // if (sat_minimize == 4)
res = dtba_sat_minimize_assume(res, state_based_, -1, param_);
res = dtba_sat_minimize_incr(res, state_based_, -1,
sat_incr_steps_);
else // if (sat_minimize == 4 || sat_minimize == -1)
res = dtba_sat_minimize(res, state_based_);
}
else
{
......@@ -444,26 +452,26 @@ namespace spot
(res, target_acc,
acc_cond::acc_code::generalized_buchi(target_acc),
sat_states_, state_based_);
else if (sat_minimize_ == 1 || sat_minimize_ == -1)
res = dtwa_sat_minimize
else if (sat_minimize_ == 1)
res = dtwa_sat_minimize_dichotomy
(res, target_acc,
acc_cond::acc_code::generalized_buchi(target_acc),
state_based_);
state_based_, sat_langmap_);
else if (sat_minimize_ == 2)
res = dtwa_sat_minimize_dichotomy
res = dtwa_sat_minimize_assume
(res, target_acc,
acc_cond::acc_code::generalized_buchi(target_acc),
state_based_, dicho_langmap_);
state_based_, -1, false, sat_incr_steps_);
else if (sat_minimize_ == 3)
res = dtwa_sat_minimize_incr
(res, target_acc,
acc_cond::acc_code::generalized_buchi(target_acc),
state_based_, -1, false, param_);
else // if (sat_minimize_ == 4)
res = dtwa_sat_minimize_assume
state_based_, -1, false, sat_incr_steps_);
else // if (sat_minimize_ == 4 || sat_minimize_ == -1)
res = dtwa_sat_minimize
(res, target_acc,
acc_cond::acc_code::generalized_buchi(target_acc),
state_based_, -1, false, param_);
state_based_);
}
if (res)
......
......@@ -189,8 +189,8 @@ namespace spot
int ba_simul_ = -1;
bool tba_determinisation_ = false;
int sat_minimize_ = 0;
int param_ = 0;
bool dicho_langmap_ = false;
int sat_incr_steps_ = 0;
bool sat_langmap_ = false;
int sat_acc_ = 0;
int sat_states_ = 0;
bool state_based_ = false;
......
......@@ -102,18 +102,17 @@ $ltlcross -F formulas \
"{4} $ltl2tgba --det --lbtt -x sat-acc=3 %f >%T" \
"{5} $ltl2tgba --det --lbtt -x sat-states=3 %f >%T" \
"{6} $ltl2tgba --det --lbtt -x sat-minimize %f >%T" \
"{7} $ltl2tgba --det --lbtt -x sat-minimize=2 %f >%T" \
"{8} $ltl2tgba --det --lbtt -x 'sat-minimize=2,langmap' %f >%T" \
"{9} $ltl2tgba --det --lbtt -x sat-minimize=3 %f >%T" \
"{10} $ltl2tgba --det --lbtt -x 'sat-minimize=3, param=-1' %f >%T" \
"{11} $ltl2tgba --det --lbtt -x 'sat-minimize=3, param=0' %f >%T" \
"{12} $ltl2tgba --det --lbtt -x 'sat-minimize=3, param=1' %f >%T" \
"{13} $ltl2tgba --det --lbtt -x 'sat-minimize=3, param=2' %f >%T" \
"{14} $ltl2tgba --det --lbtt -x 'sat-minimize=3, param=50' %f >%T" \
"{15} $ltl2tgba --det --lbtt -x 'sat-minimize=4, param=0' %f >%T" \
"{16} $ltl2tgba --det --lbtt -x 'sat-minimize=4, param=1' %f >%T" \
"{17} $ltl2tgba --det --lbtt -x 'sat-minimize=4, param=2' %f >%T" \
"{18} $ltl2tgba --det --lbtt -x 'sat-minimize=4, param=50' %f >%T" \
"{7} $ltl2tgba --det --lbtt -x 'sat-minimize, sat-langmap' %f >%T" \
"{8} $ltl2tgba --det --lbtt -x 'sat-minimize=2, sat-incr-steps=0' %f >%T" \
"{9} $ltl2tgba --det --lbtt -x 'sat-minimize=2, sat-incr-steps=1' %f >%T" \
"{10} $ltl2tgba --det --lbtt -x 'sat-minimize=2, sat-incr-steps=2' %f >%T" \
"{11} $ltl2tgba --det --lbtt -x 'sat-minimize=2, sat-incr-steps=50' %f >%T" \
"{12} $ltl2tgba --det --lbtt -x 'sat-minimize=3, sat-incr-steps=-1' %f >%T" \
"{13} $ltl2tgba --det --lbtt -x 'sat-minimize=3, sat-incr-steps=0' %f >%T" \
"{14} $ltl2tgba --det --lbtt -x 'sat-minimize=3, sat-incr-steps=1' %f >%T" \
"{15} $ltl2tgba --det --lbtt -x 'sat-minimize=3, sat-incr-steps=2' %f >%T" \
"{16} $ltl2tgba --det --lbtt -x 'sat-minimize=3, sat-incr-steps=50' %f >%T" \
"{17} $ltl2tgba --det --lbtt -x sat-minimize=4 %f >%T" \
--csv=det.csv
grep -v ',\"5\",' det.csv | cut -d ',' -f '1,2,6' > output
......@@ -136,7 +135,6 @@ cat >expected <<'EOF'
"X(X(p0))","15",4
"X(X(p0))","16",4
"X(X(p0))","17",4
"X(X(p0))","18",4
"!(X(X(p0)))","1",4
"!(X(X(p0)))","2",4
"!(X(X(p0)))","3",4
......@@ -153,7 +151,6 @@ cat >expected <<'EOF'
"!(X(X(p0)))","15",4
"!(X(X(p0)))","16",4
"!(X(X(p0)))","17",4
"!(X(X(p0)))","18",4
"G(F((p0) -> (X(X(X(p1))))))","1",1
"G(F((p0) -> (X(X(X(p1))))))","2",1
"G(F((p0) -> (X(X(X(p1))))))","3",1
......@@ -170,7 +167,6 @@ cat >expected <<'EOF'
"G(F((p0) -> (X(X(X(p1))))))","15",1
"G(F((p0) -> (X(X(X(p1))))))","16",1
"G(F((p0) -> (X(X(X(p1))))))","17",1
"G(F((p0) -> (X(X(X(p1))))))","18",1
"!(G(F((p0) -> (X(X(X(p1)))))))","1",2
"!(G(F((p0) -> (X(X(X(p1)))))))","2",2
"!(G(F((p0) -> (X(X(X(p1)))))))","3",2
......@@ -187,7 +183,6 @@ cat >expected <<'EOF'
"!(G(F((p0) -> (X(X(X(p1)))))))","15",2
"!(G(F((p0) -> (X(X(X(p1)))))))","16",2
"!(G(F((p0) -> (X(X(X(p1)))))))","17",2
"!(G(F((p0) -> (X(X(X(p1)))))))","18",2
"F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3))))))))))","1",5
"F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3))))))))))","2",5
"F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3))))))))))","3",5
......@@ -204,7 +199,6 @@ cat >expected <<'EOF'
"F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3))))))))))","15",5
"F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3))))))))))","16",5
"F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3))))))))))","17",5
"F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3))))))))))","18",5
"!(F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3)))))))))))","1",4
"!(F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3)))))))))))","2",4
"!(F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3)))))))))))","3",4
......@@ -221,7 +215,6 @@ cat >expected <<'EOF'
"!(F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3)))))))))))","15",4
"!(F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3)))))))))))","16",4
"!(F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3)))))))))))","17",4
"!(F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3)))))))))))","18",4
"F((p0) & (X((p1) U (p2))))","1",3
"F((p0) & (X((p1) U (p2))))","2",3
"F((p0) & (X((p1) U (p2))))","3",3
......@@ -238,7 +231,6 @@ cat >expected <<'EOF'
"F((p0) & (X((p1) U (p2))))","15",3
"F((p0) & (X((p1) U (p2))))","16",3
"F((p0) & (X((p1) U (p2))))","17",3
"F((p0) & (X((p1) U (p2))))","18",3
"!(F((p0) & (X((p1) U (p2)))))","1",2
"!(F((p0) & (X((p1) U (p2)))))","2",2
"!(F((p0) & (X((p1) U (p2)))))","3",2
......@@ -255,7 +247,6 @@ cat >expected <<'EOF'
"!(F((p0) & (X((p1) U (p2)))))","15",2
"!(F((p0) & (X((p1) U (p2)))))","16",2
"!(F((p0) & (X((p1) U (p2)))))","17",2
"!(F((p0) & (X((p1) U (p2)))))","18",2
"F((p0) & (X((p1) & (X(F(p2))))))","1",4
"F((p0) & (X((p1) & (X(F(p2))))))","2",4
"F((p0) & (X((p1) & (X(F(p2))))))","3",4
......@@ -272,7 +263,6 @@ cat >expected <<'EOF'
"F((p0) & (X((p1) & (X(F(p2))))))","15",4
"F((p0) & (X((p1) & (X(F(p2))))))","16",4
"F((p0) & (X((p1) & (X(F(p2))))))","17",4
"F((p0) & (X((p1) & (X(F(p2))))))","18",4
"!(F((p0) & (X((p1) & (X(F(p2)))))))","1",3
"!(F((p0) & (X((p1) & (X(F(p2)))))))","2",3
"!(F((p0) & (X((p1) & (X(F(p2)))))))","3",3
......@@ -289,7 +279,6 @@ cat >expected <<'EOF'
"!(F((p0) & (X((p1) & (X(F(p2)))))))","15",3
"!(F((p0) & (X((p1) & (X(F(p2)))))))","16",3
"!(F((p0) & (X((p1) & (X(F(p2)))))))","17",3
"!(F((p0) & (X((p1) & (X(F(p2)))))))","18",3
"(p0) U ((p1) & (X((p2) U (p3))))","1",4
"(p0) U ((p1) & (X((p2) U (p3))))","2",4
"(p0) U ((p1) & (X((p2) U (p3))))","3",4
......@@ -306,7 +295,6 @@ cat >expected <<'EOF'
"(p0) U ((p1) & (X((p2) U (p3))))","15",4
"(p0) U ((p1) & (X((p2) U (p3))))","16",4
"(p0) U ((p1) & (X((p2) U (p3))))","17",4
"(p0) U ((p1) & (X((p2) U (p3))))","18",4
"!((p0) U ((p1) & (X((p2) U (p3)))))","1",4
"!((p0) U ((p1) & (X((p2) U (p3)))))","2",4
"!((p0) U ((p1) & (X((p2) U (p3)))))","3",4
......@@ -323,7 +311,6 @@ cat >expected <<'EOF'
"!((p0) U ((p1) & (X((p2) U (p3)))))","15",4
"!((p0) U ((p1) & (X((p2) U (p3)))))","16",4
"!((p0) U ((p1) & (X((p2) U (p3)))))","17",4
"!((p0) U ((p1) & (X((p2) U (p3)))))","18",4
"(G((p0) -> (F(p1)))) & (G((p2) -> (F(p3))))","1",4
"(G((p0) -> (F(p1)))) & (G((p2) -> (F(p3))))","2",4
"(G((p0) -> (F(p1)))) & (G((p2) -> (F(p3))))","3",4
......@@ -340,7 +327,6 @@ cat >expected <<'EOF'
"(G((p0) -> (F(p1)))) & (G((p2) -> (F(p3))))","15",4
"(G((p0) -> (F(p1)))) & (G((p2) -> (F(p3))))","16",4
"(G((p0) -> (F(p1)))) & (G((p2) -> (F(p3))))","17",4
"(G((p0) -> (F(p1)))) & (G((p2) -> (F(p3))))","18",4
"!((G((p0) -> (F(p1)))) & (G((p2) -> (F(p3)))))","1",3
"!((G((p0) -> (F(p1)))) & (G((p2) -> (F(p3)))))","2",3
"!((G((p0) -> (F(p1)))) & (G((p2) -> (F(p3)))))","3",3
......@@ -357,7 +343,6 @@ cat >expected <<'EOF'
"!((G((p0) -> (F(p1)))) & (G((p2) -> (F(p3)))))","15",3
"!((G((p0) -> (F(p1)))) & (G((p2) -> (F(p3)))))","16",3
"!((G((p0) -> (F(p1)))) & (G((p2) -> (F(p3)))))","17",3
"!((G((p0) -> (F(p1)))) & (G((p2) -> (F(p3)))))","18",3
"(G(F(p0))) & (G(F(p1)))","1",1
"(G(F(p0))) & (G(F(p1)))","2",1
"(G(F(p0))) & (G(F(p1)))","3",1
......@@ -374,7 +359,6 @@ cat >expected <<'EOF'
"(G(F(p0))) & (G(F(p1)))","15",1
"(G(F(p0))) & (G(F(p1)))","16",1
"(G(F(p0))) & (G(F(p1)))","17",1
"(G(F(p0))) & (G(F(p1)))","18",1
"!((G(F(p0))) & (G(F(p1))))","1",3
"!((G(F(p0))) & (G(F(p1))))","2",3
"!((G(F(p0))) & (G(F(p1))))","3",3
......@@ -391,7 +375,6 @@ cat >expected <<'EOF'
"!((G(F(p0))) & (G(F(p1))))","15",3
"!((G(F(p0))) & (G(F(p1))))","16",3
"!((G(F(p0))) & (G(F(p1))))","17",3
"!((G(F(p0))) & (G(F(p1))))","18",3
"(G(F(p0))) | (G(F(p1))) | (G(F(p2)))","1",1
"(G(F(p0))) | (G(F(p1))) | (G(F(p2)))","2",1
"(G(F(p0))) | (G(F(p1))) | (G(F(p2)))","3",1
......@@ -408,7 +391,6 @@ cat >expected <<'EOF'
"(G(F(p0))) | (G(F(p1))) | (G(F(p2)))","15",1
"(G(F(p0))) | (G(F(p1))) | (G(F(p2)))","16",1
"(G(F(p0))) | (G(F(p1))) | (G(F(p2)))","17",1
"(G(F(p0))) | (G(F(p1))) | (G(F(p2)))","18",1
"!((G(F(p0))) | (G(F(p1))) | (G(F(p2))))","1",2
"!((G(F(p0))) | (G(F(p1))) | (G(F(p2))))","2",2
"!((G(F(p0))) | (G(F(p1))) | (G(F(p2))))","3",2
......@@ -425,7 +407,6 @@ cat >expected <<'EOF'
"!((G(F(p0))) | (G(F(p1))) | (G(F(p2))))","15",2
"!((G(F(p0))) | (G(F(p1))) | (G(F(p2))))","16",2
"!((G(F(p0))) | (G(F(p1))) | (G(F(p2))))","17",2
"!((G(F(p0))) | (G(F(p1))) | (G(F(p2))))","18",2
"G(F(p0))","1",1
"G(F(p0))","2",1
"G(F(p0))","3",1
......@@ -442,7 +423,6 @@ cat >expected <<'EOF'
"G(F(p0))","15",1
"G(F(p0))","16",1
"G(F(p0))","17",1
"G(F(p0))","18",1
"!(G(F(p0)))","1",2
"!(G(F(p0)))","2",2
"!(G(F(p0)))","3",2
......@@ -459,7 +439,6 @@ cat >expected <<'EOF'
"!(G(F(p0)))","15",2
"!(G(F(p0)))","16",2
"!(G(F(p0)))","17",2
"!(G(F(p0)))","18",2
"(p0) U ((p1) U ((p2) U (p3)))","1",4
"(p0) U ((p1) U ((p2) U (p3)))","2",4
"(p0) U ((p1) U ((p2) U (p3)))","3",4
......@@ -476,7 +455,6 @@ cat >expected <<'EOF'
"(p0) U ((p1) U ((p2) U (p3)))","15",4
"(p0) U ((p1) U ((p2) U (p3)))","16",4
"(p0) U ((p1) U ((p2) U (p3)))","17",4
"(p0) U ((p1) U ((p2) U (p3)))","18",4
"!((p0) U ((p1) U ((p2) U (p3))))","1",4
"!((p0) U ((p1) U ((p2) U (p3))))","2",4
"!((p0) U ((p1) U ((p2) U (p3))))","3",4
......@@ -493,7 +471,6 @@ cat >expected <<'EOF'
"!((p0) U ((p1) U ((p2) U (p3))))","15",4
"!((p0) U ((p1) U ((p2) U (p3))))","16",4
"!((p0) U ((p1) U ((p2) U (p3))))","17",4
"!((p0) U ((p1) U ((p2) U (p3))))","18",4
"(G((p0) -> (F(p1)))) & (G(p2))","1",2
"(G((p0) -> (F(p1)))) & (G(p2))","2",2
"(G((p0) -> (F(p1)))) & (G(p2))","3",2
......@@ -510,7 +487,6 @@ cat >expected <<'EOF'
"(G((p0) -> (F(p1)))) & (G(p2))","15",2
"(G((p0) -> (F(p1)))) & (G(p2))","16",2
"(G((p0) -> (F(p1)))) & (G(p2))","17",2
"(G((p0) -> (F(p1)))) & (G(p2))","18",2
"!((G((p0) -> (F(p1)))) & (G(p2)))","1",3
"!((G((p0) -> (F(p1)))) & (G(p2)))","2",3
"!((G((p0) -> (F(p1)))) & (G(p2)))","3",3
......@@ -527,7 +503,6 @@ cat >expected <<'EOF'
"!((G((p0) -> (F(p1)))) & (G(p2)))","15",3
"!((G((p0) -> (F(p1)))) & (G(p2)))","16",3
"!((G((p0) -> (F(p1)))) & (G(p2)))","17",3
"!((G((p0) -> (F(p1)))) & (G(p2)))","18",3
"((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1))))","1",4
"((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1))))","2",4
"((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1))))","3",4
......@@ -544,7 +519,6 @@ cat >expected <<'EOF'
"((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1))))","15",4
"((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1))))","16",4
"((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1))))","17",4
"((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1))))","18",4
"!(((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1)))))","1",3
"!(((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1)))))","2",3
"!(((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1)))))","3",3
......@@ -561,7 +535,6 @@ cat >expected <<'EOF'
"!(((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1)))))","15",3
"!(((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1)))))","16",3
"!(((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1)))))","17",3
"!(((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1)))))","18",3
"(G((p0) -> (F(p1)))) & (G((p1) -> (F(p2))))","1",4
"(G((p0) -> (F(p1)))) & (G((p1) -> (F(p2))))","2",4
"(G((p0) -> (F(p1)))) & (G((p1) -> (F(p2))))","3",4
......@@ -578,7 +551,6 @@ cat >expected <<'EOF'
"(G((p0) -> (F(p1)))) & (G((p1) -> (F(p2))))","15",3
"(G((p0) -> (F(p1)))) & (G((p1) -> (F(p2))))","16",3
"(G((p0) -> (F(p1)))) & (G((p1) -> (F(p2))))","17",3
"(G((p0) -> (F(p1)))) & (G((p1) -> (F(p2))))","18",3
"!((G((p0) -> (F(p1)))) & (G((p1) -> (F(p2)))))","1",3
"!((G((p0) -> (F(p1)))) & (G((p1) -> (F(p2)))))","2",3
"!((G((p0) -> (F(p1)))) & (G((p1) -> (F(p2)))))","3",3
......@@ -595,7 +567,6 @@ cat >expected <<'EOF'
"!((G((p0) -> (F(p1)))) & (G((p1) -> (F(p2)))))","15",3
"!((G((p0) -> (F(p1)))) & (G((p1) -> (F(p2)))))","16",3
"!((G((p0) -> (F(p1)))) & (G((p1) -> (F(p2)))))","17",3
"!((G((p0) -> (F(p1)))) & (G((p1) -> (F(p2)))))","18",3
"(G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1)))))","1",3
"(G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1)))))","2",3
"(G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1)))))","3",3
......@@ -612,7 +583,6 @@ cat >expected <<'EOF'
"(G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1)))))","15",3
"(G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1)))))","16",3
"(G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1)))))","17",3
"(G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1)))))","18",3
"!((G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1))))))","1",3
"!((G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1))))))","2",3
"!((G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1))))))","3",3
......@@ -629,7 +599,6 @@ cat >expected <<'EOF'
"!((G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1))))))","15",3
"!((G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1))))))","16",3
"!((G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1))))))","17",3
"!((G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1))))))","18",3
"(G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3)))","1",1
"(G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3)))","2",1
"(G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3)))","3",1
......@@ -646,7 +615,6 @@ cat >expected <<'EOF'
"(G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3)))","15",1
"(G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3)))","16",1
"(G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3)))","17",1
"(G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3)))","18",1
"!((G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3))))","1",5
"!((G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3))))","2",5
"!((G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3))))","3",5
......@@ -663,7 +631,6 @@ cat >expected <<'EOF'
"!((G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3))))","15",5
"!((G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3))))","16",5
"!((G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3))))","17",5
"!((G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3))))","18",5
"G((p0) -> ((p1) U (p2)))","1",2
"G((p0) -> ((p1) U (p2)))","2",2
"G((p0) -> ((p1) U (p2)))","3",2
......@@ -680,7 +647,6 @@ cat >expected <<'EOF'
"G((p0) -> ((p1) U (p2)))","15",2
"G((p0) -> ((p1) U (p2)))","16",2
"G((p0) -> ((p1) U (p2)))","17",2
"G((p0) -> ((p1) U (p2)))","18",2
"!(G((p0) -> ((p1) U (p2))))","1",3
"!(G((p0) -> ((p1) U (p2))))","2",3
"!(G((p0) -> ((p1) U (p2))))","3",3
......@@ -697,7 +663,6 @@ cat >expected <<'EOF'
"!(G((p0) -> ((p1) U (p2))))","15",3
"!(G((p0) -> ((p1) U (p2))))","16",3
"!(G((p0) -> ((p1) U (p2))))","17",3
"!(G((p0) -> ((p1) U (p2))))","18",3
"G(F((p0) <-> (X(X(p1)))))","1",9
"G(F((p0) <-> (X(X(p1)))))","2",7
"G(F((p0) <-> (X(X(p1)))))","3",4
......@@ -714,7 +679,6 @@ cat >expected <<'EOF'
"G(F((p0) <-> (X(X(p1)))))","15",4
"G(F((p0) <-> (X(X(p1)))))","16",4
"G(F((p0) <-> (X(X(p1)))))","17",4
"G(F((p0) <-> (X(X(p1)))))","18",4
"!(G(F((p0) <-> (X(X(p1))))))","1",7
"!(G(F((p0) <-> (X(X(p1))))))","2",7
"!(G(F((p0) <-> (X(X(p1))))))","3",7
......@@ -731,7 +695,6 @@ cat >expected <<'EOF'
"!(G(F((p0) <-> (X(X(p1))))))","15",7
"!(G(F((p0) <-> (X(X(p1))))))","16",7
"!(G(F((p0) <-> (X(X(p1))))))","17",7
"!(G(F((p0) <-> (X(X(p1))))))","18",7
"(G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0))))","1",1
"(G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0))))","2",1
"(G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0))))","3",1
......@@ -748,7 +711,6 @@ cat >expected <<'EOF'
"(G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0))))","15",1
"(G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0))))","16",1
"(G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0))))","17",1
"(G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0))))","18",1
"!((G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0)))))","1",2
"!((G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0)))))","2",2
"!((G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0)))))","3",2
......@@ -765,7 +727,6 @@ cat >expected <<'EOF'
"!((G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0)))))","15",2
"!((G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0)))))","16",2
"!((G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0)))))","17",2
"!((G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0)))))","18",2
"G((p0) -> (X(X(X(p1)))))","1",8
"G((p0) -> (X(X(X(p1)))))","2",8
"G((p0) -> (X(X(X(p1)))))","3",8
......@@ -782,7 +743,6 @@ cat >expected <<'EOF'
"G((p0) -> (X(X(X(p1)))))","15",8
"G((p0) -> (X(X(X(p1)))))","16",8
"G((p0) -> (X(X(X(p1)))))","17",8
"G((p0) -> (X(X(X(p1)))))","18",8
"!(G((p0) -> (X(X(X(p1))))))","1",9
"!(G((p0) -> (X(X(X(p1))))))","2",9
"!(G((p0) -> (X(X(X(p1))))))","3",9
......@@ -799,7 +759,6 @@ cat >expected <<'EOF'
"!(G((p0) -> (X(X(X(p1))))))","15",9
"!(G((p0) -> (X(X(X(p1))))))","16",9
"!(G((p0) -> (X(X(X(p1))))))","17",9
"!(G((p0) -> (X(X(X(p1))))))","18",9
"G((p0) -> (F(p1)))","1",2
"G((p0) -> (F(p1)))","2",2
"G((p0) -> (F(p1)))","3",2
......@@ -816,7 +775,6 @@ cat >expected <<'EOF'
"G((p0) -> (F(p1)))","15",2
"G((p0) -> (F(p1)))","16",2
"G((p0) -> (F(p1)))","17",2
"G((p0) -> (F(p1)))","18",2
"!(G((p0) -> (F(p1))))","1",2
"!(G((p0) -> (F(p1))))","2",2
"!(G((p0) -> (F(p1))))","3",2
......@@ -833,7 +791,6 @@ cat >expected <<'EOF'
"!(G((p0) -> (F(p1))))","15",2
"!(G((p0) -> (F(p1))))","16",2
"!(G((p0) -> (F(p1))))","17",2
"!(G((p0) -> (F(p1))))","18",2
"G((p0) U ((p1) U ((!(p0)) U (!(p1)))))","1",1
"G((p0) U ((p1) U ((!(p0)) U (!(p1)))))","2",1
"G((p0) U ((p1) U ((!(p0)) U (!(p1)))))","3",1
......@@ -850,7 +807,6 @@ cat >expected <<'EOF'
"G((p0) U ((p1) U ((!(p0)) U (!(p1)))))","15",1
"G((p0) U ((p1) U ((!(p0)) U (!(p1)))))","16",1
"G((p0) U ((p1) U ((!(p0)) U (!(p1)))))","17",1
"G((p0) U ((p1) U ((!(p0)) U (!(p1)))))","18",1
"!(G((p0) U ((p1) U ((!(p0)) U (!(p1))))))","1",2
"!(G((p0) U ((p1) U ((!(p0)) U (!(p1))))))","2",2
"!(G((p0) U ((p1) U ((!(p0)) U (!(p1))))))","3",2
......@@ -867,7 +823,6 @@ cat >expected <<'EOF'
"!(G((p0) U ((p1) U ((!(p0)) U (!(p1))))))","15",2
"!(G((p0) U ((p1) U ((!(p0)) U (!(p1))))))","16",2
"!(G((p0) U ((p1) U ((!(p0)) U (!(p1))))))","17",2
"!(G((p0) U ((p1) U ((!(p0)) U (!(p1))))))","18",2
"X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1))","1",4
"X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1))","2",5
"X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1))","3",5
......@@ -884,7 +839,6 @@ cat >expected <<'EOF'
"X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1))","15",5
"X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1))","16",5
"X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1))","17",5
"X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1))","18",5
"!(X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1)))","1",6
"!(X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1)))","2",6
"!(X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1)))","3",6
......@@ -901,7 +855,6 @@ cat >expected <<'EOF'
"!(X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1)))","15",6
"!(X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1)))","16",6
"!(X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1)))","17",6
"!(X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1)))","18",6
"((!(p0)) M (!(p1))) W (F(!(p2)))","1",4
"((!(p0)) M (!(p1))) W (F(!(p2)))","2",5
"((!(p0)) M (!(p1))) W (F(!(p2)))","3",3
......@@ -918,7 +871,6 @@ cat >expected <<'EOF'
"((!(p0)) M (!(p1))) W (F(!(p2)))","15",3
"((!(p0)) M (!(p1))) W (F(!(p2)))","16",3
"((!(p0)) M (!(p1))) W (F(!(p2)))","17",3
"((!(p0)) M (!(p1))) W (F(!(p2)))","18",3
"!(((!(p0)) M (!(p1))) W (F(!(p2))))","1",3
"!(((!(p0)) M (!(p1))) W (F(!(p2))))","2",3
"!(((!(p0)) M (!(p1))) W (F(!(p2))))","3",3
......@@ -935,7 +887,6 @@ cat >expected <<'EOF'
"!(((!(p0)) M (!(p1))) W (F(!(p2))))","15",3
"!(((!(p0)) M (!(p1))) W (F(!(p2))))","16",3
"!(((!(p0)) M (!(p1))) W (F(!(p2))))","17",3
"!(((!(p0)) M (!(p1))) W (F(!(p2))))","18",3
"((p0) & (F(p1)) & (G(F(p2)))) R (p1)","1",2
"((p0) & (F(p1)) & (G(F(p2)))) R (p1)","2",3
"((p0) & (F(p1)) & (G(F(p2)))) R (p1)","3",3
......@@ -952,7 +903,6 @@ cat >expected <<'EOF'