Commit 77cef16c authored by Alexandre Duret-Lutz's avatar Alexandre Duret-Lutz
Browse files

dtgbasat: Improve handling of weaks SCC in the ref automaton

* src/tgbaalgos/dtgbasat.cc: Here.
parent 795c6e48
......@@ -31,6 +31,7 @@
#include "ltlenv/defaultenv.hh"
#include "misc/tmpfile.hh"
#include "misc/satsolver.hh"
#include "isweakscc.hh"
// If the following DEBUG macro is set to 1, the temporary files used
// to communicate with the SAT-solver will be left in the current
......@@ -373,6 +374,8 @@ namespace spot
int i = i2->second;
d.int_to_state[i] = i2->first;
unsigned i_scc = sm_.scc_of_state(i2->first);
bool is_weak = is_weak_scc(sm_, i_scc);
for (int j = 1; j <= d.cand_size; ++j)
{
for (dict::state_map::const_iterator k2 = seen.begin();
......@@ -382,12 +385,12 @@ namespace spot
if (sm_.scc_of_state(k2->first) != i_scc)
continue;
for (int l = 1; l <= d.cand_size; ++l)
{
size_t sfp = is_weak ? 1 : d.all_ref_acc.size();
for (size_t fp = 0; fp < sfp; ++fp)
{
size_t sf = d.all_cand_acc.size();
for (size_t f = 0; f < sf; ++f)
{
size_t sfp = d.all_ref_acc.size();
for (size_t fp = 0; fp < sfp; ++fp)
{
path p(j, i, l, k,
d.all_cand_acc[f],
......@@ -630,11 +633,14 @@ namespace spot
// cycle, so they must belong to the same SCC.
if (sm.scc_of_state(d.int_to_state[q2p]) != q1p_scc)
continue;
bool is_weak = is_weak_scc(sm, q1p_scc);
bool is_acc = sm.accepting(q1p_scc);
for (int q1 = 1; q1 <= d.cand_size; ++q1)
for (int q2 = 1; q2 <= d.cand_size; ++q2)
{
size_t sf = d.all_cand_acc.size();
size_t sfp = d.all_ref_acc.size();
size_t sfp = is_weak ? 1 : d.all_ref_acc.size();
for (size_t f = 0; f < sf; ++f)
for (size_t fp = 0; fp < sfp; ++fp)
{
......@@ -676,8 +682,10 @@ namespace spot
if (dp == q1p && q3 == q1) // (11,12) loop
{
bdd unio = curacc | d.all_ref_acc[fp];
if (unio != all_acc)
if ((!is_acc) ||
(!is_weak &&
(curacc |
d.all_ref_acc[fp]) != all_acc))
{
#if DEBUG
dout << "(11) " << p << " ∧ "
......@@ -771,7 +779,8 @@ namespace spot
bdd f2 = p.acc_cand |
d.all_cand_acc[f];
bdd f2p = p.acc_ref | curacc;
bdd f2p = is_weak ? bddfalse
: p.acc_ref | curacc;
path p2(p.src_cand, p.src_ref,
q3, dp, f2, f2p);
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment