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

tuning bit-vector operations

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2015-12-21 13:09:03 +02:00
parent 1eebab355c
commit 8e26c97782
9 changed files with 271 additions and 94 deletions

View file

@ -22,7 +22,7 @@ Revision History:
#include"occurs.h"
#include"cooperate.h"
#include"goal_shared_occs.h"
#include"ast_smt2_pp.h"
#include"ast_pp.h"
class solve_eqs_tactic : public tactic {
struct imp {
@ -92,21 +92,23 @@ class solve_eqs_tactic : public tactic {
}
// Use: (= x def) and (= def x)
bool trivial_solve(expr * lhs, expr * rhs, app_ref & var, expr_ref & def, proof_ref & pr) {
bool trivial_solve1(expr * lhs, expr * rhs, app_ref & var, expr_ref & def, proof_ref & pr) {
if (is_uninterp_const(lhs) && !m_candidate_vars.is_marked(lhs) && !occurs(lhs, rhs) && check_occs(lhs)) {
var = to_app(lhs);
def = rhs;
pr = 0;
return true;
}
else if (is_uninterp_const(rhs) && !m_candidate_vars.is_marked(rhs) && !occurs(rhs, lhs) && check_occs(rhs)) {
var = to_app(rhs);
def = lhs;
if (m_produce_proofs)
pr = m().mk_commutativity(m().mk_eq(lhs, rhs));
return true;
else {
return false;
}
return false;
}
bool trivial_solve(expr * lhs, expr * rhs, app_ref & var, expr_ref & def, proof_ref & pr) {
return
trivial_solve1(lhs, rhs, var, def, pr) ||
trivial_solve1(rhs, lhs, var, def, pr);
}
// (ite c (= x t1) (= x t2)) --> (= x (ite c t1 t2))