64 5.5. Дополнительные замечания
Отношение вычисления показано в правом столбце рисунка. Как и в случае арифметических вы-
ражений, имеется два типа правил: рабочее правило E-AppAbs и правила соответствия E-App1 и
E-App2.
Обратите внимание, как выбор метапеременных в этих правилах помогает управлять порядком
вычислений. Поскольку v
2
может относиться только к значениям, левая сторона правила E-AppAbs
соотвтествует всем применениям термов, где терм-аргумент является значением. Точно так же, E-App1
относится к тем применениям, где левая часть не является значением, поскольку t
1
может обозначать
любой терм, но предпосылка правила требует, чтобы t
1
был способен совершить шаг вычисления. На-
против, E-App2 не срабатывает, пока левая часть не станет значением, которое может быть обозначено
метапеременной v. Взятые вместе, эти правила полностью определяют порядок вычисления терма вида
(t
1
t
2
): сначала работает E-App1, пока t
1
не сведется к значению, затем E-App2 применяется до тех
пор, пока значением не окажется t
2
, и, наконец, само применение обрабатывается правилом E-AppAbs.
Упражнение 5.4.1 :
Модифицируйте эти правила, чтобы описать три другие стратегии вычисления: полную бета-
редукцию, нормальный порядок и ленивое вычисление.
Заметим, что в чистом лямбда-исчислении единственные возможные значения — это лямбда-
абстракции, так что, если E-App1 доводит t
1
до значения, это значение должно быть лямбда-
абстракцией. Разумеется, это утверждение перестает работать, как только мы добавляем в язык другие
конструкции, скажем, элементарные булевские значения, поскольку при этом у нас появляются новые
виды значений.
Упражнение 5.4.2 , :
В Упражнении 3.5.16 дается альтернативное представление операционной семантики булевских и
арифметических выражений, где тупиковые термы дают при вычислении особую константу wrong.
Распространите эту семантику на λNB.
Упражнение 5.4.3 :
В Упражнении 3.5.17 вводится стиль вычисления арифметических выражений «с большим шагом»,
где базовое отношение вычисления означает «терм t при вычислении дает окончательный результат
v». Покажите, как сформулировать правила вычисления лямбда-термов в этом стиле.
5.5. Дополнительные замечания
Бестиповое лямбда-исчисление было разработано Чёрчем и его коллегами в 20-е и 30-е годы (Church
1941). Стандартный текст по всем вопросам бестипового лямбда-исчисления – книга Барендрегта
(Barenddregt 1984); Хиндли и Селдин (Hindley and Seldin 1986) уже по охвату, но легче для чтения.
Статья Барендрегта (Barendregt 1990) в Справочнике по теоретической информатике представляет
собой краткий обзор. Сведения о лямбда-исчислении можно найти также во множестве учебников по
функциональным языкам программирования (Abelson and Sussman 1985; Friedman, Wand and Haynes
2001; Peyton Jones and Lester 1992) и по семантике языков программирования (напр., Schmidt 1986;
Gunter 1992; Winskel 1993; Mitchell 1996). Систематический метод кодирования различных структур
данных в виде лямбда-термов описан в статье Бёма и Берардуччи (B¨ohm and Berarducci 1985).
Несмотря на название, Карри не признавал за собой чести быть изобретателем каррирования. Часто
ее приписывают Шёнфинкелю (Sch¨onfinkel 1924), однако основная идея была уже известна нескольким
математикам 19-го века, включая Фреге и Кантора.
Возможно, у системы найдутся
приложения не только в роли
логического исчисления.
Алонсо Чёрч, 1932
rev. 104