What are free names?
Suppose we have the following expression:
(x => { return 4 * square(x) })(3)
square
is free. This is because it is not declared by the immediate surrounding function
Concrete representation
We can map expressions to their free variables through means of a relation: ><
Examples
symbols
x >< {x}
numbers
n >< {}
More complex examples
Predicates
E1 >< X1 E2 >< X2 E3 >< X3
----------------------------
E1 ? E2 : E3 >< X1 ∪ X2 ∪ X3
function
S >< X
----------------------
(x1, ..., xn) a=> { S } >< X - {x1,...,xn}