mirror of
https://github.com/Z3Prover/z3
synced 2025-04-24 09:35:32 +00:00
pop to base before incremental internalization to ensure that units are not lost
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
3113901c8f
commit
7b3b1b6e9f
2 changed files with 13 additions and 11 deletions
|
@ -178,10 +178,19 @@ lbool solver::preferred_sat(expr_ref_vector const& asms, vector<expr_ref_vector>
|
|||
return check_sat(0, nullptr);
|
||||
}
|
||||
|
||||
bool solver::is_literal(ast_manager& m, expr* e) {
|
||||
return is_uninterp_const(e) || (m.is_not(e, e) && is_uninterp_const(e));
|
||||
|
||||
static bool is_m_atom(ast_manager& m, expr* f) {
|
||||
if (!is_app(f)) return true;
|
||||
app* _f = to_app(f);
|
||||
family_id bfid = m.get_basic_family_id();
|
||||
if (_f->get_family_id() != bfid) return true;
|
||||
if (_f->get_num_args() > 0 && m.is_bool(_f->get_arg(0))) return false;
|
||||
return m.is_eq(f) || m.is_distinct(f);
|
||||
}
|
||||
|
||||
bool solver::is_literal(ast_manager& m, expr* e) {
|
||||
return is_m_atom(m, e) || (m.is_not(e, e) && is_m_atom(m, e));
|
||||
}
|
||||
|
||||
void solver::assert_expr(expr* f) {
|
||||
expr_ref fml(f, get_manager());
|
||||
|
@ -257,14 +266,6 @@ expr_ref_vector solver::get_units(ast_manager& m) {
|
|||
return result;
|
||||
}
|
||||
|
||||
static bool is_m_atom(ast_manager& m, expr* f) {
|
||||
if (!is_app(f)) return true;
|
||||
app* _f = to_app(f);
|
||||
family_id bfid = m.get_basic_family_id();
|
||||
if (_f->get_family_id() != bfid) return true;
|
||||
if (_f->get_num_args() > 0 && m.is_bool(_f->get_arg(0))) return false;
|
||||
return m.is_eq(f) || m.is_distinct(f);
|
||||
}
|
||||
|
||||
expr_ref_vector solver::get_non_units(ast_manager& m) {
|
||||
expr_ref_vector result(m), fmls(m);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue