mirror of
https://github.com/Z3Prover/z3
synced 2025-04-23 09:05:31 +00:00
fix #6748
destructive equality resolution uses an occurs check function that is only safe for quantifier-free formulas. In the special case where a bound variable is Boolean and occurs on a side of an equality the other side cannot have a quantifier.
This commit is contained in:
parent
57e92b2a59
commit
06a8987314
2 changed files with 3 additions and 3 deletions
|
@ -176,9 +176,9 @@ void der::reduce1(quantifier * q, expr_ref & r, proof_ref & pr) {
|
|||
var * v = nullptr;
|
||||
expr_ref t(m);
|
||||
|
||||
if (is_forall(q) && is_var_diseq(e, num_decls, v, t) && !occurs(v, t))
|
||||
if (is_forall(q) && is_var_diseq(e, num_decls, v, t) && !has_quantifiers(t) && !occurs(v, t))
|
||||
r = m.mk_false();
|
||||
else if (is_exists(q) && is_var_eq(e, num_decls, v, t) && !occurs(v, t))
|
||||
else if (is_exists(q) && is_var_eq(e, num_decls, v, t) && !has_quantifiers(t) && !occurs(v, t))
|
||||
r = m.mk_true();
|
||||
else {
|
||||
expr_ref_vector literals(m);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue