 
        
        - •Аппликативные вычисления в теории алгоритмов
- •Содержание
- •Введение
- •Построение λ- теории Основы теории формальных систем.
- •Понятие λ-исчисления.
- •Построение бестипового λ-исчисления.
- •Свободные и связанные переменные.
- •Подстановка.
- •Коллизия имен переменных.
- •Редукция
- •Погружение классических вычислений в λ-исчисление.
- •Нумералы.
- •Рекурсия
- •Рекурсия в λ-исчислении.
- •Контрольные вопросы
- •Бестиповая комбинаторная логика. Комбинаторы.
- •Построение комбинаторной логики
- •Базис 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Л). 
	
	
 
