1. 29 Aug, 2003 1 commit
    • Alexandre Duret-Lutz's avatar
      * src/tgba/tgbaexplicit.cc (tgba_explicit::all_accepting_conditions) · 6da1f356
      Alexandre Duret-Lutz authored
      Compute all_accepting_conditions_ from neg_accepting_conditions_,
      not by browsing the dictionary.  The dictionary also contains
      accepting conditions from other automata...  This bug was a
      consequence of the change from 2003-07-14.
      * src/tgbaalgos/save.cc (save_bfs::start()): Likewise, do not
      browse the dictionary to print accepting conditions.  Call
      ->all_accepting_conditions() instead.
      * src/tgba/tgbaproduct.cc (tgba_product::tgba_product): Typo
      from 2003-08-22 in the computation of all_accepting_conditions_.
      * src/tgbatest/explpro3.test: New file.
      * src/tgbatest/Makefile.am (TESTS): Add explpro3.test.
      * src/tgbatest/explprod.test, src/tgbatest/explpro2.test,
       src/tgbatest/tripprod.test: Sort the output using Perl.
      6da1f356
  2. 15 Aug, 2003 1 commit
    • Alexandre Duret-Lutz's avatar
      This implements Couvreur's FM'99 ltl2tgba translation. · 2b9f1720
      Alexandre Duret-Lutz authored
      * src/tgba/bdddict.cc (bdd_dict::is_registered): Split as ...
      (bdd_dict::is_registered_proposition, bdd_dict::is_registered_state,
      bdd_dict::is_registered_accepting_variable): ... these.
      * src/tgba/bdddict.hh: Likewise.
      * src/tgba/tgbaexplicit.cc (tgba_explicit::set_init_state): New method.
      (tgba_explicit::declare_accepting_condition): Arrange so that this
      function can be called during the construction of the automaton.
      (tgba_explicit::complement_all_accepting_conditions): New method.
      (tgba_explicit::has_accepting_condition): Adjust to call
      bdd_dict::is_registered_accepting_variable.
      * src/tgba/tgbaexplicit.hh (tgba_explicit::set_init_state,
      tgba_explicit::complement_all_accepting_conditions): New methods.
      * src/tgbaalgos/ltl2tgba_fm.cc, src/tgbaalgos/ltl2tgba_fm.hh:
      New files.
      * src/tgbaalgos/Makefile.am (tgbaalgos_HEADERS,
      libtgbaalgos_la_SOURCES): Add them.
      * src/tgbaalgos/ltl2tgba.hh: Add bibtex entry in comment.
      * src/tgbatest/Makefile.am (check_PROGRAMS): Remove spotlbtt
      and tbalbtt.
      (tbalbtt_SOURCES, tbalbtt_CXXFLAGS, spotlbtt_SOURCES): Remove.
      * src/tgbatest/spotlbtt.cc: Delete, superseded by "ltl2tgba -F -t".
      * src/tgbatest/ltl2tgba.cc: Implement the -f and -F options.
      * src/tgbatest/spotlbtt.test: Use "ltl2tgba -F -t" instead of
      "spotlbtt", "ltl2tgba -F -t -D" instead of "tbalbtt", and add
      also check the ltl2tgba_fm translator.
      * wrap/python/spot.i: Wrap ltl2tgba_fm.
      * wrap/python/cgi/ltl2tgba.in: Add radio buttons to select
      between ltl2tgba and ltl2tgba_fm.
      * wrap/python/tests/ltl2tgba.py: Add support for the -f option.
      * wrap/python/tests/ltl2tgba.test: Try the -f option.
      2b9f1720
  3. 10 Aug, 2003 1 commit
  4. 17 Jul, 2003 1 commit
    • Alexandre Duret-Lutz's avatar
      Now succ_iter() can fetch extra information from · 1d9c3d64
      Alexandre Duret-Lutz authored
      the root of a product to reduce its number of successors.
      * src/tgba/Makefile.am (libtgba_la_SOURCES): Add tgba.cc.
      * src/tgba/tgba.hh (tgba::succ_iter): Add the global_state and
      global_automaton arguments.
      (tgba::support_conditions, tgba::support_variables,
      tgba::compute_support_conditions, tgba::compute_support_variables):
      New functions.
      (tgba::last_support_conditions_input_,
      tgba::last_support_conditions_output_,
      tgba::last_support_variables_input_,
      tgba::last_support_variables_output_): New attributes.
      * src/tgba/tgbabddconcrete.cc (tgba_bdd_concrete::succ_iter):
      Handle the two new arguments.
      (tgba_bdd_concrete::compute_support_conditions,
      tgba_bdd_concrete::compute_support_variables): Implement them.
      * src/tgba/tgbabddconcrete.hh: Adjust.
      * src/tgba/tgbaexplicit.cc (tgba_explicit::succ_iter):	Ignore
      the two new arguments.
      (tgba_explicit::compute_support_conditions,
      tgba_explicit::compute_support_variables): Implement them.
      * src/tgba/tgbaexplicit.hh: Adjust.
      * src/tgba/tgbaproduct.cc (tgba_product::succ_iter): Handle the
      two new arguments.
      (tgba_product::compute_support_conditions,
      tgba_product::compute_support_variables): Implement them.
      * src/tgba/tgbaproduct.hh: Adjust.
      * iface/gspn/gspn.cc (tgba_gspn_private_::last_state_cond_input,
      tgba_gspn_private_::last_state_cond_output,
      (tgba_gspn_private_::tgba_gspn_private_): Set last_state_cond_input.
      (tgba_gspn_private_::~tgba_gspn_private_): Delete
      last_state_cond_input.
      (tgba_gspn_private_::state_conds): New function, eved out
      from tgba_gspn::succ_iter.
      (tgba_gspn::succ_iter): Use it.  Use the two new arguments.
      (tgba_gspn::compute_support_conditions,
      tgba_gspn::compute_support_variables): New functions.
      * iface/gspn/gspn.hh: Adjust.
      1d9c3d64
  5. 15 Jul, 2003 1 commit
    • Alexandre Duret-Lutz's avatar
      Homogenize passing of automata as pointers, not references. · 66b1630c
      Alexandre Duret-Lutz authored
      Disallow copy for security.
      
      * src/tgba/tgbabddconcrete.hh (tgba_bdd_concrete): Disallow copy.
      * src/tgba/tgbaexplicit.hh (tgba_explicit): Likewise.
      * src/tgba/tgbaexplicit.cc (tgba_explicit::operator=,
      tgba_explicit::tgba_explicit(tgba_explicit)): Remove.
      * src/tgba/tgbabddconcreteproduct.cc
      (tgba_bdd_concrete_product_factory::tgba_bdd_concrete_product_factory,
      product): Take operand automata as pointers.
      * src/tgba/tgbabddconcreteproduct.hh (product): Likewise.
      * src/tgba/tgbaproduct.cc, src/tgba/tgbaproduct.hh:
      (tgba_product): Disallow copy.
      (tgba_product::tgba_product): Take operand automata as pointers.
      * src/tgbaalgos/dotty.cc (dotty_state, dotty_rec, dotty_reachable):
      Take tgba arguments as pointer.
      * src/tgbaalgos/dotty.hh (dotty_reachable): Likewise.
      * src/tgbaalgos/lbtt.cc (fill_todo, lbtt_reachable): Likewise.
      * src/tgbaalgos/lbtt.hh (lbtt_reachable): Likewise.
      * src/tgbaalgos/ltl2tgba.cc, src/tgbaalgos/ltl2tgba.hh (ltl_to_tgba):
      Likewise.
      * src/tgbaalgos/save.cc (save_rec, tgba_save_reachable): Likewise.
      * src/tgbaalgos/save.hh (save): Likewise.
      * src/tgbatest/explicit.cc, src/tgbatest/explprod.cc,
      src/tgbatest/ltl2tgba.cc, src/tgbatest/ltlprod.cc,
      src/tgbatest/mixprod.cc, src/tgbatest/readsave.cc,
      src/tgbatest/spotlbtt.cc, src/tgbatest/tgbaread.cc,
      src/tgbatest/tripprod.cc: Likewise.
      66b1630c
  6. 14 Jul, 2003 1 commit
    • Alexandre Duret-Lutz's avatar
      Before this change, all automata would construct their own · cab3be97
      Alexandre Duret-Lutz authored
      dictionaries (map of BDD variables to LTL formulae).  This was
      cumbersome, because to multiply two automata we had to build a
      common dictionary (the union of the two LTL formula spaces), and
      install wrappers to translate each automaton's BDD answers into
      the common dictionary.  This translation, that had to be repeated
      when several products were nested, was time consuming and was a
      hindrance for some optimizations.
      In the new scheme, all automata involved in a product must
      share the same dictionary.  An empty dictionary should be
      constructed by the user and passed to the automaton' constructors
      as necessary.
      This huge change removes most code than it adds.
      
      * src/Makefile.am (libspot_la_LIBADD): Add misc/libmisc.la.
      * src/misc/bddalloc.hh, src/misc/bddalloc.cc: New files.  These
      partly replace src/tgba/bddfactory.hh and src/tgba/bddfactory.cc.
      * src/misc/Makefile.am: Adjust to build bddalloc.hh and bddalloc.cc.
      * src/tgba/bddfactory.hh, src/tgba/bddfactory.cc,
      src/tgba/dictunion.hh, src/tgba/dictunion.cc,
      src/tgba/tgbabdddict.hh, src/tgba/tgbabdddict.cc,
      src/tgba/tgbabddtranslatefactory.hh,
      src/tgba/tgbabddtranslatefactory.cc,
      src/tgba/tgbatranslateproxy.hh, src/tgba/tgbatranslateproxy.cc:
      Delete.
      * src/tgba/bdddict.hh, src/tgba/bdddict.cc: New files.  These
      replaces tgbabdddict.hh and tgbabdddict.cc, and also part of
      bddfactory.hh and bddfactory.cc.
      * src/tgba/bddprint.cc, src/tgba/bddprint.hh: Adjust to
      use bdd_dict* instead of tgba_bdd_dict&.
      * src/tgba/succiterconcrete.cc (succ_iter_concrete::next()):
      Get next_to_now from the dictionary.
      * src/tgba/tgba.hh (tgba::get_dict): Return a bdd_dict*,
      not a const tgba_bdd_dict*.
      * src/tgba/tgbabddconcrete.cc, src/tgba/tgbabddconcrete.hh:
      Adjust to use the new dictionary, stored in data_.
      * src/tgba/tgbabddconcretefactory.cc,
      src/tgba/tgbabddconcretefactory.hh: Likewise.  Plus
      now_to_next_ is now also stored in the dictionary.
      * src/tgba/tgbabddconcreteproduct.cc: Likewise.  Now
      that both operand share the same product, there is not
      point in using tgba_bdd_translate_factory.
      * src/tgba/tgbabddcoredata.cc, src/tgba/tgbabddcoredata.hh:
      Store a bdd_dict (taken as constructor argument).
      (tgba_bdd_core_data::~tgba_bdd_core_data): Remove.
      (tgba_bdd_core_data::translate): Remove.
      (tgba_bdd_core_data::next_to_now): Remove (now in dict).
      (tgba_bdd_core_data::dict): New pointer.
      * src/tgba/tgbabddfactory.hh: (tgba_bdd_factory::get_dict): Remove.
      * src/tgba/tgbaexplicit.cc, src/tgba/tgbaexplicit.hh:
      Adjust to use the new dictionary.
      * src/tgba/tgbaproduct.cc, src/tgba/tgbaproduct.hh: Likewise.  Do
      not use tgba_bdd_dict_union and tgba_bdd_translate_proxy anymore.
      * src/tgbaalgos/lbtt.cc, src/tgbaalgos/save.cc: Adjust to
      use bdd_dict* instead of tgba_bdd_dict&.
      * src/tgbaalgos/ltl2tgba.cc, src/tgbaalgos/ltl2tgba.cc: Likewise.
      (ltl_to_tgba): Take a dict argument.
      * src/tgbaparse/public.hh (tgba_parse): Take a dict argument.
      * src/tgbaparse/tgbaparse.yy (tgba_parse): Take a dict argument.
      * src/tgbatest/explicit.cc, src/tgbatest/explprod.cc,
      src/tgbatest/ltlprod.cc, src/tgbatest/mixprod.cc,
      src/tgbatest/readsave.cc, src/tgbatest/spotlbtt.cc,
      src/tgbatest/tgbaread.cc, src/tgbatest/tripprod.cc: Instantiate
      a dictionary, and pass it to the automata' constructors.
      * src/tgbatest/ltl2tgba.cc: Likewise, and remove the -o (defrag)
      option.
      * iface/gspn/gspn.hh (tgba_gspn::tgba_gspn): Take a bdd_dict argument.
      (tgba_gspn::get_dict): Adjust return type.
      * iface/gspn/gspn.cc: Do not use bdd_factory, adjust to
      use the new dictionary instead.
      cab3be97
  7. 07 Jul, 2003 1 commit
    • Alexandre Duret-Lutz's avatar
      * src/tgba/succiter.hh (current_state, current_conditions · c96af625
      Alexandre Duret-Lutz authored
      current_accepting_conditions): Mark as const.
      * src/tgba/succiterconcrete.cc, src/tgba/succiterconcrete.hh,
      src/tgba/tgbaexplicit.cc, src/tgba/tgbaexplicit.hh,
      src/tgba/tgbaproduct.cc, src/tgba/tgbaproduct.hh,
      src/tgba/tgbatranslateproxy.cc, src/tgba/tgbatranslateproxy.hh:
      Likewise.
      c96af625
  8. 30 Jun, 2003 1 commit
    • Alexandre Duret-Lutz's avatar
      * doc/Doxyfile.in (HAVE_DOT): Set to YES to output · e5626208
      Alexandre Duret-Lutz authored
      collaboration diagrams.
      * doc/mainpage.dox: Typo.
      
      * src/tgba/state.hh (state::as_bdd): Delete.
      * src/tgba/tgbaproduct.hh (state_bdd_product): Inherit from state,
      not state_bdd.
      (state_bdd_product::state_bdd_product): Adjust.
      * src/tgba/tgbaproduct.cc (state_bdd_product::state_bdd_product):
      Adjust.
      
      * src/tgba/succiter.hh (tgba_bdd_succ_iterator::done):
      Mark as const.
      * src/tgba/succiterconcrete.cc
      (tgba_succ_iterator_concrete::done): Likewise.
      * src/tgba/succiterconcrete.hh
      (tgba_succ_iterator_concrete::done): Likewise.
      * src/tgba/tgbaexplicit.cc
      (tgba_explicit_succ_iterator::done): Likewise.
      * src/tgba/tgbaexplicit.hh
      (tgba_explicit_succ_iterator::done): Likewise.
      * src/tgba/tgbaproduct.cc
      (tgba_product_succ_iterator::done): Likewise.
      * src/tgba/tgbaproduct.hh
      (tgba_product_succ_iterator::done): Likewise.
      * src/tgba/tgbatranslateproxy.hh
      (tgba_translate_proxy_succ_iterator::done): Likewise.
      * src/tgba/tgbatranslateproxy.cc
      (tgba_translate_proxy_succ_iterator::done): Likewise.
      
      * src/tgba/succiterconcrete.cc
      (tgba_succ_iterator_concrete::next): Call bdd_satoneset
      on data_.varandnext_set.  The previous implementation
      was wrong for GFa.
      * src/tgba/tgbabddcoredata.hh: Declare varandnext_set.
      * src/tgba/tgbabddcoredata.cc: Handle varandnext_set.
      e5626208
  9. 23 Jun, 2003 1 commit
    • Alexandre Duret-Lutz's avatar
      Switch from "promises" to "accepting set". Fix the definitions · 25e6cca4
      Alexandre Duret-Lutz authored
      of these accepting set so that they are really usable.  Provide
      a all_accepting_conditions() method for use in the emptyness
      check, and a neg_accepting_conditions() for products.
      Predeclare TGBA accepting conditions is the i/o.
      
      * src/tgba/bddprint.cc (want_prom): Rename as ...
      (want_prom): ... this.
      (print_handler): Adjust to display Acc[].
      (print_acc_handler, bdd_print_acc): New functions.
      * src/tgba/bddprint.hh (print_acc_handler, bdd_print_acc):
      New functions.
      * src/tgba/succiter.hh (current_promise): Rename as ...
      (current_accepting_conditions): ... this.
      * src/tgba/succiterconcrete.cc (current_state):
      Rename next to now.
      (current_promise): Rename as ...
      (current_accepting_conditions): ... this, and compute
      the accepting conditions.
      * src/tgba/dictunion.cc, src/tgba/ltl2tgba.cc,
      src/tgba/succiterconcrete.hh,
      src/tgba/tgbabddconcretefactory.cc,
      src/tgba/tgbabddcoredata.cc, src/tgba/tgbabddcoredata.hh,
      src/tgba/tgbabdddict.hh, src/tgba/tgbabdddict.cc,
      src/tgba/tgbabddtranslatefactory.cc,
      src/tgbaalgos/dotty.cc: Adjust to new names.
      * src/tgba/tgba.hh (all_accepting_conditions,
      neg_accepting_conditions): New functions.
      * src/tgba/tgbabddconcretefactory.cc: Adjust to new
      names, and record accepting conditions instead of promises.
      * src/tgba/tgbabddcoredata.hh (accepting_conditions,
      all_accepting_conditions, negacc_set): New variables.
      (notnow_set, notprom_set, declare_promise): Rename as ...
      (notnext_set, notacc_set, declare_accepting_condition): ... these.
      * src/tgba/tgbaexplicit.hh
      (tgba_explicit_succ_iterator::current_promise): Rename as ...
      (tgba_explicit_succ_iterator::current_accepting_conditions): ... this.
      (tgba_explicit::add_promise): Rename as ...
      (tgba_explicit::add_accepting_condition): ... this.
      (tgba_explicit::declare_accepting_condition,
      tgba_explicit::has_accepting_condition): New variables.
      (tgba_explicit::get_promise): Rename as ...
      (tgba_explicit::get_accepting_condition): ... this.
      (tgba_explicit::all_accepting_conditions,
      tgba_explicit::neg_accepting_conditions): Implement them.
      (all_accepting_conditions, neg_accepting_conditions,
      all_accepting_conditions): New variables.
      (tgba_explicit_succ_iterator): Embed all_accepting_conditions_.
      * src/tgba/tgbaexplicit.cc: Likewise.
      * src/tgba/tgbaproduct.hh
      (tgba_product_succ_uterator): Embed left_neg_ and right_neg_.
      (tgba_product::all_accepting_conditions,
      tgba_product::neg_accepting_conditions): Implement them.
      * src/tgba/tgbatranslateproxy.hh:
      (tgba_translate_proxy::all_accepting_conditions,
      tgba_translate_proxy::neg_accepting_conditions): Implement them.
      * src/tgba/tgbatranslateproxy.cc: Likewise.
      * src/tgbaalgos/save.cc (save_rec): Call bdd_print
      (tgba_save_reachable): Output the `acc =' line.
      * src/tgbaparse/tgbaparse.yy: Support the for
      accepting conditions definitions using an "acc =" line
      at the start.  Later, use has_accepting_condition while
      parsing	accepting conditions to ensure they were declared.
      Disallow !cond in accepting conditions.
      * src/tgbaparse/tgbascan.ll (ACC_DEF): New token.
      * src/tgbatest/explicit.cc (main): Declare accepting conditions.
      * src/tgbatest/ltl2tgba.cc (main): Add support for the -a, -A,
      and -R new options.
      * src/tgbatest/tgbaread.cc (main): Really exit on parse error.
      * src/tgbatest/explicit.test, src/tgbatest/explprod.test,
      src/tgbatest/mixprod.test, src/tgbatest/readsave.test,
      src/tgbatest/tgbaread.test, src/tgbatest/tripprod.test: Reflect
      recent changes.
      25e6cca4
  10. 16 Jun, 2003 1 commit
    • Alexandre Duret-Lutz's avatar
      Make sure we can multiply two tgba_explicit. · ab09c185
      Alexandre Duret-Lutz authored
      * tgba/state.hh (state::translate, state::clone, state::as_bdd):
      New virtual methods.
      * tgba/stataebdd.cc (state::translate, state::clone): New methods.
      * tgba/stataebdd.hh (state::translate, state::clone): New methods.
      * tgba/tgbabddprod.cc (state_bdd_product::clone,
      tgba_bdd_product_succ_iterator::~tgba_bdd_product_succ_iterator):
      New methods.
      (tgba_bdd_product_succ_iterator::first): Reset right_
      if any of left_ or right_ is already done (i.e., is empty).
      (tgba_bdd_product_succ_iterator::done): Return true
      if right_ is NULL.
      (tgba_bdd_product_succ_iterator::current_state,
      tgba_bdd_product::get_init_state): Work	directory with `state's.
      * tgba/tgbabddprod.hh (state_bdd_product::clone,
      tgba_bdd_product_succ_iterator::~tgba_bdd_product_succ_iterator):
      New methods.
      * tgba/tgbabddtranslateproxy.cc
      (tgba_bdd_translate_proxy_succ_iterator::
      tgba_bdd_translate_proxy_succ_iterator): Work on any kind of iteraator.
      (tgba_bdd_translate_proxy_succ_iterator::
      ~tgba_bdd_translate_proxy_succ_iterator): New method.
      (tgba_bdd_translate_proxy_succ_iterator::current_state,
      tgba_bdd_translate_proxy::get_init_state,
      tgba_bdd_translate_proxy::succ_iter): Work on `state's and
      `tgba_succ_iterator's directlry.
      (tgba_bdd_translate_proxy::format_state): Delegate formating
      to the proxied automata.
      * tgba/tgbaexplicit.cc (state_explicit::clone): New method.
      * src/tgba/tgbaexplicit.cc (tgba_explicit::get_condition,
      tgba_explicit::get_promise): Call ltl::destroy on existing formulae.
      * tgbatest/Makefile.am (check_PROGRAMS): Add explprod.
      (explprod_SOURCES): New variable.
      (TESTS): Add explprod.test.
      (CLEANFILES): Add input1 and input2.
      ab09c185
  11. 05 Jun, 2003 2 commits
    • Alexandre Duret-Lutz's avatar
      * configure.ac: Output src/tgbaparse/Makefile. · 6884a7f9
      Alexandre Duret-Lutz authored
      * src/Makefile.am (SUBDIRS): Add tgbaparse.
      (libspot_la_LDADD): Add tgbaparse/libtgbaparse.la.
      * src/tgba/tgbaexplicit.cc (tgba_explicit::get_condition,
      tgba_explicit::get_promise, tgba_explicit::add_neg_condition,
      tgba_explicit::add_neg_promise): New methods.
      * src/tgba/tgbaexplicit.hh: Declare them.
      * src/tgbaparse/Makefile.am, src/tgbaparse/fmterror.cc,
      src/tgbaparse/parsedecl.hh, src/tgbaparse/public.hh,
      src/tgbaparse/tgbaparse.yy, src/tgbaparse/tgbascan.ll,
      src/tgbatest/tgbaread.cc, src/tgbatest/tgbaread.test: New files.
      * src/tgbatest/Makefile.am (check_PROGRAMS): Add tgbaread.
      (TESTS): Add tgbaread.cc.
      (CLEANFILES): Add input.
      (tgbaread_SOURCES): New variable.
      6884a7f9
    • Alexandre Duret-Lutz's avatar
      * configure.ac: Output src/tgbatest/Makefile and src/tgbatest/defs. · 80dd0ae1
      Alexandre Duret-Lutz authored
      * src/Makefile.am (SUBDIRS): Add tgbatest.
      * src/tgba/tgbaexplicit.hh, src/tgba/tgbaexplicit.cc: New file.
      * src/tgba/Makefile.am (libtgba_la_SOURCES): Add tgbaexplicit.cc
      and tgbaexplicit.hh.
      * src/tgbatest/Makefile.am, src/tgbatest/defs.in,
      src/tgbatest/explicit.cc, src/tgbatest/explicit.test: New files.
      80dd0ae1