NEWS 141 KB
Newer Older
1
2
New in spot 2.2.1.dev (Not yet released)

3
4
5
6
7
  Build:

  * If the system has an installed libltdl library, use it instead of
    the one we distribute.

8
9
10
11
  Bug fixes:

  * scc_filter() had a left-over print statement that would print
    "names" when copying the name of the states.
12

13
14
15
16
17
  * is_terminal() should reject automata that have accepting
    transitions going into rejecting SCCs.  The whole point of
    being a terminal automaton is that reaching an accepting
    transition guarantees that any suffix will be accepted.

Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
18
New in spot 2.2.1 (2016-11-21)
19

Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
20
  Bug fix:
21

Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
22
23
  * The bdd_noderesize() function, as modified in 2.2, would always
    crash.
24

Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
25
New in spot 2.2 (2016-11-14)
26

27
28
29
30
31
32
  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).

Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
33
34
35
36
  * "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.

37
38
39
  * 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
Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
40
41
42
43
    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
44

45
46
  Library:

47
48
49
  * from_ltlf() is a new function implementing the --from-ltlf
    transformation described above.

50
  * is_unambiguous() was rewritten in a more efficient way.
51

52
  * scc_info learned to determine the acceptance of simple SCCs made
Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
53
    of a single self-loop without resorting to remove_fin() for complex
54
55
56
57
58
59
    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.
60

Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
61
62
  * Simulation-based reductions now implement just bisimulation-based
    reductions on deterministic automata, to save time.  As an example,
63
64
65
    this halves the run time of
       genltl --rv-counter=10 | ltl2tgba

66
67
  * scc_filter() learned to preserve state names and highlighted states.

68
69
70
71
72
  * 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).

73
74
75
76
77
78
79
80
  * 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()
Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
81
82
83
    with any Fin-acceptance removal performed before the product.
    However the plan is to implement these more efficiently in the
    future.
84

Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
85
  Bug fixes:
86

87
  * ltl2tgba was always using the highest settings for the LTL
88
89
90
91
    simplifier, ignoring the --low and --medium options.  Now
      genltl --go-theta=12 | ltl2tgba --low --any
    is instantaneous as it should be.

92
93
94
  * 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.)
95

96
97
98
  * str_sere() and str_utf8_sere() were not returning the same
    string that print_sere() and print_utf8_sere() would print.

Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
99
  * Running the LTL parser in debug mode would crash.
100

101
  * tgba_determinize() could produce incorrect deterministic automata
Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
102
    when run with use_simulation=true (the default) on non-simplified
103
104
    automata.

105
106
  * When the automaton_stream_parser reads an automaton from an
    already opened file descriptor, it will not close the file
107
108
109
110
    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.
111

112
113
114
  * remove_fin() could produce incorrect result on incomplete
    automata tagged as weak and deterministic.

Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
115
116
117
  * 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.
118

119
  * Some buffering issue caused syntax errors to be displayed out
Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
120
    of place by the on-line translator.
121

122
New in spot 2.1.2 (2016-10-14)
123

124
125
126
127
128
129
  Command-line tools:

  * genltl learned 5 new families of formulas
    (--tv-f1, --tv-f2, --tv-g1, --tv-g2, --tv-uu)
    defined in Tabakov & Vardi's RV'10 paper.

130
131
132
133
134
135
  * ltlcross's --csv and --json output was changed to not include
    information about the ambiguity or strength of the automata by
    default.   Computing those can be costly and not needed by
    every user, so it should now be requested explicitely using
    options --strength and --ambiguous.

136
137
138
139
140
141
142
143
  Library:

  * New LTL simplification rule:

    - GF(f & q) = G(F(f) & q) if q is
      purely universal and a pure eventuality.  In particular
      GF(f & GF(g)) now ultimately simplifies to G(F(f) & F(g)).

144
145
  Bug fixes:

146
  * Fix spurious uninitialized read reported by valgrind when
147
    is_Kleene_star() is compiled by clang++.
148

149
  * Using "ltlfilt some-large-file --some-costly-filter" could take
150
151
152
153
154
155
156
    to a lot of time before displaying the first results, because the
    output of ltlfilt is buffered: the buffer had to fill up before
    being flushed.  The issue did not manifest when the input is
    standard input, because of the C++ feature that reading std::cin
    should flush std::cout; however it was well visible when reading
    from files.  Flushing is now done more regularly.

157
158
159
160
  * Fix compilation warnings when -Wimplicit-fallthrough it enabled.

  * Fix python errors on Darwin when using methods from the spot module
    inside of the spot.ltsmin submodule.
161

