mirror of
https://github.com/Z3Prover/z3
synced 2025-06-19 12:23:38 +00:00
extract also units from search state
This commit is contained in:
parent
d4ea67a6e7
commit
3f3d058567
7 changed files with 36 additions and 1 deletions
|
@ -4613,6 +4613,22 @@ namespace smt {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void context::get_units(expr_ref_vector& result) {
|
||||||
|
expr_mark visited;
|
||||||
|
for (expr* fml : result)
|
||||||
|
visited.mark(fml);
|
||||||
|
for (literal lit : m_assigned_literals) {
|
||||||
|
if (get_assign_level(lit) > m_base_lvl)
|
||||||
|
break;
|
||||||
|
expr_ref e(m);
|
||||||
|
literal2expr(lit, e);
|
||||||
|
if (visited.is_marked(e))
|
||||||
|
continue;
|
||||||
|
result.push_back(std::move(e));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
failure context::get_last_search_failure() const {
|
failure context::get_last_search_failure() const {
|
||||||
return m_last_search_failure;
|
return m_last_search_failure;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1691,6 +1691,8 @@ namespace smt {
|
||||||
|
|
||||||
void get_assertions(ptr_vector<expr> & result) { m_asserted_formulas.get_assertions(result); }
|
void get_assertions(ptr_vector<expr> & result) { m_asserted_formulas.get_assertions(result); }
|
||||||
|
|
||||||
|
void get_units(expr_ref_vector& result);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* user-propagator
|
* user-propagator
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -178,6 +178,10 @@ namespace smt {
|
||||||
m_imp->m_kernel.get_assignments(result);
|
m_imp->m_kernel.get_assignments(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void kernel::get_units(expr_ref_vector & result) {
|
||||||
|
m_imp->m_kernel.get_units(result);
|
||||||
|
}
|
||||||
|
|
||||||
void kernel::get_relevant_labels(expr * cnstr, buffer<symbol> & result) {
|
void kernel::get_relevant_labels(expr * cnstr, buffer<symbol> & result) {
|
||||||
m_imp->m_kernel.get_relevant_labels(cnstr, result);
|
m_imp->m_kernel.get_relevant_labels(cnstr, result);
|
||||||
}
|
}
|
||||||
|
|
|
@ -203,6 +203,12 @@ namespace smt {
|
||||||
*/
|
*/
|
||||||
void get_assignments(expr_ref_vector & result);
|
void get_assignments(expr_ref_vector & result);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
\brief Return units assigned by the kernel.
|
||||||
|
*/
|
||||||
|
void get_units(expr_ref_vector& result);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
\brief Return the set of relevant labels in the last check command.
|
\brief Return the set of relevant labels in the last check command.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -318,6 +318,10 @@ namespace {
|
||||||
return m_context.get_formula(idx);
|
return m_context.get_formula(idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void get_units_core(expr_ref_vector& units) override {
|
||||||
|
m_context.get_units(units);
|
||||||
|
}
|
||||||
|
|
||||||
expr_ref_vector cube(expr_ref_vector& vars, unsigned cutoff) override {
|
expr_ref_vector cube(expr_ref_vector& vars, unsigned cutoff) override {
|
||||||
ast_manager& m = get_manager();
|
ast_manager& m = get_manager();
|
||||||
if (!m_cuber) {
|
if (!m_cuber) {
|
||||||
|
|
|
@ -242,6 +242,7 @@ expr_ref_vector solver::get_units() {
|
||||||
ast_manager& m = get_manager();
|
ast_manager& m = get_manager();
|
||||||
expr_ref_vector fmls(m), result(m), tmp(m);
|
expr_ref_vector fmls(m), result(m), tmp(m);
|
||||||
get_assertions(fmls);
|
get_assertions(fmls);
|
||||||
|
get_units_core(fmls);
|
||||||
obj_map<expr, bool> units;
|
obj_map<expr, bool> units;
|
||||||
for (expr* f : fmls) {
|
for (expr* f : fmls) {
|
||||||
if (m.is_not(f, f) && is_literal(m, f)) {
|
if (m.is_not(f, f) && is_literal(m, f)) {
|
||||||
|
|
|
@ -261,6 +261,8 @@ public:
|
||||||
*/
|
*/
|
||||||
expr_ref_vector get_units();
|
expr_ref_vector get_units();
|
||||||
|
|
||||||
|
virtual void get_units_core(expr_ref_vector& units) {}
|
||||||
|
|
||||||
expr_ref_vector get_non_units();
|
expr_ref_vector get_non_units();
|
||||||
|
|
||||||
virtual expr_ref_vector get_trail() = 0; // { return expr_ref_vector(get_manager()); }
|
virtual expr_ref_vector get_trail() = 0; // { return expr_ref_vector(get_manager()); }
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue