[chore] stabilise SMT and bump provers - #1084
Conversation
Just for my understanding, upgrading z3 and cvc5 makes their capability worse on dealing with |
|
One of our two provers is such that the version we used in CI before this PR had no issue proving "(forall x, A x) => (forall x, A x => B) => B" whereas its new version stalls on it, or at least on instances of it that requires pulling I won't try and speculate as to why this prover lost that capability. I will simply note in passing that the formula above is true only if types cannot be empty. |
|
A note on the current HEAD (reducing the timeout in all runs to 1): I ran this locally with a timeout of .5 and got two failing SMT applications that I could not reproduce consistently. I am really trying to make this fail in the hope to identify all "bad places". A note on the earlier discussion: it could well be that the regression on "goals whose proof require pulling |
e7f4110 to
73d8aa6
Compare
|
First CI success with a 1s timeout! Things to figure out:
If the first question could be answered in review that would be great. |
Explanation: This is a why3/cvc5 bug, I think. I can reproduce it this outside of the docker container. The cvc5 1.3.4 release reports the following on |
ed1b45d to
ecac8ef
Compare
|
Decision to merge this with Z3 4.16 and CVC5 1.1, 3 second timeout in CI. |
ecac8ef to
8ca7558
Compare
|
@strub quick review, please? |
and move the timeout parameter to easycrypt.project
8ca7558 to
f91e5df
Compare
|
FTR, I do observe some SMT instability there (last smt call on that line sometimes exceeds the timeout, z3 4.16.0):
|
|
Thanks, @vbgl . Is that in CI, and is CVC5 set up as well? I'll iterate on it, but really could not trigger failures with much smaller timeouts either locally (0.01s), locally in docker (0.01s), or in CI (1s). |
|
Yes, in CI. More configuration details: |
@EasyCrypt/developers I need quick eyes on this, and for you to tell me how much of a pain in the arse it is to bump z3 to 4.16 and cvc5 to 1.1.x as a requirement for easycrypt dev.
I use arch (btw), so my own setup can follow SMT solvers relatively closely, but I recognise that not everybody likes to spend their weekend fixing their bootloader...
As a side note, most of the proof breakage is in places where the solver would need to recall that
witnessexists in all types, and to instantiate a universal quantification with it for the sake of a proof. I assume that both z3 and cvc5 have made a move towards more "constructive-compatible" heuristics in places, as they work to better integrate with ITPs.