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:
parent
6b2f31756b
commit
7553c3c86e
6 changed files with 24 additions and 11 deletions
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue