-
Notifications
You must be signed in to change notification settings - Fork 32
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
Different verification results produced when there is only a variable name difference #198
Comments
Thanks for the report. Can you explain to me why you think the expected result of "unknown" is correct? The ground truth is that the file is either SAT (fails verification) or UNSAT (passes verification), unknown is simply what the SMT solver reports when it can't figure out the actual answer. I don't know why the SMT solver can find a solution in the second case but not in the first, I'll look into it, but note that if an "assert false" is unreachable, it will pass verification. |
Thank you for the answer. Whenever In the above examples, the point before In contrast, while the same procedure is called and all the assumptions are the same, the I am not sure why |
I think you have misunderstood the UNDEF/unknown results. All that means is that the SMT problem is too hard for the SMT solver to solve so we don't know whether your assert false is reachable or not. The correct result cannot ever be "undef" because the correct result is never "we don't know". To summarise, for an assert false, if UCLID reports:
We do not know if the line before simple_test is reachable either, because an assert false in that position is reported as UNDEF. Take a look at the SMT files. The reason the files generated by your first branch are unknown is because there are a lot of difficult quantifiers. This is a much simplified version of part of one of your queries and an SMT solver reports unknown:
The reason the second file can be verified, is the final two assertions are trivial to solve:
Without going into your proofs in detail, I'm not sure where these conflicting assertions have come from. I am happy to take a look if you can provide a more minimal input |
Thank you for the detailed answer. I seem to have misunderstood the UNDEF/unknown results. I've made another example, but removed it because there was a logic error in that example. |
I have the same targets to verify where there is only the difference in a variable name (
owner_map
in the below). While they contain the exact same code logic and there is no place where the modified variable is used, the verification results are different for some reasons. I think that this is the bug inuclid
, but I am not sure what is the root cause of this bug.Different results
As there is an explicit false assertion inserted, the
expected results
are correct.However, in the unexpected results, this false assertion is bypassed for some reasons.
Before the false assertion, the child module (
see
)'s one variable is simply modified.How to reproduce?
In the following two branches, expected-branch and unexpected-branch,
The text was updated successfully, but these errors were encountered: