51 const vector<pda_alpha>& get_local()
const {
71 os <<
"(" << s.get_state() << prop::SHARED_LOCAL_DELIMITER;
72 if (s.get_local().size() > 0) {
73 if (s.get_local()[0] == alphabet::EPSILON)
74 os << alphabet::OPT_EPSILON;
76 os << s.get_local()[0];
78 for (uint i = 1; i < s.get_local().size(); ++i) {
80 if (s.get_local()[i] == alphabet::EPSILON)
81 os << alphabet::OPT_EPSILON;
83 os << s.get_local()[i];
96 if (s1.get_state() == s2.get_state()) {
99 return s1.get_state() < s2.get_state();
119 if (s1.get_state() == s2.get_state()) {
169 os <<
"(" << c.get_state() << prop::SHARED_LOCAL_DELIMITER;
170 if (c.get_stacks().size() > 0)
171 os << c.get_stacks()[0];
172 for (uint i = 1; i < c.get_stacks().size(); ++i)
173 os << prop::THREAD_DELIMITER << c.get_stacks()[i];
185 return g1.
top() < g2.
top();
205 if (g1.get_state() == g2.get_state()) {
206 auto iw1 = g1.get_stacks().cbegin();
207 auto iw2 = g2.get_stacks().cbegin();
208 while (iw1 != g1.get_stacks().cend()) {
245 ctx_bound get_context_k()
const {
249 void set_context_k(
const ctx_bound& k) {
253 id_thread get_thread_id()
const {
271 if (c.get_thread_id() == c.get_stacks().size())
274 os <<
"t=" << c.get_thread_id() <<
" ";
275 os <<
"<" << c.get_state() << prop::SHARED_LOCAL_DELIMITER;
276 if (c.get_stacks().size() > 0)
277 os << c.get_stacks()[0];
278 for (uint i = 1; i < c.get_stacks().size(); ++i)
279 os << prop::THREAD_DELIMITER << c.get_stacks()[i];
292 return g1.
top() < g2.
top();
314 if (g1.get_state() == g2.get_state()) {
315 auto iw1 = g1.get_stacks().cbegin();
316 auto iw2 = g2.get_stacks().cbegin();
317 while (iw1 != g1.get_stacks().cend()) {
356 const fsa_state& accept);
361 static fsa_state interm_s;
380 const vector<store_automaton>& get_automata()
const {
388 vector<store_automaton> W;
398 os <<
"<" << c.get_state() <<
"|";
399 if (c.get_automata().size() > 0) {
400 for (uint i = 0; i < c.get_automata().size() - 1; ++i) {
401 os <<
"A" << i <<
",";
403 os <<
"A" << c.get_automata().size() - 1 <<
">\n";
404 for (uint i = 0; i < c.get_automata().size(); ++i) {
406 os <<
"A" << i <<
": " << c.get_automata()[i] <<
"\n";
415 using finite_machine = map<thread_visible_state, deque<transition<thread_visible_state, thread_visible_state>>>;
424 CONVERGENT, DIVERGENT, REACHABLE, UNKNOWN
visible_state(const pda_state &s, const size_n &n)
Definition: cpda.cc:91
ushort size_n
the size of threads
Definition: cpda.hh:25
unordered_map< fsa_state, set< fsa_transition > > fsa_delta
the data structure of FSA transitions
Definition: fsa.hh:125
bool operator>(const visible_state &s1, const visible_state &s2)
Definition: cpda.hh:108
~symbolic_state()
Definition: cpda.cc:301
bool operator==(const visible_state &s1, const visible_state &s2)
Definition: cpda.hh:118
bool operator!=(const visible_state &s1, const visible_state &s2)
Definition: cpda.hh:131
ushort size_k
the size of context switches
Definition: cpda.hh:27
sequence
Definition: cpda.hh:423
static fsa_state create_interm_state()
Definition: cpda.cc:263
explicit_state_tid(const pda_state &s, const size_n &n)
Definition: cpda.cc:180
set< fsa_alpha > fsa_alphabet
a set of fsa_alpha
Definition: fsa.hh:20
store_automaton(const fsa_state_set &states, const fsa_alphabet &alphabet, const fsa_delta &transitions, const fsa_state_set &start, const fsa_state &accept)
Definition: cpda.cc:244
ostream & operator<<(ostream &os, const visible_state &s)
Definition: cpda.hh:70
uint pda_state
define the control state of PDSs
Definition: pda.hh:17
map< thread_visible_state, deque< transition< thread_visible_state, thread_visible_state > >> finite_machine
Definition: cpda.hh:415
bool operator<(const visible_state &s1, const visible_state &s2)
Definition: cpda.hh:95
explicit_state(const pda_state &s, const size_n &n)
Definition: cpda.cc:119
vector< pushdown_automaton > concurrent_pushdown_automata
Definition: cpda.hh:37
set< fsa_state > fsa_state_set
a set of fsa_state
Definition: fsa.hh:16
uint id_thread_state
thread id
Definition: cpda.hh:29
visible_state top()
Definition: cpda.cc:167
vector< finite_machine > concurrent_finite_machine
Concurrent finite machine: a vector of finite state machine.
Definition: cpda.hh:418
~explicit_state()
Definition: cpda.cc:147
vector< pda_stack > stack_vec
the set of stacks in CPDS
Definition: cpda.hh:40
symbolic_state(const pda_state &q, const vector< store_automaton > &W)
Definition: cpda.cc:281
static int compare(const vector< T > &v1, const vector< T > &v2)
Definition: utilities.hh:47
~visible_state()
Definition: cpda.cc:109
~store_automaton()
Definition: cpda.cc:253