Вопрос 22

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

Алгоритм построения КНФ
1) Избавиться от всех логических операций, содержащихся в формуле, заменив их основными: конъюнкцией, дизъюнкцией, отрицанием. Это можно сделать, используя равносильные формулы:
Описание: A \rightarrow B = \neg A \vee B
Описание: A \leftrightarrow B = (A \wedge B) \vee (\neg A \wedge \neg B)
2) Заменить знак отрицания, относящийся ко всему выражению, знаками отрицания, относящимися к отдельным переменным высказываниям на основании формул:
Описание: \neg (A \vee B) = \neg A \wedge \neg B
Описание: \neg (A \wedge B) = \neg A \vee \neg B
3) Избавиться от знаков двойного отрицания.
4) Применить, если нужно, к операциям конъюнкции и дизъюнкции свойства дистрибутивности и формулы поглощения.

Пример построения КНФ
Приведем к КНФ формулу
Описание:  F = ( X \rightarrow Y ) \wedge (( \neg Y \rightarrow Z ) \rightarrow \neg X )
Преобразуем формулу F к формуле не содержащей → :
Описание:  F = ( \neg X \vee Y ) \wedge ( \neg ( \neg Y \rightarrow Z ) \vee \neg X ) = ( \neg X \vee Y ) \wedge ( \neg ( \neg \neg Y \vee Z ) \vee \neg X )
В полученной формуле перенесем отрицание к переменным и сократим двойные отрицания:
Описание:  F = ( \neg X \vee Y) \wedge ((\neg Y \wedge \neg Z) \vee \neg X) = (\neg X \vee Y) \wedge ((\neg Y \wedge \neg Z) \vee \neg X)
По закону дистрибутивности получим КНФ:
Описание: F = (\neg X \vee Y) \wedge (\neg X \vee \neg Y) \wedge (\neg X \vee \neg Z))

k-конъюнктивная нормальная форма
k-конъюнктивной нормальной формой называют конъюнктивную нормальную форму, в которой каждая дизъюнкция содержит ровно k литералов.
Например, следующая формула записана в 2-КНФ:
Описание: (A \or B) \and (\neg B \or C) \and (B \or \neg C)

Переход от КНФ к СКНФ
Если в простой дизъюнкции не хватает какой-то переменной (например, z, то добавляем в нее выражение :Описание: Z \wedge \neg Z = 0 (это не меняет самой дизъюнкции), после чего раскрываем скобки с использованием распределительного закона):
Описание: (X \vee Y) \wedge (X \vee \neg Y \vee \neg Z) = (X \vee Y \vee (Z \wedge \neg Z)) \wedge (X \vee \neg Y \vee \neg Z) = (X \vee Y \vee Z) \wedge (X \vee Y \vee \neg Z) \wedge (X \vee \neg Y \vee \neg Z)
Таким образом, из КНФ получена СКНФ.


На Главную

Hosted by uCoz