mirror of
https://github.com/Z3Prover/z3
synced 2025-04-12 20:18:18 +00:00
parent
a63d1b1848
commit
b0b6394c6c
|
@ -1388,6 +1388,7 @@ ast_manager::ast_manager(ast_manager const & src, bool disable_proofs):
|
||||||
m_format_manager = alloc(ast_manager, PGM_DISABLED, m_trace_stream, true);
|
m_format_manager = alloc(ast_manager, PGM_DISABLED, m_trace_stream, true);
|
||||||
init();
|
init();
|
||||||
copy_families_plugins(src);
|
copy_families_plugins(src);
|
||||||
|
update_fresh_id(src);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ast_manager::update_fresh_id(ast_manager const& m) {
|
void ast_manager::update_fresh_id(ast_manager const& m) {
|
||||||
|
|
|
@ -119,6 +119,7 @@ namespace sat {
|
||||||
void add_ate(clause const& c);
|
void add_ate(clause const& c);
|
||||||
|
|
||||||
bool empty() const { return m_entries.empty(); }
|
bool empty() const { return m_entries.empty(); }
|
||||||
|
unsigned size() const { return m_entries.size(); }
|
||||||
|
|
||||||
void reset();
|
void reset();
|
||||||
bool check_invariant(unsigned num_vars) const;
|
bool check_invariant(unsigned num_vars) const;
|
||||||
|
|
|
@ -1785,7 +1785,7 @@ namespace sat {
|
||||||
TRACE("sat", for (bool_var v = 0; v < num; v++) tout << v << ": " << m_model[v] << "\n";);
|
TRACE("sat", for (bool_var v = 0; v < num; v++) tout << v << ": " << m_model[v] << "\n";);
|
||||||
|
|
||||||
if (m_clone) {
|
if (m_clone) {
|
||||||
IF_VERBOSE(SAT_VB_LVL, verbose_stream() << "\"checking model (on original set of clauses)\"\n";);
|
IF_VERBOSE(1, verbose_stream() << "\"checking model (on original set of clauses)\"\n";);
|
||||||
if (!m_clone->check_model(m_model)) {
|
if (!m_clone->check_model(m_model)) {
|
||||||
//IF_VERBOSE(0, display(verbose_stream()));
|
//IF_VERBOSE(0, display(verbose_stream()));
|
||||||
//IF_VERBOSE(0, display_watches(verbose_stream()));
|
//IF_VERBOSE(0, display_watches(verbose_stream()));
|
||||||
|
|
|
@ -813,12 +813,9 @@ private:
|
||||||
}
|
}
|
||||||
sat::model const & ll_m = m_solver.get_model();
|
sat::model const & ll_m = m_solver.get_model();
|
||||||
mdl = alloc(model, m);
|
mdl = alloc(model, m);
|
||||||
for (auto const& kv : m_map) {
|
for (sat::bool_var v = 0; v < ll_m.size(); ++v) {
|
||||||
expr * n = kv.m_key;
|
expr* n = m_sat_mc->var2expr(v);
|
||||||
if (is_app(n) && to_app(n)->get_num_args() > 0) {
|
if (!n || (is_app(n) && to_app(n)->get_num_args() > 0)) continue;
|
||||||
continue;
|
|
||||||
}
|
|
||||||
sat::bool_var v = kv.m_value;
|
|
||||||
switch (sat::value_at(v, ll_m)) {
|
switch (sat::value_at(v, ll_m)) {
|
||||||
case l_true:
|
case l_true:
|
||||||
mdl->register_decl(to_app(n)->get_decl(), m.mk_true());
|
mdl->register_decl(to_app(n)->get_decl(), m.mk_true());
|
||||||
|
@ -830,10 +827,9 @@ private:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//IF_VERBOSE(0, model_v2_pp(verbose_stream(), *mdl, true););
|
|
||||||
|
|
||||||
if (m_sat_mc) {
|
if (m_sat_mc) {
|
||||||
//IF_VERBOSE(0, m_sat_mc->display(verbose_stream() << "satmc\n"););
|
// IF_VERBOSE(0, m_sat_mc->display(verbose_stream() << "satmc\n"););
|
||||||
(*m_sat_mc)(mdl);
|
(*m_sat_mc)(mdl);
|
||||||
}
|
}
|
||||||
if (m_mcs.back()) {
|
if (m_mcs.back()) {
|
||||||
|
@ -842,11 +838,12 @@ private:
|
||||||
}
|
}
|
||||||
TRACE("sat", model_smt2_pp(tout, m, *mdl, 0););
|
TRACE("sat", model_smt2_pp(tout, m, *mdl, 0););
|
||||||
|
|
||||||
|
if (!gparams::get_ref().get_bool("model_validate", false)) {
|
||||||
if (!gparams::get_ref().get_bool("model_validate", false)) return;
|
return;
|
||||||
|
}
|
||||||
IF_VERBOSE(1, verbose_stream() << "Verifying solution\n";);
|
IF_VERBOSE(1, verbose_stream() << "Verifying solution\n";);
|
||||||
model_evaluator eval(*mdl);
|
model_evaluator eval(*mdl);
|
||||||
eval.set_model_completion(false);
|
// eval.set_model_completion(false);
|
||||||
bool all_true = true;
|
bool all_true = true;
|
||||||
//unsigned i = 0;
|
//unsigned i = 0;
|
||||||
for (expr * f : m_fmls) {
|
for (expr * f : m_fmls) {
|
||||||
|
@ -856,14 +853,15 @@ private:
|
||||||
tout << "Evaluation failed: " << mk_pp(f, m) << " to " << mk_pp(f, m) << "\n";
|
tout << "Evaluation failed: " << mk_pp(f, m) << " to " << mk_pp(f, m) << "\n";
|
||||||
model_smt2_pp(tout, m, *(mdl.get()), 0););
|
model_smt2_pp(tout, m, *(mdl.get()), 0););
|
||||||
if (!m.is_true(tmp)) {
|
if (!m.is_true(tmp)) {
|
||||||
IF_VERBOSE(0, verbose_stream() << "failed to verify: " << mk_pp(f, m) << "\n";);
|
IF_VERBOSE(0, verbose_stream() << "failed to verify: " << mk_pp(f, m) << "\n");
|
||||||
|
IF_VERBOSE(0, verbose_stream() << "evaluated to " << tmp << "\n");
|
||||||
all_true = false;
|
all_true = false;
|
||||||
}
|
}
|
||||||
//IF_VERBOSE(0, verbose_stream() << (i++) << ": " << mk_pp(f, m) << "\n");
|
//IF_VERBOSE(0, verbose_stream() << (i++) << ": " << mk_pp(f, m) << "\n");
|
||||||
}
|
}
|
||||||
if (!all_true) {
|
if (!all_true) {
|
||||||
IF_VERBOSE(0, verbose_stream() << m_params << "\n");
|
IF_VERBOSE(0, verbose_stream() << m_params << "\n");
|
||||||
IF_VERBOSE(0, m_sat_mc->display(verbose_stream() << "sat mc\n"));
|
// IF_VERBOSE(0, m_sat_mc->display(verbose_stream() << "sat mc\n"));
|
||||||
IF_VERBOSE(0, if (m_mcs.back()) m_mcs.back()->display(verbose_stream() << "mc0\n"));
|
IF_VERBOSE(0, if (m_mcs.back()) m_mcs.back()->display(verbose_stream() << "mc0\n"));
|
||||||
//IF_VERBOSE(0, m_solver.display(verbose_stream()));
|
//IF_VERBOSE(0, m_solver.display(verbose_stream()));
|
||||||
IF_VERBOSE(0, for (auto const& kv : m_map) verbose_stream() << mk_pp(kv.m_key, m) << " |-> " << kv.m_value << "\n");
|
IF_VERBOSE(0, for (auto const& kv : m_map) verbose_stream() << mk_pp(kv.m_key, m) << " |-> " << kv.m_value << "\n");
|
||||||
|
|
|
@ -208,7 +208,6 @@ void solver::assert_expr(expr* f, expr* t) {
|
||||||
expr_ref fml(f, m);
|
expr_ref fml(f, m);
|
||||||
expr_ref a(t, m);
|
expr_ref a(t, m);
|
||||||
if (m_enforce_model_conversion) {
|
if (m_enforce_model_conversion) {
|
||||||
IF_VERBOSE(0, verbose_stream() << "enforce model conversion\n";);
|
|
||||||
model_converter_ref mc = get_model_converter();
|
model_converter_ref mc = get_model_converter();
|
||||||
if (mc) {
|
if (mc) {
|
||||||
(*mc)(fml);
|
(*mc)(fml);
|
||||||
|
|
Loading…
Reference in a new issue