spot 2.13
|
An infinite word stored as a lasso. More...
#include <spot/twaalgos/word.hh>
Public Types | |
typedef std::list< bdd > | seq_t |
Public Member Functions | |
twa_word (const bdd_dict_ptr &dict) noexcept | |
twa_word (const twa_run_ptr &run) noexcept | |
void | simplify () |
Simplify a lasso-shaped word. More... | |
void | use_all_aps (bdd aps, bool positive=false) |
Use all atomic proposition. More... | |
bdd_dict_ptr | get_dict () const |
twa_graph_ptr | as_automaton () const |
Convert the twa_word as an automaton. More... | |
bool | intersects (const_twa_ptr aut) const |
Check if a the twa_word intersect another automaton. More... | |
Public Attributes | |
seq_t | prefix |
seq_t | cycle |
Friends | |
std::ostream & | operator<< (std::ostream &os, const twa_word &w) |
Print a twa_word. More... | |
An infinite word stored as a lasso.
This is not exactly a word in the traditional sense because we use boolean formulas instead of letters. So technically a twa_word can represent a set of words.
This class only represent lasso-shaped words using two list of BDDs: one list of the prefix, one list for the cycle.
twa_graph_ptr spot::twa_word::as_automaton | ( | ) | const |
|
inline |
void spot::twa_word::simplify | ( | ) |
Simplify a lasso-shaped word.
The simplified twa_word may represent a subset of the actual words represented by the original twa_word. The typical use-case is that a counterexample generated by an emptiness-check was converted into a twa_word (maybe accepting several words) and we want to present a simpler word as a counterexample to the user. ltlcross does that, for instance.
This method performs three reductions:
void spot::twa_word::use_all_aps | ( | bdd | aps, |
bool | positive = false |
||
) |
Use all atomic proposition.
Make sure each letters actually use all variables in aps. By default, missing variables are introduced as negative, but setting positive to true will reverse that.
|
friend |
Print a twa_word.
Words are printed as
where BF denote Boolean Formulas. The prefix part (before cycle{...}) can be empty. The cycle part (inside cycle{...}) may not be empty.