You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 773b750
Browse filesBrowse the repository at this point in the historyBrowse files
perf(smt): memories as abstract values, local variables as functions of them
A memory with local variables was translated as a why3 pair of the tuple
of all its locals and an abstract memory, and a local `x{m}` as a
projection of the first component. why3's `eliminate_algebraic` then
expands the tuple type in every task: for a Jasmin extraction with 162
locals (the `param_k`/`result_k` of the extracted procedures), a single
`x{hr}` in a hypothesis adds 162 projection definitions and a 27 000-line
inversion axiom, 3.4 MB of SMT-LIB per call, 2 s of printing and parsing
for goals the provers close in milliseconds.
A memory is now the abstract type `memory` whatever its memtype, and a
local variable an uninterpreted function `x : memory -> ty`, created once
per name and type (`te_lvar`), as global variables already are
(`te_xpath`). The argument variable `arg` is the tuple of the functions of
the declared parameters (a single parameter is `arg` itself); `glob M` and
`Pr[...]` take the whole memory. `tests/smt-memory-locals.ec` covers
locals, `arg` and its projections, a single parameter, `={arg}` in an
equiv, and the memories of `Pr` statements.
On the Keccak safety proofs of jasmin-nist, a prover call goes from 2.2 s
to 0.1 s (47 KB task), the AVX2 file from 140 s to 32 s and the scenario
of 49 files from 221 s to 135 s elapsed. `unit` and `stdlib` pass.
The loop-body step of PIR_s_uniform in examples/PIR.ec closed by a
prover call that found its instances of the restriction lemmas with some
prover versions only; two step lemmas (restr_addS_eq, restr_S_eq) now
rewrite the goal to a propositional one.
0 commit comments