3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-12 14:10:54 +00:00
This commit is contained in:
Jakob Rath 2023-07-21 11:25:31 +02:00
parent 6dfc9dd936
commit e1bb0f5377
5 changed files with 48 additions and 20 deletions

View file

@ -93,8 +93,8 @@ namespace bv {
case OP_EXTRACT: polysat_extract(a); break;
case OP_CONCAT: polysat_concat(a); break;
case OP_ZERO_EXT: polysat_zero_ext(a); break;
case OP_SIGN_EXT:
case OP_ZERO_EXT: polysat_par_unary(a, [&](pdd const& p, unsigned sz) { return m_polysat.zero_ext(p, sz); }); break;
case OP_SIGN_EXT: polysat_par_unary(a, [&](pdd const& p, unsigned sz) { return m_polysat.sign_ext(p, sz); }); break;
// polysat::solver should also support at least:
case OP_BREDAND: // x == 2^K - 1
@ -197,11 +197,10 @@ namespace bv {
polysat_set(e, p);
}
void solver::polysat_zero_ext(app* e) {
pdd const arg = expr2pdd(e->get_arg(0));
void solver::polysat_par_unary(app* e, std::function<polysat::pdd(polysat::pdd,unsigned)> const& fn) {
pdd const p = expr2pdd(e->get_arg(0));
unsigned const sz = e->get_parameter(0).get_int();
pdd const p = m_polysat.zero_ext(p, sz);
polysat_set(e, p);
polysat_set(e, fn(p, sz));
}
void solver::polysat_binary(app* e, std::function<polysat::pdd(polysat::pdd, polysat::pdd)> const& fn) {

View file

@ -325,9 +325,9 @@ namespace bv {
void polysat_pop(unsigned n);
void polysat_unary(app* e, std::function<polysat::pdd(polysat::pdd)> const& fn);
void polysat_binary(app* e, std::function<polysat::pdd(polysat::pdd, polysat::pdd)> const& fn);
void polysat_par_unary(app* e, std::function<polysat::pdd(polysat::pdd,unsigned)> const& fn);
void polysat_extract(app* e);
void polysat_concat(app* e);
void polysat_zero_ext(app* e);
polysat::pdd expr2pdd(expr* e);
void polysat_set(euf::theory_var v, polysat::pdd const& p);
polysat::pdd var2pdd(euf::theory_var v);