* src/tgbaalgos/dtbasat.cc: Skip clauses for trivial SCCs.

This commit is contained in:
Alexandre Duret-Lutz 2013-09-05 11:30:58 +02:00
parent 88cd81c547
commit 073334dfd6

View file

@ -250,6 +250,9 @@ namespace spot
{ {
d.prodid[state_pair(j, i)] = ++d.nvars; d.prodid[state_pair(j, i)] = ++d.nvars;
if (sm_.trivial(i_scc))
continue;
for (dict::state_map::const_iterator k2 = seen.begin(); for (dict::state_map::const_iterator k2 = seen.begin();
k2 != seen.end(); ++k2) k2 != seen.end(); ++k2)
{ {
@ -407,6 +410,10 @@ namespace spot
int q1 = pit->first.a; int q1 = pit->first.a;
int q1p = pit->first.b; int q1p = pit->first.b;
unsigned q1p_scc = sm.scc_of_state(d.int_to_state[q1p]);
if (!sm.trivial(q1p_scc))
{
dout << "(2) states Cand[" << q1 << "] and Ref[" << q1p dout << "(2) states Cand[" << q1 << "] and Ref[" << q1p
<< "] are 0-length paths\n"; << "] are 0-length paths\n";
path p(q1, q1p, q1, q1p); path p(q1, q1p, q1, q1p);
@ -414,6 +421,7 @@ namespace spot
out << -pit->second << " " << d.pathid_ref[p] << " 0\n"; out << -pit->second << " " << d.pathid_ref[p] << " 0\n";
out << -pit->second << " " << d.pathid_cand[p] << " 0\n"; out << -pit->second << " " << d.pathid_cand[p] << " 0\n";
nclauses += 2; nclauses += 2;
}
dout << "(3) augmenting paths based on Cand[" << q1 dout << "(3) augmenting paths based on Cand[" << q1
<< "] and Ref[" << q1p << "]\n"; << "] and Ref[" << q1p << "]\n";
@ -459,6 +467,8 @@ namespace spot
for (int q1p = 1; q1p <= ref_size; ++q1p) for (int q1p = 1; q1p <= ref_size; ++q1p)
{ {
unsigned q1p_scc = sm.scc_of_state(d.int_to_state[q1p]); unsigned q1p_scc = sm.scc_of_state(d.int_to_state[q1p]);
if (sm.trivial(q1p_scc))
continue;
for (int q2p = 1; q2p <= ref_size; ++q2p) for (int q2p = 1; q2p <= ref_size; ++q2p)
{ {
// We are only interested in transition that can form a // We are only interested in transition that can form a
@ -550,6 +560,8 @@ namespace spot
for (int q1p = 1; q1p <= ref_size; ++q1p) for (int q1p = 1; q1p <= ref_size; ++q1p)
{ {
unsigned q1p_scc = sm.scc_of_state(d.int_to_state[q1p]); unsigned q1p_scc = sm.scc_of_state(d.int_to_state[q1p]);
if (sm.trivial(q1p_scc))
continue;
for (int q2p = 1; q2p <= ref_size; ++q2p) for (int q2p = 1; q2p <= ref_size; ++q2p)
{ {
// We are only interested in transition that can form a // We are only interested in transition that can form a