* src/misc/formater.cc, src/misc/formater.hh (scan): New method. (prime): Use it. * src/bin/ltlcross.cc (translator_runner::translator_runner): Scan each specification string, and report those missing an input or output %-sequence. * NEWS: Mention it.
820 lines
39 KiB
Text
820 lines
39 KiB
Text
New in spot 1.0a (not released):
|
|
|
|
* Bug fixes:
|
|
- Two executions of the simulation reductions could produce
|
|
two isomorphic automata, but with transitions in a different
|
|
order.
|
|
- ltlcross did not diagnose write errors to temporary files,
|
|
and certain versions of g++ would warn about it.
|
|
- "P0.init" is parsed as an atomic even without the double quotes,
|
|
but it was always output with double quotes. This version will
|
|
not quote this atomic proposition anymore.
|
|
- "U", "W", "M", "R" were correctly parsed as atomic propositions
|
|
(instead of binary operators) when placed in double quotes, but
|
|
on output they were output without quotes, making the result
|
|
unparsable.
|
|
- the to_lbt_string() functions would always output a trailing space.
|
|
This is not the case anymore.
|
|
- tgba_product::transition_annotation() would segfault when
|
|
called in a product against a Kripke structure.
|
|
* Minor improvements:
|
|
- Four new LTL simplifications rules:
|
|
GF(a|Xb) = GF(a|b)
|
|
GF(a|Fb) = GF(a|b)
|
|
FG(a&Xb) = FG(a&b)
|
|
FG(a&Gb) = FG(a&b)
|
|
- The on-line version of ltl2tgba now displays edge and
|
|
transition counts, just as the ltlcross tool.
|
|
- ltlcross will display the number of timeouts at the end
|
|
of its execution.
|
|
- ltlcross will diagnose tools with missing input or
|
|
output %-sequence before attempting to run any of them.
|
|
- The parser for LBT's prefix-style LTL formulas will now
|
|
read atomic propositions that are not of the form p1, p2...
|
|
This makes it possible to process formulas written in
|
|
ltl2dstar's syntax.
|
|
* Pruning:
|
|
- lbtt has been removed from the distribution. A copy of the last
|
|
version we distributed is still available at
|
|
http://spot.lip6.fr/dl/lbtt-1.2.1a.tar.gz
|
|
and our test suite will use it if it is installed, but the same
|
|
tests are already performed by ltlcross.
|
|
- the bench/ltl2tgba/ benchmark, that used lbtt to compare various
|
|
LTL-to-Büchi translators, has been updated to use ltlcross. It
|
|
now output summary tables in LaTeX. Support for Modella (no
|
|
longer available online), and Wring (requires a too old Perl
|
|
version) have been dropped.
|
|
- the half-baked and underdocumented "Event TGBA" support in
|
|
src/evtgba*/ has been removed, as it was last worked on in 2004.
|
|
|
|
New in spot 1.0 (2012-10-27):
|
|
|
|
* License change: Spot is now distributed using GPL v3+ instead
|
|
of GPL v2+. This is because we started using some third-party
|
|
files distributed under GPL v3+.
|
|
|
|
* Command-line tools
|
|
|
|
Useful command-line tools are now installed in addition to the
|
|
library. Some of these tools were originally written for our test
|
|
suite and had evolved organically into useful programs with crappy
|
|
interfaces: they have now been rewritten with better argument
|
|
parsing, saner defaults, and they come with man pages.
|
|
|
|
- genltl: Generate LTL formulas from scalable patterns.
|
|
This offers 20 patterns so far.
|
|
|
|
- randltl: Generate random LTL/PSL formulas.
|
|
|
|
- ltlfilt: Filter lists of formulas according to several criteria
|
|
(e.g., match only safety formulas that are larger than
|
|
some given size). Besides being used as a "grep" tool
|
|
for formulas, this can also be used to convert
|
|
files of formulas between different syntaxes, apply
|
|
some simplifications, check whether to formulas are
|
|
equivalent, ...
|
|
|
|
- ltl2tgba: Translate LTL/PSL formulas into Büchi automata (TGBA,
|
|
BA, or Monitor). A fundamental change to the
|
|
interface is that you may now specify the goal of the
|
|
translation: do you you favor deterministic or smaller
|
|
automata?
|
|
|
|
- ltl2tgta: Translate LTL/PSL formulas into Testing Automata.
|
|
|
|
- ltlcross: Compare the output of translators from LTL/PSL to
|
|
Büchi automata, to find bug or for benchmarking. This
|
|
is essentially a Spot-based reimplementation of LBTT
|
|
that supports PSL in addition to LTL, and that can
|
|
output more statistics.
|
|
|
|
An introduction to these tools can be found on-line at
|
|
http://spot.lip6.fr/userdoc/tools.html
|
|
|
|
The former test versions of genltl and randltl have been removed
|
|
from the source tree. The old version of ltl2tgba with its
|
|
gazillion options is still is src/tgbatest/ and is meant to be
|
|
used for testing only. Although ltlcross is meant to replace
|
|
LBTT, we are still using both tools in this release; however this
|
|
is likely to be the last release of Spot that redistributes LBTT.
|
|
|
|
* New features in the Spot library:
|
|
|
|
- Support for various flavors of Testing Automata.
|
|
|
|
The flavors are:
|
|
+ "classical" Testing Automata, as used for instance by
|
|
Geldenhuys and Hansen (Spin'06), using Büchi and
|
|
livelock acceptance conditions.
|
|
+ Generalized Testing Automata, extending the previous
|
|
with multiple Büchi acceptance sets.
|
|
+ Transition-based Generalized Testing Automata moving Büchi
|
|
acceptance to transitions, and getting rid of livelock
|
|
acceptance conditions by expliciting stuttering self-loops.
|
|
|
|
Supporting algorithms include anything required to run
|
|
the automata-theoretic approach using testing automata:
|
|
|
|
+ dedicated synchronized product
|
|
+ dedicated emptiness-check for TA and GTA, as these
|
|
may require two passes because of the two kinds of
|
|
acceptance, while a TGTA can be checked for emptiness
|
|
with the same one-pass algorithm as a TGBA.
|
|
+ conversion from a TGBA to any of the above kind, with
|
|
options to reduce these automata with bisimulation,
|
|
and to produce a BA/GBA that require a single pass
|
|
(at the expense of determinism).
|
|
+ output in dot format for display
|
|
|
|
A discussion of these automata, part of Ala Eddine BEN SALEM's
|
|
PhD work, should appear in ToPNoC VI (LNCS 7400). The web-based
|
|
interface and the aforementioned ltl2tgta tool can be used
|
|
to build testing automata.
|
|
|
|
- TGBA can now be reduced by Reverse Simulation (in addition to
|
|
the Direct Simulation introduced in 0.9). A function called
|
|
iterated_simulations() will alternate direct and reverse
|
|
simulations in a loop as long as it diminishes the size of the
|
|
automaton.
|
|
|
|
- The enumerate_cycles class implements the Loizou-Thanisch
|
|
algorithm to enumerate elementary cycles in a SCC. As an
|
|
example of use, is_weak_scc() will tell whether an SCC is
|
|
inherently weak (all its cycles are accepting, or none of them
|
|
are).
|
|
|
|
- parse_lbt() will parse an LTL formula expressed in the prefix
|
|
syntax used (at least) by LBT, LBTT and Scheck.
|
|
to_lbt_string() can be used to print an LTL formula using this
|
|
syntax.
|
|
|
|
- to_wring_string() can be used to print an LTL formula into
|
|
Wring's syntax.
|
|
|
|
- The LTL/PSL parser now has a lenient mode that can be useful
|
|
to interpret atomic proposition with language-specific constructs.
|
|
In lenient mode, any (...) or {...} block that cannot be parsed
|
|
as formula will be assumed to be an atomic proposition.
|
|
For instance the input (a < b) U (process[2]@ok), normally
|
|
flagged as a syntax error, is read as "a < b" U "process[2]@ok"
|
|
in lenient mode.
|
|
|
|
- minimize_obligation() has a new option to disable WDBA
|
|
minimization it cases it would produce a deterministic automaton
|
|
that is bigger than the original TGBA. This can help
|
|
choosing between less states or more determinism.
|
|
|
|
- new functions is_deterministic() and count_nondet_states()
|
|
(The count of nondeterministic states is now displayed on
|
|
automata generated with the web interface.)
|
|
|
|
- A new class, "postprocessor", makes it easier to apply
|
|
all available simplification algorithms on a TGBA/BA/Monitors.
|
|
|
|
* Minor changes:
|
|
|
|
- The '*' operator can (again) be used as an AND in LTL formulas.
|
|
This is for compatibility with formula written in Wring's
|
|
syntax. However inside SERE it is interpreted as the Kleen
|
|
star.
|
|
|
|
- When printing a formula using Spin's LTL syntax, we don't
|
|
double-quote complex atomic propositions (that was not valid
|
|
Spin input anyway). For instance F"foo == 2" used to be
|
|
output as <>"foo == 2". We now output <>(foo == 2) instead.
|
|
The latter syntax is understood by Spin 6. It can be read
|
|
back by Spot in lenient mode (see above).
|
|
|
|
- The gspn-ssp benchmark has been removed.
|
|
|
|
|
|
New in spot 0.9.2 (2012-07-02):
|
|
|
|
* New features to the web interface.
|
|
- It can run ltl3ba (Babiak et al., TACAS'12) where available.
|
|
- "a loading logo" is displayed when result is not instantaneous.
|
|
* Speed improvements:
|
|
- The unicity hash table of BuDDy has been separated separated
|
|
node table for better cache-friendliness. The resulting speedup
|
|
is around 5% on BDD-intensive algorithms.
|
|
- A new BDD operation, called bdd_implies() has been added to
|
|
BuDDy to check whether one BDD implies another. This benefits
|
|
mostly the simulation and degeneralization algorithms of Spot.
|
|
- A new offline implementation of the degeneralization (which
|
|
had always been performed on-the-fly so far) available. This
|
|
especially helps the Safra complementation.
|
|
* Bug fixes:
|
|
- The CGI script running for ltl2tgba.html will correctly timeout
|
|
after 30s when Spot's translation takes more time.
|
|
- Applying WDBA-minimization on an automaton generated by the
|
|
Couvreur/LaCIM translator could lead to an incorrect automaton
|
|
due to a bug in the definition of product with symbolic
|
|
automata.
|
|
- The Makefile.am of BuDDy, LBTT, and Spot have been adjusted to
|
|
accomodate Automake 1.12 (while still working with 1.11).
|
|
- Better error recovery when parsing broken LTL formulae.
|
|
- Fix errors and warnings reported by clang 3.1 and the
|
|
upcoming g++ 4.8.
|
|
|
|
New in spot 0.9.1 (2012-05-23):
|
|
|
|
* The version of LBTT we distribute includes a patch from Tomáš
|
|
Babiak to count the number of non-deterministic states, and the
|
|
number of deterministic automata produced.
|
|
See lbtt/NEWS for the list of other differences with the original
|
|
version of LBTT 1.2.1.
|
|
* The Couvreur/FM translator has learned two new tricks. These only
|
|
help to speedup the translation by not issuing states or
|
|
acceptance conditions that would be latter suppresed by other
|
|
optimizations.
|
|
- The translation rules used to translate subformulae of the G
|
|
operator have been adjusted not to produce useless loops
|
|
already implied by G. This generalizes the "GF" trick
|
|
presented in Couvreur's original FM'99 paper.
|
|
- Promises generated for formula of the form P(a U (b U c))
|
|
are reduced into P(c), avoiding the introduction of many
|
|
promises that imply each other.
|
|
* The tgba_parse() function is now available via the Python
|
|
bindings.
|
|
* Bug fixes:
|
|
- The random SERE generator was using the wrong operators
|
|
for "and" and "or", mistaking And/Or with AndRat/OrRat.
|
|
- The translation of !{r} was incorrect when this subformula
|
|
was recurring (e.g. in G!{r}) and r had loops.
|
|
- Correctly recognize ltl2tgba's option -rL.
|
|
- Using LTL simplification rules based on syntactic implication,
|
|
or based on language containment checks, caused BDD variables
|
|
to be allocated in an "unnatural" order, resulting in a slower
|
|
translation and a less optimal degeneralization.
|
|
- When ltl2tgba reads a neverclaim, it now considers the resulting
|
|
TGBA as a Büchi automaton, and will display double circles in
|
|
the dotty output.
|
|
|
|
New in spot 0.9 (2012-05-09):
|
|
|
|
* New features:
|
|
- Operators from the linear fragment of PSL are supported. This
|
|
basically extends LTL with Sequential Extended Regulat
|
|
Expressions (SERE), and a couple of operators to bridge SERE and
|
|
LTL. See doc/tl/tl.pdf for the list of operators and their
|
|
semantics.
|
|
- Formula rewritings have been completely revamped, and augmented
|
|
with rules for PSL operators (and some new LTL rules as well).
|
|
See doc/tl/tl.pdf for the list of the rewritings implemented.
|
|
- Some of these rewritings that may produce larger formulas
|
|
(for instance to rewrite "{a;b;c}" into "a & X(b & Xc)")
|
|
may be explicitely disabled with a new option.
|
|
- The src/ltltest/randltl tool can now generate random SEREs
|
|
and random PSL formulae.
|
|
- Only one translator (ltl2tgba_fm) has been augmented to
|
|
translate the new SERE and PSL operators. The internal
|
|
translation from SERE to DFA is likely to be rewriten in a
|
|
future version.
|
|
- A new function, length_boolone(), computes the size of an
|
|
LTL/PSL formula while considering that any Boolean term has
|
|
length 1.
|
|
- The LTL/PSL parser recognizes some UTF-8 characters (like ◇ or
|
|
∧) as operators, and some output routines now have an UTF-8
|
|
output mode. Tools like randltl and ltl2tgba have gained an -8
|
|
option to enable such output. See doc/tl/tl.pdf for the list
|
|
of recognized codepoints.
|
|
- A new direct simulation reduction has been implemented. It
|
|
works directly on TGBAs. It is in src/tgbaalgos/simlation.hh,
|
|
and it can be tested via ltl2tgba's -RDS option.
|
|
- unabbreviate_wm() is a function that rewrites the W and M operators
|
|
of LTL formulae using R and U. This is called whenever we output
|
|
a formula in Spin syntax. By combining this with the aforementioned
|
|
PSL rewriting rules, many PSL formulae that use simple SERE can be
|
|
converted into LTL formulae that can be feed to tools that only
|
|
understand U and R. The web interface will let you do this.
|
|
- changes to the on-line translator:
|
|
+ SVG output is available
|
|
+ can display some properties of a formula
|
|
+ new options for direct simulation, larger rewritings, and
|
|
utf-8 output
|
|
- configure --without-included-lbtt will prevent LBTT from being
|
|
configured and built. This helps on systems (such as MinGW)
|
|
where LBTT cannot be built. The test-suite will skip any
|
|
LBTT-based test if LBTT is missing.
|
|
* Interface changes:
|
|
- Operators ->, <->, U, W, R, and M are now parsed as
|
|
right-associative to better match the PSL standard.
|
|
- The constructors for temporal formulae will perform some trivial
|
|
simplifications based on associativity, commutativity,
|
|
idempotence, and neutral elements. See doc/tl/tl.pdf for the
|
|
list of such simplifications.
|
|
- Formula instances now have many methods to inspect their
|
|
properties (membership to syntactic classes, absence of X
|
|
operator, etc...) in constant time.
|
|
- LTL/PSL formulae are now handled everywhere as 'const formula*'
|
|
and not just 'formula*'. This reflects the true nature of these
|
|
(immutable) formula objects, and cleanups a lot of code.
|
|
Unfortunately, it is a backward incompatible change: you may have
|
|
to add 'const' to a couple of lines in your code, and change
|
|
'ltl::const_vistitor' into 'ltl::visitor' if you have written a
|
|
custom visitor.
|
|
- The new entry point for LTL/PSL simplifications is the function
|
|
ltl_simplifier::simplify() declared in src/ltlvisit/simplify.hh.
|
|
The ltl_simplifier class implements a cache.
|
|
Functions such as reduce() or reduce_tau03() are deprecated.
|
|
- The old game-theory-based implementations for direct and delayed
|
|
simulation reductions have been removed. The old direct
|
|
simulation would only work on degeneralized automata, and yet
|
|
produce results inferior to the new direct simulation introduced
|
|
in this release. The implementation of delayed simulation was
|
|
unreliable. The function reduc_tgba_sim() has been kept
|
|
for compatibility (it calls the new direct simulation whatever
|
|
the type of simulation requested) and marked as deprecated.
|
|
ltl2tgba's options -Rd, -RD are gone. Options -R1t, -R1s,
|
|
-R2s, and -R2t are deprecated and all made equivalent to -RDS.
|
|
- The tgba_explicit hierarchy has been reorganized in order to
|
|
make room for sba_explicit classes that share most of the code.
|
|
The main consequence is that the tgba_explicit type no longuer
|
|
exists. However the tgba_explicit_number,
|
|
tgba_explicit_formula, and tgba_explicit_string still do.
|
|
|
|
New in spot 0.8.3 (2012-03-09):
|
|
|
|
* Support for both Python 2.x and Python 3.x.
|
|
(Previous versions would only work with Python 2.x.)
|
|
* The online ltl2tgba.html now stores its state in the URL so that
|
|
history is preserved, and links to particular setups can be sent.
|
|
* Bug fixes:
|
|
- Fix a segfault in the compression code used by the -Z
|
|
option of dve2check.
|
|
- Fix a race condition in the CGI script.
|
|
- Fix a segfault in the CGI script when computing a Büchi run.
|
|
|
|
New in spot 0.8.2 (2012-01-19):
|
|
|
|
* configure now has a --disable-python option to disable
|
|
the compilation of Python bindings.
|
|
* Minor speedups in the Safra complementation.
|
|
* Better memory management for the on-the-fly degeneralization
|
|
algorithm. This mostly benefits to the Safra complementation.
|
|
* Bug fixes:
|
|
- spot::ltl::length() forgot to count the '&' and '|' operators
|
|
in an LTL formula.
|
|
- minimize_wdba() could fail to mark some transiant SCCs as accepting,
|
|
producing an automaton that was not fully minimized.
|
|
- minimize_dfa() could produce incorrect automata, but it is not
|
|
clear whether this could have had an inpact on WDBA minimization
|
|
(the worse case is that some TGBA would not have been minimized
|
|
when they could).
|
|
- Fix a Python syntax error in the CGI script.
|
|
- Fix compilation with g++ 4.0.
|
|
- Fix a make check failure when valgrind is missing.
|
|
|
|
New in spot 0.8.1 (2011-12-18):
|
|
|
|
* Only bug fixes:
|
|
- When ltl2tgba is set to perform both WDBA minimization and
|
|
degeneralization, do the latter only if the former failed.
|
|
In previous version, automata were (uselessly) degeneralized
|
|
before WDBA minimization, causing important slowdowns.
|
|
- Fix compilation with Clang 3.0.
|
|
- Fix a Makefile setup causing a "make check" failure on MacOS X.
|
|
- Fix an mkdir error in the CGI script.
|
|
|
|
New in spot 0.8 (2011-11-28):
|
|
|
|
* Major new features:
|
|
- Spot can read DiVinE models. See iface/dve2/README for details.
|
|
- The genltl tool can now output 20 different LTL formula families.
|
|
It also replaces the LTLcounter Perl scripts.
|
|
- There is a printer and parser for Kripke structures in text format.
|
|
* Major interface changes:
|
|
- The destructor of all states is now private. Any code that looks like
|
|
"delete some_state;" will cause an compile error and should be
|
|
updated to "some_state->destroy();". This new syntax is supported
|
|
since version 0.7.
|
|
- The experimental Nips interface has been removed.
|
|
* Minor changes:
|
|
- The dotty_reachable() function has a new option "assume_sba" that
|
|
can be used for rendering automata with state-based acceptance.
|
|
In that case, acceptance states are displayed with a double
|
|
circle. ltl2tgba (both command line and on-line) Use it to display
|
|
degeneralized automata.
|
|
- The dotty_reachable() function will also display transition
|
|
annotations (as returned by the tgba::transitition_annotation()).
|
|
This can be useful when displaying (small) state spaces.
|
|
- Identifiers used to name atomic proposition can contain dots.
|
|
E.g.: X.Y is now an atomic proposition, while it was understood
|
|
as X&Y in previous versions.
|
|
- The Doxygen documentation is no longer built as a PDF file.
|
|
* Internal improvements:
|
|
- The on-line ltl2tgba CGI script uses a cache to produce faster
|
|
answers.
|
|
- Better memory management for the states of explicit automata.
|
|
Thanks to the aforementioned ->destroy() change, we can avoid
|
|
cloning explicit states.
|
|
- tgba_product has learned how to be faster when one of the operands
|
|
is a Kripke structure (15% speedup).
|
|
- The reduction rule for "a M b" has been improved: it can be
|
|
reduced to "a & b" if "a" is a pure eventuallity.
|
|
- More useless acceptance conditions are removed by SCC simplifications.
|
|
* Bug fixes:
|
|
- Safra complementation has been fixed in cases where more than
|
|
one acceptance conditions where needed to convert the
|
|
deterministic Streett automaton as a TGBA.
|
|
- The degeneralization is now idempotent. Previously, degeneralizing
|
|
an already degeneralized automaton could add some states.
|
|
- The degeneralization now has a deterministic behavior. Previously
|
|
it was possible to obtain different output depending on the
|
|
memory layout.
|
|
- Spot now outputs neverclaims with fully parenthesized guards.
|
|
I.e., instead of
|
|
(!x && y) -> goto S1
|
|
it now outputs
|
|
((!(x)) && (y)) -> goto S1
|
|
This prevents problems when the model defines `x' as
|
|
#define x flag==0
|
|
because !x then evaluated to (!flag)==0 instead of !(flag==0).
|
|
|
|
New in spot 0.7.1 (2011-02-07):
|
|
|
|
* The LTL parser will accept operator ~ (for not) as well
|
|
as --> and <--> (for implication and equivalence), allowing
|
|
formulae from the Büchi Store to be read directly.
|
|
* The neverclaim parser will accept guards of the form
|
|
:: !(...) -> goto ...
|
|
instead of the more commonly used
|
|
:: (!(...)) -> goto ...
|
|
This makes it possible to read neverclaims provided by the Büchi Store.
|
|
* A new ltl2tgba option, -kt, will count the number of "sub-transitions".
|
|
I.e., a transition labelled by "true" counts for 4 "sub-transitions"
|
|
if the automaton uses 2 atomic propositions.
|
|
* Bugs fixed:
|
|
- Fix segfault during WDBA minimization on automata with useless states.
|
|
- Use the included BuDDy library if the one already installed
|
|
is older than the one distributed with Spot 0.7.
|
|
- Fix two typos in the code of the CGI scripts.
|
|
|
|
New in spot 0.7 (2011-02-01):
|
|
|
|
* Spot is now able to read an automaton expressed as a Spin neverclaim.
|
|
* The "experimental" Kripke structure introduced in Spot 0.5 has
|
|
been rewritten, and is no longer experimental. We have a
|
|
developement version of checkpn using it, and it should be
|
|
released shortly after Spot 0.7.
|
|
* The function to_spin_string(), that outputs an LTL formula using
|
|
Spin's syntax, now takes an optional argument to request
|
|
parentheses at all levels.
|
|
* src/ltltest/genltl is a new tool that generates some interesting
|
|
families of LTL formulae, for testing purpose.
|
|
* bench/ltlclasses/ uses the above tool to conduct the same benchmark
|
|
as in the DepCoS'09 paper by Cichoń et al. The resulting benchmark
|
|
completes in 12min, while it tooks days (or exhausted the memory)
|
|
when the paper was written (they used Spot 0.4).
|
|
* Degeneralization has again been improved in two ways:
|
|
- It will merge degeneralized transitions that can be merged.
|
|
- It uses a cache to speed up the improvement introduced in 0.6.
|
|
* An implementation of Dax et al.'s paper for minimizing obligation
|
|
formulae has been integrated. Use ltl2tgba -Rm to enable this
|
|
optimization from the command-line; it will have no effect if the
|
|
property is not an obligation.
|
|
* bench/wdba/ conducts a benchmark similar to the one on Dax's
|
|
webpage, comparing the size of the automata expressing obligation
|
|
formula before and after minimization. See bench/wdba/README for
|
|
results.
|
|
* Using similar code, Spot can now construct deterministic monitors.
|
|
* New ltl2tgba options:
|
|
-XN: read an input automaton as a neverclaim.
|
|
-C, -CR: Compute (and display) a counterexample after running the
|
|
emptiness check. With -CR, the counterexample will be
|
|
replayed on the automaton to ensure it is correct
|
|
(previous version would always compute a replay a
|
|
counterexample when emptiness-check was enabled)
|
|
-ks: traverse the automaton to compute its number of states and
|
|
transitions (this is faster than -k which will also count
|
|
SCCs and paths).
|
|
-M: Build a deterministic monitor.
|
|
-O: Tell whether a formula represents a safety, guarantee, or
|
|
obligation property.
|
|
-Rm: Minimize automata representing obligation properties.
|
|
* The on-line tool to translate LTL formulae into automata
|
|
has been rewritten and is now at http://spot.lip6.fr/ltl2tgba.html
|
|
It requires a javascript-enabled browser.
|
|
* Bug fixes:
|
|
- Location of the errors messages in the TGBA parser where inaccurate.
|
|
- Various warning fixes for different versions of GCC and Clang.
|
|
- The neverclaim output with ltl2tgba -N or -NN used to ignore any
|
|
automaton simplification performed after degeneralization.
|
|
- The formula simplification based on universality and eventuality
|
|
had a quadratic run-time.
|
|
|
|
New in spot 0.6 (2010-04-16):
|
|
|
|
* Several optimizations to improve some auxiliary steps
|
|
of the LTL translation (not the core of the translation):
|
|
- Better degeneralization
|
|
- SCC simplifications has been tuned for degeneralization
|
|
(ltl2tgba now has two options -R3 and -R3f: the latter will
|
|
remove every acceptance condition that used to be removed
|
|
in Spot 0.5 while the former will leave useless acceptance conditions
|
|
going to accepting SCC. Experience shows that -R3 is more
|
|
favorable to degeneralization).
|
|
- ltl2tgba will perform SCC optimizations before degeneralization
|
|
and not the converse
|
|
- We added a syntactic simplification rule to rewrite F(a)|F(b) as F(a|b).
|
|
We only had a rule for the more specific FG(a)|FG(b) = F(Ga|Gb).
|
|
- The syntactic simplification rule for F(a&GF(b)) = F(a)&GF(b) has
|
|
be disabled because the latter formula is in fact harder to translate
|
|
efficiently.
|
|
* New LTL operators: W (weak until) and its dual M (strong release)
|
|
- Weak until allows many LTL specification to be specified more
|
|
compactly.
|
|
- All LTL translation algorithms have been updated to
|
|
support these operators.
|
|
- Although they do not add any expressive power, translating
|
|
"a W b" is more efficient (read smaller output automaton) than
|
|
translating the equivalent form using the U operator.
|
|
- Basic syntactic rewriting rules will automatically rewrite "a U
|
|
(b | G(a))" and "(a U b)|G(a)" as "a W b", so you will benefit
|
|
from the new operators even if you do not use them. Similar
|
|
rewriting rules exist for R and M, although they are less used.
|
|
* New options have been added to the CGI script for
|
|
- SVG output
|
|
- SCC simplifications
|
|
* Bug fixes:
|
|
- The precedence of the "->" and "<->" Boolean operators has been
|
|
adjusted to better match other tools.
|
|
Spot <= 0.5 used to parse "a & b -> c & d" as "a & (b -> c) & d";
|
|
Spot >= 0.6 will parse it as "(a & b) -> (c & d)".
|
|
- The random graph generator was fixed (again!) not to produce
|
|
dead states as documented.
|
|
- Locations in the error messages of the LTL parser were off by one.
|
|
|
|
New in spot 0.5 (2010-02-01):
|
|
|
|
* We have setup two mailing lists:
|
|
- <spot-announce@lrde.epita.fr> is read-only and will be used to
|
|
announce new releases. You may subscribe at
|
|
https://www.lrde.epita.fr/mailman/listinfo/spot-announce
|
|
- <spot@lrde.epita.fr> can be used to discuss anything related
|
|
to Spot. You may subscribe at
|
|
https://www.lrde.epita.fr/mailman/listinfo/spot-announce
|
|
* Two new LTL translations have been implemented:
|
|
- eltl_to_tgba_lacim() is a symbolic translation for ELTL based on
|
|
Couvreur's LaCIM'00 paper. For this translation (available with
|
|
ltl2tgba's option -le), all operators are described as finite
|
|
automata. A default set of operators is provided for LTL
|
|
(option -lo) and user may add more automaton operators.
|
|
- ltl_to_taa() is a translation based on Tauriainen's PhD thesis.
|
|
LTL is translated to "self-loop" alternating automata
|
|
and then to Transition-based Generalized Automata. (ltl2tgba's
|
|
option -taa).
|
|
The "Couvreur/FM" translation remains the best LTL translation
|
|
available in Spot.
|
|
* The data structures used to represent LTL formulae have been
|
|
overhauled, and it resulted in a big performence improvement
|
|
(in time and memory consumption) for the LTL translation.
|
|
* Two complementation algorithms for state-based Büchi automata
|
|
have been implemented:
|
|
- tgba_kv_complement is an on-the-fly implementation of the
|
|
Kupferman-Vardi construction (TCS'05) for generalized acceptance
|
|
conditions.
|
|
- tgba_safra_complement is an implementation of Safra's
|
|
complementation. This algorithm takes a degeneralized Büchi
|
|
automaton as input, but our implementation for the Streett->Büchi
|
|
step will produce a generalized automaton in the end.
|
|
* ltl2tgba has gained several options and the help text has been
|
|
reorganized. Please run src/tgbatest/ltl2tgba without arguments
|
|
for details. Couvreur/FM is now the default translation.
|
|
* The ltl2tgba.py CGI script can now run standalone. It also offers
|
|
the Tauriainen/TAA translation, and some options for SCC-based
|
|
reductions.
|
|
* Automata using BDD-encoded transitions relation can now be pruned
|
|
for useless states symbolically using the delete_unaccepting_scc()
|
|
function. This is ltl2tgba's -R3b option.
|
|
* The SCC-based simplification (ltl2tgba's -R3 option) has been
|
|
rewritten and improved.
|
|
* The "*" symbol, previously parsed as a synonym for "&" is no
|
|
longer recognized. This makes room for an upcoming support of
|
|
rational operators.
|
|
* More benchmarks in the bench/ directory:
|
|
- gspn-ssp/ some benchmarks published at ACSD'07,
|
|
- ltlcounter/ translation of a class of LTL formulae used by
|
|
Rozier & Vardi at SPIN'07
|
|
- scc-stats/ SCC statistics after translation of LTL formulae
|
|
- split-product/ parallelizing gain after splitting LTL automata
|
|
* An experimental Kripke interface has been developed to simplify
|
|
the integration of third party tools that do not use acceptance
|
|
conditions and that have label on states instead of transitions.
|
|
This interface has not been used yet.
|
|
* Experimental interface with the Nips virtual machine.
|
|
It is not very useful as Spot isn't able to retrieve any property
|
|
information from the model. This will just check assertions.
|
|
* Distribution:
|
|
- The Boost C++ library is now required.
|
|
- Update to Autoconf 2.65, Automake 1.11.1, Libtool 2.2.6b,
|
|
Bison 2.4.1, and Swig 1.3.40.
|
|
- Thanks to the newest Automake, "make check" will now
|
|
run in parallel if you use "make -j2 check" or more.
|
|
* Bug fixes:
|
|
- Disable warnings from the garbage collection of BuDDy, it
|
|
could break the standard output of ltl2tgba.
|
|
- Fix several C++ constructs to ensure Spot will build with
|
|
GCC 4.3, 4.4, and older 3.x releases, as well as with Intel's
|
|
ICC compiler.
|
|
- A very old bug in the hash function for LTL formulae caused Spot
|
|
to sometimes (but very rarely) consider two different LTL formulae
|
|
as equal.
|
|
|
|
New in spot 0.4 (2007-07-17):
|
|
|
|
* Upgrade to Autoconf 2.61, Automake 1.10, Bison 2.3, and Swig 1.3.31.
|
|
* Better LTL simplifications.
|
|
* Don't initialize Buddy if it has already been initialized (in case
|
|
the client software is already using Buddy).
|
|
* Lots of work in the greatspn interface for our ACSD'05 paper.
|
|
* Bug fixes:
|
|
- Fix the random graph generator not to produce dead states as documented.
|
|
- Fix synchronized product in case both side use acceptance conditions.
|
|
- Fix some syntax errors with newer versions of GCC.
|
|
|
|
New in spot 0.3 (2006-01-25):
|
|
|
|
* lbtt 1.2.0
|
|
* The CGI script for LTL translation also offers emptiness check algorithms.
|
|
* tau03_opt_search implements the "ordering heuristic".
|
|
(Submitted by Heikki Tauriainen.)
|
|
* A couple of bugs were fixed into the LTL or automata simplifications.
|
|
|
|
New in spot 0.2 (2005-04-08):
|
|
|
|
* Emptiness checks:
|
|
- the new spot::option_map class is used to pass options to
|
|
emptiness-check algorithms.
|
|
- the new emptiness_check_instantiator class is used to turn a
|
|
string such as `algorithm(option1, option2)' into an actual
|
|
instance of this emptiness-check algorithm with the given
|
|
options. All tools use this.
|
|
- tau03_opt_search implements the "condition heuristic".
|
|
(Suggested by Heikki Tauriainen.)
|
|
* Minor bug fixes.
|
|
|
|
New in spot 0.1 (2005-01-31):
|
|
|
|
* Emptiness checks:
|
|
- They all follow the same interface, and gather statistical data.
|
|
- New algorithms: gv04.hh, se05.hh, tau03.hh, tau03opt.hh
|
|
- New options for couvreur99: poprem and group.
|
|
- reduce_run() try to reduce accepting runs produced by emptiness checks.
|
|
- replay_run() ensure accepting runs are actually accepting runs.
|
|
* New testing tools:
|
|
- ltltest/randltl: Generate random LTL formulae.
|
|
- tgbatest/randtgba: Generate random TGBAs. Optionally multiply them
|
|
against random LTL formulae. Optionally check them for emptiness
|
|
with all available algorithms. Optionally gather statistics.
|
|
* bench/emptchk/: Contains scripts that benchmark emptiness-checks.
|
|
* Split the degeneralization proxy in two:
|
|
- tgba_tba_proxy uses at most max(N,1) copies
|
|
- tgba_sba_proxy uses at most 1+max(N,1) copies and has a
|
|
state_is_accepting() method
|
|
* tgba::transition_annotation annotate a transition with some string.
|
|
This comes handy to associate that transition to its high-level name.
|
|
* Preliminary support for Event-based GBA (the evtgba*/ directories).
|
|
This might as well disappear in a future release.
|
|
* LTL formulae are now sorting using their string representation, instead
|
|
of their memory address (which is still unique). This makes the output
|
|
of the various functions more deterministic.
|
|
* The Doxygen documentation is now organized using modules.
|
|
|
|
New in spot 0.0x (2004-08-13):
|
|
|
|
* New atomic_prop_collect() function: collect atomic propositions
|
|
in an LTL formula.
|
|
* Fix several typos in documentation, and some warnings in the code.
|
|
* Now compiles on Darwin and Cygwin.
|
|
* Upgrade to Automake 1.9.1, and lbtt 1.1.2.
|
|
(And drop support for older lbtt versions.)
|
|
* Support newer versions of Valgrind (>= 2.1.0).
|
|
|
|
New in spot 0.0v (2004-06-29):
|
|
|
|
* LTL formula simplifications using basic rewriting rules,
|
|
a-la Wring syntactic approximations, and Etessami's universal
|
|
and existential classes.
|
|
- Function reduce() in ltlvisit/reduce.hh is the main interface.
|
|
- Can be tested with the CGI script.
|
|
* TGBA simplifications using direct simulation, delayed simulation,
|
|
and SCC-based simplifications. This is still experimental.
|
|
* The LTL parser will now read LTL formulae written using Wring's syntax.
|
|
* ltl2tgba_fm() now has options for on-the-fly fair-loop approximations,
|
|
and Modella-like branching-postponement.
|
|
* GreatSPN interface:
|
|
- The `declarative_environment' is now part of Spot itself rather than
|
|
part of the interface with GreatSPN.
|
|
- the RG and SRG interface can deal with dead markings in three
|
|
ways (omit deadlocks from the state graph, stutter on the deadlock
|
|
and consider as a regular behavior, or stutter and distinguish the
|
|
deadlock with a property).
|
|
- update SSP interface to Soheib Baarir latest work.
|
|
* Preliminary Python bindings for BuDDy's FDD and BVEC.
|
|
* Upgrade to BuDDy 2.3.
|
|
|
|
New in spot 0.0t (2004-04-23):
|
|
|
|
* `emptiness_check':
|
|
- fix two bugs in the computation of the counter example,
|
|
- revamp the interface for better customization.
|
|
* `never_claim_reachable': new function.
|
|
* Introduce annonymous BDD variables in `bdd_dict', and start
|
|
to use it in `ltl_to_tgba_fm'.
|
|
* Offer never claim in the CGI script.
|
|
* Rename EESRG as SSP, and offer specialized variants of the
|
|
emptiness_check.
|
|
|
|
New in spot 0.0r (2004-03-08):
|
|
|
|
* In ltl_to_tgba_fm:
|
|
- New option `exprop' to optimize determinism.
|
|
- Make the `symbolic indentification' from 0.0p optional.
|
|
* `nonacceptant_lbtt_reachable' new function to help getting
|
|
accurate statistics from LBTT.
|
|
* Revamp the cgi script's user interface.
|
|
* Upgrade to lbtt 1.0.3, swig 1.3.21, automake 1.8.3
|
|
|
|
New in spot 0.0p (2004-02-03):
|
|
|
|
* In ltl_to_tgba_fm:
|
|
- identify states with identical symbolic expansions
|
|
(i.e., identical continuations)
|
|
- use Acc[b] as acceptance condition for Fb, not Acc[Fb].
|
|
* Update and speed-up the cgi script.
|
|
* Improve degeneralization.
|
|
|
|
New in spot 0.0n (2004-01-13):
|
|
|
|
* emptiness_check::check2() is a variant of Couvreur's emptiness check that
|
|
explores visited states first.
|
|
* Build the EESRG supporting code condinally, as the associated
|
|
GreatSPN changes have not yet been contributed to GreatSPN.
|
|
* Add a powerset algorithm (determinize TGBA ignoring acceptance
|
|
conditions, i.e., as if they were used to recognize finite languages).
|
|
* tgba_explicit::merge_transitions: merge transitions with same source,
|
|
destination, and acceptance condition.
|
|
* Run test cases within valgrind.
|
|
* Various bug fixes.
|
|
|
|
New in spot 0.0l (2003-12-01):
|
|
|
|
* Computation of prime implicants. This simplify the output of
|
|
ltl_to_tgba_fm, and allows conditions to be output as some of
|
|
product in dot output.
|
|
* Optimize translation of GFy in ltl_to_tgba_fm.
|
|
* tgba_explicit supports arbitrary binary formulae on transitions
|
|
(only conjunctions were allowed).
|
|
|
|
New in spot 0.0j (2003-11-03):
|
|
|
|
* Use hash_map's instead of map's almost everywhere.
|
|
* New emptiness check, based on Couvreur's algorithm.
|
|
* LTL propositions can be put inside doublequotes to disambiguate
|
|
some constructions.
|
|
* Preliminary support for GreatSPN's EESRG.
|
|
* Various bug fixes.
|
|
|
|
New in spot 0.0h (2003-08-18):
|
|
|
|
* More python bindings:
|
|
- "import buddy" works (see wrap/python/tests/bddnqueen.py for an example),
|
|
- almost all the Spot API is now available via "import spot".
|
|
* wrap/python/cgi/ltl2tgba.py is an LTL-to-Büchi translator that
|
|
work as as a cgi script.
|
|
* Couvreur's FM'99 ltl-to-tgba translation.
|
|
|
|
New in spot 0.0f (2003-08-01):
|
|
|
|
* More python bindings, still only for the spot::ltl:: namespace.
|
|
* Functional GSPN interface. (Enable with --with-gspn=directory.)
|
|
* The LTL scanner recognizes /\, \/, and xor.
|
|
* Upgrade to lbtt 1.0.2.
|
|
* tgba_tba_proxy is an on-the-fly degeneralizer.
|
|
* Implements the "magic search" algorithm.
|
|
(Works only on a tgba_tba_proxy.)
|
|
* Tgba's output algorithms (save(), dotty()) now non-recursive.
|
|
* During products, succ_iter will optimize its set of successors
|
|
using information computed from the current product state.
|
|
* BDD dictionnaries are now shared between automata and. This
|
|
gets rid of all the BDD-variable translating machinery.
|
|
|
|
New in spot 0.0d (2003-07-13):
|
|
|
|
* Optimize translation of G operators occurring at the root
|
|
of a formula (or its immediate children when the root is a
|
|
conjunction). This saves two BDD variables per G operator.
|
|
* Distribute lbtt, and run it during `make check'.
|
|
* First sketch of GSPN interface.
|
|
* succ_iter_concreate::next() completely rewritten.
|
|
* Transitions are now labelled by boolean formulae (not only
|
|
conjunctions).
|
|
* Documentation:
|
|
- Output collaboration diagrams.
|
|
- Build and distribute PDF manual.
|
|
* Many bug fixes.
|
|
|
|
New in spot 0.0b (2003-06-26):
|
|
|
|
* Everything.
|