3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-08 10:25:18 +00:00
This commit is contained in:
Nikolaj Bjorner 2020-12-08 12:08:07 -08:00
parent 9b9d906702
commit 43ddb08332

View file

@ -495,14 +495,16 @@ namespace datalog {
return;
}
TRACE("dl",
r->display(m_context, tout << "rule ");
tout << "pair: " << mk_pp(t1, m) << " " << mk_pp(t2, m) << "\n";
tout << mk_pp(t_new, m) << "\n";
tout << "all-non-local: " << m_costs[pair_key]->m_all_nonlocal_vars << "\n";
for (app* a : rule_content) tout << mk_pp(a, m) << " "; tout << "\n";);
tout << mk_pp(r->get_head(), m) << " :-\n";
for (app* a : rule_content) tout << " " << mk_pp(a, m) << "\n";);
rule_counter counter;
counter.count_rule_vars(r, 1);
for (app* t : rule_content)
counter.count_vars(t, +1);
counter.count_vars(r->get_head(), +1);
func_decl * t1_pred = t1->get_decl();
func_decl * t2_pred = t2->get_decl();
@ -516,7 +518,6 @@ namespace datalog {
var_idx_set rt1_vars = rm.collect_vars(rt1);
counter.count_vars(rt1, -1);
var_idx_set t1_vars = rm.collect_vars(t1);
unsigned i2start = (t1_pred == t2_pred) ? (i1+1) : 0;
for (unsigned i2 = i2start; i2 < len; i2++) {
@ -533,7 +534,6 @@ namespace datalog {
reverse_renaming(normalizer, denormalizer);
expr_ref new_transf(m);
new_transf = m_var_subst(t_new, denormalizer);
var_idx_set transf_vars = rm.collect_vars(new_transf);
TRACE("dl", tout << mk_pp(rt1, m) << " " << mk_pp(rt2, m) << " -> " << new_transf << "\n";);
counter.count_vars(rt2, -1);
var_idx_set rt2_vars = rm.collect_vars(rt2);
@ -551,11 +551,13 @@ namespace datalog {
denormalizer.reset();
reverse_renaming(normalizer2, denormalizer);
new_transf = m_var_subst(t_new, denormalizer);
SASSERT(non_local_vars.subset_of(rm.collect_vars(new_transf)));
TRACE("dl", tout << mk_pp(rt2, m) << " " << mk_pp(rt1, m) << " -> " << new_transf << "\n";);
SASSERT(non_local_vars.subset_of(rm.collect_vars(new_transf)));
}
app * new_lit = to_app(new_transf);
if (added_tails.contains(new_lit)) {
if (i1 < i2)
std::swap(i1, i2);
if (i1 < rule_content.size())
rule_content[i1] = rule_content.back();
rule_content.pop_back();
@ -565,6 +567,7 @@ namespace datalog {
len -= 2;
removed_tails.push_back(rt1);
removed_tails.push_back(rt2);
counter.count_vars(new_lit, -1);
}
else {
m_pinned.push_back(new_lit);