unit_propagation: Correct a problem with multiple marks

* spot/twa/acc.cc: Don't create a conjunction of Inf with multiple marks
in unit_propagation.
This commit is contained in:
Florian Renkin 2020-04-16 22:08:07 +02:00
parent 8c48003943
commit 927ea7046b

View file

@ -2641,10 +2641,36 @@ namespace spot
while (find_unit_clause(result, conj, fin, mark)) while (find_unit_clause(result, conj, fin, mark))
{ {
acc_code init_code; acc_code init_code;
if (fin) if (fin)
init_code = acc_code::fin(mark); {
if (conj)
{
init_code = acc_code::t();
for (unsigned col : mark.sets())
init_code &= acc_code::fin({col});
} else
{
init_code = acc_code::f();
for (unsigned col : mark.sets())
init_code |= acc_code::fin({col});
}
}
else else
init_code = acc_code::inf(mark); {
if (conj)
{
init_code = acc_code::t();
for (unsigned col : mark.sets())
init_code &= acc_code::inf({col});
}
else
{
init_code = acc_code::f();
for (unsigned col : mark.sets())
init_code |= acc_code::inf({col});
}
}
if (conj) if (conj)
result = init_code & result.remove(mark, fin == conj); result = init_code & result.remove(mark, fin == conj);
else else