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:
parent
4477f7d326
commit
26339119e4
6 changed files with 50 additions and 70 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue