This is something Soheib and I worked on back in July, but a

intricate memory corruption bug prevented me to check the patch
in.  It took me two days to realize why find_state() must do a
double loop over the candidates to check for equality before
checking for inclusion(s).

* iface/gspn/ltlgspn.cc: New options, -e45 and -n.
* iface/gspn/ssp.cc, iface/gspn/ssp.hh: Handle these.
* src/tgbaalgos/gtec/gtec.cc (TRACE): Add some debugging traces.
(couvreur99_check_shy::dump_queue): New function.
* src/tgbaalgos/gtec/gtec.hh (couvreur99_check_shy::dump_queue):
New function.
This commit is contained in:
Alexandre Duret-Lutz 2008-01-08 13:42:39 +00:00
parent 8d1b5e40b0
commit cc0ca4ae54
6 changed files with 184 additions and 37 deletions

View file

@ -1,6 +1,6 @@
// Copyright (C) 2003, 2004, 2006, 2007 Laboratoire d'Informatique de Paris 6
// (LIP6), département Systèmes Répartis Coopératifs (SRC),
// Université Pierre et Marie Curie.
// Copyright (C) 2003, 2004, 2006, 2007, 2008 Laboratoire
// d'Informatique de Paris 6 (LIP6), département Systèmes Répartis
// Coopératifs (SRC), Université Pierre et Marie Curie.
//
// This file is part of Spot, a model checking library.
//
@ -73,6 +73,7 @@ syntax(char* prog)
<< " -e4 use semi-d. incl. Couvreur's emptiness-check's "
<< "shy variant"
<< std::endl
<< " -e45 mix of -e4 and -e5 " << std::endl
<< " -e5 use d. incl. Couvreur's emptiness-check's shy variant"
<< std::endl
<< " -e6 like -e5, but without inclusion checks in the "
@ -80,6 +81,9 @@ syntax(char* prog)
#endif
<< " -m degeneralize and perform a magic-search" << std::endl
<< std::endl
#ifdef SSP
<< " -n do not perform any decomposition" << std::endl
#endif
<< " -l use Couvreur's LaCIM algorithm for translation (default)"
<< std::endl
<< " -f use Couvreur's FM algorithm for translation" << std::endl
@ -111,6 +115,8 @@ main(int argc, char **argv)
bool doublehash = true;
bool stack_inclusion = true;
bool pushfront = false;
bool double_inclusion = false;
bool no_decomp = false;
#endif
std::string dead = "true";
@ -161,6 +167,11 @@ main(int argc, char **argv)
{
check = Couvreur4;
}
else if (!strcmp(argv[formula_index], "-e45"))
{
check = Couvreur5;
double_inclusion = true;
}
else if (!strcmp(argv[formula_index], "-e5"))
{
check = Couvreur5;
@ -175,6 +186,12 @@ main(int argc, char **argv)
{
check = Magic;
}
#ifdef SSP
else if (!strcmp(argv[formula_index], "-n"))
{
no_decomp = true;
}
#endif
else if (!strcmp(argv[formula_index], "-l"))
{
trans = Lacim;
@ -276,7 +293,9 @@ main(int argc, char **argv)
ec = spot::couvreur99_check_ssp_shy_semi(prod);
break;
case Couvreur5:
ec = spot::couvreur99_check_ssp_shy(prod, stack_inclusion);
ec = spot::couvreur99_check_ssp_shy(prod, stack_inclusion,
double_inclusion,
no_decomp);
break;
#endif
default:
@ -389,6 +408,7 @@ main(int argc, char **argv)
#else
delete model;
delete control;
delete ca;
#endif
delete a_f;
delete dict;