mirror of
https://github.com/Z3Prover/z3
synced 2025-07-18 02:16:40 +00:00
fix bug in proof generation for PDR, add more features for handling quantifiers
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
2d1a6bf270
commit
a813c384a6
8 changed files with 356 additions and 40 deletions
|
@ -386,13 +386,12 @@ namespace pdr {
|
|||
for_each_expr(*this, m_visited, tocollect[i]);
|
||||
}
|
||||
unsigned sz = m_model->get_num_constants();
|
||||
expr_ref e(m), eq(m);
|
||||
expr_ref e(m), eq(m), val(m);
|
||||
expr_ref_vector model(m);
|
||||
for (unsigned i = 0; i < sz; i++) {
|
||||
func_decl * d = m_model->get_constant(i);
|
||||
expr* val = m_model->get_const_interp(d);
|
||||
e = m.mk_const(d);
|
||||
e = m.mk_const(m_model->get_constant(i));
|
||||
if (m_visited.is_marked(e)) {
|
||||
val = eval(m_model, e);
|
||||
eq = m.mk_eq(e, val);
|
||||
model.push_back(eq);
|
||||
}
|
||||
|
@ -923,6 +922,20 @@ namespace pdr {
|
|||
return !has_x;
|
||||
}
|
||||
|
||||
expr_ref model_evaluator::eval(model_ref& model, func_decl* d) {
|
||||
SASSERT(d->get_arity() == 0);
|
||||
expr_ref result(m);
|
||||
if (m_array.is_array(d->get_range())) {
|
||||
expr_ref e(m);
|
||||
e = m.mk_const(d);
|
||||
result = eval(model, e);
|
||||
}
|
||||
else {
|
||||
result = model->get_const_interp(d);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
expr_ref model_evaluator::eval(model_ref& model, expr* e) {
|
||||
expr_ref result(m);
|
||||
m_model = model;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue