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

2009

ВЕСТНИК ТОМСКОГО ГОСУДАРСТВЕННОГО УНИВЕРСИТЕТА Управление, вычислительная техника и информатика

№ 1

ДИСКРЕТНЫЕ ФУНКЦИИ И АВТОМАТЫ

УДК 519.7

А.С. Игнатьев, А.А. Семенов, А.Е. Хмельнов

ИСПОЛЬЗОВАНИЕ ДВОИЧНЫХ ДИАГРАММ РЕШЕНИЙ В ЗАДАЧАХ ОБРАЩЕНИЯ ДИСКРЕТНЫХ ФУНКЦИЙ1

Рассматривается возможность использования двоичных диаграмм решений (BDD) в задачах обращения дискретных функций из одного класса, известного своими многочисленными приложениями. Описывается метод решения систем логических уравнений, сочетающий элементы SAT-подхода и подхода, использующего ROBDD-представления характеристических функций рассматриваемых систем. Приводится описание архитектуры «типового» BDD-решателя систем логических уравнений.

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

Двоичные диаграммы решений (Binary Decision Diagram, BDD) - это специальный вид направленных помеченных графов, посредством которых можно представлять булевы функции. Образно говоря, BDD (а точнее ROBDD) решают проблему компактного представления булевых функций «в классе графов». Несмотря на то, что первое упоминание BDD (под названием «двоичные решающие программы») встречается в статье [1] (1959 г.), осознание значимости BDD для математической и прикладной кибернетики пришло после фундаментальной работы Р.Е. Брайанта [2] (1986 г.).

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

В первом разделе приводятся основные понятия и определения. Во втором разделе описан BDD-подход к решению систем логических уравнений (особый акцент сделан на системах, кодирующих задачи обращения функций из класса 3). В третьем разделе приведено краткое описание «гибридного» подхода к решению логических уравнений - в рамках данного подхода BDD используются в качестве модифицируемых структур данных, сохраняющих информацию о процессе DPLL-вывода. В четвертом разделе анализируются особенности архитектуры «типового» BDD-решателя систем логических уравнений.

1 Работа выполнена при поддержке гранта РФФИ № 07-01-00400-а и при поддержке гранта Президента РФ НШ-1676.2008.1.

1. Основные определения и понятия

Логическими уравнениями называются выражения вида

Ь(хх,..., хп) = 0, Ь(хг,..., хп) = 1,

где через Ь(х^...,хп) обозначается формула (исчисления высказываний), задающая некоторую булеву функцию над множеством булевых переменных X = {х1,...,хп}. Тот факт, что при подстановке х1 =а1,...,хп =ап, аг- є {0,1},

і є {1,...,п}, формула Ь (х1,..., хп) принимает значение Рє{0,1} обозначается через Ь(х1,...,хп) ( а )=Р (или более кратко через Ь ( а )=р). Если существует такой набор (а1,...,ап),аі є {0,1},і є{1,...,п}, значений переменных х1,...,хп , что Ь ( ап)=Р , то данный набор называется решением логического уравнения Ь (х1,..., хп) = Р. Системой логических уравнений называется выражение вида

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

Введем в рассмотрение булеву функцию Ь : {0,1}п ^ {0,1}, определяемую следующим образом:

Данную функцию назовем характеристической функцией системы (1).

Двоичная диаграмма решений (БОБ) (см., например [4]) определяется как направленный ациклический граф, в котором выделена одна вершина с входной степенью 0, называемая корнем, и две вершины с выходной степенью 0, называемые терминальными. Терминальные вершины помечены константами 0 и 1. Все остальные вершины помечаются переменными из множества X = {х:,...,хп}. Из любой вершины, за исключением терминальных, выходят в точности 2 дуги. Одну дугу обычно рисуют пунктирной, а другую - сплошной линией. Дуга, обозначенная пунктиром, называется 1о'-ребром, дуга, обозначенная сплошной линией, -high-ребром. Простейшие примеры БББ получаются объединением одноименных листьев в двоичных деревьях решений.

.Ь т (л—хп )=і.

Система (2) эквивалентна одному логическому уравнению вида

Ь1 (л^.-хп )•... •Ь т (xl,..., хп )=1.

Ь (а) = ( 1 (x1,..., хп )•... •Ь 'т (x1,..., хп ))а, ає(0,1}п.

Деревья решений (см, например [4]) суть помеченные деревья, используемые в различных разделах дискретной математики. Обозначим через {0,1)” , n е N, множество всех двоичных слов (последовательностей) длины n. Функции вида fn : {0,1}” ^ {0,1) называются булевыми функциями над множеством булевых переменных X = {xj,...,xn). Пусть fn - произвольная всюду определенная булева функция. Сопоставим ей двоичное дерево решений, построенное в соответствии с перечисленными ниже правилами. Вершины (узлы) дерева соответствуют булевым переменным. Пунктирное ребро, исходящее из узла, помеченного переменной xi,i е {1,...,n) , означает, что данная переменная принимает значение 0, сплошное ребро соответствует тому, что xi принимает значение 1. Листья дерева помечены значениями рассматриваемой функции при соответствующих наборах значений булевых переменных. Произвольный путь из корня в лист, помеченный а е {0,1), определяет набор или семейство наборов значений переменных, на которых рассматриваемая функция принимает значение а . Пусть fn : {0,1}n ^ {0,1) - произвольная всюду определенная булева функция над множеством булевых переменных X = {x1,..., xn) и T (fn) - ее дерево решений. Если объединить в одну вершину все листья дерева T (fn), помеченные нулем, и то же самое проделать с листьями, помеченными единицей, получится BDD. Если произвольный путь п в BDD из корня в терминальную вершину не содержит вершин, помеченных одинаковыми переменными, и его прохождение подчинено общему для всех путей порядку (например, x1 х x2 х ... х xn-1 х xn), то такая BDD называется упорядоченной (OBDD). В записи « x1 х ... х xn » здесь и далее подразумевается, что корень рассматриваемой OBDD помечен переменной x1 .

В произвольной OBDD можно выделять фрагменты (подграфы), которые сами являются OBDD. Для этой цели достаточно объявить соответствующую нетерминальную вершину корнем BDD. Идея сокращенной OBDD (кратко «ROBDD») заключается в «склейке» повторяющихся фрагментов: ROBDD-граф не должен содержать одинаковых OBDD-подграфов меньших размерностей. Р. Брайантом в [2] было показано, что произвольная всюду определенная булева функция при фиксированном порядке означивания переменных имеет однозначное (с точностью до изоморфизма соответствующих графов) ROBDD-представление.

2. ROBDD -подход к решению логических уравнений.

Обращение дискретных функций

Пусть L (•) - характеристическая функция системы (1) и B(L)- ее ROBDD-

представление. Очевидно, что за линейное от числа вершин B(L) время можно

найти некоторое решение системы (1) либо убедиться в ее несовместности. Если имеются ROBDD-представления булевых функций, находящихся в левых частях уравнений системы (2), то ROBDD-представление характеристической функции системы (1) можно получить при помощи алгоритма Apply, описанного в работе

[2]. Данный алгоритм по паре ROBDD B (f1), B (f2), представляющих булевы функции f1 и f2 над множеством булевых переменных X ={x1,..., xn), позволя-

ет построить ROBDD, представляющую булеву функцию f3 = f1 * f2, где « * » -произвольная бинарная логическая связка. Порядок переменных в B (f1) и B (f2) при этом обязательно должен совпадать. При выполнении этого требования сложность процедуры Apply ограничена сверху величиной O (| B (f1) | • | B (f2)); через | B | здесь и далее обозначается число вершин в ROBDD B . Факт построения посредством Apply ROBDD B (f3) по известным B (f1) и B (f2) обозначается следующим образом:

B (f3 ) = Apply (B (f1 )* B (f2 )).

Таким образом, если известны ROBDD-представления булевых функций, стоящих в левых частях уравнений системы (2) (соответственно B (L1), B (L '2), ..., B(L'm)), то ROBDD B(L) характеристической функции системы (1) может быть найдена, например, в соответствии со следующей рекурсивной схемой:

А = Apply (B (L1 )• B (L '2 )), B2 = Apply (B1 • B (L '3)),...

..., Bm-1 = Apply {Bm_2 • B(L m)), Bm-1 = B(L).

Сложность данной процедуры в общем случае, конечно же, есть экспонента от числа переменных, фигурирующих в системе (1).

Дискретной функцией (вообще говоря, частичной) называется любое отображение вида fn : {0,1)n — {0,1)*, где {0,1)*

= U {0,1)n (дискретные функции вида

neN

fn : {0,1)n —— {0,1) называются булевыми). Через Dom fn и Ran fn обозначаются соответственно область определения и область значений функции fn . Если Dom fn = {0,1)n, то функция fn называется всюду определенной или кратко «тотальной» (см. [5]). Если существует программа M (f) для детерминированной машины Тьюринга с входным алфавитом Е = {0,1) , которая вычисляет любую дискретную функцию из некоторого натурального семейства f = {fn )neN, то про f говорят, что оно образовано алгоритмически вычислимыми дискретными функциями.

Пусть f = {fn )neN - семейство тотальных алгоритмически вычислимых дискретных функций. Стандартным образом (см. [6]) можно определить временную сложность программы M ( f) , вычисляющей функции данного семейства как функцию от n (длины входа). Класс 3 образован всеми натуральными семействами дискретных функций, которые вычислимы за полиномиальное время. Задача обращения произвольной функции fn е f, f е3, «в точке» y е Ran fn заключается в нахождении x е Dom fn, такого, что fn (x) = y. Практическая значимость класса 3 обосновывается хотя бы тем фактом, что в него попадает большая часть функций, используемых в криптографических алгоритмах в качестве шифрующих преобразований.

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

ным подходом алгоритм вычисления функции fn представляется в виде системы логических уравнений вида C (fn ) = 1. Здесь через C (fn) обозначена КНФ над множеством булевых переменных U = XUX', причем X = {x1,...,xn), где xi,i е {1,...,n) - булевы переменные, символизирующие аргументы функции fn и называемые далее переменными функции fn , а множество X' образовано булевыми переменными, вводимыми в результате так называемых преобразований Цейтина (см. [7, 9]). Переменные из X' далее будем называть цейтиновскими. В [7] показано, что переход к уравнениям вида КНФ = 1 в задачах обращения функций из класса 3 осуществляется эффективно (в общем случае за полиномиальное время). Подстановка в уравнение C (fn ) = 1 вектора y е Ran fn дает уравнение Cy (fn ) = 1, которое всегда имеет решение. Из произвольного решения данного

уравнения можно эффективно выделять прообраз y в {0,1)n относительно отображения fn . Далее будем говорить, что Cy (fn) есть КНФ, кодирующая задачу обращения функции fn в точке y .

Для решения логических уравнений вида КНФ = 1 применяются специальные программы (SAT-решатели), в основе которых лежат алгоритмы логического вывода.

3. ROBDD как модифицируемые базы булевых ограничений

Одним из наиболее удачных алгоритмов логического вывода в применении к задаче пропозициональной выполнимости можно считать алгоритм DPLL, дополненный процедурой Clause Learning [10]. Процедура Clause Learning (CL) представляет собой механизм учета информации о предыстории поиска посредством итеративного добавления к рассматриваемой КНФ новых ограничений-дизъюнктов. Отрицательной стороной этого процесса является возможность «переполнения памяти» из-за чрезмерного роста базы ограничений. На практике данная проблема решается за счет чистки базы ограничений путем удаления из нее дизъюнктов, имеющих малую значимость. Однако все известные критерии значимости имеют характер эвристик. Данный факт, вообще говоря, не гарантирует завершение поиска за конечное число шагов (то есть алгоритм может потерять полноту). Перечисленные вопросы отражены в работе [11].

Прямое применение описанной выше ROBDD-стратегии для решения систем логических уравнений, кодирующих задачи обращения функций из 3 , представляется малоперспективным. В данном пункте мы описываем «гибридный» алгоритм решения задач обращения функций из 3 , использующий преимущества SAT- и ROBDD- подходов.

Основой данного подхода является понятие ядра логического вывода (в частности, нас будет интересовать ядро DPLL-вывода).

Определение 1. Ядром DPLL-вывода в задаче поиска решений уравнения вида C(u1,...,uk ) = 1, где C(u1,...,uk) - КНФ над множеством булевых переменных

U = {u1,...,uk ) , назовем такое множество Uker (C) с U , произвольное означивание переменных которого либо индуцирует вывод значений всех остальных переменных из U \ Uker (C) по правилу единичного дизъюнкта, либо индуцирует вывод

конфликта. Ядро Uker (C) : Uker (C) = U называется тривиальным. Ядро наименьшей мощности называется минимальным и обозначается через Uker (C).

Для многих важных в практическом отношении классов КНФ процедура выявления некоторого нетривиального ядра не представляет трудности. В данном случае речь идет, прежде всего, о КНФ, кодирующих задачи обращения дискретных функций. Пусть fn - дискретная функция из класса З и Cy (fn) - КНФ над

множеством булевых переменных U , кодирующая задачу обращения функции fn в некоторой (вообще говоря, произвольной) точке у є Ran fn. Прямым следствием свойств преобразований Цейтина [7] является тот факт, что Uker (Cy (fn)) с X, где X - множество переменных функции fn (тем самым X

образует некоторое ядро DPLL-вывода для уравнения Cy (fn) = 1). Детальное доказательство данного результата мы здесь не приводим, ввиду его неоправданно большого размера. Основная его идея, тем не менее, совершенно прозрачна и заключается в том, что подстановка в Cy (fn) произвольного вектора значений переменных входа функции fn либо индуцирует вывод по правилу единичного дизъюнкта значений всех цейтиновских переменных в Cy (fn) и дает тем самым выполняющий Cy (fn) набор, либо приводит к выводу конфликта.

Рассмотрим систему логических уравнения вида (2) над множеством булевых переменных U = {ul,...,uk}. Предположим, что построена декомпозиция этой системы вида

W (Уі,...,У,) = 1,

Ч (Уі,..., у, ) = 1, (3) С (і^ z ) =1

U = {yi,...,у,}U{zi,...,zt}. Здесь C(zi,...,zt) - КНФ, для которой известно некоторое нетривиальное ядро Zker (C), причем Zker (C)с{уІ,...,ys}. Через B(W) обозначим ROBDD-представление характеристической функции системы

W (Уі,...,у,) = 1,

'..............,

Wk (Уі,...,у,) = 1.

Определение 2. Пусть B(W) - ROBDD-представление булевой функции W : {0,1} ^{0,1} над множеством булевых переменных Y = {yi,...,у,} . Назовем путь в B (W) от корня к терминальной вершине «1» полным относительно множества Y', Y' с Y , если прохождение этого пути задает присвоение соответствующих значений всем переменным из Y'.

Следующий результат в несколько иной трактовке был получен в работе [12] .

Теорема 1. Прохождение любого пути в ROBDD B (W) из корня в терминальную вершину «1», который полон относительно множества Zker (C), индуцирует

подстановку в КНФ C(z1,..., zt) значений переменных из Zker (C). Результатом этой подстановки является либо вывод по правилу единичного дизъюнкта конфликта, либо вывод выполняющего набора для C(z1,...,zt). В последнем случае имеем некоторое решение исходной системы.

Краткое доказательство. Рассмотрим произвольный путь в ROBDD B(W) из корня в терминальную вершину «1», который полон относительно множества Zker (C). Его прохождение индуцирует присвоение значений истинности всем переменным из Zker (C). Поскольку Zker (C) - ядро DPLL вывода, то подстановка произвольного вектора значений переменных из Zker (C) в C(z1,..., zt) и последующая стратегия распространения булевых ограничений (BCP-стратегия, см. [10]) либо приводит к выводу конфликта, либо порождает вывод значений всех остальных переменных из Z \ Zker (C). В последнем случае имеем набор значений переменных из Z , который, с одной стороны, соответствует некоторому пути в ROBDD B (W) из корня в терминальную вершину «1» и в этом смысле «определяет» некоторое решение системы (4). С другой стороны, данный набор выполняет КНФ C (z1,..., zt) и тем самым дает некоторое решение системы (3). Отметим, что время работы процедуры распространения булевых ограничений при подстановке в C (z1,..., zt) значений переменных из Zker (C) в общем случае линейно от числа вхождений переменных в C(z1,...,zt). Перечисленные факты доказывают справедливость утверждения теоремы.

Данная теорема дает основу для следующего алгоритма (алгоритм А1) поиска решений систем уравнений вида (3) с явно выделенным нетривиальным ядром DPLL-вывода для КНФ C (z1,..., zt) (как было сказано выше, именно такого рода системы возникают при пропозициональном кодировании задач обращения дискретных функций из класса 3 ).

Алгоритм А1. Выбирается очередной путь п в ROBDD B (W) и осуществляется подстановка соответствующих значений ядерных переменных в C(z1,...,zt). Если прохождение пути п порождает вывод конфликта в C(z1,...,zt), то этот путь исключается из ROBDD B (W). ROBDD с исключенным (запрещенным) путем п представляет собой базу ограничений, в которую занесена информация о некотором множестве конфликтных присвоений.

Тривиальная схема исключения путей в ROBDD может быть реализована посредством алгоритма Apply. Действительно, запрещение некоторой последовательности одновременных присвоений y =аг- ,...,yi =ai равносильно конъюнктивному приписыванию к системе (3) нового ограничения - уравнения (y-a1 v... vy-a'r) = 1, и соответственно модификацией ROBDD B(W), в которой данный запрет учтен, является ROBDD

Apply(B(W)• B(y-v...vу-a'r )) ,

где через B(y-ai1 v... vy-a'r ) обозначено ROBDD-представление булевой функ-

(—ай -а' \

у. 1 v... v у' r I. В соответствии с оценкой сложности алгоритма Apply

описанная процедура может потребовать O(I B (W) I • I Zker (C) I) шагов.

В [12] предложена альтернативная схема исключения путей из ROBDD, названная D-стратегией. Сложность данной процедуры оценивается величиной

O (I B (W) I). Кроме этого, в [12] отмечено, что для каждого пути в ROBDD можно естественным образом определить меру эффективности исключающей его D-стратегии. Путь, применительно к которому D-стратегия имеет наибольшую эффективность, называется D-оптимальным. Довольно неожиданный факт, касающийся сложности поиска D-оптимальных путей, состоит в следующем.

Теорема 2 (см. [12]). В произвольной ROBDD B D-оптимальный путь находится детерминированным алгоритмом, трудоемкость которого оценивается величиной O (I BI2).

Упоминаемый в данной теореме алгоритм использует в качестве основы известный алгоритм Дейкстры поиска кратчайшего пути в ориентированном взвешенном графе (см., например [1З]). Исходной ROBDD B при этом сопоставляется ориентированный граф G(B) с начальной и конечной вершинами, ребрам которого специальным образом приписываются натуральные веса. Путь кратчайшей длины (суммарного веса) из корня в терминальную вершину графа G(B) определяет в ROBDD B некоторый оптимальный путь D.

4. Особенности архитектуры BDD-решателя систем логических уравнений

В данной части мы описываем архитектуру «типового» BDD-решателя систем логических уравнений. Общая схема работы такого решателя может включать перечисленные ниже пункты.

1. Система логических уравнений подается на вход решателю в форме текстового описания.

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

3. Далее к полученным древовидным представлениям характеристических функций уравнений системы последовательно применяется описанная выше «идеология» ROBDD-подхода (пункты 1, 2).

4. На выходе решатель выдает ROBDD характеристической функции исходной системы логических уравнений, а также одно из решений системы.

Следует отметить, что оптимальным способом «машинного» представления двоичных диаграмм решений является обычная таблица. Таблица, представляющая ROBDD, состоит из трех столбцов. Каждая строка таблицы соответствует определенной вершине ROBDD и, таким образом, содержит три позиции: номер переменной данной вершины, номер нижнего потомка и номер верхнего потомка. Вообще говоря, можно использовать различные схемы нумерации вершин BDD. Наиболее естественной представляется нумерация, при которой терминальные вершины получают номера 0 и 1 (в соответствии с представляемыми ими значениями булевой функции). Последующие вершины (от терминальных к корню) получают номера, начиная с 2.

Пример 1. На следующем рисунке приведена ИОВОВ для функции ( Ф х2 ) • ( V х4 ) с порядком переменных X! < Х2 < Х3 < х4 и представляющая ее в памяти ЭВМ таблица.

№ уаг low

0 5

1 5

2 4 0 1

3 3 2 1

4 2 0 3

5 2 3 0

6 1 4 5

Рис. 1. Представление ИОВОВ в памяти ЭВМ

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

Представление уравнений рассматриваемой системы также характеризуется рядом особенностей. Как было сказано выше, весьма привлекательным форматом представления характеристических функций логических уравнений являются бинарные деревья. На рис. 2 приведено древовидное представление булевой функции, находящейся в левой части уравнения (Х1 Ф(х2 V хз))• х4 = 1

Представления такого рода дают ряд преимуществ. Они удобны как для эвристических алгоритмов получения «оптимального» порядка означивания переменных, так и для базовых алгоритмов работы с BDD (алгоритмы Build и Apply).

Интерпретация деревьев в памяти ЭВМ осуществляется при помощи связанных списков. Каждый компонент списка представляет узел дерева, соответствующий функциональному элементу. Такой список может быть реализован, например, при помощи структуры «term», описание которой приведено ниже.

typedef struct term { operation op; int priority; struct term *left; struct term *right; int value;

} term;

Одним из важнейших элементов всякого BDD-решателя является механизм выбора порядка означивания переменных, поскольку данный фактор зачастую оказывает очень существенное (а иногда решающее) влияние на размер итоговой ROBDD. В качестве примера приведем ROBDD для функции X © х2 )• (х3 v x4 ) с порядком переменных х ^ х3 ^ х2 ^ х4 (рис. 3).

Рис. 3. ИОВВБ-представление функции (х1 Ф х2) • (х3 V х4) с порядком х1 < х3 < х2 < х4

Как видно из рисунка, число вершин полученной ИОВОВ равно десяти, в то время как представленная выше (рис. 1) ИОВОВ для этой же функции с порядком означивания переменных х1 ^ х2 ^ х3 ^ х4 состоит из семи вершин. Механизмы выбора порядка означивания переменных носят, как правило, характер эвристик. Ниже приведена общая схема эвристики формирования порядка означивания переменных. Данная эвристика выстраивает «иерархию влияния» одних переменных на другие, анализируя статистику появления переменных в уравнениях исходной системы.

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

2) Производится сортировка переменных по убыванию весов. Сформированный порядок - это порядок означивания переменных при построении ИОВОБ-представления характеристической функции системы.

Пример 2. Далее приведен пример реализации эвристики формирования порядка, которая оценивает степень «взаимного влияния» переменных. Для произвольной переменной х , встречающейся в некотором уравнении системы, ее вес вычисляется как функция от соответствующего дерева Т : инициальное значение веса равно 0, затем в процессе обхода дерева Т данное значение изменяется при помощи некоторой рекурсивной процедуры. Примером задания подобного рода процедуры является следующая формула:

^1Т (х) : = ^1Т (х) + gT (йт (х)) .

В данной формуле фигурирует функция gT (•), аргументом которой является «глубина расположения» переменной х в дереве Т . Обычно функция gT (•) подбирается эвристически.

Для большей иллюстративности сказанного рассмотрим следующую систему из двух логических уравнений:

[(х1 Ф(х2 Vх3))• х4 = 1,

[х2 Ф (х1 V (х3 • х4 )) = 1.

Дерево Т1 , «представляющее» первое уравнение, приведено на рис. 2. В данном дереве (х4 ) = 1, (х1) = 2 , йт^ (х2 ) = (х3) = 3 . Допустим, что вычис-

лены следующие значения весов переменных, входящих в первое уравнение: wtTl (х1 ) = 597, wtTl (х2 ) = 594, wtTl (х3 ) = 594, wtTl (х4 ) = 600 (если бы система

состояла только из первого уравнения, то следовало бы строить ИОВОВ, используя следующий порядок означивания переменных: х4 ^ х1 ^ х2 ^ х3 ).

Дерево Т2 , «представляющее» второе уравнение рассматриваемой системы,

приведено на рис. 4.

Предположим, что в соответствии с описанной процедурой найдены значения весов

wtт2 (х1) = 597, wtт2 (х2 ) = 600, wtт2 (х3) =

= wtT2 (х4 ) = 594 . В качестве итоговых значений

весов переменных могут быть взяты суммы весов по отдельным деревьям (wt(х) = '^JTwtT (х)).

В рассматриваемом примере имеем wt (х1 ) = 1194, wt (х2 ) = 1197, wt (х3 ) = 1188, wt (х4 ) = 1197. Откуда следует, что порядок означивания переменных при построении ИОВВВ-представления характеристической

функции рассматриваемой системы в соответствии с описанным подходом должен быть следующим: х2 ^ х4 ^ х1 ^ х3 .

Предположим, что выбран некоторый порядок означивания переменных (например, в соответствии с представленной выше эвристикой) - х^х xi2х ... х х х xt .

Число r е {1,...,n} называем индексом переменной х^ относительно выбранного порядка. На следующем шаге рассматриваемая система логических уравнений вида разбивается на подмножества, называемые слоями. Первый слой образован всеми уравнениями системы, в которые входит переменная х,г Второй слой образован всеми оставшимися уравнениями, содержащими переменную х^, причем х,г - переменная наименьшего индекса по уравнениям, не входящим в первый слой. И так далее. Пусть R - число определяемых описанным образом слоев системы. Очевидно, что 1 < R < n . ROBDD каждого слоя Bj, j е {1,...,R} строится по

следующей рекурсивной схеме:

Bj = Apply (Bh • APPly (в2 •...• APPly (\_! • Bk ))),

где Bj ,.., B]k - ROBDD булевых функций в левых частях уравнений системы,

образующих j-й слой. Итоговая ROBDD характеристической функции системы строится по аналогичной рекурсивной схеме:

B = APPly (B • Apply (B2 • APPly (B3 • . ..• APPly (BR-1 • BR)))).

Одним из серьезных препятствий к применению BDD в решении систем логических уравнений является проблема чрезмерного роста используемой BDD-решателем памяти. Вообще говоря, объем используемой BDD-решателем памяти растет как некоторая экспонента от числа применения алгоритма Apply. Использование разного рода эвристик (в частности, описанной выше эвристики слоев) позволяет лишь уменьшить основание экспоненты, но не решить проблему в принципе. Задачи обращения криптографических функций из класса 3 интересны тем, что кодирующие их системы логических уравнений выполнимы, как правило, на одном наборе. На практике это означает, что при построении ROBDD характеристической функции такой системы до некоторого момента будет наблюдаться экспоненциальный рост числа вершин в текущей ROBDD, а затем начнется «экспоненциальное сокращение» ее объема (в результате должна получиться ROBDD, представляющая элементарную конъюнкцию n литералов). Качество эвристик формирования порядка и разбиения на слои можно оценивать на основе наблюдаемых коэффициентов роста (предполагая примерно те же коэффициенты убывания).

Еще одна возможность повышения эффективности BDD-подхода в решении систем логических уравнений состоит в использовании некоторых фрагментов рассматриваемой системы в качестве «шаблонов» для построении на их основе более сложных конструкций. Данные рассуждения иллюстрируются приведенным ниже примером.

Пример 3. Пусть дана функция f (х1, х2, х3, х4, х5 ) = х1 •(х2 © х3 © х4 )• х5. И пусть необходимо построить ROBDD данной функции, используя порядок означивания переменных х х х2 х х3 х х4 х х5. Применяя для построения ROBDD алгоритм Build, получим следующую ROBDD (рис. 5).

Рис. 5. ROBDD функции х ' (х2 © х3 © х4)' х5 и ее древовидное представление

Алгоритм Build при этом произвел построение и последующее усечение полного дерева решений данной функции, состоящего из 63 вершин. Можно построить диаграмму решений этой функций значительно эффективнее. Дерево, представляющее данную функцию в памяти ЭВМ, изображено на рис. 5 справа. Анализируя это дерево, приходим к выводу, что зная «типовую» структуру ROBDD для конъюнкции и сложения по модулю 2, можно построить ROBDD исходной функции, не прибегая к помощи алгоритмов Build или Apply. Действительно, ROBDD функции у (х2, х3, х4 ) = х2 © х3 © х4 с порядком означивания переменных х2 ^ х3 ^ х4 и функции z (хь у, х5) = хх' у' х5 с порядком означивания переменных хх ^ у < х5 имеют соответственно вид (рис. 6):

Подставляя в последней ROBDD вместо переменной у ROBDD для функции у (х2, х3, х4) = х2 © х3 © х4, получим ROBDD исходной функции.

Сформулируем условия, при выполнении которых возможно использование описанной процедуры. Пусть некоторая булева функция f (х1,..., хп) задана формулой исчисления высказываний Lf (х1,...,хп) и ее подформула Ly (х^,...,х]т) задает булеву функцию у (х, .., х, ), {х^,..., х, }с{х1,..., хп}. Пусть

х^ х хг2 х... х х{ х х{ - общий порядок означивания переменных для f

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

1. Условие автономности порядка х}- х ... х х, относительно общего порядка

требует, чтобы в общем порядке порядок х}1 х... х х, образовывал связный

интервал, то есть не существовало переменной х0, х0 g {х^,...,х, }, для которой

в общем порядке имеет место следующая картина:

хг1 х ... х х}- х ... х х0 х ... х х, х ... х х^ (например, порядок х2 х х3 х х4 подчи-

нен общему порядку х1 х х2 х х3 х х5 х х4, но не удовлетворяет условию автономности).

2. Никакая переменная из множества {х, ,...,х, } не должна входить в форму-

I J1 Jm }

лу Lf (х1,...,хп) вне формулы Ly (х^,...,х, ) .

Заключение

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

ЛИТЕРАТУРА

1. Lee C.Y. Representation of switching circuits by binary-decision programs // Bell Systems Techn. J. 1959. No. 38. P. 985 - 999.

2. Вгуап R.E. Graph-based algorithms for boolean function manipulation // IEEE Trans. Computers. 1986. V. 35. No. 8. P. 677 - 691.

3. Семенов А.А. О сложности обращения дискретных функций из одного класса // Дискретный анализ и исследование операций. 2004. Т. 11. № 4. С. 44 - 55.

4. Memel Ch., Theobald T. Algorithms and Data Structures in VLSI-Design: OBDD-Founda-tions and Applications. Springer-Verlag, 1998. 276 p.

5. Катленд Н. Вычислимость. Введение в теорию рекурсивных функций. М.: Мир, l983.

25б с.

6. Гэри М., Джонсон Д. Вычислительные машины и труднорешаемые задачи. М.: Мир, l982. 4^ с.

7. Семенов А.А. Логико-эвристический подход в криптоанализе генераторов двоичных последовательностей // Труды Междунар. науч. конф. ПАВТ’07. Челябинск: ЮУрГУ, 2007. Т. l. С. l70 - l80.

8. Заикин О.С., Семенов А.А. Технология крупноблочного параллелизма в SAT-задачах // Проблемы управления. 2008. № l. С. 43 - 50.

9. Een N., Sorensson N. Translating Pseudo-Boolean constraints into SAT // J. Satisfiability, Boolean Modeling and Computation. 200б. No. 2. P. l - 25.

10. Marqeus-Silva J.P. and Sakallah K.A. GRASP: A search algorithm for propositional satisfiability // IEEE Trans. on Computers. l999. V. 48. No. 5 P. 50б - 52l.

11. Семенов А.А., Заикин О.С. Неполные алгоритмы в крупноблочном параллелизме комбинаторных задач // Вычислительные методы и программирование. 2008. Т. 9. № l. С. ll2 - l22.

12. Семенов А.А. Консервативные преобразования систем логических уравнений // Вестник ТГУ. Приложение. 2007. № 23. С. 52 - 59.

13. Кормен Т., Лейзерсон Ч., Ривест Р. Алгоритмы. Построение и анализ. М.: МЦНМО, 200l. 955 с.

Статья представлена кафедрой информационных технологий в исследовании дискретных структур радиофизического факультета Томского государственного университета. Поступила в редакцию 27 ноября 2008 г.