Абстрактные машины и категориальная комбинаторная логика

Страница создана Евгений Киселев
 
ПРОДОЛЖИТЬ ЧТЕНИЕ
Абстрактные машины
                              и категориальная
                            комбинаторная логика

                     © Учебный Центр безопасности информационных технологий Microsoft
               Московского инженерно-физического института (государственного университета), 2003

Комментарий к слайду

В данной лекции будут рассмотрены вопросы, относящиеся к понятийному аппарату,
истории развития, существующим подходам в реализации и выразительным
возможностям абстрактных машин.
Современные языки программирования и .NET: I семестр
                                     Лекция 10: Абстрактные машины и ККЛ

                                       Содержание лекции
            1.   Понятие абстрактной машины
            2.   Примеры идеальных абстрактных машин
            3.   Абстрактные машины на состояниях
            4.   SECD-машина П. Лендина
            5.   Категориальная комбинаторная логика
            6.   Категориальная абстрактная машина (КАМ)
            7.   Библиография

                       © Учебный Центр безопасности информационных технологий Microsoft
                 Московского инженерно-физического института (государственного университета), 2003

Комментарий к слайду

В ходе лекции будут рассмотрены важнейшие научные исследования, относящиеся к
эволюции подходов к математическому моделированию вычислительных машин в
формальных теориях, поддерживающих языки программирования. При этом будет
предпринята попытка классификации существующих видов абстрактных машин.

Далее будет представлено неформальное введение в наиболее адекватный целям данного
курса и достаточно широко распространенный на сегодня подход к моделированию
абстрактных машин, а именно, формальную систему категориальной комбинаторной
логики.

При этом существенное внимание будет уделено анализу границ практической
применимости формальной системы категориальной комбинаторной логики для
моделирования различных классов абстрактных машин.

Формальное введение в категориальную комбинаторную логику предваряет изучение
категориальной абстрактной машины, являющейся одной из фундаментальных
формализаций, поддерживающих языки функционального программирования, и, в
особенности, SML.

Лекция завершится обзором литературы для более глубокого исследования материала.
Современные языки программирования и .NET: I семестр
                                     Лекция 10: Абстрактные машины и ККЛ

                        Важнейшие работы в области
                   абстрактных вычислительных машин (1)
             1936 – А.Тьюрингом (Alan Mathison Turing) и Э. Постом
                 (Emil Leon Post) независимо друг от друга созданы
                 эквивалентные по возможностям, но нереализуемые
                 практически абстрактные машины (модели компьютера),
                 потенциально реализующие произвольный алгоритм

             1960-е – П. Лендин (Peter J. Landin) разработал SECD-
                 машину – математическую формализацию для
                 вычисления ламбда-термов, а также язык ISWIM (If you
                 See What I Mean), ставший прообразом языка ML
                       © Учебный Центр безопасности информационных технологий Microsoft
                 Московского инженерно-физического института (государственного университета), 2003

Комментарий к слайду

Кратко остановимся на наиболее значительных (с точки зрения данного курса) этапах
эволюции теории и практики абстрактных и виртуальных машин в формальных теориях и
языках программирования.

Еще задолго до появления высокоуровневых языков программирования, а именно, в 30-х
г.г., А. Тьюрингом (Alan Mathison Turing) и Э. Постом (Emil Leon Post) независимо друг от
друга созданы эквивалентные по возможностям, но практически весьма сложные в
реализации формализации, известные как абстрактные машины и получившие названия
по именам своих авторов.

Абстрактные машины можно понимать как математические формализации,
моделирующие компьютер, который имеет потенциальную возможность реализации
произвольной последовательности элементарных операций, или алгоритма. Таким
образом, создатели первых абстрактных машин, по сути, непосредственно предвосхитили
появление языков программирования, создав пусть примитивные, но в полной мере
алгоритмические императивные языки.

Значительно позднее, в 60-х г.г., уже в эпоху высокоуровневых языков
программирования, П. Лендином (Peter J. Landin) была разработана так называемая
SECD-машина, а именно, математическая формализация для вычисления ламбда-
выражений. Кроме того, тем же автором был создан формальный язык ISWIM (If you See
What I Mean), представляющий собой вариант расширенного ламбда-исчисления и
ставший впоследствии прообразом языка программирования ML, который, в свою
очередь, эволюционировал в исследуемый нами язык программирования SML.
Современные языки программирования и .NET: I семестр
                                     Лекция 10: Абстрактные машины и ККЛ

                        Важнейшие работы в области
                   абстрактных вычислительных машин (2)
             1975 – Г.Плоткин (G.D. Plotkin) развил исследования SECD-
                 машины и применил результаты для моделирования
                 ранних версий языка программирования ML
             1980-е – П.-Л. Кюрьен, (Pierre-Louis Curien), Г. Кузино (Guy
                 Cousineau) и М. Мони (Michel Mauny) с группой
                 французских ученых создали категориальную
                 абстрактную машину (КАМ) как развитие SECD-машины
             1980-е – группа Кюрьена-Кузино-Мони реализует на основе
                 КАМ в полном объеме диалект CaML языка ML
                       © Учебный Центр безопасности информационных технологий Microsoft
                 Московского инженерно-физического института (государственного университета), 2003

Комментарий к слайду

С появлением первой абстрактной машины, значительно более близкой по природе к
высокоуровневым языкам программирования, чем ранние, наивные формализации
Тьюринга и Поста, исследователями стали предприниматься попытки использования
виртуальных машин для моделирования реальных языков программиирования.

Так, в 70-х г.г. Г. Плоткиным (G.D. Plotkin) были проведены расширенные исследования
SECD-машины, созданной П. Лендиным, и результаты удалось использовать для
моделирования ранних версий реального языка функционального программирования ML.

Затем, в 80-х г.г., группой французских ученых в составе П.-Л. Кюрьена, (Pierre-Louis
Curien), Г. Кузино (Guy Cousineau), М. Мони (Michel Mauny) и ряда других
исследователей удалось усовершенствовать формализацию SECD-машины и создать на ее
основе так называемую категориальную абстрактную машину, или, сокращенно, КАМ,
изучение которой и будет составлять предмет нашего дальнейшего рассмотрения на
протяжении ближайших лекций.

Наконец, в середине 80-х г.г. тем же авторским коллективом на основе категориальной
абстрактной машины была создана полномасштабная реализация специально
разработанного для этих целей диалекта языка функционального программирования ML,
получившего (по имени абстрактной машины) название CaML.
Современные языки программирования и .NET: I семестр
                                     Лекция 10: Абстрактные машины и ККЛ

                             Понятие абстрактной машины
                 Абстрактной машиной называется математическая
                 формализация, моделирующая правила выполнения
                 программы для вычислительной машины.

                 Абстрактные машины используются при реализации
                 языков программирования как средство создания
                 промежуточного кода (аналога p-кода, Java-кода, MSIL-
                 кода), который затем транслируется в машинный код.

                 Абстрактные машины позволяют моделировать рекурсию
                 и различные стратегии вычислений.

                       © Учебный Центр безопасности информационных технологий Microsoft
                 Московского инженерно-физического института (государственного университета), 2003

Комментарий к слайду

После краткого введения в историю исследуемой области знаний, перейдем к более
формальному обсуждению понятия абстрактной машины.

Абстрактной машиной (abstract machine) в рамках данного курса будем называть
математическую формализацию, которая моделирует правила выполнения программы
(или, иначе, алгоритмы) для той или иной реальной вычислительной машины
(компьютера).
В настоящее время при практической реализации различных классов языков
программирования, в частности, функциональных и объектно-ориентированных языков,
широко используются аналоги абстрактных машин в форме так называемых виртуальных
машин (virtual machine).

Виртуальные машины представляют собой средство создания промежуточного
(следующего за текстом программы на высокоуровневом языке программирования) кода
(именуемого в различных реализациях p-кодом, Java-кодом, MSIL-кодом и т.д.), который
затем транслируется в машинный код. Заметим, что последний пример промежуточного
кода, а именно, MSIL (Microsoft Intermediate Language), представляет собой ни что иное,
как код промежуточный виртуальной машины, реализованной корпорацией Microsoft для
технологической платформы .NET.

Отметим также то обстоятельство, что абстрактные машины позволяют адекватно
моделировать различные подходы и стратегии вычислений, включая ранее рассмотренные
рекурсивные вычисления, а также вычисления по необходимости (иначе известные как
«ленивые»), которые будут рассмотрены в продолжение курса.
Современные языки программирования и .NET: I семестр
                                    Лекция 10: Абстрактные машины и ККЛ

                        Примеры абстрактных машин
                1.   Ранние формализации на состояниях:
                •    машина Тьюринга (бесконечная лента, головка для
                     чтения/записи информации);
                •    машина Поста (аналог машины Тьюринга);

                2. Зрелые формализации на состояниях:
                • SECD-машина П. Лендина;
                • Категориальная машина (П.-Л. Кюрьен и др.)

                3.   Другие формализации
                      © Учебный Центр безопасности информационных технологий Microsoft
                Московского инженерно-физического института (государственного университета), 2003

Комментарий к слайду

Уточнив понятия об абстрактных и виртуальных машинах, перейдем к исследованию
особенностей различных классов рассматриваемых формализаций, проиллюстрировав
выделенные классы необходимыми примерами из математической теории и практики
программирования.

Прежде всего, следует отметить то обстоятельство, что практически все без исключения
абстрактные модели вычислительных машин оперируют понятием состояния, изменения
которого и отражают ход выполнения программы.

При этом следует, во-первых, выделить ранние, «наивные» формализации на состояниях,
которые не были практически поддержаны ни языками программирования, ни собственно
компьютерами. К ранним абстрактным машинам можно отнести известные из истории
математики и уже упомянутые ранее машины Тьюринга и Поста. Первая абстрактная
машина характеризовалась бесконечной лентой для хранения «инструкций», а также
считывающей и записывающей головкой, передвигающейся по ленте; вторая машина
действовала аналогично первой.

Несмотря на объективные трудности практической реализации, представляющей в
большей степени теоретический интерес, ранние абстрактные машины, безусловно, были
весьма значимыми для развития computer science, т.к. предвосхитили появление и
обозначили ряд этапов развития реальных компьютеров и языков программирования для
них.

Кроме того, следует отдельно рассмотреть боле поздние, зрелые формализации машин,
основанные на состояниях. К ним в первую очередь относятся упомянутая ранее SECD-
машина П. Лендина, а также категориальная абстрактная машина, к рассмотрению
которых мы и переходим.
Современные языки программирования и .NET: I семестр
                                     Лекция 10: Абстрактные машины и ККЛ

                                SECD-машина П. Лендина
                 Классическая АМ для редукции λ-термов с
                 использованием вызова по значению (call-by-value).
                 Название получила от аббревиатур своих элементов:
             •   Stack – стек (последовательность атомов и λ-абстракций);
             •   Environment – среда (хранилище значений переменных);
             •   Сontrol – управление (последовательность инструкций);
             •   Dump – дамп (пуст либо содержит прежнее состояние).
                 Именно эта четверка элементов определяет состояние.
                 SECD-машина явилась прообразом для более поздних
                 формализаций, на которых реализованы ML-машины.
                       © Учебный Центр безопасности информационных технологий Microsoft
                 Московского инженерно-физического института (государственного университета), 2003

Комментарий к слайду

Как уже отмечалось, в 60-х г.г., уже в эпоху высокоуровневых языков программирования,
П. Лендином (Peter J. Landin) была разработана так называемая SECD-машина, а именно,
математическая формализация для вычисления ламбда-выражений.

При этом, SECD-машина была предназначена для редукции лабмбда-выражений и
использовала механизм передачи параметров при вызове функции по значению (call-by-
value), в отличие от других типов передачи параметра (например, по имени или call-by-
name).

Свое название SECD-машина получила от аббревиатур имен своих основных четырех
элементов, а именно:

   •   Stack – стек, т.е. последовательность атомарных ламбда-выражений (переменных и
       констант), а также ламбда-абстракций;
   •   Environment – среда, т.е. хранилище значений, которые связываются с
       переменными в ходе вычислений;
   •   Control – управление, т.е. последовательность «инструкций», управляющих
       работой SECD-машины;
   •   Dump – дамп, т.е. хранилище состояния SECD-машины (обычно пуст либо
       содержит прежнее состояние).

Именно перечисленная четверка элементов в полной мере характеризует состояние SECD-
машины в произвольный момент вычислений.

Заметим, что именно SECD-машина явилась прообразом для более поздних
формализаций, на которых реализованы ML-машины, в частности, категориальная
абстрактная машина.
Современные языки программирования и .NET: I семестр
                                     Лекция 10: Абстрактные машины и ККЛ

                     КАМ: введение в теорию категорий (1)
                 Название КАМ получила потому, что ее состояния
                 принадлежат пространству декартово замкнутых
                 категорий (д.з.к.), т.е. выполнены условия:
            1)   определена функция тождества;
            2)   определена операция композиции;
            3)   определена операция образования упорядоченной пары
                 объектов ;
            4)   определена операция взятия первого элемента пары;
            5)   определена операция взятия второго элемента пары;
            6)   определена операция преобразования терма из
                 алгебраической формы в аппликативную;
            7)   определена операция применения функции к аргументу.
                       © Учебный Центр безопасности информационных технологий Microsoft
                 Московского инженерно-физического института (государственного университета), 2003

Комментарий к слайду

Перейдем к обсуждению теоретического фундамента, на котором основана
категориальная абстрактная машина, а именно, к формальной системе категориальной
комбинаторной логики.

Как уже отмечалось, своим названием категориальная абстрактная машина обязана тому
обстоятельству, что множество ее возможных состояний принадлежит пространству так
называемых декартово замкнутых категорий (или, сокращенно, д.з.к.).

Формальная система с декартово замкнутыми категориями должна удовлетворять
следующим условиям:

   1) определена функция тождества, или тождественное преобразование (имеющее в
      комбинаторной логике аналог в форме комбинатора тождества I);

   2) определена операция композиции или построения сложной функции (имеющая в
      комбинаторной логике аналог в форме комбинатора тождества B);

   3) определена операция образования упорядоченной пары объектов ;

   4) определена операция взятия первого элемента из упорядоченной пары объектов;

   5) определена операция взятия второго элемента из упорядоченной пары объектов;

   6) определена операция преобразования терма из алгебраической формы в
      аппликативную;

   7) определена операция аппликации или применения функции к аргументу.
Современные языки программирования и .NET: I семестр
                                    Лекция 10: Абстрактные машины и ККЛ

                    КАМ: введение в теорию категорий (2)
                 Условия (1) и (2) необходимы для формирования
                 категорий, (3)-(5) – для декартовых категорий, а (6) и (7)
                 – для д.з.к.

                 Для декартовых категорий необходимо дополнительно
                 потребовать существования функционального
                 пространства или операции экспоненцирования.

                 Операция, требуемая условием (6), называется
                 каррированием, а обратная ей – декаррированием.

                      © Учебный Центр безопасности информационных технологий Microsoft
                Московского инженерно-физического института (государственного университета), 2003

Комментарий к слайду

Проанализируем смысл сформулированных условий для категорий.

Условия существования тождественного преобразования и построения сложных функций
являются основополагающими и необходимы для формирования категорий произвольного
типа.

Условия существования операции образования упорядоченной пары объектов, а также
операций взятия первого и второго элемента из упорядоченной пары необходимы для
построения декартовых категорий, т.е. категорий, оснащенных операцией прямого (или,
иначе, декартова) произведения и соответствующих ему проекций.

Наконец, условия существования операций аппликации и преобразования терма из
алгебраической формы в аппликативную являются необходимыми для формирования
категорий произвольного декартово замкнутых категорий.

Заметим, что последняя операция называется каррированием, а обратная ей –
декаррированием по имени основоположника комбинаторной логики Х. Карри (Haskell
B. Curry).
Кроме перечисленных выше условий, для построения декартовых категорий необходимо
дополнительно потребовать существования функционального пространства или операции
экспоненцирования.
Современные языки программирования и .NET: I семестр
                                       Лекция 10: Абстрактные машины и ККЛ

                    Категориальная комбинаторная логика (1)

                    Добавим к известным нам комбинаторам I, K, S, B, C
                    следующие «машинные инструкции»-комбинаторы:

                    D = λxy.[x,y] = λxyr.rxy;

                    S = CIS;

                    Λ = λx.(λz.x[y,z]);

                    ‘ = K = λx.(λy.x).

                         © Учебный Центр безопасности информационных технологий Microsoft
                   Московского инженерно-физического института (государственного университета), 2003

Комментарий к слайду

Для реализации категориального расширения комбинаторной логики (известного также
под названием категориальной комбинаторной логики, или, сокращенно, ККЛ), добавим
к известным нам комбинаторам

(I)   I a = a;
(K)   К a b = a;
(S)   S a b c = a c (b c);
(B)   B a b c = a (b c);
(C)   Cabc=acb

следующие комбинаторы, выступающие в роли «машинных инструкций» категориальной
абстрактной машины:

(D)   D = λ x y . [x, y] = λ x y r . r x y;
(S)   S = C I S;
(Λ)   Λ = λ x . (λ z . x [y, z]);
(‘)   ‘ = K = λ x . (λ y . x).

Заметим, что характеристическое соотношение (D) представляет собой операцию
образования упорядоченной пары, соотношение (Λ) – каррирование, а соотношение (‘),
ранее известное нам как характеристика комбинатора-канцелятора K – операцию взятия
первой проекции для упорядоченной пары элементов, которую можно также понимать как
цитирование.
Современные языки программирования и .NET: I семестр
                                        Лекция 10: Абстрактные машины и ККЛ

                    Категориальная комбинаторная логика (2)

                    Кроме того, добавим бесконечное множество
                    комбинаторов n! со следующими семантическими
                    характеристиками (||•|| – функция вычисления значения):

                    ||n|| = n! (значение числа);

                    ||с|| = ‘с (значение константы);

                    ||M,N|| = S[||M||,||N||] (значение пары);

                    || λx.M|| = Λ (M) (значение абстракции).

                          © Учебный Центр безопасности информационных технологий Microsoft
                    Московского инженерно-физического института (государственного университета), 2003

Комментарий к слайду

Продолжим построение формальной системы категориальной комбинаторной логики.

Рассмотрим семантический аспект данной системы, основываясь на функции вычисления
значения выражения категориальной комбинаторной логики, соотнесенной, вообще
говоря, с той или иной средой.

Введем одноместную функцию вычисления значения выражения для произвольного
выражения, которую обозначим как ||·||. Скажем, значение терма M в таком случае будет
иметь вид || M ||.

Далее добавим бесконечное множество комбинаторов n! со следующей семантической
характеристикой: ||n|| = n!.

Продолжим семантические равенства следующим соотношением, характеризующим
значения констант: ||с|| = ‘с.

Как следует из приведенного соотношения, для вычисления значения константы
используется комбинатор цитирования (что хорошо согласуется с практикой, принятой в
языках функционального программирования, в частности, в языке LISP).

Значения упорядоченной пары и ламбда-абстракции, как оказывается, задаются с
помощью ранее рассмотренных комбинаторов S и Λ:

      ||M,N|| = S [||M||,||N||];
      || λx.M|| = Λ (M).
Современные языки программирования и .NET: I семестр
                                        Лекция 10: Абстрактные машины и ККЛ

                    Категориальная комбинаторная логика (3)
                    Благодаря введению дополнительных комбинаторов D, S,
                    ‘ и Λ вышеперечисленные синтактико-семантические
                    соотношения сводимы к чисто синтаксическим:

                    0![x,y] = y;
                    (n+1)![x,y] = n! x;
                    S[x,y]z = xz(yz) (декаррирование);
                    Λ (x) yz = x[y,z] (каррирование).
                    Последние два соотношения необходимы для перехода к
                    категориальной комбинаторной логике (ККЛ).
                         © Учебный Центр безопасности информационных технологий Microsoft
                   Московского инженерно-физического института (государственного университета), 2003

Комментарий к слайду

Продолжим построение формальной системы категориальной комбинаторной логики.

Заметим, что благодаря введению в рассмотрение дополнительных комбинаторов

(D)   D = λ x y . [x, y] = λ x y r . r x y;
(S)   S = C I S;
(Λ)   Λ = λ x . (λ z . x [y, z]);
(‘)   ‘ = K = λ x . (λ y . x)

вышеперечисленные синтактико-семантические соотношения                                         сводимы   к   чисто
синтаксическим равенствам, которые имеют следующий вид:

      0 ! [x, y] = y;

      (n + 1) ! [x, y] = n! x;

      S [x, y] z = x z (y z);

      Λ (x) y z = x [y, z].

Отметим, что последние два соотношения, означающие соответственно декаррирование и
каррирование, необходимы для завершения перехода от формальной системы
комбинаторной логики (или, сокращенно, КЛ) к формальной системе категориальной
комбинаторной логики (или, сокращенно, ККЛ).
Современные языки программирования и .NET: I семестр
                                        Лекция 10: Абстрактные машины и ККЛ

                     Категориальная комбинаторная логика (4)

                     Введем комбинатор образования пары

                      = λt.[•t, •t]

                     с комбинаторной характеристикой

                      = λt. λz. (f t)(g t) = λt.[f t, g t]

                     и соответствующим семантическим равенством

                     ||M,N|| = .

                          © Учебный Центр безопасности информационных технологий Microsoft
                    Московского инженерно-физического института (государственного университета), 2003

Комментарий к слайду

Продолжим построение формальной системы категориальной комбинаторной логики.

Для того, чтобы формализация приняла более строгий и удобный вид, необходимо ввести
в рассмотрение двухместный комбинатор образования пары, который определяется
ламбда-выражением следующего вида:

       = λ t. [·t, ·t].

При этом комбинаторная характеристика вновь введенного комбинатора образования
пары имеет следующий вид:

       = λt. λz. (f t)(g t) = λt.[f t, g t].

Кроме того, комбинатор образования пары характеризуется следующим семантическим
равенством:

      ||M, N|| = .
Современные языки программирования и .NET: I семестр
                                       Лекция 10: Абстрактные машины и ККЛ

                   Категориальная комбинаторная логика (5)

                   Оснастим декартово произведение проекциями

                   Fst = C I K = (n+1)!               и         Snd = C I (K I) = (0)!

                   с характеристическими соотношениями

                   Fst [x, y] = x                               (первая проекция);

                   Snd [x, y] = y                               (вторая проекция);

                    z = [x z, y z]                        (пара функций).

                         © Учебный Центр безопасности информационных технологий Microsoft
                   Московского инженерно-физического института (государственного университета), 2003

Комментарий к слайду

Продолжим построение формальной системы категориальной комбинаторной логики.

После задания операции образования упорядоченной пары функций, для завершения
формализации операции прямого или декартова произведения необходимо определить
операции взятия первого и второго элементов упорядоченной пары, или первой и второй
проекций.

Согласно общепринятой алгебраической практике, оснастим вновь введенную операцию
декартова произведения комбинаторами первой и второй проекций с комбинаторными
характеристиками следующего вида:

      Fst = C I K = (n+1)!
      Snd = C I (K I) = (0)!

Отметим, что вновь введенные комбинаторы Fst для первой проекции и Snd для второй
проекции имеют следующие характеристические соотношения:

      Fst [x, y] = x;
      Snd [x, y] = y;
       z = [x z, y z].

Последнее соотношение определяет связь между комбинатором образования
упорядоченной пары и так называемой парой функций, т.е. такой функцией, которая в
результате дает совокупность результатов своих функций-компонентов x : A→B и
y : A→C в виде функции w : A→B×C.
Современные языки программирования и .NET: I семестр
                                          Лекция 10: Абстрактные машины и ККЛ

                      Категориальная комбинаторная логика (6)

                      Избыточность комбинаторов Fst, Snd, (n+1)!, 0!, S, Λ
                      устраняется введением комбинатора композиции o ≡ B.
                      Введем явно комбинатор аппликации ε.
                      Выведем соотношения, позволяющие устранить
                      избыточные комбинаторы:
                      S (x y t) = x t (y t) = ε [x t, y t] = (ε o ) t, отсюда
                (i)   S = λ x y. (ε o ).
                     Положим Fstn+1 = Fst o Fstn, для n>1 и Fst1 = Fst. Тогда
                (ii) n! = Snd o Fstn, для n>0, а 0! = Snd.
                            © Учебный Центр безопасности информационных технологий Microsoft
                      Московского инженерно-физического института (государственного университета), 2003

Комментарий к слайду

Продолжим построение формальной системы категориальной комбинаторной логики.

Заметим, что введенная система комбинаторов Fst, Snd, (n+1)!, 0!, S, Λ является
избыточной.

Избыточность системы комбинаторов устраняется введением комбинатора композиции

       o ≡ B,

который принимается              тождественно            равным         ранее       определенному         комбинатору
композиции B.

Далее, введем явно комбинатор аппликации ε.

Выведем соотношения,                  которые         позволят          устранить           избыточность     системы
комбинаторов:

       S (x y t) = x t (y t) = ε [x t, y t] = (ε o ) t.

Отсюда,

       (i)      S = λ x y. (ε o ).

Положим Fstn+1 = Fst o Fst n, для n > 1 и Fst1 = Fst. Тогда получим, что

       (ii)     n! = Snd o Fst n, для n > 0, а 0! = Snd.
Современные языки программирования и .NET: I семестр
                                      Лекция 10: Абстрактные машины и ККЛ

                  Категориальная комбинаторная логика (7)

                  Окончательный перечень характеристических равенств:
             (ass)              (x o y) z = x (y z);
             (fst)              Fst [x, y] = x;
             (snd)              Snd [x, y] = y;
             (dpair)             z = [x z, y z];
             (ac)               ε [Λ (x) y, z] = x [y, z];
             (quote)            (‘ x) y = x,
                  где (ass) устанавливает связь аппликации и композиции,
                  (dpair) – спаривания и формирования совокупности.
                        © Учебный Центр безопасности информационных технологий Microsoft
                  Московского инженерно-физического института (государственного университета), 2003

Комментарий к слайду

Завершим построение формальной системы категориальной комбинаторной логики.

С учетом устранения избыточных комбинаторов из рассматриваемой формальной
системы, получим окончательный перечень характеристических соотношений
категориальной комбинаторной логики:

(ass)        (x o y) z = x (y z);

(fst)        Fst [x, y] = x;

(snd)        Snd [x, y] = y;

(dpair)       z = [x z, y z];

(ac)         ε [Λ (x) y, z] = x [y, z];

(quote)      (‘ x) y = x.

Заметим, что соотношение (ass) устанавливает связь аппликации и композиции,
соотношение (dpair) – спаривания и формирования совокупности, а соотношение (ac) –
каррирования и апплицирования.

Напомним, что соотношения (fst) и (snd) характеризуют операции взятия первой и второй
проекций для упорядоченной пары объектов, а (quote) – цитирование.

