пятница, 26 декабря 2014 г.

ДНФ и СДНФ

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

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

Формулы в ДНФ:
A \or B
(A \and B) \or \neg A
(A \and B \and \neg C) \or (\neg D \and E \and F) \or (C \and D) \or B
Формулы не в ДНФ:
\neg(A \or B)
A \or (B \and (C \or D))

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

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) \downarrow \neg (Y \rightarrow Z))
Выразим логические операции → и ↓ через :\vee \wedge \neg
F = ((\neg X \vee Y) \downarrow \neg(\neg Y \vee Z)) = \neg ((\neg X \vee Y) \vee \neg (\neg Y \vee Z))
В полученной формуле перенесем отрицание к переменным и сократим двойные отрицания:
F = \neg ((\neg X \vee Y) \vee \neg (\neg Y \vee Z)) = (\neg \neg X \wedge \neg Y) \wedge (\neg Y \vee Z) = (X \wedge \neg Y) \wedge (\neg Y \vee Z)
Используя закон дистрибутивности, получаем:
F = (X \wedge \neg Y \wedge \neg Y) \vee (X \wedge \neg Y \wedge Z)
Используя идемпотентность конъюкции, получаем ДНФ:
F = (X \wedge \neg Y ) \vee (X \wedge \neg Y \wedge Z)


Совершенная дизъюнктивная нормальная форма

Соверше́нная дизъюнкти́вная норма́льная фо́рма (СДНФ) — это такая ДНФ, которая удовлетворяет трём условиям:
  • в ней нет одинаковых элементарных конъюнкций
  • в каждой конъюнкции нет одинаковых пропозициональных букв
  • каждая элементарная конъюнкция содержит каждую пропозициональную букву из входящих в данную ДНФ пропозициональных букв, причём в одинаковом порядке.
Для любой функции алгебры логики существует своя СДНФ, причём единственная.
Для того, чтобы получить СДНФ функции, требуется составить её таблицу истинности. К примеру, возьмём одну из таблиц истинности:
x_1x_2x_3f(x_1, x_2, x_3)
0001
0011
0101
0110
1000
1010
1101
1110
В ячейках результата f(x_1, x_2, x_3) отмечаются лишь те комбинации, которые приводят логическое выражение в состояние единицы. Далее рассматриваются значения переменных при которых функция равна 1. Если значение переменной равно 0, то она записывается с инверсией. Если значение переменной равно 1, то без инверсии.
Первая строка содержит 1 в указанном поле. Отмечаются значения всех трёх переменных, это:
  • x_1 = 0
  • x_2 = 0
  • x_3 = 0
Нулевые значения — тут все переменные представлены нулями — записываются в конечном выражении инверсией этой переменной. Первый член СДНФ рассматриваемой функции выглядит так: \overline{x_1} \cdot \overline{x_2} \cdot \overline{x_3}
Переменные второго члена:
  • x_1 = 0
  • x_2 = 0
  • x_3 = 1
x_3 в этом случае будет представлен без инверсии: \overline{x_1} \cdot \overline{x_2} \cdot x_3
Таким образом анализируются все ячейки f(x_1, x_2, x_3). Совершенная ДНФ этой функции будет дизъюнкцией всех полученных членов (элементарных конъюнкций).
Совершенная ДНФ этой функции:
f(x_1, x_2, x_3) = (\overline{x_1} \and \overline{x_2} \and \overline{x_3})
\vee (\overline{x_1} \and \overline{x_2} \and x_3)
\vee (\overline{x_1} \and x_2 \and \overline{x_3})
\vee (x_1 \and x_2 \and \overline{x_3})

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

Если в какой-то простой конъюнкции недостаёт переменной, например, Z, вставляем в неё выражение
Z \vee \neg Z = 1,
после чего раскрываем скобки (при этом повторяющиеся дизъюнктные слагаемые не пишем, так как Z \vee Z = Z по закону идемпотентности). Например:
X \vee \neg Y \neg Z = X(Y \vee \neg Y)(Z \vee \neg Z) \vee (X \vee \neg X)\neg Y \neg Z =

 XYZ \vee X \neg YZ \vee XY \neg Z \vee X \neg Y \neg Z \vee X \neg Y \neg Z \vee \neg X \neg Y \neg Z =
 = XYZ \vee X \neg YZ \vee XY \neg Z \vee X \neg Y \neg Z \vee \neg X \neg Y \neg Z
Таким образом, из ДНФ получили СДНФ.
По материалам Википедии: 

Комментариев нет:

Отправить комментарий