We are happy to announce the release of Spot 2.2.
You can find the new release here:
http://www.lrde.epita.fr/dload/spot/spot-2.2.tar.gz
See https://spot.lrde.epita.fr/ for documentation and installation instructions.
Spot 2.2 fixes some serious bugs and adds an assortments of small improvements. These changes have been contributed by Alexandre Gbaguidi Aisse, Étienne Renault, and myself. A detailed list of what is new is given below.
As always, please direct any feedback to spot@lrde.epita.fr.
New in spot 2.2 (2016-11-14)
Command-line tools:
* ltlfilt has a new option --from-ltlf to help reducing LTLf (i.e., LTL over finite words) model checking to LTL model checking. This is based on a transformation by De Giacomo & Vardi (IJCAI'13).
* "ltldo --stats=%R", which used to display the serial number of the formula processed, was renamed to "ltldo --stats=%#" to free %R for the following feature.
* autfilt, dstar2tgba, ltl2tgba, ltlcross, ltldo learned to measure cpu-time (as opposed to wall-time) using --stats=%R. User or system time, for children or parent, can be measured separately by adding additional %[LETTER]R options. The difference between %r (wall-clock time) and %R (CPU time) can also be used to detect unreliable measurements. See https://spot.lrde.epita.fr/oaut.html#timing
Library:
* from_ltlf() is a new function implementing the --from-ltlf transformation described above.
* is_unambiguous() was rewritten in a more efficient way.
* scc_info learned to determine the acceptance of simple SCCs made of a single self-loop without resorting to remove_fin() for complex acceptance conditions.
* remove_fin() has been improved to better deal with automata with "unclean" acceptance, i.e., acceptance sets that are declared but not used. In particular, this helps scc_info to be more efficient at deciding the acceptance of SCCs in presence of Fin acceptance.
* Simulation-based reductions now implement just bisimulation-based reductions on deterministic automata, to save time. As an example, this halves the run time of genltl --rv-counter=10 | ltl2tgba
* scc_filter() learned to preserve state names and highlighted states.
* The BuDDy library has been slightly optimized: the initial setup of the unicity table can now be vectorized by GCC, and all calls to setjmp are now avoided when variable reordering is disabled (the default).
* The twa class has three new methods: aut->intersects(other) aut->intersecting_run(other) aut->intersecting_word(other) currently these are just convenient wrappers around !otf_product(aut, other)->is_empty() otf_product(aut, other)->accepting_run()->project(aut) otf_product(aut, other)->accepting_word() with any Fin-acceptance removal performed before the product. However the plan is to implement these more efficiently in the future.
Bugs:
* ltl2tgba was always using the highest settings for the LTL simplifier, ignoring the --low and --medium options. Now genltl --go-theta=12 | ltl2tgba --low --any is instantaneous as it should be.
* The int-vector compression code could encode 6 and 22 in the same way, causing inevitable issues in our LTSmin interface. (This affects tests/ltsmin/modelcheck with option -z, not -Z.)
* str_sere() and str_utf8_sere() were not returning the same string that print_sere() and print_utf8_sere() would print.
* Running the LTL parser in debug mode would crash.
* tgba_determinize() could produce incorrect deterministic automata when run with use_simulation=true (the default) on non-simplified automata.
* When the automaton_stream_parser reads an automaton from an already opened file descriptor, it will not close the file anymore. Before that the spot.automata() python function used to close a file descriptor twice when reading from a pipe, and this led to crashes of the 0MQ library used by Jupyter, killing the Python kernel.
* remove_fin() could produce incorrect result on incomplete automata tagged as weak and deterministic.
* calling set_acceptance() several times on an automaton could result in unexpected behaviors, because set_acceptance(0,...) used to set the state-based acceptance flag automatically.
* Some buffering issue caused syntax errors to be displayed out of place by the on-line translator.