Fix computation of support_conditions for bdd-based TGBA.

This fixes a bug in the powerset of such TGBA on the minimize branch.

* src/tgba/tgbabddconcrete.cc (compute_support_conditions): Also
account for the conditions from the acceptance relations.
* rc/tgba/tgbabddconcretefactory.hh, rc/tgba/tgbabddconcretefactory.cc
(acceptance_conditions_support): New variable to hold the value
of bdd_support(acceptance_conditions_support).
* src/tgba/tgbabddconcretefactory.cc (finish): Update
data_.acceptance_conditions_support.
This commit is contained in:
Alexandre Duret-Lutz 2011-01-05 08:01:46 +01:00
parent 0f08fbc206
commit bd742ef6a4
5 changed files with 40 additions and 4 deletions

View file

@ -1,4 +1,6 @@
// Copyright (C) 2003 Laboratoire d'Informatique de Paris 6 (LIP6),
// Copyright (C) 2011 Laboratoire de Recherche et Développement de
// l'Epita (LRDE).
// Copyright (C) 2003 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
@ -127,9 +129,16 @@ namespace spot
// bdd_support must be called BEFORE bdd_exist
// because bdd_exist(bdd_support((a&Next[f])|(!a&Next[g])),Next[*])
// is obviously not the same as bdd_support(a|!a).
// In other words: we can reuse compute_support_conditions() for
// In other words: we cannot reuse compute_support_conditions() for
// this computation.
return bdd_exist(bdd_support(succ_set), data_.notvar_set);
//
// Also we need to inject the support of acceptance conditions, because a
// "Next[f]" that looks like one transition might in fact be two
// transitions if the acceptance condition distinguish between
// letters, e.g. "Next[f] & ((a & Acc[1]) | (!a))"
return bdd_exist(bdd_support(succ_set)
& data_.acceptance_conditions_support,
data_.notvar_set);
}
std::string