mirror of
https://github.com/Z3Prover/z3
synced 2025-08-22 11:07:51 +00:00
add bit blast optio
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
09b3d99db1
commit
fb5f81cf75
5 changed files with 32 additions and 1 deletions
|
@ -183,6 +183,8 @@ namespace polysat {
|
|||
assignment& get_assignment() { return m_assignment; }
|
||||
|
||||
random_gen& rand() { return m_rand; }
|
||||
|
||||
pdd mk_ite(signed_constraint const& sc, pdd const& p, pdd const& q) { return s.mk_ite(sc, p, q); }
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -118,6 +118,8 @@ namespace polysat {
|
|||
|
||||
// bit blast a monomial definition
|
||||
lbool monomials::bit_blast() {
|
||||
// disable for now
|
||||
return l_undef;
|
||||
init_to_refine();
|
||||
if (m_to_refine.empty())
|
||||
return l_true;
|
||||
|
@ -330,7 +332,17 @@ namespace polysat {
|
|||
}
|
||||
|
||||
bool monomials::bit_blast(monomial const& mon) {
|
||||
return false;
|
||||
if (mon.size() != 2)
|
||||
return false;
|
||||
unsigned sz = mon.num_bits();
|
||||
pdd n = mon.var.manager().mk_val(0);
|
||||
pdd zero = n.manager().mk_val(0);
|
||||
pdd p = mon.args[0];
|
||||
pdd q = mon.args[1];
|
||||
for (unsigned i = 0; i < sz; ++i)
|
||||
n += c.mk_ite(C.bit(p, i), c.value(rational::power_of_two(i), sz) * q, zero);
|
||||
c.add_axiom("bit-blast", { C.eq(mon.var, n) }, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
std::ostream& monomials::display(std::ostream& out) const {
|
||||
|
|
|
@ -147,6 +147,7 @@ namespace polysat {
|
|||
virtual void get_bitvector_sub_slices(pvar v, offset_slices& out) = 0;
|
||||
virtual void get_bitvector_super_slices(pvar v, offset_slices& out) = 0;
|
||||
virtual void get_fixed_bits(pvar v, fixed_bits_vector& fixed_slice) = 0;
|
||||
virtual pdd mk_ite(signed_constraint const& sc, pdd const& p, pdd const& q) = 0;
|
||||
virtual unsigned level(dependency const& d) = 0;
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue