3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-07-18 02:16:40 +00:00
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
Nikolaj Bjorner 2019-09-02 09:59:58 -07:00
parent 000e485794
commit 68e4ed3c9c
5 changed files with 85 additions and 11 deletions

View file

@ -666,7 +666,7 @@ namespace qe {
// expr -> nlsat::solver
void hoist(expr_ref& fml) {
bool hoist(expr_ref& fml) {
expr_ref_vector paxioms(m);
ackermanize_div(fml, paxioms);
quantifier_hoister hoist(m);
@ -674,7 +674,6 @@ namespace qe {
app_ref_vector vars(m);
bool is_forall = false;
pred_abs abs(m);
expr_ref fml_a(m.mk_and(fml, mk_and(paxioms)), m);
abs.get_free_vars(fml_a, vars);
insert_set(m_free_vars, vars);
@ -752,6 +751,7 @@ namespace qe {
}
}
TRACE("qe", tout << fml << "\n";);
return true;
}
@ -836,7 +836,10 @@ namespace qe {
}
reset();
TRACE("qe", tout << fml << "\n";);
hoist(fml);
if (!hoist(fml)) {
result.push_back(in.get());
return;
}
TRACE("qe", tout << "ex: " << fml << "\n";);
lbool is_sat = check_sat();

View file

@ -511,14 +511,14 @@ namespace qe {
bool pred_abs::validate_defs(model& model) const {
bool valid = true;
obj_map<expr, expr*>::iterator it = m_pred2lit.begin(), end = m_pred2lit.end();
for (; it != end; ++it) {
for (auto& kv : m_pred2lit) {
expr_ref val_a(m), val_b(m);
expr* a = it->m_key;
expr* b = it->m_value;
expr* a = kv.m_key;
expr* b = kv.m_value;
val_a = model(a);
val_b = model(b);
if (val_a != val_b) {
if ((m.is_true(val_a) && m.is_false(val_b)) ||
(m.is_false(val_a) && m.is_true(val_b))) {
TRACE("qe",
tout << mk_pp(a, m) << " := " << val_a << "\n";
tout << mk_pp(b, m) << " := " << val_b << "\n";