You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Dear Z3 team,
I have potentially found a bug which results in Z3 reporting SAT although the constraint is unsatisfiable.
The constraint in pseudocode is not(#t2.(!(t8).((t8,1) : t2 => 1 >= t8 ) & ran(t2) = {1})), where : is a set membership, # is an existential quantifier, ! is a universal quantifier, and ran is the range of a relation (i.e., a set of pairs such as (1,2)).
Our tool encodes this constraint in SMT-LIB as follows:
Expected result: UNSAT Actual result: SAT
It should be noted that the lambda expression is the encoding of the relational range operator. The rest of the translation to SMT-LIB is straightforward.
I suspect that the problem is the negation of an existential quantifier that uses a universal quantifier and, in particular, a lambda expression at the top-level.
Z3 mistakenly reports satisfiability for version 4.8.10, 4.8.11, and 4.8.12 as well as up to the latest commit on the master branch using the unreleased version 4.8.13.
This is the smallest constraint that I could find which leads to the wrong result.
I have thoroughly checked the SMT-LIB code and in my opinion it should indeed be unsatisfiable.
I hope that you can reconstruct the fact that the SMT-LIB constraint should be unsatisfiable.
Please let me know if this is not the case.
The text was updated successfully, but these errors were encountered:
the result is now unknown because the nested expression contains exists, which doesn't get replaced by universal quantifier which is assumed by the legacy core.
The legacy core should not depend on universal quantifiers only, but fixing this is a risk. Workaround is to rewrite goals using forall only (replace exists by de-Morgan dual).
Dear Z3 team,
I have potentially found a bug which results in Z3 reporting SAT although the constraint is unsatisfiable.
The constraint in pseudocode is
not(#t2.(!(t8).((t8,1) : t2 => 1 >= t8 ) & ran(t2) = {1}))
, where:
is a set membership,#
is an existential quantifier,!
is a universal quantifier, andran
is the range of a relation (i.e., a set of pairs such as (1,2)).Our tool encodes this constraint in SMT-LIB as follows:
Expected result: UNSAT
Actual result: SAT
It should be noted that the lambda expression is the encoding of the relational range operator. The rest of the translation to SMT-LIB is straightforward.
I suspect that the problem is the negation of an existential quantifier that uses a universal quantifier and, in particular, a lambda expression at the top-level.
Z3 mistakenly reports satisfiability for version 4.8.10, 4.8.11, and 4.8.12 as well as up to the latest commit on the master branch using the unreleased version 4.8.13.
This is the smallest constraint that I could find which leads to the wrong result.
I have thoroughly checked the SMT-LIB code and in my opinion it should indeed be unsatisfiable.
I hope that you can reconstruct the fact that the SMT-LIB constraint should be unsatisfiable.
Please let me know if this is not the case.
The text was updated successfully, but these errors were encountered: