Commit graph

1569 commits

Author SHA1 Message Date
Alexandre Duret-Lutz
7b0e15a7fb implement maximum cardinality search
* spot/twaalgos/mcs.cc, spot/twaalgos/mcs.hh: New files.
* spot/twaalgos/Makefile.am: Add them.
* python/spot/impl.i: Include mcs.hh.
* bin/autfilt.cc: Add --mcs option.
* NEWS: Mention it.
* doc/spot.bib: Add reference.
* tests/core/mcs.test: New file.
* tests/Makefile.am: Add it.
2024-09-19 18:45:34 +02:00
Alexandre Duret-Lutz
77a17881a3 defrag_states: allow a permutation of state numbers
* spot/misc/permute.hh: New file.
* spot/misc/Makefile.am: Add it.
* spot/graph/graph.hh, spot/twa/twagraph.cc,
spot/twaalgos/randomize.cc: Use the new permute_vector() function.
* spot/twa/twagraph.hh: Update documentation.
* NEWS: Update.
2024-09-18 13:59:51 +02:00
Alexandre Duret-Lutz
1724d2b14c ltlsynt: -q should also hide status and AIG output
* bin/ltlsynt.cc: Honnor -q properly.
* doc/org/ltlsynt.org, tests/core/ltlsynt.test: Adjust.
* NEWS: Mention this bug.
2024-09-10 12:29:23 +02:00
Alexandre Duret-Lutz
950b205b63 ltlsynt: have --csv exclude the formula column by default
* bin/ltlsynt.cc: Add the --csv-with-formula option.
* doc/org/ltlsynt.org, tests/core/ltlsynt2.test, NEWS: Adjust.
2024-09-10 12:29:23 +02:00
Alexandre Duret-Lutz
5488cb75c6 ltlsynt: overhaul CSV output
Previous output was not very usable in presence of decomposed
specifications.  We now keep track of the number of parts, and also
prefix the columns names with "max_" or "sum_" to indicate how their
statistics are updated in presence of multiple part.  Other missing
statistics, like the size of the translated automaton, or maximal
number of colors seen in a game, have been added.

* spot/twaalgos/synthesis.hh (bench_var): Rename, augment, and
document each statistsic.
* spot/twaalgos/mealy_machine.cc, spot/twaalgos/synthesis.cc,
bin/ltlsynt.cc: Adjust to the new naming scheme.
* doc/org/ltlsynt.org: Show a CSV file, and document its columns.
* tests/core/ltlsynt-pgame.test, tests/core/ltlsynt2.test,
tests/core/ltlsynt.test: Adjust test cases.
* NEWS: Mention the backward incompatible change.
2024-09-10 12:29:14 +02:00
Alexandre Duret-Lutz
b729aa3f30 ltlsynt: fix a few issues with --csv
Some columns were superfluous, other had inconsistent names, and some
times where not tracked.

* spot/twaalgos/synthesis.cc: Improve tracking of times and verbose
messages.
* bin/ltlsynt.cc (print_csv): Adjust CSV columns.
* tests/core/ltlsynt.test, tests/core/ltlsynt2.test,
tests/core/ltlsynt-pgame.test: Adjust expected CSV and verbose
messages.
* doc/org/ltlsynt.org: Give some example.
2024-09-05 08:41:30 +02:00
Alexandre Duret-Lutz
a22a05b8ec ltlsynt: implement --csv-without-formula
* bin/ltlsynt.cc: Implement that new option.
* tests/core/ltlsynt2.test: Test it.
* NEWS: Mention the change.
2024-09-05 08:41:30 +02:00
Alexandre Duret-Lutz
6e5592fe6a ltlsynt: save source filename with --csv
* bin/ltlsynt.cc (print_csv): Make filename mandatory, and add a
"was_game" argument.
(process_formula, process_aut_file): Adjust calls.
* tests/core/ltlsynt2.test: Adjust test cases.
2024-09-05 00:18:12 +02:00
Alexandre Duret-Lutz
e6ebbdf65f ltlfilt, ltlsynt, ltlmix: add a --part-file option
* bin/common_ioap.cc, bin/common_ioap.hh (read_part_file): New
function.
* bin/ltlfilt.cc, bin/ltlmix.cc, bin/ltlsynt.cc: Use it.
* doc/org/ltlfilt.org, doc/org/ltlmix.org, doc/org/ltlsynt.org:
Mention that new option, and improve the links to its description
in ltlsynt.org.
* NEWS: Mention the new option.
* tests/core/ltlfilt.test, tests/core/ltlmix.test,
tests/core/ltlsynt.test: Adjust test cases.
2024-09-04 16:09:31 +02:00
Alexandre Duret-Lutz
a8a0a1973e ltlsynt: fix usage for --dot's argument
* bin/ltlsynt.cc (dispatch_print_hoa): Pass the right argument to
print_dot.
* tests/core/ltlsynt.test: Test it.
* NEWS: Mention the bug.
2024-09-02 17:26:42 +02:00
Alexandre Duret-Lutz
89a06772b8 game: fix solving "parity min" games with multi-colored edges
* spot/twaalgos/game.cc: If the original acceptance is "parity min",
use min_set(), not max_set(), to read edge priorities.
* tests/python/game.py: Add a test case.
* NEWS: Mention the bug.
2024-08-30 22:18:20 +02:00
Alexandre Duret-Lutz
c5d991e55c autfilt: add a --track-formula option
Fixes #591.

* spot/twaalgos/matchstates.cc,
spot/twaalgos/matchstates.hh (match_states_decorate): New function.
* bin/autfilt.cc: Add a --track-formula option.
* tests/core/trackf.test: New file.
* tests/Makefile.am: Test it.
* NEWS: Mention it.
2024-08-30 22:18:20 +02:00
Alexandre Duret-Lutz
3d3e87948c twaalgos: add a match_states variant with a formula argument
This is related to issue #591, reported by Blake C. Rawlings.

* spot/twaalgos/ltl2tgba_fm.cc, spot/twaalgos/ltl2tgba_fm.hh
(ltl_to_tgba_fm): Add option to keep LTL labels.
* spot/twaalgos/matchstates.cc, spot/twaalgos/matchstates.hh
(match_states): Add variant with a formula as second argument.
* tests/python/matchstates.py: Test it.
* NEWS: Mention it.
* THANKS: Add reporter.
2024-08-30 22:18:09 +02:00
Alexandre Duret-Lutz
5f1d00b858 twaalgos: introduce match_states(a,b)
This is a useful part for issue #591.

* spot/twaalgos/matchstates.cc, spot/twaalgos/matchstates.hh: New
files.
* spot/twaalgos/Makefile.am: Add them.
* python/spot/impl.i: Add python bindings.
* tests/python/matchstates.py: New file.
* tests/Makefile.am: Add it.
* NEWS: Mention this new function.
2024-08-30 22:17:51 +02:00
Alexandre Duret-Lutz
c6f4b18655 genltl: add --lily-patterns
* spot/gen/formulas.cc, spot/gen/formulas.hh, bin/genltl.cc: Implement
support for --lily-pattern.
* doc/spot.bib, bin/man/genltl.x: Add references.
* NEWS: Mention it.
* tests/core/ltlsynt.test: Use these formulas.
* tests/core/genltl.test: Adjust.
2024-08-26 21:56:59 +02:00
Alexandre Duret-Lutz
6fa42c90b8 ltlfilt: add support for --relabel=io, --ins, and --outs
* bin/common_ioap.cc, bin/common_ioap.hh (relabel_io): New function.
* bin/ltlfilt.cc: Implement the above options.
* doc/org/ltlfilt.org, NEWS: Illustrate them.
* tests/core/ltlfilt.test: Add some quick tests.
2024-08-25 18:16:50 +02:00
Alexandre Duret-Lutz
c8b8ac60be bin: new ltlmix tool
Fixes #400.

* spot/tl/randomltl.cc, spot/tl/randomltl.hh: Adjust to accept
a set of formula to replace the atomic propositions.
* bin/ltlmix.cc: New file.
* bin/Makefile.am: Add it.
* bin/man/ltlmix.x: New file.
* bin/man/Makefile.am: Add it.
* doc/org/ltlmix.org: New file.
* doc/Makefile.am: Add it.
* bin/man/genltl.x, bin/man/randltl.x, bin/man/spot.x, bin/spot.cc,
doc/org/arch.tex, doc/org/concepts.org, doc/org/tools.org, NEWS: Mention
ltlmix.
* tests/core/ltlmix.test: New file.
* tests/Makefile.am: Add it.
2024-08-23 21:46:05 +02:00
Alexandre Duret-Lutz
baf2778c9a randltl: fix generation without unary operators
* spot/tl/randomltl.hh (has_unary_ops): New method.
* spot/tl/randomltl.cc: Avoid creating subformulas of even size
when we do not have unary operators.
* tests/core/randpsl.test: Test it.
* NEWS: Mention it.
2024-08-23 21:45:47 +02:00
Alexandre Duret-Lutz
44efc96595 formula: add a missing trivial rewriting in SERE
We should have [*0]|f ≡ f when f is a SERE that already accept the
empty word.  Fixes issue #454.

* spot/tl/formula.cc: Implement the rewriting.
* tests/core/reduccmp.test: Add a test case.
* doc/tl/tl.tex, NEWS: Document it.
2024-08-20 10:35:31 +02:00
Alexandre Duret-Lutz
bcdfe44c44 ltlfilt: add support for --to-delta2
* bin/ltlfilt.cc: Implement this option.
* tests/core/delta2.test: New file.
* tests/Makefile.am: Add it.
* NEWS: Mention it.
2024-08-20 10:35:31 +02:00
Alexandre Duret-Lutz
41abe3f831 tl: implement to_delta2()
* spot/tl/delta2.cc, spot/tl/delta2.hh: New files.
* spot/tl/Makefile.am: Add them.
* python/spot/impl.i: Include delta2.hh.
* tests/python/delta2.py: New file.
* tests/Makefile.am: Add it.
* NEWS: Mention the change.
2024-08-20 10:35:31 +02:00
Alexandre Duret-Lutz
5bc4d12bba ltlfilt: support --pi1 --sigma1 --delta1 --pi2 --sigma2
* bin/ltlfilt.cc: Implement those option.
* tests/core/hierarchy.test: Add a quick test.
* NEWS: Mention it.
2024-08-20 10:35:30 +02:00
Alexandre Duret-Lutz
7901a37747 formula: track Δ₁, Σ₂, Π₂, and Δ₂ membership
* spot/tl/formula.hh, spot/tl/formula.cc: Update the properties
and track them.
* tests/core/kind.test: Augment the test case.
* doc/tl/tl.tex, doc/spot.bib, NEWS: Document these new classes.
2024-08-20 10:35:30 +02:00
Alexandre Duret-Lutz
6a7ef4db3f postprocess: call restrict_dead_end_edges_here()
Related to issue #587.

* spot/twaalgos/postproc.cc, spot/twaalgos/postproc.hh: Add
support for option "rde".
* bin/spot-x.cc, NEWS: Mention it.
* tests/core/deadends.test, tests/core/ltl2tgba2.test,
tests/python/atva16-fig2a.ipynb, tests/python/deadends.py: Adjust test
cases to reflect the improvement.
* tests/core/ltlsynt.test: Also adjust this test case, which is the
only one worsened.  Some extra gates are generated when translating
GFa<->GFb with --algo=ds or --algo=sd.  Issue #588 would be one way to
fix that.
2024-07-19 17:07:39 +02:00
Alexandre Duret-Lutz
31511e042a twaalgos: implement restrict_dead_end_edges_here()
Discussed in issue #587.

* spot/twaalgos/deadends.cc, spot/twaalgos/deadends.hh: New files.
* spot/twaalgos/Makefile.am, python/spot/impl.i: Add them.
* tests/core/deadends.test, tests/python/deadends.py: New files.
* tests/Makefile.am: Add them.
* spot/twa/acc.cc, spot/twa/acc.hh (keep_one_inf_per_branch): New
method.
* bin/autfilt.cc: Learn option --restrict-dead-end-edges.
* NEWS: Mention it.
2024-07-19 17:07:39 +02:00
Philipp Schlehuber
5ddac258e1 Introduce new ways to split an automaton
The explicit way of splitting suffers if there are
too many input APs, two new ways of splitting
are introduced as well as a heuristic to chose
between them.

* NEWS: update
* spot/twaalgos/synthesis.cc,
spot/twaalgos/synthesis.hh: New fonctions
* bin/ltlsynt.cc: Add corresponding option
* tests/core/gamehoa.test,
tests/core/ltlsynt.test,
tests/python/_partitioned_relabel.ipynb,
tests/python/_synthesis.ipynb,
tests/python/game.py,
tests/python/split.py,
tests/python/synthesis.py: Adjusting and adding test
2024-07-18 10:13:14 +02:00
Alexandre Duret-Lutz
c44e03c791 * NEWS, configure.ac: Bump version to 2.12.0.dev. 2024-05-16 13:15:55 +02:00
Alexandre Duret-Lutz
532b57d0df Release spot 2.12
* NEWS, configure.ac, doc/org/setup.org: Bump version to 2.12.
2024-05-16 13:15:19 +02:00
Alexandre Duret-Lutz
913e807d66 stats: fix rounding issues
Fixes #582.

* spot/twaalgos/stats.cc: Add 0.5 to the result of bdd_satcountset()
before truncating it.
* NEWS: Mention the bug.
2024-05-16 13:14:03 +02:00
Alexandre Duret-Lutz
ed91f59bbd tl: new PSL trivial simplifications
Always rewrite {[*]}[]->0 as 0, and {[*]}<>->1 = 1.  Fixes #572.

* spot/tl/formula.cc: Implement them.
* doc/tl/tl.tex, NEWS: Document them.
* tests/core/equals.test: Test those.
2024-05-13 22:15:15 +02:00
Alexandre Duret-Lutz
e6362b785b python: use raw strings when appropriate
We had some incorrectly escaped strings that are now causing
SyntaxWarnings with Python 3.12

* bin/options.py, python/spot/aux_.py, python/spot/ltsmin.i,
python/spot/__init__.py: Here.
* NEWS: Mention the fix.
2024-05-03 10:47:43 +02:00
Alexandre Duret-Lutz
dbe31c72c8 Upgrade detection of Python include path for Python 3.12
Fixes #577.

* m4/pypath.m4: Python 3.12 removed distutils, so use sysconfig
instead.
* NEWS: Mention the bug.
2024-05-02 21:37:50 +02:00
Alexandre Duret-Lutz
be102e09d4 implement BA acceptance set reduction and enlargement
For issue #570.

* spot/twaalgos/cleanacc.hh,
spot/twaalgos/cleanacc.cc (reduce_buchi_acceptance_set_here,
enlarge_buchi_acceptance_set_here): New functions.
* bin/autfilt.cc: Add options --reduce-acceptance-set and
--enlarge-acceptance-set.
* tests/core/basetred.test: New file.
* tests/Makefile.am: Add it.
* NEWS: Mention it.
2024-04-25 23:27:30 +02:00
Alexandre Duret-Lutz
ffddbd84d0 * NEWS: Fix some typos. 2024-04-19 10:20:49 +02:00
Florian Renkin
2ffdd84942 Rename split_independant_formulas
split_independant_formulas is now split_independent_formulas

* spot/twaalgos/synthesis.hh, spot/twaalgos/synthesis.cc: change name.
* bin/ltlsynt.cc: update call
* NEWS: Mention it.
2024-04-16 17:02:52 +02:00
Florian Renkin
f57782686d Rename minimize_obligation_garanteed_to_work
minimize_obligation_garanteed_to_work is now
minimize_obligation_guaranteed_to_work

* spot/twaalgos/minimize.hh, spot/twaalgos/minimize.cc: change name.
* spot/twaalgos/postproc.cc: update call
* NEWS: Mention it.
2024-04-16 17:02:52 +02:00
Alexandre Duret-Lutz
df44f7a5c2 require python 3.6
* HACKING, NEWS, README, doc/org/install.org: Update.
* m4/pypath.m4, python/spot/__init__.py: Adjust requirements.
* python/spot/ltsmin.i: Don't use capture_output, this is a 3.7
option.
2024-03-27 14:31:32 +01:00
Alexandre Duret-Lutz
88f8af22c3 autfilt: add option --separate-edges
* bin/autfilt.cc: Implement it.
* tests/core/split.test: Test it.
* doc/org/tut25.org: Demonstrate it.
* NEWS: Mention it.
2024-03-25 20:25:24 +01:00
Alexandre Duret-Lutz
26ef5458eb determinize: speedup on automata with many AP and few labels
This uses the same trick as discussed in issue #566 and issue #568.

* spot/twaalgos/determinize.cc (safra_support): Use a basis
if it is smaller than 2^|support| for the current Safra state.
* tests/core/568.test: Add some tests.
* NEWS: Mention the optimization.
2024-03-25 20:25:24 +01:00
Alexandre Duret-Lutz
bda40a5f19 simulation: heuristically use a separated-label approach to rebuild
Closes issue #568.

* spot/twaalgos/simulation.cc (direct_simulation::build_result):
Implement an alternate loop based on edge_separator::basis to iterate
over a signature to build results.
* tests/core/568.test: New file.
* tests/Makefile.am: Add it.
* NEWS: Mention the optimization.
2024-03-25 20:25:24 +01:00
Alexandre Duret-Lutz
7ee2d9995f genaut: add two families of cyclic automata
These are meant to test the optimization implemented in issue #568.

* spot/gen/automata.hh, spot/gen/automata.cc, bin/genaut.cc: Add
support for --cycle-log-nba and --cycle-onehot-nba.
* tests/core/genaut.test: Add some tests.
* tests/python/gen.ipynb: Illustrate them.
* NEWS: Mention them.
2024-03-25 20:25:24 +01:00
Alexandre Duret-Lutz
7e228e86ee hoa: add option 'b' to build an alias-based basis for all labels
Related to issue #563.

* spot/twaalgos/hoa.hh (create_alias_basis): New function.
* spot/twaalgos/hoa.cc (create_alias_basis): New function.
(print_hoa): Add support for option 'b' and create_alias_basis
in this case.
* bin/common_aoutput.cc, NEWS: Document -Hb.
* tests/core/readsave.test, tests/python/aliases.py: Add test cases.
2024-03-22 14:41:42 +01:00
Alexandre Duret-Lutz
cb15840c56 org: add an example of conversion to BA format
This script was first posted on https://github.com/adl/hoaf/issues/73

* doc/org/tut25.org: New file.
* doc/Makefile.am: Add it.
* doc/org/tut.org, doc/org/tut21.org, NEWS: Link to it.
* doc/org/init.el.in: Install *.py files.
* doc/org/.gitignore: Add toba.py.
2024-03-21 09:00:06 +01:00
Alexandre Duret-Lutz
06099f649e powerset: improve tgba_powerset on small automata with large |AP|
For issue #566.

* spot/twaalgos/powerset.cc: Use the edge_separator on automata
with |AP|>5 that have few distinct labels.
* tests/core/566.test: Augment test-case.
* NEWS: Update.
2024-03-19 10:09:38 +01:00
Alexandre Duret-Lutz
3bcffa2fcd split: add separate_edges() and a edge_separator class
This generalizes (and replaces) the two-argument split that was
introduced in c2832cabfc.

* spot/twaalgos/split.cc, spot/twaalgos/split.hh (edge_separator): New
class.
(separate_edges): New function.
(split_edges): Remove the two argument version.
* spot/twaalgos/forq_contains.cc: Adjust to use the edge_separator
class.
* tests/python/splitedge.py: Adjust test case.
* tests/python/split.ipynb: New file.
* tests/Makefile.am, doc/org/tut.org: Add it.
* NEWS: Mention it.
2024-03-19 10:09:30 +01:00
Alexandre Duret-Lutz
f26f3243dd alternation: speed up remove_alternation when few labels are used
Related to issue #566.

* spot/twaalgos/alternation.cc (alternation_remover::run): Here.
* tests/core/566.test: Augment test case.
* NEWS: Mention the change.
2024-03-17 22:42:18 +01:00
Alexandre Duret-Lutz
1e512d422b dualize: improve performance on small automata with large |AP|
For issue #566.

* spot/twaalgos/dualize.cc (dualizer::copy_edges): Implement another
loop to be used when the number of outgoing edges of a state is
smaller than the number of AP.
* tests/core/566.test: New file.
* tests/Makefile.am: Add it.
* NEWS: Mention the improvement.
2024-03-17 22:36:01 +01:00
Alexandre Duret-Lutz
1b81ecb80c dualize: should not call cleanup_acceptance_here
Based on a report by Emmanuel Filiot, who was surprized that dualizing
Büchi did not always produce co-Büchi.

* spot/twaalgos/dualize.cc: Remove the call to
cleanup_acceptance_here.
* spot/twaalgos/dualize.hh: Improve documentation.
* NEWS: Mention the possible backward incompatible change.
* tests/core/dualize.test, tests/python/dualize.py,
tests/python/pdegen.py: Adjust test cases.
* spot/twaalgos/complement.cc (complement): Call
cleanup_acceptance_here when dualize() returns a smaller automaton.
* THANKS: Add Emmanuel.
2024-03-07 23:50:04 +01:00
Alexandre Duret-Lutz
60f046a574 add intersection checks between words and automata
Several people have asked for a way to check whether a word is
accepted by an automaton, including at least Jonah Romero and Scott
Buckley.  So it's time we have it.

* spot/twa/twa.hh, spot/twa/twa.cc,
spot/twaalgos/word.hh (intersects): Add the new variant.
* spot/twa/fwd.hh: Forward declare twa_word, so that
we can use it in twa.hh.
* spot/twaalgos/forq_contains.cc: Use the new intersection check.
* tests/python/word.ipynb, NEWS: Mention it.
* THANKS: Add Scott Buckley.
2024-03-07 21:31:20 +01:00
Alexandre Duret-Lutz
15b876d368 ltlsynt: allow regular expressions in --ins/--outs
* bin/ltlsynt.cc: Implement this.
* doc/org/ltlsynt.org, NEWS: Adjust documentation.
* tests/core/ltlsynt.test: Add test cases.
2024-02-19 11:43:58 +01:00