Commit graph

394 commits

Author SHA1 Message Date
Alexandre Duret-Lutz
948f99bc4e complement: add a complement() function
* spot/twaalgos/complement.cc,
spot/twaalgos/complement.hh (complement): New function.
* bin/autfilt.cc, spot/twa/twa.cc, spot/twaalgos/contains.cc,
spot/twaalgos/powerset.cc, spot/twaalgos/stutter.cc: Use it.
* tests/core/complement.test: Adjust.
* NEWS: Mention it.
2019-04-07 15:48:06 +02:00
Alexandre Duret-Lutz
4bb4aeb372 simulation: fix commit 8959eabad
* spot/twaalgos/simulation.cc: Restrict common_in marks to current SCC
when pushing them, otherwise weak automata might become inherently
weak.
* tests/core/sim3.test: Add test case.
2019-04-07 15:27:55 +02:00
Alexandre Duret-Lutz
628364909d dot: add option 'g'
* spot/twaalgos/dot.cc: Implement support for hidding labels.
* tests/core/readsave.test: Test it.
* bin/common_aoutput.cc: Add --help text.
* NEWS: Mention it.
2019-03-31 22:21:24 +02:00
Alexandre Duret-Lutz
01edf4f8e1 minimize_obligation: complement very weak automata if needed
Fixes #379.

* spot/twaalgos/minimize.cc: Here.
* tests/core/optba.test: Add test case provided by Rüdiger Ehlers.
* NEWS: Mention the improvement.
2019-03-22 22:20:00 +01:00
Alexandre Duret-Lutz
55c50c65c8 autfilt: add support for --highlight-accepting-run
Fixes #381.

* bin/autfilt.cc: Here.
* tests/core/highlightstate.test: Test it.
* NEWS: Mention it.
2019-03-20 21:47:32 +01:00
Alexandre Duret-Lutz
7af47c7db5 bin: fix handling of \r\n with %>
Fix issue #380.

* bin/common_finput.cc: Erase a trailing \r.
* tests/core/ltl2tgba2.test: Test it.
* NEWS: Mention the fix.
2019-03-20 21:31:11 +01:00
Alexandre Duret-Lutz
8959eabad6 simulation: try pulling marks instead of pushing them for sbacc input
Suggested by František Blahoudek.

* spot/twaalgos/simulation.cc: When doing forward simulation with
state-based acceptance as input but transition-based acceptance as
output, pull acceptance marks on incoming edges instead of pushing
them to outgoing edges.
* tests/core/dra2dba.test, tests/core/exclusive-tgba.test,
tests/core/ltlcrossce.test, tests/core/satmin3.test,
tests/core/sim3.test, tests/python/satmin.ipynb: Adjust test cases.
* NEWS: Mention the change.
2019-02-27 10:46:20 +01:00
Alexandre Duret-Lutz
699f21b9af product_susp: fix product of state-based automata
Reported by Simon Jantsch.

* spot/twaalgos/product.cc: Here.
* tests/core/unambig2.test: New file, testing this plus
the previous patch.
* tests/Makefile.am: Add unambig2.test.
* NEWS: Mention the bug.
2019-02-02 14:41:22 +01:00
Alexandre Duret-Lutz
ea9d894d01 parsetl: better handling of MS-DOS line endings
* spot/parsetl/scantl.ll: Ignore \r.
* tests/core/lbt.test: Add a test.
* NEWS: Mention the issue.
2019-02-02 11:39:03 +01:00
Alexandre Duret-Lutz
77f3ba9478 translate: fix stutter-invariant flag on leading Xs
Issue discovered by Mikuláš Klokočka and reported by František
Blahoudek.

* spot/twaalgos/translate.cc: Reset the stutter-invariant flag
when adding extra transitions for leading Xs.
* tests/core/stutter-tgba.test: New test case.
* NEWS: Mention the bug.
2018-12-07 15:53:54 +01:00
Alexandre Duret-Lutz
29e08a1afb introduce count_univbranch_states() and count_univbranch_edges()
Fixes #368, suggested by František Blahoudek.

* spot/twaalgos/isdet.cc, spot/twaalgos/isdet.hh
(count_univbranch_states(), count_univbranch_edges()): New functions.
* bin/common_aoutput.cc, bin/common_aoutput.hh: Add %u and variants.
* NEWS: Mention these.
* tests/core/alternating.test: Test them.
2018-11-08 10:33:49 +01:00
Alexandre Duret-Lutz
d94efe9fe1 implement is_liveness() and is_liveness_automaton()
* spot/twaalgos/strength.cc, spot/twaalgos/strength.hh,
spot/tl/hierarchy.cc, spot/tl/hierarchy.hh: Here.
* bin/ltlfilt.cc (--liveness): New filter.
* NEWS: Mention those.
* tests/core/ltlfilt.test, tests/python/ltlsimple.py: Add test cases.
2018-10-15 21:37:31 +02:00
Alexandre Duret-Lutz
d2316b1428 fix ltlfilt --accept-word and --reject-word
* NEWS: Mention the issue.
* bin/ltlfilt.cc: Fix test.
* tests/core/acc_word.test: Test this.
2018-10-15 21:17:18 +02:00
Alexandre Duret-Lutz
58c1a968c7 option --low should disable gf-guarantee
Fixes #367.

* spot/twaalgos/translate.cc, spot/twaalgos/translate.hh: Fix it.
* NEWS: Mention the change.
* tests/core/ltl2tgba2.test: Test this.
2018-10-12 14:08:54 +02:00
Alexandre Duret-Lutz
3c86f034fc Büchi translation should not go through fg_safety_to_dca_maybe()
Fixes #366, reported by Simon Jantsch.

* spot/twaalgos/translate.cc: type_&Generic will also match if
type_==BA... use type_==Generic instead.
* tests/core/unambig.test: Add a test corresponding to Simon's report.
* NEWS: Describe the bug.
2018-10-12 14:08:54 +02:00
Alexandre Duret-Lutz
82a152c38a unabbreviate: add new rules based on eventual/universal arguments
Based on a report by Simon Jantsch.  Fixes #362.

* NEWS, doc/tl/tl.tex: Mention the new rules.
* spot/tl/unabbrev.cc: Implement them.
* tests/core/unabbrevwm.test: Test them.
* tests/python/randltl.ipynb: Adjust.
2018-10-01 17:53:05 +02:00
Alexandre Duret-Lutz
eae05119e5 exclusive_ap::constrain does not improve determism
Fixes #363.

* spot/tl/exclusive.cc: Fix the prop_copy() call.
* tests/core/exclusive-tgba.test: Test it.
* NEWS: Mention the issue.
2018-09-26 11:35:19 +02:00
Alexandre Duret-Lutz
250e121a60 print_dot: add xlabel to colored states if too many colors in use
Based on a report from Andreas Tollkötter.

* spot/twaalgos/dot.cc (highlight_states_show_num_): New option,
turned on implicitly when more than 8 colors are used.
* tests/core/highlightstate.test: Test it.
* NEWS: Mention it.
* THANKS: Add Andreas.
2018-09-25 14:04:11 +02:00
Alexandre Duret-Lutz
389ef16b1b gcc-snapshot warnings
* spot/kripke/kripkegraph.hh, spot/priv/bddalloc.hh,
spot/priv/freelist.hh, spot/priv/satcommon.hh, spot/ta/taexplicit.cc
spot/twa/bdddict.cc, spot/twa/twagraph.hh,
spot/twaalgos/alternation.hh, spot/twaalgos/dtwasat.cc,
spot/twaalgos/ltl2taa.cc, spot/twaalgos/stutter.cc,
tests/core/ngraph.cc: Add default constructors, copy constructors, or
remove useless destructors.
2018-08-11 17:33:53 +02:00
Maximilien Colange
8d5d453efa ltlsynt: new algorithm, based on LAR
* bin/ltlsynt.cc: here
* tests/core/ltlsynt.test: test it
* NEWS: document it
2018-07-27 15:34:39 +02:00
Maximilien Colange
bd75ab5b39 ltlsynt: rework synthesis algorithms
ltlsynt now offers two algorithms: one where splitting occurs before
determinization (the historical one) and one where determinization
occurs before splitting.

* bin/ltlsynt.cc: here
* tests/core/ltlsynt.test: test it and refactor test file
* NEWS: document it
* spot/misc/game.hh, spot/misc/game.cc: remove Calude's algorithm
2018-07-27 14:22:11 +02:00
Alexandre Duret-Lutz
3303b86a89 ltl-split: translate any "safety" with "rest"
* tests/core/ltl2tgba2.test: Add a test-case reported by Maximilien.
* spot/twaalgos/translate.cc: Translate any "safety" formula with
"rest".
* tests/python/highlighting.ipynb: Adjust.
2018-07-26 18:17:13 +02:00
Alexandre Duret-Lutz
4b8910d3f9 ltlfilt: introduce --suspendable
* bin/ltlfilt.cc: Add the option.
* tests/core/ltlfilt.test: Use it.
* NEWS: Mention it.
2018-07-25 11:18:26 +02:00
Alexandre Duret-Lutz
e7aa334a71 tl: add support for X[n], F[n:m] and G[n:m]
* NEWS, doc/tl/tl.tex, doc/tl/tl.bib: Document these new operators.
* spot/parsetl/parsetl.yy, spot/parsetl/scantl.ll: Parse those.
* spot/tl/formula.cc, spot/tl/formula.hh: Add constructors.
* spot/gen/formulas.cc: Use it.
* tests/core/sugar.test: New file.
* tests/Makefile.am: Add it.
2018-07-06 21:53:10 +02:00
Alexandre Duret-Lutz
e48c6c40d0 ltl-split: deal with suspendable formulas that are false
Fixes #358.

* spot/twaalgos/translate.cc: Fix the assert().
* tests/core/ltl2tgba2.test: Add a test case.
2018-06-30 20:39:30 +02:00
Alexandre Duret-Lutz
c1b7497f84 gfguarantee: fix selection of moved init state
Fixes #357.

* spot/twaalgos/gfguarantee.cc: Decide that a moved init state is to
close from the terminal state *before* actually modifying the
automaton.
* tests/core/ltl2tgba2.test: Add a test.
2018-06-30 16:44:59 +02:00
Alexandre Duret-Lutz
f5f5daec9a translate: enable a restricted form of ltl-split for TGBA/BA
Fixes #267

* spot/twaalgos/gfguarantee.cc: Fix a typo when comparing automata
sizes.
* spot/twaalgos/translate.cc, spot/twaalgos/translate.hh: Use
ltl-split even for BA/TGBA, but only of conjunctions with GF(..)
in those cases.
* tests/core/ltl2tgba2.test: Adjust and add the example of #267.
* tests/core/degenid.test, tests/core/parity2.test,
tests/core/stutter-tgba.test, tests/python/automata.ipynb,
tests/python/highlighting.ipynb, tests/python/stutter-inv.ipynb,
bin/spot-x.cc: Adjust.
2018-06-28 23:02:26 +02:00
Alexandre Duret-Lutz
0a8c6479b7 translate: extract obligations terms when translating LTL to Parity
* spot/twaalgos/translate.cc: Here.
* NEWS: Mention the change.
* tests/core/genltl.test: Add parity automata sizes for a set of
formulas.
* tests/core/parity2.test: Add another formula to the tests.
2018-06-25 20:40:29 +02:00
Alexandre Duret-Lutz
a325de8678 postproc: simplify the acceptance condition
* spot/twaalgos/postproc.cc: Here.
* spot/twaalgos/cobuchi.cc, spot/twaalgos/totgba.cc: Fix some bug
uncovered by the new simplified automata.
* tests/core/satmin2.test, tests/core/sccdot.test,
tests/core/sim3.test, tests/python/decompose.ipynb,
tests/python/satmin.ipynb: Update expected results.
* NEWS: Mention the simplification and the bug.
2018-06-22 17:17:45 +02:00
Alexandre Duret-Lutz
621fb818e3 improve translation of ms-phi-h=2..3
* spot/twaalgos/gfguarantee.cc: Rework the history computation to keep
an overapproximation of the history, and a longer one.  Also replay
the history even if there is no initial trivial SCC.  This helps with
translating FG(!a|XXXb) where we need to keep the history of a, but we
were previously unable to do so because some state had both "a" and
"ab" as input.
* spot/twaalgos/translate.cc: Optimize the product of suspendable
automata by removing useless trivial SCCs.
* tests/core/genltl.test, tests/core/satmin.test, NEWS: Adjust
expected results.
2018-06-21 10:02:13 +02:00
Maximilien Colange
c9131aee72 add a pool allocator for STL containers
* spot/priv/allocator.hh, spot/priv/Makefile.am: add a STL-compliant
  allocator based on spot::fixed_size_pool
* spot/misc/fixpool.hh, spot/misc/fixpool.cc, spot/misc/Makefile.am:
  refactor the existing spot::fixed_size_pool
* spot/ltsmin/ltsmin.cc, spot/twa/twaproduct.cc: reflect changes in the
  interface of spot::fixed_size_pool
* tests/core/mempool.cc: test the new allocator
2018-06-20 14:26:45 +02:00
Maximilien Colange
3fe74f1cb9 make valgrind understand our memory pools
Annotate pools with valgrind macros so that it detects errors in pool
usage. Typically, we wish valgrind to detect a leak when the user fails
to call proper deallocation function.

