Footnotes
-
'Sequentializing' a
forallstatement 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 allforallstatements 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 ofxandyin 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). ↩