Closed samuelchassot closed 1 month ago
It does not work well with quantifiers.
Example of function that does not work for now:
def hoRecur(x: BigInt, f: BigInt => BigInt): BigInt = {
require(x >= 0 && forall((x: BigInt) => f(x) < x && f(x) >= 0))
decreases(x)
if (x <= 0) BigInt(0)
else
hoRecur(f(x), f)
}
The issue is in the UnrollingSolver, when the model is evaluated in the axioms in the templates.
Can you update @samuelchassot ?
Add a SAT check for preconditions. Example of usage:
outputs: