Научная статья на тему 'Двусторонняя унификация программ и ее применение для задач рефакторинга'

Двусторонняя унификация программ и ее применение для задач рефакторинга Текст научной статьи по специальности «Математика»

CC BY
227
42
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ПРОГРАММА / РЕФАКТОРИНГ / ЛОГИКО-ТЕРМАЛЬНАЯ ЭКВИВАЛЕНТНОСТЬ / ПОДСТАНОВКА / КОМПОЗИЦИЯ / УНИФИКАЦИЯ / СЛОЖНОСТЬ / ПРОБЛЕМА ДОМИНО / PROGRAM / STRONG EQUIVALENCE / SUBSTITUTION / COMPLEXITY / TILING PROBLEM / NP-COMPLETENESS

Аннотация научной статьи по математике, автор научной работы — Новикова Т. А., Захаров В. А.

Задача унификации пары подстановок θ_1 и θ_2 состоит в вычислении такой пары подстановок η' и η'', чтобы композиции θ_1 η' и θ_2 η'' были равны. По существу, задача унификации подстановок равносильна задаче решения линейных уравнений вида θ_1 X=θ_2 Y в полугруппе подстановок. Но некоторые линейные уравнения над подстановками также можно рассматривать как новые варианты задачи унификации. В этой статье мы вводим понятие двусторонней унификации как процесса преобразования одной заданной подстановки θ_1 к другой заданной подстановке θ_2 при помощи композиции, применяемой как справа, так и слева к подстановке θ_1. Иначе говоря, задача двусторонней унификации состоит в решении уравнений вида Xθ_1 Y=θ_2. Двусторонняя унификация подстановок может быть использована при решении одной из задач реорганизации (рефакторинга) программ выделения в заданном фрагменте кода тела библиотечной процедуры с целью последующей замены выделенного участка кода на вызов этой процедуры. В статье исследован вопрос о сложности задачи двусторонней унификации подстановок. Установлено, что эта задача является NP-полной. Доказательство NP-трудности задачи двусторонней унификации проводится путем сведения к ней NP-полной задачи правильного расположения домино в прямоугольной области плоскости. В статье также сформулирована и исследована задача двусторонней унификации программ в модели программ первого порядка с отношением логико-термальной эквивалентности. Доказано, что сформулированная задача двусторонней унификации программ также является NP-полной.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Двусторонняя унификация программ и ее применение для задач рефакторинга»

Двусторонняя унификация программ и ее применение для задач рефакторинга

ТА. Новикова

Казахстанский филиал МГУ им. М.В. Ломоносова, Астана, Казахстан

[email protected] В.А.Захаров ИСП РАН, Москва, Россия [email protected]

Аннотация. Задача унификации пары подстановок вх и в2 состоит в вычислении такой пары подстановок г/' и г)", чтобы композиции в^' и 62г)" были равны. По существу, задача унификации подстановок равносильна задаче решения линейных уравнений вида вхХ = в2У в полугруппе подстановок. Но некоторые линейные уравнения над подстановками также можно рассматривать как новые варианты задачи унификации. В этой статье мы вводим понятие двусторонней унификации как процесса преобразования одной заданной подстановки вг к другой заданной подстановке в2 при помощи композиции, применяемой как справа, так и слева к подстановке вх. Иначе говоря, задача двусторонней унификации состоит в решении уравнений вида Хв-^У = в2 ■ Двусторонняя унификация подстановок может быть использована при решении одной из задач реорганизации (рефакторинга) программ - выделения в заданном фрагменте кода тела библиотечной процедуры с целью последующей замены выделенного участка кода на вызов этой процедуры. В статье исследован вопрос о сложности задачи двусторонней унификации подстановок. Установлено, что эта задача является №-полной. Доказательство №-трудности задачи двусторонней унификации проводится путем сведения к ней №-полной задачи правильного расположения домино в прямоугольной области плоскости. В статье также сформулирована и исследована задача двусторонней унификации программ в модели программ первого порядка с отношением логико-термальной эквивалентности. Доказано, что сформулированная задача двусторонней унификации программ также является №-полной.

Ключевые слова: программа, рефакторинг, логико-термальная эквивалентность, подстановка, композиция, унификация, сложность, проблема домино.

1. Введение

Данная статья продолжает серию работ [1-4], в которых исследуется применимость методов и алгоритмов теории унификации [5] для решения задач оптимизации и верификации программ. В статьях [2] предложены

эффективные алгоритм проверки логико-термальной эквивалентности в ранее известной модели последовательных императивных программ [6,7], сложность которого существенно меньше сложности ранее известных алгоритмов (см. [8,9]). На основе этого алгоритма в статье [3] был предложен полиномиальный по времени алгоритм унификации программ, т.е. приведения двух программ к общему виду за счет выбора подходящих инициализаций входных переменных. Ранее задача унификации программ не исследовалась. В обоих случаях эффективность предложенных алгоритмов анализа и преобразования программ была обусловлена использованием быстрых алгоритмов унификации (вычисления наиболее общих примеров) и антиунификации (вычисления наиболее специальных шаблонов) заданных выражений (термов и атомов).

В данной работе рассматривается еще одна задача анализа и преобразования программ, относящаяся к области реорганизации (рефакторинга) программ

[10]. Цель реорганизации программы состоит в том, чтобы за счет эквивалентных преобразований, сохраняющих функциональные свойства программы, привести ее к такому виду, который облегчает понимание программы, имеет более простую структуру, меньший размер, лишен избыточных конструкций и т. п. В частности, одной из задач реорганизации программ является задача обнаружения и устранения клонов. Содержательно, программный клон - это совокупность фрагментов программы, осуществляющих «похожие» преобразования данных. Корректное определение программного клона, сопровождаемое эффективным методом обнаружения клонов, позволяет проводить упрощения программного код путем замены нескольких больших фрагментов программы вызовом одной и той же процедуры или макроса [12]. Такое преобразование сокращает размер программы. Но оно также и облегчает понимание программы, поскольку понимание поведения нескольких разных фрагментов программы теперь сводится к пониманию поведения одной процедуры. Устранение клонов также упрощает тестирование и анализ программы, поскольку однородные ошибки, присущие фрагментам одного и того же клона, можно обнаружить и устранить при анализе поведения одной процедуры.

Попытки разработать и реализовать подходящие средства обнаружения и устранения клонов предпринимались во многих работах [13]. Главную трудность здесь составляют два вопроса: как определить понятие схожести вычислений фрагментов программ (определение клона), и как обнаружить фрагменты, имеющие сходное поведение (выявление клона). В частности, в статье [3] был предложен следующий подход к решению этих вопросов. Предположим, что на множестве программ введено некоторое отношение эквивалентности и выделен некоторый класс «простых» программ Г. Тогда одно из возможных определений клона можно сформулировать, введя отношение П-подобия программ. Заданная пара программ я, и п2 считается 11-подобной, если существует такая программа п0 и две такие пары программ

(p1, Я,) и (р2,Л2) из класса П, для которых последовательная композиция программ р1-,п0)Х1 эквивалентна я,, а последовательная композиция программ р2;я0;Я2 эквивалентна п2. Программу я0 указанного вида, назовем П-ядром пары программ пл. п2. Пары программ (рл,Я,) и (р2,Л2) в приведенном определении могут мыслиться как интерфейсы, преобразующие формат представления входных и выходных данных. Можно предполагать, что преобразования такого рода выполняются программами, имеющими сравнительно простое устройство. Тогда наличие ядра у пары программ означает, что эти программы вычисляют схожие функции и могут считаться подобными.

Аналогичным образом понятие ядра можно распространить и на целые семейства программ. Тогда П-клоном называется семейство программ, имеющих П-ядро. При обнаружении клона мы можем ввести в программе новую процедуру а, телом которой служит фрагмент я0, и все фрагменты клона Tii, 1 < i < п, заменить вызовом этой процедуры в составе композиций вида ре, call a; Xt.

Для реализации этого подхода нужно уметь решать задачу проверки подобия программ: для произвольной заданной пары программ я, и я2 выяснить существование ядро относительно заданного семейства интерфейсных программ ТТ. А решение этой задачи, в свою очередь, опирается на решение более простой задачи: для заданной пары программ п1 и я0 требуется выяснить, существует ли такая пара программ (р, Я) из класса П, для которой программа ях эквивалентна композиции программ р;я0;Я. Поскольку интерфейсные программы р,Я приводят программы я, и я0 к общему виду, пару (р, Я) назовем двусторонним унификатором программ я, и я0.

Понятие двусторонней унификации вводится нами впервые. Оно является естественным развитием широко известной концепции унификации для логических выражений, содержащих переменные. Задача унификации выражений (формул, атомов, термов) языка предикатов первого порядка состоит в том, чтобы для заданной пары выражений Е1(х1,... ,хп) и Е2(х1, ...,хп) отыскать такую подстановку в = {x1/t1, ...,xn/tn)}, для которой выражения Я, (х,,, хп)в и Е2 (х,,..., хп)в становятся синтаксически одинаковыми. Впервые задачу унификации исследовал Дж. Робинсон в статье

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

формальных языков, построении систем переписывания термов (см. обзор

[14]). Был разработан широкий спектр эффективных алгоритмов унификации [15-20], имеющих почти линейную сложность, а также были найдены подходящие структуры данных для практической реализации этих алгоритмов.

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

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

удовлетворяет отношение логико-термальной (л-т) эквивалентности, введенное в статье [8]. Две программы я , и п2 считаются л-т эквивалентными, если для любой синтаксически допустимой трассы trace' в одной из программ существует такая трасса trace" в другой программе, что в обеих трассах логические условия (предикаты) проверяются в одной и той же последовательности для одних и тех же наборов значений переменных. Как было установлено в [8], л-т эквивалентность программ влечет их

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

Цель настоящей статьи - оценить сложность задачи двусторонней

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

Содержание статьи таково. Во втором разделе приведены определения основных понятий алгебры конечных подстановок [5,21], в терминах которых сформулирована задача двусторонней унификации для конечных подстановок. В этом же разделе показано, что эта задача может быть решена недетерминированным алгоритмом за полиномиальное время. Чтобы установить NP-полноту задачи двусторонней унификации подстановок, в третьем разделе рассмотрена задача о правильном расположении домино (мозаики) на ограниченной области плоскости. Эта задача, известная под названием Bounded Tiling Problem, является NP-полной задачей; она была сформулирована и исследована в статье [22]. Эта задача часто используется в качестве эталонной NP-полной задачи в теории сложности. В четвертом разделе показано, что задача о правильном расположении домино сводится к задаче проверки двусторонней унифицируемости подстановок; тем самым устанавливается NP-полнота исследуемой задачи. На основании этого результата в пятом разделе статьи показано, что задача двусторонней

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

2. Двусторонняя унификация конечных подстановок

Определим понятие конечной подстановки первого порядка и операции композиции подстановок. Пусть задано некоторое множество функциональных символов Я. Символы и, X, У, 2 будем использовать для обозначения конечных множеств переменных. Множество термов Тегт[Х] над множеством переменных X определяется общепринятым для языка первого порядка образом.

Пусть X = {хх, ...,хп} и У = {у,,у2,...}. Тогда X-У-подстановкой называется всякое отображение в\ X -» Тегт[У]. Каждая подстановка может быть описана конечным множеством связок в = {х1/б(х1), ...хп/в(хп)}. Переменные множества У будем называть входными переменными, а переменные множества X - выходными переменными подстановки в. Множество всех А"-К-по дета но во к обозначим записью БыЬб^Х, У]. Применение подстановки в к терму £(хх, ...,хп) дает в результате терм Ьв = с(б(х1), ...,б(хп)), который получается из терма Ь одновременной заменой всех вхождений каждой переменной хи 1 < / < п. на терм б(х;). Композицией А'-К-подстановки в и У-Е-подстановки I] называется такая Х^-подстановка которая удовлетворяет равенству х^ = (хв))] (или, иначе, для каждой переменной х, х 6 X. Для обозначения композиции подстановок в и г} будем использовать запись вт]. Поскольку равенство Ь(вг)) = (Ьв)г) справедливо для любого терма £:, £6 Тегт[Х], операция композиции подстановок является ассоциативной. Будем называть А'-А'-подстановку в переименованием, если отображение в является биекцией на множестве переменных X. Две подстановки вл, в2 из семейства считаются эквивалентными, если вл = в2р для некоторого Х-Х-переименования р. Если подстановка б, является композицией подстановок в2 и г}, то подстановку вл назовем примером подстановки в2. а подстановку в2 будем называть шаблоном подстановки вЛ.

Пусть заданы Х-У-подстановка в0 и 7-£/-подстановка вл. Тогда пару г/' и г/” из множеств X] и БиЬз^У.Щ соответственно назовем двусторонним

унификатором пары (б0, б,) тогда и только тогда, когда выполняется равенство Т]'в0г/" = б,. Задача двусторонней унификации состоит в том, чтобы для заданной пары подстановок указанного типа в0 и б, вычислить двусторонний унификатор пары (в0,в1).

Отметим некоторые особенности задачи двусторонней унификации. Прежде всего, нетрудно увидеть, что эта задача фактически состоит в решении уравнения Х'в0Х" = вл относительно неизвестных подстановок Х',Х" из семейств БтаЬб^,X] и К, (^соответственно. Неявно заданные

уравнения подобного вида ранее уже исследовались в теории унификации. Так, например, традиционная задача унификации выражений в языке первого порядка (см. [5]) может быть представлена как задача решения уравнений вида в0Х’ = влХ". Задача односторонней унификации возникает во многих разделах математической логики, алгебры, теории вычислений, программирования, теории искусственного интеллекта. Подробнее с описанием прикладных возможностей односторонней унификации можно ознакомиться в статье [14]. Для ее решения было предложено немало эффективных алгоритмов (см. [15-20]), некоторые из которых вычисляют односторонний унификатор за почти линейное время относительно размера описания подстановок, представленных в виде размеченных ориентированных ациклических графов. Уравнения другого вида Х'в0 = Х"91 также неявно возникали в работах [23], в которых исследовалась проблема эквивалентности в одном классе последовательных программ. Было показано, что решение этих уравнений можно вычислить за полиномиальное время. В связи с эти представляет интерес не только сама задача двусторонней унификации подстановок, но также и более общая задача проверки разрешимости и вычисления решения уравнений более общего вида над подстановками. Не исключено, что некоторые из этих уравнений могут иметь прикладное значение.

Следует заметить, что задача двусторонней унификации, в отличие от задачи односторонней унификации, является асимметричной, поскольку и сами исходные подстановки в0, вл. и подстановки двустороннего унификатора г}', г)" относятся к разным типам и играют разную роль в содержательной интерпретации задачи унификации. Подстановки в0, вл моделируют вычисления программ, а подстановки г)" и т)' выполняют инициализацию входных данных и специализацию результатов вычисления. Поэтому, как следует из определения двусторонней унификации, термы подстановки г)" не могут непосредственно влиять на входные переменные подстановки Г]’, но только через термы подстановки в0.

И, наконец, задача двусторонней унификации для подстановок в0, вл может иметь несколько разных решений. Например, в случае в0 = {х-1/ [(у1,у2),х2/ Уз}> {$1 = {^//(/(и, и),/(и, и))} двусторонними унификаторами являются пары (г]’ = {г//( х^х^г)" = {у1/и,у2/и}), (г]’ = {г/[([(х2,х2),х1)},г]" =

{у±/и,у2/и}) и (г]’ = {г/хг},7]" = {у1/[(и,и),у2/[(и,и)}). Однако множество попарно неэквивалентных двусторонних унификаторов заданной пары подстановок в0, вл конечно, поскольку первая компонента т)' каждого такого

унификатора является шаблоном подстановки въ а число попарно неэквивалентных шаблонов всякой подстановки конечно.

Когда затрагиваются вопросы сложности задач и алгоритмов их решения, большое значение имеют способы описания задачи и структуры данных, с которыми работают алгоритмы. Например, задача односторонней унификации имеет экспоненциальную сложность, если для представления термов используются размеченные деревья, но эта же задача решается за почти линейное время, если для представления термов использовать размеченные ориентированные ациклические графы. Как будет видно из последующих разделов статьи, выбор представления термов не оказывает существенного влияния на сложность задачи двусторонней унификации. Для определенности мы будем в дальнейшем считать, что все термы в подстановках в0, б, имеют древесное представление. Условимся обозначать записью Тд множество размеченных деревьев (лес), представляющих все термы подстановки в. Очевидно, что в этом случае задача проверки двусторонней унифицируемости подстановок (б0,б,) может быть решена недетерминированным алгоритмом за полиномиальное время. Для решения этой задачи достаточно:

1. Провести недетерминированно образом по два сечения в каждом из деревьев множества Тд разделив лес Тд на три части Т', Тд и Т"; при этом листовые вершины каждой из частей Т', Тд совмещаются с корневыми вершинами частей Тд и Т" соответственно;

2. Согласованно приписать переменные из множеств X и Y всем листовым вершинам фрагментов Т1 и Тд соответственно (одинаковые переменные могут быть приписаны разным листовым вершинам, только если эти листья совместимы с корневыми вершинами одинаковых деревьев лежащих в следующем слое разреза).

3. Проверить, что все помеченные таким образом деревья из среднего

фрагмента Тд, представляют термы из подстановки в д.

Очевидно, что проверить согласованность разметки листовых вершин, а также включение термов из фрагмента Т0 в древесное представление подстановки Тд0 можно за время, полиномиальное относительно размеров подстановок Тво и Тд Таким образом, справедлива

Лемма 1. Задача проверки двусторонней унифицируемости подстановок (в0, б,) принадлежит классу сложности NP.

NP-трудность этой задачи будет обоснована в разделе 4 путем сведения к ней ограниченного варианта проблемы домино (bounded tiling problem), которая формально описана в разделе 3.

3. Проблема ограниченного домино

Проблема домино состоит в том, чтобы покрыть заданную область плоскости четырехсторонними квадратными домино заданных типов так, чтобы смежные стороны двух соседних квадратов имели одинаковую окраску. Впервые эта задача была рассмотрена в статье [24]. Сложность этой задачи существенно зависит от формы покрываемой области. Например, задача покрытия всей плоскости посредством домино заданных типов алгоритмически неразрешима; в статье [25] было установлено, что к этому варианту проблемы домино сводится проблема (не)останова машин Тьюринга. В статье [22] было показано, что задача правильного покрытия прямоугольной области является NP-полной. В дальнейшем этот вариант проблемы домино под названием Bounded Tiling Problem широко использовался в математической логике и теории вычислений для доказательства NP-полноты многих задач. В частности, в монографии [26] проблема домино выступает в роли центральной задачи теории сложности вычислений. Мы также используем проблему домино для доказательства NP-полноты задачи двусторонней унифицируемости.

Неформальное описание ограниченного варианта проблемы домино таково. Предположим, что задано некоторое конечное множество домино {7’1,7’2, —,TL], представляющих собой квадраты единичного размера, каждая сторона которых окрашена в какой-либо цвет. Рассмотрим прямоугольник размера пхт, стороны которого разделены на отрезки единичной длины. Предположим, что каждый из этих сегментов также окрашен какой-то цвет. Задача состоит в том, чтобы выяснить, можно ли расположить в указанном прямоугольнике домино заданных типов так, чтобы смежные стороны соседних домино имели одинаковую окраску, и чтобы стороны домино, прилегающие к границе прямоугольника, имели ту же окраску, что и сегменты границы, смежные с этими сторонами.

Опишем теперь эту задачу формально. Пусть задано конечное множество цветов Colours = {1,2,К]. Домино - это четверка цветов tile = (аг, а2, а3, а4>. Для выделения компонентов домино tile (в указанном порядке) будем использовать записи tile[0,—l],tile[—l,0],tile[0,l],tile[l,0], которые обозначают соответственно окраску северной, восточной, южной и западной сторон домино. Прямоугольная область размера пхт - это множество пар Area = {(i,j) : 0 < i < п + 1,0 < j < т + 1}; элементы этого множества называются квадратами. Множество квадратов Inter = {([i,j) : 1 < i < п, 1 < j < т} называется внутренней областью прямоугольника. Граница прямоугольника - это множество пар Border = Area \ Interior. Два квадрата (ii,]\) и (12,72) прямоугольника Area считаются соседними, если \h-i2\ + \h — j21 = 1. Граничными условиями называется всякое отображение В\ Border -» Colours. Равенство B(i,j) = а означает, что сторона граничного квадрата (i,j), прилегающая к внутренней области

прямоугольника, окрашена в цвет а. Пусть задано конечное множество типов домино Tiles = {tile1,... ,tileL}. Тогда покрытием прямоугольника Area называется всякое отображение Т\ Inter -» Tiles. Для заданного граничного условия В прямоугольника Area покрытие Т называется -правильным, если оно удовлетворяет следующим требованиям:

1. Для каждой пары соседних внутренних квадратов и

справедливо равенство T{i1,j1)[i1 — i2, j\ ~ J2] = Т(h’jl)[h ~ il,j'2 ~ А]: смежные стороны соседних домино одинаково

окрашены;

2. Для каждого внутреннего квадрата соседом которого является

граничный квадрат (i2^72)• справедливо равенство Т[ti —

l2tji ~ J2] = б (i2' У2) • сторона домино, прилегающая к границе области, имеет ту же окраску, что и сегмент этой границы.

Примером ограниченной проблемы домино называется набор ВТ = (n,m,Tiles,B). Этот пример считается допустимым, если существует -правильное покрытие прямоугольной области Area размера пхт домино из множества Tiles. Задача Bounded Tiling Problem состоит в том, чтобы для произвольного примера ограниченной проблемы домино определить, является ли этот пример допустимым. В статье [22] показано, что проблема ограниченного домино является NP-полной.

4. NP-полнота проблемы двусторонней

унифицируемости подстановок

Пусть задан произвольный пример ограниченной проблемы домино ВТ = (n,m,Tiles,B), где Tiles = {tile-t,... ,tileL}, Colours = {1,2,..., К}. Для доказательства NP-полноты проблемы двусторонней унифицируемости подстановок покажем, что для примера ВТ ограниченной проблемы домино можно построить такую пару подстановок (в0,в1), которые двусторонне унифицируемы в том и только том случае, когда этот пример является допустимым. Связки X-Y - по дета но в к и в0 представляют граничные условия В, а также все возможные примеры размещений домино в различных квадратах области Area. A Z-U-подстановка б, состоит из единственной связки, которая представляет описание правильного покрытия прямоугольной области одноцветными домино, все стороны которых окрашены в цвет К. Двусторонний унификатор (г)', /7") описывает решение примера ВТ: связки подстановки г]' описывают некоторое покрытие Т области Area, а вторая компонента унификатора rj" проверяет правильность предложенного

покрытия. Проверка правильности покрытия состоит в том, что подстановка г)" предпринимает попытку «перекрасить» стороны домино, увеличивая цвет каждой пары смежных сторон домино на одну и ту же величину. При таком способе «перекраски» достичь монохроматического покрытия удается в том и только том случае, когда исходное покрытие было правильным.

Чтобы определить формально подстановки в0 и вл формально, мы введем множество функциональных символов F, включающее

• двухместный функциональный символ д*-2); с его помощью будет построен терм, описывающий область покрытия Area;

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

• одноместный функциональный символ он позволяет строить

термы (нумералы), представляющие натуральные числа, которыми обозначаются цвета и квадраты области покрытия.

Подстановки в0 и вл оперируют над следующими множествами переменных 1. X =Х'U X", где

• X' = {х[j\ (i,j~) £ Border}: каждая переменная х[у

привязана к граничному квадрату (£,_/) области Area,

• X" = {x'ij'f • (i,j) G Interior, 1 < £ < L}: каждая

переменная x’l’j ji ассоциируется с размещением домино tile^ в квадрате (£,_/) внутренней части области Area;

2- У = (Уо) и У, №

у = (Уч.н.ч.к ■ 0 < h < i2 < П + 1,0 < j1 < j2 < т +

Uh ~ h\ + \ji ~jzI = 1}

• : каждая переменная yi1,j1,i2,j2 ассоциирована с парой

соседних квадратов и области покрытия Area;

• Уо - вспомогательная переменная, используемая для нумерации координат квадратов;

3. Z = {z}, И и = {u}.

При помощи функционального символа определим рекурсивно нумералы

- термы вида fn(y) - для каждого целого неотрицательного п следующим образом: /0(у) = у и /п+1 (у) = /(/„(у)) для каждого п, п > 0. Очевидно, что для любых п,т верно /п(/т(у)) = /й+т(у)- Число п будем называть показателем ну мера ла [п(у).

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

Если граничный квадрат (i,j) располагается в одном из углов прямоугольной области покрытия, т.е. (i,j) 6 {(0,0), (п + 1,0), (n + 1, т + 1), (0, т + 1)}, то этому квадрату в подстановке в0 сопоставляется связка xLJ/tLJ. где

hi = ft(/i(yo)-/7(yo)./if(yo)./if(yo)./if(yo)./if(yo))-

Этот терм призван обозначить то, что все стороны указанного квадрата окрашены в цвет К.

Если граничный квадрат не лежит в углах прямоугольника, т.е. (£,у) 6 Border \ {(0,0), (п + 1,0), (n + 1, т + 1), (0, т + 1)}, и при этом B(i,j) = к, то существует единственный соседний с ним квадрат (£',/) из внутренней области. Пусть - переменная из множества Y', ассоциированная с

парой соседних квадратов (i,j), (/',/). Тогда граничные условия для квадрата (£,у) в подстановке в0 описываются связкой Xy/ty, где

hi = h(fi(yo)Ji(yo)JK(yo)JK(yo)JK(yo)Jk(yi1,i1,i2,i2})-

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

Если квадрат (i,j) лежит во внутренней области Interior прямоугольника Area, то у этого квадрата есть в точности четыре соседних с ним квадрата, расположенных вверху, справа, внизу и слева от квадрата (i,j). Пусть УыМ’ УыМ’ УыМ’ и Уч.ш1& 'эт0 четыре пеРеменные из множества Y', которые ассоциированы с указанными четырьмя парами соседних квадратов, включающих квадрат (£,у). Тогда для каждого домино tilet =

( кг, к2, к3, к4) из набора Tiles введем в подстановку в0 связку Ху f/ty где

= й(л(Уо)^;(Уо)^^(у;1Л4,^-)-//с2(Уь,^^)-//сз (Уым)’Ь*(УмМ )) ■

Этот терм призван обозначать тот факт, что в квадрат (i,j) внутренней области может быть вставлено домино tilef с присущей этому типу домино раскраской сторон.

Располагая описанными выше тремя типами связок, определим подстановку в0 как множество всех указанных выше связок, т.е.

во = {хиЛи : (^') 6 Border} и {Xi.j.t/hj.t ■ (i-j) £ Interior,1 < ( < L}.

Заметим, что каждая из переменных множества Y' присутствует сразу в нескольких термах подстановки в0, в качестве аргумента нумералов. Для каждого вхояедения переменной у, у £ Y', в некоторый терм подстановки в0 глубиной этого вхождения будем называть максимальный показатель тех нумералов, аргументом которых является это вхождение.

Используя только функциональный символ д(2>. построим произвольный терм tarea местности (п + 2)(гп + 2) (т.е. имеющий (п + 2)(гп + 2) листовых вершин в древесном представлении). Каждый аргумент этого терма соответствует одному из квадратов в области покрытия Area. Для каждого квадрата (i,j) в области Area введем терм kj = Kfi(u)Jj(u)JK(u)JK(u)JK(u)JK(u)). Фактически, этот терм соответствует расположению в квадрате (£,у) домино со сторонами, монохроматически окрашенными в цвет К. Определим подстановку

= {zAarea(^0,0> ^0Д> ■■■ > ^n+l.m+l)} •

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

Лемма 2.

Пример ограниченной проблемы домино ВТ = (n,m,Tiles,B) допустим тогда и только тогда, когда пара подстановок (бо,^), определенных выше, двусторонне унифицируема.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Доказательство. 1) Пусть пример ВТ допустим. Тогда существует В-правильное покрытие Т области Area домино из семейства Tiles. Рассмотрим это правильное покрытие, и для каждой пары соседних квадратов (i',j') внутренней области прямоугольника, где £ < i',j < j', обозначим записью c(i,j,i’,f) тот цвет, которым окрашены смежные стороны домино T(i,j) и T(i',j'). размещенных при покрытии Т в указанных квадратах. Точно такой же записью обозначим тот общий цвет, в который окрашены сторона домино и смежный с этой стороной сегмент границы прямоугольника. Согласно описанию устройства термов вида каждое вхождение переменной Уу/j' в термы ty,r(ij) и tii,j\T(i',j') имеет одну и ту же глубину c(i,j,i'Тогда двусторонним унификатором пары подстановок (б0, б,) является пара (rj', ц"). где

{z/tarea(.x 0,0'X0,1> ••• 'X0,m+1'X1,0'X1,1,T(1,1)' ••• > xl,m,T(l,m)’ xl,m+l> ■■■ > xn+l,m+l)} -

V” = {Уо/и'Уоддд//к'-е(оддд)(u)’ -}•

В подстановке rj' в терме tarea на место каждого аргумента, соответствующего квадрату (£,у) покрываемого прямоугольника, поставлена либо переменная Ху, если этот квадрат располагается на границе области, либо переменная xi,j,T(i,j)' если этот квадрат располагается во внутренней части области. В последнем случае переменная Хууказывает, что в этот квадрат должно быть помещено домино tileT(ijy В подстановке rj" вместо каждой переменной, соответствующей паре смежных сторон двух квадратов области Area, подставлен нумерал, дополняющий тот цвет, в который окрашены смежные стороны, располагающиеся в этих квадратах домино, до максимального цвета К.

Нетрудно убедиться, принимая во внимание 5-правильность покрытия Г, что имеет место равенство вг = rj'90rj".

2) Пусть для некоторой пары подстановок справедливо равенство

вл = т]'в0т]". Взглянув на устройство семейства размеченных деревьев, представляющих подстановку в1г можно заметить, что на каждой ветви вначале следуют функциональные символы д. затем функциональный символ h. и в заключении следуют функциональные символы /. Кроме того, для каждого квадрата (i,j) в терме подстановки вл содержится единственный подтерм вида h(fi(y0), fj(y0),...). В подстановке в0 все термы содержат только функциональные символы h и /. Таким образом, подстановка г}' должна иметь вид

V ~ {z/^агеиХх(),()' *0,1 ’ •••' X0,m+1' х1,0> xl,l,t1 •••' xl,m,{1 rn> xl,m+l> ■■■ > xn+ \,m+ \ )}’ а подстановка rj" должна иметь вид

V" = {Уо/и,у0,1Х1/....yij/j’/fk.. .,0),...}

Рассмотрим покрытие Г, в котором для каждого квадрата (i,j) имеет место равенство T(i,j) = SLJ тогда и только тогда, когда в терме подстановки г/' содержится переменная x1Jjf... Покажем, что это покрытие является В-правильным.

Допустим противное. Тогда окраска двух смежных сторон каких-то двух соседних домино (или окраска стороны одного из домино и смежного с этой стороной сегмента границы) должны быть разными. Без ограничения общности ограничимся рассмотрением первого из этих двух вариантов нарушения правильности покрытия. Предположим, что несогласованность окраски сторон проявляется для домино, располагающихся в квадратах (ii,y'l), (i2,]2) внутренней области прямоугольника, где it < i2,j\ < j-i* Это

означает, что в термах и ^i2,j2,ei2 /2 вхожДения разделяемой этими

термами переменной У1Ъ)Ъ12,)2 имеют разную глубину. Поэтому и в том терме, который представляет единственную связку композиции подстановок Т]'в0 =

{z/tarea(x0,0---xn+l,m+l)80}, «ба ВХОЖДенИЯ переменной yilih,i2,j2 ИМеЮТ

разную глубину. Но тогда и в композиции т]'в0т]" нумералы, располагающиеся в тех позициях подтермов ti2,j2,il2j2, которые соответствуют

окраске сторон домино, будут разными. А это противоречит тому, что вг = т]'в0т]" и при этом в терме подстановки вл показатели всех нумералов, обозначающих окраску сторон домино, одинаковы и равны К.

Таким образом, предложенное покрытие Т является 5-правильным. QED Лемма 3. Проблема ограниченного домино log — space сводима к проблеме двусторонней унифицируемости подстановок.

Доказательство. Из описания подстановок в0 и вЛ. приведенных в этом разделе, видно, что для всякого примера проблемы ограниченного домино ВТ = (п,т,Tiles, В) соответствующую этому примеру пару подстановок (в0, вЛ) можно построить посредством детерминированного алгоритма, использующего объем памяти, пропорциональный логарифму размера описания примера. QED Из лемм 1 и 3 вытекает

Теорема 1. Проблема двусторонней унифицируемости подстановок является NP-полной.

Здесь стоит отметить, что данная теорема является завершающим утверждением, дающим полную картину сложности проблемы разрешимости уравнений вида Х^' вХ22 = Х^'цХ^ в полугруппе конечных подстановок первого порядка, где сг£ 6 {0,1} и при этом X1 = X и Х° = г. а г -тождественная подстановка (нейтральный элемент полугруппы). Действительно, уравнения вида Х1вХ2 = Х3)]Х4 , вХ2 = Х3)]Х4 и Х{в = Х3г]Х4 имеют очевидные тривиальные решения вида (X, = )],Х2 = Х3 = £,*4 = 0), (Х2 = г],Х3 = в,Х4 = е) и (Х1=7],Х3 = в,Х4 = е)

