-
Notifications
You must be signed in to change notification settings - Fork 66
Fix bool lets #791
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
Fix bool lets #791
Conversation
I'm not too bothered by these, we'll doubtless get them some other way and being correct is usually slower than being incorrect. Will now review - but thanks for looking into SMT-LIB, this is the kind of large bug we should catch. |
| Term* lhs; | ||
| if (exprSort == AtomicSort::boolSort()) { | ||
| // This solution is ugly, but either := has to be special or we have | ||
| // to wrap this as a formula to preserve the term-formula boundary. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
At some point we can re-consider - I think you're of the opinion that more interpreted symbols and fewer special terms are a good thing, which I agree with. But for now this is a good fix.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, I would be happy if the special term wrapper disappeared at some point, but let's see if we can get rid of it.
|
I ran a regression from f0fb5f9 (before the let-bound PR) to this branch and I found another bug introduced in the let-bound PR. It was because of my seemingly permanent misunderstanding of the functions Now it still seems a bit suspicious, because we can somehow solve ~500 more benchmarks than before the let-bound PR. ~50 are lost. I will look into it for some time. |
|
Looking at a couple of benchmarks in the difference, it seems that up to clausification the difference is trivial (for example, using |
|
Do I read that as "we're not unsound because this only affects Vampire up to clausification"? |
|
The let-bound changes mostly affected everything up to clausification, otherwise I don't know what other changes in between could have caused this result. Any ideas? |
I think I also suffered from this. :-/ Any suggestions for a rename? I could go for
I wouldn't be too surprised if this were the case. I'm not sure what it would tell us here, but sometimes I write the clausification output to a file and then run Vampire on the CNF. If you don't see the same effect, it's probably something like term IDs or symbol precedence? |
|
I have no idea what it should be. Fortunately it is not used in many places (and maybe some of them are incorrect too!) and it looks like it is always used in the context of preprocessing special Boolean terms? But anyways, this PR is nevertheless an improvement over master. I also ran TPTP regression, now it came back without any difference compared to master. |
|
Btw, the function could be probably simplified by taking |
This amends #783 from the SMTLIB side with the case of Boolean let binders.
I tested with:
Not sure if I should test on more SMTLIB benchmarks or look into the differences, but I want to eventually run longer term regressions over SMTLIB too to see if we somehow decline.