3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-10 19:27:06 +00:00

Fix bug reported by Andrey Kupriyanov

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
Leonardo de Moura 2013-02-14 09:55:42 -08:00
parent 0c0fe40446
commit 030aef5d5a
2 changed files with 14 additions and 10 deletions

View file

@ -59,6 +59,8 @@ Version 4.3.2
- Fixed http://stackoverflow.com/questions/14524316/z3-4-3-get-complete-model.
- Fixed bugs in the C++ API (Thanks to Andrey Kupriyanov).
Version 4.3.1
=============

View file

@ -619,6 +619,8 @@ namespace z3 {
a.check_error();
return expr(a.ctx(), r);
}
friend expr implies(expr const & a, bool b) { return implies(a, a.ctx().bool_val(b)); }
friend expr implies(bool a, expr const & b) { return implies(b.ctx().bool_val(a), b); }
/**
\brief Create the if-then-else expression <tt>ite(c, t, e)</tt>
@ -758,7 +760,7 @@ namespace z3 {
return expr(a.ctx(), r);
}
friend expr operator-(expr const & a, int b) { return a - a.ctx().num_val(b, a.get_sort()); }
friend expr operator-(int a, expr const & b) { return b.ctx().num_val(a, b.get_sort()) - a; }
friend expr operator-(int a, expr const & b) { return b.ctx().num_val(a, b.get_sort()) - b; }
friend expr operator<=(expr const & a, expr const & b) {
check_context(a, b);
@ -777,7 +779,7 @@ namespace z3 {
return expr(a.ctx(), r);
}
friend expr operator<=(expr const & a, int b) { return a <= a.ctx().num_val(b, a.get_sort()); }
friend expr operator<=(int a, expr const & b) { return b.ctx().num_val(a, b.get_sort()) <= a; }
friend expr operator<=(int a, expr const & b) { return b.ctx().num_val(a, b.get_sort()) <= b; }
friend expr operator>=(expr const & a, expr const & b) {
check_context(a, b);
@ -796,7 +798,7 @@ namespace z3 {
return expr(a.ctx(), r);
}
friend expr operator>=(expr const & a, int b) { return a >= a.ctx().num_val(b, a.get_sort()); }
friend expr operator>=(int a, expr const & b) { return b.ctx().num_val(a, b.get_sort()) >= a; }
friend expr operator>=(int a, expr const & b) { return b.ctx().num_val(a, b.get_sort()) >= b; }
friend expr operator<(expr const & a, expr const & b) {
check_context(a, b);
@ -815,7 +817,7 @@ namespace z3 {
return expr(a.ctx(), r);
}
friend expr operator<(expr const & a, int b) { return a < a.ctx().num_val(b, a.get_sort()); }
friend expr operator<(int a, expr const & b) { return b.ctx().num_val(a, b.get_sort()) < a; }
friend expr operator<(int a, expr const & b) { return b.ctx().num_val(a, b.get_sort()) < b; }
friend expr operator>(expr const & a, expr const & b) {
check_context(a, b);
@ -834,7 +836,7 @@ namespace z3 {
return expr(a.ctx(), r);
}
friend expr operator>(expr const & a, int b) { return a > a.ctx().num_val(b, a.get_sort()); }
friend expr operator>(int a, expr const & b) { return b.ctx().num_val(a, b.get_sort()) > a; }
friend expr operator>(int a, expr const & b) { return b.ctx().num_val(a, b.get_sort()) > b; }
friend expr operator&(expr const & a, expr const & b) { check_context(a, b); Z3_ast r = Z3_mk_bvand(a.ctx(), a, b); return expr(a.ctx(), r); }
friend expr operator&(expr const & a, int b) { return a & a.ctx().num_val(b, a.get_sort()); }
@ -888,31 +890,31 @@ namespace z3 {
*/
inline expr ule(expr const & a, expr const & b) { return to_expr(a.ctx(), Z3_mk_bvule(a.ctx(), a, b)); }
inline expr ule(expr const & a, int b) { return ule(a, a.ctx().num_val(b, a.get_sort())); }
inline expr ule(int a, expr const & b) { return ule(b.ctx().num_val(a, b.get_sort()), a); }
inline expr ule(int a, expr const & b) { return ule(b.ctx().num_val(a, b.get_sort()), b); }
/**
\brief unsigned less than operator for bitvectors.
*/
inline expr ult(expr const & a, expr const & b) { return to_expr(a.ctx(), Z3_mk_bvult(a.ctx(), a, b)); }
inline expr ult(expr const & a, int b) { return ult(a, a.ctx().num_val(b, a.get_sort())); }
inline expr ult(int a, expr const & b) { return ult(b.ctx().num_val(a, b.get_sort()), a); }
inline expr ult(int a, expr const & b) { return ult(b.ctx().num_val(a, b.get_sort()), b); }
/**
\brief unsigned greater than or equal to operator for bitvectors.
*/
inline expr uge(expr const & a, expr const & b) { return to_expr(a.ctx(), Z3_mk_bvuge(a.ctx(), a, b)); }
inline expr uge(expr const & a, int b) { return uge(a, a.ctx().num_val(b, a.get_sort())); }
inline expr uge(int a, expr const & b) { return uge(b.ctx().num_val(a, b.get_sort()), a); }
inline expr uge(int a, expr const & b) { return uge(b.ctx().num_val(a, b.get_sort()), b); }
/**
\brief unsigned greater than operator for bitvectors.
*/
inline expr ugt(expr const & a, expr const & b) { return to_expr(a.ctx(), Z3_mk_bvugt(a.ctx(), a, b)); }
inline expr ugt(expr const & a, int b) { return ugt(a, a.ctx().num_val(b, a.get_sort())); }
inline expr ugt(int a, expr const & b) { return ugt(b.ctx().num_val(a, b.get_sort()), a); }
inline expr ugt(int a, expr const & b) { return ugt(b.ctx().num_val(a, b.get_sort()), b); }
/**
\brief unsigned division operator for bitvectors.
*/
inline expr udiv(expr const & a, expr const & b) { return to_expr(a.ctx(), Z3_mk_bvudiv(a.ctx(), a, b)); }
inline expr udiv(expr const & a, int b) { return udiv(a, a.ctx().num_val(b, a.get_sort())); }
inline expr udiv(int a, expr const & b) { return udiv(b.ctx().num_val(a, b.get_sort()), a); }
inline expr udiv(int a, expr const & b) { return udiv(b.ctx().num_val(a, b.get_sort()), b); }
// Basic functions for creating quantified formulas.
// The C API should be used for creating quantifiers with patterns, weights, many variables, etc.