3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-09-05 17:47:41 +00:00

have free variable utility use a class for more efficient re-use

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2014-09-15 16:14:22 -07:00
parent 73070585b8
commit c09903288f
39 changed files with 300 additions and 303 deletions

View file

@ -294,7 +294,7 @@ namespace datalog {
if (m_simplifier.transform_rule(new_rules.last(), new_rule)) {
if (r.get_proof()) {
scoped_proof _sc(m);
r.to_formula(fml1);
rm.to_formula(r, fml1);
p = m.mk_rewrite(fml1, fml2);
p = m.mk_modus_ponens(r.get_proof(), p);
new_rule->set_proof(m, p);

View file

@ -225,7 +225,6 @@ namespace datalog {
mk_interp_tail_simplifier m_simplifier;
bit_blaster_rewriter m_blaster;
expand_mkbv m_rewriter;
bool blast(rule *r, expr_ref& fml) {
proof_ref pr(m);
@ -235,7 +234,7 @@ namespace datalog {
if (!m_simplifier.transform_rule(r, r2)) {
r2 = r;
}
r2->to_formula(fml1);
m_context.get_rule_manager().to_formula(*r2.get(), fml1);
m_blaster(fml1, fml2, pr);
m_rewriter(fml2, fml3);
TRACE("dl", tout << mk_pp(fml, m) << " -> " << mk_pp(fml2, m) << " -> " << mk_pp(fml3, m) << "\n";);
@ -274,7 +273,7 @@ namespace datalog {
m_rewriter.m_cfg.set_dst(result);
for (unsigned i = 0; !m_context.canceled() && i < sz; ++i) {
rule * r = source.get_rule(i);
r->to_formula(fml);
rm.to_formula(*r, fml);
if (blast(r, fml)) {
proof_ref pr(m);
if (r->get_proof()) {

View file

@ -134,9 +134,9 @@ namespace datalog {
is_neg.push_back(false);
res = rm.mk(head, tail.size(), tail.c_ptr(), is_neg.c_ptr(), tgt->name());
if (m_ctx.generate_proof_trace()) {
src.to_formula(fml1);
tgt->to_formula(fml2);
res->to_formula(fml);
rm.to_formula(src, fml1);
rm.to_formula(*tgt.get(),fml2);
rm.to_formula(*res.get(),fml);
#if 0
sort* ps = m.mk_proof_sort();
sort* domain[3] = { ps, ps, m.mk_bool_sort() };

View file

@ -238,7 +238,7 @@ namespace datalog {
proof* p1 = r.get_proof();
for (unsigned i = 0; i < added_rules.get_num_rules(); ++i) {
rule* r2 = added_rules.get_rule(i);
r2->to_formula(fml);
rm.to_formula(*r2, fml);
pr = m.mk_modus_ponens(m.mk_def_axiom(m.mk_implies(m.get_fact(p1), fml)), p1);
r2->set_proof(m, pr);
}

View file

@ -179,7 +179,7 @@ namespace datalog {
if (m_context.generate_proof_trace()) {
expr_ref_vector s1 = m_unifier.get_rule_subst(tgt, true);
expr_ref_vector s2 = m_unifier.get_rule_subst(src, false);
datalog::resolve_rule(tgt, src, tail_index, s1, s2, *res.get());
datalog::resolve_rule(m_rm, tgt, src, tail_index, s1, s2, *res.get());
}
return true;
}

View file

@ -37,10 +37,10 @@ namespace datalog {
void mk_separate_negated_tails::get_private_vars(rule const& r, unsigned j) {
m_vars.reset();
m_fv.reset();
get_free_vars(r.get_head(), m_fv);
m_fv(r.get_head());
for (unsigned i = 0; i < r.get_tail_size(); ++i) {
if (i != j) {
get_free_vars(r.get_tail(i), m_fv);
m_fv.accumulate(r.get_tail(i));
}
}
@ -49,7 +49,7 @@ namespace datalog {
expr* v = p->get_arg(i);
if (is_var(v)) {
unsigned idx = to_var(v)->get_idx();
if (idx >= m_fv.size() || !m_fv[idx]) {
if (!m_fv.contains(idx)) {
m_vars.push_back(v);
}
}

View file

@ -42,7 +42,7 @@ namespace datalog {
rule_manager& rm;
context & m_ctx;
ptr_vector<expr> m_vars;
ptr_vector<sort> m_fv;
expr_free_vars m_fv;
bool has_private_vars(rule const& r, unsigned j);
void get_private_vars(rule const& r, unsigned j);

View file

@ -120,7 +120,7 @@ namespace datalog {
obj_map<rule, rule*>::iterator end = m_rule2slice.end();
expr_ref fml(m);
for (; it != end; ++it) {
it->m_value->to_formula(fml);
rm.to_formula(*it->m_value, fml);
m_pinned_exprs.push_back(fml);
TRACE("dl",
tout << "orig: " << mk_pp(fml, m) << "\n";
@ -238,7 +238,7 @@ namespace datalog {
r3->display(m_ctx, tout << "res:"););
r1 = r3;
}
r1->to_formula(concl);
rm.to_formula(*r1.get(), concl);
proof* new_p = m.mk_hyper_resolve(premises.size(), premises.c_ptr(), concl, positions, substs);
m_pinned_exprs.push_back(new_p);
m_pinned_rules.push_back(r1.get());
@ -676,10 +676,10 @@ namespace datalog {
}
void mk_slice::add_free_vars(uint_set& result, expr* e) {
ptr_vector<sort> sorts;
get_free_vars(e, sorts);
for (unsigned i = 0; i < sorts.size(); ++i) {
if (sorts[i]) {
expr_free_vars fv;
fv(e);
for (unsigned i = 0; i < fv.size(); ++i) {
if (fv[i]) {
result.insert(i);
}
}
@ -773,14 +773,11 @@ namespace datalog {
init_vars(r);
app_ref_vector tail(m);
app_ref head(m);
ptr_vector<sort> sorts;
update_predicate(r.get_head(), head);
get_free_vars(head.get(), sorts);
for (unsigned i = 0; i < r.get_uninterpreted_tail_size(); ++i) {
app_ref t(m);
update_predicate(r.get_tail(i), t);
tail.push_back(t);
get_free_vars(t, sorts);
}
expr_ref_vector conjs = get_tail_conjs(r);

View file

@ -43,7 +43,7 @@ namespace datalog {
m_unify.apply(r, tail_idx, r2, new_rule)) {
expr_ref_vector s1 = m_unify.get_rule_subst(r, true);
expr_ref_vector s2 = m_unify.get_rule_subst(r2, false);
resolve_rule(r, r2, tail_idx, s1, s2, *new_rule.get());
resolve_rule(rm, r, r2, tail_idx, s1, s2, *new_rule.get());
expand_tail(*new_rule.get(), tail_idx+r2.get_uninterpreted_tail_size(), src, dst);
}
}