Commit graph

1541 commits

Author SHA1 Message Date
Alexandre Duret-Lutz
7ba4ab7931 slights documentation changes around direct simulation
* src/tgbaalgos/simulation.hh: Mention the fact that this is
a "direct" simulation.
* wrap/python/ajax/ltl2tgba.html: Likewise, and change the key
to "ds".
* wrap/python/ajax/protocol.txt, wrap/python/ajax/spot.in: Adjust.
2012-04-27 15:51:20 +02:00
Alexandre Duret-Lutz
2c8e5297e7 Use clock() when times() is not available.
* configure.ac: Check for times() and sys/times.h.
* src/misc/timer.hh: Include sys/times.h conditionally
and use clock() if times() is not available.
Reported by Yann Thierry-Mieg.
2012-04-27 15:40:54 +02:00
Alexandre Duret-Lutz
8620138069 memusage: drop two useless includes.
* src/misc/memusage.cc: Do not include the unneeded sys/time.hh
and sys/resource.h.  Reported by Yann Thierry-Mieg.
2012-04-27 15:40:54 +02:00
Thomas Badie
876f8c90a2 Create the direct simulation.
* src/tgbaalgos/simulation.cc, src/tgbaalgos/simulation.hh: New files.
* src/tgbaalgos/Makefile.am: Add the new files to the compilation.
* src/tgbatest/spotlbtt.test: Add the simulation.
* src/tgbatest/ltl2tgba.cc: Add direct simulation (-RSD).
2012-04-18 19:02:09 +02:00
Thomas Badie
e75ad57446 Add a class to convert a bdd into its complement.
* src/misc/acccompl.cc, src/misc/acccompl.hh: Add a way to
an acceptance condition in an automaton, into its
complement.
Create a method to make the reverse operation.
* src/misc/Makefile.am: Add the new files to the compilation.
2012-04-18 18:54:41 +02:00
Alexandre Duret-Lutz
d3be530410 tgbatba: fix destroying of cache variables.
* src/tgba/tgbatba.cc (tgba_tba_proxy::~tgba_tba_proxy):
Zero last_support_conditions_input_ and last_support_variables_input_.
2012-04-13 12:23:53 +02:00
Alexandre Duret-Lutz
8269ae9cee tgbaexplicit: execute the test
* src/tgbatest/explicit2.test: New file.
* src/tgbatest/Makefile.am: Add it.
* src/tgbatest/explicit2.cc: Print the LTL formula as text.
2012-04-13 08:43:58 +02:00
Alexandre Duret-Lutz
37a6b601c1 Declare the sba class in its own header.
* src/tgba/sba.hh: New file, extrated from...
* src/tgba/tgbaexplicit.hh: ... here.  Also rename
sba_explicit::is_accepting as sba_explicit::state_is_accepting for
consistency with tgba_sba_proxy.
* src/tgbatest/explicit2.cc: Adjust to the renaming.
* src/tgba/Makefile.am: Add sba.hh.
2012-04-13 08:43:58 +02:00
Pierre PARUTTO
937248e561 Correct a bug in tgba_explicit_succ_iterator class
* src/tgba/tgbaexplicit.hh (current_acceptance_conditiosn):
remove a suspect and in return statement
2012-04-12 17:40:12 +02:00
Pierre PARUTTO
9cfc408262 Modify is_accepting sba's method to run in constant time.
* src/tgba/tgbaexplicit.hh: modify is_accepting method
2012-04-12 17:40:12 +02:00
Pierre PARUTTO
eec3a12f80 Implement sba_explicit class, add tests
* src/tgba/tgbaexplicit.hh: Add sba_explicit implementation
* src/tgbatest/explicit2.cc: Add test to check the good instantiation
of sba_explicit_*
2012-04-12 17:40:12 +02:00
Alexandre Duret-Lutz
603c5d603b tgba_explicit: make the new class work with Swig.
* src/tgba/tgbaexplicit.hh (explicit_graph, tgba_explicit): Make the
transition type explicit.
(state_explicit_string::get_iterator): New method.
(explicit_graph::get_transition): Use it.
(tba): Rename as ...
(sba): ... this.
* wrap/python/spot.i: Instanciate explicit_graph and tgba_explicit
for all three types.
2012-04-12 17:40:12 +02:00
Pierre PARUTTO
a15aac2845 Revamp tgbaexplicit.hh
* src/tgba/tgbaexplicit.hh, src/tgba/tgbaexplicit.cc: Factor most of
the code in an explicit_graph<State, Type> that inherits from type.
The tgba_explicit type<State> now inherits from
explicit_graph<State,tgba>.
* src/ltlvisit/contain.cc, src/neverparse/neverclaimparse.yy
src/tgba/tgbareduc.cc, src/tgba/tgbareduc.hh, src/tgbaalgos/cutscc.cc,
src/tgbaalgos/dupexp.cc, src/tgbaalgos/dupexp.hh,
src/tgbaalgos/emptiness.cc, src/tgbaalgos/ltl2tgba_fm.cc,
src/tgbaalgos/ltl2tgba_fm.hh, src/tgbaalgos/minimize.cc,
src/tgbaalgos/powerset.cc, src/tgbaalgos/randomgraph.cc,
src/tgbaalgos/sccfilter.cc, src/tgbaparse/tgbaparse.yy,
src/tgbatest/complementation.cc, src/tgbatest/explicit.cc,
src/tgbatest/explprod.cc, src/tgbatest/ltl2tgba.cc,
src/tgbatest/mixprod.cc, src/tgbatest/powerset.cc,
src/tgbatest/tgbaread.cc, src/tgbatest/tripprod.cc:
Replace tgba_explicit* by the actual type used.
* src/tgbatest/explicit2.cc: New file.
* src/tgbatest/Makefile.am: Add it.
2012-04-12 17:39:48 +02:00
Alexandre Duret-Lutz
3fb29ce1be Typo: rename automata_ as aut_.
* src/tgbaalgos/reachiter.hh, src/tgbaalgos/reachiter.cc,
src/tgbaalgos/dotty.cc, src/tgbaalgos/dupexp.cc,
src/tgbaalgos/lbtt.cc, src/tgbaalgos/neverclaim.cc,
src/tgbaalgos/reductgba_sim.cc, src/tgbaalgos/reductgba_sim_del.cc,
src/tgbaalgos/save.cc, src/tgbaalgos/sccfilter.cc,
src/tgba/tgbareduc.cc, src/evtgbaalgos/tgba2evtgba.cc,
src/kripke/kripkeprint.cc: Rename automata_ as aut_.
2012-03-17 14:37:59 +01:00
Alexandre Duret-Lutz
a01034e5f9 Fix a segfault in the CGI script, reported by Denis.
* src/tgbaalgos/emptiness.cc
(emptiness_check_instantiator::construct): Set *err = 0
on success.  This avoids problem with the python bindings
always converting *err to a string and sometimes failing
to do so when err was not initialized.
2012-03-09 08:38:55 +01:00
Alexandre Duret-Lutz
547715463a Fix a segfault reported by Etienne Renault using dve2check.
* src/misc/intvcmp2.cc (stream_compression_base::run): Fix a case
where the "id" of the compression to use would be miscalculated,
causing wrong values to be encoded.
* src/tgbatest/intvcmp2.cc: Add this particular test case.
2012-01-24 19:09:07 +01:00
Alexandre Duret-Lutz
15c2a9473e Small speedup in safra_tree::compare().
* src/tgba/tgbasafracomplement.cc (safra_tree::compare): Improve
the order of the tests.
2012-01-18 19:52:21 +01:00
Alexandre Duret-Lutz
75032c9fc4 Implement a unicity table for states created by tgba_tba_proxy.
Suggested by Nikos Gorogiannis.

* src/tgba/tgbatba.hh (tgba_tba_proxy::create_state): New method.
(tgba_tba_proxy::uniq_map_): New attribute.
* src/tgba/tgbatba.cc (state_tba_proxy): Use the default
copy constructor.  Empty the destructor.  Implement an empty
destroy() method.  Use addresses for comparison.  Make clone()
a no-op.
(tgba_tba_proxy): Allocate and deallocate the unicity table.
Implement create_sates().
(tgba_tba_proxy, tgba_sba_proxy, tgba_tba_proxy_succ_iterator):
Adjust state construction to call create_state().
2012-01-18 12:22:07 +01:00
Alexandre Duret-Lutz
578c5894f5 Minor speedups in tgba_safra_complement().
* src/tgba/tgbasafracomplement.cc (safra_tree:succ_create): Do not
lookup *i twice, and do not copy it->second.
(safra_tree::normalize_siblings): Do not lookup *node_it before
insertion.
2012-01-18 10:50:18 +01:00
Alexandre Duret-Lutz
ebfec98e31 * src/eltlparse/eltlparse.yy (realias): Add a useless return to
fix a g++ warning.
2012-01-18 10:42:37 +01:00
Alexandre Duret-Lutz
a5787937ef minimize_wdba() failed to fully minimize some automata.
* src/tgbaalgos/minimize.cc (minimize_wdba): Fix the Löding
algorithm to use colors.  The previous implementation was an
incorrect approximation.
* src/tgbatest/wdba2.test: New file showing two equivalent
formulas that were minimized in automata with different sizes.
* src/tgbatest/Makefile.am: Add it.
2012-01-17 12:11:55 +01:00
Alexandre Duret-Lutz
c21e716893 Fix a 'make check' failure when valgrind is not installed.
* src/kripketest/defs.in (run2): Remove this function.  It was
incorrectly trying to run valgrind even when valgrind is not
installed.
* src/kripketest/kripke.test: Simplify and use run().
2012-01-13 13:51:42 +01:00
Ala-Eddine Ben-Salem
0ca40d72d7 Fix detection of the last iteration of minimize_dfa().
* src/tgbaalgos/minimize.cc (minimize_dfa): Fix detection of the
last iteration.  An extra iteration case could be missed in case
where a split generates only singletons, and yet predecessor
classes need to be refined.
2012-01-05 19:17:34 +01:00
Alexandre Duret-Lutz
984c715cc6 Fix computation of length of LTL formulas.
* src/ltlvisit/length.cc: Fix computation for ltl::multop
operator. "a&b&c" was reported with length 3, ignoring the
"&" operators, because of a typo.
* src/ltlvisit/length.hh: Fix description to correctly
reflect this change intended since 2010-01-22.
* src/ltltest/length.test, src/ltltest/length.cc: New files.
* src/ltltest/Makefile.am: Add them.
2012-01-05 18:34:23 +01:00
Alexandre Duret-Lutz
28b7c0858b Fix VPATH builds, now that hash.hh include _config.h
* iface/dve2/Makefile.am, src/eltlparse/Makefile.am
src/eltltest/Makefile.am, src/evtgba/Makefile.am,
src/evtgbaalgos/Makefile.am, src/evtgbaparse/Makefile.am,
src/evtgbatest/Makefile.am, src/kripke/Makefile.am,
src/kripketest/Makefile.am, src/ltlast/Makefile.am,
src/ltlparse/Makefile.am, src/ltltest/Makefile.am,
src/ltlvisit/Makefile.am, src/misc/Makefile.am,
src/neverparse/Makefile.am, src/saba/Makefile.am,
src/sabaalgos/Makefile.am, src/sanity/Makefile.am,
src/tgba/Makefile.am, src/tgbaalgos/Makefile.am,
src/tgbaalgos/gtec/Makefile.am, src/tgbaparse/Makefile.am,
src/tgbatest/Makefile.am, wrap/python/Makefile.am (AM_CPPFLAGS):
Make sure $(top_builddir)/src is included.
2011-12-18 12:56:44 +01:00
Alexandre Duret-Lutz
e531da8d92 Perform WDBA minimization before degeneralization.
There is no point in degeneralizing an automaton if it can be WDBA
minimized.  Doing so will only augment the number of states and
slow down the powerset construction used by the WDBA minimization.

* src/tgbatest/babiak.test: New file.  It includes 5 formulae
which Tomáš Babiak reported Spot 0.7.1 would take over one hour to
translate if degeneralization and WDBA minimization were both
requested.
* src/tgbatest/Makefile.am (TESTS): Add it.
* src/tgbatest/ltl2tgba.cc: Do WDBA minimization before
degeneralization.  The above formulae are now all translated in a
few seconds.
2011-12-16 12:56:22 +01:00
Alexandre Duret-Lutz
9679032510 Don't rely on the g++ version to include tr1/unordered_map and co.
The previous setup failed with clang++ 3.0.

* m4/stl.m4: New file.
* configure.ac: Call AC_HEADER_UNORDERED_MAP,
AC_HEADER_TR1_UNORDERED_MAP, and AC_HEADER_EXT_HASH_MAP.
* src/misc/hash.hh: Include _config.h, and used the
SPOT_HAVE_UNORDERED_MAP, SPOT_HAVE_TR1_UNORDERED_MAP,
or SPOT_HAVE_EXT_HASH_MAP defines to decide which
file to include.
2011-12-16 10:03:07 +01:00
Alexandre Duret-Lutz
1e7cda5e05 Fix build on MacOS X.
* src/kripketest/Makefile.am (LDADD): Remove a broken dependency.
Reported by Yann Thierry-Mieg.
* src/sanity/style.test: Make sure it does not appear again.
2011-11-29 20:32:45 +01:00
Alexandre Duret-Lutz
799ab14300 Fix some Doxygen errors.
* src/kripke/kripkeexplicit.hh: Reindent, and fix
some comments.
2011-11-28 15:22:02 +01:00
Alexandre Duret-Lutz
11bb4c7789 Add more nodes when resizing BDD table.
* src/misc/bddalloc.cc (bdd_allocator::initialize): Call
bdd_setmaxincrease(500000), because the default is 50000,
which cause garbage collection to occur too often.
2011-11-28 11:35:05 +01:00
Alexandre Duret-Lutz
9c4adf1eb4 Don't flush the stream on each new line, when writing automata.
* src/tgbaalgos/neverclaim.cc, src/tgbaalgos/dotty.cc,
src/tgbaalgos/save.cc: Prefer '\n' over std::endl to speedup I/O.
* src/ltltest/genltl.cc (syntax): Use '\n' too, although it won't
make a big difference.
2011-11-28 10:48:38 +01:00
Alexandre Duret-Lutz
ba3108f98d Add an ltl2tgba option to read Kripke structure.
Also offers two ways to output Kripke structures.

* src/kripketest/parse_print_test.cc, src/kripke/kripkeexplicit.cc
: Simplify includes.
* src/kripke/kripkeprint.hh (kripke_save_reachable,
kripke_save_reachable_renumbered): New declarations.
(KripkePrinter): Move and rename...
* src/kripke/kripkeprint.cc (kripke_printer): ... here.
(kripke_printer_renumbered): New class.
(kripke_save_reachable, kripke_save_reachable_renumbered): New
function.
* src/tgbatest/ltl2tgba.cc: Add an option to read Kripke
structures.
* iface/dve2/dve2check.cc: Use kripke_save_reachable_renumbered.
* iface/dve2/defs.in (run2): Remove.
* iface/dve2/kripke.test: Adjust tests.
2011-11-28 10:48:38 +01:00
Thomas Badie
bb5949f6de Add text I/O for Kripke structures.
* src/kripke/kripkeexplicit.cc, src/kripke/kripkeexplicit.hh,
src/kripke/kripkeprint.cc, src/kripke/kripkeprint.hh: New files.
* src/kripke/Makefile.am: Add them.
* src/kripkeparse/fmterror.cc, src/kripkeparse/kripkeparse.yy,
src/kripkeparse/kripkescan.ll, src/kripkeparse/parsedecl.hh,
src/kripkeparse/public.hh, src/kripkeparse/scankripke.ll: New
files.
* src/kripkeparse/Makefile.am: Add them.
* src/kripketest/bad_parsing.test, src/kripketest/defs.in,
src/kripketest/kripke.test, src/kripketest/origin,
src/kripketest/parse_print_test.cc: New files.
* src/kripketest/Makefile.am: Add them.
* src/Makefile.am (SUBDIRS): Add kripkeparse and kripketest.
* README: Document src/kripketest/ and src/kripkeparse/.
* configure.ac: Generate src/kripkeparse/Makefile,
src/kripketest/Makefile, src/kripketest/defs.
* iface/dve2/defs.in (run2): New function.
* iface/dve2/dve2check.cc (syntax, main): Add option -gK.
* iface/dve2/kripke.test: New file.
* iface/dve2/Makefile.am (TESTS): Add kripke.test.
2011-11-24 22:47:41 +01:00
Alexandre Duret-Lutz
fd98345c17 More documentation.
* src/tgbaalgos/randomgraph.hh: Document the fact that adding
acceptance conditions to the graph may generate graphs that do not
have any accepting cycle.
2011-11-23 10:57:29 +01:00
Alexandre Duret-Lutz
3010d7051b Display transition annotations in dotty output.
* src/tgbaalgos/dotty.cc (process_link): Call
transition_annotation().  Reported by Nikos Gorogiannis.
* src/tgba/tgba.hh (transition_annotation): More documentation.
2011-11-17 18:55:17 +01:00
Alexandre Duret-Lutz
ea6a1ffc22 Fully quote guards used by neverclaims.
Especially with should write !(p0) and not !p0, because p0 is
usually #define'd by the user and he may have forgotten to quote
the value of the macro.  This issue was discovered by Kristin
Yvonne Rozier and diagnosed by Gerard Holzmann.

* src/tgbaalgos/neverclaim.cc (process_link): Call
to_spin_string(..., true) to fully parentheses the string.
* src/tgbatest/neverclaimread.test: Add a test.
2011-11-16 14:27:50 +01:00
Alexandre Duret-Lutz
2b5956c2d4 Fix a g++-4.7 warning about a variable used only in an assert().
* src/tgbaalgos/weight.cc (inc_weight_handler)
(dec_weight_handler): Remove these assertions that require the
loop the be completed, and use break to exit ASAP.
2011-11-11 23:00:28 +01:00
Alexandre Duret-Lutz
9130d6f58c Allow neverclaim guards of the form !(x)' or ! (x)'.
* src/neverparse/neverclaimscan.ll: Make the space between `!' and
`(' optional.  This fixes the patch from 2011-02-07 that made this
space mandatory...
* src/tgbatest/neverclaimread.test: Augment test case.
2011-11-08 11:59:45 +01:00
Alexandre Duret-Lutz
2422b63a36 Better documentation for print_tgba_run.
* src/tgbaalgos/emptiness.hh (print_tgba_run): Reword the
documentation after a report from Nikos Gorogiannis.
2011-10-26 19:05:55 +02:00
Alexandre Duret-Lutz
a4d1e18bf3 Safra: Fix usage of multiple acceptance conditions and fix text output.
* src/tgba/tgbasafracomplement.cc
(tgba_safra_complement::tgba_safra_complement)
(tgba_safra_complement::succ_iter): Correct the declaration and
use of multiple acceptance conditions.
(state_complement::to_string): Output the L set, not U.  The previous
code caused different states to share the same names, causing issues
with the text-based output (state with identical names get merged).
* src/tgba/tgbasafracomplement.hh
(tgba_safra_complement::acceptance_cond_vec_): Adjust type to
store BDDs.
* src/tgbatest/complementation.cc: Implement a new "-b" option
to output automata in Spot's syntax.
* src/tgbatest/complementation.test: Add a test-case supplied
by Martin Dieguez Lodeiro.
* THANKS: Add Martin.
2011-10-23 23:06:59 +02:00
Alexandre Duret-Lutz
ff3c02f51d * src/tgba/tgbasafracomplement.cc: Fix two asserts. 2011-10-23 22:02:19 +02:00
Alexandre Duret-Lutz
73d9f65d2c Improve the print_safra_automaton output.
* src/tgba/tgbasafracomplement.cc (print_safra_tree): Fix output in
case of hash collision.  Use the actual states to get a number, not
their hash value.
(print_safra_automaton): Output a mapping of values to states names.
(safra_tree_automaton::get_sba): New method, used by
print_safra_automaton.
2011-10-23 22:01:40 +02:00
Alexandre Duret-Lutz
101b18b24b Fix errors reported by clang++-2.9.
* src/evtgbaalgos/tgba2evtgba.cc (process_link): Fix prototype
to match tgba_reachable_iterator::process_link.
* src/ltlvisit/tunabbrev.hh: Add using super::visit, so that the
other visit() method are in scope when we overload one.
* src/tgba/tgbareduc.hh, src/tgba/tgbareduc.cc (start, end,
process_link): Remove these empty methods.  The default
implementations are empty too, and process_link had the
wrong prototype.
* src/tgbaalgos/reductgba_sim.hh, src/tgbaalgos/reductgba_sim.cc
(start, end, process_link): Likewise.
2011-08-28 10:37:43 +02:00
Alexandre Duret-Lutz
d9fc75e94e Improve SCC simplification by removing implied acceptance conditions.
Spot 0.7.1 used to need 190 acceptance conditions to translate the
188 literature formulae.  With this patch we are down to 185.
That's not an impressive, but there are only ~20 formulae that
require more than 1 acceptance conditions; hence little room for
improvement.

* src/misc/bddlt.hh (bdd_hash): New function.
* src/misc/accconv.hh, src/misc/accconv.cc: New files.
* src/misc/Makefile.am: Add them.
* src/tgbaalgos/scc.cc (scc_map::build_map): Adjust
to record all combination of acceptance conditions occurring in a SCC.
* src/tgbaalgos/scc.hh (scc_map::scc::useful_acc): Update description.
* src/tgbaalgos/sccfilter.cc (scc_filter): Simplify acceptance
conditions that are always implied by another acceptance
conditions.  Previously, we only removed acceptance conditions
that where always present in accepting SCCs.
* src/tgbatest/sccsimpl.test: New file.
* src/tgbatest/Makefile.am (TESTS): Add it.
2011-08-28 10:37:42 +02:00
Alexandre Duret-Lutz
9d232af82f Refine yesterday's change to the degeneralization.
This avoids a small regression on the size of degeneralized
automata of our usual list of literature formulae.

* src/tgba/tgbatba.hh, src/tgba/tgbatba.cc
(tgba_tba_proxy::union_acceptance_conditions_of_original_state):
New method.
* src/tgba/tgbatba.cc (tgba_tba_proxy_succ_iterator): In accepting
states, ignore only the last expected acceptance condition if its
common to all outgoing transitions AND if it is not used by any
outgoing transitions of the destination.
2011-08-26 15:23:54 +02:00
Alexandre Duret-Lutz
bc416fdb2f Make sure the degeneralization is idempotent (up to renaming of
states).

* src/tgbaalgos/tgbatba.cc: When degeneralizing to SBA, remove the
acceptance conditions that are common to all outgoing transitions
of this state.  This helps to make the degeneralization
idempotent.
* src/tgbatest/degenid.test: New test case.
* src/tgbatest/Makefile.am: Add it.
2011-08-25 18:42:00 +02:00
Alexandre Duret-Lutz
bf7b94e1cd Fix escaping of state name in save_reachable()'s output.
* src/tgbaalgos/save.c (process_state): Escape quotes in the
name of source and destination states.  This fixes a side bug
in the upcoming degenid.test test case.
2011-08-25 18:29:46 +02:00
Alexandre Duret-Lutz
d8ba172e6d Running ltl2tgba -R1q -R1t -N would degeneralize before and
after the simulation-reduction.

Report from Tomáš Babiak <xbabiak@fi.muni.cz>.

* src/tgbaalgos/neverclaim.hh (never_claim_reachable): Take
a tgba as input.
* src/tgbaalgos/neverclaim.cc (never_claim_bfs): Call
state_is_accepting() only if this tgba turns out to be
a tgba_sba_proxy.  Otherwise check the acceptance of one
outgoing transition as we do in dotty_bfs since 2011-03-05.
* src/tgbatest/ltl2tgba.cc: Do not redegeneralize before
calling never_claim_reachable() if we know the automaton is
degeneralized already.
* src/tgbatest/ltl2tgba.test: Add a test case.
2011-08-25 16:53:40 +02:00
Alexandre Duret-Lutz
1c2450f609 Please GCC 4.6.
* src/tgbatest/complementation.cc (check, automaton): Remove
these unused variables.
2011-08-17 16:27:40 +02:00
Alexandre Duret-Lutz
03aabf9a3a Fix a nondeterministic behavior of the degeneralization algorithm.
Reported by Tomáš Babiak <xbabiak@fi.muni.cz>.

* src/tgba/tgbatba.cc (tgba_tba_proxy): Replace the std::map used
to record outgoing transitions by an Sgi::hash_map, and keep the
order of these transitions in a separate list.
* src/tgbatest/degendet.test: New file.
* src/tgbatest/Makefile.am (TESTS): Add it.
* THANKS: Add Tomáš and convert to utf8.
2011-08-17 16:24:38 +02:00