Пишем функции нескольких
(
аргументов с одной лямбдой:
С этими соглашениями мы можем переписать терм для композиции так:
Сравните с выражением на языке Haskell:
\f g x -> f (g x)
Выражения очень похожи. Haskell иногда называют засахаренной версией лямбда исчисления. В лямбда-
исчислении мы не будем ставить пробелы для применения аргументов к функции. Мы будем считать, что
все имена однобуквенные. При этом переменные мы будем писать с маленькой буквы, а составные термы с
большой.
Определим ещё несколько функций. Например так выглядит функция flip:
Или можно записать в более явном виде, выделим функцию двух аргументов:
Определим функцию on, она принимает функцию двух аргументов
возвращает функцию двух аргументов, в которой к аргументам сначала применяется функция
передаются в функцию
В лямбда-исчислении есть только префиксное применение поэтому мы написали
вычного (
Лямбда исчисление без типов | 217
Абстракция
Функции в лямбда-исчислении называют абстракциями. Мы берём терм
ременной
занной. Например в терме
Такие переменные называют
free variables.
На интуитивном уровне процесс абстракции заключается в том, что мы смотрим на несколько частных
случаев и видим в них что-то общее. Это общее мы выделяем в функцию, которая параметризована частно-
стями. Например мы видим выражения:
И в том и в другом у нас есть функция двух аргументов + или
аргумента. Мы можем абстрагировать (параметризовать) это поведение в такую функцию:
На Haskell мы бы записали это так:
\b -> \x -> b x x
Редукция. Вычисление термов
Процесс вычисления термов заключается в подстановке аргументов во все функции. Выражения вида:
(
Заменяются на
Эта запись означает, что в терме
(
Для этого нам нужно в терме (
этого мы получим терм:
В этом терме нет редексов. Это означает, что он вычислен или находится в
При подстановке необходимо следить за тем, чтобы у нас не появлялись лишние связывания переменных.
Например рассмотрим такой редекс:
(
После подстановки за счёт совпадения имён переменных мы получим тождественную функцию:
Переменная
случаи. Поскольку с ними получается, что имена связанных переменных в определении функции влияют на
её смысл. Например смысл такого выражения
(
После подстановки будет совсем другим. Но мы всего лишь изменили обозначение локальной перемен-
ной
ременных или
переменные, которые были свободными в аргументе, остались свободными и после подстановки.
218 | Глава 14: Лямбда-исчисление
Процесс подстановки аргументов в функции называется
ных вхождений
(
(
(
Первые два правила определяют подстановку вместо переменных. Если переменная совпадает с той, на
место которой мы подставляем терм
Подстановка применения термов равна применению термов, в которых произведена подстановка:
(
При подстановке в лямбда-функции необходимо учитывать связность переменных. Если переменная ар-
гумента отличается от той переменной на место которой происходит подстановка, то мы заменяем в теле
функции все вхождения этой переменной на
(
Условие