Такие правила называют
14.2 Комбинаторная логика
Одновременно с лямбда-исчислением развивалась комбинаторная логика. Она отличается более ком-
пактным представлением. Есть всего лишь одно правило, это применение функции к аргументу. А функции
строятся не из произвольных термов, а из набора основных функций. Набор основных функций называют
Рассмотрим лямбда-термы:
Все эти термы несут один и тот же смысл. Они представляют тождественную функцию. Они равны, но с
точностью до обозначений. Эта навязчивая проблема с переобозначением аргументов была решена в комби-
наторной логике. Посмотрим как строятся термы:
222 | Глава 14: Лямбда-исчисление
• Есть набор переменных
• Есть две константы
• Если
• Других термов нет.
Определены правила редукции для базисных термов:
=
=
В этих правилах мы пользуемся соглашением о расстановки скобок. Также как и в лямбда исчислении в
применении скобки группируются влево. Когда мы пишем
бинаторной логике принято называть комбинаторами. Редукция происходит до тех пор пока мы можем за-
менять вхождения базисных комбинаторов. Так если мы видим связку
вольные термы, то мы можем их заменить согласно правилам редукции. Такие связки называют редексами.
Если в терме нет ни одного редекса, то он находится в нормальной форме. Замену редекса принято называть
Интересно, что комбинаторы
instance Applicative (r-> ) where
pure a r = a
(<*> ) a b r = a r (b r)
В этом определении у функций есть общее окружение
и в случае типа Reader. В методе pure (комбинатор
а в методе <*> (комбинатор
в контексте окружения r к значению, которое было получено в контексте того же окружения.
Вернёмся к проблеме различного представления тождественной функции в лямбда-исчислении. В ком-
бинаторной логике тождественная функция выражается так:
Проверим, определяет ли этот комбинатор тождественную функцию:
Сначала мы заменили
натору
Связь с лямбда-исчислением
Комбинаторная логика и лямбда-исчисление тесно связаны между собой. Можно определить функцию
=
=
=
=
В первом уравнении
лямбда-исчисления в термы комбинаторной логики.
Комбинаторная логика | 223
=
=
=
[
Запись [
([
Эта запись означает параметризацию терма
следующего алгоритма:
[
=
[
=
[
=
В первом уравнении мы заменяем переменную на тождественную функцию, поскольку переменные сов-
падают. Запись
переменная по которой мы хотим параметризовать терм (или абстрагировать) не участвует в самом терме,
мы можем проигнорировать её с помощью постоянной функции
зуем применение.
С помощью этого алгоритма можно для любого терма
терм
[
Так постепенно мы придём к выражению, считаем что скобки группируются вправо:
[
Немного истории
Комбинаторную логику открыл Моисей Шейнфинкель. В 1920 году на докладе в Гёттингене он рассказал
основные положения этой теории. Комбинаторная логика направлена на выделение простейших строитель-
ных блоков математической логики. В этом докладе появилось понятие частичного применения. Шейнфин-
кель показал как функции многих переменных могут быть сведены к функциям одного переменного. Далее
в докладе описываются пять основных функций, называемых комбинаторами:
=
– функция тождества
– константная функция
– функция перестановки
– функция группировки
– функция слияния