spot: Implement dt*a_sat_minimize_assume(...) methods

* python/spot/__init__.py: Add 'assume' option.
* spot/misc/satsolver.cc: Add function to handle assumptions.
* spot/misc/satsolver.hh: Declare assumption function.
* spot/twaalgos/dtbasat.cc: Implement dtba_sat_minimize_assume.
* spot/twaalgos/dtbasat.hh: Declare it.
* spot/twaalgos/dtwasat.cc: Implement dtwa_sat_minimize_assume and
handle options.
* spot/twaalgos/dtwasat.hh: Declare it.
* spot/twaalgos/postproc.cc: Handle options.
* spot/twaalgos/postproc.hh: Use param_ var for incr and assume.
* tests/core/satmin.test: Add tests for the new function.
* tests/core/satmin2.test: Add tests for the new function.
* tests/python/satmin.py: Add tests for the new function.
This commit is contained in:
Alexandre GBAGUIDI AISSE 2016-10-11 16:08:46 +02:00
parent ee17c2dee4
commit 9a204b770f
12 changed files with 1021 additions and 69 deletions

View file

@ -859,7 +859,7 @@ for fun in ['remove_x', 'relabel', 'relabel_bse',
def sat_minimize(aut, acc=None, colored=False,
state_based=False, states=0,
max_states=0, dichotomy=False,
param=0, incr=False):
param=0, incr=False, assume=False):
args=''
if acc is not None:
if type(acc) is not str:
@ -881,6 +881,8 @@ def sat_minimize(aut, acc=None, colored=False,
args += ',param=' + str(param)
if incr:
args += ',incr'
if assume:
args += ',assume'
from spot.impl import sat_minimize as sm
return sm(aut, args, state_based)

View file

@ -74,7 +74,7 @@ namespace spot
// easy to check if psat_ was initialized or not.
satsolver::satsolver()
: cnf_tmp_(nullptr), cnf_stream_(nullptr), nclauses_(0), nvars_(0),
psat_(nullptr)
nassumptions_vars_(0), nsols_(0), psat_(nullptr)
{
if (cmd_.command_given())
{
@ -123,21 +123,27 @@ namespace spot
void satsolver::adjust_nvars(int nvars)
{
if (nvars < 0)
throw std::runtime_error(": total number of lits. must be at least 0.");
throw std::runtime_error("variable number must be at least 0");
if (psat_)
{
picosat_adjust(psat_, nvars);
picosat_adjust(psat_, nvars + nassumptions_vars_);
}
else
{
if (nvars < nvars_)
if (nvars + nassumptions_vars_ < nvars_)
{
throw std::runtime_error(
": wrong number of variables, a bigger one was already added.");
}
nvars_ = nvars;
nvars_ = nvars + nassumptions_vars_;
}
nsols_ = nvars;
}
void satsolver::set_nassumptions_vars(int nassumptions_vars)
{
nassumptions_vars_ = nassumptions_vars;
}
void satsolver::add(std::initializer_list<int> values)
@ -196,6 +202,15 @@ namespace spot
return std::make_pair(get_nb_vars(), get_nb_clauses());
}
void satsolver::assume(int lit)
{
if (psat_)
picosat_assume(psat_, lit);
else
throw std::runtime_error(
"satsolver::assume(...) can not be used with an external satsolver");
}
satsolver::solution
spot::satsolver::satsolver_get_sol(const char* filename)
{
@ -249,11 +264,8 @@ namespace spot
{
satsolver::solution sol;
if (res == PICOSAT_SATISFIABLE)
{
int nvars = get_nb_vars();
for (int lit = 1; lit <= nvars; ++lit)
for (int lit = 1; lit <= nsols_; ++lit)
sol.push_back(picosat_deref(psat_, lit) > 0);
}
return sol;
}

View file

@ -79,6 +79,9 @@ namespace spot
/// \brief Adjust the number of variables used in the cnf formula.
void adjust_nvars(int nvars);
/// \brief Declare the number of vars reserved for assumptions.
void set_nassumptions_vars(int nassumptions_vars);
/// \brief Add a list of lit. to the current clause.
void add(std::initializer_list<int> values);
@ -114,6 +117,10 @@ namespace spot
template<typename T, typename... Args>
void comment(T first, Args... args);
/// \brief Assume a litteral value.
/// Must only be used with distributed picolib.
void assume(int lit);
typedef std::vector<bool> solution;
typedef std::pair<int, solution> solution_pair;
@ -146,6 +153,11 @@ namespace spot
std::ostream* cnf_stream_;
int nclauses_;
int nvars_;
int nassumptions_vars_; // Surplus of vars (for 'assume' algorithm).
/// \brief Number of solutions to obtain from the satsolver
/// (without assuming litterals).
int nsols_;
/// \brief Picosat satsolver instance.
PicoSAT* psat_;

View file

@ -297,7 +297,8 @@ namespace spot
static
sat_stats dtba_to_sat(satsolver& solver,
const const_twa_graph_ptr& ref,
dict& d, bool state_based)
dict& d,
bool state_based)
{
// Compute the AP used.
bdd ap = ref->ap_vars();
@ -744,6 +745,159 @@ namespace spot
return res;
}
static twa_graph_ptr
dichotomy_dtba_research(int max,
dict& d,
satsolver& solver,
timer_map& t1,
const_twa_graph_ptr& prev,
bool state_based)
{
trace << "dichotomy_dtba_research(...)\n";
int min = 1;
int target = 0;
twa_graph_ptr res = nullptr;
while (min < max)
{
target = (max + min) / 2;
trace << "min:" << min << ", max:" << max << ", target:" << target
<< '\n';
solver.assume(d.nvars + target);
trace << "solver.assume(" << d.nvars + target << ")\n";
satsolver::solution_pair solution = solver.get_solution();
if (solution.second.empty())
{
trace << "UNSAT\n";
max = target;
}
else
{
trace << "SAT\n";
res = sat_build(solution.second, d, prev, state_based);
min = d.cand_size - stats_reachable(res).states + 1;
}
}
trace << "End with max:" << max << ", min:" << min << '\n';
if (!res)
{
trace << "All assumptions are UNSAT, let's try without...";
satsolver::solution_pair solution = solver.get_solution();
trace << (solution.second.empty() ? "UNSAT!\n" : "SAT\n");
res = solution.second.empty() ? nullptr :
sat_build(solution.second, d, prev, state_based);
}
t1.stop("solve");
print_log(t1, d.cand_size - target, res, solver); // SPOT_SATLOG.
return res ? res : std::const_pointer_cast<spot::twa_graph>(prev);
}
twa_graph_ptr
dtba_sat_minimize_assume(const const_twa_graph_ptr& a,
bool state_based,
int max_states,
int sat_incr_steps)
{
if (!a->acc().is_buchi())
throw std::runtime_error
("dtba_sat_minimize_assume() can only work with Büchi acceptance");
if (sat_incr_steps < 0)
throw std::runtime_error("with 'assume' algorithm, sat_incr_steps value "
" must be >= 0");
const_twa_graph_ptr prev = a;
dict d;
d.cand_size = (max_states < 0) ?
stats_reachable(prev).states - 1 : max_states;
if (d.cand_size == 0)
return nullptr;
trace << "dtba_sat_minimize_assume(..., states = " << d.cand_size
<< ", state_based = " << state_based << ")\n";
trace << "sat_incr_steps: " << sat_incr_steps << '\n';
twa_graph_ptr next = spot::make_twa_graph(spot::make_bdd_dict());
while (next && d.cand_size > 0)
{
// Warns the satsolver of the number of assumptions.
int n_assumptions = (int) d.cand_size < sat_incr_steps ?
d.cand_size - 1 : sat_incr_steps;
trace << "number of assumptions:" << n_assumptions << '\n';
satsolver solver;
solver.set_nassumptions_vars(n_assumptions);
// First iteration of classic solving.
timer_map t1;
t1.start("encode");
dtba_to_sat(solver, prev, d, state_based);
// Compute the AP used.
bdd ap = prev->ap_vars();
// Add all assumptions clauses.
unsigned dst = d.cand_size - 1;
unsigned alpha_size = d.alpha_vect.size();
for (int i = 1; i <= n_assumptions; i++, dst--)
{
cnf_comment("Next iteration:", dst, "\n");
int assume_lit = d.nvars + i;
cnf_comment("Add clauses to forbid the dst state.\n");
for (unsigned l = 0; l < alpha_size; ++l)
for (unsigned j = 0; j < d.cand_size; ++j)
{
cnf_comment(assume_lit, "→ ¬", d.fmt_t(j, l, dst), '\n');
solver.add({-assume_lit, -d.transid(j, l, dst), 0});
}
// The assumption which has just been encoded implies the preceding
// ones.
if (i != 1)
{
cnf_comment(assume_lit, "", assume_lit - 1, '\n');
solver.add({-assume_lit, assume_lit - 1, 0});
}
}
t1.stop("encode");
t1.start("solve");
if (n_assumptions)
{
trace << "solver.assume(" << d.nvars + n_assumptions << ")\n";
solver.assume(d.nvars + n_assumptions);
}
satsolver::solution_pair solution = solver.get_solution();
if (solution.second.empty() && n_assumptions) // UNSAT
{
trace << "UNSAT\n";
return dichotomy_dtba_research(n_assumptions, d, solver, t1, prev,
state_based);
}
t1.stop("solve");
trace << "SAT, restarting from zero\n";
next = solution.second.empty() ? nullptr :
sat_build(solution.second, d, prev, state_based);
print_log(t1, d.cand_size - n_assumptions, next, solver); // SPOT_SATLOG.
if (next)
{
prev = next;
d = dict();
d.cand_size = stats_reachable(prev).states - 1;
if (d.cand_size == 0)
next = nullptr;
}
}
return prev == a ? nullptr : std::const_pointer_cast<spot::twa_graph>(prev);
}
twa_graph_ptr
dtba_sat_minimize_incr(const const_twa_graph_ptr& a,
bool state_based, int max_states, int sat_incr_steps)

View file

@ -81,4 +81,23 @@ namespace spot
bool state_based = false,
int max_states = -1,
int param = 2);
/// \brief Attempt to minimize a deterministic TBA incrementally with a SAT
/// solver.
///
/// This acts like dtba_sat_synthetize() and obtains a first minimized
/// automaton. Then, it adds <param> assumptions, such that each assumption
/// removes a new state and implies the previous assumptions. A first
/// resolution is attempted assuming the last assumption (thus involving all
/// the previous ones). If the problem is SAT several stages have just been
/// won and all this process is restarted. Otherwise, we know that the
/// minimal automaton can be obtained with fewer assumption. This
/// automaton is found dichotomously.
///
/// If no smaller TBA exist, this returns a null pointer.
SPOT_API twa_graph_ptr
dtba_sat_minimize_assume(const const_twa_graph_ptr& a,
bool state_based = false,
int max_states = -1,
int param = 6);
}

View file

@ -532,8 +532,11 @@ namespace spot
typedef std::pair<int, int> sat_stats;
static
sat_stats dtwa_to_sat(satsolver& solver, const_twa_graph_ptr ref,
dict& d, bool state_based, bool colored)
sat_stats dtwa_to_sat(satsolver& solver,
const_twa_graph_ptr ref,
dict& d,
bool state_based,
bool colored)
{
#if DEBUG
debug_dict = ref->get_dict();
@ -1054,6 +1057,166 @@ namespace spot
}
}
static twa_graph_ptr
dichotomy_dtwa_research(int max,
dict& d,
satsolver& solver,
timer_map& t1,
const_twa_graph_ptr& prev,
bool state_based)
{
trace << "dichotomy_dtwa_research(...)\n";
int min = 1;
int target = 0;
twa_graph_ptr res = nullptr;
while (min < max)
{
target = (max + min) / 2;
trace << "min:" << min << ", max:" << max << ", target:" << target
<< '\n';
solver.assume(d.nvars + target);
trace << "solver.assume(" << d.nvars + target << ")\n";
satsolver::solution_pair solution = solver.get_solution();
if (solution.second.empty())
{
trace << "UNSAT\n";
max = target;
}
else
{
trace << "SAT\n";
res = sat_build(solution.second, d, prev, state_based);
min = d.cand_size - stats_reachable(res).states + 1;
}
}
trace << "End with max:" << max << ", min:" << min << '\n';
if (!res)
{
trace << "All assumptions are UNSAT, let's try without...";
satsolver::solution_pair solution = solver.get_solution();
trace << (solution.second.empty() ? "UNSAT!\n" : "SAT\n");
res = solution.second.empty() ? nullptr :
sat_build(solution.second, d, prev, state_based);
}
t1.stop("solve");
print_log(t1, d.cand_size - target , res, solver); // SPOT_SATLOG.
return res ? res : std::const_pointer_cast<spot::twa_graph>(prev);
}
twa_graph_ptr
dtwa_sat_minimize_assume(const const_twa_graph_ptr& a,
unsigned target_acc_number,
const acc_cond::acc_code& target_acc,
bool state_based,
int max_states,
bool colored,
int sat_incr_steps)
{
if (sat_incr_steps < 0)
throw std::runtime_error("with 'assume' algorithm, sat_incr_steps value "
"must be >= 0");
const_twa_graph_ptr prev = a;
dict d(prev);
d.cand_size = (max_states < 0) ?
stats_reachable(prev).states - 1 : max_states;
d.cand_nacc = target_acc_number;
d.cand_acc = target_acc;
if (d.cand_size == 0)
return nullptr;
trace << "dtwa_sat_minimize_assume(..., nacc = " << target_acc_number
<< ", acc = \"" << target_acc << "\", states = " << d.cand_size
<< ", state_based = " << state_based << ")\n";
trace << "sat_incr_steps: " << sat_incr_steps << '\n';
twa_graph_ptr next = spot::make_twa_graph(spot::make_bdd_dict());
while (next && d.cand_size > 0)
{
// Warns the satsolver of the number of assumptions.
int n_assumptions = (int) d.cand_size < sat_incr_steps ?
d.cand_size - 1 : sat_incr_steps;
trace << "number of assumptions:" << n_assumptions << '\n';
satsolver solver;
solver.set_nassumptions_vars(n_assumptions);
// First iteration of classic solving.
timer_map t1;
t1.start("encode");
dtwa_to_sat(solver, prev, d, state_based, colored);
// Compute the AP used.
bdd ap = prev->ap_vars();
// Add all assumptions clauses.
unsigned dst = d.cand_size - 1;
unsigned alpha_size = d.alpha_vect.size();
for (int i = 1; i <= n_assumptions; i++, dst--)
{
cnf_comment("Next iteration:", dst, "\n");
int assume_lit = d.nvars + i;
cnf_comment("Add clauses to forbid the dst state.\n");
for (unsigned l = 0; l < alpha_size; ++l)
for (unsigned j = 0; j < d.cand_size; ++j)
{
cnf_comment(assume_lit, "→ ¬", d.fmt_t(j, l, dst), '\n');
solver.add({-assume_lit, -d.transid(j, l, dst), 0});
}
// The assumption which has just been encoded implies the preceding
// ones.
if (i != 1)
{
cnf_comment(assume_lit, "", assume_lit - 1, '\n');
solver.add({-assume_lit, assume_lit - 1, 0});
}
}
t1.stop("encode");
t1.start("solve");
if (n_assumptions)
{
trace << "solver.assume(" << d.nvars + n_assumptions << ")\n";
solver.assume(d.nvars + n_assumptions);
}
satsolver::solution_pair solution = solver.get_solution();
if (solution.second.empty() && n_assumptions) // UNSAT
{
trace << "UNSAT\n";
twa_graph_ptr res = dichotomy_dtwa_research(n_assumptions, d, solver,
t1, prev, state_based);
return res == a ? nullptr : res;
}
t1.stop("solve");
trace << "SAT, restarting from zero\n";
next = solution.second.empty() ? nullptr :
sat_build(solution.second, d, prev, state_based);
print_log(t1, d.cand_size - n_assumptions, next, solver); // SPOT_SATLOG.
if (next)
{
prev = next;
d = dict(prev);
d.cand_size = stats_reachable(prev).states - 1;
d.cand_nacc = target_acc_number;
d.cand_acc = target_acc;
if (d.cand_size == 0)
next = nullptr;
}
}
return prev == a ? nullptr : std::const_pointer_cast<spot::twa_graph>(prev);
}
twa_graph_ptr
dtwa_sat_minimize_incr(const const_twa_graph_ptr& a,
unsigned target_acc_number,
@ -1220,13 +1383,14 @@ namespace spot
("SAT-based minimization only works with deterministic automata");
bool dicho = om.get("dichotomy", 0);
bool incr = om.get("incr", 0);
bool assume = om.get("assume", 0);
int param = om.get("param", 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);
bool incr = om.get("incr", 0);
int param = om.get("param", 0);
// No more om.get() below this.
om.report_unused_options();
@ -1323,6 +1487,11 @@ namespace spot
if (incr)
a = dtwa_sat_minimize_incr(a, nacc, target_acc, state_based,
max_states, colored, param);
else if (assume)
a = dtwa_sat_minimize_assume(a, nacc, target_acc, state_based,
max_states, colored, param);
else
a = (dicho ? dtwa_sat_minimize_dichotomy
: dtwa_sat_minimize)
@ -1332,6 +1501,10 @@ namespace spot
{
if (incr)
a = dtba_sat_minimize_incr(a, state_based, max_states, param);
else if (assume)
a = dtba_sat_minimize_assume(a, state_based, max_states, assume);
else
a = (dicho ? dtba_sat_minimize_dichotomy
: dtba_sat_minimize)

View file

@ -102,6 +102,27 @@ namespace spot
bool colored = false,
int param = 2);
/// \brief Attempt to minimize a deterministic TωA with a SAT solver.
///
/// This acts like dtba_sat_synthetize() and obtains a first minimized
/// automaton. Then, it adds <param> assumptions, such that each assumption
/// removes a new state and implies the previous assumptions. A first
/// resolution is attempted assuming the last assumption (thus involving all
/// the previous ones). If the problem is SAT several stages have just been
/// won and all this process is restarted. Otherwise, it is known that the
/// minimal automaton can be obtained with fewer assumption. This
/// automaton is found dichotomously.
///
/// If no smaller TGBA exists, this returns a null pointer.
SPOT_API twa_graph_ptr
dtwa_sat_minimize_assume(const const_twa_graph_ptr& a,
unsigned target_acc_number,
const acc_cond::acc_code& target_acc,
bool state_based = false,
int max_states = -1,
bool colored = false,
int param = 6);
/// \brief High-level interface to SAT-based minimization
///
/// Minimize the automaton \a aut, using options \a opt.

View file

@ -69,8 +69,8 @@ namespace spot
scc_filter_ = opt->get("scc-filter", -1);
ba_simul_ = opt->get("ba-simul", -1);
tba_determinisation_ = opt->get("tba-det", 0);
incr_ = opt->get("incr", 0);
sat_minimize_ = opt->get("sat-minimize", 0);
param_ = opt->get("param", 0);
sat_acc_ = opt->get("sat-acc", 0);
sat_states_ = opt->get("sat-states", 0);
state_based_ = opt->get("state-based", 0);
@ -430,8 +430,10 @@ namespace spot
res = dtba_sat_minimize(res, state_based_);
else if (sat_minimize_ == 2)
res = dtba_sat_minimize_dichotomy(res, state_based_);
else // sat_minimize_ = 3
res = dtba_sat_minimize_incr(res, state_based_, -1, incr_);
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_);
}
else
{
@ -450,11 +452,16 @@ namespace spot
(res, target_acc,
acc_cond::acc_code::generalized_buchi(target_acc),
state_based_);
else // sat_minimize_ = 3
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, incr_);
state_based_, -1, false, param_);
else // if (sat_minimize_ == 4)
res = dtwa_sat_minimize_assume
(res, target_acc,
acc_cond::acc_code::generalized_buchi(target_acc),
state_based_, -1, false, param_);
}
if (res)

View file

@ -188,8 +188,8 @@ namespace spot
int scc_filter_ = -1;
int ba_simul_ = -1;
bool tba_determinisation_ = false;
int incr_ = 0;
int sat_minimize_ = 0;
int param_ = 0;
int sat_acc_ = 0;
int sat_states_ = 0;
bool state_based_ = false;

View file

@ -104,16 +104,20 @@ $ltlcross -F formulas \
"{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=3 %f >%T" \
"{9} $ltl2tgba --det --lbtt -x 'sat-minimize=3, incr=-1' %f >%T" \
"{10} $ltl2tgba --det --lbtt -x 'sat-minimize=3, incr=0' %f >%T" \
"{11} $ltl2tgba --det --lbtt -x 'sat-minimize=3, incr=1' %f >%T" \
"{12} $ltl2tgba --det --lbtt -x 'sat-minimize=3, incr=2' %f >%T" \
"{13} $ltl2tgba --det --lbtt -x 'sat-minimize=3, incr=50' %f >%T" \
"{9} $ltl2tgba --det --lbtt -x 'sat-minimize=3, param=-1' %f >%T" \
"{10} $ltl2tgba --det --lbtt -x 'sat-minimize=3, param=0' %f >%T" \
"{11} $ltl2tgba --det --lbtt -x 'sat-minimize=3, param=1' %f >%T" \
"{12} $ltl2tgba --det --lbtt -x 'sat-minimize=3, param=2' %f >%T" \
"{13} $ltl2tgba --det --lbtt -x 'sat-minimize=3, param=50' %f >%T" \
"{14} $ltl2tgba --det --lbtt -x 'sat-minimize=4, param=0' %f >%T" \
"{15} $ltl2tgba --det --lbtt -x 'sat-minimize=4, param=1' %f >%T" \
"{16} $ltl2tgba --det --lbtt -x 'sat-minimize=4, param=2' %f >%T" \
"{17} $ltl2tgba --det --lbtt -x 'sat-minimize=4, param=50' %f >%T" \
--csv=det.csv
grep -v ',\"5\",' det.csv | cut -d ',' -f '1,2,6' > output
cat > expected << EOF
cat > expected <<EOF
"formula","tool","states"
"X(X(p0))","1",4
"X(X(p0))","2",4
@ -127,6 +131,10 @@ cat > expected << EOF
"X(X(p0))","11",4
"X(X(p0))","12",4
"X(X(p0))","13",4
"X(X(p0))","14",4
"X(X(p0))","15",4
"X(X(p0))","16",4
"X(X(p0))","17",4
"!(X(X(p0)))","1",4
"!(X(X(p0)))","2",4
"!(X(X(p0)))","3",4
@ -139,6 +147,10 @@ cat > expected << EOF
"!(X(X(p0)))","11",4
"!(X(X(p0)))","12",4
"!(X(X(p0)))","13",4
"!(X(X(p0)))","14",4
"!(X(X(p0)))","15",4
"!(X(X(p0)))","16",4
"!(X(X(p0)))","17",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
@ -151,6 +163,10 @@ cat > expected << EOF
"G(F((p0) -> (X(X(X(p1))))))","11",1
"G(F((p0) -> (X(X(X(p1))))))","12",1
"G(F((p0) -> (X(X(X(p1))))))","13",1
"G(F((p0) -> (X(X(X(p1))))))","14",1
"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)))))))","1",2
"!(G(F((p0) -> (X(X(X(p1)))))))","2",2
"!(G(F((p0) -> (X(X(X(p1)))))))","3",2
@ -163,6 +179,10 @@ cat > expected << EOF
"!(G(F((p0) -> (X(X(X(p1)))))))","11",2
"!(G(F((p0) -> (X(X(X(p1)))))))","12",2
"!(G(F((p0) -> (X(X(X(p1)))))))","13",2
"!(G(F((p0) -> (X(X(X(p1)))))))","14",2
"!(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
"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
@ -175,6 +195,10 @@ cat > expected << EOF
"F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3))))))))))","11",5
"F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3))))))))))","12",5
"F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3))))))))))","13",5
"F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3))))))))))","14",5
"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)))))))))))","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
@ -187,6 +211,10 @@ cat > expected << EOF
"!(F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3)))))))))))","11",4
"!(F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3)))))))))))","12",4
"!(F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3)))))))))))","13",4
"!(F((p0) & (X(F((p1) & (X(F((p2) & (X(F(p3)))))))))))","14",4
"!(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((p1) U (p2))))","1",3
"F((p0) & (X((p1) U (p2))))","2",3
"F((p0) & (X((p1) U (p2))))","3",3
@ -199,6 +227,10 @@ cat > expected << EOF
"F((p0) & (X((p1) U (p2))))","11",3
"F((p0) & (X((p1) U (p2))))","12",3
"F((p0) & (X((p1) U (p2))))","13",3
"F((p0) & (X((p1) U (p2))))","14",3
"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)))))","1",2
"!(F((p0) & (X((p1) U (p2)))))","2",2
"!(F((p0) & (X((p1) U (p2)))))","3",2
@ -211,6 +243,10 @@ cat > expected << EOF
"!(F((p0) & (X((p1) U (p2)))))","11",2
"!(F((p0) & (X((p1) U (p2)))))","12",2
"!(F((p0) & (X((p1) U (p2)))))","13",2
"!(F((p0) & (X((p1) U (p2)))))","14",2
"!(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) & (X(F(p2))))))","1",4
"F((p0) & (X((p1) & (X(F(p2))))))","2",4
"F((p0) & (X((p1) & (X(F(p2))))))","3",4
@ -223,6 +259,10 @@ cat > expected << EOF
"F((p0) & (X((p1) & (X(F(p2))))))","11",4
"F((p0) & (X((p1) & (X(F(p2))))))","12",4
"F((p0) & (X((p1) & (X(F(p2))))))","13",4
"F((p0) & (X((p1) & (X(F(p2))))))","14",4
"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)))))))","1",3
"!(F((p0) & (X((p1) & (X(F(p2)))))))","2",3
"!(F((p0) & (X((p1) & (X(F(p2)))))))","3",3
@ -235,6 +275,10 @@ cat > expected << EOF
"!(F((p0) & (X((p1) & (X(F(p2)))))))","11",3
"!(F((p0) & (X((p1) & (X(F(p2)))))))","12",3
"!(F((p0) & (X((p1) & (X(F(p2)))))))","13",3
"!(F((p0) & (X((p1) & (X(F(p2)))))))","14",3
"!(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
"(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
@ -247,6 +291,10 @@ cat > expected << EOF
"(p0) U ((p1) & (X((p2) U (p3))))","11",4
"(p0) U ((p1) & (X((p2) U (p3))))","12",4
"(p0) U ((p1) & (X((p2) U (p3))))","13",4
"(p0) U ((p1) & (X((p2) U (p3))))","14",4
"(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)))))","1",4
"!((p0) U ((p1) & (X((p2) U (p3)))))","2",4
"!((p0) U ((p1) & (X((p2) U (p3)))))","3",4
@ -259,6 +307,10 @@ cat > expected << EOF
"!((p0) U ((p1) & (X((p2) U (p3)))))","11",4
"!((p0) U ((p1) & (X((p2) U (p3)))))","12",4
"!((p0) U ((p1) & (X((p2) U (p3)))))","13",4
"!((p0) U ((p1) & (X((p2) U (p3)))))","14",4
"!((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
"(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
@ -271,6 +323,10 @@ cat > expected << EOF
"(G((p0) -> (F(p1)))) & (G((p2) -> (F(p3))))","11",4
"(G((p0) -> (F(p1)))) & (G((p2) -> (F(p3))))","12",4
"(G((p0) -> (F(p1)))) & (G((p2) -> (F(p3))))","13",4
"(G((p0) -> (F(p1)))) & (G((p2) -> (F(p3))))","14",4
"(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)))))","1",3
"!((G((p0) -> (F(p1)))) & (G((p2) -> (F(p3)))))","2",3
"!((G((p0) -> (F(p1)))) & (G((p2) -> (F(p3)))))","3",3
@ -283,6 +339,10 @@ cat > expected << EOF
"!((G((p0) -> (F(p1)))) & (G((p2) -> (F(p3)))))","11",3
"!((G((p0) -> (F(p1)))) & (G((p2) -> (F(p3)))))","12",3
"!((G((p0) -> (F(p1)))) & (G((p2) -> (F(p3)))))","13",3
"!((G((p0) -> (F(p1)))) & (G((p2) -> (F(p3)))))","14",3
"!((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(F(p0))) & (G(F(p1)))","1",1
"(G(F(p0))) & (G(F(p1)))","2",1
"(G(F(p0))) & (G(F(p1)))","3",1
@ -295,6 +355,10 @@ cat > expected << EOF
"(G(F(p0))) & (G(F(p1)))","11",1
"(G(F(p0))) & (G(F(p1)))","12",1
"(G(F(p0))) & (G(F(p1)))","13",1
"(G(F(p0))) & (G(F(p1)))","14",1
"(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))))","1",3
"!((G(F(p0))) & (G(F(p1))))","2",3
"!((G(F(p0))) & (G(F(p1))))","3",3
@ -307,6 +371,10 @@ cat > expected << EOF
"!((G(F(p0))) & (G(F(p1))))","11",3
"!((G(F(p0))) & (G(F(p1))))","12",3
"!((G(F(p0))) & (G(F(p1))))","13",3
"!((G(F(p0))) & (G(F(p1))))","14",3
"!((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))) | (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
@ -319,6 +387,10 @@ cat > expected << EOF
"(G(F(p0))) | (G(F(p1))) | (G(F(p2)))","11",1
"(G(F(p0))) | (G(F(p1))) | (G(F(p2)))","12",1
"(G(F(p0))) | (G(F(p1))) | (G(F(p2)))","13",1
"(G(F(p0))) | (G(F(p1))) | (G(F(p2)))","14",1
"(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))))","1",2
"!((G(F(p0))) | (G(F(p1))) | (G(F(p2))))","2",2
"!((G(F(p0))) | (G(F(p1))) | (G(F(p2))))","3",2
@ -331,6 +403,10 @@ cat > expected << EOF
"!((G(F(p0))) | (G(F(p1))) | (G(F(p2))))","11",2
"!((G(F(p0))) | (G(F(p1))) | (G(F(p2))))","12",2
"!((G(F(p0))) | (G(F(p1))) | (G(F(p2))))","13",2
"!((G(F(p0))) | (G(F(p1))) | (G(F(p2))))","14",2
"!((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))","1",1
"G(F(p0))","2",1
"G(F(p0))","3",1
@ -343,6 +419,10 @@ cat > expected << EOF
"G(F(p0))","11",1
"G(F(p0))","12",1
"G(F(p0))","13",1
"G(F(p0))","14",1
"G(F(p0))","15",1
"G(F(p0))","16",1
"G(F(p0))","17",1
"!(G(F(p0)))","1",2
"!(G(F(p0)))","2",2
"!(G(F(p0)))","3",2
@ -355,6 +435,10 @@ cat > expected << EOF
"!(G(F(p0)))","11",2
"!(G(F(p0)))","12",2
"!(G(F(p0)))","13",2
"!(G(F(p0)))","14",2
"!(G(F(p0)))","15",2
"!(G(F(p0)))","16",2
"!(G(F(p0)))","17",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
@ -367,6 +451,10 @@ cat > expected << EOF
"(p0) U ((p1) U ((p2) U (p3)))","11",4
"(p0) U ((p1) U ((p2) U (p3)))","12",4
"(p0) U ((p1) U ((p2) U (p3)))","13",4
"(p0) U ((p1) U ((p2) U (p3)))","14",4
"(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))))","1",4
"!((p0) U ((p1) U ((p2) U (p3))))","2",4
"!((p0) U ((p1) U ((p2) U (p3))))","3",4
@ -379,6 +467,10 @@ cat > expected << EOF
"!((p0) U ((p1) U ((p2) U (p3))))","11",4
"!((p0) U ((p1) U ((p2) U (p3))))","12",4
"!((p0) U ((p1) U ((p2) U (p3))))","13",4
"!((p0) U ((p1) U ((p2) U (p3))))","14",4
"!((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
"(G((p0) -> (F(p1)))) & (G(p2))","1",2
"(G((p0) -> (F(p1)))) & (G(p2))","2",2
"(G((p0) -> (F(p1)))) & (G(p2))","3",2
@ -391,6 +483,10 @@ cat > expected << EOF
"(G((p0) -> (F(p1)))) & (G(p2))","11",2
"(G((p0) -> (F(p1)))) & (G(p2))","12",2
"(G((p0) -> (F(p1)))) & (G(p2))","13",2
"(G((p0) -> (F(p1)))) & (G(p2))","14",2
"(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)))","1",3
"!((G((p0) -> (F(p1)))) & (G(p2)))","2",3
"!((G((p0) -> (F(p1)))) & (G(p2)))","3",3
@ -403,6 +499,10 @@ cat > expected << EOF
"!((G((p0) -> (F(p1)))) & (G(p2)))","11",3
"!((G((p0) -> (F(p1)))) & (G(p2)))","12",3
"!((G((p0) -> (F(p1)))) & (G(p2)))","13",3
"!((G((p0) -> (F(p1)))) & (G(p2)))","14",3
"!((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(!(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
@ -415,6 +515,10 @@ cat > expected << EOF
"((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1))))","11",4
"((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1))))","12",4
"((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1))))","13",4
"((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1))))","14",4
"((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)))))","1",3
"!(((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1)))))","2",3
"!(((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1)))))","3",3
@ -427,6 +531,10 @@ cat > expected << EOF
"!(((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1)))))","11",3
"!(((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1)))))","12",3
"!(((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1)))))","13",3
"!(((G(p0)) -> (F(p1))) & ((G(!(p0))) -> (F(!(p1)))))","14",3
"!(((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((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
@ -439,6 +547,10 @@ cat > expected << EOF
"(G((p0) -> (F(p1)))) & (G((p1) -> (F(p2))))","11",3
"(G((p0) -> (F(p1)))) & (G((p1) -> (F(p2))))","12",3
"(G((p0) -> (F(p1)))) & (G((p1) -> (F(p2))))","13",3
"(G((p0) -> (F(p1)))) & (G((p1) -> (F(p2))))","14",3
"(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)))))","1",3
"!((G((p0) -> (F(p1)))) & (G((p1) -> (F(p2)))))","2",3
"!((G((p0) -> (F(p1)))) & (G((p1) -> (F(p2)))))","3",3
@ -451,6 +563,10 @@ cat > expected << EOF
"!((G((p0) -> (F(p1)))) & (G((p1) -> (F(p2)))))","11",3
"!((G((p0) -> (F(p1)))) & (G((p1) -> (F(p2)))))","12",3
"!((G((p0) -> (F(p1)))) & (G((p1) -> (F(p2)))))","13",3
"!((G((p0) -> (F(p1)))) & (G((p1) -> (F(p2)))))","14",3
"!((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((!(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
@ -463,6 +579,10 @@ cat > expected << EOF
"(G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1)))))","11",3
"(G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1)))))","12",3
"(G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1)))))","13",3
"(G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1)))))","14",3
"(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))))))","1",3
"!((G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1))))))","2",3
"!((G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1))))))","3",3
@ -475,6 +595,10 @@ cat > expected << EOF
"!((G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1))))))","11",3
"!((G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1))))))","12",3
"!((G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1))))))","13",3
"!((G((p0) -> (F(p1)))) & (G((!(p0)) -> (F(!(p1))))))","14",3
"!((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(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
@ -487,6 +611,10 @@ cat > expected << EOF
"(G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3)))","11",1
"(G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3)))","12",1
"(G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3)))","13",1
"(G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3)))","14",1
"(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))))","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
@ -499,6 +627,10 @@ cat > expected << EOF
"!((G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3))))","11",5
"!((G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3))))","12",5
"!((G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3))))","13",5
"!((G(F(p0))) & (G(F(p1))) & (G(F(p2))) & (G(F(p3))))","14",5
"!((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((p0) -> ((p1) U (p2)))","1",2
"G((p0) -> ((p1) U (p2)))","2",2
"G((p0) -> ((p1) U (p2)))","3",2
@ -511,6 +643,10 @@ cat > expected << EOF
"G((p0) -> ((p1) U (p2)))","11",2
"G((p0) -> ((p1) U (p2)))","12",2
"G((p0) -> ((p1) U (p2)))","13",2
"G((p0) -> ((p1) U (p2)))","14",2
"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))))","1",3
"!(G((p0) -> ((p1) U (p2))))","2",3
"!(G((p0) -> ((p1) U (p2))))","3",3
@ -523,6 +659,10 @@ cat > expected << EOF
"!(G((p0) -> ((p1) U (p2))))","11",3
"!(G((p0) -> ((p1) U (p2))))","12",3
"!(G((p0) -> ((p1) U (p2))))","13",3
"!(G((p0) -> ((p1) U (p2))))","14",3
"!(G((p0) -> ((p1) U (p2))))","15",3
"!(G((p0) -> ((p1) U (p2))))","16",3
"!(G((p0) -> ((p1) U (p2))))","17",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
@ -535,6 +675,10 @@ cat > expected << EOF
"G(F((p0) <-> (X(X(p1)))))","11",4
"G(F((p0) <-> (X(X(p1)))))","12",4
"G(F((p0) <-> (X(X(p1)))))","13",4
"G(F((p0) <-> (X(X(p1)))))","14",4
"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))))))","1",7
"!(G(F((p0) <-> (X(X(p1))))))","2",7
"!(G(F((p0) <-> (X(X(p1))))))","3",7
@ -547,6 +691,10 @@ cat > expected << EOF
"!(G(F((p0) <-> (X(X(p1))))))","11",7
"!(G(F((p0) <-> (X(X(p1))))))","12",7
"!(G(F((p0) <-> (X(X(p1))))))","13",7
"!(G(F((p0) <-> (X(X(p1))))))","14",7
"!(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(!(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
@ -559,6 +707,10 @@ cat > expected << EOF
"(G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0))))","11",1
"(G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0))))","12",1
"(G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0))))","13",1
"(G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0))))","14",1
"(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)))))","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
@ -571,6 +723,10 @@ cat > expected << EOF
"!((G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0)))))","11",2
"!((G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0)))))","12",2
"!((G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0)))))","13",2
"!((G(!(p0))) & (G((p1) -> (F(p2)))) & (G((p2) -> (F(p0)))))","14",2
"!((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) -> (X(X(X(p1)))))","1",8
"G((p0) -> (X(X(X(p1)))))","2",8
"G((p0) -> (X(X(X(p1)))))","3",8
@ -583,6 +739,10 @@ cat > expected << EOF
"G((p0) -> (X(X(X(p1)))))","11",8
"G((p0) -> (X(X(X(p1)))))","12",8
"G((p0) -> (X(X(X(p1)))))","13",8
"G((p0) -> (X(X(X(p1)))))","14",8
"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))))))","1",9
"!(G((p0) -> (X(X(X(p1))))))","2",9
"!(G((p0) -> (X(X(X(p1))))))","3",9
@ -595,6 +755,10 @@ cat > expected << EOF
"!(G((p0) -> (X(X(X(p1))))))","11",9
"!(G((p0) -> (X(X(X(p1))))))","12",9
"!(G((p0) -> (X(X(X(p1))))))","13",9
"!(G((p0) -> (X(X(X(p1))))))","14",9
"!(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) -> (F(p1)))","1",2
"G((p0) -> (F(p1)))","2",2
"G((p0) -> (F(p1)))","3",2
@ -607,6 +771,10 @@ cat > expected << EOF
"G((p0) -> (F(p1)))","11",2
"G((p0) -> (F(p1)))","12",2
"G((p0) -> (F(p1)))","13",2
"G((p0) -> (F(p1)))","14",2
"G((p0) -> (F(p1)))","15",2
"G((p0) -> (F(p1)))","16",2
"G((p0) -> (F(p1)))","17",2
"!(G((p0) -> (F(p1))))","1",2
"!(G((p0) -> (F(p1))))","2",2
"!(G((p0) -> (F(p1))))","3",2
@ -619,6 +787,10 @@ cat > expected << EOF
"!(G((p0) -> (F(p1))))","11",2
"!(G((p0) -> (F(p1))))","12",2
"!(G((p0) -> (F(p1))))","13",2
"!(G((p0) -> (F(p1))))","14",2
"!(G((p0) -> (F(p1))))","15",2
"!(G((p0) -> (F(p1))))","16",2
"!(G((p0) -> (F(p1))))","17",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
@ -631,6 +803,10 @@ cat > expected << EOF
"G((p0) U ((p1) U ((!(p0)) U (!(p1)))))","11",1
"G((p0) U ((p1) U ((!(p0)) U (!(p1)))))","12",1
"G((p0) U ((p1) U ((!(p0)) U (!(p1)))))","13",1
"G((p0) U ((p1) U ((!(p0)) U (!(p1)))))","14",1
"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))))))","1",2
"!(G((p0) U ((p1) U ((!(p0)) U (!(p1))))))","2",2
"!(G((p0) U ((p1) U ((!(p0)) U (!(p1))))))","3",2
@ -643,6 +819,10 @@ cat > expected << EOF
"!(G((p0) U ((p1) U ((!(p0)) U (!(p1))))))","11",2
"!(G((p0) U ((p1) U ((!(p0)) U (!(p1))))))","12",2
"!(G((p0) U ((p1) U ((!(p0)) U (!(p1))))))","13",2
"!(G((p0) U ((p1) U ((!(p0)) U (!(p1))))))","14",2
"!(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
"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
@ -655,6 +835,10 @@ cat > expected << EOF
"X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1))","11",5
"X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1))","12",5
"X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1))","13",5
"X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1))","14",5
"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)))","1",6
"!(X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1)))","2",6
"!(X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1)))","3",6
@ -667,6 +851,10 @@ cat > expected << EOF
"!(X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1)))","11",6
"!(X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1)))","12",6
"!(X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1)))","13",6
"!(X((((p0) & (p1)) R ((!(p0)) U (!(p2)))) R (p1)))","14",6
"!(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
"((!(p0)) M (!(p1))) W (F(!(p2)))","1",4
"((!(p0)) M (!(p1))) W (F(!(p2)))","2",5
"((!(p0)) M (!(p1))) W (F(!(p2)))","3",3
@ -679,6 +867,10 @@ cat > expected << EOF
"((!(p0)) M (!(p1))) W (F(!(p2)))","11",3
"((!(p0)) M (!(p1))) W (F(!(p2)))","12",3
"((!(p0)) M (!(p1))) W (F(!(p2)))","13",3
"((!(p0)) M (!(p1))) W (F(!(p2)))","14",3
"((!(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))))","1",3
"!(((!(p0)) M (!(p1))) W (F(!(p2))))","2",3
"!(((!(p0)) M (!(p1))) W (F(!(p2))))","3",3
@ -691,6 +883,10 @@ cat > expected << EOF
"!(((!(p0)) M (!(p1))) W (F(!(p2))))","11",3
"!(((!(p0)) M (!(p1))) W (F(!(p2))))","12",3
"!(((!(p0)) M (!(p1))) W (F(!(p2))))","13",3
"!(((!(p0)) M (!(p1))) W (F(!(p2))))","14",3
"!(((!(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) & (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
@ -703,6 +899,10 @@ cat > expected << EOF
"((p0) & (F(p1)) & (G(F(p2)))) R (p1)","11",3
"((p0) & (F(p1)) & (G(F(p2)))) R (p1)","12",3
"((p0) & (F(p1)) & (G(F(p2)))) R (p1)","13",3
"((p0) & (F(p1)) & (G(F(p2)))) R (p1)","14",3
"((p0) & (F(p1)) & (G(F(p2)))) R (p1)","15",3
"((p0) & (F(p1)) & (G(F(p2)))) R (p1)","16",3
"((p0) & (F(p1)) & (G(F(p2)))) R (p1)","17",3
"!(((p0) & (F(p1)) & (G(F(p2)))) R (p1))","1",5
"!(((p0) & (F(p1)) & (G(F(p2)))) R (p1))","2",5
"!(((p0) & (F(p1)) & (G(F(p2)))) R (p1))","3",5
@ -715,6 +915,10 @@ cat > expected << EOF
"!(((p0) & (F(p1)) & (G(F(p2)))) R (p1))","11",5
"!(((p0) & (F(p1)) & (G(F(p2)))) R (p1))","12",5
"!(((p0) & (F(p1)) & (G(F(p2)))) R (p1))","13",5
"!(((p0) & (F(p1)) & (G(F(p2)))) R (p1))","14",5
"!(((p0) & (F(p1)) & (G(F(p2)))) R (p1))","15",5
"!(((p0) & (F(p1)) & (G(F(p2)))) R (p1))","16",5
"!(((p0) & (F(p1)) & (G(F(p2)))) R (p1))","17",5
"((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2))))","1",3
"((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2))))","2",2
"((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2))))","3",2
@ -727,6 +931,10 @@ cat > expected << EOF
"((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2))))","11",2
"((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2))))","12",2
"((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2))))","13",2
"((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2))))","14",2
"((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2))))","15",2
"((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2))))","16",2
"((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2))))","17",2
"!(((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2)))))","1",4
"!(((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2)))))","2",4
"!(((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2)))))","3",4
@ -739,6 +947,10 @@ cat > expected << EOF
"!(((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2)))))","11",4
"!(((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2)))))","12",4
"!(((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2)))))","13",4
"!(((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2)))))","14",4
"!(((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2)))))","15",4
"!(((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2)))))","16",4
"!(((p0) R ((p1) W (p0))) W (G((!(p0)) M ((p1) | (p2)))))","17",4
"X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0))))))","1",5
"X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0))))))","2",7
"X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0))))))","3",6
@ -751,6 +963,10 @@ cat > expected << EOF
"X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0))))))","11",6
"X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0))))))","12",6
"X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0))))))","13",6
"X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0))))))","14",6
"X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0))))))","15",6
"X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0))))))","16",6
"X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0))))))","17",6
"!(X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0)))))))","1",8
"!(X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0)))))))","2",8
"!(X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0)))))))","3",8
@ -763,6 +979,10 @@ cat > expected << EOF
"!(X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0)))))))","11",8
"!(X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0)))))))","12",8
"!(X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0)))))))","13",8
"!(X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0)))))))","14",8
"!(X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0)))))))","15",8
"!(X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0)))))))","16",8
"!(X((G((!(p0)) M (!(p1)))) | (G((p0) | (G(!(p0)))))))","17",8
"(F(p0)) W (G(p1))","1",3
"(F(p0)) W (G(p1))","2",2
"(F(p0)) W (G(p1))","3",2
@ -775,6 +995,10 @@ cat > expected << EOF
"(F(p0)) W (G(p1))","11",2
"(F(p0)) W (G(p1))","12",2
"(F(p0)) W (G(p1))","13",2
"(F(p0)) W (G(p1))","14",2
"(F(p0)) W (G(p1))","15",2
"(F(p0)) W (G(p1))","16",2
"(F(p0)) W (G(p1))","17",2
"!((F(p0)) W (G(p1)))","1",2
"!((F(p0)) W (G(p1)))","2",2
"!((F(p0)) W (G(p1)))","3",2
@ -787,6 +1011,10 @@ cat > expected << EOF
"!((F(p0)) W (G(p1)))","11",2
"!((F(p0)) W (G(p1)))","12",2
"!((F(p0)) W (G(p1)))","13",2
"!((F(p0)) W (G(p1)))","14",2
"!((F(p0)) W (G(p1)))","15",2
"!((F(p0)) W (G(p1)))","16",2
"!((F(p0)) W (G(p1)))","17",2
"(G(F(p1))) | (G(p0))","1",3
"(G(F(p1))) | (G(p0))","2",3
"(G(F(p1))) | (G(p0))","3",2
@ -799,6 +1027,10 @@ cat > expected << EOF
"(G(F(p1))) | (G(p0))","11",2
"(G(F(p1))) | (G(p0))","12",2
"(G(F(p1))) | (G(p0))","13",2
"(G(F(p1))) | (G(p0))","14",2
"(G(F(p1))) | (G(p0))","15",2
"(G(F(p1))) | (G(p0))","16",2
"(G(F(p1))) | (G(p0))","17",2
"!((G(F(p1))) | (G(p0)))","1",3
"!((G(F(p1))) | (G(p0)))","2",3
"!((G(F(p1))) | (G(p0)))","3",3
@ -811,6 +1043,10 @@ cat > expected << EOF
"!((G(F(p1))) | (G(p0)))","11",3
"!((G(F(p1))) | (G(p0)))","12",3
"!((G(F(p1))) | (G(p0)))","13",3
"!((G(F(p1))) | (G(p0)))","14",3
"!((G(F(p1))) | (G(p0)))","15",3
"!((G(F(p1))) | (G(p0)))","16",3
"!((G(F(p1))) | (G(p0)))","17",3
"(p0) M (G((F(!(p1))) | (X(!(p0)))))","1",5
"(p0) M (G((F(!(p1))) | (X(!(p0)))))","2",5
"(p0) M (G((F(!(p1))) | (X(!(p0)))))","3",5
@ -823,6 +1059,10 @@ cat > expected << EOF
"(p0) M (G((F(!(p1))) | (X(!(p0)))))","11",5
"(p0) M (G((F(!(p1))) | (X(!(p0)))))","12",5
"(p0) M (G((F(!(p1))) | (X(!(p0)))))","13",5
"(p0) M (G((F(!(p1))) | (X(!(p0)))))","14",5
"(p0) M (G((F(!(p1))) | (X(!(p0)))))","15",5
"(p0) M (G((F(!(p1))) | (X(!(p0)))))","16",5
"(p0) M (G((F(!(p1))) | (X(!(p0)))))","17",5
"!((p0) M (G((F(!(p1))) | (X(!(p0))))))","1",4
"!((p0) M (G((F(!(p1))) | (X(!(p0))))))","2",4
"!((p0) M (G((F(!(p1))) | (X(!(p0))))))","3",4
@ -835,6 +1075,10 @@ cat > expected << EOF
"!((p0) M (G((F(!(p1))) | (X(!(p0))))))","11",4
"!((p0) M (G((F(!(p1))) | (X(!(p0))))))","12",4
"!((p0) M (G((F(!(p1))) | (X(!(p0))))))","13",4
"!((p0) M (G((F(!(p1))) | (X(!(p0))))))","14",4
"!((p0) M (G((F(!(p1))) | (X(!(p0))))))","15",4
"!((p0) M (G((F(!(p1))) | (X(!(p0))))))","16",4
"!((p0) M (G((F(!(p1))) | (X(!(p0))))))","17",4
"(G(!(p0))) R (X(F(p1)))","1",4
"(G(!(p0))) R (X(F(p1)))","2",4
"(G(!(p0))) R (X(F(p1)))","3",3
@ -847,6 +1091,10 @@ cat > expected << EOF
"(G(!(p0))) R (X(F(p1)))","11",3
"(G(!(p0))) R (X(F(p1)))","12",3
"(G(!(p0))) R (X(F(p1)))","13",3
"(G(!(p0))) R (X(F(p1)))","14",3
"(G(!(p0))) R (X(F(p1)))","15",3
"(G(!(p0))) R (X(F(p1)))","16",3
"(G(!(p0))) R (X(F(p1)))","17",3
"!((G(!(p0))) R (X(F(p1))))","1",3
"!((G(!(p0))) R (X(F(p1))))","2",3
"!((G(!(p0))) R (X(F(p1))))","3",3
@ -859,6 +1107,10 @@ cat > expected << EOF
"!((G(!(p0))) R (X(F(p1))))","11",3
"!((G(!(p0))) R (X(F(p1))))","12",3
"!((G(!(p0))) R (X(F(p1))))","13",3
"!((G(!(p0))) R (X(F(p1))))","14",3
"!((G(!(p0))) R (X(F(p1))))","15",3
"!((G(!(p0))) R (X(F(p1))))","16",3
"!((G(!(p0))) R (X(F(p1))))","17",3
"X(F((!(p0)) | (G(F(p1)))))","1",4
"X(F((!(p0)) | (G(F(p1)))))","2",4
"X(F((!(p0)) | (G(F(p1)))))","3",3
@ -871,6 +1123,10 @@ cat > expected << EOF
"X(F((!(p0)) | (G(F(p1)))))","11",3
"X(F((!(p0)) | (G(F(p1)))))","12",3
"X(F((!(p0)) | (G(F(p1)))))","13",3
"X(F((!(p0)) | (G(F(p1)))))","14",3
"X(F((!(p0)) | (G(F(p1)))))","15",3
"X(F((!(p0)) | (G(F(p1)))))","16",3
"X(F((!(p0)) | (G(F(p1)))))","17",3
"!(X(F((!(p0)) | (G(F(p1))))))","1",3
"!(X(F((!(p0)) | (G(F(p1))))))","2",3
"!(X(F((!(p0)) | (G(F(p1))))))","3",3
@ -883,6 +1139,10 @@ cat > expected << EOF
"!(X(F((!(p0)) | (G(F(p1))))))","11",3
"!(X(F((!(p0)) | (G(F(p1))))))","12",3
"!(X(F((!(p0)) | (G(F(p1))))))","13",3
"!(X(F((!(p0)) | (G(F(p1))))))","14",3
"!(X(F((!(p0)) | (G(F(p1))))))","15",3
"!(X(F((!(p0)) | (G(F(p1))))))","16",3
"!(X(F((!(p0)) | (G(F(p1))))))","17",3
"(G((F(!(p0))) U (!(p0)))) U (X(p0))","1",6
"(G((F(!(p0))) U (!(p0)))) U (X(p0))","2",6
"(G((F(!(p0))) U (!(p0)))) U (X(p0))","3",5
@ -895,6 +1155,10 @@ cat > expected << EOF
"(G((F(!(p0))) U (!(p0)))) U (X(p0))","11",5
"(G((F(!(p0))) U (!(p0)))) U (X(p0))","12",5
"(G((F(!(p0))) U (!(p0)))) U (X(p0))","13",5
"(G((F(!(p0))) U (!(p0)))) U (X(p0))","14",5
"(G((F(!(p0))) U (!(p0)))) U (X(p0))","15",5
"(G((F(!(p0))) U (!(p0)))) U (X(p0))","16",5
"(G((F(!(p0))) U (!(p0)))) U (X(p0))","17",5
"!((G((F(!(p0))) U (!(p0)))) U (X(p0)))","1",5
"!((G((F(!(p0))) U (!(p0)))) U (X(p0)))","2",5
"!((G((F(!(p0))) U (!(p0)))) U (X(p0)))","3",5
@ -907,6 +1171,10 @@ cat > expected << EOF
"!((G((F(!(p0))) U (!(p0)))) U (X(p0)))","11",5
"!((G((F(!(p0))) U (!(p0)))) U (X(p0)))","12",5
"!((G((F(!(p0))) U (!(p0)))) U (X(p0)))","13",5
"!((G((F(!(p0))) U (!(p0)))) U (X(p0)))","14",5
"!((G((F(!(p0))) U (!(p0)))) U (X(p0)))","15",5
"!((G((F(!(p0))) U (!(p0)))) U (X(p0)))","16",5
"!((G((F(!(p0))) U (!(p0)))) U (X(p0)))","17",5
"((p0) | (G((p0) M (!(p1))))) W (F(p2))","1",4
"((p0) | (G((p0) M (!(p1))))) W (F(p2))","2",5
"((p0) | (G((p0) M (!(p1))))) W (F(p2))","3",4
@ -919,6 +1187,10 @@ cat > expected << EOF
"((p0) | (G((p0) M (!(p1))))) W (F(p2))","11",4
"((p0) | (G((p0) M (!(p1))))) W (F(p2))","12",4
"((p0) | (G((p0) M (!(p1))))) W (F(p2))","13",4
"((p0) | (G((p0) M (!(p1))))) W (F(p2))","14",4
"((p0) | (G((p0) M (!(p1))))) W (F(p2))","15",4
"((p0) | (G((p0) M (!(p1))))) W (F(p2))","16",4
"((p0) | (G((p0) M (!(p1))))) W (F(p2))","17",4
"!(((p0) | (G((p0) M (!(p1))))) W (F(p2)))","1",4
"!(((p0) | (G((p0) M (!(p1))))) W (F(p2)))","2",4
"!(((p0) | (G((p0) M (!(p1))))) W (F(p2)))","3",4
@ -931,6 +1203,10 @@ cat > expected << EOF
"!(((p0) | (G((p0) M (!(p1))))) W (F(p2)))","11",4
"!(((p0) | (G((p0) M (!(p1))))) W (F(p2)))","12",4
"!(((p0) | (G((p0) M (!(p1))))) W (F(p2)))","13",4
"!(((p0) | (G((p0) M (!(p1))))) W (F(p2)))","14",4
"!(((p0) | (G((p0) M (!(p1))))) W (F(p2)))","15",4
"!(((p0) | (G((p0) M (!(p1))))) W (F(p2)))","16",4
"!(((p0) | (G((p0) M (!(p1))))) W (F(p2)))","17",4
"(F(p0)) W (X(p1))","1",6
"(F(p0)) W (X(p1))","2",6
"(F(p0)) W (X(p1))","3",6
@ -943,6 +1219,10 @@ cat > expected << EOF
"(F(p0)) W (X(p1))","11",6
"(F(p0)) W (X(p1))","12",6
"(F(p0)) W (X(p1))","13",6
"(F(p0)) W (X(p1))","14",6
"(F(p0)) W (X(p1))","15",6
"(F(p0)) W (X(p1))","16",6
"(F(p0)) W (X(p1))","17",6
"!((F(p0)) W (X(p1)))","1",4
"!((F(p0)) W (X(p1)))","2",4
"!((F(p0)) W (X(p1)))","3",4
@ -955,6 +1235,10 @@ cat > expected << EOF
"!((F(p0)) W (X(p1)))","11",4
"!((F(p0)) W (X(p1)))","12",4
"!((F(p0)) W (X(p1)))","13",4
"!((F(p0)) W (X(p1)))","14",4
"!((F(p0)) W (X(p1)))","15",4
"!((F(p0)) W (X(p1)))","16",4
"!((F(p0)) W (X(p1)))","17",4
"(X(G(!(p0)))) R (F(p1))","1",2
"(X(G(!(p0)))) R (F(p1))","2",2
"(X(G(!(p0)))) R (F(p1))","3",2
@ -967,6 +1251,10 @@ cat > expected << EOF
"(X(G(!(p0)))) R (F(p1))","11",2
"(X(G(!(p0)))) R (F(p1))","12",2
"(X(G(!(p0)))) R (F(p1))","13",2
"(X(G(!(p0)))) R (F(p1))","14",2
"(X(G(!(p0)))) R (F(p1))","15",2
"(X(G(!(p0)))) R (F(p1))","16",2
"(X(G(!(p0)))) R (F(p1))","17",2
"!((X(G(!(p0)))) R (F(p1)))","1",3
"!((X(G(!(p0)))) R (F(p1)))","2",3
"!((X(G(!(p0)))) R (F(p1)))","3",3
@ -979,6 +1267,10 @@ cat > expected << EOF
"!((X(G(!(p0)))) R (F(p1)))","11",3
"!((X(G(!(p0)))) R (F(p1)))","12",3
"!((X(G(!(p0)))) R (F(p1)))","13",3
"!((X(G(!(p0)))) R (F(p1)))","14",3
"!((X(G(!(p0)))) R (F(p1)))","15",3
"!((X(G(!(p0)))) R (F(p1)))","16",3
"!((X(G(!(p0)))) R (F(p1)))","17",3
"(G(F(p0))) | ((p1) & (F(p2)))","1",4
"(G(F(p0))) | ((p1) & (F(p2)))","2",4
"(G(F(p0))) | ((p1) & (F(p2)))","3",4
@ -991,6 +1283,10 @@ cat > expected << EOF
"(G(F(p0))) | ((p1) & (F(p2)))","11",4
"(G(F(p0))) | ((p1) & (F(p2)))","12",4
"(G(F(p0))) | ((p1) & (F(p2)))","13",4
"(G(F(p0))) | ((p1) & (F(p2)))","14",4
"(G(F(p0))) | ((p1) & (F(p2)))","15",4
"(G(F(p0))) | ((p1) & (F(p2)))","16",4
"(G(F(p0))) | ((p1) & (F(p2)))","17",4
"!((G(F(p0))) | ((p1) & (F(p2))))","1",5
"!((G(F(p0))) | ((p1) & (F(p2))))","2",5
"!((G(F(p0))) | ((p1) & (F(p2))))","3",5
@ -1003,6 +1299,10 @@ cat > expected << EOF
"!((G(F(p0))) | ((p1) & (F(p2))))","11",5
"!((G(F(p0))) | ((p1) & (F(p2))))","12",5
"!((G(F(p0))) | ((p1) & (F(p2))))","13",5
"!((G(F(p0))) | ((p1) & (F(p2))))","14",5
"!((G(F(p0))) | ((p1) & (F(p2))))","15",5
"!((G(F(p0))) | ((p1) & (F(p2))))","16",5
"!((G(F(p0))) | ((p1) & (F(p2))))","17",5
"X((p0) R ((F(p1)) R (F(!(p1)))))","1",6
"X((p0) R ((F(p1)) R (F(!(p1)))))","2",6
"X((p0) R ((F(p1)) R (F(!(p1)))))","3",4
@ -1015,6 +1315,10 @@ cat > expected << EOF
"X((p0) R ((F(p1)) R (F(!(p1)))))","11",4
"X((p0) R ((F(p1)) R (F(!(p1)))))","12",4
"X((p0) R ((F(p1)) R (F(!(p1)))))","13",4
"X((p0) R ((F(p1)) R (F(!(p1)))))","14",4
"X((p0) R ((F(p1)) R (F(!(p1)))))","15",4
"X((p0) R ((F(p1)) R (F(!(p1)))))","16",4
"X((p0) R ((F(p1)) R (F(!(p1)))))","17",4
"!(X((p0) R ((F(p1)) R (F(!(p1))))))","1",3
"!(X((p0) R ((F(p1)) R (F(!(p1))))))","2",3
"!(X((p0) R ((F(p1)) R (F(!(p1))))))","3",3
@ -1027,6 +1331,10 @@ cat > expected << EOF
"!(X((p0) R ((F(p1)) R (F(!(p1))))))","11",3
"!(X((p0) R ((F(p1)) R (F(!(p1))))))","12",3
"!(X((p0) R ((F(p1)) R (F(!(p1))))))","13",3
"!(X((p0) R ((F(p1)) R (F(!(p1))))))","14",3
"!(X((p0) R ((F(p1)) R (F(!(p1))))))","15",3
"!(X((p0) R ((F(p1)) R (F(!(p1))))))","16",3
"!(X((p0) R ((F(p1)) R (F(!(p1))))))","17",3
"G((X(p0)) M (F(p0)))","1",2
"G((X(p0)) M (F(p0)))","2",2
"G((X(p0)) M (F(p0)))","3",1
@ -1039,6 +1347,10 @@ cat > expected << EOF
"G((X(p0)) M (F(p0)))","11",1
"G((X(p0)) M (F(p0)))","12",1
"G((X(p0)) M (F(p0)))","13",1
"G((X(p0)) M (F(p0)))","14",1
"G((X(p0)) M (F(p0)))","15",1
"G((X(p0)) M (F(p0)))","16",1
"G((X(p0)) M (F(p0)))","17",1
"!(G((X(p0)) M (F(p0))))","1",2
"!(G((X(p0)) M (F(p0))))","2",2
"!(G((X(p0)) M (F(p0))))","3",2
@ -1051,6 +1363,10 @@ cat > expected << EOF
"!(G((X(p0)) M (F(p0))))","11",2
"!(G((X(p0)) M (F(p0))))","12",2
"!(G((X(p0)) M (F(p0))))","13",2
"!(G((X(p0)) M (F(p0))))","14",2
"!(G((X(p0)) M (F(p0))))","15",2
"!(G((X(p0)) M (F(p0))))","16",2
"!(G((X(p0)) M (F(p0))))","17",2
"X((G(F(p1))) | (G(p0)))","1",4
"X((G(F(p1))) | (G(p0)))","2",4
"X((G(F(p1))) | (G(p0)))","3",3
@ -1063,6 +1379,10 @@ cat > expected << EOF
"X((G(F(p1))) | (G(p0)))","11",3
"X((G(F(p1))) | (G(p0)))","12",3
"X((G(F(p1))) | (G(p0)))","13",3
"X((G(F(p1))) | (G(p0)))","14",3
"X((G(F(p1))) | (G(p0)))","15",3
"X((G(F(p1))) | (G(p0)))","16",3
"X((G(F(p1))) | (G(p0)))","17",3
"!(X((G(F(p1))) | (G(p0))))","1",4
"!(X((G(F(p1))) | (G(p0))))","2",4
"!(X((G(F(p1))) | (G(p0))))","3",4
@ -1075,6 +1395,10 @@ cat > expected << EOF
"!(X((G(F(p1))) | (G(p0))))","11",4
"!(X((G(F(p1))) | (G(p0))))","12",4
"!(X((G(F(p1))) | (G(p0))))","13",4
"!(X((G(F(p1))) | (G(p0))))","14",4
"!(X((G(F(p1))) | (G(p0))))","15",4
"!(X((G(F(p1))) | (G(p0))))","16",4
"!(X((G(F(p1))) | (G(p0))))","17",4
"(G(p0)) R (F(p1))","1",2
"(G(p0)) R (F(p1))","2",2
"(G(p0)) R (F(p1))","3",2
@ -1087,6 +1411,10 @@ cat > expected << EOF
"(G(p0)) R (F(p1))","11",2
"(G(p0)) R (F(p1))","12",2
"(G(p0)) R (F(p1))","13",2
"(G(p0)) R (F(p1))","14",2
"(G(p0)) R (F(p1))","15",2
"(G(p0)) R (F(p1))","16",2
"(G(p0)) R (F(p1))","17",2
"!((G(p0)) R (F(p1)))","1",3
"!((G(p0)) R (F(p1)))","2",3
"!((G(p0)) R (F(p1)))","3",3
@ -1099,6 +1427,10 @@ cat > expected << EOF
"!((G(p0)) R (F(p1)))","11",3
"!((G(p0)) R (F(p1)))","12",3
"!((G(p0)) R (F(p1)))","13",3
"!((G(p0)) R (F(p1)))","14",3
"!((G(p0)) R (F(p1)))","15",3
"!((G(p0)) R (F(p1)))","16",3
"!((G(p0)) R (F(p1)))","17",3
"G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2))))))","1",2
"G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2))))))","2",3
"G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2))))))","3",2
@ -1111,6 +1443,10 @@ cat > expected << EOF
"G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2))))))","11",2
"G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2))))))","12",2
"G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2))))))","13",2
"G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2))))))","14",2
"G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2))))))","15",2
"G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2))))))","16",2
"G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2))))))","17",2
"!(G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2)))))))","1",4
"!(G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2)))))))","2",4
"!(G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2)))))))","3",4
@ -1123,6 +1459,10 @@ cat > expected << EOF
"!(G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2)))))))","11",4
"!(G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2)))))))","12",4
"!(G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2)))))))","13",4
"!(G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2)))))))","14",4
"!(G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2)))))))","15",4
"!(G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2)))))))","16",4
"!(G((p0) U ((p1) | (X(((!(p0)) & (!(p2))) | ((p0) & (p2)))))))","17",4
"X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1))))))","1",4
"X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1))))))","2",5
"X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1))))))","3",5
@ -1135,6 +1475,10 @@ cat > expected << EOF
"X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1))))))","11",5
"X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1))))))","12",5
"X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1))))))","13",5
"X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1))))))","14",5
"X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1))))))","15",5
"X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1))))))","16",5
"X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1))))))","17",5
"!(X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1)))))))","1",7
"!(X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1)))))))","2",7
"!(X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1)))))))","3",7
@ -1147,6 +1491,10 @@ cat > expected << EOF
"!(X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1)))))))","11",7
"!(X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1)))))))","12",7
"!(X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1)))))))","13",7
"!(X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1)))))))","14",7
"!(X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1)))))))","15",7
"!(X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1)))))))","16",7
"!(X(G(((G(!(p0))) & (F(!(p1)))) | ((F(p0)) & ((p0) | (G(p1)))))))","17",7
"X((G(F(p0))) | (G(!(p0))))","1",4
"X((G(F(p0))) | (G(!(p0))))","2",4
"X((G(F(p0))) | (G(!(p0))))","3",3
@ -1159,6 +1507,10 @@ cat > expected << EOF
"X((G(F(p0))) | (G(!(p0))))","11",3
"X((G(F(p0))) | (G(!(p0))))","12",3
"X((G(F(p0))) | (G(!(p0))))","13",3
"X((G(F(p0))) | (G(!(p0))))","14",3
"X((G(F(p0))) | (G(!(p0))))","15",3
"X((G(F(p0))) | (G(!(p0))))","16",3
"X((G(F(p0))) | (G(!(p0))))","17",3
"!(X((G(F(p0))) | (G(!(p0)))))","1",4
"!(X((G(F(p0))) | (G(!(p0)))))","2",4
"!(X((G(F(p0))) | (G(!(p0)))))","3",4
@ -1171,6 +1523,10 @@ cat > expected << EOF
"!(X((G(F(p0))) | (G(!(p0)))))","11",4
"!(X((G(F(p0))) | (G(!(p0)))))","12",4
"!(X((G(F(p0))) | (G(!(p0)))))","13",4
"!(X((G(F(p0))) | (G(!(p0)))))","14",4
"!(X((G(F(p0))) | (G(!(p0)))))","15",4
"!(X((G(F(p0))) | (G(!(p0)))))","16",4
"!(X((G(F(p0))) | (G(!(p0)))))","17",4
"G((G(!(p0))) | (F(!(p1))) | (G(!(p2))))","1",4
"G((G(!(p0))) | (F(!(p1))) | (G(!(p2))))","2",4
"G((G(!(p0))) | (F(!(p1))) | (G(!(p2))))","3",4
@ -1183,6 +1539,10 @@ cat > expected << EOF
"G((G(!(p0))) | (F(!(p1))) | (G(!(p2))))","11",4
"G((G(!(p0))) | (F(!(p1))) | (G(!(p2))))","12",4
"G((G(!(p0))) | (F(!(p1))) | (G(!(p2))))","13",4
"G((G(!(p0))) | (F(!(p1))) | (G(!(p2))))","14",4
"G((G(!(p0))) | (F(!(p1))) | (G(!(p2))))","15",4
"G((G(!(p0))) | (F(!(p1))) | (G(!(p2))))","16",4
"G((G(!(p0))) | (F(!(p1))) | (G(!(p2))))","17",4
"!(G((G(!(p0))) | (F(!(p1))) | (G(!(p2)))))","1",4
"!(G((G(!(p0))) | (F(!(p1))) | (G(!(p2)))))","2",4
"!(G((G(!(p0))) | (F(!(p1))) | (G(!(p2)))))","3",4
@ -1195,6 +1555,10 @@ cat > expected << EOF
"!(G((G(!(p0))) | (F(!(p1))) | (G(!(p2)))))","11",4
"!(G((G(!(p0))) | (F(!(p1))) | (G(!(p2)))))","12",4
"!(G((G(!(p0))) | (F(!(p1))) | (G(!(p2)))))","13",4
"!(G((G(!(p0))) | (F(!(p1))) | (G(!(p2)))))","14",4
"!(G((G(!(p0))) | (F(!(p1))) | (G(!(p2)))))","15",4
"!(G((G(!(p0))) | (F(!(p1))) | (G(!(p2)))))","16",4
"!(G((G(!(p0))) | (F(!(p1))) | (G(!(p2)))))","17",4
"G((p0) | (F(p0)))","1",1
"G((p0) | (F(p0)))","2",1
"G((p0) | (F(p0)))","3",1
@ -1207,6 +1571,10 @@ cat > expected << EOF
"G((p0) | (F(p0)))","11",1
"G((p0) | (F(p0)))","12",1
"G((p0) | (F(p0)))","13",1
"G((p0) | (F(p0)))","14",1
"G((p0) | (F(p0)))","15",1
"G((p0) | (F(p0)))","16",1
"G((p0) | (F(p0)))","17",1
"!(G((p0) | (F(p0))))","1",2
"!(G((p0) | (F(p0))))","2",2
"!(G((p0) | (F(p0))))","3",2
@ -1219,6 +1587,10 @@ cat > expected << EOF
"!(G((p0) | (F(p0))))","11",2
"!(G((p0) | (F(p0))))","12",2
"!(G((p0) | (F(p0))))","13",2
"!(G((p0) | (F(p0))))","14",2
"!(G((p0) | (F(p0))))","15",2
"!(G((p0) | (F(p0))))","16",2
"!(G((p0) | (F(p0))))","17",2
EOF
diff expected output

View file

@ -61,19 +61,31 @@ diff output expected
ltl2tgba -BD -x sat-minimize "GF(a <-> XXb)" -H >out
grep 'properties:.*state-acc' out
grep 'properties:.*deterministic' out
ltl2tgba -BD -x 'sat-minimize=3,incr=-1' "GF(a <-> XXb)" -H >out
ltl2tgba -BD -x 'sat-minimize=3,param=0' "GF(a <-> XXb)" -H >out
grep 'properties:.*state-acc' out
grep 'properties:.*deterministic' out
ltl2tgba -BD -x 'sat-minimize=3,incr=0' "GF(a <-> XXb)" -H >out
ltl2tgba -BD -x 'sat-minimize=3,param=1' "GF(a <-> XXb)" -H >out
grep 'properties:.*state-acc' out
grep 'properties:.*deterministic' out
ltl2tgba -BD -x 'sat-minimize=3,incr=1' "GF(a <-> XXb)" -H >out
ltl2tgba -BD -x 'sat-minimize=3,param=2' "GF(a <-> XXb)" -H >out
grep 'properties:.*state-acc' out
grep 'properties:.*deterministic' out
ltl2tgba -BD -x 'sat-minimize=3,incr=2' "GF(a <-> XXb)" -H >out
ltl2tgba -BD -x 'sat-minimize=3,param=50' "GF(a <-> XXb)" -H >out
grep 'properties:.*state-acc' out
grep 'properties:.*deterministic' out
ltl2tgba -BD -x 'sat-minimize=3,incr=50' "GF(a <-> XXb)" -H >out
ltl2tgba -BD -x 'sat-minimize=3,param=-1' "GF(a <-> XXb)" -H >out
grep 'properties:.*state-acc' out
grep 'properties:.*deterministic' out
ltl2tgba -BD -x 'sat-minimize=3,param=-0' "GF(a <-> XXb)" -H >out
grep 'properties:.*state-acc' out
grep 'properties:.*deterministic' out
ltl2tgba -BD -x 'sat-minimize=3,param=1' "GF(a <-> XXb)" -H >out
grep 'properties:.*state-acc' out
grep 'properties:.*deterministic' out
ltl2tgba -BD -x 'sat-minimize=3,param=2' "GF(a <-> XXb)" -H >out
grep 'properties:.*state-acc' out
grep 'properties:.*deterministic' out
ltl2tgba -BD -x 'sat-minimize=3,param=50' "GF(a <-> XXb)" -H >out
grep 'properties:.*state-acc' out
grep 'properties:.*deterministic' out
@ -116,39 +128,64 @@ EOF
# automata.
$autfilt --sat-minimize='acc="Fin(0)|Inf(1)"' test.hoa --stats=%s >output
test `cat output` = 1
$autfilt --sat-minimize='acc="Fin(0)|Inf(1)",incr=-1' test.hoa \
$autfilt --sat-minimize='acc="Fin(0)|Inf(1)",assume,param=0' test.hoa \
--stats=%s >output
test `cat output` = 1
$autfilt --sat-minimize='acc="Fin(0)|Inf(1)",incr=0' test.hoa \
$autfilt --sat-minimize='acc="Fin(0)|Inf(1)",assume,param=1' test.hoa \
--stats=%s >output
test `cat output` = 1
$autfilt --sat-minimize='acc="Fin(0)|Inf(1)",incr=1' test.hoa \
$autfilt --sat-minimize='acc="Fin(0)|Inf(1)",assume,param=2' test.hoa \
--stats=%s >output
test `cat output` = 1
$autfilt --sat-minimize='acc="Fin(0)|Inf(1)",incr=2' test.hoa \
$autfilt --sat-minimize='acc="Fin(0)|Inf(1)",assume,param=50' test.hoa \
--stats=%s >output
test `cat output` = 1
$autfilt --sat-minimize='acc="Fin(0)|Inf(1)",incr=50' test.hoa \
$autfilt --sat-minimize='acc="Fin(0)|Inf(1)",incr,param=-1' test.hoa \
--stats=%s >output
test `cat output` = 1
$autfilt --sat-minimize='acc="Fin(0)|Inf(1)",incr,param=0' test.hoa \
--stats=%s >output
test `cat output` = 1
$autfilt --sat-minimize='acc="Fin(0)|Inf(1)",incr,param=1' test.hoa \
--stats=%s >output
test `cat output` = 1
$autfilt --sat-minimize='acc="Fin(0)|Inf(1)",incr,param=2' test.hoa \
--stats=%s >output
test `cat output` = 1
$autfilt --sat-minimize='acc="Fin(0)|Inf(1)",incr,param=50' test.hoa \
--stats=%s >output
test `cat output` = 1
# How about a state-based DSA?
$autfilt -S --sat-minimize='acc="Fin(0)|Inf(1)"' test.hoa \
--stats=%s > output
test `cat output` = 3
$autfilt -S --sat-minimize='acc="Fin(0)|Inf(1)",incr=-1' test.hoa \
$autfilt -S --sat-minimize='acc="Fin(0)|Inf(1)",assume,param=0' test.hoa \
--stats=%s > output
test `cat output` = 3
$autfilt -S --sat-minimize='acc="Fin(0)|Inf(1)",incr=0' test.hoa \
$autfilt -S --sat-minimize='acc="Fin(0)|Inf(1)",assume,param=1' test.hoa \
--stats=%s > output
test `cat output` = 3
$autfilt -S --sat-minimize='acc="Fin(0)|Inf(1)",incr=1' test.hoa \
$autfilt -S --sat-minimize='acc="Fin(0)|Inf(1)",assume,param=2' test.hoa \
--stats=%s > output
test `cat output` = 3
$autfilt -S --sat-minimize='acc="Fin(0)|Inf(1)",incr=2' test.hoa \
$autfilt -S --sat-minimize='acc="Fin(0)|Inf(1)",assume,param=50' test.hoa \
--stats=%s > output
test `cat output` = 3
$autfilt -S --sat-minimize='acc="Fin(0)|Inf(1)",incr=50' test.hoa \
$autfilt -S --sat-minimize='acc="Fin(0)|Inf(1)",incr,param=-1' test.hoa \
--stats=%s > output
test `cat output` = 3
$autfilt -S --sat-minimize='acc="Fin(0)|Inf(1)",incr,param=0' test.hoa \
--stats=%s > output
test `cat output` = 3
$autfilt -S --sat-minimize='acc="Fin(0)|Inf(1)",incr,param=1' test.hoa \
--stats=%s > output
test `cat output` = 3
$autfilt -S --sat-minimize='acc="Fin(0)|Inf(1)",incr,param=2' test.hoa \
--stats=%s > output
test `cat output` = 3
$autfilt -S --sat-minimize='acc="Fin(0)|Inf(1)",incr,param=50' test.hoa \
--stats=%s > output
test `cat output` = 3
@ -162,7 +199,7 @@ grep 'States: 3' output
grep 'acc-name: parity max even 3' output
grep 'Acceptance: 3 Inf(2) | (Fin(1) & Inf(0))' output
test 3 = `grep -c 'State: [012] {[012]}' output`
$autfilt -S --sat-minimize='acc="parity max even 3",colored,incr=-1' \
$autfilt -S --sat-minimize='acc="parity max even 3",colored,assume,param=0' \
-H test.hoa > output
cat output
grep 'properties:.*colored' output
@ -170,7 +207,7 @@ grep 'States: 3' output
grep 'acc-name: parity max even 3' output
grep 'Acceptance: 3 Inf(2) | (Fin(1) & Inf(0))' output
test 3 = `grep -c 'State: [012] {[012]}' output`
$autfilt -S --sat-minimize='acc="parity max even 3",colored,incr=0' \
$autfilt -S --sat-minimize='acc="parity max even 3",colored,assume,param=1' \
-H test.hoa > output
cat output
grep 'properties:.*colored' output
@ -178,7 +215,7 @@ grep 'States: 3' output
grep 'acc-name: parity max even 3' output
grep 'Acceptance: 3 Inf(2) | (Fin(1) & Inf(0))' output
test 3 = `grep -c 'State: [012] {[012]}' output`
$autfilt -S --sat-minimize='acc="parity max even 3",colored,incr=1' \
$autfilt -S --sat-minimize='acc="parity max even 3",colored,assume,param=2' \
-H test.hoa > output
cat output
grep 'properties:.*colored' output
@ -186,7 +223,7 @@ grep 'States: 3' output
grep 'acc-name: parity max even 3' output
grep 'Acceptance: 3 Inf(2) | (Fin(1) & Inf(0))' output
test 3 = `grep -c 'State: [012] {[012]}' output`
$autfilt -S --sat-minimize='acc="parity max even 3",colored,incr=2' \
$autfilt -S --sat-minimize='acc="parity max even 3",colored,assume,param=50' \
-H test.hoa > output
cat output
grep 'properties:.*colored' output
@ -194,7 +231,39 @@ grep 'States: 3' output
grep 'acc-name: parity max even 3' output
grep 'Acceptance: 3 Inf(2) | (Fin(1) & Inf(0))' output
test 3 = `grep -c 'State: [012] {[012]}' output`
$autfilt -S --sat-minimize='acc="parity max even 3",colored,incr=50' \
$autfilt -S --sat-minimize='acc="parity max even 3",colored,incr,param=-1' \
-H test.hoa > output
cat output
grep 'properties:.*colored' output
grep 'States: 3' output
grep 'acc-name: parity max even 3' output
grep 'Acceptance: 3 Inf(2) | (Fin(1) & Inf(0))' output
test 3 = `grep -c 'State: [012] {[012]}' output`
$autfilt -S --sat-minimize='acc="parity max even 3",colored,incr,param=0' \
-H test.hoa > output
cat output
grep 'properties:.*colored' output
grep 'States: 3' output
grep 'acc-name: parity max even 3' output
grep 'Acceptance: 3 Inf(2) | (Fin(1) & Inf(0))' output
test 3 = `grep -c 'State: [012] {[012]}' output`
$autfilt -S --sat-minimize='acc="parity max even 3",colored,incr,param=1' \
-H test.hoa > output
cat output
grep 'properties:.*colored' output
grep 'States: 3' output
grep 'acc-name: parity max even 3' output
grep 'Acceptance: 3 Inf(2) | (Fin(1) & Inf(0))' output
test 3 = `grep -c 'State: [012] {[012]}' output`
$autfilt -S --sat-minimize='acc="parity max even 3",colored,incr,param=2' \
-H test.hoa > output
cat output
grep 'properties:.*colored' output
grep 'States: 3' output
grep 'acc-name: parity max even 3' output
grep 'Acceptance: 3 Inf(2) | (Fin(1) & Inf(0))' output
test 3 = `grep -c 'State: [012] {[012]}' output`
$autfilt -S --sat-minimize='acc="parity max even 3",colored,incr,param=50' \
-H test.hoa > output
cat output
grep 'properties:.*colored' output
@ -237,15 +306,23 @@ State: 0
EOF
$autfilt -H --sat-minimize special.hoa > output
diff output expected
$autfilt -H --sat-minimize='incr=-1' special.hoa > output
$autfilt -H --sat-minimize='assume,param=0' special.hoa > output
diff output expected
$autfilt -H --sat-minimize='incr=0' special.hoa > output
$autfilt -H --sat-minimize='assume,param=1' special.hoa > output
diff output expected
$autfilt -H --sat-minimize='incr=1' special.hoa > output
$autfilt -H --sat-minimize='assume,param=2' special.hoa > output
diff output expected
$autfilt -H --sat-minimize='incr=2' special.hoa > output
$autfilt -H --sat-minimize='assume,param=50' special.hoa > output
diff output expected
$autfilt -H --sat-minimize='incr=50' special.hoa > output
$autfilt -H --sat-minimize='incr,param=-1' special.hoa > output
diff output expected
$autfilt -H --sat-minimize='incr,param=0' special.hoa > output
diff output expected
$autfilt -H --sat-minimize='incr,param=1' special.hoa > output
diff output expected
$autfilt -H --sat-minimize='incr,param=2' special.hoa > output
diff output expected
$autfilt -H --sat-minimize='incr,param=50' special.hoa > output
diff output expected
@ -266,19 +343,31 @@ EOF
$autfilt --sat-minimize='acc="Streett 1",max-states=2' foo.hoa \
--stats=%s >out
test "`cat out`" = 1
$autfilt --sat-minimize='acc="Streett 1",max-states=2,incr=-1' foo.hoa \
$autfilt --sat-minimize='acc="Streett 1",max-states=2,assume,param=0' foo.hoa \
--stats=%s >out
test "`cat out`" = 1
$autfilt --sat-minimize='acc="Streett 1",max-states=2,incr=0' foo.hoa \
$autfilt --sat-minimize='acc="Streett 1",max-states=2,assume,param=1' foo.hoa \
--stats=%s >out
test "`cat out`" = 1
$autfilt --sat-minimize='acc="Streett 1",max-states=2,incr=1' foo.hoa \
$autfilt --sat-minimize='acc="Streett 1",max-states=2,assume,param=2' foo.hoa \
--stats=%s >out
test "`cat out`" = 1
$autfilt --sat-minimize='acc="Streett 1",max-states=2,incr=2' foo.hoa \
$autfilt --sat-minimize='acc="Streett 1",max-states=2,assume,param=50' foo.hoa \
--stats=%s >out
test "`cat out`" = 1
$autfilt --sat-minimize='acc="Streett 1",max-states=2,incr=50' foo.hoa \
$autfilt --sat-minimize='acc="Streett 1",max-states=2,incr,param=-1' foo.hoa \
--stats=%s >out
test "`cat out`" = 1
$autfilt --sat-minimize='acc="Streett 1",max-states=2,incr,param=0' foo.hoa \
--stats=%s >out
test "`cat out`" = 1
$autfilt --sat-minimize='acc="Streett 1",max-states=2,incr,param=1' foo.hoa \
--stats=%s >out
test "`cat out`" = 1
$autfilt --sat-minimize='acc="Streett 1",max-states=2,incr,param=2' foo.hoa \
--stats=%s >out
test "`cat out`" = 1
$autfilt --sat-minimize='acc="Streett 1",max-states=2,incr,param=50' foo.hoa \
--stats=%s >out
test "`cat out`" = 1
@ -286,19 +375,31 @@ test "`cat out`" = 1
$autfilt --sat-minimize='acc="Rabin 1",max-states=4' foo.hoa \
--stats=%s >out && exit 1
test -z "`cat out`"
$autfilt --sat-minimize='acc="Rabin 1",max-states=4,incr=-1' foo.hoa \
$autfilt --sat-minimize='acc="Rabin 1",max-states=4,assume,param=0' foo.hoa \
--stats=%s >out && exit 1
test -z "`cat out`"
$autfilt --sat-minimize='acc="Rabin 1",max-states=4,incr=0' foo.hoa \
$autfilt --sat-minimize='acc="Rabin 1",max-states=4,assume,param=1' foo.hoa \
--stats=%s >out && exit 1
test -z "`cat out`"
$autfilt --sat-minimize='acc="Rabin 1",max-states=4,incr=1' foo.hoa \
$autfilt --sat-minimize='acc="Rabin 1",max-states=4,assume,param=2' foo.hoa \
--stats=%s >out && exit 1
test -z "`cat out`"
$autfilt --sat-minimize='acc="Rabin 1",max-states=4,incr=2' foo.hoa \
$autfilt --sat-minimize='acc="Rabin 1",max-states=4,assume,param=50' foo.hoa \
--stats=%s >out && exit 1
test -z "`cat out`"
$autfilt --sat-minimize='acc="Rabin 1",max-states=4,incr=50' foo.hoa \
$autfilt --sat-minimize='acc="Rabin 1",max-states=4,incr,param=-1' foo.hoa \
--stats=%s >out && exit 1
test -z "`cat out`"
$autfilt --sat-minimize='acc="Rabin 1",max-states=4,incr,param=0' foo.hoa \
--stats=%s >out && exit 1
test -z "`cat out`"
$autfilt --sat-minimize='acc="Rabin 1",max-states=4,incr,param=1' foo.hoa \
--stats=%s >out && exit 1
test -z "`cat out`"
$autfilt --sat-minimize='acc="Rabin 1",max-states=4,incr,param=2' foo.hoa \
--stats=%s >out && exit 1
test -z "`cat out`"
$autfilt --sat-minimize='acc="Rabin 1",max-states=4,incr,param=50' foo.hoa \
--stats=%s >out && exit 1
test -z "`cat out`"
@ -306,18 +407,30 @@ test -z "`cat out`"
$autfilt --sat-minimize='acc="Inf(0)&Fin(1)|Inf(2)",states=1' foo.hoa \
--stats=%s >out
test "`cat out`" = 1
$autfilt --sat-minimize='acc="Inf(0)&Fin(1)|Inf(2)",states=1,incr=-1' \
$autfilt --sat-minimize='acc="Inf(0)&Fin(1)|Inf(2)",states=1,assume,param=0' \
foo.hoa --stats=%s >out
test "`cat out`" = 1
$autfilt --sat-minimize='acc="Inf(0)&Fin(1)|Inf(2)",states=1,incr=0' \
$autfilt --sat-minimize='acc="Inf(0)&Fin(1)|Inf(2)",states=1,assume,param=1' \
foo.hoa --stats=%s >out
test "`cat out`" = 1
$autfilt --sat-minimize='acc="Inf(0)&Fin(1)|Inf(2)",states=1,incr=1' \
$autfilt --sat-minimize='acc="Inf(0)&Fin(1)|Inf(2)",states=1,assume,param=2' \
foo.hoa --stats=%s >out
test "`cat out`" = 1
$autfilt --sat-minimize='acc="Inf(0)&Fin(1)|Inf(2)",states=1,incr=2' \
$autfilt --sat-minimize='acc="Inf(0)&Fin(1)|Inf(2)",states=1,assume,param=50' \
foo.hoa --stats=%s >out
test "`cat out`" = 1
$autfilt --sat-minimize='acc="Inf(0)&Fin(1)|Inf(2)",states=1,incr=50' \
$autfilt --sat-minimize='acc="Inf(0)&Fin(1)|Inf(2)",states=1,incr,param=-1' \
foo.hoa --stats=%s >out
test "`cat out`" = 1
$autfilt --sat-minimize='acc="Inf(0)&Fin(1)|Inf(2)",states=1,incr,param=0' \
foo.hoa --stats=%s >out
test "`cat out`" = 1
$autfilt --sat-minimize='acc="Inf(0)&Fin(1)|Inf(2)",states=1,incr,param=1' \
foo.hoa --stats=%s >out
test "`cat out`" = 1
$autfilt --sat-minimize='acc="Inf(0)&Fin(1)|Inf(2)",states=1,incr,param=2' \
foo.hoa --stats=%s >out
test "`cat out`" = 1
$autfilt --sat-minimize='acc="Inf(0)&Fin(1)|Inf(2)",states=1,incr,param=50' \
foo.hoa --stats=%s >out
test "`cat out`" = 1

