Любая булева функция может иметь бесконечно много представлений в виде ДНФ и КНФ. Особое место среди этих представлений занимают совершенные ДНФ (СДНФ) и совершенные КНФ (СКНФ).
Определение 1. Совершенной ДНФ называется ДНФ, в которой в каждый конъюнкт каждая переменная
из набора {
}входит ровно один раз, причем входит либо сама
, либо ее отрицание
.
Определение 2. Совершенной КНФ называется КНФ, в которой в каждый дизъюнкт каждая переменная
из набора {
}входит ровно один раз, причем входит либо сама
, либо ее отрицание
.
Для нахождения СДНФ и СКНФ исходной формулы составляется ее таблица истинности, а затем по ней строится требуемая совершенная нормальная форма. Так, для нахождения СДНФ:
1. Из таблицы истинности выбираем наборы переменных, на которых функция принимает значение 1, и соединяем их конъюнкцией. При этом если переменная принимает значение равное 1, то она входит без отрицания.
2. Все конъюнкции соединяем дизъюнкциями.
Для нахождения СКНФ:
1. Из таблицы истинности выбираем наборы переменных, на которых функция принимает значение 0, и соединяем их дизъюнкцией. При этом если переменная принимает значение равное 0, то она входит без отрицания.
2. Все дизъюнкции соединяем конъюнкциями.
Описанный способ нахождения СДНФ и СКНФ по таблице истинности бывает часто более трудоемким, чем алгоритм, основанный на эквивалентных преобразованиях. Для нахождения СДНФ данную формулу приводим сначала к ДНФ, а затем преобразовываем ее конъюнкты в конституанты единицы с помощью следующих действий:
1. Если в конъюнкт входит некоторая переменная вместе со своим отрицанием, то мы удаляем этот конъюнкт из ДНФ.
2. Если в конъюнкт одна и та же переменнаявходит несколько раз, то удаляем все такие переменные, кроме одной.
3. Если в некоторый конъюнкт не входит некоторая переменная, то в этот конъюнкт, используя закон исключенного третьего, вводим эту переменную путем умножения на единицу, а затем, применяя закон дистрибутивности, приводим полученную формулу к ДНФ.
4. Если в полученной ДНФ имеется несколько одинаковых конъюнктов, то оставляем только один из них.
Описание алгоритма приведения КНФ к СКНФ путем тождественных преобразований аналогично вышеизложенному описанию алгоритма приведения ДНФ к СДНФ. Однако в п.3 введение недостающей переменной осуществляется с помощью закона исключенного третьего путем прибавления нуля.
Кроме того, СКНФ можно получить по найденной СДНФ. Для этого:
1. Получаем отрицание исходной формулы за счет выписывания недостающих конъюнкций через операцию дизъюнкции (
).
2. Выполняем отрицание полученной формулы (
.
Аналогично можно получить СДНФ по найденной ДНФ.
Пример.
Дана функция f(x, y, z) = (x ® y) ¯
. Получить СДНФ и СКНФ.
В п. 4.3 получили для f(x, y, z) = (x ® y) ¯
ДНФ:
и КНФ:
.
Используя преобразование, получим СДНФ:
=
=
=
=
.
Используя преобразование, получим СКНФ:
=

.
Полученные совершенные формы соответствуют таблице истинности (см. п. 4.1).






