
Лекция 4
§ 2.2. Совершенные дизъюнктивные и конъюнктивные нормальные формы
|
Двойственная функция. Принцип двойственности. Разложение булевой функции по переменным. Совершенная дизъюнктивная нормальная форма (СДНФ). Совершенная конъюнктивная нормальная форма (СКНФ). Представление булевой функции в виде СДНФ и СКНФ. |
Базовые понятия и утверждения
1. Принцип двойственности. Функция,
заданная формулой
,
называется двойственной к функции
.
Функцию, двойственную к
,
обозначают
,
таким образом,
.
Пример 1. Используя определение, найти функции, двойственные к дизъюнкции, конъюнкции и функциям одной переменной.
◄ Пусть
.
Тогда
.
Пусть
.
Тогда
.
Пусть
.
Тогда
.
Пусть
.
Тогда
.
Пусть
.
Тогда
.
Пусть
.
Тогда
.
►
Сравним таблицы истинности произвольной
функции
и двойственной к ней функции
(табл. 2.17).
Таблица 2.17 |
|||
|
|
|
|
0 |
0 |
|
|
0 |
1 |
|
|
1 |
0 |
|
|
1 |
1 |
|
|
Нетрудно заметить, что столбец значений
функции
можно получить из столбца значений
функции
действуя по следующему алгоритму:
1) столбец значений функции
переписать в обратном порядке (т.е.
число, стоящее в первой строке, записать
в последнюю строку; число, стоящее во
второй строке, - в предпоследнюю строку
и т.д.);
2) в получившемся в результате выполнения п. 1 столбце значений каждое число заменить его отрицанием (0 заменить 1 и 1 заменить 0).
Очевидно, что этот алгоритм можно использовать для построения двойственной функции в случае любого числа аргументов.
Если функция задана вектором значений, то роль столбца значений в алгоритме выполняет вектор значений.
Пример 2. Задать вектором значений функцию, двойственную к данной:
а); б)
.
◄ а)
;
б)
.
►
На примерах мы имели возможность
убедиться, что отношение двойственности
между функциями симметрично, т.е. если
функция
,
то функция
.
Это утверждение несложно обосновать
теоретически.
Действительно, пусть
.
Тогда
.
Пусть функция
задана формулой, и мы хотим построить
формулу для двойственной к ней функции
.
Согласно определению, это можно сделать,
заменив в формуле, которой задана
,
каждую переменную ее отрицанием и взяв
отрицание от самой формулы (именно так
мы поступили в примере 1).
Рассмотрим другой способ построения
формулы для
по формуле, представляющей
.
Этот способ основан на принципе
двойственности: если формула
задает функцию
,
то формула, полученная из нее заменой
символов функций
на символы двойственных к ним функций
,
задает функцию
,
двойственную к функции
.
Полученную таким образом формулу
будем называть двойственной к
и обозначать
.
Доказательство принципа двойственности приведено во второй части параграфа.
Если функция задана формулой над
множеством
,
то, используя пример 1, принципу
двойственности можно придать более
конкретный вид: если в формуле
,
представляющей функцию
,
все конъюнкции заменить на дизъюнкции,
дизъюнкции - на конъюнкции, 1
на 0, 0
на 1, то получим
формулу
,
представляющую функцию
,
двойственную к
.
Пример 3. Задать формулой функцию, двойственную к данной:
а)
; б)
.
◄ а)
.
Обратим внимание на следующее
обстоятельство. В записи формулы,
представляющей
,
конъюнкция вследствие соглашения о
краткой записи формул в скобки не взята.
Строя двойственную формулу, мы меняем
конъюнкцию на дизъюнкцию. При этом
следует учитывать, что связка «
»
имеет меньший приоритет выполнения,
чем «
»,
значит, чтобы двойственная формула
сохранила структуру исходной формулы,
при переходе от конъюнкции к дизъюнкции
нужно взять дизъюнкцию в скобки. В то
же время при переходе от дизъюнкции к
конъюнкции скобки можно опустить.
б)
.
►
Если функции равны, то и двойственные
к ним функции равны. В сочетании с
принципом двойственности это очевидное
обстоятельство позволяет получать
новые равносильности, переходя от
равенства
к равенству
.
Например, из равносильности 1 (см. теорему
2.1) можно получить равносильность 2, а
из равносильности 2 - равносильность 1.
Действительно, от равенства
перейдем к равенству
и, заменив дизъюнкцию на конъюнкцию, а
конъюнкцию на дизъюнкцию, получим
равенство
.
Примерами других пар, связанных законом двойственности, являются равносильности 3 и 4, 5 и 6, 7 и 8, 9 и 10, 11 и 12, 13 и 14, 15 и 16, 17 и 18.
Пример 4. Задать
функцию, двойственную к функции
:
а) вектором значений; б) формулой.
◄ а) Начнем с того, что зададим таблично
(табл. 2.18) саму функцию
.
Таблица 2.18 |
||||||
|
|
|
|
|
|
|
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
Далее:
.
б) Используя принцип двойственности и
результат выполнения упр. 2.12, из формулы
получим формулу
.
►
2. Задание функции совершенной дизъюнктивной нормальной формой. Мы умеем переходить от реализации функции формулой к заданию ее таблицей истинности. Не меньший интерес представляет обратный переход - от таблицы истинности к формуле. Этот переход неоднозначен - формул, которыми можно задать любую булеву функцию, бесконечно много. Особый интерес имеет задание функций через дизъюнкцию, конъюнкцию и отрицание.
Введем обозначения:
,
.
Каждую булеву функцию
от
переменных, за исключением тождественно
равной нулю, можно задать формулой
(здесь
дизъюнкция берется по всевозможным
наборам значений переменных
,
на которых функция
равна 1).
Эту формулу называют совершенной дизъюнктивной нормальной формой (сокращенно СДНФ).
Доказательство этого утверждения приведено во второй части параграфа.
Чтобы построить СДНФ функции, нужно действовать следующим образом:
1) выбрать в таблице истинности функции все наборы значений переменных, на которых функция равна 1;
2) для каждого такого набора записать конъюнкцию, в которую войдут все переменные, причем, если значение переменной на данном наборе равно 0, то она войдет в конъюнкцию со знаком отрицания, а если 1, то без знака отрицания;
3) записать дизъюнкцию всех выписанных в п. 2 конъюнкций.
Пример 5. Задать функцию в виде СДНФ:
а)
; б)
;
в)
; г)
.
◄ а) - в) Зададим функции таблично (табл. 2.19) и выпишем для них СДНФ.
Таблица 2.19 |
||||
|
|
|
|
|
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
0 |
;
;
.
г) Запишем СДНФ, воспользовавшись
таблицей истинности функции
(см.
табл. 2.18):
.
►
3. Задание функции совершенной конъюнктивной нормальной формой. Рассмотрим еще один способ задания функции формулой над множеством, состоящим из дизъюнкции, конъюнкции и отрицания.
Каждую булеву функцию
,
не равную тождественно единице, можно
задать формулой
(здесь
конъюнкция берется по всевозможным
наборам значений переменных
,
на которых функция
равна 0).
Эту формулу называют совершенной конъюнктивной нормальной формой (сокращенно СКНФ).
Доказательство этого утверждения приведено во второй части параграфа.
Чтобы записать СКНФ функции, нужно действовать следующим образом:
1) выбрать в таблице истинности функции все наборы значений переменных, на которых функция равна 0;
2) для каждого такого набора записать дизъюнкцию, в которую войдут все переменные, причем, если значение переменной на данном наборе равно 1, то она войдет в дизъюнкцию со знаком отрицания, а если 0, то без знака отрицания;
3) записать конъюнкцию всех выписанных в п. 2 дизъюнкций.
Пример 6. Задать функцию в виде СКНФ:
а)
; б)
;
в)
; г)
.
◄ а) - г) Опираясь на таблицы истинности функций (см. табл. 2.19 и 2.18), запишем:
а)
;
б)
;
в)
;
г)
.
►
Каждая булева функция может быть
задана формулой над множеством
.
Действительно, если
,
то
можно задать в виде СКНФ. Если
,
то
можно задать в виде СДНФ.