9.6. Стиль Карри и стиль Чёрча 91
Разумеется, мы ожидаем, что два способа представления семантики простого типизированного
лямбда-исчисления совпадут: не должно иметь значения, вычисляем ли мы типизированный терм на-
прямую, или проводим стирание типов и затем вычисляем получившийся бестиповый терм. Это наше
ожидание формализуется в следующей теореме, которая воплощает лозунг «вычисление коммутирует
со стиранием», в смысле, что эти операции можно проводить в любом порядке — вычислив, и потом сте-
рев типы, мы получаем тот же самый результат, как если бы сначала стерли типы, а потом вычислили
терм:
Теорема 9.5.2 1. Если t t согласно типизированному отношению вычисления, то erase t
erase t .
2. Если erase t m согласно бестиповому отношению вычисления, то существует типизиро-
ванный терм t , такой, что t t и erase t m .
Доказательство: Несложная индукция по деревьям вывода вычисления.
Поскольку рассматриваемая нами «компиляция» настолько проста, Теорема 9.5.2 очевида до три-
виальности. Однако для более интересных языков и более интересных компиляторов она становится
важным свойством: она утверждает, что «высокоуровневая» семантика, напрямую выраженная на язы-
ке, используемом программистом, совпадает с альтернативной низкоуровневой стратегией вычисления,
реально используемой в реализации языка.
Еще один интересный вопрос, связанный с функцией стирания, таков: если у нас есть бестиповый
терм m, можем ли мы найти простой типизированный терм t, дающий при стирании типов m?
Определение 9.5.3 Терм m бестипового лямбда-исчисления называется типизируемым в λ если име-
ется простой типизированный терм t типа T и контекст Γ, такой, что erase t m и Γ t : T.
К этому вопросу мы вернемя в Главе 22, когда рассмотрим близкородственную проблематику ре-
конструкции типов для λ .
9.6. Стиль Карри и стиль Чёрча
Как мы видели, семантику простого типизированного лямбда-исчисления можно определить двумя
способами: как отношение вычисления, определенное прямо на синтаксисе простого типизированного
исчисления, либо как компиляцию в бестиповое исчисление в сочетании с отношением вычисления на
бестиповых термах. Существенное общее свойство обоих стилей состоит в том, что можно говорить о
поведении терма t вне зависимости от того, правильно он типизирован или нет. Такая форма опреде-
ления языка называется стилем Карри. Сначала мы задаем грамматику термов, затем определяем их
поведение, и, наконец, добавляем систему типов, отвергающую некоторые термы, чье поведение нам не
нравится. Семантика возникает раньше типизации.
Существенно другой способ организации определения языка состоит в том, чтобы сначала опреде-
лить термы, затем выбрать из них правильно типизированные термы, и, наконец, определить семан-
тику только на них. В таких системах, называемых системами в стиле Чёрча, типизация идет прежде
семантики: невозможно даже задать вопрос «каково поведение неверно типизированного терма?». В
сущности, строго говоря, в системах, построенных по Чёрчу, мы вычисляем не термы, а деревья вывода
типов для них. (Пример можно найти в §15.6.)
Исторически сложилось, что неявно типизированные представления лямбда-исчислений часто опи-
сываются в стиле Карри, а представления Чёрча в основном встречаются для явно типизированных
систем. Отсюда происходит некотрая путаница в терминологии: иногда «стилем Чёрча» называют явно
типизированный синтаксис, а «стилем Карри» неявно типизированный.
9.7. Дополнительные замечания
Простое типизированное лямбда-исчисление изучается в книге Хиндли и Селдина (Hindley and
Seldin 1986), и, еще более подробно, в монографии Хиндли (Hindley 1997).
rev. 104