3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-23 17:15:31 +00:00

working on named assertions support

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
Leonardo de Moura 2012-11-02 08:28:34 -07:00
parent 230382d4c9
commit d545f187f8
10 changed files with 223 additions and 96 deletions

View file

@ -18,8 +18,9 @@ Notes:
#include"ni_solver.h"
#include"smt_kernel.h"
#include"cmd_context.h"
#include"solver_na2as.h"
class ni_smt_solver : public solver {
class ni_smt_solver : public solver_na2as {
protected:
cmd_context & m_cmd_ctx;
smt::kernel * m_context;
@ -32,7 +33,7 @@ public:
dealloc(m_context);
}
virtual void init(ast_manager & m, symbol const & logic) {
virtual void init_core(ast_manager & m, symbol const & logic) {
// do nothing
}
@ -45,7 +46,7 @@ public:
}
}
virtual void reset() {
virtual void reset_core() {
if (m_context != 0) {
#pragma omp critical (ni_solver)
{
@ -59,18 +60,14 @@ public:
// do nothing
}
virtual void push() {
virtual void push_core() {
// do nothing
}
virtual void pop(unsigned n) {
virtual void pop_core(unsigned n) {
// do nothing
}
virtual unsigned get_scope_level() const {
return m_cmd_ctx.num_scopes();
}
void assert_exprs() {
ptr_vector<expr>::const_iterator it = m_cmd_ctx.begin_assertions();
ptr_vector<expr>::const_iterator end = m_cmd_ctx.end_assertions();
@ -92,7 +89,7 @@ public:
assert_exprs();
}
virtual lbool check_sat(unsigned num_assumptions, expr * const * assumptions) {
virtual lbool check_sat_core(unsigned num_assumptions, expr * const * assumptions) {
// erase current solver, and create a new one.
init_solver();
@ -165,15 +162,15 @@ public:
virtual ~qi_smt_solver() {}
virtual void init(ast_manager & m, symbol const & logic) {
virtual void init_core(ast_manager & m, symbol const & logic) {
if (m_inc_mode) {
init_solver();
m_inc_mode = true;
}
}
virtual void reset() {
ni_smt_solver::reset();
virtual void reset_core() {
ni_smt_solver::reset_core();
m_inc_mode = false;
}
@ -196,31 +193,23 @@ public:
}
}
virtual void push() {
virtual void push_core() {
switch_to_inc();
SASSERT(m_context);
m_context->push();
SASSERT(m_inc_mode);
}
virtual void pop(unsigned n) {
virtual void pop_core(unsigned n) {
switch_to_inc();
SASSERT(m_context);
m_context->pop(n);
SASSERT(m_inc_mode);
}
virtual unsigned get_scope_level() const {
if (!m_inc_mode)
return 0;
else
return m_context->get_scope_level();
}
virtual lbool check_sat(unsigned num_assumptions, expr * const * assumptions) {
virtual lbool check_sat_core(unsigned num_assumptions, expr * const * assumptions) {
if (!m_inc_mode) {
lbool r = ni_smt_solver::check_sat(num_assumptions, assumptions);
lbool r = ni_smt_solver::check_sat_core(num_assumptions, assumptions);
SASSERT(!m_inc_mode);
return r;
}

View file

@ -16,14 +16,14 @@ Author:
Notes:
--*/
#include"solver.h"
#include"solver_na2as.h"
#include"smt_kernel.h"
#include"reg_decl_plugins.h"
#include"front_end_params.h"
namespace smt {
class solver : public ::solver {
class solver : public solver_na2as {
front_end_params * m_params;
smt::kernel * m_context;
public:
@ -57,7 +57,7 @@ namespace smt {
}
}
virtual void init(ast_manager & m, symbol const & logic) {
virtual void init_core(ast_manager & m, symbol const & logic) {
SASSERT(m_params);
reset();
#pragma omp critical (solver)
@ -77,7 +77,7 @@ namespace smt {
}
}
virtual void reset() {
virtual void reset_core() {
if (m_context != 0) {
#pragma omp critical (solver)
{
@ -92,24 +92,17 @@ namespace smt {
m_context->assert_expr(t);
}
virtual void push() {
virtual void push_core() {
SASSERT(m_context);
m_context->push();
}
virtual void pop(unsigned n) {
virtual void pop_core(unsigned n) {
SASSERT(m_context);
m_context->pop(n);
}
virtual unsigned get_scope_level() const {
if (m_context)
return m_context->get_scope_level();
else
return 0;
}
virtual lbool check_sat(unsigned num_assumptions, expr * const * assumptions) {
virtual lbool check_sat_core(unsigned num_assumptions, expr * const * assumptions) {
SASSERT(m_context);
return m_context->check(num_assumptions, assumptions);
}