-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
z3/spacer returning UNSAT for sat-instance #7505
Comments
Initially, I suspected it to be a bug in the new mbp. But that doesn't seem to be the case. Looking into it.... |
This problem exposes 2 bugs: one in the previous MBP and one in QEL. In the previous MBP, variable are not removed. In QEL, one of the axioms is not applied properly (the rule to factor out read terms as new variables) To reproduce the QEL issue: |
The function to_lits_qe_lite(lits, non_core); walks m_lits that are initialized in one place. |
We have two terms t1 == (e (select (g a) 0) and t2 == (e (select (g b) 0). |
regardless of cause and effect, here is a simpler example:
It bypasses the lifting of (g a) and a into fresh variables. |
What QEL is missing is the project rule in the earlier mbp: https://github.com/Z3Prover/z3/blob/master/src/qe/mbp/mbp_arrays.cpp#L426 (or arithmetic) |
in my example it should replace x[0] by a fresh variable y (or as bailout a constant using the model). |
@hgvk94 - what do you suggest we do about this? |
Good point. Making the ADT rule applicable to terms that contain variables as sub terms does fix the issue (on both our examples). Don't see why that wasn't implemented before. Testing it on other examples ... |
Hey everyone,
for this case z3 returns unexpectedly UNSAT:
A model is given by:
Contrary to #7466 , this seems to be independent from slicing as we also have
I am using Z3 version 4.13.0 - 64 bit.
Is this also a bug?
The text was updated successfully, but these errors were encountered: