diff --git a/python/spot/__init__.py b/python/spot/__init__.py index 2660fb418..a9d278609 100644 --- a/python/spot/__init__.py +++ b/python/spot/__init__.py @@ -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) diff --git a/spot/misc/satsolver.cc b/spot/misc/satsolver.cc index f94cfe5c4..dfff47dc6 100644 --- a/spot/misc/satsolver.cc +++ b/spot/misc/satsolver.cc @@ -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 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; } diff --git a/spot/misc/satsolver.hh b/spot/misc/satsolver.hh index 06eea6bf3..889164643 100644 --- a/spot/misc/satsolver.hh +++ b/spot/misc/satsolver.hh @@ -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 values); @@ -114,6 +117,10 @@ namespace spot template 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 solution; typedef std::pair 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_; diff --git a/spot/twaalgos/dtbasat.cc b/spot/twaalgos/dtbasat.cc index 3bbf357d7..3076b2403 100644 --- a/spot/twaalgos/dtbasat.cc +++ b/spot/twaalgos/dtbasat.cc @@ -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(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(prev); + } + twa_graph_ptr dtba_sat_minimize_incr(const const_twa_graph_ptr& a, bool state_based, int max_states, int sat_incr_steps) diff --git a/spot/twaalgos/dtbasat.hh b/spot/twaalgos/dtbasat.hh index 7620d5a40..114b8681b 100644 --- a/spot/twaalgos/dtbasat.hh +++ b/spot/twaalgos/dtbasat.hh @@ -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 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); } diff --git a/spot/twaalgos/dtwasat.cc b/spot/twaalgos/dtwasat.cc index d8b99fa8e..8ebb653eb 100644 --- a/spot/twaalgos/dtwasat.cc +++ b/spot/twaalgos/dtwasat.cc @@ -532,8 +532,11 @@ namespace spot typedef std::pair 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(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(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) diff --git a/spot/twaalgos/dtwasat.hh b/spot/twaalgos/dtwasat.hh index 02dd79fde..8929ddd54 100644 --- a/spot/twaalgos/dtwasat.hh +++ b/spot/twaalgos/dtwasat.hh @@ -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 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. diff --git a/spot/twaalgos/postproc.cc b/spot/twaalgos/postproc.cc index d8e190d93..c29c1f666 100644 --- a/spot/twaalgos/postproc.cc +++ b/spot/twaalgos/postproc.cc @@ -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,12 +452,17 @@ 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) { diff --git a/spot/twaalgos/postproc.hh b/spot/twaalgos/postproc.hh index 135746493..0cdb6c561 100644 --- a/spot/twaalgos/postproc.hh +++ b/spot/twaalgos/postproc.hh @@ -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; diff --git a/tests/core/satmin.test b/tests/core/satmin.test index 0d00e0d86..e2a826a7d 100755 --- a/tests/core/satmin.test +++ b/tests/core/satmin.test @@ -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 < 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 diff --git a/tests/core/satmin2.test b/tests/core/satmin2.test index e5f52a183..329035505 100755 --- a/tests/core/satmin2.test +++ b/tests/core/satmin2.test @@ -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 diff --git a/tests/python/satmin.py b/tests/python/satmin.py index fc08006d0..ebc3fb0b0 100644 --- a/tests/python/satmin.py +++ b/tests/python/satmin.py @@ -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