mirror of
https://github.com/Z3Prover/z3
synced 2025-04-08 10:25:18 +00:00
fixing handling of arrays
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
361e9039bb
commit
67485b8af7
|
@ -1809,11 +1809,12 @@ namespace pdr {
|
|||
|
||||
n.set_rule(&r);
|
||||
|
||||
IF_VERBOSE(3, verbose_stream() << "Model:\n";
|
||||
model_smt2_pp(verbose_stream(), m, *M, 0);
|
||||
verbose_stream() << "\n";
|
||||
verbose_stream() << "Transition:\n" << mk_pp(T, m) << "\n";
|
||||
verbose_stream() << "Phi:\n" << mk_pp(phi, m) << "\n";);
|
||||
TRACE("pdr",
|
||||
tout << "Model:\n";
|
||||
model_smt2_pp(tout, m, *M, 0);
|
||||
tout << "\n";
|
||||
tout << "Transition:\n" << mk_pp(T, m) << "\n";
|
||||
tout << "Phi:\n" << mk_pp(phi, m) << "\n";);
|
||||
|
||||
model_evaluator mev(m);
|
||||
expr_ref_vector mdl(m), forms(m), Phi(m);
|
||||
|
@ -1843,19 +1844,21 @@ namespace pdr {
|
|||
qe_lite qe(m);
|
||||
expr_ref phi1 = m_pm.mk_and(Phi);
|
||||
qe(vars, phi1);
|
||||
TRACE("pdr", tout << "Eliminated\n" << mk_pp(phi1, m) << "\n";);
|
||||
if (!use_model_generalizer) {
|
||||
reduce_disequalities(*M, 3, phi1);
|
||||
TRACE("pdr", tout << "Reduced-eq\n" << mk_pp(phi1, m) << "\n";);
|
||||
}
|
||||
get_context().get_rewriter()(phi1);
|
||||
|
||||
IF_VERBOSE(2,
|
||||
verbose_stream() << "Vars:\n";
|
||||
for (unsigned i = 0; i < vars.size(); ++i) {
|
||||
verbose_stream() << mk_pp(vars[i].get(), m) << "\n";
|
||||
}
|
||||
verbose_stream() << "Literals\n";
|
||||
verbose_stream() << mk_pp(m_pm.mk_and(Phi), m) << "\n";
|
||||
verbose_stream() << "Reduced\n" << mk_pp(phi1, m) << "\n";);
|
||||
TRACE("pdr",
|
||||
tout << "Vars:\n";
|
||||
for (unsigned i = 0; i < vars.size(); ++i) {
|
||||
tout << mk_pp(vars[i].get(), m) << "\n";
|
||||
}
|
||||
tout << "Literals\n";
|
||||
tout << mk_pp(m_pm.mk_and(Phi), m) << "\n";
|
||||
tout << "Reduced\n" << mk_pp(phi1, m) << "\n";);
|
||||
|
||||
if (!vars.empty()) {
|
||||
// also fresh names for auxiliary variables in body?
|
||||
|
@ -1870,7 +1873,7 @@ namespace pdr {
|
|||
if (!rep) rep = mk_expr_simp_replacer(m);
|
||||
rep->set_substitution(&sub);
|
||||
(*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();
|
||||
datalog::flatten_and(phi1, Phi);
|
||||
|
|
|
@ -536,7 +536,7 @@ namespace pdr {
|
|||
if (!node.get_model_ptr()) {
|
||||
return;
|
||||
}
|
||||
m_current_rule = &pt.find_rule(node.get_model());
|
||||
m_current_rule = node.get_rule();
|
||||
m_current_pt = &pt;
|
||||
m_current_node = &node;
|
||||
if (!m_current_rule) {
|
||||
|
|
|
@ -238,11 +238,13 @@ namespace pdr {
|
|||
result.push_back(m.mk_not(e));
|
||||
}
|
||||
}
|
||||
#if 0
|
||||
select_elim_star select_elim(m, m_model);
|
||||
for (unsigned i = 0; i < result.size(); ++i) {
|
||||
select_elim(result[i].get(), tmp);
|
||||
result[i] = tmp;
|
||||
}
|
||||
#endif
|
||||
reset();
|
||||
TRACE("pdr",
|
||||
tout << "minimized model:\n";
|
||||
|
|
Loading…
Reference in a new issue