LydiaSyft
SymbolicStateDfa.h
1 #ifndef SYMBOLIC_STATE_DFA_H
2 #define SYMBOLIC_STATE_DFA_H
3 
4 #include <memory>
5 #include <vector>
6 
7 #include <cuddObj.hh>
8 
9 #include "ExplicitStateDfaAdd.h"
10 
11 namespace Syft {
12 
19  private:
20 
21  std::shared_ptr<VarMgr> var_mgr_;
22  std::size_t automaton_id_;
23 
24  std::vector<int> initial_state_;
25  CUDD::BDD final_states_;
26  std::vector<CUDD::BDD> transition_function_;
27 
28  SymbolicStateDfa(std::shared_ptr<VarMgr> var_mgr);
29 
30  static std::pair<std::size_t, std::size_t> create_state_variables(
31  std::shared_ptr<VarMgr> &mgr,
32  std::size_t state_count);
33 
34  static CUDD::BDD state_to_bdd(const std::shared_ptr<VarMgr> &mgr,
35  std::size_t automaton_id,
36  std::size_t state);
37 
38  static CUDD::BDD state_set_to_bdd(
39  const std::shared_ptr<VarMgr> &mgr,
40  std::size_t automaton_id,
41  const std::vector<size_t> &states);
42 
43  static std::vector<CUDD::BDD> symbolic_transition_function(
44  const std::shared_ptr<VarMgr> &mgr,
45  std::size_t automaton_id,
46  const std::vector<CUDD::ADD> &transition_function);
47 
48  public:
49 
50 
61  static SymbolicStateDfa from_explicit(const ExplicitStateDfaAdd &explicit_dfa);
62 
74  static SymbolicStateDfa from_predicates(std::shared_ptr<VarMgr> var_mgr,
75  std::vector<CUDD::BDD> predicates);
76 
80  std::shared_ptr<VarMgr> var_mgr() const;
81 
88  std::size_t automaton_id() const;
89 
93  std::vector<int> initial_state() const;
94 
98  CUDD::BDD initial_state_bdd() const;
99 
103  CUDD::BDD final_states() const;
104 
111  std::vector<CUDD::BDD> transition_function() const;
112 
121  void restrict_dfa_with_states(const CUDD::BDD &valid_states);
122 
129  void restrict_dfa_with_transitions(const CUDD::BDD &feasible_moves);
130 
139  void dump_dot(const std::string &filename) const;
140 
148  static SymbolicStateDfa product_AND(const std::vector<SymbolicStateDfa> &dfa_vector);
149 
157  static std::vector<int> state_to_binary(std::size_t state,
158  std::size_t bit_count);
159 
165  void new_sink_states(const CUDD::BDD &sink_states);
166 
174  static SymbolicStateDfa product_OR(const std::vector<SymbolicStateDfa> &dfa_vector);
175 
182  static SymbolicStateDfa complement(const SymbolicStateDfa dfa);
183  };
184 
185 }
186 
187 #endif // SYMBOLIC_STATE_DFA_H
A DFA with explicit states and symbolic transitions represented in ADDs.
Definition: ExplicitStateDfaAdd.h:18
A DFA with symbolic states and transitions.
Definition: SymbolicStateDfa.h:18
CUDD::BDD final_states() const
Returns the BDD encoding the set of final states.
Definition: SymbolicStateDfa.cpp:135
std::size_t automaton_id() const
Returns the automaton ID.
Definition: SymbolicStateDfa.cpp:123
static std::vector< int > state_to_binary(std::size_t state, std::size_t bit_count)
Returns the binary encoding of a given state index.
Definition: SymbolicStateDfa.cpp:27
static SymbolicStateDfa product_OR(const std::vector< SymbolicStateDfa > &dfa_vector)
Returns a product AND of two symbolic DFAs.
Definition: SymbolicStateDfa.cpp:245
void restrict_dfa_with_states(const CUDD::BDD &valid_states)
Restrict a symbolic DFA with a given set of states.
Definition: SymbolicStateDfa.cpp:143
std::vector< CUDD::BDD > transition_function() const
Returns the transition function of the DFA as a vector of BDDs.
Definition: SymbolicStateDfa.cpp:139
std::vector< int > initial_state() const
Returns the bitvector representing the initial state of the DFA.
Definition: SymbolicStateDfa.cpp:127
void new_sink_states(const CUDD::BDD &sink_states)
Shrink a set of states to a sink state.
Definition: SymbolicStateDfa.cpp:233
static SymbolicStateDfa complement(const SymbolicStateDfa dfa)
Returns the complement of a symbolic DFA.
Definition: SymbolicStateDfa.cpp:283
CUDD::BDD initial_state_bdd() const
Returns the BDD representing the initial state of the DFA.
Definition: SymbolicStateDfa.cpp:131
static SymbolicStateDfa product_AND(const std::vector< SymbolicStateDfa > &dfa_vector)
Returns a product AND of two symbolic DFAs.
Definition: SymbolicStateDfa.cpp:196
static SymbolicStateDfa from_predicates(std::shared_ptr< VarMgr > var_mgr, std::vector< CUDD::BDD > predicates)
Creates a simple automaton that remembers the value of predicates.
Definition: SymbolicStateDfa.cpp:179
void restrict_dfa_with_transitions(const CUDD::BDD &feasible_moves)
Restrict a symbolic DFA with a set of feasible moves.
Definition: SymbolicStateDfa.cpp:154
static SymbolicStateDfa from_explicit(const ExplicitStateDfaAdd &explicit_dfa)
Converts an explicit DFA to a symbolic representation.
Definition: SymbolicStateDfa.cpp:92
void dump_dot(const std::string &filename) const
Saves the symbolic representation of the DFA in a .dot file.
Definition: SymbolicStateDfa.cpp:162
std::shared_ptr< VarMgr > var_mgr() const
Returns the variable manager.
Definition: SymbolicStateDfa.cpp:119