соответственно. Уравнения вида вХ2 = цХ4 и вХ2 = ц соответствуют проблеме унификации и, как показано в работах [16], разрешимы за почти линейное время. Уравнения вида Х±в = Х31] и Х{в = т] были исследованы в статье [23] в связи с изучением проблемы эквивалентности в одном классе последовательных программ. Эти уравнения разрешимы за полиномиальное время. И, как установлено в теореме 1, лишь для уравнений вида Х1вХ2 = г\ задача их разрешимости является NP-полной.

5. Двусторонняя унификация программ

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

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

Мы будем рассматривать модель последовательных императивных программ, которая была введена в статье [6] и подробно исследована в монографии [7]. Программы в этой модели строятся из операторов ввода и вывода, операторов присваивания и тестов. Операторы ввода и вывода лишь обозначают множества входных и выходных переменных. Семантика каждого оператора присваивания е вида x:=t , где х - некоторая переменная, at- терм, определяется подстановкой ве = {x/t}. Эффект последовательной композиции операторов присваивания е1;е2‘,-..ек описывается композицией соответствующих подстановок век ■■■ ве2дв1. Тесты представляют собой атомарные формулы вида P(t1(..., tm), где Р - предикатный символ, a t,,..., tm

- термы.

В модели последовательных программ такого вида введено отношение логико-термальной эквивалентности программ (см. [8]). Эго отношение эквивалентности аппроксимирует отношение функциональной эквивалентности [7,8] и при этом разрешимо за полиномиальное время [2,9]. Разрешимость логико-термальной эквивалентности позволяет использовать ее для построения эффективных алгоритмов верификации, оптимизации и реорганизации (рефактроинга) последовательных программ. В рамках этой модели можно сформулировать одну из важных задач реорганизации программ - задачу замены фрагментов программ вызовами заданных процедур. В этом разделе мы покажем, что эту задачу можно решить при помощи методов двусторонней унификации подстановок.

Определим формально класс последовательных программ в рассматриваемой модели. Для этого выделим три типа переменных: конечное множество входные переменных Y = {yi, ...,уп}, конечное множество выходных переменных X = {х1,..., хт}, и конечное множество вспомогательных переменных Var. Пусть задано некоторое множество предикатных символов Р. Обозначим записью Atom[Var] множество атомарных формул, которые строятся обычным образом из предикатных символов и термов из множества Term[Var]. Также введем две специальные атомарные формулы Input(y1,...,уп) и Output(хл, ...,хт) над множествами входных и выходных переменных.

Модель программы представляет собой размеченный ориентированный граф 71. Две вершины этого графа - входная вершина vin и выходная вершина vout -особо выделены. Входной вершине vin приписана атомарная формула Inputiy-L,... ,уп); из этой вершины исходит единственная дуга, которой приписана подстановка в1П из множества подстановок Subst[Var,Y], Выходной вершине vout приписана атомарная формула Output(х{, ...,хт); из этой вершины не исходит ни одной дуги. Каждой внутренней вершине v этого графа, т.е. вершине, отличной от входной и выходной вершин, приписана

259

некоторая атомарная формула Ау из множества А1от[Уаг]. Из каждой такой вершины V исходят две дуги, одна из которых помечена символом Я, а другая

- символом 1. Эти дуги могут вести в любую вершину графа за исключением входной вершины г^п. Каждой дуге, ведущей в графе п из внутренней вершины и во внутреннюю вершину V, приписана подстановка 6иу из множества БиЬБЬ^аг, Уаг]. Каждой дуге, ведущей в графе п из внутренней вершины и в выходную вершину у(ш1. приписана подстановка ?7иои4 из множества БиЬБ^Х,Уаг]. Предполагается также, что через каждую вершину графа п(Уаг) проходит некоторый маршрут, ведущий из входа программы в ее выход.

В модели программ такого вида вершины графа - это точки проверки логических условий, дуги графа соответствуют линейным участкам программы, вычислительный эффект которых описывается подстановками, приписанными этим дугам. Во входе программы осуществляет инициализация вспомогательных переменных программы, а в выходной вершине собираются результаты вычислений в виде подстановок в выходные переменные. Существуют разные способы определения функциональных возможностей моделей программ такого рода (см. [7]). Однако, как было показано в статье [27], любой вид эквивалентности программ, опирающийся на понятия интерпретации языка первого порядка, оказывается неразрешимым. Поэтому для получения эффективных алгоритмов, разрешающих вычислительные свойства программ, приходится использовать структурные виды эквивалентности программ. Для этого приходится рассматривать и сравнивать всевозможные синтаксически допустимые трассы в анализируемых программах. Одним из таких видов эквивалентности является логикотермальная эквивалентность (л-т эквивалентность), введенная в статье [8] и подробно исследованная в работах [2,9]. Определение этой эквивалентности таково.

Трассой в программе п называется маршрут, ведущий из входной вершины в выходную вершину программы; в этом маршруте указываются все пометки, приписанные дугам. Пусть задана некоторая трасса в программе п

а = \’(.——а-’в- >• • V ,—ст"--е"-2 > V ,—>\’

0 1 2 п—2 п—1 п

где р0 = сг; 6 {0,1} для всех 1,1 < £ < п — 1, 6 БиЬБ^Уаг, Уаг] для всех

1,1 < £ < п — 2 , бп_, 6 ,Уаг],уп = уоиЬ . Тогда последовательность

Ик{а) =

(> °1)< а2^'

■■■ ’ (^п-1^п-1 ■" 616*0, СГп-О, (^уп^п-1^п-2 ■" 616*0, 1)

называется логико-термальной историей (л-т историей) трассы а. Двоичная последовательность ...,сгп_1 называется логической характеристикой

трассы а. Нетрудно видеть, что разные трассы в программе имеют разные характеристики. Детерминантом программы п называется множество Det(n)={lth(a): а - трасса в программе п}. Две программы я, и п2 считаются логико-термально (л-т) эквивалентными, если справедливо равенство Det(n-J = Det(nz). В статьях [2,9] показано, что задача проверки л-т эквивалентности программ разрешима за полиномиальное время.

Опишем операцию применения подстановок к программам. Пусть заданы программа п над множествами входных переменных X и выходных переменных Y, а также две подстановки rj' из семейства Subst[Z,X] и г}" из семейства Subst[U,Y], где U = [щ,...,uk}, Z = {г±,...,zf}. Тогда результатом применения пары подстановок к программе п является

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

• во входной вершине атом Input (у ... ,уп) заменяется атомом Input(Ui,..., Ufc) и подстановка в0. помечающая исходящую из этой вершины дугу, замещается подстановкой 0ОТ]";

• в выходной вершине атом Ouput(x^, ..., Xm) заменяется атомом Output(zlt ...,Zf), и для каждой дуги, ведущей в выходную вершину, подстановка б, помечающая эту дугу, замещается подстановкой 7]' в.

Программу г/'щ" можно истолковывать как вызов процедуры с телом п, в котором инициализация входных параметров осуществляется подстановкой г}", а специализация выходных параметров осуществляется подстановкой /7'. Задача двусторонней унификации программ формулируется так: для заданной пары программ п0 и п1 вычислить пару подстановок (двусторонний унификатор) (ц'для которой программы ц'п0г]" и пг будут л-т эквивалентными. Одно из возможных решений задачи двусторонней унификации программ опирается на следующую лемму.

Лемма 4. Пусть - двусторонний унификатор программ п0 и я,.

Предположим, что в программе п0 имеется трасса

0(\ k Oi ч 0л . О"^ ч . OV, 'у ч 0™ 'у . OV, 1.0™ 1 .

а = v0------2—» Vj---1 1 > v2-----2 2 > • • • vn_2-”~2 ”~2 > vn_j------------^

Тогда в программе я, существует трасса

имеющая ту же самую логическую характеристику, что и трасса а, и удовлетворяющая следующему равенству

Г/'вп^в^-■в1в07)”=Цп_1Цп_2 ■■■Ц1Ц0.

Доказательство'. Если программы г]'п0т/" и 7гх л-т эквивалентны, то ОеС(г]'л0г1") =/)еС(7г1). Поскольку ИЬ(а) 6 £>е£:(т)'п0т)") , в программе 7ГХ существует такая трасса /5, что кк(а) = Значит, трасса /? должна

иметь ту же самую логическую характеристику, что и трасса а, и при этом последние пары в последовательностях ик(а) и /£/?(/?) должны быть одинаковыми. Отсюда следует указанное в формулировке леммы равенство композиций подстановок. ОЕБ

Теорема 2. Задача двусторонней унифицируемости программ относительно л-т эквивалентности является М3-полной.

Доказательство. ЫР-трудность этой задачи следует из теоремы 1, поскольку задача унифицируемости подстановок является частным случаем задачи унифицируемости программ. О принадлежности задачи двусторонней унифицируемости программ классу сложности ЫР свидетельствует следующий недетерминированный алгоритм решения этой задачи за полиномиальное время. В программе п0 нужно выбрать кратчайшую трассу

И ВЫЧИСЛИТЬ КОМПОЗИЦИЮ подстановок в = вп_гвп_2 ■■■ 01 бо- Очевидно, что это вычисление можно осуществить за время линейное относительно размера программы 7г0. Затем в программе я, нужно выбрать трассу

Р = у' —^—>у'—>у' ——ст"-г’/'-2 >у'ч —>уп

имеющую ту же самую логическую характеристику, что и трасса а. Согласно лемме 4 такая трасса существует и определяется однозначно. Затем для трассы Р нужно вычислить композицию подстановок [і = ііп-іііп-2 '"ИіИо • Это вычисление также осуществимо за время, полиномиальное от размера программы пг. Далее, опираясь на лемму 4, нужно вычислить двусторонний унификатор подстановок в и /./. Согласно лемме 1 это вычисление

(угадывание) можно осуществить недетерминированным алгоритмом за полиномиальное время. В заключение нужно проверить л-т эквивалентность программ г)'п0г)" и я,. Согласно результатам статей [2,9] такую проверку можно провести за время, полиномиальное относительно размеров этих программ. ОЕБ 262

6. Заключение

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

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

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

Список литературы

[1] Захаров В.А., Новикова Т.А.. Применение алгебры подстановок для унификации программ // Труды Института системного программирования РАН, - 2011. - т. 21 -с. 141-166.

[2] Захаров В.А., Новикова Т.А.. Полиномиальный по времени алгоритм проверки логико-термальной эквивалентности программ. // Труды Института системного программирования РАН, - 2012. - т. 22 - с. 435-455.

[3] Захаров В.А., Новикова Т.А.. Унификация программ. // Труды Института системного программирования РАН, - 2012. - т. 23 - с. 455-476.

[4] Novikova Т. A., Zakharov V.A. Is it possible to unify programs? // Proceedings of the 27-th International Workshop on Unification, Epic Series. - 2013. - v. 19 - p. 35-45.

[5] Baader F., Snyder W. Unification theory // In J.A. Robinson and A. Voronkov, editors, Handbook of Automated Reasoning. — 2001. — v. 1 — p. 447-533.

[6] 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.

[7] Котов B.E., СабельфельдВ.К. Теория схем программ. —М.:Наука, 1991. — 348 с.

[8] Иткин В.Э. Логико-термальная эквивалентность схем программ // Кибернетика. — 1972. — N1,— с. 5-27.

[9] Сабельфельд В.К. Полиномиальная оценка сложности распознавания логикотермальной эквивалентности // ДАН СССР. — 1979. — т. 249, N 4. — с. 793-796.

[10] Фаулер М. Рефакторинг. Улучшение существующего кода. — Символ-Плюс,

2008.—432 с.

[11] 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.

[12] Roy С. K., Cordy J. R. A survey on software clone detection research // Technical report TR 2007-541, School of Computing, Queen’s University. — 2007. — v. 115.

[13] Robinson J.A. A machine-oriented logic based on the resolution principle // Journal of the ACM. 1965 —v. 12, N 1. — p. 23-41.

[14] Knight K. Unification: a multidisciplinary survey // ACM Computing Surveys — 1989.

— v. 21— N1— p. 93-124.

[15] Baxter L.D. An efficient unification algorithm // Technical Report CS-73-23, Dep. of Analysis and Comp. Sci., University of Waterloo, Ontario, Canada, 1973.

[16] Paterson M.S., Wegman M.N. Linear unification // The Journal of Computer and System Science. — 1978. — v. 16, N 2 — p. 158-167.

[17] Martelli A., Montanari U. An efficient unification algorithm //ACM Transactions on Program, Languages and Systems. — 1982. — v. 4, N 2 — p. 258-282.

[18] 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.

[19] Herold A., Sieckmann J. Unification in Abelean semigroups // Jomal of Automated Reasoning. — 1983. —p. 247-283.

[20] Lincoln P., Christian J. Adventures in associative-commutative unification //Journal of Symbolic Computation. — 1989. — v.8. — p. 393 — 416.

[21] Eder E. Properties of substitutions and unifications // Journal of Symbolic Computations.

— v. 1, — 1985.—p. 31-46.

[22] Lewis C.H. Complexity of solvable cases of the decision problem for predicate calculus // Proceedings of the 19-th Annual Symposium on Foundations of Computer Science -1978-p. 35-47.

[23] Zakharov V.A. On the decidability of the equivalence problem for orthogonal sequential programs // Grammars. - 2000. - v. 2 - N 3. - p. 271-281.

[24] Wang Hao. Proving theorems by pattern recognition // Bell System Technical Journal. -1961.-v. 40.-Nl.-p. 1-41.

[25] Berger R. The undecidability of domino problem // Memoirs of American Mathematical Society - v. 66.

[26] Lewis C.H., Papadimitriou C.H. Elements of the Theory of Computation - Prentice Hall, Englewood Cliffs, 1981.

[27] Itkin V.E., Zwinogrodski Z. On program schemata equivalence // Journal of Computer and System Science. - 1972. - v.6. - N 1. - p. 88-101.

Two-sided program unification and its application to program refactoring

T.A. Novikova

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Kazakhstan Branch of Lomonosov Moscow State University, Astana, Kazakhstan

taniaelf@mail. ru

VA.Zakharov

ISP RAS, Moscow, Russia

[email protected]

Annotation. It is generally accepted that to unify a pair of substitutions 8X and 62 means to find out a pair of substitutions r}' and rj" such that the compositions 6and 62r)" are the same. Actually, unification is the problem of solving linear equations of the form 0xX = 62Y in the semigroup of substitutions. But some other linear equations on substitutions may be also viewed as less common variants of unification problem. In this paper we introduce a two-sided unification as the process of bringing a given substitution 8X to another given substitution 02 from both sides by giving a solution to an equation XO-^Y = 62. Two-sided unification finds some applications in software refactoring as a means for extracting instances of library subroutines in arbitrary pieces of program code. In this paper we study the complexity of two-sided unification for substitutions and programs. In Section 1 we discuss the concept of unification on substitutions and programs, outline the recent results on program equivalence checking that involve the concept of unification and anti-unification, and show that the problem of library subroutine extraction may be viewed as the problem of two-sided unification for programs. In Section 2 we formally define the concept of two-sided unification on substitutions and show that the problem of two-unifiability is NP-complete (in contrast to P-completeness of one-sided unifiability problem). NP-hardness of two-sided unifiability problem is established in Section 4 by reducing to it the bounded tiling problem which is known to be NP-complete; the latter problem is formally defined in Section 3. In Section 5 we define two-sided unification of sequential programs in the first-order model of programs supplied with strong equivalence (logic&term equivalence) of programs and proved that this problem is NP-complete. This is the main result of the paper.

Keywords: program, strong equivalence, substitution, complexity, tiling problem, NP-completeness.

References

[1] Zakharov V.A., Novikova T.A. Primininie algebry podstanovok dlya unifikacii program [On the application of substitution algebra to program unification], Trudy ISP RAN [The Proceedings of ISP RAS], 2011, vol. 21, p. 141-166 [in Russian],

[2] Zakharov V.A., Novikova T.A. Polynomialniy po vremeni algoritm proverki logiko-termalnoy ekvivalentnosti program [Polynomial time algorithm for checking strong

equivalence of program], Trudy ISP RAN [The Proceedings of ISP RAS], 2012, vol. 22, p. 435-455 [in Russian],

[3] Zakharov V.A., Novikova T.A. Unifikaciya program [Program unification], Trudy ISP RAN [The Proceedings of ISP RAS], 2012, vol. 23, p. 455-476 [in Russian] ,

[4] Novikova T.A., Zakharov V.A. Is it possible to unify programs? // Proceedings of the 27-th International Workshop on Unification, Epic Series. - 2013. - v. 19 - p. 35-45.

[5] Baader F., Snyder W. Unification theory. In J.A. Robinson and A. Voronkov, editors, Handbook of Automated Reasoning, 2001, v. 1, p. 447-533.

[6] Luckham D.C., Park D.M., Paterson M.S. On formalized computer programs // Journal of Computer and System Science. 1970, vol. 4, N 3, p. 220-249.

[7] Kotov V.E. Sabelfeld V.K. Teoriya skhem program [Theory of program schemata]. Moscow, “Nauka”, 1991, 348 p.

[8] Itkin V.E. Logical-termal equivalence of program schemata. Proceedings of the International Sympoisum on Theoretical Programming, 1972, p. 127-143.

[9] Sabelfeld V.K. The Logic-Termal Equivalence is Polynomial-Time Decidable. Information Processing Letters, 1980, vol. 10, N 2, p. 57-62.

[10] FaulerM. Refactoring: Improving the design of existing code. 1999, Addison Wesley.

[11] 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.

[12] Roy C. K., Cordy J. R. A survey on software clone detection research. Technical report TR 2007-541, School of Computing, Queen’s University, 2007, vol. 115.

[13] Robinson J.A. A machine-oriented logic based on the resolution principle. Journal of the ACM, 1965, vol. 12, N1, p. 23-41.

[14] Knight K. Unification: a multidisciplinary survey. ACM Computing Surveys. 1989, vol. 21, N1, p. 93-124.

[15] Baxter L.D. An efficient unification algorithm. Technical Report CS-73-23, Dep. of Analysis and Comp. Sci., University of Waterloo, Ontario, Canada, 1973.

[16] Paterson M.S., Wegman M.N. Linear unification. The Journal of Computer and System Science. 1978, vol. 16, N2, p. 158-167.

[17] Martelli A., Montanari U. An efficient unification algorithm. ACM Transactions on Program, Languages and Systems. 1982, vol. 4, N 2, p. 258-282.

[18] 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.

[19] Herold A., Sieckmann J. Unification in Abelean semigroups. Journal of Automated Reasoning. 1983, p. 247-283.

[20] Lincoln P., Christian J. Adventures in associative-commutative unification. Journal of Symbolic Computation. 1989, vol. 8, p. 393-416.

[21] Eder E. Properties of substitutions and unifications. Journal of Symbolic Computations, vol. 1, 1985, p. 31-46.

[22] Lewis C.H. Complexity of solvable cases of the decision problem for predicate calculus. Proceedings of the 19-th Annual Symposium on Foundations of Computer Science, 1978, p. 35-47.

[23] Zakharov V.A. On the decidability of the equivalence problem for orthogonal sequential programs. Grammars. 2000, vol. 2, N 3, p. 271-281.

[24] Wang Hao. Proving theorems by pattern recognition. Bell System Technical Journal. 1961, vol. 40, N1, p. 1-41.

[25] Berger R. The undecidability of domino problem. Memoirs of American Mathematical Society, v. 66.

[26] Lewis C.H., Papadimitriou C.H. Elements of the Theory of Computation - Prentice Hall, Englewood Cliffs, 1981.

[27] Itkin V.E., Zwinogrodski Z. On program schemata equivalence. Journal of Computer and System Science. 1972, vol. 6, N 1, p. 88-101.

i Надоели баннеры? Вы всегда можете отключить рекламу.