mirror of
https://github.com/Z3Prover/z3
synced 2025-06-26 07:43:41 +00:00
Datalog: fix bug with the following 2 scenarios:
A(#x00) :- not B(). A() :- not B(). The first case can be further optimized, but committing this for correctness Signed-off-by: Nuno Lopes <a-nlopes@microsoft.com>
This commit is contained in:
parent
2444440edc
commit
5548ecc853
1 changed files with 10 additions and 0 deletions
|
@ -631,6 +631,16 @@ namespace datalog {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// add at least one column for the negative filter
|
||||||
|
if (pt_len != ut_len && filtered_res == execution_context::void_register) {
|
||||||
|
relation_signature & head_sig = m_reg_signatures[head_reg];
|
||||||
|
if (head_sig.empty()) {
|
||||||
|
make_full_relation(head_pred, m_reg_signatures[head_reg], filtered_res, acc);
|
||||||
|
} else {
|
||||||
|
make_add_unbound_column(r, 0, head_pred, filtered_res, head_sig[0], filtered_res, dealloc, acc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//enforce negative predicates
|
//enforce negative predicates
|
||||||
for (unsigned i = pt_len; i<ut_len; i++) {
|
for (unsigned i = pt_len; i<ut_len; i++) {
|
||||||
app * neg_tail = r->get_tail(i);
|
app * neg_tail = r->get_tail(i);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue