Initial code for TGBA (Transition Generalized Bchi Automata).

Contains tgba_bdd, a BDD-encoded TGBA, and ltl_to_tgba,
a LTL-to-TGBA translator using Couvreur's algorithm.

* src/Makefile.am (SUBDIRS): Add tgba.
(libspot_la_LIBADD): Add tgba/libtgba.la.
* src/tgba/Makefile.am, src/tgba/bddfactory.cc,
src/tgba/bddfactory.hh, src/tgba/dictunion.cc,
src/tgba/dictunion.hh, src/tgba/ltl2tgba.cc, src/tgba/ltl2tgba.hh,
src/tgba/state.hh, src/tgba/statebdd.cc, src/tgba/statebdd.hh,
src/tgba/succiter.hh, src/tgba/succiterconcrete.cc,
src/tgba/succiterconcrete.hh, src/tgba/succlist.hh,
src/tgba/tgba.hh, src/tgba/tgbabddconcrete.cc,
src/tgba/tgbabddconcrete.hh, src/tgba/tgbabddconcretefactory.cc,
src/tgba/tgbabddconcretefactory.hh,
src/tgba/tgbabddconcreteproduct.cc,
src/tgba/tgbabddconcreteproduct.hh, src/tgba/tgbabddcoredata.cc,
src/tgba/tgbabddcoredata.hh, src/tgba/tgbabdddict.cc,
src/tgba/tgbabdddict.hh, src/tgba/tgbabddfactory.hh,
src/tgba/tgbabddtranslatefactory.cc,
src/tgba/tgbabddtranslatefactory.hh: New files.
This commit is contained in:
Alexandre Duret-Lutz 2003-05-26 11:17:40 +00:00
parent 5100c197a2
commit c03934140f
32 changed files with 1263 additions and 2 deletions

View file

@ -0,0 +1,84 @@
#include "tgbabddconcretefactory.hh"
namespace spot
{
tgba_bdd_concrete_factory::~tgba_bdd_concrete_factory()
{
}
int
tgba_bdd_concrete_factory::create_state(const ltl::formula* f)
{
// Do not build a state that already exists.
tgba_bdd_dict::fv_map::iterator sii = dict_.now_map.find(f);
if (sii != dict_.now_map.end())
return sii->second;
int num = create_pair();
dict_.now_map[f] = num;
dict_.now_formula_map[num] = f;
// Record that num+1 should be renamed as num when
// the next state becomes current.
bdd_setpair(data_.next_to_now, num + 1, num);
// Keep track of all "Now" variables for easy
// existential quantification.
data_.declare_now_next (ithvar(num), ithvar(num + 1));
return num;
}
int
tgba_bdd_concrete_factory::create_atomic_prop(const ltl::formula* f)
{
// Do not build a variable that already exists.
tgba_bdd_dict::fv_map::iterator sii = dict_.var_map.find(f);
if (sii != dict_.var_map.end())
return sii->second;
int num = create_node();
dict_.var_map[f] = num;
dict_.var_formula_map[num] = f;
// Keep track of all atomic proposition for easy
// existential quantification.
data_.declare_atomic_prop(ithvar(num));
return num;
}
int
tgba_bdd_concrete_factory::create_promise(const ltl::formula* f)
{
// Do not build a promise that already exists.
tgba_bdd_dict::fv_map::iterator sii = dict_.prom_map.find(f);
if (sii != dict_.prom_map.end())
return sii->second;
int num = create_node();
dict_.prom_map[f] = num;
dict_.prom_formula_map[num] = f;
// Keep track of all promises for easy existential quantification.
data_.declare_promise(ithvar(num));
return num;
}
const tgba_bdd_core_data&
tgba_bdd_concrete_factory::get_core_data() const
{
return data_;
}
const tgba_bdd_dict&
tgba_bdd_concrete_factory::get_dict() const
{
return dict_;
}
void
tgba_bdd_concrete_factory::add_relation(bdd new_rel)
{
data_.relation &= new_rel;
}
}