mirror of
https://github.com/Z3Prover/z3
synced 2025-04-16 05:48:44 +00:00
parent
96f113afee
commit
05a784fa9e
|
@ -638,9 +638,13 @@ br_status arith_rewriter::mk_div_core(expr * arg1, expr * arg2, expr_ref & resul
|
||||||
set_curr_sort(m().get_sort(arg1));
|
set_curr_sort(m().get_sort(arg1));
|
||||||
numeral v1, v2;
|
numeral v1, v2;
|
||||||
bool is_int;
|
bool is_int;
|
||||||
if (m_util.is_numeral(arg2, v2, is_int) && !v2.is_zero()) {
|
if (m_util.is_numeral(arg2, v2, is_int)) {
|
||||||
SASSERT(!is_int);
|
SASSERT(!is_int);
|
||||||
if (m_util.is_numeral(arg1, v1, is_int)) {
|
if (v2.is_zero()) {
|
||||||
|
result = m_util.mk_div0(arg1);
|
||||||
|
return BR_REWRITE1;
|
||||||
|
}
|
||||||
|
else if (m_util.is_numeral(arg1, v1, is_int)) {
|
||||||
result = m_util.mk_numeral(v1/v2, false);
|
result = m_util.mk_numeral(v1/v2, false);
|
||||||
return BR_DONE;
|
return BR_DONE;
|
||||||
}
|
}
|
||||||
|
@ -691,6 +695,10 @@ br_status arith_rewriter::mk_idiv_core(expr * arg1, expr * arg2, expr_ref & resu
|
||||||
result = m_util.mk_numeral(div(v1, v2), is_int);
|
result = m_util.mk_numeral(div(v1, v2), is_int);
|
||||||
return BR_DONE;
|
return BR_DONE;
|
||||||
}
|
}
|
||||||
|
if (m_util.is_numeral(arg2, v2, is_int) & v2.is_zero()) {
|
||||||
|
result = m_util.mk_idiv0(arg1);
|
||||||
|
return BR_REWRITE1;
|
||||||
|
}
|
||||||
return BR_FAILED;
|
return BR_FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -178,7 +178,7 @@ struct evaluator_cfg : public default_rewriter_cfg {
|
||||||
return BR_DONE;
|
return BR_DONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TRACE("model_evaluator", tout << f->get_name() << "\n";);
|
CTRACE("model_evaluator", st != BR_FAILED, tout << result << "\n";);
|
||||||
return st;
|
return st;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -309,13 +309,16 @@ namespace qe {
|
||||||
expr_ref_vector args(m);
|
expr_ref_vector args(m);
|
||||||
sort* range = get_array_range(m.get_sort(s));
|
sort* range = get_array_range(m.get_sort(s));
|
||||||
for (unsigned i = 0; i < idxs.size(); ++i) {
|
for (unsigned i = 0; i < idxs.size(); ++i) {
|
||||||
app_ref var(m);
|
//app_ref var(m);
|
||||||
var = m.mk_fresh_const("value", range);
|
//var = m.mk_fresh_const("value", range);
|
||||||
vars.push_back(var);
|
//vars.push_back(var);
|
||||||
|
expr_ref val(m);
|
||||||
args.reset();
|
args.reset();
|
||||||
args.push_back(result);
|
args.push_back(result);
|
||||||
args.append(idxs[i].m_values.size(), idxs[i].m_vars);
|
args.append(idxs[i].m_values.size(), idxs[i].m_vars);
|
||||||
args.push_back(var);
|
result = a.mk_select(args.size(), args.c_ptr());
|
||||||
|
VERIFY(model.eval(result, val));
|
||||||
|
args.push_back(val);
|
||||||
result = a.mk_store(args.size(), args.c_ptr());
|
result = a.mk_store(args.size(), args.c_ptr());
|
||||||
}
|
}
|
||||||
expr_safe_replace sub(m);
|
expr_safe_replace sub(m);
|
||||||
|
|
Loading…
Reference in a new issue