Skip to content

Conversation

@marcoeilers
Copy link
Contributor

When evaluating an expression let x == (e1) in e2, Silicon emits an (assert (= x e1)) for a fresh variable x on the SMT level to make sure that e1 is available as a triggering term even when does not occur in e2; this is done to fix viperproject/silver#688.

However, these additional variables and equalities can slow down verification significantly (see attached file
floats.txt).

This PR implements a compromise and emits these definitions only when e1 might be triggering and only during function and predicate verification, since in those, let-bound function calls and similar expressions are commonly used e.g. to call lemmas or trigger quantifiers (as in the original issue).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Silicon not using variables assigned through let statements

2 participants