mirror of
https://github.com/Z3Prover/z3
synced 2025-11-06 06:16:02 +00:00
fix some argument-evaluation non-determinism, and mark the rest
Signed-off-by: Lev Nachmanson <levnach@hotmail.com>
This commit is contained in:
parent
efd5d04af5
commit
51f6dfeb83
62 changed files with 765 additions and 120 deletions
|
|
@ -389,6 +389,7 @@ namespace nlarith {
|
|||
};
|
||||
|
||||
expr* mk_abs(expr* e) {
|
||||
//non-deterministic order no change: too complex
|
||||
return m().mk_ite(mk_lt(e), mk_uminus(e), e);
|
||||
}
|
||||
|
||||
|
|
@ -405,6 +406,7 @@ namespace nlarith {
|
|||
}
|
||||
else {
|
||||
expr* half = A.mk_numeral(rational(1,2), false);
|
||||
//non-deterministic order no change: too complex
|
||||
result = A.mk_div(mk_add(s.m_a, mk_mul(num(s.m_b), A.mk_power(mk_abs(s.m_c), half))), s.m_d);
|
||||
}
|
||||
return result;
|
||||
|
|
@ -439,10 +441,13 @@ namespace nlarith {
|
|||
expr* result = to_expr(s);
|
||||
if (is_strict(cmp)) {
|
||||
if (p.m_a == z()) {
|
||||
//non-deterministic order no change: too complex
|
||||
//non-deterministic order no change: too complex
|
||||
result = mk_add(result, mk_mul(mk_epsilon(), m().mk_ite(mk_lt(p.m_b),num(1),num(-1))));
|
||||
}
|
||||
else {
|
||||
if (s.m_b > 0) {
|
||||
//non-deterministic order no change: too complex
|
||||
result = mk_add(result, mk_mul(num(-1),mk_epsilon()));
|
||||
}
|
||||
else {
|
||||
|
|
@ -481,6 +486,7 @@ namespace nlarith {
|
|||
}
|
||||
|
||||
app* sq1(expr * e) {
|
||||
//non-deterministic order no change: too complex
|
||||
return mk_add(num(1), sq(e));
|
||||
}
|
||||
|
||||
|
|
@ -591,7 +597,13 @@ namespace nlarith {
|
|||
app_ref t1(m()), a2(m()), d(m());
|
||||
expr_ref cond(m()), t2(m()), branch(m());
|
||||
expr_ref_vector es(m()), subst(m());
|
||||
d = mk_sub(mk_mul(b,b), mk_mul(num(4), a, c));
|
||||
//non-deterministic order change start
|
||||
{
|
||||
auto mk_mul_1 = mk_mul(b,b);
|
||||
auto mk_mul_2 = mk_mul(num(4), a, c);
|
||||
d = mk_sub(mk_mul_1, mk_mul_2);
|
||||
}
|
||||
//non-deterministic order change end
|
||||
a2 = mk_mul(a, num(2));
|
||||
|
||||
TRACE(nlarith,
|
||||
|
|
@ -1054,9 +1066,23 @@ namespace nlarith {
|
|||
r = I.mk_lt(ad);
|
||||
}
|
||||
else {
|
||||
aabbc = I.mk_sub(I.mk_mul(a,a), I.mk_mul(b,b,c));
|
||||
r = I.mk_or(I.mk_and(I.mk_lt(ad), I.mk_gt(aabbc)),
|
||||
//non-deterministic order change start
|
||||
{
|
||||
auto mk_mul_1 = I.mk_mul(a,a);
|
||||
auto mk_mul_2 = I.mk_mul(b,b,c);
|
||||
aabbc = I.mk_sub(mk_mul_1, mk_mul_2);
|
||||
}
|
||||
//non-deterministic order change end
|
||||
//non-deterministic order no change: too complex
|
||||
//non-deterministic order change start
|
||||
{
|
||||
auto mk_and_1 = I.mk_and(I.mk_lt(ad), I.mk_gt(aabbc));
|
||||
r = I.mk_or(mk_and_1,
|
||||
//non-deterministic order no change: too complex
|
||||
//non-deterministic order no change: too complex
|
||||
I.mk_and(I.mk_le(bd), I.mk_or(I.mk_lt(ad), I.mk_lt(aabbc))));
|
||||
}
|
||||
//non-deterministic order change end
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1071,8 +1097,20 @@ namespace nlarith {
|
|||
r = I.mk_eq(a);
|
||||
}
|
||||
else {
|
||||
aabbc = I.mk_sub(I.mk_mul(a, a), I.mk_mul(b, b, c));
|
||||
r = I.mk_and(I.mk_le(I.mk_mul(a, b)), I.mk_eq(aabbc));
|
||||
//non-deterministic order change start
|
||||
{
|
||||
auto mk_mul_1 = I.mk_mul(a, a);
|
||||
auto mk_mul_2 = I.mk_mul(b, b, c);
|
||||
aabbc = I.mk_sub(mk_mul_1, mk_mul_2);
|
||||
}
|
||||
//non-deterministic order change end
|
||||
//non-deterministic order change start
|
||||
{
|
||||
auto mk_le_1 = I.mk_le(I.mk_mul(a, b));
|
||||
auto mk_eq_2 = I.mk_eq(aabbc);
|
||||
r = I.mk_and(mk_le_1, mk_eq_2);
|
||||
}
|
||||
//non-deterministic order change end
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1091,9 +1129,22 @@ namespace nlarith {
|
|||
r = I.mk_le(ad);
|
||||
}
|
||||
else {
|
||||
aabbc = I.mk_sub(I.mk_mul(a, a), I.mk_mul(b, b, c));
|
||||
r = I.mk_or(I.mk_and(I.mk_le(ad), I.mk_ge(aabbc)),
|
||||
//non-deterministic order change start
|
||||
{
|
||||
auto mk_mul_1 = I.mk_mul(a, a);
|
||||
auto mk_mul_2 = I.mk_mul(b, b, c);
|
||||
aabbc = I.mk_sub(mk_mul_1, mk_mul_2);
|
||||
}
|
||||
//non-deterministic order change end
|
||||
//non-deterministic order no change: too complex
|
||||
//non-deterministic order change start
|
||||
{
|
||||
auto mk_and_1 = I.mk_and(I.mk_le(ad), I.mk_ge(aabbc));
|
||||
r = I.mk_or(mk_and_1,
|
||||
//non-deterministic order no change: too complex
|
||||
I.mk_and(I.mk_le(bd), I.mk_le(aabbc)));
|
||||
}
|
||||
//non-deterministic order change end
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
@ -1203,6 +1254,7 @@ namespace nlarith {
|
|||
return e;
|
||||
}
|
||||
else {
|
||||
//non-deterministic order no change: too complex
|
||||
return I.mk_or(e, I.mk_and(I.mk_eq(t), mk_lt(p, i)));
|
||||
}
|
||||
}
|
||||
|
|
@ -1233,6 +1285,7 @@ namespace nlarith {
|
|||
return e;
|
||||
}
|
||||
else {
|
||||
//non-deterministic order no change: too complex
|
||||
return I.mk_or(e, I.mk_and(I.mk_eq(t), mk_lt(p, i)));
|
||||
}
|
||||
}
|
||||
|
|
@ -1311,8 +1364,15 @@ namespace nlarith {
|
|||
// =
|
||||
// (d*dr*p[i] + a*ar + b*br*c + (a*br + ar*b)*sqrt(c))/d*dr
|
||||
//
|
||||
//non-deterministic order no change: too complex
|
||||
app_ref tmp1(mk_add(mk_mul(d, dr, p[i]), mk_mul(a, ar), mk_mul(b, br, c)), m());
|
||||
br = mk_add(mk_mul(a, br), mk_mul(ar, b));
|
||||
//non-deterministic order change start
|
||||
{
|
||||
auto mk_mul_1 = mk_mul(a, br);
|
||||
auto mk_mul_2 = mk_mul(ar, b);
|
||||
br = mk_add(mk_mul_1, mk_mul_2);
|
||||
}
|
||||
//non-deterministic order change end
|
||||
dr = mk_mul(d, dr);
|
||||
ar = tmp1;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue