-
Notifications
You must be signed in to change notification settings - Fork 49
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
Problem with preprocessing? #261
Comments
I had a very brief look at it with object Preprocessing$0 {
def theorem$0(b$0 : Boolean): Unit = {
require(b$0)
check$0(b$0)
true
} ensuring {
(x$1$0 : Boolean) => true
}
() // <- Mind this part
} and then the xlang desugaring phase will, mistakenly, keep only the The question is, should those functions be fixed or should such program be explicitly rejected? (It could be argued that having return type of |
Indeed the issue is that require/ensuring can be attached to any expression, and due to the Unit type and the final boolean expression, the parsed expression is a sequence of two operations:
And then for some reason, xlang extract the check function call without the require. That could be fixed, but then there are other issues in the solver itself, which does not seem to support require at arbitrary position in the tree. In an ideal world we should be able to solve the solver, I don't see any issue with supporting require at any level of a function @colder @samarion @manoskouk ? But for now it's probably better to be careful and not write such functions. |
This seems like a typo to me (the return type should be Boolean), but on the subject itself: |
The check(b) fails. Is there an issue with preprocessing?
Removing ": Unit", "true" (at the end), or the ensuring clause make the verification go through.
The text was updated successfully, but these errors were encountered: