3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-06 14:13:23 +00:00

Cleanup derivation::create_next_child

This commit is contained in:
Arie Gurfinkel 2018-06-04 12:34:14 -07:00
parent c5ff5ac2a1
commit da66ad6f80

View file

@ -191,8 +191,7 @@ void derivation::add_premise (pred_transformer &pt,
pob *derivation::create_first_child (model_evaluator_util &mev) pob *derivation::create_first_child (model_evaluator_util &mev) {
{
if (m_premises.empty()) { return nullptr; } if (m_premises.empty()) { return nullptr; }
m_active = 0; m_active = 0;
return create_next_child(mev); return create_next_child(mev);
@ -262,9 +261,8 @@ pob *derivation::create_next_child (model_evaluator_util &mev)
verbose_stream ()); verbose_stream ());
pt().mbp(vars, m_trans, mev.get_model(), pt().mbp(vars, m_trans, mev.get_model(),
true, pt().get_context().use_ground_cti()); true, pt().get_context().use_ground_cti());
//qe::reduce_array_selects (*mev.get_model (), m_trans);
// remember variables that need to be existentially quantified
m_evars.append (vars); m_evars.append (vars);
vars.reset();
} }
if (!mev.is_true (m_premises[m_active].get_summary())) { if (!mev.is_true (m_premises[m_active].get_summary())) {
@ -273,18 +271,17 @@ pob *derivation::create_next_child (model_evaluator_util &mev)
} }
// create the post condition by compute post-image over summaries // create the post-condition by computing a post-image over summaries
// that precede currently active premise // that precede currently active premise
vars.reset ();
for (unsigned i = m_active + 1; i < m_premises.size(); ++i) { for (unsigned i = m_active + 1; i < m_premises.size(); ++i) {
summaries.push_back (m_premises [i].get_summary ()); summaries.push_back (m_premises [i].get_summary ());
vars.append (m_premises [i].get_ovars ()); vars.append (m_premises [i].get_ovars ());
} }
summaries.push_back (m_trans); summaries.push_back (m_trans);
expr_ref post(m); expr_ref post(m);
post = mk_and(summaries); post = mk_and(summaries);
summaries.reset (); summaries.reset ();
if (!vars.empty()) { if (!vars.empty()) {
timeit _timer2(is_trace_enabled("spacer_timeit"), timeit _timer2(is_trace_enabled("spacer_timeit"),
"create_next_child::qproject2", "create_next_child::qproject2",
@ -295,6 +292,7 @@ pob *derivation::create_next_child (model_evaluator_util &mev)
// remember variables that need to be existentially quantified // remember variables that need to be existentially quantified
m_evars.append(vars); m_evars.append(vars);
vars.reset();
} }
if (!m_evars.empty()) { if (!m_evars.empty()) {
@ -649,6 +647,7 @@ void lemma::mk_insts(expr_ref_vector &out, expr* e)
} }
// ---------------- // ----------------
// pred_tansformer // pred_tansformer
@ -3633,8 +3632,8 @@ bool context::create_children(pob& n, datalog::rule const& r,
compute_implicant_literals (mev, forms, lits); compute_implicant_literals (mev, forms, lits);
expr_ref phi = mk_and (lits); expr_ref phi = mk_and (lits);
// primed variables of the head
// primed variables of the head
app_ref_vector vars(m); app_ref_vector vars(m);
for (unsigned i = 0, sz = pt.head()->get_arity(); i < sz; ++i) { for (unsigned i = 0, sz = pt.head()->get_arity(); i < sz; ++i) {
vars.push_back(m.mk_const(m_pm.o2n(pt.sig(i), 0))); vars.push_back(m.mk_const(m_pm.o2n(pt.sig(i), 0)));
@ -3643,9 +3642,8 @@ bool context::create_children(pob& n, datalog::rule const& r,
ptr_vector<app>& aux_vars = pt.get_aux_vars(r); ptr_vector<app>& aux_vars = pt.get_aux_vars(r);
vars.append(aux_vars.size(), aux_vars.c_ptr()); vars.append(aux_vars.size(), aux_vars.c_ptr());
n.get_skolems(vars);
n.get_skolems(vars);
// skolems of the pob // skolems of the pob
n.get_skolems(vars);
n.pt().mbp(vars, phi, mev.get_model (), true, use_ground_cti()); n.pt().mbp(vars, phi, mev.get_model (), true, use_ground_cti());
//qe::reduce_array_selects (*mev.get_model (), phi1); //qe::reduce_array_selects (*mev.get_model (), phi1);
@ -3666,10 +3664,10 @@ bool context::create_children(pob& n, datalog::rule const& r,
kid_order.resize(preds.size(), 0); kid_order.resize(preds.size(), 0);
for (unsigned i = 0, sz = preds.size(); i < sz; ++i) kid_order[i] = i; for (unsigned i = 0, sz = preds.size(); i < sz; ++i) kid_order[i] = i;
if (get_params().spacer_order_children() == 1) kid_order.reverse(); if (get_params().spacer_order_children() == 1) kid_order.reverse();
for (unsigned i = 0, sz = preds.size(); i < sz; ++i) { for (unsigned i = 0, sz = preds.size(); i < sz; ++i) {
unsigned j = kid_order[i]; unsigned j = kid_order[i];
pred_transformer &pt = get_pred_transformer(preds.get(j)); pred_transformer &pt = get_pred_transformer(preds.get(j));
const ptr_vector<app> *aux = nullptr; const ptr_vector<app> *aux = nullptr;