Мы изучили булевы функции от 1 и 2 аргументов. Рассмотрим теперь функции от произвольного числа аргументов. Оказывается, что любую булеву функцию от любого числа аргументов можно представить в виде комбинации функций от 1 и 2 аргументов. Этот важный факт позволяет, например, обойтись в сложных микросхемах лишь несколькими элементами, а на их основе строить любые другие логические схемы.
Докажем, что всякую логическую функцию от , ~ и константы 0 и 1.
По ходу доказательства покажем, по какому именно алгоритму это
делается. В принципе, вы можете пропустить этот параграф и сразу
перейти к рассмотрению примера составления СДНФ.
Вернитесь к доказательству, если захочется понять в деталях, каким
образом работает СДНФ.
Пусть нам дана эта функция
... | |||||
... | |||||
... | |||||
... | ... | ... | ... | ... | ... |
... | |||||
... | ... | ... | ... | ... | ... |
... |
В таблице
Определим функции от 1 аргумента:
Тогда исходная функция может быть представлена в виде:
(S1,2(x1) & S2,2(x2) & S3,2(x3) & ... & SN,2(xN) & F2)
(S1,3(x1) & S2,3(x2) & S3,3(x3) & ... & SN,3(xN) & F3)
...
(S1,M(x1) & S2,M(x2) & S3,M(x3) & ... & SN,M(xN) & FM) =
Как видите, она выражена только через функции , ~ и &. Каждая
строка в нашем правиле (*) соответствует строке таблицы.
Осталось доказать, что левая часть (*) действительно равна исходной функции.
Возьмем произвольную
То есть, для выбранного
Берем в (*)
Теперь берем в (*) любую другую строку, кроме
Отсюда:
То есть, для выбранных
Берем в (*)
Таким образом, значение всех строк СДНФ, кроме
В результате получаем:
(0)
(0)
(Fn)
(0)
(0) =
И по законам поглощения 0 = x
x = x
0
...
0
(Fn)
0 ... 0 = Fn = f(x1, x2, x3,...,xN)
Мы рассматривали произвольную
В формуле (*) строки, в которых 0 = x и 0
x = x
После этих сокращений получается запись, которая и называется
совершенной дизъюнктивной нормальной формой (СДНФ).
Составим СДНФ для функции, которая приводилась ранее в
качестве примера.
Пример составления СДНФ.
x | y | z | f(x, y, z) |
0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 0 |
Составляем СДНФ таким образом: для каждой строки с единицей
в крайнем правом столбце образуем скобки и объединяем их
операцией . В каждую скобку вставляем последовательность
из простых элементов, объединенных операцией &: для ячейки таблицы, где проставлена 1,
пишем переменную-аргумент, а для каждой ячейки, где проставлен 0,
пишем переменную-аргумент со знаком ~ перед ним:
(x & ~y & ~z)
(x & y & ~z)
СДНФ можно упрощать и далее, для чего существуют разные методы, в том числе метод под названием "карты Карно", построенный на наглядных зрительных образах. Все эти методы основаны на правилах упрощения:
(a & ~b & c) = a & c
(a & ~b) = a
(~b & c) = c
То есть, если в СДНФ обнаруживаются две скобки, которые отличаются только знаком ~ перед одним из элементов, их можно заменить на одну скобку, в котором этого элемента нет. Например, полученную выше формулу можно упростить по этому правилу, объединив две последние скобки в одну:
(x & ~z)