3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-07-20 19:32:04 +00:00

fixing handling of arrays

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2012-12-03 08:29:28 -08:00
parent 361e9039bb
commit 67485b8af7
3 changed files with 20 additions and 15 deletions

View file

@ -1809,11 +1809,12 @@ namespace pdr {
n.set_rule(&r); n.set_rule(&r);
IF_VERBOSE(3, verbose_stream() << "Model:\n"; TRACE("pdr",
model_smt2_pp(verbose_stream(), m, *M, 0); tout << "Model:\n";
verbose_stream() << "\n"; model_smt2_pp(tout, m, *M, 0);
verbose_stream() << "Transition:\n" << mk_pp(T, m) << "\n"; tout << "\n";
verbose_stream() << "Phi:\n" << mk_pp(phi, m) << "\n";); tout << "Transition:\n" << mk_pp(T, m) << "\n";
tout << "Phi:\n" << mk_pp(phi, m) << "\n";);
model_evaluator mev(m); model_evaluator mev(m);
expr_ref_vector mdl(m), forms(m), Phi(m); expr_ref_vector mdl(m), forms(m), Phi(m);
@ -1843,19 +1844,21 @@ namespace pdr {
qe_lite qe(m); qe_lite qe(m);
expr_ref phi1 = m_pm.mk_and(Phi); expr_ref phi1 = m_pm.mk_and(Phi);
qe(vars, phi1); qe(vars, phi1);
TRACE("pdr", tout << "Eliminated\n" << mk_pp(phi1, m) << "\n";);
if (!use_model_generalizer) { if (!use_model_generalizer) {
reduce_disequalities(*M, 3, phi1); reduce_disequalities(*M, 3, phi1);
TRACE("pdr", tout << "Reduced-eq\n" << mk_pp(phi1, m) << "\n";);
} }
get_context().get_rewriter()(phi1); get_context().get_rewriter()(phi1);
IF_VERBOSE(2, TRACE("pdr",
verbose_stream() << "Vars:\n"; tout << "Vars:\n";
for (unsigned i = 0; i < vars.size(); ++i) { for (unsigned i = 0; i < vars.size(); ++i) {
verbose_stream() << mk_pp(vars[i].get(), m) << "\n"; tout << mk_pp(vars[i].get(), m) << "\n";
} }
verbose_stream() << "Literals\n"; tout << "Literals\n";
verbose_stream() << mk_pp(m_pm.mk_and(Phi), m) << "\n"; tout << mk_pp(m_pm.mk_and(Phi), m) << "\n";
verbose_stream() << "Reduced\n" << mk_pp(phi1, m) << "\n";); tout << "Reduced\n" << mk_pp(phi1, m) << "\n";);
if (!vars.empty()) { if (!vars.empty()) {
// also fresh names for auxiliary variables in body? // also fresh names for auxiliary variables in body?
@ -1870,7 +1873,7 @@ namespace pdr {
if (!rep) rep = mk_expr_simp_replacer(m); if (!rep) rep = mk_expr_simp_replacer(m);
rep->set_substitution(&sub); rep->set_substitution(&sub);
(*rep)(phi1); (*rep)(phi1);
IF_VERBOSE(2, verbose_stream() << "Projected:\n" << mk_pp(phi1, m) << "\n";); TRACE("pdr", tout << "Projected:\n" << mk_pp(phi1, m) << "\n";);
} }
Phi.reset(); Phi.reset();
datalog::flatten_and(phi1, Phi); datalog::flatten_and(phi1, Phi);

View file

@ -536,7 +536,7 @@ namespace pdr {
if (!node.get_model_ptr()) { if (!node.get_model_ptr()) {
return; return;
} }
m_current_rule = &pt.find_rule(node.get_model()); m_current_rule = node.get_rule();
m_current_pt = &pt; m_current_pt = &pt;
m_current_node = &node; m_current_node = &node;
if (!m_current_rule) { if (!m_current_rule) {

View file

@ -238,11 +238,13 @@ namespace pdr {
result.push_back(m.mk_not(e)); result.push_back(m.mk_not(e));
} }
} }
#if 0
select_elim_star select_elim(m, m_model); select_elim_star select_elim(m, m_model);
for (unsigned i = 0; i < result.size(); ++i) { for (unsigned i = 0; i < result.size(); ++i) {
select_elim(result[i].get(), tmp); select_elim(result[i].get(), tmp);
result[i] = tmp; result[i] = tmp;
} }
#endif
reset(); reset();
TRACE("pdr", TRACE("pdr",
tout << "minimized model:\n"; tout << "minimized model:\n";