Конъюнктивная нормальная форма

Материал из testwiki
Перейти к навигации Перейти к поиску

Конъюнкти́вная норма́льная фо́рма (КНФ) в булевой логике — нормальная форма, в которой булева формула имеет вид конъюнкции дизъюнкций литералов. Конъюнктивная нормальная форма удобна для автоматического доказательства теорем. Любая булева формула может быть приведена к КНФ.[1] Для этого можно использовать: закон двойного отрицания, закон де Моргана, дистрибутивность.

Примеры и контрпримеры

Формулы в КНФ:

¬A∧(B∨C),
(A∨B)∧(¬B∨C∨¬D)∧(D∨¬E),
A∧B.

Формулы не в КНФ:

¬(B∨C),
(A∧B)∨C,
A∧(B∨(D∧E)).

Но эти 3 формулы не в КНФ эквивалентны следующим формулам в КНФ:

¬B∧¬C,
(A∨C)∧(B∨C),
A∧(B∨D)∧(B∨E).

Построение КНФ

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

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

A→B=¬A∨B,
A↔B=(¬A∨B)∧(A∨¬B).

2) Заменить знак отрицания, относящийся ко всему выражению, знаками отрицания, относящимися к отдельным переменным высказываниям на основании формул:

¬(A∨B)=¬A∧¬B,
¬(A∧B)=¬A∨¬B.

3) Избавиться от знаков двойного отрицания.

4) Применить, если нужно, к операциям конъюнкции и дизъюнкции свойства дистрибутивности и формулы поглощения.

Пример построения КНФ

Приведем к КНФ формулу

F=(X→Y)∧((¬Y→Z)→¬X).

Преобразуем формулу F к формуле, не содержащей →:

F=(¬X∨Y)∧(¬(¬Y→Z)∨¬X)=(¬X∨Y)∧(¬(¬¬Y∨Z)∨¬X).

В полученной формуле перенесем отрицание к переменным и сократим двойные отрицания:

F=(¬X∨Y)∧((¬Y∧¬Z)∨¬X).

По закону дистрибутивности получим КНФ:

F=(¬X∨Y)∧(¬X∨¬Y)∧(¬X∨¬Z).

k-конъюнктивная нормальная форма

k-конъюнктивной нормальной формой называют конъюнктивную нормальную форму, в которой каждая дизъюнкция содержит ровно k литералов.

Например, следующая формула записана в 2-КНФ:

(A∨B)∧(¬B∨C)∧(B∨¬C).

A≡((x→y)→!x)→(x→(y&x));

Переход от КНФ к СКНФ

Если в простой дизъюнкции не хватает какой-то переменной (например, z), то добавляем в неё выражение :Z∧¬Z=0 (это не меняет самой дизъюнкции), после чего раскрываем скобки с использованием распределительного закона:

(X∨Y)∧(X∨¬Y∨¬Z)=(X∨Y∨(Z∧¬Z))∧(X∨¬Y∨¬Z)=(X∨Y∨Z)∧(X∨Y∨¬Z)∧(X∨¬Y∨¬Z).

Таким образом, из КНФ получена СКНФ.

Формальная грамматика, описывающая КНФ

Следующая формальная грамматика описывает все формулы, приведенные к КНФ:

<КНФ> → <дизъюнкт>
<КНФ> → <КНФ> ∧ <дизъюнкт>
<дизъюнкт> → <литерал>;
<дизъюнкт> → (<дизъюнкт> ∨ <литерал>)
<литерал> → <терм>
<литерал> → ¬<терм>

где <терм> обозначает произвольную булеву переменную.

Задача выполнимости формулы в КНФ

В теории вычислительной сложности важную роль играет задача выполнимости булевых формул в конъюнктивной нормальной форме. Согласно теореме Кука, эта задача NP-полна, и она сводится к задаче о выполнимости формул в 3-КНФ, которая сводится и к которой в свою очередь сводятся другие NP-полные задачи.

Задача о выполнимости 2-КНФ формул может быть решена за линейное время.

Особенности обозначений

Следует отметить, что для удобства восприятия в качестве обозначения конъюнкции и дизъюнкции часто используют символы арифметического умножения и сложения, при этом символ умножения часто опускается. В этом случае формулы булевой алгебры выглядят как алгебраические полиномы, что более привычно для глаза, однако иногда может привести к недоразумениям.

Например, следующие записи эквивалентны:

(A∨B)∧(¬B∨C∨¬D)∧(D∨¬E);
(A∨B)∧(B‾∨C∨D‾)∧(D∨E‾);
(A∨B)⋅(B‾∨C∨D‾)⋅(D∨E‾);
(A∨B)(B‾∨C∨D‾)(D∨E‾);
(A+B)(B‾+C+D‾)(D+E‾).

По этой причине КНФ в русскоязычной литературе иногда называют «произведением сумм», что является калькой с английского термина «product of sums».

См. также

Примечания

Шаблон:Reflist

Литература

  • Ю.И. Галушкина, А.Н. Марьямов: Конспект лекций по дискретной математике - 2-е изд., испр. - М.: Айрис-пресс, 2008. - 176 с. - (Высшее образование)

Ссылки

  1. ↑ Ошибка цитирования: Неверный тег <ref>; для сносок "nf" не указан текст