162
163
  * Fix ltlcross crash when combining --no-check with --verbose.

164
165
166
  * Adjust paths and options used in bench/dtgbasat/ to match the
    changes introduced in Spot 2.0.

Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
167
New in spot 2.1.1 (2016-09-20)
Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
168

169
170
171
  Command-line tools:

  * ltlfilt, randltl, genltl, and ltlgrind learned to display the size
Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
172
    (%s), Boolean size (%b), and number of atomic propositions (%a)
Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
173
174
    with the --format and --output options.  A typical use-case is to
    sort formulas by size:
175
176
177
178
       genltl --dac --format='%s,%f' | sort -n | cut -d, -f2
    or to group formulas by number of atomic propositions:
       genltl --dac --output='ap-%a.ltl'

179
180
181
  * autfilt --stats learned the missing %D, %N, %P, and %W sequences,
    to complete the existing %d, %n, %p, and %w.

182
  * The --stats %c option of ltl2tgba, autfilt, ltldo, and dstar2tgba
Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
183
    now accepts options to filter the SCCs to count.  For instance
184
185
186
    --stats='%[awT]c' will count the SCCs that are (a)ccepting and
    (w)eak, but (not t)erminal.  See --help for all supported filters.

187
188
189
  Bugs fixed:

  * Fix several cases where command-line tools would fail to diagnose
190
    write errors (e.g. when writing to a filesystem that is full).
191
  * Typos in genltl --help and in the man page spot-x(7).
Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
192

Alexandre Duret-Lutz's avatar
Alexandre Duret-Lutz committed
193
New in spot 2.1 (2016-08-08)
194

195
196
  Command-line tools:

197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
  * All tools that input formulas or automata (i.e., autfilt,
    dstar2tgba, ltl2tgba, ltl2tgta, ltlcross, ltldo, ltlfilt,
    ltlgrind) now have a more homogeneous handling of the default
    input.

    - If no formula/automaton have been specified, and the standard
    input is a not a tty, then the default is to read that. This is a
    change for ltl2tgba and ltl2tgta.  In particular, it simplifies

        genltl --dac | ltl2tgba -F- | autfilt ...

    into

        genltl --dac | ltl2tgba | autfilt ...

    - If standard input is a tty and no other input has been
    specified, then an error message is printed.  This is a change for
    autfilt, dstar2tgba, ltlcross, ltldo, ltlfilt, ltlgrind, that used
    to expect the user to type formula or automata at the terminal,
    confusing people.

    - All tools now accept - as a shorthand for -F-, to force reading
    input from the standard input (regardless of whether it is a tty
    or not).  This is a change for ltl2tgba, ltl2tgta, ltlcross, and
    ltldo.

223
224
225
  * ltldo has a new option --errors=... to specify how to deal
    with errors from executed tools.

226
227
  * ltlcross and ltldo learned to bypass the shell when executing
    simple commands (with support for single or double-quoted
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
    arguments, and redirection of stdin and stdout, but nothing more).

  * ltlcross and ltldo learned a new syntax to specify that an input
    formula should be written in some given syntax after rewriting
    some operators away.  For instance the defaults arguments passed
    to ltl2dstar have been changed from
         --output-format=hoa %L %O
    into
         --output-format=hoa %[WM]L %O
    where [WM] specifies that operators W and M should be rewritten
    away.  As a consequence running
         ltldo ltl2dstar -f 'a M b'
    will now work and call ltl2dstar on the equivalent formula
    'b U (a & b)' instead.  The operators that can be listed between
    brackets are the same as those of ltlfilt --unabbreviate option.

  * ltlcross learned to show some counterexamples when diagnosing
    failures of cross-comparison checks against random state spaces.
246

247
248
  * autfilt learned to filter automata by count of SCCs (--sccs=RANGE)
    or by type of SCCs (--accepting-sccs=RANGE,
249
250
251
    --rejecting-sccs=RANGE, trivial-sccs=RANGE, --terminal-sccs=RANGE,
    --weak-sccs=RANGE, --inherently-weak-sccs=RANGE).

252
  * autfilt learned --remove-unused-ap to remove atomic propositions
253
254
    that are declared in the input automaton, but not actually used.
    This of course makes sense only for input/output formats that
255
    declare atomic propositions (HOA & DSTAR).
256

257
  * autfilt learned two options to filter automata by count of used or
258
259
260
261
    unused atomic propositions: --used-ap=RANGE --unused-ap=RANGE.
    These differ from --ap=RANGE that only consider *declared* atomic
    propositions, regardless of whether they are actually used.

262
263
  * autfilt learned to filter automata by count of nondeterministsic
    states with --nondet-states=RANGE.
264

265
  * autfilt learned to filter automata representing stutter-invariant
266
267
    properties with --is-stutter-invariant.

268
  * autfilt learned two new options to highlight non-determinism:
269
    --highlight-nondet-states=NUM and --highlight-nondet-states=NUM
270
271
    where NUM is a color number.  Additionally --highlight-nondet=NUM is
    a shorthand for using the two.
272

273
  * autfilt learned to highlight a run matching a given word using the
274
275
276
    --highlight-word=[NUM,]WORD option.  However currently this only
    work on automata with Fin-less acceptance.

277
278
279
  * autfilt learned two options --generalized-rabin and
    --generalized-streett to convert the acceptance conditions.

280
  * genltl learned three new families: --dac-patterns=1..45,
281
282
283
    --eh-patterns=1..12, and --sb-patterns=1..27.  Unlike other options
    these do not output scalable patterns, but simply a list of formulas
    appearing in these three papers: Dwyer et al (FMSP'98), Etessami &
284
    Holzmann (Concur'00), Somenzi & Bloem (CAV'00).
285

286
287
  * genltl learned two options, --positive and --negative, to control
    wether formulas should be output after negation or not (or both).
288

289
290
291
292
293
294
295
296
297
298
299
300
301
  * The formater used by --format (for ltlfilt, ltlgrind, genltl,
    randltl) or --stats (for autfilt, dstar2tgba, ltl2tgba, ltldo,
    randaut) learned to recognize double-quoted fields and double the
    double-quotes output inbetween as expected from RFC4180-compliant
    CSV files.  For instance
      ltl2tgba -f 'a U "b+c"' --stats='"%f",%s'
    will output
      "a U ""b+c""",2

  * The --csv-escape option of genltl, ltlfilt, ltlgrind, and randltl
    is now deprecated.  The option is still here, but hidden and
    undocumented.

302
303
  * The --stats option of autfilt, dstar2tgba, ltl2tgba, ltldo,
    randaut learned to display the output (or input if that makes
304
    sense) automaton as a HOA one-liner using %h (or %H), helping to
305
306
    create CSV files contained automata.

307
308
309
310
  * autfilt and dstar2tgba learned to read automata from columns in
    CSV files, specified using the same filename/COLUMN syntax used by
    tools reading formulas.

311
312
313
  * Arguments passed to -x (in ltl2tgba, ltl2tgta, autfilt, dstar2tgba)
    that are not used are now reported as they might be typos.
    This ocurred a couple of times in our test-suite.  A similar
314
    check is done for the arguments of autfilt --sat-minimize=...
315

316
317
318
319
320
321
322
323
324
  Library:

  * The print_hoa() function will now output version 1.1 of the HOA
    format when passed the "1.1" option (i.e., use -H1.1 from any
    command-line tool).  As far as Spot is concerned, this allows
    negated properties to be expressed.  Version 1 of the HOA format
    is still the default, but we plan to default to version 1.1 in the
    future.

325
326
327
328
329
330
331
  * The "highlight-states" and "highlight-edges" named properties,
    which were introduced in 1.99.8, will now be output using
    "spot.highlight.edges:" and "spot.highlight.states:" headers if
    version 1.1 of the HOA format is selected.  The automaton parser
    was secretly able of reading that since 1.99.8, but that is now
    documented at https://spot.lrde.epita.fr/hoa.html#extensions

332
333
334
  * highlight_nondet_states() and highlight_nondet_edges() are
    new functions that define the above two named properties.

335
  * is_deterministic(), is_terminal(), is_weak(), and
336
337
338
    is_inherently_weak(), count_nondet_states(),
    highlight_nondet_edges(), highlight_nondet_states() will update
    the corresponding properties of the automaton as a side-effect of
339
    their check.
340

341
342
343
344
345
346
  * the sbacc() function, used by "ltl2tgba -S" and "autfilt -S" to
    convert automata to state-based acceptance, learned some tricks
    (using SCCs, pulling accepting marks common to all outgoing edges,
    and pushing acceptance marks common to all incoming edges) to
    reduce the number of additional states needed.

347
348
349
350
  * to_generalized_rabin() and to_generalized_streett() are two new
    functions that convert the acceptance condition as requested
    without changing the transition structure.

351
352
353
  * language_containment_checker now has default values for all
    parameters of its constructor.

354
355
356
357
  * spot::twa_run has a new method, project(), that can be used to
    project a run found in a product onto one of the original operand.
    This is for instance used by autfilt --highlight-word.

Alexandre Duret-Lutz's avatar