Программное обеспечение вычислительных, телекоммуникационных и управляющих систем
DOI: 10.18721/JCSTCS.10306 УДК 519.682.1
ПОЛНАЯ ГОЛОВНАЯ ЛИНЕйНАЯ РЕДУКцИЯ
Д.А. Березун
Санкт-Петербургский государственный университет, Санкт-Петербург, Российская Федерация
Головная линейная редукция (head linear reduction) представляет собой стратегию редукции лямбда-термов, производящую минимальное количество подстановок для достижения псевдоголовной нормальной формы (quasi-head normal form). Статья посвящена обобщению понятия головной линейной редукции до полной головной линейной редукции (complete head linear reduction), позволяющей полностью нормализовать лямбда-терм и определить новый подход к вычислениям — трассирующую нормализацию (traversal-based normalization). Оба подхода формализованы в виде систем переходов (transition system). В статье также показана корректность обеих стратегий редукций: головной линейной редукции относительно головной редукции — головная линейная редукция завершается в псевдоголовной нормальной форме терма тогда и только тогда, когда завершается головная, и полной головной линейной редукции относительно эффективной редуцирующей стратегии — головная линейная редукция завершается в нормальной форме терма тогда и только тогда, когда последняя существует.
Ключевые слова: лямбда-исчисление; редукция; линейная редукция; головная линейная редукция; полная головная линейная редукция; трассирующая нормализация.
Ссылка при цитировании: Березун Д.А. Полная головная линейная редукция // Научно-технические ведомости СПбГПУ. Информатика. Телекоммуникации. Управление. 2017. Т. 10. № 3. С. 59-82. DOI: 10.18721/JCSTCS.10306
COMPLETE HEAD LINEAR REDuCTION
D.A. Berezun
St. Petersburg State University, St. Petersburg, Russian Federation
In lambda calculus, head linear reduction is a reduction strategy which reaches a quasi-head normal form of terms in the minimum number of linear substitution steps. The paper is dedicated to the generalization of head linear reduction to a complete head linear reduction which yields normal forms when they exist. The formal presentation of both head linear reduction and complete head linear reduction via transition systems is provided. We also proved that both reduction strategies are correct: head linear reduction with respect to head reduction, i.e., that head linear reduction terminates in quasi-head normal form if and only if head reduction terminates, and we proved that
complete head linear reduction is an effective reduction strategy, i.e., it terminates if and only if the normal form exists.
Keywords: lambda-calculus; reduction strategy; linear reduction; head linear reduction; complete head linear reduction; traversal-based normalization.
Citation: Berezun D.A. Complete Head Linear Reduction. St. Petersburg State Polytechnical University Journal. Computer Science. Telecommunications and Control Systems. 2017, Vol. 10, No. 3, Pp. 59-82. DOI: 10.18721/JCSTCS.10306
1 Введение
Головная линейная редукция играет особую роль в различных подходах к вычислениям, таких как игровая семантика (game semantics) [22—25], оптимальные редукции (optimal reductions) [16], геометрия взаимодействия (geometry of interaction) [21], сети доказательств (proof nets) [20] и др. Основанная на расширенном понятии ре-декса, именуемого простым редексом (prime redex), позволяющим явно линеаризовать последовательность подстановок, головная линейная редукция не является редукцией лямбда-термов в её классическом понимании. Неформально говоря, головная линейная редукция вместо устранения редекса как такового и произведения подстановки в терм, запоминает редекс и производит линейные подстановки «по надобности», когда это необходимо, для достижения псевдоголовной нормальной формы (quasi-head normal form), т. е. такой формы терма, в которой головной переменной не соответствует ни один редекс. Головная нормальная форма получается из псевдоголовной нормальной формы путём подстановки всех простых редексов (см. раздел 3) во всех аргументах терма.
В статье приводится обобщение понятия головной линейной редукции до полной головной линейной редукции (complete head linear reduction), приводящей терм в нормальную форму. Полная головная линейная редукция позволяет определить новый подход к вычислениям — трассирующую нормализацию (traversal-based normalization) [6] — не использующую классические приемы, такие как контексты, замыкания и др.
В статье также показана корректность обеих стратегий редукций: приведено формальное доказательство того, что головная и полая головная линейные редукции завершаются в псевдоголовной нормальной и нормальной формах входного терма, со-
ответственно, тогда и только тогда, когда последние существуют. Иными словами, в общепринятой терминологии [5] полная головная линейная редукция является эффективной редуцирующей стратегией (effective reduction strategy).
2 Лямбда-исчисление
Лямбда-исчисление (lambda- calculus) впервые было предложено в 30-х гг. американским математиком Алонсо Чёрчем (Alonso Church) с целью формализации и анализа понятия вычислимости. Формальная система, предложенная Чёрчем, основана всего на трёх примитивах: переменной, абстракции, т. е. анонимной функции, и применении функции к аргументу. Лямбда-выражением (лямбда-термом, 1 -термом или просто термом, Л-term) называется выражение, удовлетворяющее грамматике Л1 ::= V | Л @2 Л | X V. Л, где V — множество конечных строк, называемых переменными, над некоторым фиксированным алфавитом Х\{ , . , @ , 1}, выражение вида Xx.e называется абстракцией по переменной x (1-abstraction), а выражение вида e1 @ e3 — применением (application) терма e1 к терму e2. Представленное в таком виде исчисление также называется чистым или нетипизированным, или бестиповым лямбда-исчислением.
Вхождение переменной в терм бывает двух видов: свободное и связанное.
1 Мы также будем использовать скобки ("(", ")") как незначащие символы грамматики в тех ситуациях, когда из конкретного синтаксиса невозможно однозначное восстановление абстрактного.
2 Символ @ иногда опускается: Л@Л = Л Л = ЛЛ.
3 Мы будем считать, что приоритет оператора "@" выше чем у "."', то есть Хх.х @ у = Хх.(х@у), а ассоциативность у оператора "@" — левая, то есть х @ у @ z = (х @ у) @ z.
Связанными называются все вхождения переменных, по которым выше в дереве разбора были произведены абстракции, остальные вхождения переменных называются свободными. Так, например, в терме ^л @ у @(Ъх.х) первое вхождение переменной x является свободным, второе — связанным, как и единственное вхождение переменной у.
Основной формой эквивалентности лямбда-термов является так называемая а-эквивалентность, утверждающая равенство термов, получающихся друг из друга переименованием связанных переменных. Так, например, термы Хх.х и Ху.у а-эквивалентны, поскольку первый получается из второго переименованием связанной переменной у в х.
Нередко термы в лямбда-исчислении рассматриваются с точностью до а-эквивалентности. Поэтому вместо терминов связанное и свободное вхождение переменной часто используют термины связанная и свободная переменная, соответ-
ственно, подразумевая, что одна и та же переменная не входит в терм свободно и связанно одновременно. Более того, мы будем придерживаться соглашения Барендрегта (Barendregt's convention), подразумевающего, что все переменные имеют различные имена. Формально определения множеств свободных (FV) и связанных (BV) переменных приведены на рис. 1.
Основной аксиомой лямбда-исчисления является в-редукция. Интуитивно, в-редукция производит применение функции, т. е. лямбда-абстракции, к её аргументу путём замены всех вхождений переменной, связанной этой абстракцией, на тело аргумента:
(Xx.e1) e2 =р e1[x / e2].
Такая замена называется подстановкой аргумента e1 в терм e2, а само выражение вида (Ax.e1 e2 — редексом. Снабжённое аксиомой в-редукции Х-исчисление обладает свойством полноты по Тьюрингу, определяя тем самым одну из простейших моделей
х[х/г У[х/ (eie2)[x/ (Ах.е) [х/ (А у.е)[х/
Синтаксис
Л ::= V | Л @ Л | XV.A
Подстановка
= г
= у, если х j- у = (ei[x/r])(e2[x/r]) = Ах.е
= Лу.е[х/г\. если х ф у и у £ FV(r) /3-редукция
(.Xx.et) е2 =р ei[ar/e2]
Множество свободных переменных
FV{x) = {х} FV(Xx.e) = FV(é) \ {х} FV(exe2) = FV{ex)U FV{e2)
//-конверсия f Xx.f x, если x g FV(f)
Синтаксис в нотации де Брауна
Ad ::= N | Ad Ad | X Ad Сдвиг в Ad Подстановка в Ad
k[j/r]
te (*) =
k, k < с
J r, k = j
^k + d, k> с MJ/,J \k, иначе fc (A e) = Л tf+1 (e) (A e)[j/r] = A e[j + 1/ f0 r] fc Ы2) =tf (ei) ti Ы (,eie2)[j/r] = ex[j/r}e2[j/r]
/З-редукцня в Ad
(A e\)e2 ^fo1 (ei[0/tj(e2)]) Множество связанных переменных
BV(x) = 0 BV(Xx.e) = BV(e) U {x} BV{eie2) = BV(e1)UBV(e2)
а-эквивалентность
Ах.е ~a Ay.e[x/y], если у 0 FV(e) Рис. 1. Чистое лямбда-исчисление
вычислений. Термы, получаемые друг из друга по правилу в-редукции, называются в-эквивалентными. Запись s t означает, что терм t получается из терма s за один шаг в-редукции, а запись s ^ t означает, что терм t получается из терма s за ноль или более шагов в-редукции.
Заметим, что подстановка не является тривиальной операцией. Так, например, рассмотрим терм (Xx.x y) x. Согласно правилу а -эквивалентности, он эквивалентен терму (Xz.z y) x, который, в свою очередь, в -эквивалентен терму Xz.z x. Если произвести подстановку [x / y] непосредственно в терме Xx.x y, то результатом будет терм Xx.x x, который уже не эквивалентен терму Xz.z x. Таким образом, для подстановки важно, чтобы переменные, встречающиеся свободно в подставляемом терме, не связывались при подстановке. Такая подстановка называется свободной от связывания (capture-avoiding substitution), далее — просто подстановка. Формальные правила подстановки приведены на рис. 1.
В начале 70-х гг. голландским математиком Николасом де Брауном4 (Nicolaas Govert de Bruijn) была предложена нотация, получившая название представление де Брауна [2], позволяющая полностью избавиться от имён в лямбда-термах. В представлении де Брауна терм полностью лишается имён переменных: вхождения переменных заменяются на натуральные числа, называемые индексами де Брауна (de Bruijn indexes), а абстракции становятся анонимными. По сути, термы в представлении де Брауна представляют собой классы эквивалентности термов, факторизованных по правилу а-эквивалентности. Индекс де Брауна суть натуральное число, представляющее собой вхождение переменной, равное количеству абстракций между этим вхождением и абстракцией, связывающей саму переменную, включительно. Так, например, терм Xx.Xy.Xz.x z (y z), также известный как S
4 В русскоязычной литературе также встречаются следующие варианты перевода фамилии <<ёе Вгиуп»: «де Брюйн», «де Брейн», «де Бройн».
комбинатор, в нотации де Брауна имеет следующий вид: XXX 3 1 (2 1). Заметим, что в представлении де Брауна при осуществлении подстановки может потребоваться пересчёт индексов (см. рис. 1).
Ещё одно преобразование иногда считается стандартным для лямбда-исчисления — П-конверсия (эта-конверсия, n-coersion), интуитивно, утверждающее, что функция и абстракция этой функции, применённой к переменной, по которой осуществлена абстракция, суть одно и то же (см. рис. 1). Преобразование функции f к виду Xx.fx получило название n-расширения (n-expansion), а преобразование, ему обратное, — n-редукции (n-reduction).
2.1 Стратегии вычислений
Говорят, что терм находится в нормальной форме, если он не содержит редексов, т.е. к нему неприменима аксиома в -редукции, а два терма называются равными, с точностью до а -конверсии, если они имеют одну и ту же нормальную форму. Вычисление в лямбда-исчислении есть вычисление нормальной формы терма — нормализация. Конечно, ввиду Тьюринг-полноты X -исчисления не все термы имеют нормальную форму, например, вычисление терма, также известного как терм омега (ш, omega), а = аа = (Xx.x x) (Xx.x x) расходится. Важным свойством в контексте нормализации является свойство Чёрча—Россера (Church— Rosser), также известное как свойство ромба, утверждающее, что если два терма s и t равны, то существует такой терм m, что s ^в m и t ^в т. Прямым следствием свойства ромба является единственность нормальной формы терма, если таковая существует. Тем не менее, в аксиоме в -редукции ничего не сказано про порядок, в котором должна происходить в -редукция терма. Далее в этой части мы рассмотрим существующие порядки (стратегии, reduction strategies) редукций и их свойства.
Разнообразие стратегий вычислений в лямбда-исчислении обусловлено, в том числе, тем, что разные языки программирования изобретались для различных целей и, соответственно, имеют разные свойства и реализации. Несмотря на то, что не все
Редукция аргументов Редукция под абстракцией
Да Нет
Да (Сильная) нормальная форма <S ::= Xx.N \ х Ni ... Nn Слабая нормальная форма И ::= Лх.е | х \¥\ ... \¥п
Нет Головная нормальная форма H ::= Лх.Н \ х е\ ... еп Слабая головная нормальная форма Е ::= Лх.е \ х в\ ... еп
где V г € N. ег — произвольный лямбда-терм
Рис. 2. Нормальные формы6
порядки редукций приводят терм к нормальной форме, они нередко завершаются в некоторой «нормальной»5 для этого порядка форме, которая с точки зрения конкретного порядка редукций считается значением, т. е. термом, который не редуцируется дальше, даже если содержит ре-дексы. Основными свойствами стратегий редукций являются следующие два: произведение редукций под абстракцией и редукция аргументов. В таблице на рис. 2 приведены «нормальные» формы, получаемые при всех комбинациях этих свойств, описанные в терминах контекстно-свободных грамматик6.
2.1.1 Слабые порядки редукций
Слабые порядки редукций характеризуются тем, что они считают абстракцию значением и, соответственно, не производят редукцию под абстракцией.
Вызов по имени (call-by-name). Интуитивно, стратегия вычисления по имени сначала вычисляет функцию до значения, лямбда-абстракции, после чего редуцирует её применение к аргументу путём постановки тела аргумента вместо каждого вхождения пере-
5 Данная форма не является нормальной формой в том смысле, что терм, находящийся в ней, может содержать редексы. Для того, чтобы такая терминология не вводила в заблуждение, нормальную форму часто называют сильной нормальной формой, а остальные «нормальные» формы имеют некоторый дополнительный префикс, описывающий «какая именно это нормальная форма», например, головная нормальная форма (см. главу 2.2.3 и рис. 2).
6 Таблица заимствована из статьи Питера Се-стофта (Peter Sestoft) [7].
менной, по которой эта абстракция произведена, что может привести к повторным вычислениям аргументов, если вхождений переменной, по которой производилась абстракция функции, несколько. Формально, на каждом шаге раскрывается самый левый, самый внешний редекс, который не находится под лямбда-абстракцией, и, таким образом, вызов по имени завершается в слабой головной нормальной форме.
Вызов по значению (call-by-value) в отличие от вызова по имени сначала производит редукцию аргументов и лишь потом применения функции к ним. На каждом шаге раскрывается самый левый, самый внутренний редекс, который не находится под лямбда-абстракцией, и, таким образом, вызов по значению завершается в слабой нормальной форме.
Вызов по необходимости (call-by-need) является вызовом по имени, в который добавлена мемоизация, т. е. при вычислении аргумента его значение сохраняется и не перевычисляется при последующем повторном использовании аргумента. В чистых функциональных языках, где нет побочных эффектов, результат вызова по имени и вызова по необходимости будет одинаковым, а значит, вызов по необходимости завершается в слабой головной нормальной форме. Одним из наиболее популярных языков, использующих вызов по необходимости, является язык функционального программирования Haskell.
2.1.2 Сильные порядки редукций
Нормальный порядок (applicative order) отличается от стратегии вызова по имени тем, что он производит сильную редукцию, т. е. редукцию под абстракцией, а также
редукцию аргументов. Первым на каждом шаге раскрывается самый левый, самый внешний редекс. В отличие от других порядков редукций, нормальный порядок редукций является нормализирующим (normalizing), т. е. завершается в сильной нормальной форме терма тогда и только тогда, когда последняя существует. С другой стороны, как и вызов по имени, нормальный порядок редукций может проделывать одну и ту же работу несколько раз. Например, (Xx.xx)((Xy.y)a) ^ ((Xy.y)a)((Xy.y)a) ^ ^ a((Xy.y)a) ^ aa дважды редуцирует редекс (Xy.y)a.
Аппликативный порядок (applicative order) В то время как нормальный порядок является сильной версией вызова по имени, аппликативный порядок является сильной версией вызова по значению. Иными словами, на каждом шаге первым раскрывается самый левый, самый глубокий редекс. Например, (Xx.xx)((Xy.y)a) ^ (Xx.xx)a ^ aa. Если аппликативный порядок завершается, то приводит терм в сильную нормальную форму. Тем не менее, в отличие от нормального порядка редукций, аппликативный порядок может не завершаться, даже если терм имеет нормальную форму. Нередко это происходит тогда, когда какой-нибудь аргумент функции не имеет нормальной формы и при этом не используется в её теле. Например, терм (Xx.Xy.x)a((Xx.xx)(Xx.xx)) имеет нормальную форму а, в то время как его аргумент ((Xx.xx)(Xx.xx)), уже известный нам терм ю нормальной формы не имеет, и его вычисление расходится. Более того, аппликативный порядок редукций не способен редуцировать терм, являющийся применением рекурсивной функции к аргументу, даже если комбинатор рекурсии, используемый для определения рекурсивной функции, является специальным комбинатором для вызова по значению.
Головная редукция (head reduction, leftmost head reduction) производит редукцию только головных редексов. Редекс называется головным, если его предками, в смысле абстрактного синтаксического дерева терма, являются лишь абстракции. Например, редекс (Xy.e1)e2 является головным в терме Xx1.... Xxn.(Xy.e1 )e2 ...em. Завершается голов-
ная редукция в головной нормальной форме. Заметим, что повторное применение головной редукции к аргументам получившейся головной нормальной формы нормализует терм. Более того, такая стратегия редукций является нормализирующей.
Существуют и другие порядки редукций, нередко являющиеся лишь вариациями и разнообразными комбинациями описанных выше порядков редукций, такие как гибридный (hybrid) аппликативный порядок, гибридный нормальный порядок или спи-нальная головная редукция (spine head reduction) и др. Мы опустим их в данной статье, обратив читателя к [5, 7].
2.2 Головная линейная редукция и трассирующая нормализация
Как уже отмечалось ранее, лямбда-исчисление в первую очередь представляет собой модель вычислений, и, соответственно, одним из основных вопросов, стоящих перед ней, является вопрос о сложности (complexity) вычислений. Иными словами, положим, дан некоторый терм, и зафиксирована стратегия вычислений. Какова сложность вычислений — нормализации — данного терма. Простейшая мера — количество шагов в -редукции, необходимых для нормализации терма. К сожалению, такой подход не соответствует сложности вычислений на реальных вычислителях, поскольку сложность операции подстановки находится в непосредственной нелинейной зависимости от терма.
Работы [13—18] представляют различные подходы к описанию сложности вычислений в лямбда-исчислении и определении оптимальных стратегий редукций, основанных на той или иной мере сложности вычислений. Одним из таких подходов является головная линейная редукция (head linear reduction) [3, 4], на каждом шаге вместо обычных подстановок производящая так называемые линейные подстановки (linear substitution) — подстановки только одного вхождения переменной в терм. В этой главе мы рассмотрим классические определения головной линейной редукции, трассирующей нормализации и связь между ними.
Терм Т Условие Список головных абстракций Лн(Т) Список простых редексов рг(Т)
X [] []
UV A h(U) = [] [] pr(U)
UV Л h(U) = Хх:1 1 {Xx,V) : pr(U)
Xx.U Xx : Xh(U) pr(U)
Рис. 3. Определение списков головных абстракций и простых редексов
2.2.1 Головная линейная редукция: классическое определение
Для формального определения понятия головной линейной редукции нам понадобится ввести некоторое количество дополнительных определений. Хребетными или спинальными подтермами (spine sub-terms) терма T называются сам терм T, а также все спинальные подтермы терма U, если T = UV или T = Xx.U соответственно. Заметим, что любой лямбда-терм имеет ровно один спинальный подтерм-переменную. Такое вхождение переменной, так же как и сам подтерм, называется головным (head occurrence, hoc). Ещё два понятия: список головных абстракций (head X -list, Xh (T)) и простые редексы (prime redexes) — определяются по индукции по структуре терма T. Простой редекс представляет собой пару (Xx, N), первый и второй элементы которой называются абстракцией и аргументом простого редекса соответственно. Индуктивное определение списков простых ре-дексов и головных абстракций приведены
на рис. 3, где pr(T) обозначает список простых редексов терма Т.
Редексом головного вхождения переменной (hoc redex) терма Т называется простой ре-декс (Xx, V), где x является головной переменной, если таковой редекс существует.
Интуитивно, головная линейная редукция линеаризует последовательность подстановок путём замены на каждом шаге лишь одного вхождения переменной (головного), оставляя сам головной редекс нетронутым. Если же он не определён, головная линейная редукция завершается в так называемой псевдоголовной нормальной форме (quasi-head-normal form, qhn).
Пусть r = (Xx,...) и ^ = (Xj,...) — два простых редекса терма T. Говорят, что простой редекс r содержит простой редекс s, если Xy является вершиной поддерева, начинающегося в вершине Xx. Более того, простые редексы r и s называются последовательными, если r содержит s, и не существует такого простого редекса t, который содержится в r, но не содержится в s.
Пример. Пусть Т = Xs.(Xx.(Xy.(Xw.w@б)@у)@х)@(Х*.*), тогда
(Т) = [Х5]
[рг(Т) = [(Хх,(Х*.*)),(Ху, х),(Х*, у)] ^ [Г, Г] Пары (г, 5) и (5, ?) образуют последовательные простые редексы.
Теорема 1. Пусть N — произвольный терм, тогда если терм М является результатом применения головной линейной редукции к терму N, то:
1. М N
2. Головная линейная редукция завершается тогда и только тогда, когда завершается головная редукция.
Первое утверждение может быть показано индукцией по числу шагов головной линейной редукции. Что же касается вто-
рого утверждения, то его необходимость устанавливается в силу того, что головная редукция терма N завершится за число шагов, равное количеству простых редексов терма М. Действительно, никакая в -редукция терма М не способна произвести подстановку головного вхождения переменной, а значит, и не способна создать новый простой редекс. Таким образом, терм имеет головную нормальную норму, что в свою очередь гарантирует завершаемость [5] го-
Рис. 4. Простое типизированное лямбда-исчисление
ловной редукции. Тем не менее доказать достаточность утверждения 2 не так просто. Для этого мы введём формальное определение головной линейной редукции в виде системы переходов, с помощью которой формально и докажем утверждение теоремы (см. главу 3).
2.2.2 Простое типизированное лямбда-исчисление
Простое типизированное лямбда-исчисление (simply-typed lambda^alculus, STLC) имеет схожий с бестиповым синтаксис, тем не менее, не все термы бестипового исчисления являются допустимыми (valid) термами простого типизированного. Типы в простом типизированном лямбда-исчислении описываются следующей грамматикой: т ::= 11 т — т, где i представляет собой некоторый базовый тип (ground type), а т — т2 — функциональный тип (стрелочный тип, arrow type), ассоциативность у оператора стрелка — правая. Принято выделять два похода, два стиля типизации: стиль Карри (типизация по Карри, \'а la Curry) и стиль Чёрча (типизация по Чёрчу, \'а la Church). Эти два подхода являются принципиально разными: при типизации по Карри сначала задаётся грамматика термов — синтаксис, затем определяется их поведение — семантика, и наконец вводится система типов — типизация, отвергающая термы, обладающие нежелательным поведением, в то время как в стиле Чёрча типизация предшествует семантике7. Иными словами, при типизации по Чёрчу семантикой — смыслом — наделены исключительно пра-
вильно типизированные (well-formed, well-typed) термы, а типизация по Карри даёт возможность рассуждать о поведении лямбда-термов вне зависимости от того, являются ли они правильно типизированными или нет. Синтаксис и типизации по Чёрчу и по Карри простого типизированного лямбда-исчисления в виде правил вывода (inference rules) приведены на рис. 4. Суждение вида Г Ь Л : т называется терм в контексте (term-in-context), где контекст типизации Г (typing context) является множеством текущих предположений о типах термов.
Одним из основных отличий двух систем типизации является свойство единственности типа: при типизации по Чёрчу терм имеет не более одного типа, в то время как при типизации по Карри терм может иметь один или несколько типов, или быть не типизируемым вовсе. Например, терм Хх : т.х (при типизации по Чёрчу) имеет един-
7 Иногда под типизацией по Чёрчу понимают явно типизированные системы (типы переменных явно указываются в синтаксисе языка), а под типизацией по Карри — неявно типизированные (типы присваиваются в процессе компиляции или интерпретации программы). Путаница возникла ввиду того, что сам Чёрч описывал своё исчисление в явном стиле, в то время как Карри использовал неявный стиль. Несмотря на то, что такой взгляд на стили типизации является исторически сложившимся: явно типизированные системы часто описывались и описываются в стиле Чёрча, а неявно типизированные — в стиле Карри, — он всё же является ошибочным.
a)
х / \
BT(Iaxu(Ix))= ш х Конечное дерево
"Терм I = Хх.х является один из основных комбинторов исчисления комбинаторов (см. [5])
б)
Ш / /
BT(Y) = BT(\f.(Xx.f(xx))(Xx.f(xx))) = Бесконечное дерево
Рис. 5. Пример: деревья Бёма для термов, не имеющих нормальной формы
ственный тип т ^ т, где т — некоторый конкретный тип, указанный в синтаксисе, например, i или (i^i^i)^i^i^i и т. д., а аналогичному ему терму Xx.x в представлении Карри соответствует всё множество типов вида а ^ а.
Как уже упоминалось, не все термы бестипового исчисления являются термами простого типизированного. Более того, в отличие от бестипового лямбда-исчисления, простое типизированное является строго нормализуемым (strongly normalized), т. е. каждый допустимый терм имеет нормальную форму, а процедура его нормализации всегда завершается. Так, например, терм бестипового лямбда-исчисления ш не имеет нормальной формы и не является допустимым термом простого типизированного. Исчерпывающее описание простого типизированного лямбда-исчисления и его свойств, а также более богатых систем типов читатель может найти в [5, 10, 11].
2.2.3 Головная нормальная форма и дерево Бёма
Произвольный лямбда-терм M можно записать в следующей форме8:
M = %у.Щ ...Уп, где U =
У
(Ay P )Q
(1)
В первом случае говорят, что терм М находится в головной нормальной форме (head normal form), во втором случае (Xy.P)Q образует головной редекс. Заметим, что по определению терм находится в головной нормальной форме тогда и только тогда, когда он не содержит головных редексов.
Важным следствием этого определения является то, что головная нормальная форма не обладает свойством единственности: один и тот же терм может иметь более одной головной нормальной формы. Например, головной нормальной формой терма y((^x.x)z) является как терм сам по себе, так и его нормальная форма yz. Среди множества головных нормальных форм терма выделяют основную головную нормальную форму (principal head normal form, phnf), получаемую посредством головной редукции терма, записанного в виде (1), если редукция завершается.
Деревом Бёма (Böhm tree) BT(M) терма М называется дерево, построенное по следующим правилам:
Как уже отмечалось ранее, повторное применение головной редукции к аргумен-
8 Утверждение может быть легко доказано индукцией по структуре терма М.
там головной нормальной формы нормализует терм. Таким образом, если терм имеет нормальную форму, то дерево Бёма, представляющее этот терм, вычислимо и конечно, и наоборот [5, 27, 281. Также отметим,
что если терм нормальной формы не имеет, то дерево Бёма, ему соответствующее, либо конечно, а процедура построения его следующего уровня расходится (см. рис. 5 a), либо является бесконечным (см. рис. 5 б).
2.2.4 n-длинная форма терма
ц-длинной форма (n-long form) терма получается путём его полного n-расширения и заменой бинарного оператора применения на оператор длинного применения @l (long application). Заметим, что каждая переменная, непосредственным предком которой не является абстракция, также подлежит П-расширению, путём введения анонимной (dummy) абстракции (x X.x). Например, П-длинной формой терма явля-
ется терм Xxl^ ^a1 bl .x(X.b)(X.a). Заметим, что понятие n-длинной форм имеет смысл только в типизированном исчислении,
Л'/ X^l A If
ilodd " ••■d'p -iveven
AlLn ■■■= X Axl0fdd ... АД I Aol
Иными словами, нечётные уровни в абстрактном синтаксическом дереве представляют собой абстракции по произвольному числу аргументов, а чётные — применением переменной к нулю или более аргументам, либо же применение другого П-длинного терма к одному или более аргументам, получившее название оператора длинного применения @l.
2.2.5 Трассирующая нормализация
В 70-х гг. ХХ в. Гордон Плоткин [8] сформулировал проблему построения полностью абстрактной модели вычислений (fully abstract model of computations) для языка программирования вычислимых функций PCF (Programming Computable Functions), заключающуюся в построении абстрактной модели языка, являющейся одновременно полной (complete) — каждый терм языка представим в его модели — и согласованной (sound) — каждый элемент абстрактной модели имеет прообраз в языке. Впервые предложенная Плоткиным проблема была решена в начале 90-х гг. независимо двумя группами исследователей (Мартином Хуландом и Люком Онгом [23], и Самсоном Абрамски и Гаем МакКаскером [22])
т. к. в нём n-расширение ограничено хотя бы размером типа терма, в то время как в бестиповом случае п-расширять терм можно до бесконечности.
в -нормальной ц-длинной является форма терма, не содержащая в -редексов, но являющаяся n-длинной. Например, в -нормальной n-длинной формой терма (Xx1^1 .x) y является терм Xd. y (Х.а), которой произведением полной п-редукции, которая, разумеется, всегда завершается, П-эквивалентен терму y, являющемуся, в свою очередь, нормальной формой исходного терма.
Заметим, что абстрактный синтаксис, используемый в определении п-длинной формы терма отличается от стандартного абстрактного синтаксиса X -исчисления, введённого в начале главы 2, а именно, он описывается следующей грамматикой:
Мш ■ ■ ■ AmoL, гае т <= N, п,р е N0
посредством игровой семантики (game semantics) программ, являющейся одним из способов задания формальной семантики языков программирования. Игровая семантика рассматривает вычисления, как игру (game) между пропонентом(-ами) (proponent, player) и оппонентом(-ами) (opponent) — программой и её окружением, а семантика — смысл — программы — стратегия (strategy), которой игрок должен придерживаться. Подробнее с игровой семантикой читатель может ознакомиться в работах [22—26].
В 2015 г. Люком Онгом было замечено [1], что из игровой семантики программ для простого типизированного лямбда-исчисления естественным образом вытекает нестандартная процедура его нормализации. Отличительной особенностью данной процедуры является то, что вместо изменения терма посредствам в -редукции, используя стандартные приёмы, такие как окружения или замыкания9, трассирующая нормализация (traversal-based normalization, normalization by traversals) оставляет входной терм нетронутым, производя его нормализацию путём обхода абстрактного синтаксического дерева терма, запоминая историю этого
обхода. Оригинальная процедура нормализации, предложенная Онгом, требует преобразования термов в n-длинную форму, завершаясь в в -нормальной п-длинной форме.
Интуитивно, процедура трассирующей нормализации, предложенная Онгом, производит обход абстрактного синтаксического дерева терма в глубину по самому левому пути, запоминая историю обхода, называемую трассой (traversal). Достигая вхождения связанной переменной, процедура нормализации «перепрыгивает» на поддерево, соответствующее динамическому аргументу, с которым связана абстракция этой переменной. Заметим, что такой аргумент всегда найдётся, в силу того, что терм находится в п-длинной форме, а значит, все абстракции применены к некоторым аргументам. При достижении вхождения свободной переменной, процедура нормализации «разделяется», т. е. продолжается независимыми обходами каждого из аргументов этой переменной, порождая тем самым множество трасс, каждая из которых впоследствии определит уникальный путь от вершины до некоторого листа в абстрактном дереве п-длинной Р-нормальной
S I
F ->
3 Головная линейная редукция (HLR)
В этой главе мы введём формальное определение головной линейной редукции в виде системы переходов и докажем её согласованность с головной редукцией.
3.1 HLR как система переходов
Определение. Система переходов для головной линейной редукции:
9 Замыканием (closure) называется функция первого порядка, определяющая значения переменных определённых вне тела функции, в случае лямбда-исчисления — свободных переменных. Использование замыканий является одной из стандартных способов реализации функциональных языков программирования.
формы входного терма. Процедура обхода и построения трасс является синтаксически-управляемой и детерминированной. Стоит также отметить, что предложенная процедура нормализации в некотором смысле10 соответствует головной линейной редукции термов.
2.3 Системы переходов
Одним из подходов к изучению поведения дискретных систем являются системы переходов (transition system, [9]) — суть четвёрка (S, I, F, где S — множество состояний системы, I с S — множество исходных состояний системы, F с S — множество конечных состояний системы, ^•с S х S — отношение, означающее дискретный переход системы из одного состояния в другое, обозначаемое (¿l^) е^ или, для удобства чтения, s2 ,где s2 е S .
Система переходов называется детерминированной, если текущее состояние системы однозначно определяет последующее, в противном случае система называется недетерминированной.
Например, алгоритм Евклида может быть записан следующей системой переходов:
1. Состоянием является тройка <А[В1; Г; А), где
• А[В] — ^-терм, в котором вершина, являющаяся корнем поддерева В, выделена11.
10 Внимательный читатель мог заметить, что головная линейная редукция завершается в псевдоголовной нормальной форме, в то время как трассирующая нормализация в стиле Онга — в р-нормальной п-длинной форме. Тем не менее, с точностью до вхождения свободной переменной, имеющей не пустой список аргументов, и П-эквивалентности, если входной терм находится в п-длинной форме, эти формы равны.
11 Выделение является синтаксической пометкой вершины абстрактного синтаксического дерева терма и обозначается подчёркиванием в примерах и правилах.
= N х N - 5
= {(n,n) I п € N}
= {((m,n), (т — п,п)) | т > п} U {((m,n), (m,n — т)) \ т < п}
Обозначения
А[В] А-терм с выделенным поддеревом В 11
Г := (уаг !->•(£, 1\)) : Г окружение (список)
Д := (£, Г) : Д стек висячих аргументов
пустой список либо пустой стек
Состояние
(А[В}: Г;Д)
Начальное состояние
[]; [])
Конечное состояние
( А\х\-, Г; Д )
(А [е1@е2] ; Г; Д)
(А[Хх.е]\ Г; [ ])
(Л [Лх.е]; Г; (В, Г') : Д)
(А И ; [..., (х^(В.Т')), ...]; Д)
Правила переходов
—► (A [ei@e2] ; Г; (е2,Г) : Д) [Арр]
—> (А [Аж.е]; Г; [ ]) [Lam-Non-Elim]
(^¿[Х.е] ; (х ^ (В, Г')) : Г: Д) [Lam-Elim]
—► (Л[В];Г';Д) [BVar]
Рис. 6. Система переходов для головной линейной редукции
• Г ::= (уаг ^ ^, Г1)): Г - окружение — список связываний переменных, где уаг — переменная, t — Х-терм, а Г1 — сохранённое окружение, соответствующее терму t.
• А ::= (^ Г) : А — стек висячих аргументов — пар вида ^, Г), где t является Х -термом, а Г — соответствующим ему окружением.
2. Начальным является состояние ( А[А]; [ ]; [ ] >, где [ ] — пустые окружение и стек висячих аргументов, соответственно, а А[А] — входной терм с выделенным корнем.
3. Конечным является состояние вида ( А[х]; Г;А ), где А[х] — исходный Х -терм с выделенной переменной х, х ф Г.
4. Правила переходов приведены на рис. 6.
• В случае применения (правило [Арр]), выделенным становится его левый аргумент, а в стек висячих аргументов помещается аргумент с текущим окружением. В дальнейшем этот аргумент может использоваться для формирования простого редекса.
• Если выделенной вершиной является абстракция, то либо, если стек висячих аргументов пуст, и переменная абстракции не связывается ни с каким аргументом (правило [Ьаш-Коп-ЕНш]), либо, если стек висячих аргументов не пуст, формирует простой редекс с его вершиной (правило [Ьаш-ЕИш]). В этом случае абстракция и соответствующие применение и его аргу-
мент вычёркиваются12 из текущего дерева, а простой редекс сохраняется в текущем окружении. Очевидно, что правила напрямую согласованы с определением простого редекса.
• Если же выделенной является переменная, то, если она является свободной, система переходов достигла своего конечного состояния, ежели переменная является связанной, то либо существует простой редекс, аргумент которого может быть подставлен вместо вхождения этой головной переменной (правило [BVar]), либо такого редекса нет, и опять же система переходов достигла конечного состояния.
Заметим, что система переходов является детерминированной и синтаксически-управляемой, а выбор правила зависит лишь от первого элемента состояния (формально, выбор между правилами [Lam-*] зависит от текущего состояния стека висячих аргументов, но он также напрямую зависит от входного терма). Единственным случаем, когда система переходов может достичь своего конечного состояния, является случай выделенной переменной, которая либо свободна, либо не связана никаким про-
12 Вычёркивание является синтаксической пометкой вершин в дереве, а не полным удалением подтерма. С этого момента мы будем использовать обозначение Ау[ [^Х] • е\ для терма А, у которого подтерм В, вершина " Хх " и соответствующая вершина оператора применения помечены — вычеркнуты.
стым редексом. Более того, правила гарантируют, что выделенной может быть лишь вершина, находящаяся на самом левом пути терма. Иными словами, если система
переходов достигает конечного состояния, вычисления завершаются, Иос-переменная выделена и не связана никаким простым редексом.
Пример. Рассмотрим терм (X x . x) @ (X y . y).
Как и ожидалось, первым элементом конечного состояния является псевдоголовная нормальная форма входного терма: (Хх. X у .у) @ (X у . у). Головной формой терма является терм Ху . у, в данном случае получаемый простым «выбрасыванием» вычеркнутых вершин из первого элемента конечного состояния системы переходов. В общем случае нам потребуется определить специальную функцию ехр, которая строит соответствующий терм из конечного состояния, и показать её согласованность с головной редукцией (см. гл. 3.2). ■
Более показательный пример приведён на рис. 9.
3.2 Согласованность с головной редукцией
В данной главе приводится доказательство согласованности головной линейной и головной редукций. Сначала определяется дополнительная функция расширения — ехр.
Функция расширения. По данному состоянию системы переходов функция ехр возвращает X -терм. Интуитивно, функция ехр производит последовательную редукцию всех простых редексов, накопившихся на данный момент времени. Поскольку последовательность простых редексов совпадает с последовательностью головных редексов, головная и линейная головная редукции согласованы. Формально13
где В[Г'] = exp<B; Г'; [ ]>, а терм M' получается из терма M удалением всех вычеркнутых вершин. (7) производит подстановку терма В[Г'] вместо всех вхождений переменной x в такое поддерево терма M, которое имеет корнем выделенную вершину (т. е. поддерево A). Каждый рекурсивный вызов (8) производит подстановку всех переменных в соответствии с контекстом Г' исключительно в висячем аргументе В. Заметим, мы придерживаемся соглашения Барендрегта (Barendregt's convention): предполагается, что все переменные имеют уникальные имена. Следование этой концепции в данном случае позволяет избежать захвата имён переменных при подстановке. Далее мы будем называть расширением состояния системы переходов результат применения функции расширения exp к этому состоянию.
Отметим некоторые важные для нас свойства системы переходов головной линейной редукции:
• Исходя из определения функции ехр (конкретно уравнений (7), (8)), единственное правило системы переходов, при применении которого расширение получаемого состояния не равно расширению состояния, из которого оно получено, — [Ьаш-БИш], все остальные правила оставляют расширение неизменным.
• Количество переходов системы без применения правила [Ьаш-БИш] конечно. Данный факт является прямым следствием определения контекста, конечности размера входного терма и того, что в силу опре-
3 а • В означает конкатенацию контейнеров а и В.
деления только правило [Ьаш-ЕИш] может изменить контекст. С этого момента мы будем обозначать последовательное применение правил без применения правила [Ьаш-ЕНш] через ^.
Пример. В данном примере показан результат применения функции ехр к каждому состоянию системы переходов для примера, приведённого в разделе 3.1.
ехр((2)) = ехр{((А х . х) @ (Л у . у); [ ]; [ ]» = (Л х . х) @ (Л у . у)
ехр(( 3)) = ехр(((Хх.х)@(ХУ.УУ1 []; [((А у . у), [])]}) = ехр(((Хх . х) @ (А у . у); []; []))
= {Хх.х)@{\ у. у)
ехр((4)) = ехр(((Ж.х)№3^<ЯХ: [(* -»■ ((А У . у), []))]; []))
= ехр({(><. Ау . ехр((5)) = ехр({(Х. Ау . ехр((6)) = ежр((СХ. А у . у)
1; [])) = Ау.у
1; [])) - Ау.у
]; [])) = Ау.у
Идея доказательства согласованности головной и линейной головной редукций состоит в следующем: расширение не может быть изменено никаким правилом, кроме [Ьаш-ЕИш]. Следовательно, после применения функции расширения к состояниям системы переходов каждое применение правила [Ьаш-ЕНш] соответствует одному шагу головной редукции. Так, например, (К х . х) @ (К у . у) соответствует первому шагу, К у .у соответствует трём оставшимся шагам.
Теорема 2. Пусть (...) — некоторое состояние системы переходов, расширение которого обозначено ... (см. иллюстрацию к теореме, рис. 7), такое, что на следующем шаге должно быть применено правило [Ьаш-ЕНш], и результатом его применения является состояние (М/ Г/ АД расширением которого является некоторый терм М/. Далее система переходов делает некоторое конечное число шагов до следующего применения правила [Ьаш-ЕИш], состояние (М/ Г/ АД расширением которого также является терм М/, тогда если может быть применено правило [Ьаш-ЕНш], расширяющее окружение Г новым связыванием (х ^ (В, Г')), и расширением результата
применения которого является некоторый терм М/+1, то терм М/+1 получается из терма М1 за одним шаг головной редукции.
Доказательство. Индукция по количеству применений правила [Ьаш-ЕИш].
База индукции. Очевидно, т. к. первый элемент, добавляемый в Г , является головным редексом по определению.
Индукционный переход. Согласно индукционному предположению, после /'-го применения правила [Ьаш-ЕИш] текущим является состояние вида (М/Г/АД расширением которого является некоторый
*
терм М1. Как уже отмечалось ранее, ^
*
не изменяет расширения и число шагов ^ конечно. Таким образом, существует два возможных случая:
1. Система переходов достигла конечного состояния, и нечего доказывать.
2. Система не достигла конечного состояния, и может быть применено правило [Ьаш-ЕИш]. В данном случае, согласно определению правила [Ьаш-ЕНш], мы знаем вид исходного состояния: (А[Кх.е]; Г; (В, Г'): А), обозначим его за (/), и вид результата применения правила [Ьаш-ЕИш] к нему: (А^[Ух..е.]; (х ^ (В, Г')): Г; А), обозначим
Рис. 7. Иллюстрация к теореме 2
его за (//). Заметим, что нам надо показать, что результат применения функции ехр к состоянию (//) совпадает с результатом
Легко заметить, что терм, являющийся первым компонентом состояния (12), АВ[Г'][Хх.е[Г]], имеет головным редексом (Хх, В), поскольку контекст уже является пустым. Таким образом, если применить шаг головной редукции к данному терму, результатом будет терм А^ [Х^ .е [Г ][х / В [Г']]], по определению головной редукции, соответствующий первой компоненте состояния (16). Согласно (7) и (8), если продолжить применение функции ехр к состояниям (12) и (16), соответственно, то в обоих случаях один и тот же стек висячих аргументов А не произведёт никаких изменений ни в аргументе В, ни в выделенном поддереве е. Следовательно, редекс (Хх, В) является головным и для терма Мг, а значит, и расширением состояния (//) является терм М. ', что и требовалось доказать ■
Теорема 2 сопоставляет каждому шагу головной редукции шаг системы переходов, соответствующий применению правила [Ьаш-ЕНш]. Таким образом, прямым следствием теоремы является тот факт, что головная линейная редукция завершается тогда и только тогда, когда завершается головная редукция. Ввиду того, что функция расширения не способна изменить путь от корня дерева терма до корня его выделенного поддерева, первая компонента конечного состояния системы переходов для головной линейной редукции содержит
одного шага головной редукции терма Mi', т. е. термом M. .. Применим функцию exp к состоянию (i) :
(Ю)
(П) (12)
(13)
(14)
(15)
(16) (17)
терм такой, что самый левый путь в дереве, его представляющем, является частью головной нормальной формы, а значит, и расширение конечного состояния является вершиной дерева Бёма. Таким образом, повторное применение головной линейной редукции ко всем оставшимся аргументам (полная головная линейная редукция, см. гл. 4) нормализует терм.
4 Полная головная линейная редукция
Полная головная линейная редукция (complete head linear reduction — CHLR) является расширением головной линейной редукции, рекурсивно применяющим последнюю к аргументам при достижении конечного состояния. В данной главе приводится формальное описание CHLR в виде системы переходов, являющейся истинным расширением системы переходов для HLR.
4.1 Система переходов для полной головной линейной редукции
Система переходов для CHLR отличается от системы переходов для HLR тремя новыми правилами [FVar-*]. Неформально говоря, эти правила обрабатывают ситуацию, когда система переходов HLR достигла своего конечного состояния, т. е. первым компонентом состояния системы переходов является некоторый терм с
ехр (А[Хх. е]; Г; (В. Г') : А)
ехр
^*ехр(А[Хх. е[Г]]; []; (В, Г') : Д) ехр (Ав[П[Хх. е[Г]]; []: Д)
ехр
Теперь применим функцию exp к состоянию (ii) :
за конечное число шагов, по (7) за один шаг (8)
Обозначения
А[В\ А-терм с выделенным поддеревом В 11
Г := {уаг I—(£, Г1)) : Г окружение (список)
А := (£, Г) : А стек висячих аргументов
пустой список либо пустой стек $ символ-разделитель
Состояние
1;Г;Д>
(А [е1@е2] ; Г: Д)
,ГДг.(; : Г: : Д
Начальное состояние
MU]; []; [])
Правила переходов
—► {А [ei@e2] ; Г; (е2, Г) : Д)
А [Хх.е]; Г;
Конечное состояние
(АЫ- Г: [] )
Д
[Арр]
[Lam-Non-Elim]
(А [Хх.е]; Г; (В. Г') : Д) (А[х]; [..., И(В.Г')), ...]; Д) (А [М [х] @В]; Г; (В. Г') : $ : Д)
<.е] ; (х ^ {В. Г')) : Г; Д> [Lam-Elim]
BVarl
[FVar - 0]
(А [В]; Г; Д) (А [М[х]@В\; Г'; $ : Д),
х ^ dorn (Г)
NB: здесь В, как и во всех [FVar-*] правилах, является компонентом списка висячих аргументов. Более того, В должен быть аргументом некоторого вышестоящего в контексте А применения.
(А [М [х] @В}; Г; {В. Г') : С : Д) —(А [М[х]@В]; Г'; $ : С : Д),
С ф $, х £ dorn (Г) {А [М [х] @В]; Г; $ : (В. Г') : Д) —У (А [М [х] @В]; Г'; Дх),
если Д = $ : Д2 иначе
[FVar - 1]
[FVar - 2]
, . Г Д.есл
х £ dom(T), А1 = < Ф .д .
Рис. 8. Система переходов для полной головной линейной редукции
выделенной свободной или динамически несвязанной с аргументом переменной. Под динамически несвязанной с аргументом переменной понимается связанная переменная, чья абстракция не применена ни к какому аргументу. Итак, система переходов для СНЬЯ обладает следующими изменениями по сравнению с системой переходов для НЬЯ.
• Стек висячих аргументов А расширяется специальным символом $. Символ $ играет роль разделителя, запрещающего связывать абстракцию с аргументом, если путь от этого аргумента до соответствующей абстракции не является левым путём. Иными словами, разделитель $ гарантирует, что все редексы в контексте являются простыми для данного подтерма. Например, пусть дан некоторый входной терм, и в ходе полной головной линейной редукции получено состояние (М[Ху]; Г; [$,(5, Г0)]), где терм
М[Ху] изображён справа. В данном примере" разделитель $ запрещает связывание вершины Ху с висячим аргументом В, поскольку они не образуют простого редекса.
• Начальным является состояние (Х [ ]; [ ]), где Х является входным термом с выделенным корнем.
• Конечным состоянием является (М[х]; Г; [ ]), где х £ ^от(Г). Заметим, что в отличие от головной линейной редукции, в конечном состоянии стек висячих аргументов должен быть пустым.
• Результатом СИЬЯ является терм в нормальной форме; в терминах системы переходов это означает, что он может быть получен из первой компоненты конечного состояния системы переходов путём удаления из неё всех вычеркнутых вершин.
• На рис. 8 приведены правила для переходов для Т8 для |СИЬЯ|. Для удобства чтения изменения по сравнению с соответ-
ствующими правилами для ИЬЯ выделены с помощью прямоугольников: | выделение! .
4.2 Функция расширения
Как и в случае ИЬЯ, мы определим функцию ехр расширения состояния системы переходов до терма. В данном случае, по сравнению с системой переходов для ИЬЯ, добавляется лишь одно правило — (20).
получается
Теорема 3. Полная головная линейная редукция завершается тогда и только тогда, когда терм имеет нормальную форму. Более того, если М — некоторый терм,
/"та!
::= (И'; Г'; Л') — конечное состояние системы переходов полной головной линейной редукции для терма М, обозначим за Иехр расширение состояния , тогда:
1. Иехр есть И' за исключением вычеркнутых поддеревьев;
2. Иехр не содержит редексов;
3. И ехр является нормальной формой терма М.
Доказательство. Заметим, что правила [БУаг-*] не могут изменить расширение состояния системы переходов. Следовательно, доказательство корректности СИЬЯ является прямым следствием корректности ИЬЯ (см. следствия к теореме 2), а значит, полная головная линейная редукция завершается тогда и только тогда, когда завершается полная головная редукция терма,
Рис. 9. Синтаксическое дерево терма
что в свою очередь эквивалентно конечности дерева Бёма, представляющего входной терм, а значит, и эквивалентно существованию нормальной формы входного терма. Иными словами, полная головная линейная редукция завершается тогда и только
тогда, когда у входного терма существует нормальная форма. ■
Далее мы рассмотрим пример применения системы переходов для головной линейной и полной головной линейной редукций соответственно на примере терма N Р Я, где
Для наглядности в нашем примере термы ского дерева. Синтаксическое дерево терма будут представляться частью их синтаксиче- ( Р Я) можетбытьнайденонарис.9.
Система переходов HLR для терма (ТУ Р Я)
;Г2;
ь ; г2; [(у, Г2)]) { Ь . г2. [(Л6> (у> Га)]) А
@в
А/г
I
Аг
I
@4
@1
А/
I
Ау
@7
/ N
@2
/ Ч
А/ Ад
1 I
А у х
I
@7
/ N
Ад @9 • • •
\
@9 ' \ @8 У
АЬ
Ах I
@з ' \ @2 а
/ N
\х .. ■ И. Ад
/ \
А/
I
А У
I
@7 / \ / @9 / \ @8 У / \ 9 А Ь I
Ь
@и / \ У Ап
Рис. 10. Псевдоголовная нормальная форма (дИп) терма ТРЯ
Замечание. Результатом головной являются частью qhn). Таким образом,
линейной редукции является первый результатом головной линейной редук-
компонент конечного состояния системы ции является терм, представленный на
переходов (NB: вычеркнутые элементы рис. 10.
Система переходов для СИЬИ для терма )
I
@9
/ N
@8 / \
9 ХЪ @ I / Ь I
@5 @8
' \ / \
!и а 9 \Ъ
\ 1
Хп Ь
I
п
[(Лп, []),(«, Г2)]> (
/ ч
@5
' \
@п а / \ 9 Хп I
п
ГФ / т^ \1\ [Ьат — Nоп—ЕИт]
[Ь, (а, I 2Л/
@8 @5 @8 @5
/ \ ' \ / \ / \
д ХЪ @ц а 9 ХЪ @и «
1 / \ 1 / \
Ь 9 Хп ь 9 Хп
{ й ; []; [$,(«, Г2)]> ["Аг-21{ п ;Г2;[]) л
Заметим, что вплоть до первого применения одного из правил [БУаг-*] система переходов для полной головной линейной редукции в точности повторяет шаги системы переходов для головной линейной редукции, поэтому мы просто продолжим построение нашего примера, начиная с конечного состояния системы переходов для головной линейной редукции.
Напомним, что результатом полной головной линейной редукции является первый компонент конечного состояния системы переходов, в котором все вычеркнутые вершины удалены:
Заключение
Головная линейная редукция является основой для различных подходов к вычислениям [16, 20—25], в том числе и игровой семантики, из которой естественным образом вытекает процедура нормализации термов простого типизированного лямбда-исчисления [1]. Обобщение этого подхода до бестипового лямбда-исчисления позволяет определить новый поход к вычислениям — трассирующую нормализацию [1, 6].
В статье приведена формализация понятия головной линейной редукции для нети-пизированного лямбда-исчисления в виде системы переходов, формально показана её корректность относительно головной редукции, впервые введено понятие полной головной линейной редукции, являющейся истинным обобщением головной линейной редукции, формализованное в виде системы переходов, а также показано, что последняя является эффективной редуцирующей стратегией, что является первым шагом в формальном доказательстве корректности трассирующей нормализации.
СПИСОК ЛИТЕРАТУРЫ
1. Ong C.-H. Luke Normalisation by Traversals. CoRR, abs/1511.02629 // URL: http://arxiv.org/ abs/1511.02629, 2015.
2. de Bruijn N.G. Lambda Calculus Notation with Nameless Dummies: A Tool for Automatic Formula Manipulation, with Application to the Church-Rosser Theorem // Indagationes Mathe-maticae. Elsevier, 1972. No. 34. Pp. 381-392.
3. Danos V., Regnier L. Head linear reduction. Unpublished, 2004.
4. Danos V., Herbelin H., Regnier L. Game semantics and abstract machines // Proc. of the 11th Annual IEEE Symp. on Logic in Computer Science. IEEE Computer Society, Washington, USA, 1996. 394 p.
5. Barendregt H.P. The lambda calculus: its syntax and semantics. Studies in logic and the foundations of mathematics. North-Holland, Amsterdam, New-York, Oxford, 1981.
6. Berezun D., Jones N.D. Compiling untyped lambda calculus to lower-level code by game semantics and partial evaluation (invited paper) // Proc. of the 2017 ACM SIGPLAN Workshop on Partial Evaluation and Program Manipulation. ACM, NY, USA, 2017. Pp. 1-11.
7. Sestoft P. Demonstrating lambda calculus re-
duction // The Essence of Computation. SpringerVerlag New York, Inc., 2002. Pp. 420-435.
8. Plotkin G.D. LCF considered as a programming language // Theory of Computer Science. 1977. No. 5(3). Pp. 223-255.
9. Keller R.M. Formal Verification of Parallel Programs // Communications of the ACM. 1976. Vol. 19. No. 7. Pp. 371-384.
10. Pierce B.C. Types and Programming Languages. The MIT Press, 2002.
11. Pierce B.C. Advanced Topics in Types and Programming Languages. The MIT Press, 2004.
12. Blum W. The safe lambda calculus. University of Oxford, UK, 2009.
13. Wadsworth Ch.P. Semantics and Pragmatics of the Lambda-Calculus. Oxford University, 1971.
14. François-Régis Sinot. Complete laziness: a natural semantics // Electr. Notes Theor. Comput. Sci. 2008. No. 204. Pp. 129-145.
15. Launchcbury J. A natural semantics for lazy evaluation // In Conf. Record of the Wentieth Annual ACM SIGPLAN-SIGACT Symp. on Principles of Programming Languages. 1993. Pp. 144-154.
16. Jean-Jacques Levy. Optimal reductions in the lambda-calculus // To H.B. Curry: Essays on Combinatory Logic, Lambda Caclulus and Formal-
ism. Academic Press, 1980.
17. Lamping J. An algorithm for optimal lambda calculus reduction // Proc. of the 17th ACM SIGPLAN-SIGACT Symp. on Principles of Programming Languages. ACM, 1990. Pp. 16—30.
18. Shivers O., Wand M. Bottom-up beta-reduction: Uplinks and lambda-dags // Programming Languages and Systems. 14th European Symp. on Programming. 2005. Pp. 217—232.
19. Kees-Lan can de Looij Vincent van Oostrom, Mariln Zwitserlood. Lambdascope another optimal implementation of the lambda-calculus // Workshop on Algebra and Logic on Programming Systems. 2004.
20. Mascari G., Pedicini M. Head Linear Reduction and Pure Proof Net Extraction // Theor. Comput. Sci. 1994. Vol. 135. No. 1. Pp. 111-137.
21. Baillot P., Pedicini M. Elementary Complexity and Geometry of Interaction // Fundam. Inf. 2001. Vol. 45. No. 1-2. Pp. 1-31.
22. Abramsky S., McCusker G. Game semantics. In Computational Logic // Proc. of the 1997
Marktoberdorf Summer School. Springer Verlag,
1999. Pp. 1-56.
23. Hyland J.M.E., Luke Ong C.-H. On full abstraction for PCF: I, II, and III // Inf. Comput.
2000. Vol. 163(2). Pp. 285-408.
24. Ker A.D., Nickau H., Ong C.-H. Luke Innocent game models of untyped lambda-calculus // Theor. Comput. Sci. 2002. Vol. 272(1-2). Pp. 247-292.
25. Blum W., Ong C.-H. Luke. A concrete presentation of game semantics // Galop 2008: Games for Logic and Programming Languages. 2008.
26. Abramsky S., Ong C.-H. Luke. Full abstraction in the lazy lambda calculus // Inf. Comput. 1993. Vol. 105(2). Pp. 159-267.
27. Ker A.D., Nickau H., Ong C.-H. Luke A Universal Innocent Game Model for the Böhm Tree Lambda Theory // Computer Science Logic, 13th Internat. Workshop, 8th Annual Conf. of the EACSL. Madrid, Spain, 1999. Pp. 405-419.
28. Gérard Huet. Regular Böhm Trees // Math. Struct. in Comp. Science. 1998. No. 8. Pp. 671-680.
Статья поступила в редакцию 22.06.2017
REFERENCES
1. Ong C.-H. Luke Normalisation by Traversals. CoRR, abs/1511.02629. Available: http://arxiv.org/ abs/1511.02629, 2015.
2. de Bruijn N.G. Lambda Calculus Notation with Nameless Dummies: A Tool for Automatic Formula Manipulation, with Application to the Church-Rosser Theorem. Indagationes Mathemati-ca. Elsevier, 1972, No. 34, Pp. 381-392.
3. Danos V., Regnier L. Head linear reduction. Unpublished, 2004.
4. Danos V., Herbelin H., Regnier L. Game semantics and abstract machines. Proceedings of the 11th Annual IEEE Symposium on Logic in Computer Science. IEEE Computer Society, Washington, DC, USA, 1996, 394 p.
5. Barendregt H.P. The lambda calculus: its syntax and semantics. Studies in logic and the foundations of mathematics. North-Holland, Amsterdam, New-York, Oxford, 1981.
6. Berezun D., Jones N.D. Compiling untyped lambda calculus to lower-level code by game semantics and partial evaluation (invited paper). Proceedings of the 2017 ACM SIGPLAN Workshop on Partial Evaluation and Program Manipulation. ACM, NY, USA, 2017, Pp. 1-11.
7. Sestoft P. Demonstrating lambda calculus reduction. The Essence of Computation. Springer-Verlag New York, Inc., 2002, Pp. 420-435.
8. Plotkin G.D. LCF considered as a programming language. Theory of Computer Science, 1977,
No. 5(3), Pp. 223-255.
9. Keller R.M. Formal Verification of Parallel Programs. Communications of the ACM, 1976, Vol. 19, No. 7, Pp. 371-384.
10. Pierce B.C. Types and Programming Languages. The MIT Press, 2002.
11. Pierce B.C. Advanced Topics in Types and Programming Languages. The MIT Press, 2004.
12. Blum W. The safe lambda calculus. University of Oxford, UK, 2009.
13. Wadsworth Ch.P. Semantics and Pragmatics of the Lambda-Calculus. Oxford University, 1971.
14. François-Régis Sinot. Complete laziness: a natural semantics. Electr. Notes Theor. Comput. Sci., 2008, No. 204, Pp. 129-145.
15. Launchcbury J. A natural semantics for lazy evaluation. Conference Record of the Wentieth Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, 1993, Pp. 144-154.
16. Jean-Jacques Levy. Optimal reductions in the lambda-calculus. To H.B. Curry: Essays on Combinatory Logic, Lambda Caclulus and Formalism. Academic Press, 1980.
17. Lamping J. An algorithm for optimal lambda calculus reduction. Proceedings of the 17th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages. ACM, 1990, Pp. 16-30.
18. Shivers O., Wand M. Bottom-up beta-reduction: Uplinks and lambda-dags. Programming Languages and Systems, 14th European Symposium
on Programming, 2005, Pp. 217—232.
19. Kees-Lan can de Looij Vincent van Oostrom, Marita Zwitserlood. Lambdascope another optimal implementation of the lambda-calculus. Workshop on Algebra and Logic on Programming Systems, 2004.
20. Mascari G., Pedicini M. Head Linear Reduction and Pure Proof Net Extraction. Theor. Comput. Sci, 1994, Vol. 135, No. 1, Pp. 111-137.
21. Baillot P., Pedicini M. Elementary Complexity and Geometry of Interaction. Fundam. Inf., 2001, Vol. 45, No. 1-2, Pp. 1-31.
22. Abramsky S., McCusker G. Game semantics. In Computational Logic. Proceedings of the 1997 Marktoberdorf Summer School. Springer Verlag, 1999. Pp. 1-56.
23. Hyland J.M.E., Luke Ong C.-H. On full abstraction for PCF: I, II, and III. Inf. Comput., 2000,
Received 22.06.2017
Vol. 163(2), Pp. 285-408.
24. Ker A.D., Nickau H., Ong C.-H. Luke
Innocent game models of untyped lambda-calculus. Theor. Comput. Sci., 2002, Vol. 272(1-2), Pp. 247-292.
25. Blum W., Ong C.-H. Luke. A concrete presentation of game semantics. Galop 2008: Games for Logic and Programming Languages, 2008.
26. Abramsky S., Ong C.-H. Luke. Full abstraction in the lazy lambda calculus. Inf. Comput., 1993, Vol. 105(2), Pp. 159-267.
27. Ker A.D., Nickau H., Ong C.-H. Luke A Universal Innocent Game Model for the Böhm Tree Lambda Theory. Computer Science Logic, 13th International Workshop, 8th Annual Conference of the EACSL, Madrid, Spain, 1999, Pp. 405-419.
28. Gérard Huet. Regular Böhm Trees. Math. Struct. in Comp. Science, 1998, No. 8, Pp. 671-680.
СВЕДЕНИЯ ОБ АВТОРАХ / THE AuTHORS
Березун Даниил Андреевич Berezun Daniil A.
E-mail: d.berezun@2009.spbu.ru
© Санкт-Петербургский политехнический университет Петра Великого, 2017