Связанные и свободные переменные

В этой главе рассмотрим достаточно тривиальные вещи, но они будут очень полезны в последующем материале. Введём такое понятие, как свободные переменные, которые обозначим FVFV. Вот несколько примеров применения этого понятия ко всем известным нам термам.

FV(x)\displaystyle \mathrm{FV}(x) ={x},\displaystyle {} = \{x\},​FV(λx. M)\displaystyle \mathrm{FV}(\lambda x.\,M)​=FV(M)∖{x},\displaystyle {} = \mathrm{FV}(M)\setminus\{x\},​FV(M N)\displaystyle \mathrm{FV}(M\,N)​=FV(M)∪FV(N)\displaystyle {} = \mathrm{FV}(M)\cup\mathrm{FV}(N)
(1.2)

У одиночной переменной xx свободна сама xx. В абстракции λx. M\lambda x.\,M переменная xx связывается ближайшей лямбдой, поэтому из свободных переменных тела MM её надо убрать. В применении M NM\,N свободные переменные берутся из обеих частей: всё свободное в MM плюс всё свободное в NN. Терм без свободных переменных называется замкнутым, или комбинатором; при этом одна и та же буква может встретиться и свободно, и связанно, например, в x (λx. x)x\,(\lambda x.\,x).

Напомню, что терм представляет собой дерево, а переменные — листья. Так вот, в листья можно подставлять, в свою очередь, поддеревья, то есть термы. Такая операция называется подстановкой. Вот несколько примеров таких подстановок:

x[x:=N]\displaystyle x[x{:=}N] =N,\displaystyle {} = N,​y[x:=N]\displaystyle y[x{:=}N]​=y    (y≠x)\displaystyle {} = y \;\; (y \neq x)
(1.3)
(M1 M2)[x:=N]\displaystyle (M_1\,M_2)[x{:=}N] =M1[x:=N]  M2[x:=N]\displaystyle {} = M_1[x{:=}N]\;M_2[x{:=}N]
(1.4)
(λy. M)[x:=N]\displaystyle (\lambda y.\,M)[x{:=}N] =λy. M[x:=N],\displaystyle {} = \lambda y.\,M[x{:=}N],​y\displaystyle y​≠x,  y\displaystyle {} \neq x,\; y​∉FV(N)\displaystyle {} \notin \mathrm{FV}(N)
(1.5)

Вот видите, появились уже какие-то ограничения. А почему? Тут есть важная тонкость. Например, если условие yy​∉FV(N){} \notin \mathrm{FV}(N) нарушено, свободная переменная «захватывается» чужой абстракцией:

(λy. x)[x:=y]\displaystyle (\lambda y.\,x)[x{:=}y] ≠λy. y— смысл изменился!\displaystyle {} \neq \lambda y.\,y \quad\text{— смысл изменился!}

Лекарство — α-конверсия, но об этом чуть позже.