- •Аппликативные вычисления в теории алгоритмов
- •Содержание
- •Введение
- •Построение λ- теории Основы теории формальных систем.
- •Понятие λ-исчисления.
- •Построение бестипового λ-исчисления.
- •Свободные и связанные переменные.
- •Подстановка.
- •Коллизия имен переменных.
- •Редукция
- •Погружение классических вычислений в λ-исчисление.
- •Нумералы.
- •Рекурсия
- •Рекурсия в λ-исчислении.
- •Контрольные вопросы
- •Бестиповая комбинаторная логика. Комбинаторы.
- •Построение комбинаторной логики
- •Базис k, s.
- •Базис I,b,c,s
- •Преимущества комбинаторов
- •Контрольные вопросы
- •Типизированные системы. Использование типов.
- •Расширенное λ-исчисление
- •Редукция графа
- •Алгоритм редукции графа (рг)
- •Суперкомбинаторы.
- •Алгоритм приведения λ-выражения к суперкомбинаторному виду
- •Упорядочивание параметров.
- •Способы реализации рекурсии.
- •Контрольные вопросы
- •Компиляция в коды абстрактных машин.
- •Кодирование по де Брейну.
- •Алгоритм преобразования λ-выражений по де Брейну.
- •Семантические равенства для кодов де Брейна:
- •Категориальная комбинаторная логика (ккл).
- •Общие свойства абстрактных машин.
- •Категориальная абстрактная машина (кам).
- •Цикл работы кам
- •Оптимизация кода кам
- •Дополнительные функциональные инструкции
- •Рекурсия в кам
- •Пример вычисления выражений на кам
- •Контрольные вопросы
- •Смешанные вычисления Процедура смешанных вычислений
- •Трансформационные семантики
- •Проекции Футамуры
- •Контрольные вопросы
- •Литература
Алгоритм преобразования λ-выражений по де Брейну.
1.Избавляемся от свободных переменных путем их абстрагирования в поряд-
ке, заданном средой.
2.Рекурсивно выполняем шаг алгоритма кодирования λ-терма в среде.
3.Отбрасываем символы λ, приписанные на первом шаге.
Пример.
λх.+ху (( ),у) - среда.
Шаги:
1. λу.λх.+ху
2. Λ(Λ(S(S(’+,0), 1)))
3. Λ(S(S(’+,0), 1))
λх.+ху ((( ),у),z) - среда
λz.λх.+ху
λу.λz.λх.+ху
λ.λ.λ.+0 2
λ.+ 0 2
Λ(S(S(’+,0), 2))
Семантические равенства для кодов де Брейна:
0(х,у) = у
n+1(х,у) = nх
(’x)y = x
S(x,y)z = xz(yz)
Λ(x)yz = x(y,z) - каррирование, т.е. преобразование функции от двух аргументов в функцию от первого аргумента, задающую функцию от второго аргумента
.
Определение.
Пара из терма Де Брейна и среды, в которой он рассматривается, называется кодом
Де Брейна.
Вычислять мы можем только код Де Брейна. Вычисление терма в отрыве от среды невозможно.
Определение.
Композицией функций х и у - называется функция (х○у): (х○у)z = x(yz)
Соглашение о композиции: А○В = ВА. Если ”+” - машинная команда вида Λ(+○ Snd)
(из ’M= Λ(+○ Snd)) ↑аппликация
Уравнения, описывающие семантику, называются семантическими:
Семантические равенства с учетом среды: Без учета среды:
||0!||(ρ,d) = d ||0!|| = 0!
||(n+1)!||(ρ,d) = ||n!|| ρ ||n|| = n!
||c|| ρ = c ||c|| = ’c
||MN|| ρ = ||M|| ρ(||N|| ρ) ||MN|| = App○<||M||, ||N||>
||λx.M|| ρ = ||M||( ρ,x) ||λ.M|| = Λ||M||
Snd○Fstn = n! App○<A, B> = S(A,B)
Вычисления с использованием семантических равенств:
Пусть Q --терм:
1) применение к Q формализма Де Брейна;
2) преобразование правой части равенства с помощью семантических равенств
После того как терм Q приведен к окончательному виду по Де Брейну, его с помощью семантических равенств вычисляют путем приложения к среде (с помощью категориальных операторов).
Категориальная комбинаторная логика (ккл).
Декартово замкнутая категория подразумевает наличие:
1) аппликации арр,
2) каррирования (Λ),
3) точечной пары (х,у).
Так как есть пара, то есть и функции доступа к элементам:
Fst(x,y) = x
Snd(x,y) = y
ККЛ представляется следующей совокупностью комбинаторов:
App - аппликация,
Λ - абстрактор,
< , > - комбинационные пары,
( , ) - совокупность,
○ - композиция.
Заявим, что 0 = Snd D=λr.rxy
N = Snd○Fstn ↑ комбинатор точечной пары.
(ass): (x○y)z = x(yz) – композиция
(fst): Fst(x,y) = x Fst = CIK
(snd): Snd(x,y) = y Snd = CI(KI)
(dpair): <x,y>z = (xz,yz)
Для вычисления композиции в среде предлагается ввести:
[(M,N)] ρ = <[M],[N]> ρ
(dΛ): Λ(x)yz = x(yz) - операция каррирования.
(app): App(x,y) = xy S = CIS
(quote): (’x)y = x λxy.x
(ac): App(Λ(x)y,z) = x(yz) # App(Λ(x)y,z) = Λ(x)yz = x(yz)#
Пример
Λ(x○Snd)yz
= (x○Snd)(y,z) = xz
(’x)yz = xz
> quote = Λ(x○Snd) - правило quote является избыточным.
Пример. (из λ-исчисления в код Де Брейна).
(λх.х4((λх.х)3))+
(λ.04((λ.0)3))+
S
(Λ
(S(S(0,’4),S(Λ
(0),’3))),’+)
↑Snd ↑Snd
1 2 3 4 4 3 2 1
S(x,y) = App○<x,y>
0 заменяем на Snd и получаем выражение:
App○< Λ (App○< App○< Snd,’4>, App○< Λ(Snd),’3>>),’+>
На основе ККЛ можно построить абстрактную машину.
