3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-29 11:55:51 +00:00

fix bugs in model generation reported by Ken

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2012-10-29 14:53:42 -07:00
parent 6b2f31756b
commit 7553c3c86e
6 changed files with 24 additions and 11 deletions

View file

@ -422,11 +422,8 @@ namespace datalog {
bool mk_rule_inliner::transform_rule(rule * r0, rule_set& tgt) {
bool modified = false;
rule_ref_vector todo(m_rm);
todo.push_back(r0);
while (!todo.empty()) {
rule_ref r(todo.back(), m_rm);
todo.pop_back();
@ -458,6 +455,10 @@ namespace datalog {
}
}
}
if (modified) {
datalog::del_rule(m_mc, *r0);
}
return modified;
}
@ -476,6 +477,14 @@ namespace datalog {
something_done |= !inlining_allowed(pred) && transform_rule(r, tgt);
}
if (something_done && m_mc) {
for (rule_set::iterator rit = orig.begin(); rit!=rend; ++rit) {
if (inlining_allowed((*rit)->get_decl())) {
datalog::del_rule(m_mc, **rit);
}
}
}
return something_done;
}
@ -847,10 +856,10 @@ namespace datalog {
m_mc = hsmc.get();
m_pc = hpc.get();
plan_inlining(source);
scoped_ptr<rule_set> res = alloc(rule_set, m_context);
plan_inlining(source);
something_done = transform_rules(source, *res);
VERIFY(res->close()); //this transformation doesn't break the negation stratification
@ -861,7 +870,7 @@ namespace datalog {
}
params_ref const& params = m_context.get_params();
if (params.get_bool(":inline-linear", true) && inline_linear(res)) {
if (params.get_bool(":inline-linear", true) && inline_linear(res)) {
something_done = true;
}