mirror of
https://github.com/Z3Prover/z3
synced 2025-06-06 22:23:22 +00:00
Replace smt::kernel with smt_solver
Replace all ad-hoc uses of smt::kernel with ad-hoc uses of smt_solver
This commit is contained in:
parent
df2e9d8fe2
commit
4b09cefb97
2 changed files with 23 additions and 21 deletions
|
@ -2256,9 +2256,10 @@ bool context::validate()
|
||||||
fv.reverse ();
|
fv.reverse ();
|
||||||
tmp = m.mk_exists(fv.size(), fv.c_ptr(), names.c_ptr(), tmp);
|
tmp = m.mk_exists(fv.size(), fv.c_ptr(), names.c_ptr(), tmp);
|
||||||
}
|
}
|
||||||
smt::kernel solver(m, m_pm.fparams2());
|
ref<solver> sol =
|
||||||
solver.assert_expr(tmp);
|
mk_smt_solver(m, params_ref::get_empty(), symbol::null);
|
||||||
lbool res = solver.check();
|
sol->assert_expr(tmp);
|
||||||
|
lbool res = sol->check_sat(0, nullptr);
|
||||||
if (res != l_false) {
|
if (res != l_false) {
|
||||||
msg << "rule validation failed when checking: "
|
msg << "rule validation failed when checking: "
|
||||||
<< mk_pp(tmp, m);
|
<< mk_pp(tmp, m);
|
||||||
|
@ -2648,7 +2649,8 @@ expr_ref context::get_ground_sat_answer()
|
||||||
{ cex.push_back(m.mk_const(preds[0])); }
|
{ cex.push_back(m.mk_const(preds[0])); }
|
||||||
|
|
||||||
// smt context to obtain local cexes
|
// smt context to obtain local cexes
|
||||||
scoped_ptr<smt::kernel> cex_ctx = alloc (smt::kernel, m, m_pm.fparams2 ());
|
ref<solver> cex_ctx =
|
||||||
|
mk_smt_solver(m, params_ref::get_empty(), symbol::null);
|
||||||
model_evaluator_util mev (m);
|
model_evaluator_util mev (m);
|
||||||
|
|
||||||
// preorder traversal of the query derivation tree
|
// preorder traversal of the query derivation tree
|
||||||
|
@ -2689,7 +2691,7 @@ expr_ref context::get_ground_sat_answer()
|
||||||
}
|
}
|
||||||
cex_ctx->assert_expr (pt->transition ());
|
cex_ctx->assert_expr (pt->transition ());
|
||||||
cex_ctx->assert_expr (pt->rule2tag (r));
|
cex_ctx->assert_expr (pt->rule2tag (r));
|
||||||
lbool res = cex_ctx->check ();
|
lbool res = cex_ctx->check_sat(0, nullptr);
|
||||||
CTRACE("cex", res == l_false,
|
CTRACE("cex", res == l_false,
|
||||||
tout << "Cex fact: " << mk_pp(cex_fact, m) << "\n";
|
tout << "Cex fact: " << mk_pp(cex_fact, m) << "\n";
|
||||||
for (unsigned i = 0; i < u_tail_sz; i++)
|
for (unsigned i = 0; i < u_tail_sz; i++)
|
||||||
|
@ -3624,10 +3626,9 @@ void context::reset_statistics()
|
||||||
|
|
||||||
bool context::check_invariant(unsigned lvl)
|
bool context::check_invariant(unsigned lvl)
|
||||||
{
|
{
|
||||||
decl2rel::iterator it = m_rels.begin(), end = m_rels.end();
|
for (auto &entry : m_rels) {
|
||||||
for (; it != end; ++it) {
|
|
||||||
checkpoint();
|
checkpoint();
|
||||||
if (!check_invariant(lvl, it->m_key)) {
|
if (!check_invariant(lvl, entry.m_key)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3636,7 +3637,7 @@ bool context::check_invariant(unsigned lvl)
|
||||||
|
|
||||||
bool context::check_invariant(unsigned lvl, func_decl* fn)
|
bool context::check_invariant(unsigned lvl, func_decl* fn)
|
||||||
{
|
{
|
||||||
smt::kernel ctx(m, m_pm.fparams2());
|
ref<solver> ctx = mk_smt_solver(m, params_ref::get_empty(), symbol::null);
|
||||||
pred_transformer& pt = *m_rels.find(fn);
|
pred_transformer& pt = *m_rels.find(fn);
|
||||||
expr_ref_vector conj(m);
|
expr_ref_vector conj(m);
|
||||||
expr_ref inv = pt.get_formulas(next_level(lvl), false);
|
expr_ref inv = pt.get_formulas(next_level(lvl), false);
|
||||||
|
@ -3644,9 +3645,10 @@ bool context::check_invariant(unsigned lvl, func_decl* fn)
|
||||||
pt.add_premises(m_rels, lvl, conj);
|
pt.add_premises(m_rels, lvl, conj);
|
||||||
conj.push_back(m.mk_not(inv));
|
conj.push_back(m.mk_not(inv));
|
||||||
expr_ref fml(m.mk_and(conj.size(), conj.c_ptr()), m);
|
expr_ref fml(m.mk_and(conj.size(), conj.c_ptr()), m);
|
||||||
ctx.assert_expr(fml);
|
ctx->assert_expr(fml);
|
||||||
lbool result = ctx.check();
|
lbool result = ctx->check_sat(0, nullptr);
|
||||||
TRACE("spacer", tout << "Check invariant level: " << lvl << " " << result << "\n" << mk_pp(fml, m) << "\n";);
|
TRACE("spacer", tout << "Check invariant level: " << lvl << " " << result
|
||||||
|
<< "\n" << mk_pp(fml, m) << "\n";);
|
||||||
return result == l_false;
|
return result == l_false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ Revision History:
|
||||||
#include "ast/rewriter/expr_safe_replace.h"
|
#include "ast/rewriter/expr_safe_replace.h"
|
||||||
#include "ast/substitution/matcher.h"
|
#include "ast/substitution/matcher.h"
|
||||||
#include "ast/expr_functors.h"
|
#include "ast/expr_functors.h"
|
||||||
|
#include "smt/smt_solver.h"
|
||||||
|
|
||||||
namespace spacer {
|
namespace spacer {
|
||||||
void lemma_sanity_checker::operator()(lemma_ref &lemma) {
|
void lemma_sanity_checker::operator()(lemma_ref &lemma) {
|
||||||
|
@ -249,17 +249,17 @@ void lemma_array_eq_generalizer::operator() (lemma_ref &lemma)
|
||||||
{ eqs.push_back(m.mk_eq(m.mk_const(vsymbs.get(i)),
|
{ eqs.push_back(m.mk_eq(m.mk_const(vsymbs.get(i)),
|
||||||
m.mk_const(vsymbs.get(j)))); }
|
m.mk_const(vsymbs.get(j)))); }
|
||||||
|
|
||||||
smt::kernel solver(m, m_ctx.get_manager().fparams2());
|
ref<solver> sol = mk_smt_solver(m, params_ref::get_empty(), symbol::null);
|
||||||
expr_ref_vector lits(m);
|
expr_ref_vector lits(m);
|
||||||
for (unsigned i = 0, core_sz = core.size(); i < core_sz; ++i) {
|
for (unsigned i = 0, core_sz = core.size(); i < core_sz; ++i) {
|
||||||
SASSERT(lits.size() == i);
|
SASSERT(lits.size() == i);
|
||||||
solver.push();
|
sol->push();
|
||||||
solver.assert_expr(core.get(i));
|
sol->assert_expr(core.get(i));
|
||||||
for (unsigned j = 0, eqs_sz = eqs.size(); j < eqs_sz; ++j) {
|
for (unsigned j = 0, eqs_sz = eqs.size(); j < eqs_sz; ++j) {
|
||||||
solver.push();
|
sol->push();
|
||||||
solver.assert_expr(eqs.get(j));
|
sol->assert_expr(eqs.get(j));
|
||||||
lbool res = solver.check();
|
lbool res = sol->check_sat(0, nullptr);
|
||||||
solver.pop(1);
|
sol->pop(1);
|
||||||
|
|
||||||
if (res == l_false) {
|
if (res == l_false) {
|
||||||
TRACE("core_array_eq",
|
TRACE("core_array_eq",
|
||||||
|
@ -269,7 +269,7 @@ void lemma_array_eq_generalizer::operator() (lemma_ref &lemma)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
solver.pop(1);
|
sol->pop(1);
|
||||||
if (lits.size() == i) { lits.push_back(core.get(i)); }
|
if (lits.size() == i) { lits.push_back(core.get(i)); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue