mirror of
https://github.com/Z3Prover/z3
synced 2025-11-05 05:49:13 +00:00
fix param evaluation non-determinism
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
parent
4b2a4a902d
commit
3c5cb7c044
5 changed files with 94 additions and 59 deletions
|
|
@ -585,8 +585,9 @@ br_status bv2real_rewriter::mk_ite(expr* c, expr* s, expr* t, expr_ref& result)
|
|||
u().align_divisors(s1, s2, t1, t2, d1, d2);
|
||||
u().align_sizes(s1, t1);
|
||||
u().align_sizes(s2, t2);
|
||||
// TODO: non-deterministic parameter evaluation
|
||||
if (u().mk_bv2real(m().mk_ite(c, s1, t1), m().mk_ite(c, s2, t2), d1, r1, result)) {
|
||||
expr_ref ite_s1(m().mk_ite(c, s1, t1), m());
|
||||
expr_ref ite_s2(m().mk_ite(c, s2, t2), m());
|
||||
if (u().mk_bv2real(ite_s1.get(), ite_s2.get(), d1, r1, result)) {
|
||||
return BR_DONE;
|
||||
}
|
||||
}
|
||||
|
|
@ -615,8 +616,9 @@ br_status bv2real_rewriter::mk_uminus(expr * s, expr_ref & result) {
|
|||
if (u().is_bv2real(s, s1, s2, d1, r1)) {
|
||||
s1 = u().mk_extend(1, s1);
|
||||
s2 = u().mk_extend(1, s2);
|
||||
// TODO: non-deterministic parameter evaluation
|
||||
if (u().mk_bv2real(m_bv.mk_bv_neg(s1), m_bv.mk_bv_neg(s2), d1, r1, result)) {
|
||||
expr_ref neg_s1(m_bv.mk_bv_neg(s1), m());
|
||||
expr_ref neg_s2(m_bv.mk_bv_neg(s2), m());
|
||||
if (u().mk_bv2real(neg_s1.get(), neg_s2.get(), d1, r1, result)) {
|
||||
return BR_DONE;
|
||||
}
|
||||
}
|
||||
|
|
@ -638,8 +640,9 @@ br_status bv2real_rewriter::mk_add(expr* s, expr* t, expr_ref& result) {
|
|||
rational d1, d2, r1, r2;
|
||||
if (u().is_bv2real(s, s1, s2, d1, r1) && u().is_bv2real(t, t1, t2, d2, r2) && r1 == r2) {
|
||||
u().align_divisors(s1, s2, t1, t2, d1, d2);
|
||||
// TODO: non-deterministic parameter evaluation
|
||||
if (u().mk_bv2real(u().mk_bv_add(s1, t1), u().mk_bv_add(t2, s2), d1, r1, result)) {
|
||||
expr_ref sum1(u().mk_bv_add(s1, t1), m());
|
||||
expr_ref sum2(u().mk_bv_add(t2, s2), m());
|
||||
if (u().mk_bv2real(sum1.get(), sum2.get(), d1, r1, result)) {
|
||||
return BR_DONE;
|
||||
}
|
||||
}
|
||||
|
|
@ -699,8 +702,9 @@ br_status bv2real_rewriter::mk_sub(expr* s, expr* t, expr_ref& result) {
|
|||
rational d1, d2, r1, r2;
|
||||
if (u().is_bv2real(s, s1, s2, d1, r1) && u().is_bv2real(t, t1, t2, d2, r2) && r1 == r2) {
|
||||
u().align_divisors(s1, s2, t1, t2, d1, d2);
|
||||
// TODO: non-deterministic parameter evaluation
|
||||
if (u().mk_bv2real(u().mk_bv_sub(s1, t1), u().mk_bv_sub(s2, t2), d1, r1, result)) {
|
||||
expr_ref diff1(u().mk_bv_sub(s1, t1), m());
|
||||
expr_ref diff2(u().mk_bv_sub(s2, t2), m());
|
||||
if (u().mk_bv2real(diff1.get(), diff2.get(), d1, r1, result)) {
|
||||
return BR_DONE;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue