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:
parent
230382d4c9
commit
d545f187f8
10 changed files with 223 additions and 96 deletions
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue