КНФ — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Примеры СКНФ для некоторых функций)
(КНФ)
Строка 4: Строка 4:
 
Простой дизъюнкцией или дизъюнктом называется дизъюнкция одной или нескольких переменных или их отрицаний, причём каждая переменная встречается не более одного раза.
 
Простой дизъюнкцией или дизъюнктом называется дизъюнкция одной или нескольких переменных или их отрицаний, причём каждая переменная встречается не более одного раза.
 
}}
 
}}
Элементарная дизъюнкция
+
Простая дизъюнкция
* '''правильная''', если в неё каждая переменная входит не более одного раза (включая отрицание);
 
 
* '''полная''', если в неё каждая переменная (или её отрицание) входит ровно 1 раз;
 
* '''полная''', если в неё каждая переменная (или её отрицание) входит ровно 1 раз;
 
* '''монотонная''', если она не содержит отрицаний переменных.
 
* '''монотонная''', если она не содержит отрицаний переменных.
Строка 14: Строка 13:
 
}}
 
}}
 
Пример КНФ:
 
Пример КНФ:
<tex>f(x,y) = (x \lor y) \land (y \lor \overline{z})</tex>
+
<tex>f(x,y) = (x \lor y) \land (y \lor \neg{z})</tex>
  
 
== СКНФ ==  
 
== СКНФ ==  

Версия 20:07, 12 марта 2012

КНФ

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

Простая дизъюнкция

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


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

Пример КНФ: [math]f(x,y) = (x \lor y) \land (y \lor \neg{z})[/math]

СКНФ

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

Пример СКНФ: [math]f(x,y,z) = (x \lor \overline{y} \lor z) \land (x\lor y \lor \overline{z})[/math]


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

Поскольку инверсия функции [math]\overline{f}(\vec x)[/math] равна единице на тех наборах, на которых [math]f(\vec x)[/math] равна нулю, то СДНФ для [math]\overline{f}(\vec x)[/math] можно записать следующим образом: [math] \overline{f}(\vec x) = \bigvee\limits_{f(x^{\sigma_{1}}, x^{\sigma_{2}}, ... ,x^{\sigma_{n}}) = 0} (x_{1}^{\sigma_{1}} \wedge x_{2}^{\sigma_{2}} \wedge ... \wedge x_{n}^{\sigma_{n}}) [/math], где [math] \sigma_{i} [/math] обозначает наличие или отсутствие отрицание при [math] x_{i} [/math]

Найдём инверсию левой и правой части выражения: [math] f(\vec x) = \overline{\bigvee\limits_{f(x^{\sigma_{1}}, x^{\sigma_{2}}, ... ,x^{\sigma_{n}}) = 0} (x_{1}^{\sigma_{1}} \wedge x_{2}^{\sigma_{2}} \wedge ... \wedge x_{n}^{\sigma_{n}})} [/math]

Применяя дважды к полученному в правой части выражению правило де Моргана, получаем: [math] f(\vec x) = \bigwedge\limits_{f(x^{\sigma_{1}}, x^{\sigma_{2}}, ... ,x^{\sigma_{n}}) = 0} ( \overline{x_{1}^{\sigma_{1}}} \vee \overline{x_{2}^{\sigma_{2}}} \vee ... \vee \overline{x_{n}^{\sigma_{n}}} ) [/math]

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

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

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

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

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

x y z [math] \langle x,y,z \rangle [/math]
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 [math] \langle x,y,z \rangle [/math]
0 0 0 0 [math]( x \lor y \lor z)[/math]
0 0 1 0 [math]( x \lor y \lor \overline{z})[/math]
0 1 0 0 [math](x \lor \overline{y} \lor z)[/math]
0 1 1 1
1 0 0 0 [math](\overline{x} \lor y \lor z)[/math]
1 0 1 1
1 1 0 1
1 1 1 1

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

[math] \langle x,y,z \rangle = ( x \lor y \lor z) \land (\overline{x} \lor y \lor z) \land (x \lor \overline{y} \lor z) \land ( x \lor y \lor \overline{z})[/math]

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

Стрелка Пирса: [math] x \downarrow y = (\overline{x} \lor y) \land (x \lor \overline{y}) \land (\overline{x} \lor \overline{y})[/math]

Исключающее или: [math] x \oplus y \oplus z = (\neg {x} \lor \neg {y} \lor z) \land (\neg {x} \lor y \lor \neg {z}) \land (x \lor \neg {y} \lor \neg {z}) \land (x \lor y \lor z)[/math]

Ссылки