Научная статья на тему 'Заметка об автоматическом решении квадратичных уравнений в словах'

Заметка об автоматическом решении квадратичных уравнений в словах Текст научной статьи по специальности «Математика»

CC BY
249
22
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
суперкомпиляция / уравнения в словах / анализ программ / supercompilation / word equations

Аннотация научной статьи по математике, автор научной работы — Антонина Николаевна Непейвода

При анализе программ, оперирующих строками, естественным образом возникает задача решения уравнений в словах. На практике часто встречаются такие уравнения, содержащие, самое большее, два вхождения каждой переменной, — так называемые квадратичные уравнения. Для их решения Ю.И. Хмелевским в 1971 году предложен интуитивно ясный алгоритм, имеющий экспоненциальную сложность. В 1999 году В. Дьекертом показано, что задача решения квадратичного уравнения является NP-трудной. В данной заметке изложены и показаны на примерах способы упрощения классического алгоритма Хмелевского, позволяющие добиться лучшей его применимости в автоматическом анализе программ.

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

On solving quadratic word equations

Word equations are natural constraints in an automatic analysis of string manipulating programs. In particular, equations with at most two occurrences of each variable (quadratic word equations) are of interest of the analysis. The algorithm solving such equations with the exponential complexity is given by Yu. Hmelevskij in 1971. V. Diekert in 1999 proved that the satisfiability problem for the quadratic word equations is NP-hard. In this paper we suggest some refinements of Hmelevskij’s algorithm to make it more applicable in the automatic analysis of programs. We consider the length analysis and splitting procedures and show when these refinements can be used to extract explicit solutions of the equations and when they can be used only for deciding satisfiability. (In Russian).

Текст научной работы на тему «Заметка об автоматическом решении квадратичных уравнений в словах»

УДК 510.52

А. Н. Непейвода

Заметка об автоматическом решении квадратичных уравнений в словах

Аннотация. При анализе программ, оперирующих строками, естественным образом возникает задача решения уравнений в словах. На практике часто встречаются такие уравнения, содержащие, самое большее, два вхождения каждой переменной, — так называемые квадратичные уравнения. Для их решения Ю. И. Хмелевским в 1971 году предложен интуитивно ясный алгоритм, имеющий экспоненциальную сложность. В 1999 году В. Дьекертом показано, что задача решения квадратичного уравнения является NP-трудной. В данной заметке изложены и показаны на примерах способы упрощения классического алгоритма Хмелевского, позволяющие добиться лучшей его применимости в автоматическом анализе программ.

Ключевые слова и фразы: суперкомпиляция, уравнения в словах, анализ программ.

Введение

В последнее время возрос интерес исследователей к автоматическому анализу программ, оперирующих строковыми данными [1—5]. Простейший практический пример таких программ: скрипты анализа и изменения содержимого веб-страницы. Сложность анализа таких программ состоит в том, что язык, содержащий встроенный ассоциативный конструктор приписывания и оператор replace, алгоритмически полон. Поэтому в подобных исследованиях рассматриваются частные случаи языков над строковым типом данных, для которых задачу автоматической проверки свойств программ удается сделать разрешимой. В частности, таковы языки над строками не больше определенной длины и языки, содержащие регулярные операции.

Исследование выполнено при финансовой поддержке РФФИ в рамках научного проекта №17-07-00285_а и госзадания ФАНО России № АААА-А16-116021760039-0.

© А. Н. Непейвода, 2018

© Институт программных систем имени А. К. Айламазяна РАН, 2018 © Программные системы: теория и приложения (дизайн), 2018

ПЯ 10.25209/2079-3316-2018-9-2-3-21 <£УЩ'

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

Пример 1. Рассмотрим фрагмент программы:

- Some Language —

1 string x,y;

2 ...

3 if (x=y)

4 then

5 ...

6 else

7 ...

Пусть х = и V, у = V и, и и V — произвольные параметры типа строка. Тогда для разрешения вопроса, по какой ветке будет исполнена программа, необходимо найти множество таких пар (и, V}, что V и = uv.

Равенство V и = и V и есть уравнение в словах. Его решения (корни) — все такие строки — значения параметров и и V, при подстановке которых в уравнение оно превращается в буквальное равенство.

