mirror of
https://github.com/Z3Prover/z3
synced 2025-08-10 05:00:51 +00:00
adding dump facility for cancelation #2095, easing dimacs in/out
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
f7746e2284
commit
498864c582
28 changed files with 653 additions and 518 deletions
|
@ -3,7 +3,7 @@ Copyright (c) 2011 Microsoft Corporation
|
|||
|
||||
Module Name:
|
||||
|
||||
solver.h
|
||||
solver.cpp
|
||||
|
||||
Abstract:
|
||||
|
||||
|
@ -21,25 +21,25 @@ Notes:
|
|||
#include "ast/ast_util.h"
|
||||
#include "ast/ast_pp.h"
|
||||
#include "ast/ast_pp_util.h"
|
||||
#include "ast/display_dimacs.h"
|
||||
#include "tactic/model_converter.h"
|
||||
#include "solver/solver.h"
|
||||
#include "solver/solver_params.hpp"
|
||||
#include "model/model_evaluator.h"
|
||||
|
||||
|
||||
unsigned solver::get_num_assertions() const {
|
||||
NOT_IMPLEMENTED_YET();
|
||||
UNREACHABLE();
|
||||
return 0;
|
||||
}
|
||||
|
||||
expr * solver::get_assertion(unsigned idx) const {
|
||||
NOT_IMPLEMENTED_YET();
|
||||
UNREACHABLE();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::ostream& solver::display(std::ostream & out, unsigned n, expr* const* assumptions) const {
|
||||
expr_ref_vector fmls(get_manager());
|
||||
stopwatch sw;
|
||||
sw.start();
|
||||
get_assertions(fmls);
|
||||
ast_pp_util visitor(get_manager());
|
||||
model_converter_ref mc = get_model_converter();
|
||||
|
@ -57,6 +57,12 @@ std::ostream& solver::display(std::ostream & out, unsigned n, expr* const* assum
|
|||
return out;
|
||||
}
|
||||
|
||||
std::ostream& solver::display_dimacs(std::ostream& out) const {
|
||||
expr_ref_vector fmls(get_manager());
|
||||
get_assertions(fmls);
|
||||
return ::display_dimacs(out, fmls);
|
||||
}
|
||||
|
||||
void solver::get_assertions(expr_ref_vector& fmls) const {
|
||||
unsigned sz = get_num_assertions();
|
||||
for (unsigned i = 0; i < sz; ++i) {
|
||||
|
@ -232,12 +238,16 @@ void solver::collect_param_descrs(param_descrs & r) {
|
|||
|
||||
void solver::reset_params(params_ref const & p) {
|
||||
m_params = p;
|
||||
m_enforce_model_conversion = m_params.get_bool("solver.enforce_model_conversion", false);
|
||||
solver_params sp(m_params);
|
||||
m_enforce_model_conversion = sp.enforce_model_conversion();
|
||||
m_cancel_backup_file = sp.cancel_backup_file();
|
||||
}
|
||||
|
||||
void solver::updt_params(params_ref const & p) {
|
||||
m_params.copy(p);
|
||||
m_enforce_model_conversion = m_params.get_bool("solver.enforce_model_conversion", false);
|
||||
solver_params sp(m_params);
|
||||
m_enforce_model_conversion = sp.enforce_model_conversion();
|
||||
m_cancel_backup_file = sp.cancel_backup_file();
|
||||
}
|
||||
|
||||
|
||||
|
@ -309,3 +319,28 @@ expr_ref_vector solver::get_non_units(ast_manager& m) {
|
|||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
lbool solver::check_sat(unsigned num_assumptions, expr * const * assumptions) {
|
||||
lbool r = l_undef;
|
||||
try {
|
||||
r = check_sat_core(num_assumptions, assumptions);
|
||||
}
|
||||
catch (...) {
|
||||
if (get_manager().canceled()) {
|
||||
dump_state(num_assumptions, assumptions);
|
||||
}
|
||||
throw;
|
||||
}
|
||||
if (r == l_undef && get_manager().canceled()) {
|
||||
dump_state(num_assumptions, assumptions);
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
void solver::dump_state(unsigned sz, expr* const* assumptions) {
|
||||
std::string file = m_cancel_backup_file.str();
|
||||
if (file != "") {
|
||||
std::ofstream ous(file);
|
||||
display(ous, sz, assumptions);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue