
- •Аппликативные вычисления в теории алгоритмов
- •Содержание
- •Введение
- •Построение λ- теории Основы теории формальных систем.
- •Понятие λ-исчисления.
- •Построение бестипового λ-исчисления.
- •Свободные и связанные переменные.
- •Подстановка.
- •Коллизия имен переменных.
- •Редукция
- •Погружение классических вычислений в λ-исчисление.
- •Нумералы.
- •Рекурсия
- •Рекурсия в λ-исчислении.
- •Контрольные вопросы
- •Бестиповая комбинаторная логика. Комбинаторы.
- •Построение комбинаторной логики
- •Базис k, s.
- •Базис I,b,c,s
- •Преимущества комбинаторов
- •Контрольные вопросы
- •Типизированные системы. Использование типов.
- •Расширенное λ-исчисление
- •Редукция графа
- •Алгоритм редукции графа (рг)
- •Суперкомбинаторы.
- •Алгоритм приведения λ-выражения к суперкомбинаторному виду
- •Упорядочивание параметров.
- •Способы реализации рекурсии.
- •Контрольные вопросы
- •Компиляция в коды абстрактных машин.
- •Кодирование по де Брейну.
- •Алгоритм преобразования λ-выражений по де Брейну.
- •Семантические равенства для кодов де Брейна:
- •Категориальная комбинаторная логика (ккл).
- •Общие свойства абстрактных машин.
- •Категориальная абстрактная машина (кам).
- •Цикл работы кам
- •Оптимизация кода кам
- •Дополнительные функциональные инструкции
- •Рекурсия в кам
- •Пример вычисления выражений на кам
- •Контрольные вопросы
- •Смешанные вычисления Процедура смешанных вычислений
- •Трансформационные семантики
- •Проекции Футамуры
- •Контрольные вопросы
- •Литература
Преимущества комбинаторов
Не содержат свободных переменных (не возникает проблемы коллизии переменных).
Убыстряются сами вычисления, которые сводятся к ряду однотипных действий.
Контрольные вопросы
Дайте определение комбинатора.
Какие свойства комбинаторов делают удобным их использование для описания аппликативных алгоритмов?
Дайте определение базиса формальной системы.
Докажите, что I, B, C, S не является базисом бестиповой комбинаторной логики.
Приведите определение нумералов и основных операций над ними в рамках бестиповой комбинаторной логики.
Выразите комбинаторы B, C, W в базисе K, S.
Типизированные системы. Использование типов.
Типы делают систему более строгой. Если все выражения согласованы по типам, то они реализуются гораздо эффективнее.
Типы назначают вид значения, когда функция прилагается к аргументам.
Предположим, что аппликация имеет тип с, В имеет тип b, тогда А имеет тип b→c.
(АВ)с-тип, Bb Ab→c
Если а,b – типы, то а→b тоже тип.
Пример.
Ix = x
Пусть Ха, тогда Ia→a (т.к. должно выполняться равенство IХа =Ха).
(Kx)y = xα
xα,yβ, то (Kx)α→β
Kxα = Cβ→α, то К α→(β→α)
Sxyz = xz(yz)
Пусть zα, тогда если (yz)β, то уα→β((хz)(уz)β)γ (xz)β→γ, zα xα→(β→γ)
Рассмотрим (Sxyz)γ, zα (Sxy)α→γ, известно, что уα→β, тогда (Sx)(α→β)→(α→γ)
xα→(β→γ), тогда S(α→(β→γ))→((α→β)→(α→γ))
Определение:
Говорят, что тип α приписан комбинатору Х тогда и только тогда, когда это утверждение вытекает из следующих аксиом и правила вывода:
Iα→α
Кα→(β→α)
S (α→(β→γ)) →((α→β)→(α→γ))
Xα→β, Yα
____________________
(XY) β
Обозначения:
Хα или ├#(Х) = α,
├# I = α→ α1.
Пример.
1) Припишем тип аппликации (KI)
Имеем: К α→(β→α) и Iα1→α1. Тогда существует аппликация (KI)β→α, α: α1 → α1.
Тогда (KI) β→(α1→α1)
2) (KI) β→(α→α)bβ→I γ=α→α
Приписывание типа комбинатору неподвижной точки.
Ya = a(Ya)
aα(Ya)β Yα→ β
a β→γ
Y –функция, работающая по схеме: получив на входе в качестве аргумента функцию, на выходе Y формирует неподвижную точку этой функции.
Замечание:
Y в типизированном исчислении не существует.
Вычисление выражений при помощи комбинаторной логики.
Выражение вида:
let x=plus in x(4(x where x=3))
можно переписать так: (λx.x 4((λx.x)3))+
Здесь λx.x = I
λx.C = KC, x FV(C)
λx.PQ = S(λx.P)(λx.Q)
λx.x4((λx.x)3) = λx.((x4)(I3)) = S(λx.x4)(λx.(I3)) = S(S(λx.x)(λx.4))(K(I3)) =
S(SI(K4))(K(I3)) =>
S(SI(K4))(K(I#))+ = SI(K4)+(K(I3)+) = I+((K4)+)(K(I3)+) = I+(K4+)(K(I3)+) = +4(I3) = +43
Контрольные вопросы
В чем Вы видите преимущества типизированных систем перед бестиповыми?
Задайте типы основных комбинаторов.
Какое правило вывода позволяет приписывать тип аппликации типизированных объектов?
Приведите примеры комбинаторов, которым невозможно приписать тип.
Вычислите выражение let x = 12 in *((x where x=7)(y where y=x))
Реализация языков программирования
Общая схема реализации функциональных языков
ML, JScript, Hope, Lisp.
Аппликация и абстракция в них выражаются средствами языка. Любой из этих языков может быть выражен в λ-исчислении. Часто языки дополняют структурами, логическими, арифметическими и прочими операциями.
Пример. Выражения на языке Lisp.
((lambda(xy)(apply+(list(xy)))34) = ( λx.λy(+(xy)))34
Hо в Lisp сложение можно записать как (+34).
Есть множество функциональных языков (ФЯ). Все они легко переводятся в λ-исчисление.
Редукция графа
(РГ)
λ-исчисление
интерпретаторы
λ-исчисление
(расширен-
ное)
Суперкомбинаторы
Комбинаторная
логика,
Алгоритмы Маркова,
Трансформационные
системы
Результат
(Нормальная
форма).
ML LISP HOPE
ФЯ
Компиляция в коды
абстрактных машин
(АМ),SECD,
KAM
Комбинаторная
логика,
Категориальная
комбинаторная логика(KKЛ).