mirror of
https://github.com/Z3Prover/z3
synced 2025-04-24 09:35:32 +00:00
working on Forking/Serializing a z3 Solver #209
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
7b72486644
commit
b4cb51cdb3
31 changed files with 241 additions and 96 deletions
|
@ -127,6 +127,17 @@ public:
|
|||
m_use_solver1_results = true;
|
||||
}
|
||||
|
||||
solver* translate(ast_manager& m, params_ref const& p) {
|
||||
solver* s1 = m_solver1->translate(m, p);
|
||||
solver* s2 = m_solver2->translate(m, p);
|
||||
combined_solver* r = alloc(combined_solver, s1, s2, p);
|
||||
r->m_solver2_initialized = m_solver2_initialized;
|
||||
r->m_inc_mode = m_inc_mode;
|
||||
r->m_check_sat_executed = m_check_sat_executed;
|
||||
r->m_use_solver1_results = m_use_solver1_results;
|
||||
return r;
|
||||
}
|
||||
|
||||
virtual void updt_params(params_ref const & p) {
|
||||
m_solver1->updt_params(p);
|
||||
m_solver2->updt_params(p);
|
||||
|
|
|
@ -46,6 +46,12 @@ public:
|
|||
class solver : public check_sat_result {
|
||||
public:
|
||||
virtual ~solver() {}
|
||||
|
||||
/**
|
||||
\brief Creates a clone of the solver.
|
||||
*/
|
||||
virtual solver* translate(ast_manager& m, params_ref const& p) = 0;
|
||||
|
||||
/**
|
||||
\brief Update the solver internal settings.
|
||||
*/
|
||||
|
@ -135,6 +141,8 @@ public:
|
|||
*/
|
||||
virtual expr * get_assumption(unsigned idx) const = 0;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
\brief Display the content of this solver.
|
||||
*/
|
||||
|
|
|
@ -22,6 +22,7 @@ Notes:
|
|||
#include"solver_na2as.h"
|
||||
#include"tactic.h"
|
||||
#include"ast_pp_util.h"
|
||||
#include"ast_translation.h"
|
||||
|
||||
/**
|
||||
\brief Simulates the incremental solver interface using a tactic.
|
||||
|
@ -45,6 +46,8 @@ public:
|
|||
tactic2solver(ast_manager & m, tactic * t, params_ref const & p, bool produce_proofs, bool produce_models, bool produce_unsat_cores, symbol const & logic);
|
||||
virtual ~tactic2solver();
|
||||
|
||||
virtual solver* translate(ast_manager& m, params_ref const& p);
|
||||
|
||||
virtual void updt_params(params_ref const & p);
|
||||
virtual void collect_param_descrs(param_descrs & r);
|
||||
|
||||
|
@ -183,6 +186,22 @@ void tactic2solver::set_cancel(bool f) {
|
|||
}
|
||||
}
|
||||
|
||||
solver* tactic2solver::translate(ast_manager& m, params_ref const& p) {
|
||||
tactic* t = m_tactic->translate(m);
|
||||
tactic2solver* r = alloc(tactic2solver, m, t, p, m_produce_proofs, m_produce_models, m_produce_unsat_cores, m_logic);
|
||||
r->m_result = 0;
|
||||
if (!m_scopes.empty()) {
|
||||
throw default_exception("translation of contexts is only supported at base level");
|
||||
}
|
||||
ast_translation tr(m_assertions.get_manager(), m, false);
|
||||
|
||||
for (unsigned i = 0; i < get_num_assertions(); ++i) {
|
||||
r->m_assertions.push_back(tr(get_assertion(i)));
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
void tactic2solver::collect_statistics(statistics & st) const {
|
||||
st.copy(m_stats);
|
||||
//SASSERT(m_stats.size() > 0);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue