Унификация программ
ТА. Новикова, В.А.Захаров {ХатаеЩШаИ. г и} 1zakhfxp.cs. пт/, яи}
Аннотация. Унифицировать два алгебраических выражения и означает отыскать такую подстановку 0 термов вместо переменных этих выражений, чтобы оба терма и 1^0 имели одинаковое значение. Задачу унификации можно распространить и на программы. Унифицировать две программы 7ГХ и 7Гп означает отыскать такие цепочки присваиваний p, :x, :=t,■x2 ■=t2■...xn :=tn и р2 : у, := ^;х2 := з2;...хт := эт, для
которых композиции программ Р{,Л\ и р,; 7Г-, эквивалентны (т.е. вычисляют одну и ту же функцию). В данной работе в качестве эквивалентности программ рассматривается отношение логико-термальная эквивалентности, одно из наиболее слабых разрешимых отношений эквивалентности программ, аппроксимирующих отношение функциональной эквивалентности. Опираясь на алгоритм проверки логико-термальной эквивалентности программ, мы предлагаем полиномиальную по времени процедуру вычисления наиболее общего унификатора (р], р,) для произвольной пары (тт,, ТС~,) последовательных императивных программ относительно логико-термальной эквивалентности.
Ключевые слова: программа, логико-термальная эквивалентность программ,
подстановка, унификация, сложность.
1. Введение
Задача унификации выражений (формул, атомов, термов) языка предикатов первого порядка состоит в том, чтобы для заданной пары выражений Е1(х1,.. ,,Хп) и 1С-, (х,,..., X п) отыскать такую подстановку
в = {х1 хп /1п}, для которой выражения Л-,(х,,...,Хп)в и
Ег (х1,..., х становятся синтаксически одинаковыми. Впервые задачу унификации исследовал Дж. Робинсон в статье [1] при разработке метода
резолюций для систем автоматического доказательства теорем. Метод резолюций послужил отправной точкой для разработки концепции логического программирования, и алгоритмы унификации стали основным средством вычисления логических программ. За прошедшие годы задача унификации была детально исследована. В частности, были разработаны эффективные алгоритмы унификации [2-4], имеющие почти линейную сложность, а также были найдены подходящие структуры данных для практической реализации этих алгоритмов.
Наряду с задачей синтаксической унификации в алгебре свободных термов изучалась также и более общая задача семантической унификации (или, иначе, Е-унификации). В алгебре термов можно ввести определяющие тождества (например, законы коммутативности, ассоциативности, дистрибутивности и др.) для некоторых функций, и индуцировать тем самым отношение конгруэнтности на множестве термов. Тогда задача семантической унификации состоит в том, чтобы для заданной пары термов Ег и Е2 отыскать такую подстановку 0. для которой термы Е20 и Ех0
эквивалентны. Задача семантической унификации исследовалась для алгебраических операций, подчиняющихся законам ассоциативности и коммутативности [5-7]. Некоторые из методов, предложенных в этих статьях, сводят задачу унификации к решению систем диофантовых уравнений. Было установлено также, что задача унификации выражений в логиках высокого порядка алгоритмически неразрешима (см. [8]). С методами и результатами решения задачи унификации термов и формул можно ознакомиться в обзорной статье [9].
Алгебраический терм является, в определенном смысле, простейшей разновидностью вычислительных программ, при построении которых используется только операция композиции. Более сложные программы конструируются при помощи более широкого набора операций. Применительно к вычислительным императивным программам задачу унификации можно сформулировать в такой постановке. Предположим, что на множестве программ введено некоторое отношение эквивалентности и выделен некоторый класс «простых» программ П. Тогда для произвольной заданной пары программ 7ГХ и ТС2 требуется выяснить, существует ли две такие пары программ (;г^п,;г") и {.л'оШ-,л"ои() из класса П, для которой
последовательные композиции программ ж\п\ж1\'п;'0и1 и тг''п; 7Г2; ж"оШ
эквивалентны. В качестве отношения эквивалентности разумно выбрать отношение функциональной эквивалентности программ или любую его аппроксимацию; в этом случае из эквивалентности программ будет следовать равенство вычисляемых этими программами функций. Пары программ и (тг'а111, ж"оШ) в постановке задачи унификации могут мыслиться
как интерфейсы, преобразующие формат представления входных и выходных данных. Можно предполагать, что преобразования такого рода выполняются программами, имеющими сравнительно простое устройство. Тогда
эквивалентность композиций ж\п\жх\ж'0и1 и ж"п,ж2,ж"0ш означает, что
программы жх и ж2 вычисляют схожие функции, и отношение унифицируемости программ является одной из возможных формализаций отношения подобия, обобщающего отношение эквивалентности программ. Различные отношения подобия программ находит применение в решении задач реорганизации (рефакторинга) программ (см. [10]). В частности, актуальными задачами являются проблемы формализации понятия программного клона и эффективного выделения клонов [11]. Содержательно, программный клон - это совокупность фрагментов программы, осуществляющих «похожие» преобразования данных. Корректное определение программного клона, сопровождаемое эффективным методом обнаружения клонов, позволяет проводить упрощения программного код путем замены нескольких больших фрагментов программы вызовом одной и той же процедуры или макроса [12]. Одно из возможных определений клона можно сформулировать на основе отношения унифицируемости: клоном
называется совокупность фрагментов программы ж0,жг,...,жп, обладающая
следующим свойством - любая пара программ Ж0,Ж{, 1 < / < п,
унифицируема, причем унифицирующими интерфейсами служат такие пары программ {ж'т, ж"п ) и (ж'ш, ж"ои1), в которых Ж 'т и ж’ш1 - это пустые
программы, вычисляющие тождественные функции. В этом случае при обнаружении клона мы можем ввести в программе новую процедуру РШ)(', телом которой служит фрагмент ж0, а все фрагменты ТТ! , 1 < / < п, заменить вызовом этой процедуры в составе композиций вида ж’1П;са11 РШ)С\ж'пи1, 0 < / < п .
Наиболее важным параметром в формулировке задачи унификации программ является отношение эквивалентности программ. Содержательный смысл задачи унификации требует, чтобы это отношение аппроксимировало отношение функциональной эквивалентности. В то же время, для эффективного решения задачи унификации необходимо, чтобы это выбранное отношение эквивалентности было разрешимым. Обоим требованиям удовлетворяет отношение логико-термальной (л-т) эквивалентности, введенное в статье [13]. Две программы жх и ж2 считаются л-т эквивалентными, если для любой синтаксически допустимой трассы !г' в одной из программ существует такая трасса //'" в другой программе, что в обеих трассах логические условия (предикаты) проверяются в одной и той же
последовательности для одних и тех же наборов значений переменных. Как было установлено в [13], л-т эквивалентность программ влечет их функциональную эквивалентность в любой интерпретации базовых операций и предикатов. В статье [14] показано, что проверку л-т эквивалентности программ можно провести за время, полиномиально зависящее от размеров программ. Еще более быстрый алгоритм проверки л-т эквивалентности программ был предложен в статьях [15,16]. Опираясь на эти результаты, мы покажем, что для одного класса интерфейсов-унификаторов задачу л-т унификации императивных программ также можно решить за полиномиальное время.
Содержание статьи таково. Во втором и третьем разделах мы напомним основные понятия алгебры конечных подстановок [17-18] и теории стандартных схем программ [20], которые понадобятся для формулировки и описания решения задачи л-т унификации программ. В четвертом разделе приведено упрощенное описание алгоритма вычисления наиболее общего л-т унификатора программ и обоснована его корректность. В пятом разделе показано, каким образом можно улучшить вычислительные качества описанного алгоритма л-т унификации программ, для того чтобы получить полиномиальную верхнюю оценку сложности модифицированного алгоритма. В заключение обсуждаются перспективы дальнейшего развития предложенного нами метода для решения более общих случаев проблемы унификации программ.
2. Алгебра конечных подстановок
Для заданных множеств переменных Var, функциональных символов F и предикатных символов Р обозначим записью Term(F,Var) множество термов, а записью Atom(I\ /', Var ) множество атомарных формул (атомов). Для каждого терма t обозначим записью Vart множество переменных, входящих в терм t.
Для представления термов будем использовать размеченные ациклические графы (АОГ). Рассмотрим произвольный конечный ациклический ориентированный граф G = (V, Е) с множеством вершин V и множеством
дуг Е. Размером | G | графа G будем считать суммарное количество его вершин и дуг. Разметкой АОГ G назовем отображение, которое приписывает каждой вершине графа V символ sv, который является либо
функциональным символом из множества F , либо переменной из множества Var, а каждой дуге - некоторое натуральное число. Правильной разметкой АОГ G назовем разметку, удовлетворяющую следующим двум требованиям:
• если из вершины V не исходит ни одной дуги, то эта вершина помечена либо константой, либо переменной;
• если из вершины V исходят п дуг, где п > 0, то эта вершина помечена функциональным символом местности п, а все исходящие дуги помечены попарно различными числами из множества
{1,2,...,и}.
Если в правильно помеченном АОГ G из вершины V в вершину и ведет дуга, помеченная числом т , то вершину и будем называть т -наследником вершины V. Каждой вершине V правильно размеченного АОГ G можно однозначно сопоставить терм t , который реализуется в вершине V, руководствуясь следующими правилами:
• если из вершины V не исходит ни одной дуги, то в этой вершине реализуется терм sv;
• если из вершины V исходят п дуг, ведущие в вершины и1,и2,...,ип, и при этом для любого /', 1 < / < /7, дуга, ведущая в вершину ui, помечена натуральным числом /', то в вершине V реализуется терм
^V^ul 5 ^И2 ’-’ ^ип ) '
Правильно размеченный АОГ G реализует конечное множество термов Г, Т с: Term(l'\ Var), если для каждого терма /, I е / , в графе G
существует вершина V, для которой tv = t.
АОГ G , реализующий множество термов Т, называется приведенным, если он удовлетворяет двум требованиям:
• в каждой вершине АОГ G реализуется некоторый подтерм какого-либо терма из множества Т;
• в разных вершинах АОГ G реализуются разные термы.
Для построения приведенного АОГ из произвольного графового представления множеств термов нужно выполнить специальную процедуру редукции, которая за время, линейное относительно размера исходного графового представления строит приведенный АОГ, реализующий то же самое множество термов (см. [16]).
Пусть X и Y - два множества переменных. Подстановкой назовем всякое отображение в : X —> Term(F, Y), сопоставляющее каждой переменной из множества X некоторый терм. Множество всех таких подстановок
обозначим записью Subst(X,F,Y). Если X = {х1зх2,...,хи} и 6(xi) = /( для всех /', 1 < i < п, то подстановка 6 однозначно
определяется множеством (списком) пар {Xj I tx ,х21 t2,...,xn I tn}. Запись
П
Varg будет использоваться для обозначения множества переменных U Vart ,
i=1 ‘
входящих в состав всех термов подстановки 0. Результатом применения подстановки 0 к терму t является терм tO, получающийся одновременной заменой в t каждой переменной х. термом d(xi). Композиция Ol] подстановок в е Subst(X,F,Y) , 7) g Subsi(Y, F, Z) - это подстановка из множества Subst(X,F, Z), которая определяется равенством 9г/(х) = (9(х))г/ для каждой переменной X, X е X. Всякая биекция р :Y —> Y называется переименованием. Подстановки 0] и д2 считаются эквивалентными (и это отношение обозначается записью 0] ~ д2), если для некоторого переименования р выполняется равенство д2 — дхр .
Размеченные АОГ можно использовать также и для реализации подстановок. Пусть заданы подстановка в = {xlltl,x2lt2,...,xnltn) из множества
Subst(X,F,Y) и АОГ G , реализующий множество термов {tx,t2,...,tn}. Сопоставим каяедой переменной х., 1 < i < п, ту вершину V графа G , в которой реализуется соответствующий терм tt; переменную Хг будем называть заголовком вершины V. Размеченный таким образом АОГ G будем называть графовой реализацией подстановки 0 и использовать запись И для обозначения размера этого графа.
На множестве подстановок Subst(X,F,Y) определим отношения предпорядка -<: для пары подстановок в], в2 отношение в] -< 62
выполняется, если есть такая подстановка Т) е Subst(Y,F,Y), что 02 = 0] I]. В этом случае подстановку 0] будем называть прототипом подстановки д2, подстановку д2 - примером подстановки 0] . Подстановку 7] будем называть пополнением прототипа дх до примера д2 и использовать
02
для ее обозначения запись —.
в,
Прототип
в1,в1 е Т7, X и 7),
подстановки
д2,62 £&Ы(Х,^Ди7)б назовем редуцированным, если для любой переменной (Е Ус//'^ Г) V, существует такая переменная X, для которой
0] (х) = у . Наиболее специальной редукцией подстановки д2 называется такая ее редукция 0Х, которая удовлетворяет отношению в'<вх для любой
подстановки 0 существует единственная наиболее специальная редукция тяг (в) (с точностью до переименования переменных); тяг (в) может быть построена за время, линейное относительно размера графового представления подстановки 0.
Отношение предпорядка -< позволяет ввести на множестве подстановок операции точной верхней грани 1иЬ(01,02) и точной нижней грани $Ь{вх,в2) . Первая из них вычисляет наиболее общий пример подстановок Эх и д2 и позволяет решать задачу унификации в свободной алгебре термов. Из описания алгоритма унификации термов [3] следует, что |1иВД, А )| = 0(131 + 1^1) И СЛОЖНОСТЬ вычисления 1иЬ(£?],£?2)
пропорциональна максимальному из размеров подстановок | и р21. Вторая
операция вычисляет наименее общий прототип подстановок Эх и 62 и называется антиунификацией. Чтобы операция антиунификации была всюду определенной, к множеству подстановок добавлена в качестве наибольшего элемента специальную мнимую подстановку Т, удовлетворяющую
равенствам тО = От = т и Г = 12т для любой подстановки 0 и термов
¿2. В статье [20] показано, что сложность вычисления , д2) и размер
оцениваются сверху величиной 0(|#[|х|#2|). Такая сложность
вычисления точной нижней грани подстановок затрудняет использование этой операции в итеративных алгоритмах статического анализа программ (см. [18]). Для преодоления этой трудности в статье [16] была предложена комбинированная операция редуцированной антиунификации подстановок
= №(^,^2)). Как было установлено в [16], размер
редуцированной антиунификации Ох -У- 02 и сложность ее вычисления
пропорциональны максимальному из размеров
Для решения задачи унификации программ нам понадобится проводить унификацию атомов. Для заданного множества пар атомов
редукции 8' подстановки 02. В статье [16] показано, что для каждой
из класса А 1от(Р, /', X) унификатором этого множества называется подстановка £?, 0 е БиЬз^Х ,Р ,Х) , для которой равенство А'9 = А” в выполняется для любой пары атомов (А', А") из множества Н . Унификатор 0 множества пар атомов Н называется наиболее общим унификатором, если для любого унификатора в' множества Н выполняется соотношение д -< 8'. Задача унификации конечного множества пар атомов решается за время, линейное относительно суммарного размера атомов в множестве Н (см. [3,4]).
3. Модель последовательных императивных программ
Мы рассматриваем модель последовательных императивных программ, заимствованную из работ [21,22] и адаптированную для работы с подстановками. Подробное описание этой модели приведено в статье [15].
Пусть задано некоторое конечное множество переменных X. Модель программы представляет собой размеченный ориентированный граф -Тг(Х).
Каждой вершине V этого графа приписана атомарная формула А[у] из множества А1от(Р,Р,Х). Из каждой вершины исходят две дуги, одна из которых помечена символом 0 , а другая - символом 1. Кроме того, каяедой дуге, ведущей в графе 7Г(Х) из вершины и в вершину V, приписана подстановка 0\иу\ из множества /' , X). Одна из вершин \!и]
графа 7г(Х) особо выделена в качестве входа в программу, а другая вершина \’ои! играет роль выхода из программы. Предполагается также, что через каждую вершину графа Т[{Х) проходит некоторый маршрут, ведущий из входа программы в ее выход.
Пусть задан некоторый маршрут (трасса) из входа в программу 7т(Х) в ее выход
^ = н, >1^ ^ >-у„_, *'■*' >уп,
где сг е {0,1}, в] е Sllbsl(X, /' , X), 1 < /’ < /7 . Тогда последовательность пар
Щос) = (А[у0 ]//0, ох), (Д ^ ]д, сг2),..., (Д ]//пЧ, сг„), (А[уп ]//„ ,1),
где //„ = S и //( = 0¡jLli ! для каждого i, \<i <n, называется логико-термальной историей трассы ОС . Детерминантом программы 7Г(Х) называется множество
Det{jz{X)) = {lth(oc): а - трасса в программе ж(Х) }.
Две программы 7ГХ (X) и 712(X) считаются логико-термально (л-т) эквивалентными, если справедливо равенство ¡.)в1(7Г] (X)) = ¡)el(7T2(X)).
Опишем операцию применения подстановок к программам. Пусть задана программа 7г(Х) и подстановка 0,0 G Subst{X, F, X). Тогда результатом применения подстановки 0 к программе 7Г(Х) является программа 7г(Х)0, которая получается из программы 7г(Х) введением
• новой входной вершины ve, которой приписывается O-местный атом
р0;
• двух дуг, исходящих из ve и ведущих в вершину vin; одна из этих
дуг помечается символом 0 , а другая - символом 1, и каждой из дуг приписывается подстановка 0.
Программу 7г(Х)0 можно истолковывать как вызов процедуры с телом ж(Х), в котором инициализация переменных осуществляется подстановкой
0.
Пусть конечное множество переменных X разбито на два непересекающихся множества X' и X" . Тогда подстановка 0,0 G Subst(X, F, X), называется л-т унификатором программ 7г\Х') и 7t"(X”), если программы 7г'(Х')0 и 7г"(Х")0 являются л-т эквивалентными. Унифицируемость программ означает, что при некоторой инициализации переменных эти программы вычисляют одну и ту же функцию. Л-т унификатор 0 программ 7т'(Х') и 7t'\Xff) называется наиболее общим унификатором (обозначается записью НОУ{7г'{Х'\7г”{Х”У)), если для любого л-т унификатора 0' этих программ выполняется соотношение 0 -< 0'. Задача л-т унификации программ состоит в вычислении НОУ(тт'(Х'), 7т"(Х")).
4. Алгоритм логико-термальной унификации программ
Для решения задачи л-т унификации программ ж'(Х') и 7т"(Х"), так же как и для решения задачи проверки л-т эквивалентности программ, мы воспользуемся графом логически совместных трасс Г\ж\ ж"]. Его устройство таково. Вершинами графа Т[ж', ж"] служат всевозможные пары (и\и"), где и' - вершина программы ж'. а и” - вершина программы к”. Каждой вершине (и\и”) приписывается пара атомов ( A\li'\ A\li"\). которыми были помечены вершины и' и и" в программах к' и ж". Если в программе ж' из вершины и' в вершину v' ведет дуга, помеченная символом <7, О е {0,1} , и
этой дуге приписана подстановка O'= {x[lt[,x'2lt'2,...,x'nlt'n}, а в
программе ж" из вершины и" в вершину Vя ведет дуга, помеченная тем же символом о, и этой дуге приписана подстановка
в” - К/1", х" /1",..., x"m / t"m } , то в графе Г\ж', ж"] из вершины (и\и") в вершину (V, v") ведет дуга с пометкой
0^0" = {x;/t;,x'/t;,...,x:/Cx;/t:,x;/t;,...,x:/t:}.
Для каждого пути
path = (и'п,и;;) —^>(и[,О —^-Ки',и\) * > •••(<-!,К-1) —в-^(.КУ'к) ’
в графе логически совместных трасс Т[ж',ж"~\ запись 6\palh\ будет использоваться для обозначения композиции подстановок 0к--- 02дх, приписанных дугам этого пути.
Полиномиальный по времени алгоритм проверки л-т эквивалентности программ, предложенный в статьях [15,16], основывается на следующем характеристическом свойстве графов логически совместных трасс программ.
Теорема 1 [15]. Программы ж'(Х) и 7г”(Х) л-т эквивалентны в том и
только том случае, когда для любой вершины каждого пути (u,v) графа
логически совместных трасс Т\ж\ ж"] и для любого пути path, ведущего из
начальной вершины (u'm,u"n) в вершину (u,v), выполняется равенство
A[u~$[path\ = A[v]6\path].
Из этой теоремы два важных для решения задачи л-т унификации программ следствия.
Следствие 1. Подстановка Г} является л-т унификатором программ ж’(Х’) и ж"(Х") тогда и только тогда, когда для любой вершины (u,v) графа 464
логически совместных трасс Т\ж\ ж"] и для любого пути path, ведущего из начальной вершины (и[п,ип1П) в вершину (//,I’). выполняется равенство A[u~\e[path\ri = A[v~\e[path~\ri.
Следствие 2. Пусть Н - это множество пар (A[li]6)\paih\, A[v]6)\paih]) для всех вершин (w,v) графа логически совместных трасс Г\ж', ж"] и всех путей path, ведущих в эти вершины. Тогда НОУ{ж\Х'\ж\Х")) = НОУ(Н).
На основании этих следствий мы адаптируем алгоритм проверки л-т эквивалентности, предложенный в статье [16], для вычисления
НОУ{ж'{Х'\ж\Х'')).
Вначале опишем этот алгоритм в упрощенном виде, удобном для доказательства его корректности, а затем покажем, каким образом его можно модифицировать, чтобы достичь полиномиальной по времени трудоемкости.
Алгоритм вычисляет монотонно возрастающую последовательность
подстановок Р0 Р рп из множества Slibsf(X, F, X),
начинающуюся тождественной подстановкой р0. На каждом n-ом этапе его
работы начальная вершина (u'in,u”in) графа Т\тг' ,7г"] помечается
подстановкой рп, и вслед за тем запускается процедура вычисления
стационарной разметки вершин графа Т[ж\ж"] подстановками. По
окончании работы процедуры очередная подстановка рп+1 указанной
последовательности вычисляется путем композиции рп и наиболее общего унификатора некоторого конечного множества пар атомов. Алгоритм завершает работу, когда рп+1 ~ рп.
Процедура вычисления стационарной разметки вершин графа Т[ж\ж"] сопоставляет каяедой вершине (и',и") графа
1) подстановку Г]\и'и”] из множества Slibst(X, /' , X '~.J Y). где
Y = у2,...} - бесконечное множество переменных, отличных от
переменных множества X, и
2) некоторое множество подстановок из класса
Subst(X, F, X).
В начале каждого п-го этапа работы алгоритма, п> 0, вершина (и'ш,и”п) графа Т\ж\ ж"], помечается подстановкой рп, а все остальные вершины графа Т\ж\ ж"] помечаются максимальным в квазирешетке подстановок (Subst(Xr О1 X”, Р, У), -<) элементом т. Кроме того, вершине (и\п,и”^) приписывается множество подстановок 5\и'п, и"п] = {рп }, а всем остальным вершинам (и\и") приписывается пустое множество подстановок 8\и\ип] = 0. Далее выполняется процедура вычисления стационарной разметки вершин графа. Для каждой пары вершин (и\и") и помеченных подстановками г/[и'и"] и и соединенных дугой, которой
приписана подстановка 0, вычисляется подстановка ¡Л — 0Т][и’и"] И //[уЧ’”] . Если не выполняется эквивалентность /и ~ //[уЧ’”] , то вершине (V, V) вместо подстановки Т]\у'у”] приписывается подстановка //, а вместо множества подстановок ^уЧ1”] приписывается множество подстановок 5\у’у"]^>{9А : Л е 5\и’и"]} • Выполнение процедуры продолжается до тех пор, пока в графе Т\ж\ ж”\ не будет построена такая разметка, что для каждой пары вершин (и\и") и (V,\’") выполняется эквивалентность « в?][иги"] 0 .
По завершении процедуры разметки для каждой вершины (и,У) графа Г[л_,1 ж"\ проверяется равенство /1[»]//[»\’] = . Если каждое из
указанных равенств выполняется, то подстановка рп объявляется наиболее общим унификатором программ ж'(Х') и 7г"(Х"). В ином случае вычисляется наиболее общий унификатор
г = НОУ( У [}Ши]А,А{гт)
(и,у)еГА<=8[иу]
Если указанное множество пар атомов неунифицируемо, то объявляется, что программы ж'(Х') и ж"(Х") также не имеют унификатора. В противном
случае вычисляется подстановка рп+1 = рпТ. и алгоритм л-т унификации программ переходит к следующему (п+1)-ому этапу вычисления.
Как было показано в статье [16], процедура вычисления стационарной разметки графа Г\ж', ж"] всегда завершает работу. Покажем, что
последовательность подстановок р0, рх,..., рп,... является конечной.
Лемма 1. Предположим, что на n-ом этапе работы алгоритма вершине (V, v") приписано множество подстановок 5’[v,vff]. Тогда для любой подстановки Л, Л G 5'[v'vff], существует такой путь path, ведущий в графе логически совместных трасс из начальной вершины (и'т,и"п) в вершину (v',v"), для которого выполняется равенство Л = Q\path\pn .
Доказательство. Проводится индукцией по числу шагов работы процедуры вычисления стационарной разметки на n-ом этапе работы алгоритма. □
Лемма 2. Предположим, что на n-ом этапе работы алгоритма вершине (V, v")
приписана подстановка r^y'v"\ и множество подстановок »VflM’"]. Тогда
Г) [vV] = U Л.
А GiS'fvV’]
Доказательство. Проводится индукцией по числу шагов работы процедуры вычисления стационарной разметки. Покажем справедливость индуктивного
перехода. Предположим, что //[уЧ’"] = ü Л , = U л , и пусть
Л GiS'fvV"] ägS[u'u*]
из вершины (и\и”) в вершину (V,v") ведет дуга, которой приписана
подстановка 0. Тогда на основании закона левой дистрибутивности операции композиции подстановок относительно операции редуцированной антиунификации (см. [16]), справедливо равенство 0Т][и’и"]= ü 6Л.
Л&5[и U ]
Поэтому верна цепочка равенств
// = 0?7[wV]U?7[vVff] = ( U 0/l)U( U Л)= U Л.
ägS[u'u"] ägSIVv"] AeS[v'v"]u{&A : AeS[u'u"]}
□
Лемма 3. Пусть p0, px,..., pn, pn+l,... - последовательность подстановок, которую вычисляет описанный алгоритм л-т унификации. Тогда для любого п,п> 0, справедливо соотношение Var(pn+l) a Var(pn) .
Доказательство. Рассмотрим n-ый этап работы алгоритма. Как утверждает лемма 1, для любой вершины (V,vff) каждая подстановка Л, Л G S[v'v"],
представима в виде композиции Л = 6\path\pn для некоторого пути path
в графе Г\ж\ ж”\. Это означает, что VarÄ с: Varp . Если алгоритм л-т
унификации не завершил работу на n-ом этапе, то для некоторой вершины
(и, v) графа Г[7г', п"\ имеет место соотношение /![//]//[т’] ^
Как следует из леммы 2, верно равенство //[уЧ’"] = U Л . В статье [16]
AeS[v'v*]
было установлено, что для любой пары атомов А, В е Atom(P,F,X) и любой пары подстановок Т]Х,Т]2 е Subst(X,F,Y) справедливо соотношение А rjx = Вrjx а Ат]2= Вт]2 <=> А(т]1 II 7]2) = 5(7^ U 7]2) . Отсюда
следует, что для некоторой подстановки Л, Л G 5'[v'vff], выполняется соотношение А[и]Л А[у]Л. Поэтому наиболее общий унификатор Т = НОУ{ |^J А[у]Л)}) отличен от тождественной
(и,У)еГA<=S[uv]
подстановки. Тогда, как видно из описания любого алгоритма л-т унификации (см., например, [4]), множество переменных VcirT является собственным
подмножеством множества переменных Vcir; хотя бы для одной подстановки
Л, Л G 5'[v'vff]. Следовательно, Vcu'r является собственным подмножеством
множества переменных Vcir , и справедливо строгое включение
Рп
Уы'(р„л) = Var(pj) a Var(pn). □
Теорема 2. Алгоритм л-т унификации программ завершает работу для любой пары программ тг\Х) и ж'\Х).
Доказательство. Из леммы 3 следует, что для последовательности подстановок р0, рх,..., рп, рп+1,..., вычисляемой алгоритмом л-т унификации, выполняется цепочка строгих включений
X = Varn з Va/\t з... з Varn з Varn з______________ Поскольку множество
А) А Рп Рп+1 J
переменных X конечно, указанная последовательность подстановок также является конечной. □
Лемма 4. Если алгоритм л-т унификации программ завершает работу, вычислив подстановку рп, то эта подстановка является л-т унификатором программ л'(Х) и л:"(Х).
Доказательство. Как показано в статье [16], если вычислена стационарная разметка графа, и для некоторой вершины (и, v) выполняется равенство /![//]//[ш’] = /![i’]//[m’]. то для любого пути path, ведущего из начальной вершины (и'т, и"ш) в вершину (и, v), выполняется равенство A\u]d\pathi\pn = A\y]d\path\pn. Тогда, согласно следствию 1 из
теоремы 1, успешное завершение работы алгоритма л-т унификации с результатом рп означает, что подстановка рп является л-т унификатором программ ж'(Х) и жп(Х). □
Лемма 5. Если программы К (X) и 7г”(Х) л-т унифицируемы, то алгоритм л-т унификации вычисляет подстановку рп, и при этом
рп<НОУ(ж\Х'\ж\Х")).
Доказательство. Нетрудно заметить, что наиболее общие унификаторы произвольных множеств пар атомов Н ] и Н2 обладают следующими двумя свойствами.
1. Если Н2 - унифицируемое множество пар атомов, и Я,сЯ2, то НОУ(Н]) < НОУ{Н2) ;
2. Если НОУ(Н,) = т, то НОУ(Нг иН2) « НОУ(Нхт^Н2т) .
Таким образом, на основании следствия 2 теоремы 1, а также леммы 1 можно легко показать, применяя математическую индукцию по числу этапов работы алгоритма л-т унификации, что для л-т унифицируемых программ ж'(Х) и
к”(X) каждая подстановка в последовательности р0, рх,..., рп, рп+1,..., которая вычисляется алгоритмом л-т унификации, является прототипом
НОУ(ж'(Х'),ж\Х'')). □
Из лемм 3, 4 и 5 вытекает теорема корректности предложенного нами алгоритма л-т унификации программ.
Теорема 3. Алгоритм л-т унификации программ объявляет о том, что подстановка рп является наиболее общим л-т унификатором программ
ж'(Х) и 7г"(Х) тогда и только тогда, когда рп е НОУ(ж'(Х'),ж"(Х")).
5. Сложность логико-термальной унификации программ
Описанный в предшествующем разделе алгоритм л-т унификации программ не является оптимальным, поскольку требует построения в явном виде множеств подстановок , ассоциированных с вершинами. Как видно из
описания алгоритма, размер этих множеств может оказаться величиной, экспоненциально зависящей от размеров программ ж'(Х) и 7г”(Х). В этом разделе мы покажем, что подстановки из множеств можно
представлять в неявном виде, используя лишь полиномиальный относительно размеров программ объем памяти.
Обозначим записью N суммарный размер программ 7т'(Х) и 7т"(Х).
Тогда граф Т\тг\ ж"] имеет не более Ы2 вершин, и максимальный размер каждой подстановки, приписанной вершине этого графа, не превосходит величины ()( X2) .
На каждом этапе работы алгоритма л-т унификации программ выполняется процедура вычисления стационарной разметки вершин графа логически совместных трасс Г \ж\ ж"] при помощи операции редуцированной антиунифкации: для каждой пары вершин (и\и") и (V, у”), помеченных подстановками г/[и'и"] и фУ] и соединенных дугой, которой приписана подстановка 0, вычисляется подстановка ¡Л — 0Т][и’и"] И //[уЧ’”] . которая (в случае неэквивалентности подстановок ц и //['’Ч’"]) приписывается вершине вместо прежней подстановки г/[и'и"]. Обозначим записью //^[уЧ’”] список подстановок, которые были последовательно приписаны вершине (V, V") по ходу работы алгоритма. Как следует из утверждения 10, приведенного в статье [16], длина такого списка (равная количеству изменений пометки вершины графа Т\ж\ ж"]) не превосходит величины
0(Ы2).
При вычислении подстановки ¡л — И тф'у>"\ также вычисляются
две подстановки-пополнения =-----—---= {З-’, ук / 1к \ и
9ф'и"\
%" = ——— = */ 51,..., ук / як }. Эти подстановки применяются к одному ф'уп]
и тому же множеству вспомогательных переменных {уг,..., ук }, которые вводятся в термах подстановки (Л при выполнении редуцированной антиунификации (подробности см. в [15,16,20]). Будем далее говорить, что подстановки и Е,” определяют множество переменные ух,...,ук . Если подстановка Ц приписывается вершине (V, у") , то между подстановками //, и установим отношение предшествования: подстановки и объявляются предшественниками подстановки (Л (для обозначения отношения предшествования будем использовать записи //—> и
/Л —> В свою очередь, предшественниками подстановки объявляются
все предшественники (если таковые есть) подстановки г/[и'и"], а предшественниками подстановки Е," объявляются все предшественники подстановки ^[уЧ1*]. Обозначим транзитивное замыкание отношения
*
предшествования записью ---------> . Общее число подстановок-пополнений,
порождаемых по ходу работы процедуры вычисления стационарной разметки
графа Т\ж\ж*], ограничено величиной 0(Ы4), и суммарный размер их оценивается величиной 0(Ыв) .
Лемма 6. Предположим, что на некотором шаге работы процедуры вычисления стационарной разметки графа логически совместных трасс Т[ж', ж"] вершине (у', у") приписана подстановка //[уЧ’”] и множество
подстановок ^уЧ1"] . Тогда:
1. для любой подстановки Л из множества ^уЧ1”] существует такая
последовательность подстановок-пополнений, связанных отношением предшествования 7]\у’у”] —> ^ —»<^2 —>--------> £и(. для которой
справедливо равенство Л = 7][уЧ’”]<^1<^2 ■ ■ ■ £и, '■
2. для любой последовательность подстановок-пополнений, связанных
отношением предшествования 7]\у'у”] —> ^ —> <^2 ~^---------^ ’
существует такая подстановка Л из множества ^уЧ1”] , для которой справедливо равенство Л = //[уЧ’"]^^,... £,т .
Доказательство. Проводится индукцией по числу шагов работы процедуры вычисления стационарной разметки графа Г\ж', ж"]. При обосновании индуктивного перехода ограничимся рассмотрением первого утверждения леммы. Обоснование второго утверждения проводится сходным образом.
Предположим, что в вершине (у',у") произошло изменение разметки: подстановка 7]\у'у"] была заменена подстановкой ¡л - вг][и'и"] И //[уЧ’”] , а множество подстановок ^уЧ1”] было заменено множеством подстановок ^ ['’Ч’”] ' \вЛ': Л' е ,Ч\11гн”]}. В этом случае вводятся новые подстановки дополнения и . удовлетворяющие равенствам 0г/\и'и”] = цЕ,’ и ц = ?7[у'у"]^" . Тогда по индуктивному предположению для любой подстановки Л из множества ^уЧ1”] верны равенства
Л = //[уЧ’"]^^ ...£,т= г/[у'у”]^”^2... £,т. а для любой подстановки Л из
множества {вХ: Л' е 8\и'ип\] верны равенства
Л = вЛ’ = вг/[и’и"]^2 ...<^т = 1Л%'£1£2...£т, подтверждающие первое
утверждение леммы для новой разметки вершины (V, V") . □
Таким образом, вся информация о подстановках из множеств, ассоциированных с вершинами графа Г\ж', Ж"~\, содержится в подстановках-пополнениях, связанных отношением предшествования. Покажем теперь, как можно быстро вычислять «на лету» наиболее общий унификатор
Т = НОУ{ (^) А[у]Л)}) , используя введенное неявное
(м,у)еГА<=8[иу]
описание подстановок.
После того, как построена стационарная разметка //[//!’], для вычисления
подстановки т можно воспользоваться следующей процедурой ! /N11’’, которая перемежает выполнение алгоритмом унификации Мартелли-Монтанари (см. [4,15]) и применение подстановок-пополнений. Вначале этот алгоритм применяется для решения системы уравнений {А\и\т]\иу\ = у4[у]?7[иу] : (и, у) е Г\ж\ жп]} и конструирует равносильную приведенную систему уравнений. Если такой системы получить не удается, то унификация исходных пар атомов невозможна. Если такая приведенная система уравнений Е может быть построена, то рассматривается множество вспомогательных переменных {у1,у2,...,ут} и среди подстановок-
*
пополнений выбирается максимальная по отношению -------------------> пара
подстановок и . определяющих переменную одну из переменных У1 рассматриваемого множества {уг, у2,..., ут } . После этого система уравнений Е преобразуется в систему уравнений Е^'^Е^", в которой переменная yi уже будет отсутствовать. Далее процедура I /N11’’ вновь применяется к полученной системе алгоритм Мартелли-Монтанари.
*
Поскольку отношение ---------> является отношением строгого частичного
порядка на множестве подстановок-пополнений, и каждая переменная определяется лишь в паре таких подстановок и . удаленная
вспомогательная переменная yi уже не появится в системах уравнений на
последующих этапах выполнения процедуры I /МII'’. Выполнение описанного процесса унификации завершается, когда в очередной приведенной системе уравнений Е не остается вспомогательных
переменных, т.е. Е = {х = t: х е X, X с: Xf о1 X” ¡. В этом случае подстановка {х/1X е X} объявляется результатом его работы.
На основании леммы 6 и свойств корректности и полноты алгоритма унификации Мартелли-Монтанари справедлива.
Лемма 7. Описанный процесс последовательного применения процедуры UNIF вычисляет подстановку {х/1 : X G Х\ тогда и только тогда, когда наиболее общий унификатор НОУ( и и ««»и
(и,у)еГÁ<=S[uv]
существует. При этом т = {х/1: X е X} .
Нетрудно видеть, что процедура UNIF 0(N4) раз применяет алгоритм
унификации Мартелли-Монтанари к системам, содержащим 0(N4) уравнений, и размер термов в каждом из уравнений оценивается величиной 0(N2). Таким образом, вычисление
НОУ( |^J A[v]Á)}) можно осуществить за время
(м,у)еГ(л'',л''') ágS[uv]
0(Nl°).
Теорема 4. Алгоритм л-т унификации программ 7т'(Х) и 7г”(Х) завершает
работу за время, полиномиальное относительно суммарного размера этих программ.
Доказательство. Пусть N - суммарный размер программ 7г\Х) и 7г”(Х) .Как следует из леммы 3, алгоритм л-т унификации программ 7г'(Х) и к”(X) завершает работу за ()(N) этапов. На каждом этапе выполняется процедура вычисления стационарной разметки графа логически совместных трасс Г\тг\ тг"], которая завершает работу за ()(N4) шагов. На каждом шаге выполняется операция редуцированной антиунификации, которая применяется к подстановкам размера 0(N2). По завершении построения стационарной разметки наиболее общий унификатор
НОУ( и и«л[ и\Х, A[v]Á)}) вычисляется за время 0(N'").
(и,у)еГágS[uv]
Таким образом, общее время работы описанного в данной статье алгоритма л-т унификации оценивается величиной 0{Nl 1). □
6. Заключение
Успешное решение задачи л-т унификации программ в простой постановке,
когда в качестве интерфейсов-инициализаторов (тт'п1, п"п ) используются лишь
цепочки операторов присваивания, создает предпосылки для изучения более
общего случая, когда в качестве интерфейсов и (^'out-, ^"ut) можно
использовать произвольные ациклические программы. Другое направление исследований - это изучение возможности понижения сложности алгоритма л-т унификации программ.
Список литературы
11 Robinson J.A. A machine-oriented logic based on the resolution principle // Journal of the ACM. 1965— v. 12,N1.— p. 23-41.
Baxter L.D. An efficient unification algorithm // Technical Report CS-73-23, Dep. of Analysis and Comp. Sci., University of Waterloo, Ontario, Canada, 1973.
Paterson M.S., Wegman M.N. Linear unification // The Journal of Computer and System Science. — 1978. — v. 16, N 2 — p. 158-167.
Martelli A., Montanari U. An efficient unification algorithm //ACM Transactions on Program, Languages and Systems. — 1982. — v. 4, N 2 — p. 258-282.
Stickel E.M. A unification algorithm for associative-commutative functions // Journal of the association for Computing Machinary. — 1981. — v. 28, N 5 — p. 423-434.
Herold A., Sieckmann J. Unification in Abelean semigroups // Jomal of Automated Reasoning. — 1983. —p. 247-283.
Lincoln P., Christian J. Adventures in associative-commutative unification //Journal of Symbolic Computation. — 1989. — v.8. — p. 393 — 416.
Baader F., Snyder W. Unification theory // In J.A. Robinson and A. Voronkov, editors, Handbook of Automated Reasoning. — 2001. — v. 1 — p. 447-533.
Goldfarb W.D. The undecidability of the second-order unification problem // Theoretical Computer Science. — 1981. — v. 13, N2. —p. 225-230.
Фаулер М. Рефакторинг. Улучшение существующего кода. — Символ-Плюс, 2008.—432 с.
Roy С. К., Cordy J. R. A survey on software clone detection research // Technical report TR 2007-541, School of Computing, Queen’s University. — 2007. — v. 115. Komondoor R., Horwitz S. Using slicing to identify duplication in source code // Proceedings of the 8th International Symposium on Static Analysis. — Springer-Verlag, 2001,—p. 40-56.
Иткин В.Э. Логико-термальная эквивалентность схем программ // Кибернетика. — 1972. — N1,— с. 5-27.
Сабельфельд В.К. Полиномиальная оценка сложности распознавания логикотермальной эквивалентности // ДАН СССР. — 1979. — т. 249, N 4. — с. 793-796. Захаров В.А., Новикова Т.А.. Применение алгебры подстановок для унификации программ. Труды Института системного программирования РАН, том 21, 2011 г. ISSN 2220-6426 (Online), ISSN 2079-8156 (Print).
Захаров B.A., Новикова Т.А.. Полиномиальный по времени алгоритм проверки логико-термальной эквивалентности программ. Труды Института системного программирования РАН, том 22, 2012 г. ISSN 2220-6426 (Online), ISSN 2079-8156 (Print).
[17] Eder E. Properties of substitutions and unifications // Journal of Symbolic Computations. — v. 1,— 1985,— p. 31-46.
[18] Palamidessi C. Algebraic properties of idempotent substitutions // Lecture Notes in Computer Science — v. 443 — 1990. — p. 386-399.
[19] B.E., Сабельфельд B.K. Теория схем программ. — М.:Наука, 1991. — 348 с.
[20] Захаров В.А., Костылев Е.В. О сложности задачи антиунификации // Дискретная математика. — 2008. — т. 20, N 1. — с. 131-144.
[21] Luckham D.C., Park D.M., Paterson M.S., On formalized computer programs // Journal of Computer and System Science — 1970. — v.4, N 3. — p. 220-249.
[22] Котов B.E., Сабельфельд B.K. Теория схем программ. — М.:Наука, 1991. — 348 с.
476