КНФ — различия между версиями
(→КНФ) |
(→СКНФ) |
||
Строка 19: | Строка 19: | ||
|definition = | |definition = | ||
СКНФ (Совершенная Конъюнктивная Нормальная Форма)''' — это такая КНФ, которая удовлетворяет условиям: | СКНФ (Совершенная Конъюнктивная Нормальная Форма)''' — это такая КНФ, которая удовлетворяет условиям: | ||
− | * в ней нет одинаковых | + | * в ней нет одинаковых простых дизъюнкций |
− | + | * каждая простая дизъюнкция полная | |
− | * каждая | ||
}} | }} | ||
Пример СКНФ: | Пример СКНФ: | ||
− | <tex>f(x,y,z) = (x \lor \ | + | <tex>f(x,y,z) = (x \lor \neg{y} \lor z) \land (x\lor y \lor \neg{z})</tex> |
Строка 32: | Строка 31: | ||
Для любой булевой функции <tex>f(\vec{x})</tex>, не равной тождественной единице, существует СКНФ, ее задающая. | Для любой булевой функции <tex>f(\vec{x})</tex>, не равной тождественной единице, существует СКНФ, ее задающая. | ||
|proof = | |proof = | ||
− | Поскольку инверсия функции <tex>\ | + | Поскольку инверсия функции <tex>\neg{f}(\vec x)</tex> равна единице на тех наборах, на которых <tex>f(\vec x)</tex> равна нулю, то СДНФ для <tex>\neg{f}(\vec x)</tex> можно записать следующим образом: |
− | <tex> \ | + | <tex>\neg{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}}) </tex>, где <tex> \sigma_{i} </tex> обозначает наличие или отсутствие отрицание при <tex> x_{i} </tex> |
Найдём инверсию левой и правой части выражения: | Найдём инверсию левой и правой части выражения: | ||
− | <tex> f(\vec x) = \ | + | <tex> f(\vec x) = \neg{\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}})} </tex> |
Применяя дважды к полученному в правой части выражению правило де Моргана, получаем: | Применяя дважды к полученному в правой части выражению правило де Моргана, получаем: | ||
− | <tex> f(\vec x) = \bigwedge\limits_{f(x^{\sigma_{1}}, x^{\sigma_{2}}, ... ,x^{\sigma_{n}}) = 0} ( \ | + | <tex> f(\vec x) = \bigwedge\limits_{f(x^{\sigma_{1}}, x^{\sigma_{2}}, ... ,x^{\sigma_{n}}) = 0} (\neg{x_{1}^{\sigma_{1}}} \vee \neg{x_{2}^{\sigma_{2}}} \vee ... \vee \neg{x_{n}^{\sigma_{n}}} ) </tex> |
Последнее выражение и является СКНФ. Так как СКНФ получена из СДНФ, которая может быть посторена для любой функции, то теорема доказана. | Последнее выражение и является СКНФ. Так как СКНФ получена из СДНФ, которая может быть посторена для любой функции, то теорема доказана. |
Версия 20:09, 12 марта 2012
Содержание
КНФ
Определение: |
Простой дизъюнкцией или дизъюнктом называется дизъюнкция одной или нескольких переменных или их отрицаний, причём каждая переменная встречается не более одного раза. |
Простая дизъюнкция
- полная, если в неё каждая переменная (или её отрицание) входит ровно 1 раз;
- монотонная, если она не содержит отрицаний переменных.
Определение: |
КНФ (Конъюнктивная Нормальная Форма) — нормальная форма, в которой булева функция имеет вид конъюнкции нескольких простых дизъюнктов. |
Пример КНФ:
СКНФ
Определение: |
СКНФ (Совершенная Конъюнктивная Нормальная Форма) — это такая КНФ, которая удовлетворяет условиям:
|
Пример СКНФ:
Теорема: |
Для любой булевой функции , не равной тождественной единице, существует СКНФ, ее задающая. |
Доказательство: |
Поскольку инверсия функции равна единице на тех наборах, на которых равна нулю, то СДНФ для можно записать следующим образом: , где обозначает наличие или отсутствие отрицание приНайдём инверсию левой и правой части выражения: Применяя дважды к полученному в правой части выражению правило де Моргана, получаем: Последнее выражение и является СКНФ. Так как СКНФ получена из СДНФ, которая может быть посторена для любой функции, то теорема доказана. |
Алгоритм построения СКНФ по таблице истинности
- В таблице истинности отмечаем те наборы переменных, на которых значение функции равно 0.
- Для каждого отмеченного набора записываем конъюнкцию всех переменных по следующему правилу: если значение некоторой переменной есть 0, то в дизъюнкцию включаем саму переменную, иначе ее отрицание.
- Все полученные дизъюнкции связываем операциями конъюнкции.
Пример построения СКНФ
1. В таблице истинности отмечаем те наборы переменных, на которых значение функции равно 0.
x | y | z | |
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 | ||
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 |
3. Все полученные дизъюнкции связываем операциями конъюнкции.
Примеры СКНФ для некоторых функций
Стрелка Пирса:
Исключающее или: