
- •Аппликативные вычисления в теории алгоритмов
- •Содержание
- •Введение
- •Построение λ- теории Основы теории формальных систем.
- •Понятие λ-исчисления.
- •Построение бестипового λ-исчисления.
- •Свободные и связанные переменные.
- •Подстановка.
- •Коллизия имен переменных.
- •Редукция
- •Погружение классических вычислений в λ-исчисление.
- •Нумералы.
- •Рекурсия
- •Рекурсия в λ-исчислении.
- •Контрольные вопросы
- •Бестиповая комбинаторная логика. Комбинаторы.
- •Построение комбинаторной логики
- •Базис k, s.
- •Базис I,b,c,s
- •Преимущества комбинаторов
- •Контрольные вопросы
- •Типизированные системы. Использование типов.
- •Расширенное λ-исчисление
- •Редукция графа
- •Алгоритм редукции графа (рг)
- •Суперкомбинаторы.
- •Алгоритм приведения λ-выражения к суперкомбинаторному виду
- •Упорядочивание параметров.
- •Способы реализации рекурсии.
- •Контрольные вопросы
- •Компиляция в коды абстрактных машин.
- •Кодирование по де Брейну.
- •Алгоритм преобразования λ-выражений по де Брейну.
- •Семантические равенства для кодов де Брейна:
- •Категориальная комбинаторная логика (ккл).
- •Общие свойства абстрактных машин.
- •Категориальная абстрактная машина (кам).
- •Цикл работы кам
- •Оптимизация кода кам
- •Дополнительные функциональные инструкции
- •Рекурсия в кам
- •Пример вычисления выражений на кам
- •Контрольные вопросы
- •Смешанные вычисления Процедура смешанных вычислений
- •Трансформационные семантики
- •Проекции Футамуры
- •Контрольные вопросы
- •Литература
Общие свойства абстрактных машин.
Определение.
Абстрактная машина (АМ) - способ формализованного задания алгоритма для математически строго описываемых языков.
(АМ) - характеризуется множеством регистров, множеством состояний регистров и правилами перехода от состояния к состоянию.
два
регистра памяти
быстрого
доступа
Три стека
Правила перехода из состояния в состояние задаются кодом АМ.
Информация о состоянии регистров может быть представлена в некоторой структуре данных.
Структура [исходное состояние] => Структура [итоговое состояние]
<Новое состояние>=<Функция перехода>(старое состояние).
Функция, описывающая действие оператора кода АМ, имеет в качестве своих аргументов регистры этой машины с содержащимися в них данными, при этом переход машины из
одного состояния в другое соответствует шагу редукции дерева программы исходного языка.
Определение.
Верификация - способ проверки правильности программ на основе теоретических знаний.
Категориальная абстрактная машина (кам).
КАМ состоит из трех регистров: два стека (код и стек) и регистр терм.
Код
Стек
Терм
И элементы стека, и элементы терма - символьные выражения, в них могут размещаться структуры символьных данных.
В начале программа в виде кода содержится в стеке ''кода'', ''стек'' пуст.
В конце «код» пуст, в “ терме ” содержится результат. Правила перехода из состояния в состояние определяются набором инструкций машины.
Определение.
Состоянием машины называется тройка <T,C,S>, где T-терм как структурированное значение, например граф; C - код; S - стек или дамп (вспомогательная память).
Закон функционирования КАМ изменяет старую тройку на новую: <T, C, S>→<T|,C|,S|>.
Входной язык КАМ: <,>;Fst; Snd; Λ; ’; (,); app
КАМ – это вариант КЛ, вовлекающий ДЗК, а также техническое устройство, вычисляющее значение выражений.
Средства КЛ имеют категориальный характер, т.е. в категориях используются композиции и тождества, в декартовых категориях дополнительно вводят произведение с использованием спаривания < , > , а также проекции Snd и Fst. Декартовы замкнутые категории дополнительно содержат каррирование Λ, апплицирование и средства экспонирования, т.е. средства построения функциональных правил.
Цикл работы кам
1) Выбор категориального терма, построенного из комбинаторов.
2) Означивание этого терма производится путем его аппликации к среде.
Начальное состояние |
Конечное состояние |
||||
Терм |
Код |
Стек |
Терм |
Код |
Стек |
(S,t) |
car:C |
A |
S |
C |
А |
(S,t) |
cdr:C |
A |
T |
C |
А |
S |
(quoteB)C |
A |
B |
C |
А |
S |
(cur C) C1 |
A |
[C:S] |
C1 |
А |
( [C:S] , t ) |
app. C1 |
A |
(S,t) |
C:C1 |
А |
T |
cons C |
S:A |
(S,t) |
C |
А |
S |
push.C |
A |
S |
C |
S:A |
T |
swap.C |
S:A |
S |
C |
T:A |
А - вектор содержимого стека,
”:” - разделитель,
[C:S] - совокупность.
В языке ДЗК (декартово замкнутые категории) использовано 8 символов, которым ставятся в соответствие инструкции КАМ:
Сar = Fst - получает терм (s,t) и заменяет его на s.
Cdr = Snd - получает терм (s,t) и заменяет его на t.
Quote = ’ - получает терм s и оставляет его без изменений
Cur = Λ - замещает терм s на С:s, где C - код, инкапсулированный в Λ.
Cons = > - строит совокупность из вершины стека и терма, заменяет терм на эту
совокупность и проталкивает стек.
app = App - получает терм (C:s,t), замещает его на (s,t), а оставшейся части кода
устанавливает префикс C.
swap = , - меняет содержимое терма и вершины стека местами.
push = < - берет терм и помещает его в вершину стека.
Стек Код
3 (()…3)
cаr
что-то
еще
А С Вместо рор используется пара из swap и cons.
App○<x,y> Term
App(<x,y>Term)
Код: push,[x],swap,[y],cons,app
Пример КАМ кода: сложение 2 и 3
((+2)3) –это аппликация (+ к 2 ) →(+2) к 3
push push quote + swap quote 2 cons app swap quote 3 cons app
<<’+,’2>App,’3>App