Improve SCC simplification by removing implied acceptance conditions.

Spot 0.7.1 used to need 190 acceptance conditions to translate the
188 literature formulae.  With this patch we are down to 185.
That's not an impressive, but there are only ~20 formulae that
require more than 1 acceptance conditions; hence little room for
improvement.

* src/misc/bddlt.hh (bdd_hash): New function.
* src/misc/accconv.hh, src/misc/accconv.cc: New files.
* src/misc/Makefile.am: Add them.
* src/tgbaalgos/scc.cc (scc_map::build_map): Adjust
to record all combination of acceptance conditions occurring in a SCC.
* src/tgbaalgos/scc.hh (scc_map::scc::useful_acc): Update description.
* src/tgbaalgos/sccfilter.cc (scc_filter): Simplify acceptance
conditions that are always implied by another acceptance
conditions.  Previously, we only removed acceptance conditions
that where always present in accepting SCCs.
* src/tgbatest/sccsimpl.test: New file.
* src/tgbatest/Makefile.am (TESTS): Add it.
This commit is contained in:
Alexandre Duret-Lutz 2011-08-27 18:55:13 +02:00
parent 9d232af82f
commit d9fc75e94e
10 changed files with 401 additions and 28 deletions

View file

@ -1,3 +1,5 @@
// Copyright (C) 2011 Laboratoire de Recherche et Developpement de
// l'Epita (LRDE).
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
@ -38,6 +40,19 @@ namespace spot
return left.id() < right.id();
}
};
/// \brief Hash functor for BDDs.
/// \ingroup misc_tools
struct bdd_hash :
public std::unary_function<const bdd&, size_t>
{
size_t
operator()(const bdd& b) const
{
return b.id();
}
};
}
#endif // SPOT_MISC_BDDLT_HH