mirror of
https://github.com/Z3Prover/z3
synced 2025-04-29 20:05:51 +00:00
fix #5016
This commit is contained in:
parent
04a1d4245c
commit
083d09aa81
14 changed files with 366 additions and 294 deletions
|
@ -27,9 +27,16 @@ Author:
|
|||
#include "sat/smt/q_solver.h"
|
||||
#include "sat/smt/fpa_solver.h"
|
||||
#include "sat/smt/dt_solver.h"
|
||||
#include "sat/smt/recfun_solver.h"
|
||||
|
||||
namespace euf {
|
||||
|
||||
std::ostream& clause_pp::display(std::ostream& out) const {
|
||||
for (auto lit : lits)
|
||||
out << s.literal2expr(lit) << " ";
|
||||
return out;
|
||||
}
|
||||
|
||||
solver::solver(ast_manager& m, sat::sat_internalizer& si, params_ref const& p) :
|
||||
extension(symbol("euf"), m.mk_family_id("euf")),
|
||||
m(m),
|
||||
|
@ -103,6 +110,7 @@ namespace euf {
|
|||
fpa_util fpa(m);
|
||||
arith_util arith(m);
|
||||
datatype_util dt(m);
|
||||
recfun::util rf(m);
|
||||
if (pb.get_family_id() == fid)
|
||||
ext = alloc(sat::ba_solver, *this, fid);
|
||||
else if (bvu.get_family_id() == fid)
|
||||
|
@ -115,6 +123,8 @@ namespace euf {
|
|||
ext = alloc(arith::solver, *this, fid);
|
||||
else if (dt.get_family_id() == fid)
|
||||
ext = alloc(dt::solver, *this, fid);
|
||||
else if (rf.get_family_id() == fid)
|
||||
ext = alloc(recfun::solver, *this);
|
||||
|
||||
if (ext)
|
||||
add_solver(ext);
|
||||
|
@ -430,6 +440,7 @@ namespace euf {
|
|||
if (!init_relevancy())
|
||||
give_up = true;
|
||||
|
||||
|
||||
for (auto* e : m_solvers) {
|
||||
if (!m.inc())
|
||||
return sat::check_result::CR_GIVEUP;
|
||||
|
@ -558,6 +569,26 @@ namespace euf {
|
|||
if (m_ackerman)
|
||||
m_ackerman->propagate();
|
||||
}
|
||||
|
||||
bool solver::should_research(sat::literal_vector const& core) {
|
||||
bool result = false;
|
||||
for (auto* e : m_solvers)
|
||||
if (e->should_research(core))
|
||||
result = true;
|
||||
return result;
|
||||
}
|
||||
|
||||
void solver::add_assumptions() {
|
||||
for (auto* e : m_solvers)
|
||||
e->add_assumptions();
|
||||
}
|
||||
|
||||
bool solver::tracking_assumptions() {
|
||||
for (auto* e : m_solvers)
|
||||
if (e->tracking_assumptions())
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
void solver::clauses_modifed() {
|
||||
for (auto* e : m_solvers)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue