Минимальные конъюнктивные нормальные формы
Как было отмечено, для получения минимальной формы функции нужно построить как МДНФ так и МКНФ.
Рассмотрим построение МКНФ.
В основном методы получения МКНФ аналогичны методам получения МДНФ и поэтому сформулируем лишь правила получения МКНФ:
Представить ФАЛ в СКНФ. Если она задана таблицей, то произвести запись функции по нулям, как это было сформулировано ранее. Если дана СДНФ, то из нее легко получить СКНФ:
f(x1x2x3) = x1x2x3
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
= (x1
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
т.е. нужно функцию представить в виде конъюнкции недостающего числа дизъюктивных членов с соответсвенно расставлеными отрицаниями.
При задании функции в произвольной конъюктивной форме, применяя
формулы развертывания:
x = (x
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
. . . . . . . . . . . .,
получить СКНФ.
Выполнить все операции неполного склеивания:
(x
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
и поглощения: x(x
![](../../../../img/symbols/or.gif)
Применить любой из методов минимизации: испытание членов, диаграммы Вейча, метод импликантных матриц. При выполнении метода испытания членов необходимо каждый конъюктивный член приравнять нулю. Найти значения аргументов, которые обращают его в нуль, удалить его из выражения функции и найти значение функции при найденных значениях аргументов. Если функция обратится в нуль, то конъюктивный член является лишним.
По возможности отбросить одновременно несколько членов, поступить как и при минимизации функции ДНФ.
При использовании диаграмм Вейча ищутся правильные конфигурации, образованные нулями. При применении метода импликантных матриц поступают как и в случае ДНФ, только колонкам присваивают имена конституент "0" функции, записанной в СКНФ, а горизонтальным рядам – простых импликант. Далее ищут оптимальное покрытие.
Операция штрих Шеффера
0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 |
1 | 1 | 1 | 0 |
Заметим, что эта функция дуальна по отношению к f8, поэтому все свойства являются по существу дуально вытекающими из рассмотренных.
f14 (x1,x2) = x1
![](../../../../img/symbols/or.gif)
x1 | x2 = x1
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
на основе принципа суперпозиции:
x1 | x2 | . . . | xn = x1x2...xn
Рассмотрим некоторые эквивалентности:
x | x = x
![](../../../../img/symbols/or.gif)
x1 | x2 | x3 = (x1 x2)| x3 = x1| (x2 x3)
x1 | x2 | x3| x4 = (x1 x2)| (x3 x4)
Сформулируем правила перехода от ДНФ функции к выражению с использованием операции "Штрих Шеффера".
заменить все операции дизъюнкции на операции Шеффера заменить все операции конъюнкции на операции Шеффера группы букв, которые соответствуют дизъюнктивным членам, заключить в скобки.
Пример:
f(x1x2 x3) = x1x2 x3
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
То же самое можно утверждать относительно минимальной формы.
В заключение необходимо отметить, что в настоящее время вопросы синтеза функций в одноэлементном базисе приобретают большое значение, так как соответствующие элементы используют операцию Пирса и Шеффера. Однако в полной мере теоретически методы синтеза разработаны не столь детально, как это сделано в базисе "и", "или", "инверсия".
Операция (стрелка) Пирса
f8(x1,x2)
0 | 0 | 1 | 1 |
0 | 1 | 0 | 1 |
1 | 0 | 0 | 0 |
Эту функцию можем представить, записав по "единицам":
f8(x1,x2) = x1x2 = x1
![](../../../../img/symbols/darr.gif)
или
x1
![](../../../../img/symbols/darr.gif)
На основе принципа суперпозиции:
f(x1,x2,...xn) = x1
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
Применяя правило де Моргана:
x1
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
или:
x1
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
т.е.
x1
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
Рассмотрим некоторые соотношения для операции Пирса:
x
![](../../../../img/symbols/darr.gif)
x1
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
x1
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/ne.gif)
![](../../../../img/symbols/darr.gif)
т.е. операция Пирса не обладает свойством ассоциативности
x1
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
x1
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
При этом порядок выполнения операций в формулах, где есть операции Пирса такой:
раскрываются скобки выполняются операции инверсии выполняются операции Пирса
Синтез логических функций в базисе Пирса удобно производить, имея запись функции в КНФ.
Допустим, что ФАЛ задана в конъюктивной форме
f = Q1Q2Q3 . . . Qn
Подставим член Qi в виде:
Qi = (xr
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
Возьмем двойное отрицание от обеих частей этого равенства, применив правило де Моргана
Qi = (xr
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
xe
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
Применяя соотношение, полученное на основе принципа суперпозиции:
Qi = (xr
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
xe
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
Или, применяя это преобразование к исходной форме, получим:
f = Q1
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
Итак: чтобы от КНФ перейти к базису Пирса и инверсии необходимо:
заменить операции дизъюнкции операциями Пирса заменить операции конъюнкции операциями Пирса заключить в скобки все те группы букв, которые соответсвуют конъюнктивным членам.
Пример:
f(x1x2 x3) = (x1
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/or.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
Замечание. Так как в этих произведениях число букв не увеличивается, и если исходная форма функции была минимальной, то вновь полученная также будет минимальной (в действительности дело обстоит сложнее, поскольку мы рассматриваем не базис "
![](../../../../img/symbols/darr.gif)
![](../../../../img/symbols/darr.gif)
Принципиально можно избавиться от отрицаний, применив соотношение: xi = xi
![](../../../../img/symbols/darr.gif)