mirror of
https://github.com/Z3Prover/z3
synced 2025-08-02 17:30:23 +00:00
first eufi example running
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
2288931b46
commit
74621e0b7d
26 changed files with 80 additions and 105 deletions
|
@ -48,9 +48,11 @@ void simple_check_sat_result::collect_statistics(statistics & st) const {
|
|||
st.copy(m_stats);
|
||||
}
|
||||
|
||||
void simple_check_sat_result::get_unsat_core(ptr_vector<expr> & r) {
|
||||
if (m_status == l_false)
|
||||
void simple_check_sat_result::get_unsat_core(expr_ref_vector & r) {
|
||||
if (m_status == l_false) {
|
||||
r.reset();
|
||||
r.append(m_core.size(), m_core.c_ptr());
|
||||
}
|
||||
}
|
||||
|
||||
void simple_check_sat_result::get_model_core(model_ref & m) {
|
||||
|
|
|
@ -50,12 +50,7 @@ public:
|
|||
lbool set_status(lbool r) { return m_status = r; }
|
||||
lbool status() const { return m_status; }
|
||||
virtual void collect_statistics(statistics & st) const = 0;
|
||||
virtual void get_unsat_core(ptr_vector<expr> & r) = 0;
|
||||
virtual void get_unsat_core(expr_ref_vector & r) {
|
||||
ptr_vector<expr> core;
|
||||
get_unsat_core(core);
|
||||
r.append(core.size(), core.c_ptr());
|
||||
}
|
||||
virtual void get_unsat_core(expr_ref_vector & r) = 0;
|
||||
void set_model_converter(model_converter* mc) { m_mc0 = mc; }
|
||||
model_converter* mc0() const { return m_mc0.get(); }
|
||||
virtual void get_model_core(model_ref & m) = 0;
|
||||
|
@ -87,7 +82,7 @@ struct simple_check_sat_result : public check_sat_result {
|
|||
~simple_check_sat_result() override;
|
||||
ast_manager& get_manager() const override { return m_proof.get_manager(); }
|
||||
void collect_statistics(statistics & st) const override;
|
||||
void get_unsat_core(ptr_vector<expr> & r) override;
|
||||
void get_unsat_core(expr_ref_vector & r) override;
|
||||
void get_model_core(model_ref & m) override;
|
||||
proof * get_proof() override;
|
||||
std::string reason_unknown() const override;
|
||||
|
|
|
@ -298,7 +298,7 @@ public:
|
|||
m_solver1->collect_statistics(st);
|
||||
}
|
||||
|
||||
void get_unsat_core(ptr_vector<expr> & r) override {
|
||||
void get_unsat_core(expr_ref_vector & r) override {
|
||||
if (m_use_solver1_results)
|
||||
m_solver1->get_unsat_core(r);
|
||||
else
|
||||
|
|
|
@ -64,7 +64,6 @@ struct mus::imp {
|
|||
}
|
||||
|
||||
void add_assumption(expr* lit) {
|
||||
SASSERT(is_literal(lit));
|
||||
m_assumptions.push_back(lit);
|
||||
}
|
||||
|
||||
|
@ -78,17 +77,9 @@ struct mus::imp {
|
|||
return get_mus1(mus);
|
||||
}
|
||||
|
||||
lbool get_mus(ptr_vector<expr>& mus) {
|
||||
mus.reset();
|
||||
expr_ref_vector result(m);
|
||||
lbool r = get_mus(result);
|
||||
mus.append(result.size(), result.c_ptr());
|
||||
return r;
|
||||
}
|
||||
|
||||
lbool get_mus1(expr_ref_vector& mus) {
|
||||
ptr_vector<expr> unknown(m_lit2expr.size(), m_lit2expr.c_ptr());
|
||||
ptr_vector<expr> core_exprs;
|
||||
expr_ref_vector core_exprs(m);
|
||||
TRACE("mus", m_solver.display(tout););
|
||||
while (!unknown.empty()) {
|
||||
IF_VERBOSE(12, verbose_stream() << "(mus reducing core: " << unknown.size() << " new core: " << mus.size() << ")\n";);
|
||||
|
@ -116,12 +107,12 @@ struct mus::imp {
|
|||
if (!core_exprs.contains(not_lit)) {
|
||||
// unknown := core_exprs \ mus
|
||||
unknown.reset();
|
||||
for (unsigned i = 0; i < core_exprs.size(); ++i) {
|
||||
if (!mus.contains(core_exprs[i])) {
|
||||
unknown.push_back(core_exprs[i]);
|
||||
for (expr* c : core_exprs) {
|
||||
if (!mus.contains(c)) {
|
||||
unknown.push_back(c);
|
||||
}
|
||||
}
|
||||
TRACE("mus", display_vec(tout << "core exprs:", core_exprs);
|
||||
TRACE("mus", tout << "core exprs:" << core_exprs << "\n";
|
||||
display_vec(tout << "core:", unknown);
|
||||
display_vec(tout << "mus:", mus);
|
||||
);
|
||||
|
@ -242,11 +233,11 @@ struct mus::imp {
|
|||
|
||||
void get_core(expr_set& core) {
|
||||
core.reset();
|
||||
ptr_vector<expr> core_exprs;
|
||||
expr_ref_vector core_exprs(m);
|
||||
m_solver.get_unsat_core(core_exprs);
|
||||
for (unsigned i = 0; i < core_exprs.size(); ++i) {
|
||||
if (m_expr2lit.contains(core_exprs[i])) {
|
||||
core.insert(core_exprs[i]);
|
||||
for (expr* c : core_exprs) {
|
||||
if (m_expr2lit.contains(c)) {
|
||||
core.insert(c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -375,9 +366,6 @@ void mus::add_assumption(expr* lit) {
|
|||
return m_imp->add_assumption(lit);
|
||||
}
|
||||
|
||||
lbool mus::get_mus(ptr_vector<expr>& mus) {
|
||||
return m_imp->get_mus(mus);
|
||||
}
|
||||
|
||||
lbool mus::get_mus(expr_ref_vector& mus) {
|
||||
return m_imp->get_mus(mus);
|
||||
|
|
|
@ -47,8 +47,6 @@ class mus {
|
|||
*/
|
||||
void add_assumption(expr* lit);
|
||||
|
||||
lbool get_mus(ptr_vector<expr>& mus);
|
||||
|
||||
lbool get_mus(expr_ref_vector& mus);
|
||||
|
||||
void reset();
|
||||
|
|
|
@ -134,7 +134,7 @@ public:
|
|||
in->set(proof2proof_converter(m, pr));
|
||||
}
|
||||
if (in->unsat_core_enabled()) {
|
||||
ptr_vector<expr> core;
|
||||
expr_ref_vector core(m);
|
||||
local_solver->get_unsat_core(core);
|
||||
for (expr* c : core) {
|
||||
lcore = m.mk_join(lcore, m.mk_leaf(bool2dep.find(c)));
|
||||
|
|
|
@ -83,12 +83,12 @@ public:
|
|||
unsigned get_num_assertions() const override { return m_base->get_num_assertions(); }
|
||||
expr * get_assertion(unsigned idx) const override { return m_base->get_assertion(idx); }
|
||||
|
||||
void get_unsat_core(ptr_vector<expr> & r) override {
|
||||
void get_unsat_core(expr_ref_vector& r) override {
|
||||
m_base->get_unsat_core(r);
|
||||
unsigned j = 0;
|
||||
for (unsigned i = 0; i < r.size(); ++i)
|
||||
if (m_pred != r[i])
|
||||
r[j++] = r[i];
|
||||
if (m_pred != r.get(i))
|
||||
r[j++] = r.get(i);
|
||||
r.shrink(j);
|
||||
}
|
||||
|
||||
|
|
|
@ -62,7 +62,7 @@ public:
|
|||
lbool check_sat_core(unsigned num_assumptions, expr * const * assumptions) override;
|
||||
|
||||
void collect_statistics(statistics & st) const override;
|
||||
void get_unsat_core(ptr_vector<expr> & r) override;
|
||||
void get_unsat_core(expr_ref_vector & r) override;
|
||||
void get_model_core(model_ref & m) override;
|
||||
proof * get_proof() override;
|
||||
std::string reason_unknown() const override;
|
||||
|
@ -219,7 +219,7 @@ void tactic2solver::collect_statistics(statistics & st) const {
|
|||
//SASSERT(m_stats.size() > 0);
|
||||
}
|
||||
|
||||
void tactic2solver::get_unsat_core(ptr_vector<expr> & r) {
|
||||
void tactic2solver::get_unsat_core(expr_ref_vector & r) {
|
||||
if (m_result.get()) {
|
||||
m_result->get_unsat_core(r);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue