- •Аппликативные вычисления в теории алгоритмов
- •Содержание
- •Введение
- •Построение λ- теории Основы теории формальных систем.
- •Понятие λ-исчисления.
- •Построение бестипового λ-исчисления.
- •Свободные и связанные переменные.
- •Подстановка.
- •Коллизия имен переменных.
- •Редукция
- •Погружение классических вычислений в λ-исчисление.
- •Нумералы.
- •Рекурсия
- •Рекурсия в λ-исчислении.
- •Контрольные вопросы
- •Бестиповая комбинаторная логика. Комбинаторы.
- •Построение комбинаторной логики
- •Базис k, s.
- •Базис I,b,c,s
- •Преимущества комбинаторов
- •Контрольные вопросы
- •Типизированные системы. Использование типов.
- •Расширенное λ-исчисление
- •Редукция графа
- •Алгоритм редукции графа (рг)
- •Суперкомбинаторы.
- •Алгоритм приведения λ-выражения к суперкомбинаторному виду
- •Упорядочивание параметров.
- •Способы реализации рекурсии.
- •Контрольные вопросы
- •Компиляция в коды абстрактных машин.
- •Кодирование по де Брейну.
- •Алгоритм преобразования λ-выражений по де Брейну.
- •Семантические равенства для кодов де Брейна:
- •Категориальная комбинаторная логика (ккл).
- •Общие свойства абстрактных машин.
- •Категориальная абстрактная машина (кам).
- •Цикл работы кам
- •Оптимизация кода кам
- •Дополнительные функциональные инструкции
- •Рекурсия в кам
- •Пример вычисления выражений на кам
- •Контрольные вопросы
- •Смешанные вычисления Процедура смешанных вычислений
- •Трансформационные семантики
- •Проекции Футамуры
- •Контрольные вопросы
- •Литература
Суперкомбинаторы.
Определение:
Суперкомбинатором А арности n называется λ-выражение вида:
λх1…хn.Е, где на Е наложены следующие ограничения:
λ-абстракция в Е является суперкомбинатором, Е не является λ-абстракцией,
А не содержит свободных переменных, при этом n≥0 (например, 3 (const) - это суперкомбинатор, арность n = 0).
Пример:
3 - суперкомбинатор арности 0, Е=3
λху.+ху – суперкомбинатор арности 2
λх.+(( λу.у)3)х n=1
λх.+( λу.+ху)3 не является суперкомбинатором, т.к. есть внутренняя λ-абстракция, которая содержит свободную переменную.
Вычислитель возьмет программу и начнет строить правила получения результата в виде супкркомбинаторов, далее будет он применять эти правила к аргументу.
Название суперкомбинаторов принято начинать со знака $.
λху.+ху
$Аab = +ab
Если этот суперкомбинатор применить к числам, то получается $A23, что также является суперкомбинатором.
$ Prog - самый верхний суперкомбинатор, позволяющий вычислить функцию.
Так как известно, что у суперкомбинаторов фиксированная арность, то вычислить, например, $A2 невозможно - не хватает аргументов.
┌──↓$B
λху.+ху=( λzу.+zу)x λх.+(( λzу.+zy)x)3 теперь мы получили суперкомби-
↑───┘ └──$Bx──┘
натор (все λ-абстракции, которые выражение содержит, являются суперкомбинаторами).
Переходы такого вида называются введением экстра-параметра.
Алгоритм приведения λ-выражения к суперкомбинаторному виду
До тех пор пока в λ-выражении есть λ-абстракция. (Цикл While).
1.Выбирать λ-абстракцию, не содержащую других λ-абстракций (т.е. внутреннюю).
а) она является суперкомбинатором. Припишем ей некоторое имя и заменим ее вхождение этим именем.
б) не является суперкомбинатором, значит, содержит свободные переменные. Вынесем все свободные переменные в качестве экстра-параметров. Припишем получившейся λ-абстракции некоторое имя и заменим ее вхождение этим именем с соответствующими экстра-параметрами.
Пример.
λх.+(( λу.+ху)3)х)4 = ( λх.+(( λz.λy +zy)x3)x)4 = { λz.λy.+zy=$A; $Aab=+ab} =
= ( λх.+($Ax3)x)4 = {$Ba = +($Aa3)a} = $B4 = {$Prog=$B4} = $Prog
По λ-выражению получили набор суперкомбинаторов, по которому можем посчитать это выражение.
Определение.
Пусть $А - суперкомбинатор арности n, тогда его аппликация к n аргументам называется комбинаторным редексом.
Определение.
Суперкомбинатор арности 0 называется константной аппликативной формой.
Суперкомбинаторный редекс можно сворачивать, только если имеются все аргументы.
Пример. λху.-yх = λх.(λy-ух) = λх.+((λz.λy.-yz)x) = λх.$Yx = $X = $Y
$Yxy = -yx Устранение избыточных параметров.
$Xx = $Yx - эта строчка избыточная; по правилу (η) имеем:
$X = $Y (η)- редукция (λх.Fx=F(x F))
Упорядочивание параметров.
Пусть имеется некоторое λ-выражение:
(…(λxz.+y(*xz))…)
Выносим у как экстра-параметр:
1-ый способ: ↓подставляем у
λxz.+y(*xz) = λx.((λx.λу.λz.+y(*xz))xy) = λx.$Sxy = (λy.λx.$Sxy)y = $Ty
┌─────┐ Самая внутренняя λ-абстракция.
λx.[λz.+(*xz)].
Обозначим $Sxyz = +y(*xz) (1)
λx.$Sxy - это не суперкомбинатор.
$Tyx = $Sxy (2)
$Ty - вычисляемое выражение.
2-ой способ:
λxz.+y(*xz) = (λy.λxz.+y(*xz)))y = λx.$yx = $Ty
$Syxz = +y(*xz)
Необходимо упорядочивать свободные переменные $Tyx = $Syx так, чтобы уже связанные переменные стояли последними в списке параметров.
$T = λy.λx.$Syx
$T = $S избыток. Возможность оптимизации суперкомбинатора.
λx.λу.+ху
х имеет глубину связывания 1 между х и его абстрагированием
у имеет глубину связывания 0 стоит 1 символ λ в дереве разбора
Сначала надо абстрагировать переменные с минимальной глубиной связывания.
Предполагается, что каждая переменная где-либо связана.
