Implementent tba_determinize(), based on Dax et al (ATVA'07).

* src/tgbaalgos/powerset.hh,
src/tgbaalgos/powerset.cc (tba_determinize): New function.
* src/tgbatest/ltl2tgba.cc (-RQ): New option, for testing.
This commit is contained in:
Alexandre Duret-Lutz 2013-01-21 11:14:08 +01:00
parent 29bc087d56
commit ec5bbf4fcf
3 changed files with 249 additions and 5 deletions

View file

@ -69,6 +69,7 @@
#include "kripkeparse/public.hh"
#include "tgbaalgos/simulation.hh"
#include "tgbaalgos/compsusp.hh"
#include "tgbaalgos/powerset.hh"
#include "taalgos/tgba2ta.hh"
#include "taalgos/dotty.hh"
@ -234,6 +235,7 @@ syntax(char* prog)
<< std::endl
<< " -RM attempt to WDBA-minimize the automaton unless the "
<< "result is bigger" << std::endl
<< " -RQ determinize a TGBA (assuming it's legal!)" << std::endl
<< std::endl
<< "Automaton conversion:" << std::endl
@ -385,6 +387,7 @@ main(int argc, char** argv)
bool graph_run_tgba_opt = false;
bool opt_reduce = false;
bool opt_minimize = false;
bool opt_determinize = false;
bool reject_bigger = false;
bool opt_bisim_ta = false;
bool opt_monitor = false;
@ -784,6 +787,10 @@ main(int argc, char** argv)
opt_minimize = true;
reject_bigger = true;
}
else if (!strcmp(argv[formula_index], "-RQ"))
{
opt_determinize = true;
}
else if (!strcmp(argv[formula_index], "-RT"))
{
opt_bisim_ta = true;
@ -1425,6 +1432,15 @@ main(int argc, char** argv)
// pointless.
}
spot::tgba* determinized = 0;
if (opt_determinize && a->number_of_acceptance_conditions() <= 1
&& f->is_syntactic_recurrence())
{
tm.start("determinization");
a = determinized = tba_determinize(a);
tm.stop("determinization");
}
const spot::tgba* expl = 0;
switch (dupexp)
{
@ -1878,6 +1894,7 @@ main(int argc, char** argv)
delete expl;
delete monitor;
delete minimized;
delete determinized;
delete degeneralized;
delete aut_scc;
delete to_free;