МАТЕМАТИКА

УДК 519.68:510

С. А. Аветисян

О представлении бестиповых l-термов помеченными бинарными
деревьями

(Представлено академиком Н.У. Аракеляном 2/III 2004)

   1. Используемые определения (см. [1, 2]). Зафиксируем счетное множество переменных V. Множество термов L является наименьшим множеством, удовлетворяющим следующим условиям:
   1) если x О V, то x О L;
   2) если t1,t2 О L, то (t1t2) О L;
   3) если x О V и t О L, то (lxt) О L.
   Введем сокращенную запись термов: терм (ј(t1t2)јtk), где ti О L, i=1,ј,k, k > 1, условимся обозначать t1t2јtk; терм (lx1(lx2(ј(lxmt)ј), где xj О V, t О L, условимся обозначать lx1x2јxm.t, j=1,ј,m, m > 0.
   Традиционным образом вводятся понятия свободного и связанного вхождения переменной в терм, понятие свободной переменной терма.
   Через t[x1,ј,xm] условимся обозначать терм t с указанием интересующих нас попарно различных переменных x1,ј,xm, m і 1. Через t[t1,ј,tm] обозначим терм, полученный в результате одновременной подстановки термов t1,ј,tm в терм t вместо всех свободных вхождений переменных x1,ј,xm соответственно.
   Термы t1 и t2 назовем конгруэнтными (обозначим t1 є t2), если один терм можно получить из другого переименованием связанных переменных. Далее мы не будем отличать конгруэнтные термы.
   Напомним понятие b-редукции:
b = {((lx.t[x])tў, t[tў])|t, tў О L,x О V}.

   Одношаговая b-редукция (®b) определяется обычным образом. Напомним, что терм (lx.t[x])tў называется b-редексом (далее просто редексом), а терм t[tў] - его сверткой. Терм, не содержащий редексов, называется b-нормальной формой (далее просто нормальной формой). Терм вида lx1јxk.xt1јtm, где x,xi О V, tj О L, i=1,ј,k, j=1,ј,m, k і 0, m і 0, называется головной нормальной формой.

   2. Представление терма. Любой терм t О L можно представить в виде помеченного бинарного дерева, нетерминальные узлы которого представляют собой операции аппликации или абстракции, терминальные узлы (листья) - переменные терма. Под t-деревом будем понимать дерево, соответствующее терму t, которое будем отождествлять с самим термом t. Дадим рекурсивное определение t-дерева.
   - Любой переменной x О V соответствует дерево, состоящее из одного узла. Отметим ее переменной x. Такой узел назовем v-узлом.
   - Если t1, t2 О L, то терму (t1t2) соответствует дерево, корень которого помечен символом @. Левое поддерево является t1-деревом, правое поддерево - t2-деревом. Корень (t1t2)-дерева будем называть @-узлом, t1-дерево - левым поддеревом @-узла, t2-дерево - правым поддеревом @-узла. (t1t2)-дерево имеет следующий вид:

   - Если t О L, x О V, то терму (lx.t) соответствует дерево, корень которого помечается символом l и называется l-узлом. Левое поддерево представляется листом, помеченным переменной x. Левое поддерево будем называть переменной l-узла. Правое поддерево является t-деревом. Правое поддерево будем называть телом l-узла. (lx.t)-дерево имеет следующий вид:

   Из определения следует, что t-дерево содержит узлы трех типов: v-узел, @-узел, l-узел. Например, дерево, соответствующее терму ((x1x2)(lx3.x3x4)), представлено на рис. 1.
   Каждому терму t, а, следовательно, и t-дереву, соответствует множество свободных переменных. В описанном выше примере (рис. 1) переменные x1, x2, x4 являются свободными.


Рис.1. Представление терма ((x1x2)(lx3.x3x4)) в виде помеченного бинарного дерева

   3. Представление головной нормальной формы. Любой терм t имеет следующий вид:
lx1x2јxn.tўt1t2јtk,

где tў - переменная, если k=0, и tў - переменная, либо терм вида lx.tўў, если k > 0, x,xi О V, i=1,ј,n, tў,tўў,tj О L, j=1,ј,k, k і 0, n і 0. Соответствующее t-дерево представлено на рис. 2.
   Под левым гребнем t-дерева будем понимать путь, состоящий из @-узлов, встречающихся при спуске по левым поддеревьям @-узлов начиная с первого (рис. 2). Если в представлении t-дерева tў представляет собой v-узел, то такому t-дереву (рис. 3) соответствует головная нормальная форма, а соответствующий терм имеет следующий вид:
lx1x2јxn.xt1t2јtk,

где x,xi О V, tj О L, i=1,ј,n, j=1,ј,k, k,n і 0.
   t-дерево, соответствующее головной нормальной форме, характеризуется v-узлом, которому соответствует переменная головной нормальной формы x, и @-узлами, правые поддеревья которых являются t1-деревом, t2-деревом, ..., tk-деревом соответственно (рис. 3). Описанные @-узлы являются узлами левого гребня t-дерева. Если n=0, то отсутствуют лидирующие (корневые) l-узлы, если k=0, то отсутствуют @-узлы левого гребня t-дерева.


Рис.2. Общий вид t-дерева


Рис.3. t-дерево, соответствующее головной нормальной форме lx1x2јxn.xt1t2јtk.

   4. Преобразование t-дерева в tў-дерево, соответствующее одношаговой b-редукции. Рассмотрим сначала получение свертки редекса. Редексом является терм (lx.t1[x])t2, где t1 - тело редекса, t2 - аргумент редекса, x - переменная редекса. Дерево редекса имеет следующий вид:

где t2-дерево соответствует аргументу редекса, t1-дерево соответствует телу редекса. Под корнем редекса будем понимать корневую вершину дерева редекса.

    Алгоритм Red1 преобразования дерева редекса в дерево свертки состоит из следующих шагов:
   1) выделить t2-дерево, соответствующее аргументу редекса;
   2) заменить каждый лист, представляющий свободное вхождение переменной x в t1-дереве, на t2-дерево. Преобразованное t1-дерево соответствует свертке;
   3) за корневую вершину дерева свертки принять корневую вершину преобразованного t1-дерева;
   4) удалить все не используемые в преобразованном t1-дереве узлы.

   При замене переменной в теле редекса на аргумент редекса свободная переменная аргумента редекса может связаться. При обнаружении связывания осуществляется переименование связанной переменной тела редекса на новую переменную. Пример получения свертки (lx1.(x1x3) )x4 представлен на рис. 4.

    Алгоритм Red преобразования t-дерева в tў-дерево, согласно одношаговой b-редукции, состоит из следующих шагов:
   1. найти @-узел, который является корнем редекса. Если соответствующий @-узел найден, то отметить его;
   2. рассмотреть tўў-дерево, корнем которого является отмеченный @-узел;
   3. преобразовать tўў-дерево в дерево-свертку согласно алгоритму Red1;
   4. заменить поддерево, корнем которого является отмеченный @-узел, на преобразованное tўў-дерево-свертку.

Рис.4. Преобразование дерева-редекса в дерево-свертку для редекса (lx1.(x1 x3) )x4.

   Утверждение 1. Пусть терм t не является нормальной формой, тогда алгоритм Red переводит t-дерево в tў-дерево так, что t®b tў.

   5. Преобразование t-дерева в tў-дерево, соответствующее подстановке. Пусть t є t[x1,ј,xm], где x1,ј,xm попарно различные переменные, m і 1. Пусть tў є t[t1,ј,tm], где t1,ј,tm - термы.

    Алгоритм Sub преобразования t-дерева в tў-дерево, соответствующее подстановке, состоит из следующих шагов:
   1. в t-дереве найти и отметить v-узлы, соответствующие свободным вхождениям переменных x1,ј,xm;
   2. заменить каждый отмеченный v-узел, соответствующий свободному вхождению переменной xi, на ti-дерево, i=1,ј,m.

   Очевидно, что при подстановке возникает проблема связывания свободных переменных. При обнаружении связывания происходит переименование переменных l-узлов. Переименование переменных l-узлов заключается в переименовании всех свободных вхождений данной переменной в теле l-узла.

   Утверждение 2. Пусть t,t1,ј,tm - термы, x1,ј,xm - переменные и t є t[x1,ј,xm], m і 1. Тогда алгоритм Sub переводит t-дерево в tў-дерево так, что tў є t[t1,ј,tm].

   Ереванский научно-исследовательский институт
   автоматизированных систем управления


Литература

     1. Barendregt  H.P.  The lambda calculus, its syntax and semantics. Amsterdam. North Holland. 1981 (рус. пер. Барендрегт Х. Ламбда-исчисление, его синтаксис и семантика. М. Мир. 1985. 606 с.).
     2. Нигиян С.А., Аветисян С.А.  - Программирование. 2002. N3. С. 5-14 (англ. пер. Nigiyan S.A., Avetisyan S.A. - Programming and Computer Software. 2002. V. 28. N3. P. 119-126).