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}