Commit graph

1195 commits

Author SHA1 Message Date
Alexandre Duret-Lutz
4d2262600e formula: is_literal should be const
Reported by Ayrat Khalimov.

* spot/tl/formula.hh (is_literal): Mark as const.
2021-12-02 17:42:59 +01:00
Alexandre Duret-Lutz
8ffd06e9a6 catch overflow in SVA delays during parsing
* spot/parsetl/scantl.ll: Diagnose delays (##n) larger than
unbounded().  Remove all checks for delays with 1 or 2 characters.
* tests/core/parseerr.test: Add a test case.
* NEWS: Mention this fix.
2021-12-02 14:36:23 +01:00
Jérôme Dubois
81f146f648 build: fix multiple Clang13 warnings
* spot/kripke/kripkegraph.hh, spot/misc/hash.hh, spot/twa/taatgba.cc,
  spot/twa/twagraph.hh, tests/core/ngraph.cc: Replace subtraction of
  pointeur minus nullptr by an explicit cast to size_t.
* spot/twa/acc.hh: Add explicit default copy assignment operator for
  rs_pair.
2021-11-22 10:29:15 +01:00
Alexandre Duret-Lutz
2a408bbed1 sched_getcpu() and pthread_setaffinity_np() are non-portable
Reported by Yuri Victorovich, on FreeBSD.

* configure.ac: Test for them.
* spot/mc/mc_instanciator.hh: Only use them if they are present.
* NEWS: Mention the fix.
2021-11-22 10:24:52 +01:00
Alexandre Duret-Lutz
5f49209caf twagraph: remove bddfalse edges in purge_dead_states
* spot/twa/twagraph.cc (purge_dead_states): Be bddfalse-aware!
* spot/twa/twagraph.hh, NEWS: Document this.
* tests/python/alternating.py, tests/python/twagraph.py: Add some
test cases.
2021-11-19 22:13:20 +01:00
Alexandre Duret-Lutz
58b349d3ca sbacc: define original-states
* spot/twaalgos/sbacc.cc (sbacc): Define the original-states
property on the created automaton.
* spot/twaalgos/sbacc.hh: Improve documentation.
* tests/python/sbacc.py: Update test cases.
2021-11-18 22:03:47 +01:00
Alexandre Duret-Lutz
afdd38277d formula: catch min/max overflows at construction
For issue #485.

* spot/tl/formula.cc, spot/tl/formula.hh: Catch min/max overflow
when the operators are constructed.  Also disable travial
simplification rules that would create such overflow.
For instance x[*200][*2] will not become x[*400] anymore.
* python/spot/impl.i: Catch std::overflow_error.
* tests/core/equals.test, tests/python/except.py: Add test cases.
2021-11-18 22:03:23 +01:00
Alexandre Duret-Lutz
59b361babd fix some unused variable warning in mingw
* spot/twaalgos/mealy_machine.cc (is_split_mealy_specialization): Hide
spl in NDEBUG.
* spot/twaalgos/synthesis.cc (apply_strategy): sp is not always used.
2021-11-18 13:24:53 +01:00
Alexandre Duret-Lutz
81375d7a93 tl: diagnose repetitions that do not fit in uint_8
For issue #485.

* spot/parsetl/parsetl.yy: Add a diagnostic.
* tests/core/parseerr.test: Test it.
2021-11-18 13:24:53 +01:00
Alexandre Duret-Lutz
bc063b13f3 * spot/bricks/brick-hash: Add missing include. 2021-11-16 09:47:42 +01:00
Alexandre Duret-Lutz
1443d45ac7 synthesis: minor typos
* spot/twaalgos/game.cc, spot/twaalgos/mealy_machine.cc,
spot/twaalgos/synthesis.cc, spot/twaalgos/synthesis.hh: Here.
2021-11-12 22:44:08 +01:00
Alexandre Duret-Lutz
6555af1f44 python: fix support for std::vector<const_twa_graph_ptr>
* spot/twaalgos/aiger.hh, spot/twaalgos/aiger.cc: Fix prototypes, as
well as several error messages.
* python/spot/impl.i: Implement an ad-hoc conversion for
std::vector<const_twa_graph_ptr>.
* tests/python/synthesis.ipynb: Use it to simplify the example.
Adjust some comments.
2021-11-12 22:38:37 +01:00
philipp
98ebbea17e Renaming and clean up
"Strategy" was used for mealy machines and game strategies a like.
Introduced the notion of mealy machine in three different flavors:
mealy machine: twa_graph with synthesis-outputs
separated mealy machine: mealy machine and all transitions
have conditions of the form (bdd over inputs)&(bdd over outputs)
split mealy machine: mealy machine that alternates between
env and player states. Needs state-players

* bin/ltlsynt.cc: renaming
* python/spot/impl.i: Add vector for const_twa_graph_ptr
* spot/twaalgos/aiger.cc,
spot/twaalgos/aiger.hh: Adapting functions
* spot/twaalgos/mealy_machine.cc,
spot/twaalgos/mealy_machine.hh: Add test functions and
propagate properties correctly. Adjust for names
* spot/twaalgos/synthesis.cc,
spot/twaalgos/synthesis.hh: Removing unnecessary functions
and adapt to new names
* tests/python/aiger.py,
tests/python/_mealy.ipynb,
tests/python/mealy.py,
tests/python/synthesis.ipynb: Adjust
2021-11-11 00:38:14 +01:00
Alexandre Duret-Lutz
75b89db5ac zlktree: fix colored output of acd_transform_sbacc()
* spot/twaalgos/zlktree.cc (acd_transform_sbacc): Fix the
acceptance condition when colored is true.
* tests/python/zlktree.py: Add test case.
2021-11-10 15:51:13 +01:00
Alexandre Duret-Lutz
3c5928d216 tl: fix AST rendering of Star/FStar nodes
* spot/tl/dot.cc: Show the min/max argument for Star/FStar nodes.
* tests/python/formulas.ipynb: Adjust test.
2021-11-05 12:17:32 +01:00
Alexandre Duret-Lutz
9097eca81d * spot/twaalgos/ltl2tgba_fm.cc: Update some comments. 2021-11-05 12:17:32 +01:00
Florian Renkin
97046ea263 Synthesis decomposition: Add a new rewriting and tests
* spot/twaalgos/synthesis.cc: add a new rewriting rule
* tests/core/ltlsynt.test: test rewritings
2021-11-04 15:10:07 +01:00
Alexandre Duret-Lutz
553381bd6e aiger: improve parse errors and test them
* spot/twaalgos/aiger.cc, spot/twaalgos/aiger.hh (parse_aag_impl_): Do
not display source filename in user facing errors.  Use GNU-style
"file:line: " prefixes for locations.  Adjust all sscanf() calls
to check for ignored trailing data.  Add some missing checks about the
order of input and output names, checks that output names do no
intersect input names.  Fix incorrect line number for unexpected
input variable number, and avoid using std::stoi as that throws
an std::invalid_argument on parse error.
* tests/python/aiger.py: Add test cases for each error message.
2021-11-03 23:13:28 +01:00
Florian Renkin
aff04c2207 Aiger parser: correct input and output names
* spot/twaalgos/aiger.cc: here.
* tests/python/aiger.py: add tests
* tests/python/synthesis.ipynb: correct notebook
2021-11-03 13:10:27 +01:00
Florian Renkin
8aa9da7fc8 Synthesis: rewrite bypass
* spot/twaalgos/synthesis.cc: here
* spot/twaalgos/synthesis.hh: introduce a realizability_code
* bin/ltlsynt.cc, spot/twaalgos/aiger.cc: use this enum
* tests/core/ltlsynt.test: update tests
2021-11-02 10:22:40 +01:00
Alexandre Duret-Lutz
3be79ea476 print_dot: improve aiger rendering
* spot/twaalgos/dot.cc: Improve the aiger printer by using a more
traditional dot syntax, indenting the output, adding some hard-coded
colors, fixing a bug in the negation of latch inputs, and rotating the
triangles for horizontal output.
* tests/python/synthesis.ipynb: Adjust expected output, and add
an example of horizontal layout.
2021-10-29 23:21:54 +02:00
Alexandre Duret-Lutz
753d572e4d print_dot: improve the rendering of Mealy machines
* spot/twaalgos/dot.cc (print_dot): Add some detection of Mealy
machines, and some code to render its I/O in a <table>.
* tests/python/synthesis.ipynb: Adjust expected output.
* tests/python/_mealy.ipynb: New file.
* tests/Makefile.am: Add python/_mealy.ipynb.
* NEWS: Mention the new feature.
2021-10-29 16:45:35 +02:00
Alexandre Duret-Lutz
6464324a2c ltlsynt: fix a bug in split_2step_fast_here
* spot/twaalgos/synthesis.cc (split_2step_fast_here::get_ps): Fix the
state number recorded in the map.
* tests/core/ltlsynt.test: Add test case.
2021-10-24 22:34:06 +02:00
Alexandre Duret-Lutz
1df5f0e2c7 synthesis: simplify split_2step_fast_here
* spot/twaalgos/synthesis.cc (split_2step_fast_here): Do not use
a temporary vector to iterate over the original edges.
2021-10-23 01:23:24 +02:00
Alexandre Duret-Lutz
c43712682f synthesis: rename create_game() to ltl_to_game()
* bin/ltlsynt.cc, spot/twaalgos/aiger.hh, spot/twaalgos/synthesis.cc,
spot/twaalgos/synthesis.hh, tests/python/synthesis.ipynb,
tests/python/synthesis.py: Here.
2021-10-18 09:17:40 +02:00
Alexandre Duret-Lutz
b9a39c5576 aiger: fix forcing of input properties
* spot/twaalgos/aiger.cc: Here.
* tests/python/synthesis.ipynb: Adjust.
2021-10-07 14:08:29 +02:00
Alexandre Duret-Lutz
9b3956f892 zlktree: fix handling of automata with false acceptance
Reported by Florian.

* spot/twaalgos/zlktree.cc (zielonka_tree_transform, acd_transform):
Here.
* tests/python/zlktree.py: Add test cases.
2021-10-07 11:11:49 +02:00
Alexandre Duret-Lutz
7bc2c31043 game: teach solve_game to use solve_safety_game
* spot/twaalgos/game.cc, spot/twaalgos/game.hh: Here.
* doc/org/tut40.org: Adjust example.
2021-10-07 09:25:01 +02:00
Alexandre Duret-Lutz
bdd20bd1a1 rename game_info to synthesis_info; move it with the synthesis code
* spot/twaalgos/game.cc, spot/twaalgos/game.hh (game_info): Move...
* spot/twaalgos/synthesis.cc,
spot/twaalgos/synthesis.hh (synthesis_info): ... here, because this
structure contains only synthesis stuff.  Also rename "solver" to
"algo" to match the ltlsynt option.
(solve_game): Move the two argument version of this function here,
since that's the only game-related generic function that use
synthesis_info.
* bin/ltlsynt.cc, tests/core/ltlsynt.test, tests/python/games.ipynb,
tests/python/synthesis.py, NEWS: Adjust all uses and mentions.
2021-10-07 09:06:15 +02:00
Alexandre Duret-Lutz
0ac5bbc05d ltlsynt: replace -x minimization-lvl=N by --simplify
* bin/ltlsynt.cc: Implement the new option, and make it default
to bisimulation with output assignment (a.k.a. bwoa).
* NEWS, bin/spot-x.cc, doc/org/ltlsynt.org: Update the documentation.
* spot/twaalgos/game.hh: Make bwoa the default.
* tests/core/ltlsynt.test: Add and adjust test cases.
* tests/python/games.ipynb: Adjust.
2021-10-06 18:00:24 +02:00
Alexandre Duret-Lutz
405f76f0a0 games, synthetis: improve Doxygen
* spot/twaalgos/game.hh, spot/twaalgos/synthesis.hh,
spot/twaalgos/aiger.hh: Declare new Doxygen groups for games and
synthesis.
* doc/spot.bib: Cleanup.
2021-10-03 19:27:08 +02:00
Alexandre Duret-Lutz
17070b6cee aiger: fix some typos and inconsistencies
* spot/twaalgos/aiger.hh: Fix errors in documentation.
* spot/twaalgos/aiger.cc: Adjust text of exception.
2021-10-03 18:33:57 +02:00
Alexandre Duret-Lutz
644342f5d4 simplify: fix some discrepancies between Intel and ARM
* spot/tl/simplify.cc (tl_simplifier_cache::as_bdd): Fix the order in
which as_bdd() is called recursively in binary nodes, do not let the
choice to the compiler.
* tests/core/ltlsynt.test: Adjust expected output.
2021-10-03 00:57:15 +02:00
Alexandre Duret-Lutz
60225fd139 acd: do not recompute identical subtrees
* spot/twaalgos/zlktree.cc, spot/twaalgos/zlktree.hh (acd::build_):
When processing a node identical to a node previously seen, simply
copy the children of that other node, and share its vectors.
2021-10-01 08:48:11 +02:00
Alexandre Duret-Lutz
2c435c6c11 zlktree: simplify heuristic computation
* spot/twaalgos/zlktree.cc: Here.
* spot/twaalgos/zlktree.hh: Add a way to remove an option.
2021-10-01 08:48:11 +02:00
Alexandre Duret-Lutz
ee80849caf dtwasat: various fixes
* spot/twaalgos/dtwasat.cc: Do not return a transition-based automaton
when state-based output is requested.
* tests/python/satmin.ipynb, spot/twaalgos/dtbasat.hh: Fix some typos.
* tests/python/satmin.py: Add test cases.
* NEWS: Mention the bugs.
2021-09-29 16:50:49 +02:00
Alexandre Duret-Lutz
fea0be96c1 acd: add ORDER_HEURISTIC for state-based ACD-transform
* spot/twaalgos/zlktree.cc, spot/twaalgos/zlktree.hh: Add the
acd_options::ORDER_HEURISTIC and use it by default in
acd_transform_sbacc().
* spot/misc/bitvect.hh (bitvect::count, bitvect::add_common): New
methods.
* tests/python/zlktree.ipynb: Adjust examples and discuss this
heuristic.
2021-09-24 22:28:10 +02:00
Alexandre Duret-Lutz
70ede35702 acd: add support for state-based output
* spot/twaalgos/zlktree.hh, spot/twaalgos/zlktree.cc (acd::node_level,
acd::state_step, acd_transform_sbacc): New public functions.
* tests/python/zlktree.ipynb, tests/python/zlktree.py: More tests.
* NEWS: Typo.
2021-09-24 13:38:51 +02:00
Alexandre Duret-Lutz
043a1dc394 acd: fix typeness checks, and add options for those
* spot/twaalgos/zlktree.cc, spot/twaalgos/zlktree.hh: Here.
* tests/python/zlktree.ipynb, tests/python/zlktree.py: Add tests
and examples.
2021-09-24 11:11:53 +02:00
Philipp Schlehuber
406bc8ed17 Remove do_simplify opt from split_2step
Removing this option to guarante that all arenas
are alternating

* spot/twaalgos/synthesis.hh: Here
* spot/twaalgos/synthesis.cc: Here
* spot/twaalgos/mealy_machine.cc: API change
* tests/python/aiger.py: API change
* tests/python/mealy.py: API change
* tests/python/split.py: API change
2021-09-22 12:52:10 +02:00
Alexandre Duret-Lutz
ddda68403f * spot/twa/twagraph.cc: Fixes #478. 2021-09-21 11:20:14 +02:00
Florian Renkin
8296079282 synthesis: aps_of uses a local cache
* spot/twaalgos/synthesis.cc: here.
2021-09-17 17:15:32 +02:00
Alexandre Duret-Lutz
4710577dfe build: fix multiple GCC warnings
These occur when Spot is compiled with --enable-optimizations and
--disable-assert.

* spot/mc/unionfind.cc, spot/twaalgos/mealy_machine.cc,
spot/twaalgos/aiger.cc: Work around warnings about variables that are
only used in assert.
* spot/misc/common.hh [NDEBUG] (SPOT_ASSUME): Do not define
as assert() when it is disabled.
* spot/twaalgos/alternation.cc: Use insert instead of emplace
to work around a spurious possible nullptr dereference.
* spot/twaalgos/ltl2taa.cc, spot/twaalgos/ndfs_result.hxx,
spot/twaalgos/tau03.cc, spot/twaalgos/tau03opt.cc:
Work around spurious possible nullptr dereference.
* spot/twaalgos/sbacc.cc: Work around spurious "maybe uninitialized"
warning.
2021-09-17 17:09:42 +02:00
Philipp Schlehuber
c973fcdf2d Improving handling of unused proposition for aig
By default only propositions appearing in the strategy are
treated. By handing over propositions explicitly one
can force their appearance in the aig circuit.

* spot/twaalgos/aiger.cc: Here
* spot/twaalgos/aiger.hh: New doc
* tests/python/games.ipynb: New test
2021-09-16 14:53:49 +02:00
Florian Renkin
7c1230b484 synthesis: fix decomposition
It is wrong to decompose an implication that is not at the top of
the formula.

* spot/twaalgos/synthesis.cc: don't always split implication
2021-09-16 14:53:49 +02:00
Florian Renkin
ad5203e77a synthesis: Fix segfault when there is no output
* spot/twaalgos/synthesis.cc: here
* tests/python/synthesis.py: create a test
* tests/Makefile.am: add synthesis.py to the tests
2021-09-16 14:53:49 +02:00
Florian Renkin
b9ec16f9c2 Typos
* bin/ltlsynt.cc, spot/twaalgos/game.hh,
spot/twaalgos/synthesis.cc: here
2021-09-16 14:53:48 +02:00
philipp
7d908b9320 ltlsynt rewrite
Introducing the new game interface
to ltlsynt.
ltlsynt now also uses direct strategy deduction
and formula decomposition.

* bin/ltlsynt.cc: Here
* spot/twaalgos/aiger.cc
, spot/twaalgos/aiger.hh: Use strategy_like
* spot/twaalgos/game.hh: Minor adaption
* spot/twaalgos/mealy_machine.cc: Use new interface
* spot/twaalgos/synthesis.cc
, spot/twaalgos/synthesis.hh: Spezialised split
* tests/core/ltlsynt.test
, tests/python/games.ipynb: Adapting
2021-09-16 14:53:48 +02:00
philipp
a5185c2123 Use new minterm enumeration in split_2step
Also remove self-loop for sink and make it work for any
acceptance condition.

* spot/twaalgos/synthesis.cc: Here
* tests/core/ltlsynt.test: Adjust tests
* tests/python/split.py: Adjust tests
2021-09-16 14:53:48 +02:00
Florian Renkin
98ab826255 Introducing formula split
Split a LTL formula to a set of formula that don't share
output proposition. It allows to create multiple
strategies in ltlsynt.

* spot/twaalgos/synthesis.cc,
  spot/twaalgos/synthesis.hh: here
* doc/spot.bib: Add reference
2021-09-16 14:53:48 +02:00