
14.2.
λ
-КОНВЕРСИИ
395
Рассмотрим некоторые конструкции λ-языка. Пусть f и g — функ-
ции. Тогда (f(gx)) применяет f к результату вычисления g на x, и терм
λx. (f(gx)) выражает функцию, являющуюся композицией f и g. С дру-
гой стороны, ((fx)y), если принять во внимание преобразование Карри,
выражает применение функции
f
к двум аргументам, а, соответственно,
((fg)y) — применение функционала f к функциональному аргументу
g и обычному x
7
.
Исходя из содержательного смысла конверсий как символьных вы-
числений, можно определить равенство
λ-термов t и r как существова-
ние такого s, что t ⇒ s, r ⇒ s. Но обосновать такое определение не
слишком просто: ведь прежде всего отношение равенства должно быть
отношением эквивалентности; рефлексивность и симметричность на-
шего определения очевидны, но с транзитивностью дело обстоит не так
просто. Если t
1
⇒ s
1
, t
2
⇒ s
1
, t
2
⇒ s
2
, t
3
⇒ s
2
, то откуда следу-
ет, что найдется такое s, что t
1
⇒ s, t
3
⇒ s? Тем не менее временно
примем такое сомнительное определение, которое обосновывается тео-
ремой Черча-Россера, доказываемой в следующей главе.
Теперь рассмотрим преобразование, впервые введенное явно в
λ-
исчислении и ставшее краеугольным камнем современной теории про-
граммирования.
Предложение 14.2.2. (Лемма о неподвижной точке) Для любого
λ-
терма F найдется такой λ-терм X, что X = (F X).
Доказательство. Определим
W как λx. (F (xx)),и пусть X есть (W W ).
Тогда легко показать самим, что X конвертируется в (F X)
8
.
Данное предложение служит ярким примером важной и нетривиаль-
ной теоремы, доказывающейся в три строчки, но такой, до которой не-
легко было додуматься, и такой, которая имеет множество применений.
В самом деле, поскольку создатели λ-языка с самого начала отдавали
себе отчет в его универсальности (он годится для выражения любого
функционала, встречающегося в математике, естественно, при подхо-
7
На самом деле нигде не сказано, что g — функция, а x — предмет. Занимаясь λ-
исчислением, необходимо помнить, что функция может быть подставлена в любом ме-
сте.
8
Здесь есть единственная, но ехидная тонкость: не (F X) преобразуется в X, а X в
него!