Приведенные соотношения (ass), (fst), (snd), (dpair), (ac) и (quote) адекватно (полно и
непротиворечиво) формализуют систему категориальной комбинаторной логики.
Современные языки программирования и .NET: I семестр
                                       Лекция 10: Абстрактные машины и ККЛ

                                           Библиография (1)

              1.   Turing A.M. On computable numbers, with an application to
                   the Entscheidungsproblem. Proc. of London Mathematical
                   Society, ser .2, vol. 42 p.p. 230-265, 1936-7
              2.   Hodges A. Alan Turing and the Turing machine. The
                   universal Turing machine: a half-century survey, pp. 3-15,
                   New York, 1988
              3.   M. Davis (ed.) Solvability, probability, definability: the
                   collected works of Emil L. Post, Boston, Massachusetts, 1994
              4.   Landin P.J. The next 700 programming languages. CACM, 9,
                   pp. 157-164, 1966

                         © Учебный Центр безопасности информационных технологий Microsoft
                   Московского инженерно-физического института (государственного университета), 2003

Комментарий к слайду

К сожалению, в рамках времени, отведенных на одну лекцию, можно лишь в общих
чертах охарактеризовать абстрактные машины. Для более детального ознакомления с
особенностями, достижениями и проблемами в области исследований абстрактных машин
рекомендуется следующий список литературы:

1. Turing A.M. On computable numbers, with an application to the Entscheidungsproblem. Proc.
of London Mathematical Society, ser .2, vol. 42 p.p. 230-265, 1936-7.

2.Hodges A. Alan Turing and the Turing machine. The universal Turing machine: a half-century
survey, pp. 3-15, New York, 1988.

3. Davis M. (ed.) Solvability, probability, definability: the collected works of Emil L. Post,
Boston, Massachusetts, 1994.

4. Landin P.J. The next 700 programming languages. CACM, 9, pp. 157-164, 1966.

Кратко остановимся на источниках. Работы [1-3] посвящены ранним исследованиям в
области абстрактных машин. В работе [4] рассматриваются вопросы, связанные с первой
практической реализацией абстрактной машины применительно к языкам
программирования.
Современные языки программирования и .NET: I семестр
                                       Лекция 10: Абстрактные машины и ККЛ

                                           Библиография (2)

              5.   Plotkin G.D. Call-by-name, call-by-value and the λ-calculus.
                   Theoretical computer science, 1, pp. 125-159, 1936
              6.   Cousineau G., Curien P.-L., Mauny M. The categorical
                   abstract machine. Science of Computer Programming 8(2):
                   173-202, 1987
              7.   Mauny M., Suárez A. Implementing functional languages in
                   the categorical abstract machine. Proc. of the 1986 ACM
                   conference on LISP and functional programming, pp. 266-
                   278, Cambridge, Massachusetts, 1986
              8.   Peyton Jones S.L. The implementation of functional
                   programming languages. Prentice Hall, 1987
                         © Учебный Центр безопасности информационных технологий Microsoft
                   Московского инженерно-физического института (государственного университета), 2003

Комментарий к слайду

Продолжим обсуждение работ, посвященных исследованию абстрактных машин.

Приведем окончание библиографического списка.

5. Plotkin G.D. Call-by-name, call-by-value and the λ-calculus. Theoretical computer science, 1,
pp. 125-159, 1936

6. Cousineau G., Curien P.-L., Mauny M. The categorical abstract machine. Science of
Computer Programming 8(2): 173-202, 1987.

7. Mauny M., Suárez A. Implementing functional languages in the categorical abstract machine.
Proc. of the 1986 ACM conference on LISP and functional programming, pp. 266-278,
Cambridge, Massachusetts, 1986.

8. Peyton Jones S.L. The implementation of functional programming languages. Prentice Hall,
1987.

 В работе [5] излагается взаимосвязь различных стратегий вычисления в зависимости от
типа вызова функции. Работы [6,7] содержат описание категориальной абстрактной
машины. В работе [8] рассматриваются вопросы, связанные с реализацией современных
языков функционального программирования.
Вы также можете почитать