3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-28 11:25:51 +00:00

include more qsat features

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2016-03-19 12:29:23 -07:00
parent f175f864ec
commit c4472ce717
15 changed files with 2197 additions and 190 deletions

View file

@ -32,6 +32,7 @@ Revision History:
#include "nlarith_util.h"
#include "model_evaluator.h"
#include "smt_kernel.h"
#include "qe_arith.h"
namespace qe {
@ -266,23 +267,8 @@ namespace qe {
//
// match 0 == p mod k, p mod k == 0
//
bool is_divides(app* e, numeral& k, expr_ref& p) {
expr* e1, *e2;
if (!m.is_eq(e, e1, e2)) {
return false;
}
return is_divides(e1, e2, k, p) || is_divides(e2, e1, k, p);
}
bool is_divides(expr* e1, expr* e2, numeral& k, expr_ref& p) {
if (m_arith.is_mod(e2) &&
m_arith.is_numeral(e1, k) &&
k.is_zero() &&
m_arith.is_numeral(to_app(e2)->get_arg(1), k)) {
p = to_app(e2)->get_arg(0);
return true;
}
return false;
bool is_divides(expr* e, numeral& k, expr_ref& p) {
return qe::is_divides(m_arith, e, k, p);
}
bool is_not_divides(app* e, app_ref& n, numeral& k, expr_ref& p) {