
- •Аппликативные вычисления в теории алгоритмов
- •Содержание
- •Введение
- •Построение λ- теории Основы теории формальных систем.
- •Понятие λ-исчисления.
- •Построение бестипового λ-исчисления.
- •Свободные и связанные переменные.
- •Подстановка.
- •Коллизия имен переменных.
- •Редукция
- •Погружение классических вычислений в λ-исчисление.
- •Нумералы.
- •Рекурсия
- •Рекурсия в λ-исчислении.
- •Контрольные вопросы
- •Бестиповая комбинаторная логика. Комбинаторы.
- •Построение комбинаторной логики
- •Базис k, s.
- •Базис I,b,c,s
- •Преимущества комбинаторов
- •Контрольные вопросы
- •Типизированные системы. Использование типов.
- •Расширенное λ-исчисление
- •Редукция графа
- •Алгоритм редукции графа (рг)
- •Суперкомбинаторы.
- •Алгоритм приведения λ-выражения к суперкомбинаторному виду
- •Упорядочивание параметров.
- •Способы реализации рекурсии.
- •Контрольные вопросы
- •Компиляция в коды абстрактных машин.
- •Кодирование по де Брейну.
- •Алгоритм преобразования λ-выражений по де Брейну.
- •Семантические равенства для кодов де Брейна:
- •Категориальная комбинаторная логика (ккл).
- •Общие свойства абстрактных машин.
- •Категориальная абстрактная машина (кам).
- •Цикл работы кам
- •Оптимизация кода кам
- •Дополнительные функциональные инструкции
- •Рекурсия в кам
- •Пример вычисления выражений на кам
- •Контрольные вопросы
- •Смешанные вычисления Процедура смешанных вычислений
- •Трансформационные семантики
- •Проекции Футамуры
- •Контрольные вопросы
- •Литература
Погружение классических вычислений в λ-исчисление.
Определение:
Нумералы- объекты, обладающие свойствами натуральных чисел.
n= λxy.(xn)y n=(SB)n(KI), здесь S,B,K,I - простейшие комбинаторы
Системы комбинаторов предназначены для выполнения тех же функций, что и системы
- - конверсии
B: Bfgx = f(gx)- элементарный композитор
S: Sfgx = fx(gx) –элементарный коннектор
K: Kcx =c – элементарный канцелятор
I: Ix = x – комбинатор тождества
Пусть z0= λyx.x (считаем это число нулем). Остальные целые числа введем по индукции: zn+1=σzn, где σ - функция добавления единицы: σ = λxyz.y(xyz)
Операция сложения PLUS:
PLUS = λxy.xσy
Утверждается, что PLUSz0b=b и PLUS(σa)b=σ(PLUSab) (проверяется подстановкой).
Определение:
Усеченная разность: DIF=λxу.yπx, где π-функция предшествования
π=λx.хω(kz0)z1, где ω= λx.D(σ(xz0))(xz0) πzi+1=zi, i ≥ 0
k= λxy.x πz0=z0.
D - декартово замкнутое произведение.
D: PROD = λxy.x(yσ)z0
TRUE
λxy.x
(так обозначим)
FALSE λxy.y
If X then Y else Z XYZ.
Нумералы.
Введем по индукции обозначение
anb n N nab= anb
a0b=b
an+1b=a(anb)
Пример. a3b=a(a(ab))
Определение:
Нумералом n будем называть λ-выражение вида λху.хny, где n=0,1,2,…
n = λху.хny
n =(SB) n(KI) (то же выражение, но в терминах комбинаторной логики)
Введем функцию прибавления единицы σ.
σ = λхуz.y(хyz) (σ = λхуz.xy(yz))
σn = n+1
Пример. 0 = λху.y 2 = λху.x(xy)
Покажем, что для таких нумералов (n) σ прибавляет единицу:
┌───────↓
σnab = (λхуz.y(xyz))( λху.хny)ab = ((( λx.( λy.( λz.y(xyz))))( λx.λy.хny))a)b └───σ──┘└──n─┘ ↑───────────└─────┘
┌────↓───────↓ ┌─────────↓
= ((λy.( λz.(y((λx.λy.хny)yz)))a)b = (λz.a((λx.λy.хny))az))b = a((λx.λy.хny)ab) =
↑──────────────┘ ↑──────────┘ └─n───┘
= a(anb) =an+1b = /(λху.хn+1y)ab/ = (n+1)ab.
↓
σ (SB) n(KI) = (λхуz.y(xyz))((SB) n(KI))(λхуz.y(xyz))[(SB) n(KI)]ab =
↑──────└─────┘
= a(((SB) n(KI)a)b) =B Ba[(SB) n(KI)a]b =S SB[(SB) n(KI)]ab = (SB) n+1(KI)ab
└a┘└──b───┘c
x
z└──y──┘
z
σ| = λхуz.xy(yz)- альтернативное определение σ, которое также приводится в литературе. Для него можно провести аналогичные выводы.
TRUE λху.x
FALSE λху.y
If x then y else z xyz
Как это проверить?
If TRUE then A else B A
If FALSE then A else B B
┌─↓
(
λху.x)AB
= A
┌─↓
( λху.y)AB = B
X&Y If X then Y else FALSE
XVY If X then TRUE else Y
Рекурсия
Определение:
Рекурсивное определение- это определение, которое внутри себя содержит ссылку
на определяемый объект.
Пример. 1) Факториал ƒac(x): x*ƒac(x-1),
if (х=0) then 1 ƒac(0)=1.
else x* ƒac(x-1)
2) Список:
Голова
c ons(x.y)→(x.y) (точечная пара)
head(x.y) →x (голова)
t
nil
length(x)
tail(x) = Nil
length(x) = 1+ length(tail(x))
length(x): if x = Nil then 0
else 1+(length(tail(x))).