mirror of
https://github.com/Z3Prover/z3
synced 2025-08-18 01:02:15 +00:00
Add virtual translate method to solver_factory class (#7780)
* Initial plan * Add virtual translate method to solver_factory base class and all implementations Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> * Add documentation for the translate method in solver_factory Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: NikolajBjorner <3085284+NikolajBjorner@users.noreply.github.com>
This commit is contained in:
parent
237891c901
commit
eb7fd9efaa
5 changed files with 32 additions and 0 deletions
|
@ -527,6 +527,10 @@ public:
|
|||
solver * operator()(ast_manager & m, params_ref const & p, bool proofs_enabled, bool models_enabled, bool unsat_core_enabled, symbol const & logic) override {
|
||||
return mk_smt_solver(m, p, logic);
|
||||
}
|
||||
|
||||
solver_factory* translate(ast_manager& m) override {
|
||||
return alloc(smt_solver_factory);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -424,6 +424,12 @@ public:
|
|||
(*m_f2)(m, p, proofs_enabled, models_enabled, unsat_core_enabled, logic),
|
||||
p);
|
||||
}
|
||||
|
||||
solver_factory* translate(ast_manager& m) override {
|
||||
solver_factory* translated_f1 = m_f1->translate(m);
|
||||
solver_factory* translated_f2 = m_f2->translate(m);
|
||||
return alloc(combined_solver_factory, translated_f1, translated_f2);
|
||||
}
|
||||
};
|
||||
|
||||
solver_factory * mk_combined_solver_factory(solver_factory * f1, solver_factory * f2) {
|
||||
|
|
|
@ -32,6 +32,11 @@ class solver_factory {
|
|||
public:
|
||||
virtual ~solver_factory() = default;
|
||||
virtual solver * operator()(ast_manager & m, params_ref const & p, bool proofs_enabled, bool models_enabled, bool unsat_core_enabled, symbol const & logic) = 0;
|
||||
/**
|
||||
\brief Create a clone of the solver factory for the given ast_manager.
|
||||
The clone should be functionally equivalent but associated with the target manager.
|
||||
*/
|
||||
virtual solver_factory* translate(ast_manager& m) = 0;
|
||||
};
|
||||
|
||||
solver_factory * mk_smt_strategic_solver_factory(symbol const & logic = symbol::null);
|
||||
|
|
|
@ -390,6 +390,11 @@ public:
|
|||
solver * operator()(ast_manager & m, params_ref const & p, bool proofs_enabled, bool models_enabled, bool unsat_core_enabled, symbol const & logic) override {
|
||||
return mk_tactic2solver(m, m_tactic.get(), p, proofs_enabled, models_enabled, unsat_core_enabled, logic);
|
||||
}
|
||||
|
||||
solver_factory* translate(ast_manager& m) override {
|
||||
tactic* translated_tactic = m_tactic->translate(m);
|
||||
return alloc(tactic2solver_factory, translated_tactic);
|
||||
}
|
||||
};
|
||||
|
||||
class tactic_factory2solver_factory : public solver_factory {
|
||||
|
@ -402,6 +407,10 @@ public:
|
|||
tactic * t = (*m_factory)(m, p);
|
||||
return mk_tactic2solver(m, t, p, proofs_enabled, models_enabled, unsat_core_enabled, logic);
|
||||
}
|
||||
|
||||
solver_factory* translate(ast_manager& m) override {
|
||||
return alloc(tactic_factory2solver_factory, m_factory);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -60,6 +60,10 @@ public:
|
|||
auto s = mk_tactic2solver(m, t, p, proofs_enabled, models_enabled, unsat_core_enabled, logic);
|
||||
return s;
|
||||
}
|
||||
|
||||
solver_factory* translate(ast_manager& m) override {
|
||||
return alloc(smt_nested_solver_factory);
|
||||
}
|
||||
};
|
||||
|
||||
tactic * mk_tactic_for_logic(ast_manager & m, params_ref const & p, symbol const & logic) {
|
||||
|
@ -185,6 +189,10 @@ public:
|
|||
mk_solver_for_logic(m, p, l),
|
||||
p);
|
||||
}
|
||||
|
||||
solver_factory* translate(ast_manager& m) override {
|
||||
return alloc(smt_strategic_solver_factory, m_logic);
|
||||
}
|
||||
};
|
||||
|
||||
solver_factory * mk_smt_strategic_solver_factory(symbol const & logic) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue