mirror of
https://github.com/Z3Prover/z3
synced 2025-04-24 01:25:31 +00:00
This commit is contained in:
parent
1d4f8c0168
commit
2308d8af09
7 changed files with 118 additions and 86 deletions
|
@ -53,6 +53,7 @@ struct evaluator_cfg : public default_rewriter_cfg {
|
|||
seq_rewriter m_seq_rw;
|
||||
array_util m_ar;
|
||||
arith_util m_au;
|
||||
fpa_util m_fpau;
|
||||
unsigned long long m_max_memory;
|
||||
unsigned m_max_steps;
|
||||
bool m_model_completion;
|
||||
|
@ -78,6 +79,7 @@ struct evaluator_cfg : public default_rewriter_cfg {
|
|||
m_seq_rw(m),
|
||||
m_ar(m),
|
||||
m_au(m),
|
||||
m_fpau(m),
|
||||
m_pinned(m) {
|
||||
bool flat = true;
|
||||
m_b_rw.set_flat(flat);
|
||||
|
@ -132,9 +134,9 @@ struct evaluator_cfg : public default_rewriter_cfg {
|
|||
return false;
|
||||
}
|
||||
|
||||
bool reduce_quantifier(quantifier * old_q,
|
||||
expr * new_body,
|
||||
expr * const * new_patterns,
|
||||
bool reduce_quantifier(quantifier * old_q,
|
||||
expr * new_body,
|
||||
expr * const * new_patterns,
|
||||
expr * const * new_no_patterns,
|
||||
expr_ref & result,
|
||||
proof_ref & result_pr) {
|
||||
|
@ -148,7 +150,7 @@ struct evaluator_cfg : public default_rewriter_cfg {
|
|||
family_id fid = f->get_family_id();
|
||||
bool is_uninterp = fid != null_family_id && m.get_plugin(fid)->is_considered_uninterpreted(f);
|
||||
br_status st = BR_FAILED;
|
||||
TRACE("model_evaluator", tout << f->get_name() << " " << is_uninterp << "\n";);
|
||||
TRACE("model_evaluator", tout << f->get_name() << " " << is_uninterp << "\n";);
|
||||
if (num == 0 && (fid == null_family_id || is_uninterp)) { // || m_ar.is_as_array(f)
|
||||
expr * val = m_model.get_const_interp(f);
|
||||
if (val != nullptr) {
|
||||
|
@ -195,8 +197,8 @@ struct evaluator_cfg : public default_rewriter_cfg {
|
|||
result = m.mk_false();
|
||||
st = BR_DONE;
|
||||
}
|
||||
TRACE("model_evaluator",
|
||||
tout << st << " " << mk_pp(s, m) << " " << s_fid << " " << m_ar_rw.get_fid() << " "
|
||||
TRACE("model_evaluator",
|
||||
tout << st << " " << mk_pp(s, m) << " " << s_fid << " " << m_ar_rw.get_fid() << " "
|
||||
<< mk_pp(args[0], m) << " " << mk_pp(args[1], m) << " " << result << "\n";);
|
||||
if (st != BR_FAILED)
|
||||
return st;
|
||||
|
@ -324,7 +326,14 @@ struct evaluator_cfg : public default_rewriter_cfg {
|
|||
result = nullptr;
|
||||
result_pr = nullptr;
|
||||
|
||||
if (f->get_family_id() == m_fpau.get_family_id() &&
|
||||
!m_fpau.is_considered_uninterpreted(f, num, args)) {
|
||||
// cwinter: should this be unreachable?
|
||||
return BR_FAILED;
|
||||
}
|
||||
|
||||
func_interp * fi = m_model.get_func_interp(f);
|
||||
|
||||
if (fi) {
|
||||
if (fi->is_partial())
|
||||
fi->set_else(m.get_some_value(f->get_range()));
|
||||
|
@ -338,6 +347,10 @@ struct evaluator_cfg : public default_rewriter_cfg {
|
|||
result = m_au.mk_numeral(rational(0), f->get_range());
|
||||
return BR_DONE;
|
||||
}
|
||||
else if (m_fpau.is_considered_uninterpreted(f, num, args)) {
|
||||
result = m.get_some_value(f->get_range());
|
||||
return BR_DONE;
|
||||
}
|
||||
return BR_FAILED;
|
||||
}
|
||||
|
||||
|
@ -524,7 +537,7 @@ struct evaluator_cfg : public default_rewriter_cfg {
|
|||
|
||||
func_decl* f = m_ar.get_as_array_func_decl(to_app(a));
|
||||
func_interp* g = m_model.get_func_interp(f);
|
||||
if (!g) return false;
|
||||
if (!g) return false;
|
||||
else_case = g->get_else();
|
||||
if (!else_case) {
|
||||
TRACE("model_evaluator", tout << "no else case " << mk_pp(a, m) << "\n";);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue