-
Notifications
You must be signed in to change notification settings - Fork 20
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
Unsat file reported as SAT #115
Comments
Urgh, this seems to be an issue with lambda pointers, which are fairly complicated... I believe the simplest fix is to remove the two In order to preserve the optimization for the most common case, we can add an other method def resultPointers(encoder: Expr => Encoded)(expr: Expr): Map[Encoded, Encoded] = {
val pointers = expr match {
case Equals(v @ (_: Variable | _: FunctionInvocation | _: Application), e) => collectSelectors(e, v).toMap
case Equals(e, v @ (_: Variable | _: FunctionInvocation | _: Application)) => collectSelectors(e, v).toMap
case _ => Map.empty[Expr, Variable]
}
pointers.map(p => encoder(p._1) -> encoder(p._2))
} and call it inside for (e <- guardedExprs.getOrElse(pv, Set.empty)) {
pointers ++= resultPointers(encoder)(e)
} |
jad-hamza
added a commit
to jad-hamza/inox
that referenced
this issue
Apr 20, 2021
Thanks! Fixed in #135 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The first file is reported as SAT (
--check-models
invalidates the model) while the second one (where thelet g
has been removed) is correctly reported as UNSAT.The SMT file generated by Inox is:
The variable
b_lambda!3
from the end only appears in the assertion(= b_lambda!1 (or start!1 b_lambda!3))
, and is unconstrained becausestart!1
must betrue
.Can this be due to #105 (which touched
let's
)?The text was updated successfully, but these errors were encountered: