3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2026-01-29 13:28:44 +00:00

solver::check_sat_cc : check_sat assuming cube and clause

Extends check_sat with an ability to assume a single clause in
addition to assuming a cube of assumptions
This commit is contained in:
Arie Gurfinkel 2018-05-29 13:16:30 -07:00
parent 4477f7d326
commit 26339119e4
6 changed files with 50 additions and 70 deletions

View file

@ -107,37 +107,12 @@ public:
}
}
using solver_na2as::check_sat;
lbool check_sat(expr_ref_vector const& cube, expr_ref_vector const& clause, model_ref* mdl, expr_ref_vector* core, proof_ref* pr) override {
SASSERT(!m_pushed || get_scope_level() > 0);
m_proof.reset();
internalize_assertions();
expr_ref_vector cube1(cube);
cube1.push_back(m_pred);
lbool res = m_base->check_sat(cube1, clause, mdl, core, pr);
switch (res) {
case l_true:
m_pool.m_stats.m_num_sat_checks++;
break;
case l_undef:
m_pool.m_stats.m_num_undef_checks++;
break;
default:
break;
}
set_status(res);
return res;
}
// NSB: seems we would add m_pred as an assumption?
lbool check_sat_core(unsigned num_assumptions, expr * const * assumptions) override {
SASSERT(!m_pushed || get_scope_level() > 0);
m_proof.reset();
scoped_watch _t_(m_pool.m_check_watch);
m_pool.m_stats.m_num_checks++;
stopwatch sw;
sw.start();
internalize_assertions();
@ -156,13 +131,45 @@ public:
break;
}
set_status(res);
if (false /*m_dump_benchmarks && sw.get_seconds() >= m_pool.fparams().m_dump_min_time*/) {
dump_benchmark(num_assumptions, assumptions, res, sw);
}
return res;
}
lbool check_sat_cc_core(const expr_ref_vector &cube,
const expr_ref_vector &clause) override {
SASSERT(!m_pushed || get_scope_level() > 0);
m_proof.reset();
scoped_watch _t_(m_pool.m_check_watch);
m_pool.m_stats.m_num_checks++;
stopwatch sw;
sw.start();
internalize_assertions();
lbool res = m_base->check_sat_cc(cube, clause);
sw.stop();
switch (res) {
case l_true:
m_pool.m_check_sat_watch.add(sw);
m_pool.m_stats.m_num_sat_checks++;
break;
case l_undef:
m_pool.m_check_undef_watch.add(sw);
m_pool.m_stats.m_num_undef_checks++;
break;
default:
break;
}
set_status(res);
// if (false /*m_dump_benchmarks && sw.get_seconds() >= m_pool.fparams().m_dump_min_time*/) {
// dump_benchmark(num_assumptions, assumptions, res, sw);
// }
return res;
}
void push_core() override {
SASSERT(!m_pushed || get_scope_level() > 0);
if (m_in_delayed_scope) {