mirror of
https://github.com/Z3Prover/z3
synced 2025-09-05 09:37:44 +00:00
Add bitblasting fallback to viable::query
(integration between conflict/viable is still messy)
This commit is contained in:
parent
44cb528300
commit
afde0e993c
8 changed files with 336 additions and 121 deletions
|
@ -26,6 +26,12 @@ Author:
|
|||
|
||||
namespace polysat {
|
||||
|
||||
univariate_solver::dep_vector univariate_solver::unsat_core() {
|
||||
dep_vector deps;
|
||||
unsat_core(deps);
|
||||
return deps;
|
||||
}
|
||||
|
||||
class univariate_bitblast_solver : public univariate_solver {
|
||||
// TODO: does it make sense to share m and bv between different solver instances?
|
||||
// TODO: consider pooling solvers to save setup overhead, see if solver/solver_pool.h can be used
|
||||
|
@ -33,6 +39,7 @@ namespace polysat {
|
|||
scoped_ptr<bv_util> bv;
|
||||
scoped_ptr<solver> s;
|
||||
unsigned bit_width;
|
||||
unsigned m_scope_level = 0;
|
||||
func_decl_ref x_decl;
|
||||
expr_ref x;
|
||||
vector<rational> model_cache;
|
||||
|
@ -67,15 +74,22 @@ namespace polysat {
|
|||
}
|
||||
|
||||
void push() override {
|
||||
m_scope_level++;
|
||||
push_cache();
|
||||
s->push();
|
||||
}
|
||||
|
||||
void pop(unsigned n) override {
|
||||
SASSERT(scope_level() >= n);
|
||||
m_scope_level -= n;
|
||||
pop_cache();
|
||||
s->pop(n);
|
||||
}
|
||||
|
||||
unsigned scope_level() override {
|
||||
return m_scope_level;
|
||||
}
|
||||
|
||||
expr* mk_numeral(rational const& r) const {
|
||||
return bv->mk_numeral(r, bit_width);
|
||||
}
|
||||
|
@ -198,8 +212,8 @@ namespace polysat {
|
|||
return s->check_sat();
|
||||
}
|
||||
|
||||
dep_vector unsat_core() override {
|
||||
dep_vector deps;
|
||||
void unsat_core(dep_vector& deps) override {
|
||||
deps.reset();
|
||||
expr_ref_vector core(m);
|
||||
s->get_unsat_core(core);
|
||||
for (expr* a : core) {
|
||||
|
@ -207,7 +221,6 @@ namespace polysat {
|
|||
deps.push_back(dep);
|
||||
}
|
||||
SASSERT(deps.size() > 0);
|
||||
return deps;
|
||||
}
|
||||
|
||||
rational model() override {
|
||||
|
|
|
@ -39,13 +39,15 @@ namespace polysat {
|
|||
|
||||
virtual void push() = 0;
|
||||
virtual void pop(unsigned n) = 0;
|
||||
virtual unsigned scope_level() = 0;
|
||||
|
||||
virtual lbool check() = 0;
|
||||
|
||||
/**
|
||||
* Precondition: check() returned l_false
|
||||
*/
|
||||
virtual dep_vector unsat_core() = 0;
|
||||
dep_vector unsat_core();
|
||||
virtual void unsat_core(dep_vector& out_deps) = 0;
|
||||
|
||||
/**
|
||||
* Precondition: check() returned l_true
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue