Footnotes
-
'Sequentializing' a
forall
statement refers to compiling it directly to a series of nested loops with the statement's body directly inside. The alternative, default compilation strategy is to calculate the quantified variable bindings separately as a collection of tuples, and then execute the statement's body for each tuple. Not allforall
statements can be sequentialized. ↩ -
This refers to an expression such as
['H', 'e', 'l', 'l', 'o']
, as opposed to a string literal such as"Hello"
. ↩ -
This refers to assign-such-that statements with multiple variables, and where at least one variable has potentially infinite bounds. For example, the implementation of the statement
var x: nat, y: nat :| 0 < x && 0 < y && x*x == y*y*y + 1;
needs to avoid the naive approach of iterating all possible values ofx
andy
in a nested loop. ↩ -
Sequence construction expressions often use a direct lambda expression, as in
seq(10, x => x * x)
, but they can also be used with arbitrary function values, as inseq(10, squareFn)
. ↩