3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-06-07 14:43:23 +00:00

use private rewriter to avoid surprises

Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2018-12-29 17:13:32 +08:00
parent 815faa96d9
commit b533ba39d6

View file

@ -81,6 +81,8 @@ namespace smt {
TRACE("bv", tout << "bit2bool: " << mk_pp(n, ctx.get_manager()) << "\n";); TRACE("bv", tout << "bit2bool: " << mk_pp(n, ctx.get_manager()) << "\n";);
expr* first_arg = n->get_arg(0); expr* first_arg = n->get_arg(0);
SASSERT(!m_util.is_numeral(first_arg));
if (!ctx.e_internalized(first_arg)) { if (!ctx.e_internalized(first_arg)) {
// This may happen if bit2bool(x) is in a conflict // This may happen if bit2bool(x) is in a conflict
// clause that is being reinitialized, and x was not reinitialized // clause that is being reinitialized, and x was not reinitialized
@ -96,6 +98,9 @@ namespace smt {
// This will also force the creation of all bits for x. // This will also force the creation of all bits for x.
enode * first_arg_enode = ctx.get_enode(first_arg); enode * first_arg_enode = ctx.get_enode(first_arg);
get_var(first_arg_enode); get_var(first_arg_enode);
#if 0
// constant axiomatization moved to catch all case in the end of function.
// numerals are not blasted into bit2bool, so we do this directly. // numerals are not blasted into bit2bool, so we do this directly.
rational val; rational val;
unsigned sz; unsigned sz;
@ -116,6 +121,7 @@ namespace smt {
m_bits[v].push_back(bit.is_zero()?false_literal:true_literal); m_bits[v].push_back(bit.is_zero()?false_literal:true_literal);
} }
} }
#endif
} }
enode * arg = ctx.get_enode(first_arg); enode * arg = ctx.get_enode(first_arg);
@ -140,6 +146,7 @@ namespace smt {
SASSERT(a->m_occs == 0); SASSERT(a->m_occs == 0);
a->m_occs = new (get_region()) var_pos_occ(v_arg, idx); a->m_occs = new (get_region()) var_pos_occ(v_arg, idx);
} }
// axiomatize bit2bool on constants.
rational val; rational val;
unsigned sz; unsigned sz;
if (m_util.is_numeral(first_arg, val, sz)) { if (m_util.is_numeral(first_arg, val, sz)) {
@ -619,8 +626,8 @@ namespace smt {
num *= numeral(2); num *= numeral(2);
} }
expr_ref sum(m_autil.mk_add(sz, args.c_ptr()), m); expr_ref sum(m_autil.mk_add(sz, args.c_ptr()), m);
arith_rewriter arw(m); th_rewriter rw(m);
ctx.get_rewriter()(sum); rw(sum);
literal l(mk_eq(n, sum, false)); literal l(mk_eq(n, sum, false));
TRACE("bv", TRACE("bv",
tout << mk_pp(n, m) << "\n"; tout << mk_pp(n, m) << "\n";