decompose_strength: work with inherently weak SCCs

* wrap/python/tests/decompose.ipynb: Adjust text.
* spot/twaalgos/strength.hh, spot/twaalgos/strength.cc:
Adjust to extract inherently weak SCCs instead of weak SCCs.  This gets
rids of the special handling for the "corner cases".
* spot/tests/strength.test: Adjust.
* NEWS: Mention it.
This commit is contained in:
Alexandre Duret-Lutz 2015-12-09 15:50:13 +01:00
parent 9bbcf85b3a
commit 2e15ed959d
5 changed files with 102 additions and 93 deletions

View file

@ -199,7 +199,7 @@ namespace spot
{
if (si.is_accepting_scc(i))
{
if (all_accepting | is_weak_scc(si, i))
if (all_accepting | is_inherently_weak_scc(si, i))
{
if (keep & Weak)
{

View file

@ -87,15 +87,21 @@ namespace spot
///
/// The string \a keep should be a non-empty combination of
/// the following letters:
/// - 'w': keep only weak SCCs (i.e., SCCs in which all transitions belong
/// to the same acceptance sets) that are not terminal.
/// - 't': keep terminal SCCs (i.e., weak SCCs that are complete)
/// - 's': keep strong SCCs (i.e., SCCs that are not weak).
/// - 'w': keep only inherently weak SCCs (i.e., SCCs in which
/// all transitions belong to the same acceptance sets) that
/// are not terminal.
/// - 't': keep terminal SCCs (i.e., inherently weak SCCs that are complete)
/// - 's': keep strong SCCs (i.e., SCCs that are not inherently weak).
///
/// This algorithm returns a subautomaton that contains all SCCs of the
/// requested strength, plus any upstream SCC (but adjusted not to be
/// accepting).
///
/// The definition are basically those used in the following paper,
/// except that we extra the "inherently weak" part instead of the
/// weak part because we can now test for inherent weakness
/// efficiently enough (not enumerating all cycles as suggested in
/// the paper).
/** \verbatim
@inproceedings{renault.13.tacas,
author = {Etienne Renault and Alexandre Duret-Lutz and Fabrice