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:
parent
361e9039bb
commit
67485b8af7
3 changed files with 20 additions and 15 deletions
|
@ -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);
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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";
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue