|
Public Member Functions |
| emptiness_check (const tgba *a) |
| ~emptiness_check () |
bool | check () |
void | counter_example () |
| Compute a counter example if tgba_emptiness_check() returned false.
|
std::ostream & | print_result (std::ostream &os, const tgba *restrict=0) const |
Private Types |
typedef std::list< const
state * > | state_sequence |
typedef std::pair< const
state *, bdd > | state_proposition |
typedef std::list< state_proposition > | cycle_path |
typedef Sgi::hash_map< const
state *, int, state_ptr_hash,
state_ptr_equal > | hash_type |
Private Member Functions |
const state * | h_filt (const state *s) const |
| Return a state which is equal to s, but is in h , and free s if it is different. Doing so simplify memory management, because we don't have to track which state need to be kept or deallocated: all key in h should last for the whole life of the emptiness_check.
|
void | remove_component (const state *start_delete) |
| Remove a strongly component from the hash.
|
void | accepting_path (const connected_component_set &scc, const state *start, bdd acc_to_traverse) |
void | complete_cycle (const connected_component_set &scc, const state *from, const state *to) |
Private Attributes |
const tgba * | aut_ |
std::stack< connected_component > | root |
state_sequence | suffix |
cycle_path | period |
hash_type | h |
| Map of visited states.
|
This is based on the following paper.
@InProceedings{couvreur.99.fm,
author = {Jean-Michel Couvreur},
title = {On-the-fly Verification of Temporal Logic},
pages = {253--271},
editor = {Jeannette M. Wing and Jim Woodcock and Jim Davies},
booktitle = {Proceedings of the World Congress on Formal Methods in
the Development of Computing Systems (FM'99)},
publisher = {Springer-Verlag},
series = {Lecture Notes in Computer Science},
volume = {1708},
year = {1999},
address = {Toulouse, France},
month = {September},
isbn = {3-540-66587-0}
}