КНФ

Материал из Викиконспекты
Версия от 06:56, 17 октября 2011; Permenko (обсуждение | вклад) (Определение)
Перейти к: навигация, поиск

Определение

Определение:
Простой дизъюнкцией или дизъюнктом называется дизъюнкция одной или нескольких переменных или их отрицаний, причём каждая переменная встречается не более одного раза.

Элементарная дизъюнкция

  • правильная, если в неё каждая переменная входит не более одного раза (включая отрицание);
  • полная, если в неё каждая переменная (или её отрицание) входит ровно 1 раз;
  • монотонная, если она не содержит отрицаний переменных.


Определение:
КНФ (Конъюнктивная Нормальная Форма) — нормальная форма, в которой булева функция имеет вид конъюнкции нескольких простых дизъюнктов.

Пример КНФ: f(x,y)=(xy)(y¯z)

КНФ может быть преобразована к эквивалентной ей ДНФ путём раскрытия скобок по правилу: a(bc)abac, которое выражает дистрибутивность конъюнкции относительно дизъюнкции. После этого необходимо в каждой конъюнкции удалить повторяющиеся переменные или их отрицания, а также выбросить из дизъюнкции все конъюнкции, в которых встречается переменная вместе со своим отрицанием. При этом результатом не обязательно будет СДНФ, даже если исходная КНФ была СКНФ. Точно также можно всегда перейти от ДНФ к КНФ. Для этого следует использовать правило abc(ab)(ac), выражающее дистрибутивность дизъюнкции относительно конъюнкции. Результат нужно преобразовать описанным выше способом, заменив слово «конъюнкция» на «дизъюнкция» и наоборот.


Определение:
СКНФ (Совершенная Конъюнктивная Нормальная Форма) — это такая КНФ, которая удовлетворяет условиям:
  • в ней нет одинаковых элементарных дизъюнкций
  • в каждой дизъюнкции нет одинаковых переменных
  • каждая элементарная дизъюнкция содержит каждый из аргументов функции.

Пример СКНФ: f(x,y,z)=(x¯yz)(xy¯z)

Теорема:
Для любой булевой функции f(x), не равной тождественной единице, существует СКНФ, ее задающая.
Доказательство:

Поскольку инверсия функции ¯f(x) равна единице на тех наборах, на которых f(x) равна нулю, то СДНФ для ¯f(x) можно записать следующим образом: ¯f(x)=f(xσ1,xσ2,...,xσn)=0(xσ11xσ22...xσnn), где σi обозначает наличие или отсутствие отрицание при xi

Найдём инверсию левой и правой части выражения: f(x)=¯f(xσ1,xσ2,...,xσn)=0(xσ11xσ22...xσnn)

Применяя дважды к полученному в правой части выражению правило де Моргана, получаем: f(x)=f(xσ1,xσ2,...,xσn)=0(x¯σ11x¯σ22...x¯σnn)

Последнее выражение и является СКНФ. Так как СКНФ получена из СДНФ, которая может быть посторена для любой функции, то теорема доказана.

Алгоритм построения СКНФ по таблице истинности

1. В таблице истинности отмечаем те наборы переменных, на которых значение функции равно 0.

x y z <xyz>
0 0 0 0
0 0 1 0
0 1 0 0
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 1

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

x y z <xyz>
0 0 0 0 (xyz)
0 0 1 0 (xy¯z)
0 1 0 0 (x¯yz)
0 1 1 1
1 0 0 0 (¯xyz)
1 0 1 1
1 1 0 1
1 1 1 1

3. Все полученные дизъюнкции связываем операциями конъюнкции.

med(x,y,z)=(xyz)(¯xyz)(x¯yz)(xy¯z)

Примеры СКНФ для некоторых функций

Стрелка Пирса: xy=(¯xy)(x¯y)(¯x¯y)

Медиана трёх: f(x,y,z)=(xyz)(¯xyz)(x¯yz)(xy¯z)

Ссылки