View file

@ -29,6 +29,21 @@ assert aut.is_deterministic()
min1 = spot.sat_minimize(aut, acc='Rabin 1')
assert min1.num_sets() == 2
assert min1.num_states() == 2
min1 = spot.sat_minimize(aut, acc='Rabin 1', assume=True)
assert min1.num_sets() == 2
assert min1.num_states() == 2
min1 = spot.sat_minimize(aut, acc='Rabin 1', assume=True, param=0)
assert min1.num_sets() == 2
assert min1.num_states() == 2
min1 = spot.sat_minimize(aut, acc='Rabin 1', assume=True, param=1)
assert min1.num_sets() == 2
assert min1.num_states() == 2
min1 = spot.sat_minimize(aut, acc='Rabin 1', assume=True, param=2)
assert min1.num_sets() == 2
assert min1.num_states() == 2
min1 = spot.sat_minimize(aut, acc='Rabin 1', assume=True, param=50)
assert min1.num_sets() == 2
assert min1.num_states() == 2
min1 = spot.sat_minimize(aut, acc='Rabin 1', incr=True)
assert min1.num_sets() == 2
assert min1.num_states() == 2
@ -49,7 +64,19 @@ assert min1.num_sets() == 2
assert min1.num_states() == 2
min2 = spot.sat_minimize(aut, acc='Streett 2', dichotomy=True)
min2 = spot.sat_minimize(aut, acc='Streett 2', assume=True)
assert min2.num_sets() == 4
assert min2.num_states() == 1
min2 = spot.sat_minimize(aut, acc='Streett 2', assume=True, param=0)
assert min2.num_sets() == 4
assert min2.num_states() == 1
min2 = spot.sat_minimize(aut, acc='Streett 2', assume=True, param=1)
assert min2.num_sets() == 4
assert min2.num_states() == 1
min2 = spot.sat_minimize(aut, acc='Streett 2', assume=True, param=2)
assert min2.num_sets() == 4
assert min2.num_states() == 1
min2 = spot.sat_minimize(aut, acc='Streett 2', assume=True, param=50)
assert min2.num_sets() == 4
assert min2.num_states() == 1
min2 = spot.sat_minimize(aut, acc='Streett 2', incr=True)
@ -76,6 +103,26 @@ min3 = spot.sat_minimize(aut, acc='Rabin 2',
state_based=True, max_states=5, dichotomy=True)
assert min3.num_sets() == 4
assert min3.num_states() == 3
min3 = spot.sat_minimize(aut, acc='Rabin 2',
state_based=True, max_states=5, assume=True)
assert min3.num_sets() == 4
assert min3.num_states() == 3
min3 = spot.sat_minimize(aut, acc='Rabin 2',
state_based=True, max_states=5, assume=True, param=0)
assert min3.num_sets() == 4
assert min3.num_states() == 3
min3 = spot.sat_minimize(aut, acc='Rabin 2',
state_based=True, max_states=5, assume=True, param=1)
assert min3.num_sets() == 4
assert min3.num_states() == 3
min3 = spot.sat_minimize(aut, acc='Rabin 2',
state_based=True, max_states=5, assume=True, param=2)
assert min3.num_sets() == 4
assert min3.num_states() == 3
min3 = spot.sat_minimize(aut, acc='Rabin 2',
state_based=True, max_states=5, assume=True, param=50)
assert min3.num_sets() == 4
assert min3.num_states() == 3
min3 = spot.sat_minimize(aut, acc='Rabin 2',
state_based=True, max_states=5, incr=True)
assert min3.num_sets() == 4
@ -106,6 +153,26 @@ min4 = spot.sat_minimize(aut, acc='parity max odd 3',
colored=True, dichotomy=True)
assert min4.num_sets() == 3
assert min4.num_states() == 2
min4 = spot.sat_minimize(aut, acc='parity max odd 3',
colored=True, assume=True)
assert min4.num_sets() == 3
assert min4.num_states() == 2
min4 = spot.sat_minimize(aut, acc='parity max odd 3',
colored=True, assume=True, param=0)
assert min4.num_sets() == 3
assert min4.num_states() == 2
min4 = spot.sat_minimize(aut, acc='parity max odd 3',
colored=True, assume=True, param=1)
assert min4.num_sets() == 3
assert min4.num_states() == 2
min4 = spot.sat_minimize(aut, acc='parity max odd 3',
colored=True, assume=True, param=2)
assert min4.num_sets() == 3
assert min4.num_states() == 2
min4 = spot.sat_minimize(aut, acc='parity max odd 3',
colored=True, assume=True, param=50)
assert min4.num_sets() == 3
assert min4.num_states() == 2
min4 = spot.sat_minimize(aut, acc='parity max odd 3',
colored=True, incr=True)
assert min4.num_sets() == 3