2010 Вычислительные методы в дискретной математике №1(7)
ВЫЧИСЛИТЕЛЬНЫЕ МЕТОДЫ В ДИСКРЕТНОЙ МАТЕМАТИКЕ
УДК 519.7
АЛГОРИТМЫ РАБОТЫ С ROBDD КАК С БАЗАМИ БУЛЕВЫХ ОГРАНИЧЕНИЙ
А. С. Игнатьев, А. А. Семенов
Институт динамики систем и теории управления СО РАН, г. Иркутск, Россия
E-mail: [email protected], [email protected]
Исследуются алгоритмические свойства сокращенных упорядоченных диаграмм решений (ROBDD) при их рассмотрении в роли баз булевых ограничений в гибридном (SAT+ROBDD)-выводе. Приведены ROBDD-аналоги основных алгоритмических процедур, используемых в DPLL-выводе (подстановки, правило единичного дизъюнкта, CL-процедура, механизмы отсроченных вычислений). Описан новый алгоритм изменения порядка в ROBDD. Для всех алгоритмов приводятся оценки их трудоемкости.
Ключевые слова: логические уравнения, двоичные диаграммы решений, гибридный вывод.
Введение
В последние годы заметен рост интереса к символьным алгоритмам, эффективным на практически важных классах логических уравнений. Особенно впечатляет прогресс в разработке таких алгоритмов для решения задачи ВЫПОЛНИМОСТЬ (SAT-задачи, см. [1]). Этим вопросам посвящены многочисленные конференции и специализированные издания (одной из центральных тем издающегося в Нидерландах журнала JSAT [2] является алгоритмика SAT-задач).
SAT-задачи находят широкое применение в различных разделах прикладной дискретной математики и кибернетики: синтез и верификация дискретных автоматов [3], верификация программных логик [4, 5], криптоанализ [6], задачи информационной биологии [7] и во многих других областях.
Наибольшую эффективность в решении SAT-задач (по результатам специализированных конкурсов [1]) демонстрируют методы, использующие в своей основе алгоритм DPLL (Devis, Putnam, Logemann, Loveland, см. [8]) и последующие его модернизации [9-11]. Главное отличие поздних версий от классического DPLL в том, что в них информация о ходе вывода хранится в форме булевых ограничений-дизъюнктов, запрещающих конфликтные присвоения.
Одной из центральных проблем в современных высокоскоростных SAT-решателях является проблема переполнения памяти генерируемыми в процессе поиска булевыми ограничениями. Вообще говоря, несложно построить семейства противоречивых конъюнктивных нормальных форм (КНФ), для опровержения которых перечисленным алгоритмам потребуется порождать экспоненциальное от размерности КНФ число конфликтных дизъюнктов, однако такие тесты искусственны и далеки по своей природе от реальных практических задач.
На практике проблема переполнения памяти решается при помощи процедур чистки баз ограничений, в результате которых признаваемые нерелевантными ограничения попросту отбрасываются. Однако все заключения о релевантности носят характер эвристик и, как следствие, отбрасывание ограничений в общем случае приводит к потере алгоритмом полноты ввиду невозможности гарантировать окончание его работы на произвольных КНФ. Эффект потери полноты наблюдался на некоторых криптографических тестах и приводил при крупноблочном распараллеливании соответствующих БАТ-задач к «сверхлинейному» ускорению (см. [12]).
В работе [13] для решения проблемы переполнения памяти на задачах обращения дискретных функций был предложен гибридный подход, в котором нехронологический ВРЬЬ-вывод сочетается с выводом на двоичных диаграммах решений (БВВ), а точнее, на сокращенных упорядоченных БВВ, или ИОБВВ.
Настоящая статья посвящена описанию основных алгоритмов работы с ИОВОВ, рассматриваемыми в роли баз булевых ограничений, порожденных в процессе нехронологического ВРЬЬ-вывода. Для всех представленных в работе алгоритмов построены оценки их трудоемкости. Приведем краткий план статьи.
В п. 1 содержатся необходимые сведения об алгоритмах логического вывода на основе ВРЬЬ и их применении к задачам обращения полиномиально вычислимых дискретных функций. Здесь же кратко описываются двоичные диаграммы решений и основные алгоритмы манипулирования булевыми функциями с их помощью.
В п. 2 кратко описаны результаты работы [13] по основам гибридного (БАТ+ ИОБВВ)-подхода к обращению дискретных функций. Приведены (без доказательств) теорема о ядре ВРЬЬ-вывода и теорема, обосновывающая использование ИОВОВ в роли базы булевых ограничений в гибридном (БАТ+ИОБВВ)-выводе на БАТ-задачах, кодирующих проблемы обращения полиномиально вычислимых дискретных функций.
В п. 3 описаны основные алгоритмы работы с ИОБВВ как с базами булевых ограничений в гибридном (БАТ+ИОБВВ)-выводе и даны оценки их трудоемкости. Приведен новый алгоритм изменения порядка в ИОБВВ на произвольный новый порядок. Описаны также ИОБВВ-аналоги основных алгоритмов, используемых в современных БАТ-решателях, базирующихся на ВРЬЬ (подстановка значения переменной, правило единичного дизъюнкта, СЬ-процедура, механизмы отсроченных вычислений при работе с булевыми ограничениями).
1. Базовые понятия, конструкции и алгоритмы
1.1. БАТ-задачи и их алгоритмика
К БАТ-задачам относятся задачи поиска решений логических [14] (булевых) уравнений вида
С(х\,... ,хк) = 1,
где С(хі,...,х&) — формула исчисления высказываний (ИВ), имеющая вид КНФ; Хі,... ,Хк — булевы переменные, образующие множество X. В общей постановке БАТ-задачи МР-трудны, однако к ним сводится настолько обширное множество практически важных задач, что построение эвристических алгоритмов, эффективных на тех или иных классах БАТ-задач, является одной из актуальных областей современной компьютерной алгебры.
Наиболее эффективные на сегодняшний день БАТ-решатели используют в своей основе алгоритм ВРЬЬ и дальнейшие его модификации. В [15] описана архитектура современных скоростных БАТ-решателей, базирующихся на ВРЬЬ. Далее кратко перечислены их основные алгоритмические компоненты.
1) Алгоритм DPLL и его составляющие: правило единичного дизъюнкта, стратегия распространения булевых ограничений (BCP) [8].
2) Графы анализа вывода, процедура «Clause Learning» (далее CL-процедура), смысл которой заключается в конъюнктивном приписывании к текущей КНФ новых ограничений-дизъюнктов, запрещающих приведшие к конфликтам присвоения [9].
3) Процедуры анализа конфликтов и построения конфликтных дизъюнктов [9, 16]. Их предназначение — синтез новых булевых ограничений-дизъюнктов.
4) Механизмы отсроченных вычислений (типа «watched literals», [17]). С их помощью сокращается время, затрачиваемое на подстановку в КНФ значений переменных (в некоторые дизъюнкты, не удовлетворяющие определенным признакам, подстановка не осуществляется).
Использование SAT-решателей с перечисленными компонентами оказалось оправданным даже на таких аргументированно трудных задачах, как задачи обращения некоторых криптографических функций (см. [6, 18]). При этом следует отметить выгодные свойства перечисленных алгоритмов при их крупноблочном распараллеливании (см. [18, 19]).
Здесь мы очень кратко опишем общую схему сведения проблем обращения полиномиально вычислимых дискретных функций к SAT-задачам (более подробное описание можно найти, например, в [20]).
Обозначим через S класс, образованный натуральными семействами вычислимых за полиномиальное время дискретных функций вида f : {0,1}n ^ {0,1}*. Проблема обращения f £ S в произвольной точке у £ range f ставится следующим образом: зная у и алгоритм вычисления f, найти x £ {0,1}n, такой, что f (x) = у. Используя фундаментальную идею С. Кука (см. [21]), можно свести данную задачу к задаче поиска выполняющего набора выполнимой КНФ C(f) над множеством булевых переменных X = {xi,... ,xq(n)}, q(-) —некоторый полином. Именно этот факт лежит в основе многочисленных примеров применения SAT-решателей к задачам обращения дискретных функций. Про КНФ C(f) (которую также будем обозначать через C(x1,... , xq(n))) будем говорить, что она кодирует задачу обращения функции f в точке у £ range f.
1.2. Двоичные диаграммы решений и алгоритмы м а н и п у л и р о в а н и я б у л е в ы м и ф у н к ц и я м и н а и х о с н о в е
Двоичные диаграммы решений (BDD) были введены К. Ли в [22]. Фундаментальность этой структуры данных для дискретной математики была осознана после выхода работы Р. Брайанта [23], в которой он описал семейство алгоритмов «манипулирования» булевыми функциями при помощи BDD.
Двоичные диаграммы решений — это ориентированные ациклические помеченные графы, представляющие булевы функции. Вообще говоря, произвольную BDD можно рассматривать как графическую интерпретацию рекурсивного применения к некоторой булевой функции разложения Шеннона. Однако более наглядным является переход к BDD от двоичных деревьев решений (см. [24]).
Пусть T(f) —некоторое двоичное дерево решений, представляющее всюду определенную булеву функцию f : {0, 1}n ^ {0, 1}. Для определенности можно считать, что f выражена формулой ИВ L(f). Корень и внутренние вершины T(f) помечаются переменными из множества X = {x1,... , xn}, листья помечаются константами из {0,1}. Каждый путь в T(f) из корня в лист определяет некоторую последовательную подстановку значений переменных из X в L(f). Константа, приписанная листу, есть значение
функции f, полученное в результате этой подстановки. Из каждой вершины, помеченной переменной из X, выходят два ребра: пунктирное, что соответствует принятию переменной значения 0, и сплошное, что соответствует принятию ею значения 1. Традиционно используются термины «low-ребра» (для пунктирных) и «high-ребра» (для сплошных). Порядок выбора переменных из X при осуществлении последовательной подстановки будем называть порядком означивания переменных в соответствующем пути. Если в дереве T(f) все пути подчинены общему порядку означивания переменных, то назовем это дерево упорядоченным. Если склеить все листья, помеченные «0», упорядоченного дерева в один и то же самое проделать с листьями, помеченными «1», то получится OBDD (упорядоченная двоичная диаграмма решений). Можно заметить, что каждая вершина в произвольной OBDD определяется тройкой «координат»: переменной из X, которой данная вершина помечена, low-ребенком и high-ребенком (то есть детьми данной вершины по соответствующим ребрам). Вершины, определяемые одинаковыми тройками координат в OBDD, можно склеить. Кроме этого, можно удалить (с сохранением структуры) из OBDD вершины, у которых low-ребенок совпадает с high-ребенком. В результате получим сокращенную упорядоченную диаграмму решений, или ROBDD. Каноническая теорема Р. Брайанта [23] утверждает, что произвольная всюду определенная булева функция f при фиксированном порядке означивания переменных единственным образом (с точностью до изоморфизма графов) представляется ROBDD B(f).
Представление булевых функций в виде ROBDD имеет ряд привлекательных свойств. Во-первых, в силу канонической теоремы, произвольную ROBDD можно рассматривать как «сжатое» представление соответствующей булевой функции в специальном классе графов. Во вторых, используя ROBDD-представления, можно оперировать с булевыми функциями при помощи алгоритмов, большая часть которых была приведена в статье Р. Брайанта [23] (ниже перечислены основные).
1) Алгоритм Apply позволяет на основе ROBDD-представлений функций B(f1) и B(f2) построить ROBDD-представление функции f1 * f2, где * —произвольная бинарная логическая связка. При совпадении порядка означивания переменных в B (f1) и B (f2) сложность Apply ограничена сверху величиной O(|B(f1)|-|B (f2)|) (здесь и далее через |B| обозначается число вершин в ROBDD B).
2) Алгоритм Restrict по ROBDD, представляющей функцию f, выраженную формулой L(f), строит ROBDD-представление функции f|x=a, выраженной формулой L(f)|x=a, для произвольных x £ X и а £ {0,1}. Сложность Restrict есть
O(|B(f )|).
3) Алгоритм Satcount позволяет по ROBDD B(f), представляющей функцию f, подсчитать число векторов значений переменных из X, на которых f принимает значение 1. Сложность Satcount есть O(|B(f)|).
Рассмотрим произвольную систему логических уравнений S следующего вида:
{U1(xb... ,xn) = 1,
Um (x1, . . . , xn) 1.
Под характеристической функцией системы S будем понимать булеву функцию Xs : {0,1}n ^ {0,1}, заданную формулой
Ul(Xl, . . . ,Xn) ■ ... ■ Um(Xl, . . . ,Xn).
Несложно понять, что, имея ИОБВВ-представление функции хя, можно за линейное от числа вершин в данной ИОБВВ время предъявить решение системы Б, либо констатировать ее несовместность.
Алгоритмы работы с ИОБВВ можно использовать для решения задач обращения полиномиально вычислимых дискретных функций напрямую, не переходя к логическим уравнениям (см. [25]). Однако проведенные вычислительные эксперименты показывают, что ИОБВВ-подход проигрывает по эффективности БАТ-подходу на большинстве криптографических тестов. Кроме этого, можно показать (см., например, [26]), что задачи построения ИОБВВ-представлений булевых функций, заданных хорнов-скими КНФ (т. е. КНФ, состоящими из двухбуквенных дизъюнктов), не могут быть в общем случае решены за полиномиальное время в предположении, что Р = ЖР. При этом известно, что БАТ-задачи для таких КНФ решаются за полиномиальное время.
2. Гибридный (SAT+ROBDD)-вывод в применении к задачам обращения
дискретных функций
Как было отмечено выше, использование ИОБВВ «в чистом виде» оправдано лишь на обращении сравнительно простых функций (криптоанализ простейших генераторов типа Геффе). Однако ИОБВВ привлекательны как структуры данных, наиболее экономным образом представляющие булевы функции в специальном классе графов. Этот факт приводит к идее использования ИОБВВ в качестве структур, представляющих булевы ограничения, накапливаемые в процессе нехронологического ВРЬЬ-вывода. Данная идея представляется перспективной именно в отношении задач обращения полиномиально вычислимых функций. И этому есть целый ряд причин.
Одна из главных причин состоит в том, что если рассматривать задачу обращения некоторой полиномиально вычислимой функции f : {0, 1}п ^ {0, 1}*, f Є ^, как БАТ-задачу, то в соответствующей КНФ С^) можно выделить подмножество булевых переменных, от которых в некотором смысле «функционально зависят» все остальные переменные, фигурирующие в данной КНФ. Это множество, обозначаемое далее через X, образовано булевыми переменными, кодирующими входное слово из {0,1}п. Как правило, число п существенно меньше общего числа переменных в С^). Однако можно показать, что для решения соответствующей БАТ-задачи достаточно оперировать (в указанном ниже смысле) только с переменными множества X. Кратко остановимся на перечисленных моментах (результаты, представленные в данном пункте, подробно изложены в [13]).
Пусть С = С(хі,... , х&) —произвольная КНФ над множеством булевых переменных X = {хі,... , х&}. Рассмотрим некоторое множество X' = (хі,... , х'г), являющееся подмножеством X. Пусть (аі,...,аг) —произвольный вектор значений переменных из X'. Осуществим подстановку в КНФ С значения хі = а1. Данная подстановка заключается в вычеркивании из С некоторых литералов и дизъюнктов. При этом отслеживаются возможности срабатывания правила единичного дизъюнкта с последующими подстановками в С соответствующих индуцированных значений. Если в результате не выведен конфликт или выполняющий С набор, то в КНФ С|ж/ =а1 осуществляется подстановка х;2 = а2. И так далее.
Описанная процедура определяет последовательную подстановку в С вектора (а1,... , аг) относительно порядка хі -< ... х'г. Очевидно, что последовательная подстановка в общем случае реализуется эффективно. Возможны различные исходы этой процедуры. Во-первых, может оказаться, что данная подстановка выводит конфликт. Во-вторых, что ее результатом является нахождение некоторого выполняющего С на-
бора. Наконец, возможен переход к некоторой КНФ, относительно которой нельзя сказать ничего. Если имеет место первая или вторая ситуация, то будем говорить, что данная подстановка индуцирует детерминированный DPLL-вывод соответственно конфликта или выполняющего набора.
Предположим, что относительно некоторой КНФ C над X и некоторого множества X' С X можно показать, что результатом последовательной подстановки любого вектора значений переменных из X' в C относительно некоторого порядка могут быть только первая или вторая ситуации. Несложно видеть, что в этом случае достаточно перебрать 2|х 1 всевозможных значений переменных из X', чтобы решить рассматриваемую SAT-задачу в отношении КНФ C.
Определение 1. Пусть X = {x1,...,xk} —множество булевых переменных и X' С X. Проекцией произвольного вектора а = ^^...^k) значений переменных из X на множество X' называется вектор, образованный теми компонентами а, которые являются значениями переменных из X'. Проекцию вектора а на множество X' обозначим через ах'.
Определение 2. Ядром DPLL-вывода для КНФ C = C(x1,... ,xk) над множеством булевых переменных X = {x1,..., Xk} называется такое множество Xker(C) С X с введенным на нем порядком т, что имеют место следующие свойства:
1) для любого вектора а = (а1,..., аk), выполняющего C, последовательная подстановка в C вектора ахker(с) относительно т индуцирует детерминированный DPLL-вывод а;
2) для любого вектора в = (в1,... , fik), такого, что C|в = 0, последовательная подстановка в C вектора вхker (с) относительно т индуцирует детерминированный DPLL-вывод конфликта.
Ядро Xker(C) = X называется тривиальным. Ядро наименьшей мощности называется минимальным и обозначается через X^er(C).
Рассмотрим произвольную функцию f : {0, 1}n ^ {0, 1}*, f Є S. Функция f — это дискретная функция, которая может быть выражена формулой от булевых переменных x1,... , xn. Назовем множество X = {x1,... , xn} множеством переменных входа функции f. Рассматриваем задачу обращения f в произвольной точке y Є range f. При помощи преобразований Цейтина (см. [27]) и техники, описанной, например, в [20], cводим за полиномиальное время данную проблему к задаче поиска выполняющего набора выполнимой КНФ C(f) от булевых переменных, образующих множество X = {x1,... , xq(n)}, q(-) —некоторый полином. Справедлива следующая теорема.
Теорема 1 [ІЗ]. Рассмотрим произвольную функцию f : {0,1}n ^ {0,1}* из класса S. Обозначим через XT множество переменных входа f с зафиксированным на нем порядком т (вообще говоря, произвольным). Пусть C(x1,... ,xq(n)) —КНФ, кодирующая задачу обращения функции f в произвольной точке y Є range f. Тогда X*ker(C(Xl,...,Xq(n))) С Xt.
Фактически данная теорема означает следующее. Будем рассматривать задачу обращения функции f в произвольной точке y Є range f как SAT-задачу в отношении КНФ C(x1,... , xq(n)), решаемую при помощи любого алгоритма, основанного на DPLL. Тогда в качестве переменных уровней решения достаточно выбирать переменные входа рассматриваемой функции. Очень важен тот факт, что порядок выбора может быть произвольным. Это означает, что стратегия выбора переменных только из X гарантирует решение задачи обращения f в произвольной точке y Є range f алгоритмом DPLL, использующим CL-процедуру и рестарты [28].
W (yi,...,ys) = 1 C (zi,...,zt) =1
(1)
над множеством булевых переменных Ц = {у1,..., у5} и {^1,... , г*}. Предположим, что С(г1,... , г*) —КНФ, для которой известно некоторое нетривиальное ядро БРЬЬ-
вывода Zker(C), причем Zker(C) С {y1,...,ys}. Через B(W) обозначим ROBDD-
Определение 3. Пусть В (Ш) — КОБББ-представление булевой функции Ш : {0,1}5 ^ {0,1} от ^ булевых переменных у1,... , у8. Назовем путь в В (Ш) от корня к терминальной вершине «1» полным относительно множества У' С У = {у1,. . . ,у,}, если прохождение этого пути задает присвоение соответствующих значений всем пе-
Справедлива следующая теорема.
Теорема 2 [29]. Прохождение любого пути в КОБББ В(Ш) из корня в терми-
подстановку в КНФ C(z1,... ,zt) значений переменных из Zker(C). Результатом этой подстановки является либо вывод по правилу единичного дизъюнкта конфликта, либо вывод набора, выполняющего C(z1,...,zt). В последнем случае имеем некоторое решение исходной системы.
Пусть уравнение C (x1,... , xq(n)) = 1 кодирует задачу обращения функции f из класса S в некоторой точке y G range f. Через Xker(C) обозначено некоторое нетривиальное ядро DPLL-вывода КНФ C (для рассматриваемой задачи в качестве Xker(C) всегда можно взять X — множество переменных входа функции f). Организуем решение задачи поиска набора, выполняющего C, при помощи алгоритма DPLL, дополненного CL-процедурой (см. п. 1). При этом, руководствуясь теоремой 1, будем выбирать в качестве переменных уровней решения только те переменные, которые находятся в Xker(C). Допустим, что осуществлено Q итераций такого выбора с последующим распространением булевых ограничений и реализацией CL-процедуры, но выполняющий набор при этом не найден. Обозначим через
конфликтные дизъюнкты, выведенные в данных итерациях (очевидно, что и {х1,... ,Х--} С Xкег(С)). Рассмотрим следующую систему логических уравнений:
г=1 "
(2)
ременным из Y'.
нальную вершину «1», который полон относительно множества Zker(C), индуцирует
( D(x1,... ,Xx) = 1,
1 D Q (xQ,...,xQQ ) =1.
Определение 4. Пусть S — произвольная совместная система логических уравнений, B(S) —ROBDD-представление ее характеристической функции и п — произвольный путь из корня B(S) в терминальную вершину «1». Данный путь определяет некоторое множество решений S, обозначаемое через А(п), |А(п)| ^ 1. Про любое a G А(п) говорим также, что путь п содержит а.
Теорема 3 [13]. Обозначим через а = (а1,... , ап) произвольное решение задачи обращения функции f из класса S в некоторой точке y G range f. Пусть B — ROBDD-представление характеристической функции системы (3) в контексте рассматриваемой задачи. Тогда существует такой путь п из корня B в терминальную вершину «1» , что a G А(п).
Отметим, что данная теорема определяет конкретный вид систем (1)-(2) в контексте задачи обращения функции f в точке y G range f. Роль C(z1,... , zt) в этом случае играет КНФ C(f) = C(x1,..., xq(n)), а роль системы (2)—система (3), образованная уравнениями вида D^ = 1,i G {1,...,Q}, где D^ — конфликтные дизъюнкты, полученные в результате DPLL-вывода, примененного к КНФ C(x1,... , xq(n)), с выбором переменных уровней решения из X ker(C).
Теоремы 1-3 дают теоретическую базу для нового подхода к решению задач обращения полиномиально вычислимых дискретных функций, основная идея которого состоит в совместном использовании SAT и ROBDD именно в тех «частях» задачи обращения, где они могут дать ощутимый выигрыш. Как уже говорилось, вряд ли можно за счет использования только ROBDD обогнать SAT-подход на задачах обращения криптографических функций. Однако ROBDD могут использоваться для решения другой важной проблемы — потери полноты SAT-решателем в результате чистки баз ограничений. Именно ROBDD представляются оптимальными структурами данных для хранения массивов конфликтных дизъюнктов, накапливаемых SAT-решателем в процессе вывода (и это целиком подтверждается численными экспериментами). Особо отметим, что никакие из синтезированных в процессе вывода ограничений при этом не удаляются (в отличие от практики, принятой в большинстве современных SAT-решателей).
Все сказанное означает необходимость описания и изучения ROBDD-аналогов механизмов логического вывода, используемых в современных SAT-решателях, базирующихся на DPLL. Соответствующие процедуры будут применяться к базам булевых ограничений, представленным не в виде конъюнкций дизъюнктов, а в виде ROBDD.
3. Алгоритмы работы с ROBDD как с базами булевых ограничений
3.1. Алгоритмы логического вывода на ROBDD
Рассматривается проблема обращения функции f : {0,1}n ^ {0,1} из класса S. Пусть B — ROBDD-представление характеристической функции системы логических уравнений (3). Дальнейшая цель состоит в описании процесса логического вывода на ROBDD B. Для этого потребуется определить аналоги таких компонент DPLL-вывода, как правило единичного дизъюнкта, CL-процедура, процедуры «отсроченной» работы с данными (head-tail literals и watched literals). Все приводимые далее результаты справедливы в отношении произвольных ROBDD.
Определение 5. Пусть B — ROBDD-представление произвольной булевой функции от булевых переменных x1,..., xn. Каждой переменной Xj, i G {1,... , n}, и терминальным вершинам «0», «1» поставим в соответствие множества значений данной переменной, задаваемых всевозможными путями в B из корня в соответствующую терминальную вершину. Данные множества обозначим через А0(ж^), A1(xi).
Предположим, что в некоторой ИОВОВ В выполнены следующие условия:
1) Для некоторой переменной жк € X = {ж1,...,жга} любой путь п из корня В в терминальную вершину «1» обязательно проходит через некоторую вершину, помеченную переменной ж&.
2) Справедливо |А1(жк)| = 1.
Результатом данной ситуации является заключение о том, что в любом наборе значений переменных из множества X, на котором значение функции f, представленной В, равно 1, переменная ж& может принимать только одно значение (соответствующее значение в А1(жк)).
Определение 6. Определяемую условиями 1-2 ситуацию далее называем ИОБВВ-следствием соответствующего значения для переменной ж&.
Возникновение в В, представляющей базу булевых ограничений-дизъюнктов, ИОБВВ-следствия для некоторой переменной является аналогом правила единичного дизъюнкта в ВРЬЬ-выводе. Покажем, что справедлив следующий факт.
Лемма 1. Выполнимость 1-2 относительно некоторой переменной ж^ означает, что выполнено в точности одно из следующих условий:
1) для каждой вершины, помеченной ж^, ее high-ребенком является терминальная вершина «0»;
2) для каждой вершины, помеченной ж&, ее 1сто-ребенком является терминальная вершина «0».
Доказательство. Прежде всего отметим, что из любой нетерминальной вершины ИОВОВ В достижима как вершина «0», так и вершина «1».
Предположим теперь, что выполнены условия 1-2. Это означает, что для некоторой переменной ж^ любой путь в ИОБВВ В содержит вершину, помеченную данной переменной, и пути в В задают ж^ одно и то же значение (поскольку |А1(ж^)| = 1) —либо
0, либо 1. Не ограничивая общности, будем считать, что все пути задают ж^ значение
1 (А1(ж^) = {1}). Если предположить, что ребенком некоторой ^(ж&) является терминальный «0», то это может быть только 1с^ребенок. Действительно, в противном случае из ^(жк) по 1с^ребенку достижима терминальная вершина «1», и соответствующий путь задает ж^ значение 0, что противоречит сделанному предположению.
Предположим, что найдется такая ^;(ж&), что ее 1с^ребенком не является терминальный «0», и обозначим через ^(ж^) вершину, являющуюся 1с^ребенком ^(ж^). Но из V(ж^) достижима терминальная вершина «1», поэтому существует путь из корня в «1», задающий ж& значение 0, что противоречит условиям 1-2. Итак, если выполнены условия 1-2 и любой путь в В из корня в «1» задает ж^ значение 1, то кто-ребенок любой вершины, помеченной ж^, — это терминальный «0». Аналогично, если выполнены 1-2 и любой путь из корня В в «1» задает жк значение 0, то high-ребенок любой вершины, помеченной ж&, — это терминальный «0». Лемма 1 доказана. ■
Лемма 2. Процедура проверки возникновения ИОБВВ-следствий в ИОБВВ В требует детерминированного времени, ограниченного сверху величиной О (п • |В|).
Доказательство. Сам по себе данный факт не является трудным. Поэтому представляется целесообразным привести в процессе доказательства полное описание алгоритма отслеживания ИОБВВ-следствий. Осуществляется это при помощи представленной ниже процедуры сНеск_гт,р1().
check_impl(u - текущая вершина,
inf_vector - вектор выведенных значений переменных)
{
if u == 1:
// u - терминальная вершина
// проверить «целостность пути» (проверка условия 1)
check_path_consistency(u, inf_vector);
return;
if not already_in_cache():
// если такой вершины еще нет в кэше,
// производим рекурсивный спуск по исходной ROBDD,
// вызывая check_impl() для потомков данной вершины check_impl(low(u), inf_vector); check_impl(high(u), inf_vector);
// проверить «целостность пути» (проверка условия 1) check_path_consistency(u, inf_vector);
// проверить наличие нулевого ребенка (проверка условия 2) check_for_zero_child(u, inf_vector, 0);
// добавить в кэш запись о том, что данная вершина пройдена put_to_cache(u);
return;
}
Как видно из представленного выше псевдокода, процедура check_impl() рекурсивна и осуществляет полный обход B. Для каждой вершины и проверяются условия 1-2 относительно переменной, соответствующей и. Это осуществляется посредством следующих двух процедур: check_path_consistency() и check_for_zero_child().
Процедура check_path_consistency(), находясь в вершине и, помеченной некоторой переменной Xk, k G {2,...,n}, просматривает родителей данной вершины. Если среди них имеется вершина, помеченная переменной Xj, j < k — 1, то принимается решение о невозможности возникновения ROBDD-следствий в отношении переменных Xj+1, . . . , xk-1.
Процедура check_for_zero_child() проверяет для вершины и, помеченной переменной Xfc, выполняется ли в ее отношении утверждение леммы 1.
В представленном псевдокоде использована специальная процедура кэширования, назначение которой в хранении информации о пройденных вершинах (ее использование исключает повторное прохождение вершин).
Результатом работы check_impl() является inf_vector —вектор длины n с компонентами из множества {—1, 0, 1}. На начальном шаге все компоненты данного вектора нулевые. Компонента с номером k, k G {1,... , n}, принимает значение 1 или —1, если для переменной Xfc по ROBDD-следствию выведено значение соответственно Xfc = 1 или Xfc = 0.
Оценим сложность процедуры check_impl(). Заметим, что данная процедура один раз обходит ROBDD B, модифицируя при необходимости вектор inf_vector, при этом работа с произвольной вершиной и может потребовать (в процедуре check_path_consistency()) просмотра всего текущего вектора inf_vector. Применение процедуры check_for_zero_child() в отношении произвольной вершины требует времени O(1). Таким образом, сложность процедуры check_impl() ограничена сверху величиной O (n • |BI). Лемма 2 доказана. ■
Для дальнейшей работы потребуется модифицированный алгоритм Restrict, который позволяет осуществлять в ROBDD B подстановку набора значений некоторых переменных из X. Как отмечает Р. Брайант [23, 30], данный алгоритм имеет ту же сложность, что и обычный Restrict, то есть O(|B|). Установим теперь справедливость следующей теоремы.
Теорема 4. Пусть в ROBDD B подставляются значения переменных
Xi! = аіх,... ,Xim = аіт,m ^ n, а^. Є {0,1}, j Є {1,... ,m}.
Сложность детерминированной процедуры, осуществляющей данную подстановку и проверяющей наличие всевозможных ROBDD-следствий, ограничена сверху величиной O (n • |B|).
Доказательство. Используя результаты леммы 2 и модифицированный Restrict, можно записать процесс подстановки набора значений переменных в ROBDD с проверкой возникновения ROBDD-следствий в виде следующей процедуры:
assign(oldbdd - исходная ROBDD,
newbdd - новая ROBDD,
assign_vector - вектор подставляемых значений переменных,
inf_vector - вектор выведенных значений переменных)
{
// подстановка в ROBDD oldbdd значений переменных //из вектора assign_vector restrict_m(oldbdd, newbdd, assign_vector);
// проверка наличия ROBDD-следствий в ROBDD newbdd check_impl(newbdd, inf_vector);
}
Учитывая, что сложность процедуры check_impl() ограничена величиной O (n • |B|) (лемма 2), а сложность процедуры restrict_m(), реализующей модифицированный Restrict, ограничена величиной O(IBI), заключаем, что верхняя граница сложности для процедуры assign() имеет вид O (n • |B |). Теорема 4 доказана. ■
Следствие 1. Если результатом применения процедур check_impl() или assign() к B является ROBDD-следствие Xk = аk^k Є {0,1}, для некоторой Xk Є X, то подстановка в B значения Xk = ak не может привести к возникновению нового ROBDD-следствия, индуцированного данной подстановкой.
Доказательство. Пусть в результате одной из перечисленных процедур в B возникло ROBDD-следствие Xk = аk. Не ограничивая общности, полагаем, что ak = 1.
В силу леммы 1 сделанное предположение означает, что low-ребенком всех вершин, помеченных Хк, является терминальный «0». Подстановка Хк = 1 в B для произвольной вершины u(xk) означает передачу high-ребенка вершины u(xk) вершинам, являющимся родителями u(xk). Но low-ребенок u(xk), то есть терминальный «0», при этом не передается никаким вершинам. Таким образом, подстановка xk = 1 в B не может привести к возникновению в B вершины, ребенком которой является терминальный «0» (что не исключает наличия таких вершин, находившихся в B до осуществления этой подстановки). Аналогичные рассуждения справедливы и в предположении, что ak = 0. Следствие доказано. ■
Данный факт демонстрирует очень привлекательное свойство ROBDD, рассматриваемой в роли базы булевых ограничений. Напомним, что подстановка значения некоторой переменной в КНФ может приводить к выводу по правилу единичного дизъюнкта (unit clause) ряда индуцированных присвоений, подстановка которых также не исключает дальнейших срабатываний unit clause, и т. д. В этом смысл стратегии распространения булевых ограничений (BCP). В общем случае полная реализация BCP может приводить к многократному обходу КНФ, что сопряжено с существенными вычислительными затратами. Полученное свойство ROBDD означает, что порождаемые произвольной подстановкой ROBDD-следствия сами по себе новых ROBDD-следствий породить не могут и, таким образом, вся информация, индуцируемая данной подстановкой, извлекается в результате однократного обхода ROBDD.
На рис. 1 слева показана реализация BCP-стратегии применительно к КНФ (xi V x2)(x2 V x3)(x3 V x4) в результате подстановки xi = 0; справа — результат подстановки xi = 0 в ROBDD, представляющую булеву функцию, которая выражается той же самой КНФ; требуется единственный обход ROBDD.
С(х 1,Х2,Хз,Ж4) = (жі V х2) (х2 V Хз) (х3 V ж4)
'ж
£1x1=0 = 22 (х2 V Хз) (ж3 V ж4)
\ _
^l^i—0,^2—і — *^з(хз V Ж4) \ _ С,|жі=0,х2 = 1,жз = 1 —
Х2 = 1 Хз = 1 Х4 — 1
Рис. 1. Пример к следствию теоремы 4
Природа конфликтов в гибридном выводе более разнообразна, чем в ВРЬЬ-выводе. Во-первых, это обычные «ВРЬЬ-конфликты», возникающие в результате подстановок в КНФ-часть. Во-вторых, это «гибридный конфликт»: ситуация, когда в результате последовательности подстановок в ИОБВВ-части возникло ИОБВВ-следствие «Хк = а», а в КНФ-части — выведенное по правилу единичного дизъюнкта присвоение «Хк = а». Однако в целом механизмы разбора конфликтов аналогичны механизмам, используемым в современных БАТ-решателях (см. [16]), поэтому здесь дополнительное внимание этим процедурам не уделяется.
Еще одним полезным свойством гибридного вывода является возможность довольно естественной организации на И,ОБВВ т. н. «отсроченных вычислений». Рассмотрим следующие условия, которые определяют ситуацию, в некотором роде двойственную ситуации возникновения ИОВВВ-следствия:
г) Для некоторой переменной хд € X в ИОВВВ В любой путь п из корня в терминальную вершину «0» обязательно проходит через некоторую вершину, помеченную переменной хд.
гг) Имеет место |Д0 (хд )| = 1.
Установим справедливость следующей теоремы.
Теорема 5. Пусть В — произвольная ИОВВВ, и относительно некоторой переменной хд в В справедливы условия г и гг. Тогда в ИОВОВ В невозможны ИОВВВ-следствия ни для каких переменных из множества X \ {хд}. Трудоемкость процедуры проверки условий г-гг ограничена сверху величиной О (п • |В|).
Доказательство. Пусть в ИОВВВ В для некоторой переменной хд € X выполняются условия г и гг. Не ограничивая общности, полагаем, что Д0 (хд) = {1}. Используя рассуждения, полностью аналогичные тем, посредством которых была доказана лемма 1, можно показать, что в этом случае для любой вершины, помеченной переменной хд, ее кто-ребенком является терминальная вершина «1».
Теперь предположим, что существует такая переменная хр € X \ {хд}, для которой выполнены условия 1-2 вывода некоторого ее ИОВВВ-следствия. Для данной переменной возможны следующие два варианта ее расположения относительно хд в порядке означивания переменных в ИОВВВ В:
1 : х1 -< ... -< хд -< ... -< хр -< ...
2 : х1 -< ... -< хр -< ... -< хд -< ...
Рассмотрим первый случай. Из вышесказанного следует, что 1сто-ребенком любой вершины, помеченной переменной хд, является терминальная вершина «1». Данный факт означает, что существует обходной путь из корня ИОВВВ в терминальную вершину «1», не проходящий через вершины, помеченные переменной хр, то есть для данной переменной вывод ее ИОВВВ-следствия невозможен.
Рассмотрим второй случай. Как было отмечено выше, условия 1 и 2 означают, что одним из детей любой вершины, помеченной переменной хр, является «0». Но тогда существуют обходные пути из вершин, помеченных хр, в «0», не проходящие через вершины, помеченные хд, что противоречит предположению о выполнимости условий г и гг. Все проделанные рассуждения переносятся на случай Д0(хд) = {0}.
Отметим возможность совмещения процедур подстановки, проверки условий 1-2 и условий г-гг. В самом деле, проверка условий г-гг гарантируется использованием аналогов процедур сНеск_ра1Н_соп8г81епсу() и сНеск_/ог_гего_сММ(), которые можно также «встроить» в процедуру сНеск_гшр(). При этом порядок сложности полученной процедуры останется прежним.
Все сказанное позволяет заключить, что сложность процедуры подстановки значений переменных в ИОВВВ с отслеживанием ситуаций возникновения ИОВВВ-следствий и выполнения относительно некоторых переменных (не обязательно одной) условий г-гг ограничена сверху величиной О (п • |В|). Теорема 5 доказана. ■
Данная теорема позволяет сформировать механизмы отсроченных вычислений при подстановке выведенных в процессе гибридного вывода значений некоторых переменных: если для текущей ИОВВВ В выполнены г-гг относительно хд и из КНФ-части
выведено значение некоторой переменной Хк, к = д, нет смысла на данном этапе подставлять соответствующее значение в В — ничего нового выведено не будет. После присвоения или вывода из КНФ-части некоторого значения для хч целесообразно осуществить в В подстановку сразу всех накопленных к этому моменту значений переменных, а также вывод всех возможных ИОБВВ-следствий, используя для этого процедуру аввідп().
Порядок означивания переменных существенным образом влияет на число вершин в ROBDD, поэтому одной из центральных проблем при использовании ROBDD в решении практических задач является выбор «хорошего» порядка. Известны различные подходы к этой проблеме. Так, в [24] предлагается изменять порядок означивания динамически — непосредственно в процессе построения ROBDD. Алгоритм, используемый для этой цели в [24], сходен в своей основе с известным методом пузырьковой сортировки (bubble sort, [31]). Сложность данного алгоритма в общем случае экспоненциальна. Более того, нет никакой гарантии, что ее использование даст в конечном счете порядок, лучший, чем заданный изначально.
В гибридном (SAT+ROBDD)-выводе часто есть веские основания считать некоторый порядок лучше текущего. Как правило, это связано со статистикой конфликтности, которая меняется в процессе вывода (переменные с меньшей конфликтностью на предыдущих этапах могут демонстрировать большую конфликтность на последующих). Тем самым возникает следующая задача.
Определение 7. Дана ROBDD B(f), представляющая булеву функцию f : {0,1}n ^ {0,1}, построенная в соответствии с заданным порядком т означивания переменных из множества X = {x1,... ,xn}. Требуется построить ROBDD B'(f), представляющую ту же самую функцию, в которой порядок означивания переменных из X есть т', отличный от т. Назовем данную проблему проблемой модификации ROBDD в соответствии с новым порядком.
Для решения данной задачи далее предлагается подход, в корне отличающийся от метода, использующего пузырьковую сортировку. В его основе лежит возможность гарантированного решения за полиномиальное время задачи установки произвольной переменной из X на заданную позицию в новом порядке означивания переменных
Пусть дана произвольная ИОВВВ В(/), представляющая булеву функцию / от п переменных и построенная в соответствии с порядком их означивания
{а1,... , ап} = {1,... , п}. Будем говорить, что данная подстановка задает изменение исходного порядка т (4) на порядок т', подразумевая под этим следующее. Столбец
подстановки с номером і Є {і,...,п}, имеющий вид , j Є {і,...,п}, интерпре-
тирует тот факт, что в новом порядке т' переменная Хj будет находиться на позиции
3.2. Процедуры изменения порядка означивания
п е р е м е н н ы х в R O B D D
в ROBDD.
т : x1 -< x2 -< ... ^ xn.
Рассмотрим произвольную подстановку на множестве {І, . . . , n}
с номером г. Например, исходный порядок т : X1 -< x2 -< X3 подстановкой
І2З
2ЗІ
изменяется на порядок т' : x2 -< x3 -< x1. И сходному порядку в этом смысле соот
"1 ... n
ветствует тождественная подстановка Ет
Также будем говорить, что
1 ... п
порядок т' определяется подстановкой а (т ^ т') относительно порядка т.
Определение 8. Дана ИОВОВ В(/), построенная в соответствии с заданным порядком т означивания переменных множества X. Требуется построить ИОВОВ В'(/), в которой порядок означивания переменных определяется относительно исходного порядка т произвольной подстановкой следующего вида:
І
a1
n
an
Данную проблему называем проблемой установки переменной Xj на позицию с номером г.
Теорема б. Пусть B(f) —произвольная ROBDD с порядком т (4). Для произвольных i,j Є {1,...,n} проблема установки переменной Xj на позицию с номером г решается детерминированным образом за время, ограниченное сверху величиной
о (|B(f )|2).
Доказательство. Пусть дана ROBDD B(f), представляющая булеву функцию от n переменных, образующих множество X. Считаем, что B(f) построена в соответствии с порядком т (4). Рассмотрим ROBDD B0 и Bj, представляющие булевы функции f0 = f|Xj=o,f1 = f|Xj=1. Данные ROBDD являются результатом применения процедуры Restrict к B(f), что требует времени, ограниченного сверху величиной O (|B(f)|). Заметим, что BjO и B1 —ROBDD над множеством булевых переменных X \ {xj} с заданным на нем порядком
Построим две ROBDD (B(xj),B(xj)) (рис. 2
Рис. 2. Элементарные ROBDD
При помощи алгоритма Apply построим в соответствии с порядком означивания переменных
т : x1 -< ... -< xi-1 -< Xj -< xi -< ... -< Xj-1 -< Xj+1 -< ... -< xn
следующие ROBDD:
B0 = Apply (B(xj) ■ B0) , B1 = Apply (B(xj) ■ B1) .
Рассмотрим ROBDD
B'(f) = Apply (B0 V B1) , (б)
построенную в соответствии с порядком т' (5).
Заметим, что B0 — ROBDD-представление функции Xj ■ f|Xj=0, а B1 — ROBDD-представление функции Xj ■ f |Xj=1. Таким образом, (б) можно рассматривать как «альтернативный» вид разложения Шеннона булевой функции f по переменной Xj. Тем самым ROBDD B'(f) представляет булеву функцию f в соответствии с порядком (5) означивания переменных множества X.
Поскольку |B (Xj)| = |B (xj)| = 3, то сложность построения ROBDD B0 и B1 заведомо ограничена сверху величиной O (|B(f )|). Это есть следствие оценки трудоемкости алгоритма Apply и того факта, что порядок т* подчинен порядку т' (то есть из x' -<т* x следует, что x' -<т/ x ). В силу сказанного, число вершин в ROBDD B0 и B1 также ограничивается сверху величиной O (|B(f)|). Отсюда (снова используя оценку сложности алгоритма Apply) име)м: сложность построения ROBDD B'(f) ограничивается сверху величиной O (|B(f)|2). Теорема б доказана. ■
Данная теорема позволяет предложить следующий алгоритм изменения фиксированного начального порядка т на новый порядок т'.
Следствие 2. Пусть B(f) —ROBDD, представляющая булеву функцию f от n переменных в соответствии с порядком означивания переменных т. Проблема модификации B(f) в соответствии с произвольным порядком т' сводится к l-кратному (l ^ n) решению проблемы установки переменной на позицию с заданным номером.
Доказательство. Докажем данный факт, предъявив в явном виде соответствующий алгоритм. Пусть имеется ROBDD B(f), представляющая булеву функцию f от n переменных в соответствии с некоторым порядком означивания переменных т, и рассматривается некоторый порядок т', отличный от т. Тем самым т' определяется относительно т некоторой подстановкой, отличной от Ет. Обозначим вторую строку данной подстановки через aT/ = (a1,... ,an). Описываемый ниже алгоритм получает на входе ROBDD B(f), а также порядки т и т'.
0. Пусть m = І .
1. Если am = m, то полагаем m = m + І и переходим к шагу І; в противном случае переходим к шагу 2.
2. Решаем проблему установки переменной xam на позицию с номером m в текущей
ROBDD. m
3. Если m < n, то полагаем m = m + І и переходим к шагу І; в противном случае завершаем выполнение алгоритма.
Теперь покажем, что описанный алгоритм решает проблему модификации ROBDD в соответствии с новым порядком т'. На каждой итерации алгоритма переменная xam устанавливается в ROBDD на позицию с номером m. При этом, как следует из доказательства теоремы б, все переменные, номера которых меньше m (т. е. установленные на предыдущих итерациях), своего порядка в текущей ROBDD не изменяют. Обобщая сказанное, заключаем, что для корректного решения проблемы модификации ROBDD в соответствии с новым порядком т' достаточно не более n раз решить проблему установки переменной на заданную позицию, что и делает описанный алгоритм. Следствие доказано. ■
Обратим внимание на то, что данный алгоритм, вообще говоря, не является полиномиальным. Однако фактически он разбит на l, l ^ n, процедур, каждая из которых
устанавливает некоторую переменную на заданную позицию и сама по себе работает за полиномиальное от числа вершин в подаваемой ей на вход ROBDD время. На практике алгоритм показывает хорошие результаты в задачах модификации порядка ROBDD, возникающих в гибридном (SAT+ROBDD)-выводе. Его эффективность особенно заметна при незначительных отличиях в новом и старом порядках (когда большая часть переменных не меняет своего местоположения). Следует подчеркнуть, что для процедуры, использующей пузырьковую сортировку, в общем случае невозможны полиномиальные оценки даже в отношении задачи установки переменной на заданную позицию.
Заключение
Настоящая работа посвящена гибридному (SAT+ROBDD)-выводу, используемому в задачах обращения дискретных функций. В соответствии с гибридной стратегией некоторый алгоритм на основе DPLL действует в отношении КНФ C(f), кодирующей задачу обращения полиномиально вычислимой функции f в некоторой точке. После каждого рестарта вместо чистки базы конфликтных дизъюнктов используется процедура построения ROBDD-представления характеристической функции системы вида (3). Дальнейший вывод идет как на исходной КНФ, так и на ROBDD, представляющей соответствующую базу накопленных ограничений.
Построены аналоги основных операций с булевыми ограничениями, используемыми в нехронологическом DPLL-выводе: аналог подстановки с отслеживанием срабатывания правила единичного дизъюнкта — процедура assign() (теорема 4); аналог CL-процедуры — применение Apply к текущей ROBDD и новому ограничению-дизъюнкту; аналог механизма действия структур watched literals определяется условиями i—ii и теоремой 5. Для всех предложенных алгоритмов приведены сложностные оценки. Кроме этого, предложен новый алгоритм модификации порядка в заданной ROBDD, показывающий хорошие практические результаты.
Отметим также, что гибридный (SAT+ROBDD)-подход к обращению дискретных функций был программно реализован с использованием стандарта MPI [32] в виде решателя, функционирующего в распределенной вычислительной среде. В решателе используется межпроцессорный обмен накапливаемыми ограничениями, передаваемыми в виде ROBDD. В этом его принципиальное отличие от недавних зарубежных разработок (см. [33]), в которых при решении SAT-задач также используется межпроцессорное взаимодействие. Построенный решатель показал высокую эффективность на задачах обращения некоторых криптографических функций.
Авторы выражают глубокую благодарность А. Е. Хмельнову за внимание к представленным в статье исследованиям, дружеские советы и конструктивные замечания.
ЛИТЕРАТУРА
1. http://www.satlive.org
2. www.isa.ewi.tudelft.nl/jsat
3. Hachtel G. D., Somenzi F. Logic synthesis and verification algorithms. Kluwer Ac. Publ, 2002.
4. Кларк Э. М., Грамберг О., Пелед Д. Верификация моделей программ: Model Checking. М.: МЦНМО, 2002.
Б. Гаранина Н. О., Шилов Н. В. Верификация комбинированных логик знаний, действий и времени в моделях // Системная информатика. 200Б. Вып. 10. С. 114-173.
6. Семенов А. А., Заикин О. С., Беспалов Д. В., Ушаков А. А. SAT-подход в криптоанализе некоторых систем поточного шифрования // Вычислительные технологии. 2008. Т. 13. №6. С. 134-150.
7. Системная компьютерная биология / под ред. Н. А. Колчанова, С. С. Гончарова,
B. А. Лихошвая, В. А. Иванисенко. Новосибирск: Изд-во СО РАН, 2008. 767 с.
8. Davis M., Logemann G., Loveland D. A machine program for theorem proving // Comm. ACM. 1962. V. 5. P. 394-397.
9. Marqeus-Silva J. P., Sakallah K. A. GRASP: A search algorithm for propositional
satisfiability // IEEE Trans. Comp. 1999. V. 48. No. 5. P. 506-521.
10. Moskewicz M., Madigan C., Zhao Y., et al. Chaff: Engineering an Efficient SAT Solver // Proc. Design Automat. Conf. (DAC). 2001. P. 530-535.
11. http://minisat.se/MiniSat.html — MiniSat.
12. Семенов А. А., Заикин О. С. Неполные алгоритмы в крупноблочном параллелизме комбинаторных задач // Вычислительные методы и программирование. 2008. Т. 9.
C.108-118.
13. Семенов А. А. Декомпозиционные представления логических уравнений в задачах обращения дискретных функций // Изв. РАН. Теория и системы управления. 2009. №5. С.47-61.
14. Закревский А. Д. Логические уравнения. Минск: Наука и техника, 1975.
15. Семенов А. А., Беспалов Д. В. Технологии решения многомерных задач логического поиска // Вестник Томского госуниверситета. Приложение. 2005. №14. С. 61-73.
16. Zhang L., Madigan C., Moskewicz M., Malik S. Efficient conflict driven learning in a boolean satisfiability solver // Proc. Intern. Conf. on Computer Aided Design (ICCAD). 2001. P. 279-285.
17. Lynce I., Marques-Silva J. P. Efficient data structures for backtrack search SAT solvers // Ann. Mathem. Artific. Intellig. 2005. V. 43. P. 137-152.
18. Семенов А. А., Заикин О. С., Беспалов Д. В. и др. Решение задач обращения дискретных функций на многопроцессорных вычислительных системах // Труды Четвертой Меж-дунар. конф. PAC0’2008 (Москва, 26-29 октября 2008).М., 2008. С. 152-176.
19. Заикин О. С., Семенов А. А. Технология крупноблочного параллелизма в SAT-задачах // Проблемы управления. 2008. №1. С. 43-50.
20. Семенов А. А. Трансляция алгоритмов вычисления дискретных функций в выражения пропозициональной логики // Прикладные алгоритмы в дискретном анализе. Сер.: Дискретный анализ и информатика. 2008. Вып. 2. С. 70-98.
21. Cook S. A. The complexity of theorem-proving procedures // Proc. 3rd Ann. ACM Symp. on Theory of Computing, ACM. 1971. P. 151-159. [Пер.: Кук С. А. Сложность процедур вывода теорем // Кибернетический сборник. Новая серия. 1975. Вып. 12. С. 5-15.]
22. Lee C. Y. Representation of Switching Circuits by Binary-Decision Programs // Bell Systems Technical J. 1959. V. 38. P. 985-999.
23. Bryant R. E. Graph-Based Algorithms for Boolean Function Manipulation // IEEE Trans. Comp. 1986. V. 35. No. 8. P. 677-691.
24. Meinel Ch., Theobald T. Algorithms and Data Structures in VLSI-Design: OBDD-
Foundations and Applications. Springer Verlag, 1998.
25. Хмельнов А. Е., Игнатьев А. С., Семенов А. А Двоичные диаграммы решений в логических уравнениях и задачах обращения дискретных функций // Вестник НГУ. Сер.: Информационные технологии. 2009. Т. 7. №4. С. 36-52.
26. Семенов А. А. О преобразованиях Цейтина в логических уравнениях // Прикладная дискретная математика. 2009. №4. С. 28-50.
27. Цейтин Г. С. О сложности вывода в исчислении высказываний // Записки научных семинаров ЛОМИ АН СССР. 1968. Т. 8. С. 234-259.
28. Beame P., KautzH., Sabharwal A. Understanding the power of clause learning // Proc. Of 18th Intern. Joint Conf. on Artificial Intellegence (IJCAI). 2003. P. 1194-1201.
29. Игнатьев А. С., Семенов А. А., Хмельнов А. Е. Использование двоичных диаграмм решений в задачах обращения дискретных функций // Вестник Томского госуниверситета. Сер.: Управление, вычислительная техника, информатика. 2009. №1(6). С. 115-129.
30. Bryant R. E. Symbolic Boolean Manipulation with Ordered Binary Decision Diagrams // ACM Comp. Surv. 1992. V. 24. No. 3. P. 293-318.
31. Левитин А. Алгоритмы. Введение в разработку и анализ. М.: Вильямс, 2006.
32. Воеводин В. В., Воеводин Вл. В. Параллельные вычисления. СПб.: БХВ-Петербург, 2002.
33. Schubert T., Lewis M., Becker B. PaMiraXT: Parallel SAT Solving with Threads and Message Passing // J. Satisf., Bool. Mod. Comp. 2009. V. 6. P. 203-222.