Уравнения в словах описывают класс языков, не поддающийся классификации в рамках иерархии Хомского [6]. Поэтому попытки описать множество решений уравнения, например, автоматными языками заведомо потребуют перехода к приближениям, причем даже в простейших случаях [4]. Нами предлагается альтернативный подход: рассматривать сами уравнения в словах как язык описания свойств значений параметров (подобно регулярным или контекстно-свободным языкам). В рамках этого подхода необходимо научиться выбирать наиболее простые выразительные средства внутри данного языка, то есть уметь упрощать уравнения.

В данной заметке будет рассмотрен один частный класс уравнений в словах: так называемые квадратичные уравнения, каждая переменная в которых имеет не более двух вхождений (в частности, таково и уравнение vu = uv). Хотя проблема существования корней квадратичного уравнения является МР-трудной [7], существует простой алгоритм решения таких уравнений, описанный впервые Ю.И. Хмелевским [8]. Поскольку квадратичные уравнения чаще прочих появляются при анализе программ над строковыми данными, имеет смысл рассмотреть

некоторые способы упрощения их решения методом Хмелевского. Нами будут предложены общие методы преобразования и упрощения уравнений, которые помогают ответить на вопрос о существовании их корней, а также найти более краткое описание множества этих корней. Все описанные ниже алгоритмы применены в модельном суперкомпиляторе MSCP-A для языка Рефал.

1. Квадратичные уравнения в словах

Пусть даны алфавит констант A и алфавит строковых переменных1

V.

Пусть Ф и Ф (возможно, с индексами) — произвольные строки из алфавита A U V; е — пустая строка; u, v (возможно, с индексами) — переменные; A, B,... — буквы. Запись subst(B, а) означает применение к слову © подстановки а.

Определение 1. Уравнение в словах — равенство вида Ф = Ф, где Ф, Ф € {A U V}*.

Решить уравнение в словах — найти все такие подстановки а : V ^ {A}*, что строки subst^,a) и subst^,a) совпадают побуквенно.

Уравнение Ф = Ф квадратичное, если ни одна переменная из V не входит в Ф = Ф более, чем дважды.

Пример 2. Уравнение A u = u A является квадратичным. Множество его решений (корней): u € {е, A, A A, AAA,..., A ... A,... }.

k

Слово A A... A также называется n-ой степенью слова A. Если

4-v-'

n

считать, что нулевая степень любого слова — пустое слово, то можно сказать, что множество решений уравнения A u = u A есть множество степеней A.

Уравнение ui ui = щ ui щ не является квадратичным (переменная ui входит в него трижды).

Как установил Г. С. Маканин [9], проблема существования корней уравнений в словах разрешима. Множество решений уравнения в общем виде представляется графом сложной структуры, который мы в данной заметке будем называть графом развертки уравнения.

1В модельном суперкомпиляторе MSCP-A также используются символьные переменные, пробегающие все множество A. Все алгоритмы, описанные в данной заметке, могут быть применены к уравнениям, содержащим символьные переменные произвольной кратности.

Существует простая лемма2 (см., например, [11]), с помощью которой можно решить вопрос о существовании корней квадратичного уравнения.

Предложение 1 (Лемма Леви). Рассмотрим уравнение

и Ф = V Ф.

Тогда либо3 и = V, либо и = V их, либо V = и VI.

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

Алгоритм 1 (Алгоритм Хмелевского решения квадратичного уравнения в словах). Пусть дано уравнение Ф = Ф. Поместим его в корневую вершину дерева и назначим корневую вершину дерева текущей вершиной. Далее В[г] — г-я буква слова В, 1еп§'ЪЬ(В) — длина

е.

Рассмотрим первые буквы слов Ф и Ф в алфавите А и V, Ф[1] и Ф[1] соответственно. Суффиксы Ф и Ф длиной 1еп§'ЪЬ(Ф) — 1 и 1еп§-ЪЬ(Ф) — 1 обозначим как Ф' и Ф'.

(1) Рассматриваем все вершины на пути от текущей к корню. Если хотя бы в одной из них записано уравнение Ф = Ф, строим обратное ребро от текущей вершины к данной (на рисунках — пунктиром), помечаем текущую вершину как вычисленную и пропускаем все шаги алгоритма, кроме двух последних. В противном случае переходим к шагу развертку, уравнения (шагам 2-8).

(2) Если Ф = £, Ф = £, помещаем в вершину значение Т и помечаем ее как вычисленную. Пути от данной вершины к корню соответствуют решениям исходного уравнения.

(3) Если Ф = £, Ф[1] — буква, уравнение не имеет решений. Удаляем текущую вершину. Аналогично если Ф = £, Ф[1] — буква.

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

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

(4) Если Ф = е, Ф[1] — переменная, то переменная Ф[1] обязана принимать значение е. Строим дочернюю вершину, содержащую уравнение е = БиЪБ^Ф', Ф[1] ^ е). Случай Ф = е, Ф[1] — переменная обрабатывается аналогично.

(5) Если Ф[1] и Ф[1] неравные буквы, уравнение не имеет решений. Удаляем текущую вершину.

(6) Если Ф[1] = Ф[1], сокращаем их и заменяем уравнение в узле на уравнение Ф' = Ф'.

(7) Если Ф[1] — буква А, Ф[1] — переменная и, то либо переменная и пуста, либо она начинается на А. Помечаем текущую вершину как вычисленную и строим к ней два дочерних узла:

• А БиЪБ^Ф', и ^ е) = БиЪБ-ь(Ф', и ^ е);

• БиЪБ-Ь(Ф', и ^ А и) = и БиЪБ-Ъ(Ф', и ^ А и).

Случай, когда Ф[1] — переменная, Ф[1] — буква, обрабатывается аналогично.

(8) Если Ф[1] и Ф[1] — разноименные переменные и и V, согласно лемме Леви существует три возможности: либо и и V принимают одинаковые значения, либо значение одной из них является префиксом значения другой. Текущая вершина помечается как вычисленная и строятся три дочерних узла:

• БиЪБ"Ъ(Ф', и ^ V) = БиЪБ"Ъ(Ф', и ^ V);

• БuЪБt(Ф', V ^ и V) = V БиЪБ"Ъ(Ф', V ^ и V).

• и БuЪБt(Ф', и ^ V и) = БuЪБt(Ф', и ^ V и).

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

(10) Выбираем в качестве текущей вершины любой невычисленный лист. Если таковых не оказалось, граф развертки уравнения построен.

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

(и А.у = у А. и) .—к

I

(иАу = Ауи) Т (А и у = у А и)

Рис. 1. Начало развертки уравнения и Av = V А и

/ ^и Аь = у А гЛ^

—Г^—

I и—Щи I \

и—\

I -^ I

| (ц А « = А у и) Т

I

и—кА. и и—(А.ЧУ = |)Ав)

Аи = г) Ац) Т

X

Т (и А у = у А и)

Рис. 2. Граф развертки уравнения и Av = V А и

Пример 3. Покажем, как работает Алгоритм 1, на примере уравнения и Л« = V А и.

Первые термы левой и правой части уравнения — переменные, причем неравные. Поэтому применяем шаг 8 и строим тройное расщепление (см. рис. 1).

Уравнение V А V = V А V, полученное подстановкой и ^ V, тривиально и порождает лист Т. К остальным двум уравнениям применяется шаг 7.

Оба уравнения, полученные подстановками и ^ е, V ^ е, тривиальны. Уравнения, полученные подстановками и ^ А и, V ^ А V, буквально повторяют исходное, поэтому можно провести из них обратные ребра к корню. Граф развертки уравнения показан на рисунке 2.

Данный граф содержит листы, содержащие значение Т, поэтому исходное уравнение имеет решения. Однако структура этих решений нерегулярна (и = (ад А)" ад, V = (ад А)т ад, ад — строковый параметр), поэтому кратким описанием их множества может выступать само исходное уравнение.

Конечность шагов работы алгоритма Хмелевского вытекает из следующего утверждения.

Предложение 2. Пусть дано квадратичное уравнение Ф = Ф, 1еп§ЪЬ(Ф)+ 1еп§ЪЬ(Ф) = N. После шагов 2-8 Алгоритма 1 все дочерние

схз

(_-!-_) (иВВиА = В и В В и)

+!в и {

Рис. 3. Бесконечный граф развертки неквадратичного уравнения

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

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

Пример 4. Пусть дано уравнение и и А = В и и. Начнем осуществлять его развертку по Алгоритму 1 (см. рис. 3). В данном случае на схеме ветви развертки, приведшие к противоречию, не удаляются, а помечаются знаком

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

2. Методы упрощения уравнений в применении к квадратичным

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

В данном разделе мы оценим способы упрощения уравнений общего вида, применяемые в ИБСР-Л, с точки зрения упрощения графов развертки для квадратичных уравнений. Пытаться упрощать уравнение имеет смысл на каждом шаге развертки графа: это может существенно сократить его размер. Поскольку задача решения квадратичного уравнения относится к переборным (МР-трудна), то поиск простых и эффективных эвристик для ее решения практически важен.

В работах [11,12] предлагаются следующие общие способы упрощения уравнений. Они же применяются в ИБСР-Л.

(и и А = В и ц) V

(цВиА = ВиВц)

> ь...................... и-кВ и

(1) Расщеплять по префиксам или суффиксам. Если у левой и правой части уравнения выделяются префиксы (суффиксы) заведомо одинаковой длины, то такие префиксы (суффиксы) равны между собой, и уравнение можно разбить на несколько более простых.

(2) Оценивать длины. Можно написать линейное диофантово уравнение, описывающее взаимосвязь между длинами переменных в уравнении. Исходя из свойств этого уравнения, можно отсечь некоторые ветви графа развертки.

Проанализируем оба метода упрощения в применении к квадратичным уравнениям.

2.1. Расщепление

При расщеплении уравнений важнейшую роль играет свойство 'равносоставленности их частей.

Определение 2. Два слова Ф1, Ф2 равносоставлены, если они состоят из одного и того же набора переменных (с равным числом вхождений), и количество букв алфавита констант в Ф1 и Ф2 совпадает. Сами буквы совпадать не обязаны.

Если слова Ф1 и Ф2 равносоставлены, то 1еп§ЪЬ(Ф1) = 1еп§ЪЬ(Ф2). Рассмотрим следующие два способа расщепления уравнений.

(1) Можно выделять из левой и правой частей уравнения равно-составленные префиксы или суффиксы. В случае, например, равносоставленных префиксов такое уравнение имеет вид

Ф1 Ф2 = Ф1 Ф2 1еп§ЪЬ(Ф1) = 1еп§ЪЬ(Ф1).

Тогда ф = Ф,, I е {1, 2}.

Например, если и1 А и2 = В и1 из, то и1 А = В и1.

Такой способ расщепления назовем расщеплением по равносоставленности.

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

равносоставлены с суффиксами. Такое уравнение имеет вид

Ф1 Ф2 Ф3 = Ф1 Ф2 Ф3

1е^-ЬЬ(Ф1) = 1ength(Ф3), length(Ф1) = length(Ф3),

1ength(ф2) = 1ength(Ф2).

Значит, 1ength(Фl) = 1ength(Фl), и исходное уравнение расщепляется на три: Ф® = Ф® (г € {1, 2, 3}).

Например, если и1 ш А и1 = щ А 'шщ, то и1 = и2, ш А = А ш.

Такой способ расщепления назовем расщеплением по кратности 4.

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

Пример 5. Уравнение и и = А V В V разбивается по кратности на два: и = А V и и = В V. Каждое из них имеет корни, а исходное уравнение корней не имеет.

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

Пример 6. Пусть решается система и А = А и и V А V = и, причем развертка начинается с первого уравнения. Результат развертки изображен на рис. 4. Видно, что лист после подстановки и ^ е ведет к противоречию (хотя исходная система имеет корни). Происходит это потому, что вложение узла после подстановки и ^ А и в родительский не может быть осуществлено простой переименовкой: хотя первое уравнение системы {и А = А и, V А V = А и} точно повторяет исходное, второе имеет дополнительное вхождение буквы А.

4Расщепление квадратичных уравнений по кратности может происходить только указанным выше способом. Но в общем случае число равносоставленных подслов в одной части уравнения может быть и больше двух. Например, уравнение и V V и V и = А т т т т В т С т расщепляется на три: иь = А т т, V и = т т В,

V и = т С т.

и А = А и у А у = и

(у А V = е)

V—>-е

ХиА = Аи уА у = А и

т

Рис. 4. Нетривиальная совместная развертка уравнений

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

Предложение 3.

(1) Пусть квадратичное уравнение Ф1 Ф2 = Ф1 Ф2 было расщеплено по равносоставленности префиксов Ф1 и Ф1. Тогда множество переменных, входящих в Ф1 = Ф1, не пересекается с множеством переменных, входящих в Ф2 = Ф2.

(2) Пусть квадратичное уравнение Ф1 Ф2 Фз = Ф1 Ф2 Фз было расщеплено по кратности. Тогда граф развертки уравнения Ф1 = Ф1 (и Фз = Фз) не содержит обратных ребер.

Доказательство.

(1) Поскольку слова Ф1 и Ф1 равносоставлены, то каждая переменная входит либо в оба этих слова, либо ни в одно. Если она входит в оба слова Ф1 и Ф1, то она имеет уже два вхождения в исходное уравнение, а значит, не может входить в Ф2 или Ф2.

(2) Поскольку слова Ф1 и Фз равносоставлены, каждая переменная, входящая в них, входит в них по разу и не имеет других вхождений в исходное уравнение. Аналогичное замечание справедливо в отношении Ф1 и Фз. Поэтому в уравнении Ф1 = Ф1 в каждой части не будет повторных переменных, и не будет переменных, входящих сразу в правую и левую часть. Значит, уравнение Ф1 = Ф1 линейно (все переменные в нем имеют кратность 1). Шаг

(из А = В гад)"*

\

\

из->Виз ^ (ад их = их гад)

\-<

(из А = В из) «о -»«1 «о

/ I \

ио—>111 \ ^

(гад их = уд) (иг = уд) (гад их = их гад)

ио—

ио~^П2 Щ I 1*2

(гад их = е) (¡¿1 = е) (их = иг)

Рис. 5. Графы развертки для уравнений А и3 = и3 В и и0 их = их и2

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

Предложение 3 показывает, как можно работать с расщепленными квадратичными уравнениями. Уравнения, полученные расщеплением по равносоставленности, можно решать по очереди независимо друг от друга. Уравнения, полученные расщеплением по кратности, решаются совместно (в системе)5. И в том, и в другом случае получается существенный выигрыш по размеру графов развертки уравнений по сравнению с графом развертки нерасщепленного уравнения.

Пример 7. Уравнение ио и\ А из = и\ и2 из В разбивается на два по равносоставленности: ио щ = щ и2 и А из = из В. Графы развертки этих уравнений приведены на рис. 5. Для уравнения ио и\ = и\ и2 граф неполный, однако по нему видно, что существуют минимум четыре6 вершины в дереве, содержащие значение Т. Поскольку уравнение А из = из В не порождает вершин, содержащих Т, то корней у него нет.

Если бы мы решали вместо двух разделенных уравнений одно слитное, то каждый лист графа развертки, соответствующий листу графа развертки уравнения ио и\ = и\ и2, содержащему значение Т, либо такому, уравнение в котором содержит хотя бы с одной

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

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

Рис. 6. Граф развертки для совместного решения уравнений

V = и1 и2 и V = и2 «1

из сторон е, продолжался бы разверткой уравнения А из = из В (возможно, с некоторым префиксом). Граф развертки уравнения (свидетельствующий об отсутствии решений) получился бы значительно больше.

Пример 8. Уравнение и1 и2 А и2 и1 = V А V удовлетворяет условию разбиения по кратности: Хе^Ъ^и! щ) = Хеп§ЪЬ(и2 и1), длины центральных частей (буква А) очевидно равны, так же, как и префикс и суффикс правой части. Исходя из этого, и! и2 = V и и2 и! = V (и А = А, что тривиально). Граф развертки системы этих уравнений приведен на рис. 6. Он неполон: вершины, в которых остается только одно уравнение, дальше не раскрываются. По графу видно, что, если произвести все указанные на ребрах подстановки, он описывает два простых семейства решений уравнения (первое из которых является подмножеством второго):

|(иь и2, V= и! & и2 = е},

|(и1, и2, V= и! и2 & и! и2 = и2 и!}. Поскольку граф развертки системы уравнений не имеет обратных ребер, семейство его решений описывается как дизъюнкция семейств решений уравнений, находящихся в его узлах. Поэтому исходная

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

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

2.2. Оценка длин значений переменных

Как в Примере 7, так и в Примере 8 граф развертки уравнения дополнительно разрастается из-за существования общих корней по различным его ветвям. В частности, на рис. 5 первая и вторая ветви, исходящие из узла ио и! = и2, описывают одно и то же решение, как и на рис. 6 все три ветви, исходящие из узла V = и2, и! V = и2 и1. Причина такой избыточности кроется в формулировке леммы Леви (Предложение 1), используемой в алгоритме Хмелевского: подстановки и ^ V, и ^ V«, V ^ «V имеют непустое пересечение. Можно сделать его пустым, введя понятие буквенной переменной в и с помощью него дополнительно уточнив подстановки до и ^ V в и, V ^ ив«. Но в этом случае графы развертки многих уравнений становятся более громоздкими7 (в чем можно убедиться, например, для уравнения и V = V и).

От ряда повторных разверток можно избавиться, если заметить, что некоторые ветви развертки можно сразу обрезать исходя из оценки длин значений переменных. Например, если ио и! = и2, ветвь ио ^ и2 ио порождает то же множество решений, что и ветвь ио ^ и2 (а значит, может быть обрезана), потому что длина значения переменной ио заведомо не больше длины значения и2. Анализ длин левой и правой части показывает, что уравнение ио и! ... ип А = и! ... ип ио не имеет корней (его левая часть имеет заведомо большую длину из-за вхождения константы А). Поэтому, чтобы сократить развертку уравнения Ф = Ф, имеет смысл воспользоваться результатами анализа линейного диофантова уравнения 1еп§ЪЬ(Ф) = 1еп§ЪЬ(Ф).

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

V = и\ 42

V = «2 «1

£ = «2 ^^ « = И2

V = и2 V 1 I 111 I) = «2 111

[ И1 112 = И2 Щ)

Рис. 7. Сокращенный граф развертки для совместного решения уравнений V = «1 и2 и V = «2 «1

С точностью до перестановки левой и правой частей, такое уравнение имеет вид

а+к1 *1еп§'ЬЬ(«1) + - • •+кп*1е^-ЬЬ(«п) = 11 ) + • • ^¿т^е^-Ш^т),

причем кг, € {1, 2} и щ = (повторные вхождения одной и той же переменной в левую и правую части сокращаются).

Если в таком уравнении т = 1 и для некоторого г к < /1, то можно сделать вывод, что Хе^'ЪЬ^) < 1еп§'Ь(у1). Если к тому же а = 0, то неравенство строгое. Это позволяет обрезать недостижимые и повторные ветви развертки, если уравнение Ф = Ф имеет вид щ Ф' = у1 Ф'.

Пример 9. После оценки длин значений переменных граф развертки системы уравнений у = «1 и у = И1 стал значительно меньше (риа 7).

Наконец, уравнение 1еп§'Ь(Ф) = 1еп§'Ь(Ф) может порождать разбиение уравнения Ф = Ф, являющееся в некотором роде обобщением описанных ранее разбиений. А именно, если Ф = Ф1 Ф2, Ф = Ф1 Ф2 и исходя из анализа уравнения 1еп§'Ь(Ф) = 1еп§'Ь(Ф) может быть доказано уравнение 1еп§'Ь(Ф1) = 1еп§'Ь(Ф1), то Ф1 = Ф1, Ф2 = Ф2.

Пример 10. Рассмотрим уравнение «1 у «2 »^2 И1 = у из из ». По кратности или равносоставленности оно не разбивается, но после сокращения подобных членов диофантова уравнения на длины имеем:

2 * 1еп§'ЪЬ(и1) + 2 * 1еп§'Ь(и2) = 2 * 1еп§'Ь(и3).

Таким образом, 1еп§'Ь(и1) + 1еп§'Ь(и2) = 1еп§'Ь(из), а следовательно, «1 у «2 = у и » «2 «1 = из ». Начало развертки системы этих уравнений приведено на рис. 8.

Рис. 8. Начало развертки уравнений ъц V и2 = V и3 и ю и2 ш = и3 ю

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

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

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

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

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

Сходство методов упрощения уравнений в словах путем анализа графа развертки уравнения и методов преобразования программ, основанных на развертке графа вычислений, позволяет использовать общие алгоритмы анализа для обоих классов графов. Подобные аналогии неоднократно возникали при развитии методов суперкомпиляции. Помимо уже упомянутого использования леммы Леви в прогонке [10], укажем также, что идея анализа систем диофантовых уравнений на длины переменных использовалась при построении быстрого отождествления для языка Рефал [15].

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

[1] А. П. Немытых. Суперкомпилятор SCP4: Общая структура, УРСС, М., 2007. t3

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

[2] N. Bjorner, N. Tillmann, A. Voronkov. "Path feasibility analysis for string-manipulating programs", Tools and Algorithms for the Construction and Analysis of Systems, TACAS 2009, Lecture Notes in Computer Science, vol. 5505, eds. Kowalewski S., Philippou A., Springer, Berlin, pp. 307-321.

a

[3] M. T. Trinh, D. H. Chu, J. Jaffar. "Progressive reasoning over recursively-defined strings", Computer Aided Verification, CAV 2016, Lecture Notes in Computer Science, vol. 9779, eds. Chaudhuri S., Farzan A., Springer, 2016, pp. 218-240. I 3

[4] F. Yu, T. Bultan, O. H. Ibarra. "Relational string verification using multitrack automata", Implementation and Application of Automata, CIAA 2010, Lecture Notes in Computer Science, vol. 6482, eds. Domaratzki M., Salomaa K., Springer, 2010, pp. 290-299. 3 4

[5] T. Liang, A. Reynolds, N. Tsiskaridze, C. Tinelli, C. Barrett, M. Deters. "An efficient SMT solver for string constraints", Formal Methods in System Design, 48:3 (2016), pp. 206-234. d 3

[6] J. Karhumaki, W. Plandowski, F. Mignosi. "The expressibility of languages and relations by word equations", Automata, Languages and Programming, ICALP 1997, Lecture Notes in Computer Science, vol. 1256, eds. Degano P., Gorrieri R., Marchetti-Spaccamela A., Springer, 1997, pp. 98-109. 4

[7] J. Karhumaki, H. Maurer, G. Paun, G. Rozenberg (eds.). Jewels are forever. Contributions on theoretical computer science in honor of Alio Salomaa, Springer, 1999, 379 p. J ' 4

[8] Ю. И. Хмелевский. «Уравнения в свободной полугруппе», Тр. МИАН СССР, т. 107, 1971, с. 3-288. 0 4

[9] Г. С. Маканин. «Проблема разрешимости уравнений в свободной полугруппе», Мат,ем. сб., 103(145):2(6) (1977), с. 147-236. ® 5

[10] С. А. Романенко. Прогонка для программ на Рефале-4, Препринт № 211, Институт Прикладной Математики им. М. В. Келдыша АН СССР, 1987,

23 С. UPLl^g 18

[11] J. Karhumaki. Combinatorics of words.

[12] M. Huova. Combinatorics of words. New aspects on avoidability, defect effect, equations and palindromes, Ph.D. Thesis, Turku Centre for Computer Science, 2014, 140 p. @ CJ

[13] M. H. S0rensen. Turchin's supercompiler revisited, Ms. Thesis, Department of Computer Science, University of Copenhagen, 1994, 143 p. (urn) ' 18

[14] A. Jez. "Recompression: a simple and powerful technique for word equations", J. ACM, 63:1 (March 2016), 4, 51 p. d ' 18

[15] С. М. Абрамов, А. Ю. Орлов. «Компиляция в императивные языки синтаксического отождествления языка Рефал», Труды международной конференции «Программные системы: теория и приложения». Т. 1 (ИПС РАН, г. Переславль-Залесский, май 2004), ред. С.М. Абрамов, Физматлит, М., 2004, с. 403-448. @ 18

Рекомендовал к публикации д.ф.-м.н. C. М. Абрамов

Пример ссылки на эту публикацию:

А. Н. Непейвода. «Заметка об автоматическом решении квадратичных уравнений в словах». Программные системы: теория и приложения, 2018, 9:2(37), с. 3-21. 10.25209/2079-3316-2018-9-2-3-21

URL http://psta.psiras.ru//read/psta2018_2_3-21.pdf

Об авторе:

Антонина Николаевна Непейвода

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

[1га 0000-0003-3949-2164 e-mail: a nevod@mail.ru

UDC 510.52

Antonina Nepeivoda. On solving quadratic word equations.

Abstract. Word equations are natural constraints in an automatic analysis of string manipulating programs. In particular, equations with at most two occurrences of each variable (quadratic word equations) are of interest of the analysis. The algorithm solving such equations with the exponential complexity is given by Yu. Hmelevskij in 1971. V. Diekert in 1999 proved that the satisfiability problem for the quadratic word equations is NP-hard. In this paper we suggest some refinements of Hmelevskij's algorithm to make it more applicable in the automatic analysis of programs. We consider the length analysis and splitting procedures and show when these refinements can be used to extract explicit solutions of the equations and when they can be used only for deciding satisfiability. (In Russian).

Key words and phrases: supercompilation, word equations.

References

[1] A. P. Nemytykh. Supercompiler SCP4: general structure, URSS, M., 2007 (in Russian). f3

[2] N. Bjorner, N. Tillmann, A. Voronkov. "Path feasibility analysis for string-manipulating programs", Tools and Algorithms for the Construction and Analysis of Systems, TACAS 2009, Lecture Notes in Computer Science, vol. 5505, eds. Kowalewski S., Philippou A., Springer, Berlin, pp. 307—321. 3

[3] M.T. Trinh, D. H. Chu, J. Jaffar. "Progressive reasoning over recursively-defined strings", Computer Aided Verification, CAV 2016, Lecture Notes in Computer Science, vol. 9779, eds. Chaudhuri S., Farzan A., Springer, 2016, pp. 218-240. 3

[4] F. Yu, T. Bultan, O. H. Ibarra. "Relational string verification using multi-track automata", Implementation and Application of Automata, CIAA 2010, Lecture Notes in Computer Science, vol. 6482, eds. Domaratzki M., Salomaa K., Springer, 2010, pp. 290-299. 3 4

[5] T. Liang, A. Reynolds, N. Tsiskaridze, C. Tinelli, C. Barrett, M. Deters. "An efficient SMT solver for string constraints", Formal Methods in System Design, 48:3 (2016), pp. 206-234. d g

[6] J. Karhumaki, W. Plandowski, F. Mignosi. "The expressibility of languages and relations by word equations", Automata, Languages and Programming, ICALP 1997, Lecture Notes in Computer Science, vol. 1256, eds. Degano P., Gorrieri R., Marchetti-Spaccamela A., Springer, 1997, pp. 98-109. 4

© A. Nepeivoda, 2018

© Ailamazyan Program Systems Institute of RAS, 2018

© Program Systems: Theory and Applications (design), 2018

DSI 10.25209/2079-3316-2018-9-2-3-21 (SSjBS1

[7] J. Karhumaki, H. Maurer, G. Paun, G. Rozenberg (eds.). Jewels are forever. Contributions on theoretical computer science in honor of Arto Salomaa, Springer, 1999, 379 p. 4

[8] Yu. I. Khmelevskii. "Equations in a free semigroup", Proceedings of the Steklov Institute of Mathematics, vol. 107, 1971, pp. 1-270 (in Russian), gl 4

[9] G. S. Makanin. "The problem of solvability of equations in a free semigroup",

Mathematics of the USSR-Sbomik, 32:2 (1977), pp. 129-198. gl 6

[10] C. A. Romanenko. The driving algorithm for programs in Refal-4, Preprint no. 211, Institut Prikladnoy Matematiki im. M.V. Keldysha AN SSSR, 1987 (in Russian), 23 p. .url: 918

[11] J. Karhumaki. Combinatorics of words, url; 6 9

[12] M. Huova. Combinatorics of words. New aspects on avoidability, defect effect, equations and palindromes, Ph.D. Thesis, Turku Centre for Computer Science, 2014, 140 p. url 9

[13] M.H. S0rensen. Turchin's supercompiler revisited, Ms. Thesis, Department of Computer Science, University of Copenhagen, 1994, 143 p. url 18

[14] A. Jez. "Recompression: a simple and powerful technique for word equations", J. ACM, 63:1 (March 2016), 4, 51 p. 18

[15] S. M. Abramov, A. Yu. Orlov. "Compilation of Refal pattern matching to imperative languages", Trudy mezhdunarodnoy konferentsii "Programmnyye sistemy: teoriya i prilozheniya". V. 1 (IPS RAN, g. Pereslavl'-Zalesskiy, may 2004), ed. S. M. Abramov, Fizmatlit, M., 2004, pp. 403-448 (in Russian), {url 18

Sample citation of this publication:

Antonina Nepeivoda. "On solving quadratic word equations". Program Systems: Theory and Applications, 2018, 9:2(37), pp. 3-21. (In Russian).

10.25209/2079-3316-2018-9-2-3-21 url http://psta.psiras.ru//read/psta2018_2_3-21.pdf

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