3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-29 20:05:51 +00:00

add and fix axioms

This commit is contained in:
Nikolaj Bjorner 2023-12-14 20:12:09 -08:00
parent 63d92d9df8
commit c7ad3aabd1
4 changed files with 113 additions and 85 deletions

View file

@ -316,13 +316,24 @@ namespace polysat {
return true;
}
void solver::axiomatize_int2bv(app* e, unsigned & sz, expr* x) {
NOT_IMPLEMENTED_YET();
void solver::axiomatize_int2bv(app* e, unsigned sz, expr* x) {
// e = int2bv(x)
// bv2int(int2bv(x)) = x mod N
rational N = rational::power_of_two(sz);
add_unit(eq_internalize(bv.mk_bv2int(e), m_autil.mk_mod(x, m_autil.mk_int(N))));
}
void solver::axiomatize_bv2int(app* e, expr* x) {
NOT_IMPLEMENTED_YET();
// e := bv2int(x)
// e = sum_bits(x)
unsigned sz = bv.get_bv_size(x);
expr* one = m_autil.mk_int(1);
expr* zero = m_autil.mk_int(0);
expr* r = zero;
pdd p = expr2pdd(x);
for (unsigned i = 0; i < sz; ++i)
r = m_autil.mk_add(r, m.mk_ite(constraint2expr(m_core.bit(p, i)), one, zero));
add_unit(eq_internalize(e, r));
}