4.6. Совершенная дизъюнктивная нормальная форма
Как уже указывалось, логическая функция n-переменных f(x1, x2, ..., xn) может быть задана таблицей истинности, в которой значение функции fi принимает значение 0 или 1.
Логическую функцию n аргументов, которая принимает значение, равное единице, только на одном наборе аргументов называют конституентой единицы. Конституенту единицы выражают через логическое произведение (конъюнкцию) всех аргументов xi, каждый из которых входит в это произведение со знаком инверсии (отрицания), если xi = 0, или без него, если xi =1.
Совершенной дизъюнктивной нормальной формой (СДНФ) называется дизъюнкция конституент единицы, равных единице на тех же наборах аргументов, что и заданная функция.
СДНФ функции f содержит ровно столько конъюнкций, сколько единиц в таблице истинности f ; каждому единичному набору (x1, x2, ..., xn) соответствует конъюнкция всех переменных, в которой xi взято с отрицанием, если xi = 0, и без отрицания, если xi = l. Таким образом, существует взаимно-
-однозначное соответствие между таблицей функции f(x1, x2, ..., xn) и ее СДНФ, и, следовательно, СДНФ для всякой логической функции единственна (точнее, единственна с точностью до порядка букв и конъюнкций: это означает, что ввиду коммутативности дизъюнкции и конъюнкции, формулы, получаемые перестановкой конъюнкций и букв в конъюнкции, не различаются и считаются одной и той же СДНФ).
В совершенной дизъюнктивной нормальной форме логическая функция выражается через три функции: конъюнкцию (логическое умножение), дизъюнкцию (логическое сложение) и инверсию (отрицание). Формулы, содержащие кроме переменных (и, разумеется, скобок) только знаки функций дизъюнкции, конъюнкции и отрицания, называют булевыми формулами (знак конъюнкции, как правило, опускается).
Из сказанного выше следует, что всякая логическая функция может быть представлена булевой формулой, т.е. как суперпозиции конъюнкции, дизъюнкции и отрицания.
Действительно, для всякой функции, кроме константы 0, таким представлением может служить ее СДНФ. Константу 0 можно представить булевой формулой`хх.
Пример 4.2.
Представим в совершенной дизъюнктивной нормальной форме функцию штрих Шеффера из табл. 4.3: f14(x,y) = x | y.
Таблица 4.4
|
Номер набора аргументов (i) |
Значения аргументов |
Значение функции fi (x,y) |
Конституенты единицы Ki |
|
|
yi |
xi |
|||
|
0 |
0 |
0 |
f0 = 1 |
K0 =`x`y |
|
1 |
0 |
1 |
f1 = 1 |
K1 =`x y |
|
2 |
1 |
0 |
f2 = 1 |
K2 = x`y |
|
3 |
1 |
1 |
f3 = 0 |
K3 = x y |
![]()
Подставив конституенты единицы через конъюнкцию аргументов, получим
![]()
Таким образом, для того чтобы записать совершенную дизъюнктивную нормальную форму логической функции, необходимо выбрать те наборы аргументов, на которых логическая функция принимает значение 1. Представить каждый такой набор в виде произведения всех переменных, заменив в наборах значения 1 на значение соответствующей переменной, а значение 0 – на инверсное (отрицание), и соединить эти логические произведения переменных знаками дизъюнкции. Это правило еще называют правилом записи логической функции по единицам.
4.7. Совершенная конъюнктивная нормальная форма
Если рассматриваемая логическая функция n-переменных принимает значение 1 на большинстве из 2n наборов аргументов, то ее представление в совершенной дизъюнктивной нормальной форме будет достаточно громоздким. В этих случаях удобнее использовать другую форму представления логической функции – совершенную конъюнктивную нормальную форму (СКНФ). Для представления логической функции в СКНФ используется понятие конституенты нуля.
Конституентой нуля называют логическую функцию n переменных, которая принимает значение, равное нулю, только на одном наборе.
Конституенту нуля можно представить в виде дизъюнкции всех ее переменных, часть из которых может быть без отрицания, а часть с отрицанием.
То есть чтобы записать конституенту нуля, равную нулю на i-том наборе переменных, следует в дизьюнкции всех аргументов расставить отрицания над теми переменными, которые в этом наборе принимают значения, равные единице. Таким образом, в конституенте нуля отрицания ставятся над теми переменными, над которыми в конституенте единицы с тем же индексом отрицания нет.
В связи с тем, что число различных наборов от n переменных равно 2n, число различных конституент нуля равно 2n.
Обозначим конституенты нуля буквой Z с индексом, равным номеру набора, на котором конституента обращается в нуль.
Совершенной конъюнктивной нормальной формой называется произведение конституент нуля, которые равны нулю на тех же наборах, что и заданная функция.
Любая логическая функция n-переменных f(x1, x2, ..., xn) (кроме константы 1) может быть представлена в совершенной конъюнктивной нормальной форме:
![]()
При этом любая логическая функция имеет единственную совершенную конъюнктивную нормальную форму.
Термин «совершенная» опускают, т.е. говорят просто о нормальной дизъюнктивной (ДНФ) или нормальной конъюнктивной форме (КНФ) в тех случаях, когда не требуется, чтобы каждый член этой формы обязательно содержал конъюнкцию или соответственно дизъюнкцию всех переменных.
Пример 4.3.
Представим в совершенной конъюнктивной нормальной форме функцию стрелка Пирса из табл. 4.3: f8(x,y) = x ¯ y.
Таблица 4.5
|
Номер набора аргументов (i) |
Значения аргументов |
Значение функции fi (x,y) |
Конституенты нуля Zi |
|
|
yi |
xi |
|||
|
0 |
0 |
0 |
f0 = 1 |
Z0 = x Ú y |
|
1 |
0 |
1 |
f1 = 0 |
Z1 =x Ú`y |
|
2 |
1 |
0 |
f2 = 0 |
Z2 =`x Ú y |
|
3 |
1 |
1 |
f3 = 0 |
Z3 =`x Ú`y |

Таким образом, для того чтобы записать совершенную конъюнктивную нормальную форму логической функции, необходимо выбрать те наборы аргументов, на которых логическая функция принимает значение 0. Представить каждый такой набор в виде логической суммы всех n переменных, заменив в наборах значение 1 на инверсное значение соответствующей переменной, а значение 0 – на прямое значение соответствующей переменной, и соединить эти логические суммы переменных знаком конъюнкции. Это правило называют правилом записи логической функции по нулям.
Пример 4.4.
Представим функцию штрих Шеффера в СДНФ и СКНФ.
Таблица 4.6
|
Номер набора аргументов (i) |
Значения аргументов |
Значение функции fi (x,y) |
Конституенты единицы Ki |
Конституенты нуля Zi |
|
|
yi |
xi |
||||
|
0 |
0 |
0 |
f0 = 1 |
K0 =`x`y |
Z0 = x Ú y |
|
1 |
0 |
1 |
f1 = 1 |
K1 =`x y |
Z1 =x Ú`y |
|
2 |
1 |
0 |
f2 = 1 |
K2 = x`y |
Z2 =`x Ú y |
|
Продолжение таблицы 4.6 |
|||||
|
3 |
1 |
1 |
f3 = 0 |
K3 = x y |
Z3 =`x Ú`y |
СДНФ ® f14(x,y) = f0 × K0 Ú f1 × K1 Ú f2 × K2 Ú f3 × K3 = 1× K0 Ú 1× K1 Ú 1× K2 Ú 0× ×K3 = K0 Ú K1 Ú K2 =`x`y Ú`x y Ú x`y.
СКНФ ® f14(x,y) = (f0 Ú Z0) × (f1 Ú Z1) × (f2 Ú Z2) × (f3 Ú Z3) = (1Ú Z0) × (1 Ú Z1) × ×(1 Ú Z2) × (0 Ú Z3) =1×1×1×Z3 = Z3 = `x Ú`y.
Получаем эквивалентные выражения для функции f14 штрих Шеффера:
f14(x,y) = `x`y Ú`x y Ú x`y = `x Ú`y.