* spot/misc/fixpool.hh, spot/misc/mspool.hh: here
* configure.ac: ensure that valgrind header exists
* tests/Makefile.am, tests/core/mempool.cc, tests/core/mempool.test,
  tests/core/.gitignore: add tests to ensure valgrind accurately detects
  leaks
2018-06-20 14:26:31 +02:00
Alexandre Duret-Lutz
4815a361de translate: add ltl-split option
* spot/twaalgos/translate.cc, spot/twaalgos/translate.hh: Build
automata with generic acceptance by doing product of automata for
smaller subformulas.
* bin/spot-x.cc: Mention ltl-split.
* NEWS: Mention the change, and show some results.
* tests/core/genltl.test, tests/python/_product_susp.ipynb,
tests/python/highlighting.ipynb: Adjust test cases.
* doc/org/ltl2tgba.org: Update.
* tests/core/gragsa.test: Add another formula to cover more
code.
2018-06-20 11:38:59 +02:00
Maximilien Colange
1183a935c7 fix a bug in aiger printer
* spot/twaalgos/aiger.cc: here
* tests/core/ltlsynt.test: add a non-regression test
2018-06-15 11:08:27 +02:00
Alexandre Duret-Lutz
fbc372e292 scc_filter: add quick test for very-weak
Related to issue #351.

* spot/twaalgos/sccfilter.cc: When handling weak automata, we know
they are very-weak if the SCC count is equal to the number of states.
* tests/core/dca2.test, tests/core/monitor.test,
tests/core/parity2.test, tests/core/randomize.test,
tests/core/readsave.test, tests/core/remfin.test,
tests/core/sccsimpl.test, tests/core/wdba2.test,
tests/python/dualize.py, tests/python/remfin.py: Adjust output.
2018-06-11 21:42:21 +02:00
Alexandre Duret-Lutz
95d732e331 specialize scc_filter for inherently_weak automata
Part of issue #351.

* spot/twaalgos/sccfilter.cc, spot/twaalgos/sccfilter.hh: Specialize
for inherently-weak automata.
* spot/twaalgos/postproc.cc: Simplify.
* tests/core/dca2.test, tests/core/parity2.test,
tests/core/prodor.test, tests/core/randomize.test,
tests/python/automata.ipynb, tests/python/highlighting.ipynb,
tests/python/product.ipynb, tests/python/remfin.py,
tests/python/stutter-inv.ipynb: Adjust.
* NEWS: Mention it.
2018-06-11 15:01:49 +02:00
Alexandre Duret-Lutz
1341c656be genltl: add --gf-equiv-xn, --gf-implies-xn
* spot/gen/formulas.cc, spot/gen/formulas.hh: Here.
* bin/genltl.cc: Add options.
* tests/core/genltl.test: Test them.
* NEWS: Mention them.
2018-06-08 15:51:11 +02:00
Alexandre Duret-Lutz
7e9325866f gf_guarantee_to_ba: save states using histories
This improves gf_guarantee_to_ba() on formulas GF(φ) where the
automaton for F(φ) as several leading transiant SCCs.  E.g.,
GF(a <-> XXXa) where we know get results that are as good as
those of delag without loosing on the cases where delag's technique
would actually produce two big automata.

* spot/twaalgos/gfguarantee.cc: Implement this.
* spot/twaalgos/gfguarantee.hh, NEWS: Document it.
* tests/core/ltl2tgba2.test, tests/core/ltl3ba.test: Add test cases.
2018-06-08 15:32:52 +02:00
Alexandre Duret-Lutz
ca1c67a73d simplifier: add two new rules
Fixes #354.

* spot/tl/simplify.cc: Implement the rules.
* doc/tl/tl.tex, NEWS: Document them.
* tests/core/reduccmp.test: Add tests.
* tests/core/det.test, tests/core/satmin.test: Adjust.
2018-06-05 08:48:40 +02:00
Alexandre Duret-Lutz
c535871ffd genltl: --ms-example now has two arguments
* bin/genltl.cc, spot/gen/formulas.cc, tests/core/genltl.test: Adjust.
* NEWS: Mention it.
2018-06-05 08:48:40 +02:00
Alexandre Duret-Lutz
2e50f9e986 autfilt: implement --has-univ-branching and --has-exist-branching
Fixes #352.

* bin/autfilt.cc: Add the options.
* tests/core/alternating.test: Test them.
* NEWS: Mention them.
2018-06-05 08:48:40 +02:00
Alexandre Duret-Lutz
939f63eec9 genltl: add support for --sejk-f=n,m
Together with the previous patch, this Fixes #353.

Implementing this required to extend our interface two support
two-parameter patterns.

* spot/gen/formulas.cc, spot/gen/formulas.hh: Implement it.
* bin/genltl.cc: Add --sejk-f.
* bin/common_output.cc, bin/common_output.hh: Adjust to handle
"line numbers" that are not integers (e.g., "3,2"), since those
are used to display pattern parameters.
* bin/ltlfilt.cc: Adjust.
* python/spot/gen.i: Add support for two-parameters patterns.
* tests/core/genltl.test, tests/python/gen.ipynb: Augment.
* NEWS: Mention it.
2018-06-05 08:48:40 +02:00
Alexandre Duret-Lutz
c76df95c69 genltl: three new families --sejk-{j,k,patterns}
These correspond to the first three blocks of table 1 in S. Sickert,
J. Esparza, S. Jaax, and J. Křetínský: Limit-Deterministic Büchi
Automata for Linear Temporal Logic.  CAV'16.  LNCS 9780.

For #353.

* spot/gen/formulas.cc, spot/gen/formulas.hh, bin/genltl.cc: Implement
the new families.
* tests/core/genltl.test: Test it.
* bin/man/genltl.x, NEWS: Document it.
2018-06-03 20:20:59 +02:00
Alexandre Duret-Lutz
e87d308eba improve alternation removal to match G&O construction
When dealternating the VWAA for GFa, our result had two states that
could not be fused by simulation because of unmatched acceptance mark.
With this change, the result can be simplified.

* spot/twaalgos/alternation.cc: Here.
* tests/core/alternating.test, tests/python/alternation.ipynb: Update
test case.
* NEWS: Mention it.
2018-06-01 10:59:37 +02:00
Alexandre Duret-Lutz
6d9d35c985 acc: turn some assertions into exceptions
* spot/misc/bitset.cc, spot/misc/bitset.hh (set, clear):
Turn asserts into exceptions.
* spot/twa/acc.hh (mark_t): As a consequence, the
constructor is not noexcept anymore.
* tests/core/acc.cc, tests/python/except.py: More tests.
2018-05-26 09:44:18 +02:00
Alexandre Duret-Lutz
b12eb0508f fix and check shifting issue
The exception raised by << and >> when shifting mark_t by too many
bits are only enabled in SPOT_DEBUG, as those operations are quite
low-level.  However we were always testing them, and although we
wanted them to be active in Python, it was not always the case.

* spot/twa/acc.hh: introduce max_accsets() as
a static constexpr method, so we can see it in Python.
* spot/misc/bitset.hh: Fix preprocessing directive
so the check is actually enabled when compiling the Python
bindings.
* bin/autcross.cc, bin/autfilt.cc, bin/ltlcross.cc: Use max_accsets().
* tests/core/acc.cc: Comment out the shifting exception when
SPOT_DEBUG is unset.
* tests/python/except.py: Make sure the exception is always raised in
Python.
2018-05-25 16:08:00 +02:00
Maximilien Colange
a9293f329e fix warnings when compiling without assertions
* spot/twa/acc.hh, spot/twaalgos/alternation.cc,
  spot/twaalgos/determinize.cc, spot/twaalgos/ndfs_result.hxx,
  spot/twaalgos/tau03.cc, spot/ltsmin/ltsmin.cc, tests/core/parity.cc:
  here
2018-05-25 14:41:18 +02:00
Maximilien Colange
5a819e0c93 twa_graph: add a method to merge states with same outgoing edges
* spot/twa/twagraph.hh, spot/twa/twagraph.cc: here
* NEWS: document it
* tests/core/twagraph.cc, tests/core/tgbagraph.test: test it
2018-05-25 12:09:04 +02:00
Alexandre Duret-Lutz
2e165f188d rename SPOT_NB_ACC to SPOT_MAX_ACCSETS
* NEWS, bin/autcross.cc, bin/autfilt.cc, bin/ltlcross.cc,
configure.ac, spot/parseaut/parseaut.yy, spot/twa/acc.cc,
spot/twa/acc.hh, tests/core/acc.cc, .gitlab-ci.yml: Here.
2018-05-24 22:18:42 +02:00
Alexandre Duret-Lutz
c87c13db67 autfilt: better handling of chain of products with -B
Fixes #348, reported by Jeroen Meijer.

* bin/autfilt.cc: If -B is used with many --product,
degeneralize intermediate products as needed.
* NEWS: Mention the change.
* tests/core/prodchain.test: New file.
* tests/Makefile.am: Add it.
* spot/twa/acc.cc, spot/twa/acc.hh: Fix reporting of
overflow.
* tests/core/acc.cc: Adjust.
2018-05-24 19:23:48 +02:00