Conversation
The `iterate` option, when enabled, made `EcSmt.select` retry the SMT call several times, growing the relevance-selected lemma set on each attempt. Compile and llm modes hard-coded it to true at startup, which silently overrode user-specified bounds: a `smt()` call (max=0) would still ship dozens or hundreds of axioms after one or two retries, and proofs that should fail were closed by lemmas the user never asked for. Interactive mode left iteration off, so the same script behaved differently between batch and REPL. Drop the option entirely: the parsetree field, the parser keyword, the CLI flag, the scope/checkmode/prover_infos plumbing, and the iteration branch in `EcSmt.select`. SMT now always runs a single attempt with the lemma set the user requested.
|
FWIW I had a single change to make in my developments (adding a |
|
Yes, most proofs are developed in interactive mode, so we shouldn't have to worry too much. The main source of chaos will be proof drift when they are checked only in batch mode, but updates to the environment (Why3, provers) take place: the old behaviour would just keep trying until smt went through, hiding the need for a fix. I'll get started on SHA3 now. Would appreciate help on stdlib if anyone has time. |
fdupress
left a comment
There was a problem hiding this comment.
In principle, I love it. In practice, I hate that it's happening right now.
I'll slog through SHA3.
|
I started with the standard library. Not sure how much there is, but will report back. |
|
SHA3 should be going through. Typical fixes:
Literally none of the breaks were missing lemmas. (I am now timing out for the evening. Will try to look at the examples tomorrow, but anyone should feel free to take them on until then :)) |
|
I believe there were only two theories failing in the library. I fixed them and pushed. |
|
Well, |
|
Try running in the docker container ( Or you could install all the provers that are installed in the docker container. But that's another kind of faff. I can look at it tomorrow. |
|
It was a prover version issue. The offending steps were working with my Z3 (4.15.4), but not CVC5 (1.3.3). I had to explicitly add commutativity. Now it's going through on CI. |
Summary
The
iterateoption, when enabled, madeEcSmt.selectretry the SMT call several times, growing the relevance-selected lemma set on each attempt. Compile and llm modes hard-coded it to true at startup, which silently overrode user-specified bounds: asmt()call (max=0) would still ship dozens or hundreds of axioms after one or two retries, and proofs that should fail were closed by lemmas the user never asked for. Interactive mode left iteration off, so the same script behaved differently between batch and REPL.This drops the option entirely — the parsetree field, the parser keyword, the CLI flag, the scope/checkmode/prover_infos plumbing, and the iteration branch in
EcSmt.select. SMT now always runs a single attempt with the lemma set the user requested.Closes #998.
Test plan
smt()afteraxiom bad : false) is rejected in compile mode