mirror of
https://github.com/Z3Prover/z3
synced 2025-06-12 09:03:26 +00:00
parent
918b6a8c03
commit
759fb03daf
3 changed files with 10 additions and 76 deletions
|
@ -109,34 +109,6 @@ namespace smt {
|
||||||
m_model_generator->set_context(this);
|
m_model_generator->set_context(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
literal context::translate_literal(
|
|
||||||
literal lit, context& src_ctx, context& dst_ctx,
|
|
||||||
vector<bool_var> b2v, ast_translation& tr) {
|
|
||||||
ast_manager& dst_m = dst_ctx.get_manager();
|
|
||||||
ast_manager& src_m = src_ctx.get_manager();
|
|
||||||
expr_ref dst_f(dst_m);
|
|
||||||
|
|
||||||
SASSERT(lit != false_literal && lit != true_literal);
|
|
||||||
bool_var v = b2v.get(lit.var(), null_bool_var);
|
|
||||||
if (v == null_bool_var) {
|
|
||||||
expr* e = src_ctx.m_bool_var2expr.get(lit.var(), 0);
|
|
||||||
SASSERT(e);
|
|
||||||
dst_f = tr(e);
|
|
||||||
v = dst_ctx.get_bool_var_of_id_option(dst_f->get_id());
|
|
||||||
if (v != null_bool_var) {
|
|
||||||
}
|
|
||||||
else if (src_m.is_not(e) || src_m.is_and(e) || src_m.is_or(e) ||
|
|
||||||
src_m.is_iff(e) || src_m.is_ite(e)) {
|
|
||||||
v = dst_ctx.mk_bool_var(dst_f);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
dst_ctx.internalize_formula(dst_f, true);
|
|
||||||
v = dst_ctx.get_bool_var(dst_f);
|
|
||||||
}
|
|
||||||
b2v.setx(lit.var(), v, null_bool_var);
|
|
||||||
}
|
|
||||||
return literal(v, lit.sign());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
\brief retrieve flag for when cancelation is possible.
|
\brief retrieve flag for when cancelation is possible.
|
||||||
|
@ -191,52 +163,18 @@ namespace smt {
|
||||||
if (!src_ctx.m_setup.already_configured()) {
|
if (!src_ctx.m_setup.already_configured()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (unsigned i = 0; !src_m.proofs_enabled() && i < src_ctx.m_assigned_literals.size(); ++i) {
|
||||||
|
literal lit = src_ctx.m_assigned_literals[i];
|
||||||
|
expr_ref fml0(src_m), fml1(dst_m);
|
||||||
|
src_ctx.literal2expr(lit, fml0);
|
||||||
|
fml1 = tr(fml0.get());
|
||||||
|
dst_ctx.assert_expr(fml1);
|
||||||
|
}
|
||||||
|
|
||||||
dst_ctx.setup_context(dst_ctx.m_fparams.m_auto_config);
|
dst_ctx.setup_context(dst_ctx.m_fparams.m_auto_config);
|
||||||
dst_ctx.internalize_assertions();
|
dst_ctx.internalize_assertions();
|
||||||
|
|
||||||
vector<bool_var> b2v;
|
|
||||||
|
|
||||||
#define TRANSLATE(_lit) translate_literal(_lit, src_ctx, dst_ctx, b2v, tr)
|
|
||||||
|
|
||||||
for (unsigned i = 0; i < src_ctx.m_assigned_literals.size(); ++i) {
|
|
||||||
literal lit;
|
|
||||||
lit = TRANSLATE(src_ctx.m_assigned_literals[i]);
|
|
||||||
dst_ctx.mk_clause(1, &lit, nullptr, CLS_AUX, nullptr);
|
|
||||||
}
|
|
||||||
#if 0
|
|
||||||
literal_vector lits;
|
|
||||||
expr_ref_vector cls(src_m);
|
|
||||||
for (unsigned i = 0; i < src_ctx.m_lemmas.size(); ++i) {
|
|
||||||
lits.reset();
|
|
||||||
cls.reset();
|
|
||||||
clause& src_cls = *src_ctx.m_lemmas[i];
|
|
||||||
unsigned sz = src_cls.get_num_literals();
|
|
||||||
for (unsigned j = 0; j < sz; ++j) {
|
|
||||||
literal lit = TRANSLATE(src_cls.get_literal(j));
|
|
||||||
lits.push_back(lit);
|
|
||||||
}
|
|
||||||
dst_ctx.mk_clause(lits.size(), lits.c_ptr(), 0, src_cls.get_kind(), 0);
|
|
||||||
}
|
|
||||||
vector<watch_list>::const_iterator it = src_ctx.m_watches.begin();
|
|
||||||
vector<watch_list>::const_iterator end = src_ctx.m_watches.end();
|
|
||||||
literal ls[2];
|
|
||||||
for (unsigned l_idx = 0; it != end; ++it, ++l_idx) {
|
|
||||||
literal l1 = to_literal(l_idx);
|
|
||||||
literal neg_l1 = ~l1;
|
|
||||||
watch_list const & wl = *it;
|
|
||||||
literal const * it2 = wl.begin();
|
|
||||||
literal const * end2 = wl.end();
|
|
||||||
for (; it2 != end2; ++it2) {
|
|
||||||
literal l2 = *it2;
|
|
||||||
if (l1.index() < l2.index()) {
|
|
||||||
ls[0] = TRANSLATE(neg_l1);
|
|
||||||
ls[1] = TRANSLATE(l2);
|
|
||||||
dst_ctx.mk_clause(2, ls, 0, CLS_AUX, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
TRACE("smt_context",
|
TRACE("smt_context",
|
||||||
src_ctx.display(tout);
|
src_ctx.display(tout);
|
||||||
dst_ctx.display(tout););
|
dst_ctx.display(tout););
|
||||||
|
|
|
@ -1476,10 +1476,6 @@ namespace smt {
|
||||||
// copy plugins into a fresh context.
|
// copy plugins into a fresh context.
|
||||||
void copy_plugins(context& src, context& dst);
|
void copy_plugins(context& src, context& dst);
|
||||||
|
|
||||||
static literal translate_literal(
|
|
||||||
literal lit, context& src_ctx, context& dst_ctx,
|
|
||||||
vector<bool_var> b2v, ast_translation& tr);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
\brief Utilities for consequence finding.
|
\brief Utilities for consequence finding.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -524,7 +524,6 @@ namespace smt {
|
||||||
}
|
}
|
||||||
|
|
||||||
void theory_array_base::collect_shared_vars(sbuffer<theory_var> & result) {
|
void theory_array_base::collect_shared_vars(sbuffer<theory_var> & result) {
|
||||||
TRACE("array", tout << "collecting shared vars...\n";);
|
|
||||||
context & ctx = get_context();
|
context & ctx = get_context();
|
||||||
ptr_buffer<enode> to_unmark;
|
ptr_buffer<enode> to_unmark;
|
||||||
unsigned num_vars = get_num_vars();
|
unsigned num_vars = get_num_vars();
|
||||||
|
@ -549,6 +548,7 @@ namespace smt {
|
||||||
r->set_mark();
|
r->set_mark();
|
||||||
to_unmark.push_back(r);
|
to_unmark.push_back(r);
|
||||||
}
|
}
|
||||||
|
TRACE("array", tout << "collecting shared vars...\n" << unsigned_vector(result.size(), (unsigned*)result.c_ptr()) << "\n";);
|
||||||
unmark_enodes(to_unmark.size(), to_unmark.c_ptr());
|
unmark_enodes(to_unmark.size(), to_unmark.c_ptr());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue