degen: detect superfluous SCCs and remove them

Suggested by Maximilien Colange.

* spot/twaalgos/degen.cc: If the output has more SCC than the input,
detect useless SCCs and remove them.
* spot/twaalgos/postproc.cc, spot/twaalgos/postproc.hh,
spot/twaalgos/degen.hh: Add support for a degen-remscc option.
* bin/spot-x.cc, NEWS: Document it.
* tests/core/degenscc.test: New file.
* tests/Makefile.am: Add it.
* tests/core/det.test: Lower some expected size (yay!).
This commit is contained in:
Alexandre Duret-Lutz 2017-09-28 21:54:49 +02:00
parent ce5e3b654f
commit 900b344c9a
9 changed files with 147 additions and 22 deletions

8
NEWS
View file

@ -96,6 +96,14 @@ New in spot 2.4.0.dev (not yet released)
transitions on the fly from an alternating Büchi automaton
using Miyano and Hayashi's breakpoint algorithm.
- In some cases, spot::degeneralize() would output Büchi automata
with more SCCs than its input. This was hard to notice, because
very often simulation-based simplifications remove those extra
SCCs. This situation is now detected by spot::degeneralized() and
fixed before returning the automaton. A new optionnal argument
can be passed to disable this behavior (or use -x degen-remscc=0
from the command-line).
Deprecation notices:
(These functions still work but compilers emit warnings.)