mirror of
https://github.com/Z3Prover/z3
synced 2025-07-18 02:16:40 +00:00
parent
000e485794
commit
68e4ed3c9c
5 changed files with 85 additions and 11 deletions
|
@ -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();
|
||||
|
||||
|
|
|
@ -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";
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue