3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-29 11:55:51 +00:00

solver factories, cleanup solver API, simplified strategic solver, added combined solver

Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
Leonardo de Moura 2012-12-11 17:47:27 -08:00
parent bfe6678ad2
commit 8198e62cbd
22 changed files with 720 additions and 492 deletions

View file

@ -582,8 +582,8 @@ void cmd_context::init_manager_core(bool new_manager) {
// it prevents clashes with builtin types.
insert(pm().mk_plist_decl());
}
if (m_solver) {
init_solver_options(m_solver.get());
if (m_solver_factory) {
mk_solver();
}
m_check_logic.set_logic(m(), m_logic);
}
@ -1119,7 +1119,7 @@ void cmd_context::reset(bool finalize) {
reset_func_decls();
restore_assertions(0);
if (m_solver)
m_solver->reset();
m_solver = 0;
m_pp_env = 0;
m_dt_eh = 0;
if (m_manager) {
@ -1441,17 +1441,18 @@ void cmd_context::validate_model() {
}
}
void cmd_context::init_solver_options(solver * s) {
void cmd_context::mk_solver() {
bool proofs_enabled, models_enabled, unsat_core_enabled;
params_ref p;
m_params.init_solver_params(m(), *m_solver, p);
m_solver->init(m(), m_logic);
m_params.get_solver_params(m(), p, proofs_enabled, models_enabled, unsat_core_enabled);
m_solver = (*m_solver_factory)(m(), p, proofs_enabled, models_enabled, unsat_core_enabled, m_logic);
}
void cmd_context::set_solver(solver * s) {
void cmd_context::set_solver_factory(solver_factory * f) {
m_solver_factory = f;
m_check_sat_result = 0;
m_solver = s;
if (has_manager() && s != 0) {
init_solver_options(s);
if (has_manager() && f != 0) {
mk_solver();
// assert formulas and create scopes in the new solver.
unsigned lim = 0;
svector<scope>::iterator it = m_scopes.begin();