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:
parent
5100c197a2
commit
c03934140f
32 changed files with 1263 additions and 2 deletions
84
src/tgba/tgbabddconcretefactory.cc
Normal file
84
src/tgba/tgbabddconcretefactory.cc
Normal 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;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue