
- •Аппликативные вычисления в теории алгоритмов
- •Содержание
- •Введение
- •Построение λ- теории Основы теории формальных систем.
- •Понятие λ-исчисления.
- •Построение бестипового λ-исчисления.
- •Свободные и связанные переменные.
- •Подстановка.
- •Коллизия имен переменных.
- •Редукция
- •Погружение классических вычислений в λ-исчисление.
- •Нумералы.
- •Рекурсия
- •Рекурсия в λ-исчислении.
- •Контрольные вопросы
- •Бестиповая комбинаторная логика. Комбинаторы.
- •Построение комбинаторной логики
- •Базис k, s.
- •Базис I,b,c,s
- •Преимущества комбинаторов
- •Контрольные вопросы
- •Типизированные системы. Использование типов.
- •Расширенное λ-исчисление
- •Редукция графа
- •Алгоритм редукции графа (рг)
- •Суперкомбинаторы.
- •Алгоритм приведения λ-выражения к суперкомбинаторному виду
- •Упорядочивание параметров.
- •Способы реализации рекурсии.
- •Контрольные вопросы
- •Компиляция в коды абстрактных машин.
- •Кодирование по де Брейну.
- •Алгоритм преобразования λ-выражений по де Брейну.
- •Семантические равенства для кодов де Брейна:
- •Категориальная комбинаторная логика (ккл).
- •Общие свойства абстрактных машин.
- •Категориальная абстрактная машина (кам).
- •Цикл работы кам
- •Оптимизация кода кам
- •Дополнительные функциональные инструкции
- •Рекурсия в кам
- •Пример вычисления выражений на кам
- •Контрольные вопросы
- •Смешанные вычисления Процедура смешанных вычислений
- •Трансформационные семантики
- •Проекции Футамуры
- •Контрольные вопросы
- •Литература
Расширенное λ-исчисление
λ (λ-абстракция);
@ (аппликация);
TRUE; FALSE; 0,1…; +; /; =; >; <; cons; head; tail (конструкторы данных);
null (распознает пустой список);
If … then… else…;
let;
letrec (позволяет явно записать подстановку); quote (возможно определение через K).
(λx.x+3)3 let x=3 in x+3
letrec fun =H(fun ) in fun(arg)
Пример. a) let x=3 in λy.+xy→ λy.+3y
b) Lisp # '(lambda(x) ML -fun foo [ ]=4 cоns
(cоnd: foo x=(x::3)
(x(cons x’3)) >val foo fn:(’а list)
(# T ’ 4))) →int list
JScript
function foo(x) {
if (x==null) // если список пуст,
then new Array[x,3] //то результат- пара х,3
else 4 // ,иначе 4
}
Расширенное λ - исчисление.
(λх(if x(@
( @ cons x).
(quote 3))
(quote 4))
cons ab →(a,b)
head (cons ab) →a
tail (cons ab) →b
Редукция графа
Любая программа может быть представлена ее синтаксическим деревом разбора.
Так как в “чистом” λ-исчислении всего две операции: λ и @, то будем в дальнейшем их использовать.
Пример. (λх.+х3)4
1-ый способ 2-ой способ
Здесь меняем все свободные вхождения х на 4
В качестве примера свернем это дерево разбора
Определение:
Аппликативный порядок редукции - такой порядок редукции, который предписывает свертывать самый левый из самых внутренних редексов.
Определение:
Нормальный порядок редукции - порядок редукции, который предписывает
свертывать самый левый из самых внешних редексов.
Пример. А: λх. If x≠ 0 then x else 3/Ø . Вычислим А от 4
(Это откровенная ошибка)
При аппликативном порядке редукции мы
получим ошибку.
При аппликативном порядке вычисляются
все аргументы функции, а уже затем – сама функция.
При нормальном порядке редукции аргументы
вычисляются по мере надобности.
При редуцировании графа мы будем пользоваться
нормальным порядком редукции.
Алгоритм редукции графа (рг)
Редукция графа будет осуществляться циклически.
Повторить:
Спускаемся по левой ветви графа до первой вершины, которая не является аппликацией, т.е. не помечена символом @.
Если эта вершина является корнем графа, то все выражение, находится в нормальной форме, значит окончание вычислений. Если она не является корнем, то она должна являться примитивной функцией либо аппликацией и у нее должны быть все необходимые аргументы (в противном случае ошибка). Мы рекурсивно применяем алгоритм для всех поддеревьев, являющихся аргументами.
Если текущая вершина является λ- вершиной, то рассматриваем следующие варианты:
1. она является корнем графа, значит выражение в нормальной форме.
2. если она не является корнем, то над ней может быть только аппликация @ и мы на место формального параметра λ-абстракции подставляем второе выражение из правой ветви аппликации. При необходимости это поддерево копируется.
Пример. (λх.+хх)7
(λху.+ху)3((λх.х)4)