- •Раздел II. Математическая логика
- •Глава 1. Алгебра логики
- •1.1. Объекты изучения алгебры логики. Булевы константы, переменные и векторы
- •1.2. Булевы функции, способы их задания. Элементарные функции. Алгебра логики, ее формулы
- •Задание функции при помощи вектора истинности
- •Матричный способ
- •Задание с помощью полного бинарного дерева
- •Формульное задание
- •1.3. Моделирование составных высказываний при помощи формул алгебры логики
- •1.4. Эквивалентность формул. Тавтологии. Законы логики. Двойственность
- •1.5. Специальные формульные представления булевых функций
- •1.5.1. Конъюнкции и дизъюнкции над множеством переменных. Нормальные формы
- •1.5.2. Конституенты единицы. Совершенные дизъюнктивные и веббовы нормальные формы
- •1.5.3. Конституенты нуля. Совершенные конъюнктивные и шефферовы нормальные формы
- •1.5.4. Полиномы Жегалкина
- •1.6. Минимизация нормальных форм булевых функций
- •1.5.1. Метод покрытий
- •1.6.2. Метод минимизирующих карт
- •1.7. Частично определенные функции. Их минимальное доопределение
- •Контрольные задания по теме функции алгебры логики. Нормальные формы. Полином жегалкина
1.5.1. Метод покрытий
Метод включает в себя последовательное решение следующих задач.
I. Определение множества всех элементарных наборов функции {N}={N1, ... , Nk} и совершенной нормальной формы.
II. Построение сокращенной нормальной формы и определение множества простых наборов {P}={P1,...,Ps}, входящих в её внутренние функции.
III. Формирование матрицы А покрытий множества элементарных наборов {N}={N1, ... , Nk} простыми наборами {P}={P1, ...,Ps}.
IV. Построение решеточного выражения В и упрощение его, построение множества всех тупиковых нормальных форм {Т} и выбор из них минимальной формы (их может быть несколько).
Решение задачи I изложено в предыдущем пункте. Рассмотрим последовательно решение задач II — IV. Вначале II — построение сокращенной нормальной формы и определение множества простых наборов {P} = {P1,...,Ps}.
Обобщенный метод Куайна
Алгоритм основан на применении следующих законов алгебры логики, справедливых для пороговых функций, а, следовательно, и для нормальных форм рассматриваемого вида. Пусть имеется представление булевой функции f в виде некоторой нормальной формы f =F( (x111 ,..., xn1n), ..., (x1k1 ,..., xnkn)). Множества переменных, входящих во внутренние функции, обозначим через Х1 ,..., Хk .
Допустим, у внутренних функций формы есть два набора переменных Xp =(x1p1,...,xnpn) и Xq =(x1q1 ,...,xnqn), соседних по переменной с номером r .У них p1 = q1 , ... , p(r-1) = q(r-1), p r = q r , p(r+1) = q(r+1), . . . , pn = qn.
Для данной нормальной формы справедливы следующие обобщенные операции склеивания:
а) полное склеивание:
f = F((Х1),...,(Хр),...,(Хq),...,(Xk))=F((Х1),...,(Хр\xrpr),...,
(Хq-1),(Хq+1),..., (X k)).
б) неполное склеивание (дополнение):
f=F((Х1),...,(Хр),...,(Хq),...,(Xk))=F((Х1),...,(Хр),...,(Хq),...,(Xk), (Хр\xrpr)).
В операции а) удаляется функция (Хq), а также переменная xrpr из (Хр). В операции б) к существующему набору внутренних функций (Х1),...,(Хk) добавляется новая функция (Хр\xrpr), в которой отсутствует переменная с номером r.
Если набор с номером p отличается от набора с номером q отсутствием одной переменной xrpr (Xp = Хq\ xrpr ), то для любой формы справедлива операция.
в) поглощения (удаления внутренней функции с расширенным набором переменных)
f = F((Х1), ..., (Хр), ..., (Хq), ... ,(X k))= F((Х1), ..., (Хр), ... ,(Хq-1), (Хq+1), ...,(Xk)).
Если наборы переменных во внутренних функциях Xp и Хq одинаковы (полностью совпадают), то справедлива операция
г) удаления дубликатов
f = F((Х1), ... ,(Хр), ... ,(Хq), ... , (X k))=F((Х1), ..., (Хр), ... ,(Хq-1), (Хq+1), ... ,(Xk)).
Справедливость введенных операций, которые являются правилами преобразования нормальных форм, следует из свойств пороговых функций.
Обобщенный алгоритм Куайна включает следующие операции:
1. Проведение в совершенной нормальной форме всех возможных операций неполного склеивания.
2. В полученной дополненной нормальной форме выполнение всех возможных операций полного склеивания.
3. Выполнение всех возможных операций поглощения и удаления дубликатов.
Полученная формула анализируется и, если возможно, к ней снова применяют операции 1) — 3) и т.д.
В результате получается нормальная форма, состоящая из простых наборов, то есть сокращенная нормальная форма рассмотренной функции.
Пример 2. Рассмотрим функцию из Примера 1 и построим для неё СкДНФ.
Решение. СДНФ функции: f =x yz xyz xy z. Элементарные наборы: N1 =(x, y,z), N2 =(x,y,z), N3 =(x,y, z).
1.Производим в СДНФ все операции неполного склеивания. Для этого рассматриваем в ней все возможные пары элементарных наборов и к тем из них, которые являются соседними (отличающимися ровно по одной переменной), применяем операцию неполного склеивания:
а) N1 и N2 не соседние, поскольку у них отличие по двум переменным (x и y),
б) N1 и N3 не соседние, отличие по всем трём переменным,
в) N2 и N3 — соседние,т.к. отличаются ровно по одной переменной — z .
Применяем
к этой паре операцию неполного склеивания
(дополнения):![]()
f =x yz xyz xy z xy .
2. Применяем операцию поглощения. Вначале – к хуz и ху: f = х уz ху z ху , затем – к ху z и ху : f = х уz ху.
Поскольку одинаковых наборов во внутренних конъюнкциях нет, то правило удаления дубликатов не используется.
Последняя полученная формула и будет искомой СкДНФ функции f = (00101100). Её простыми наборами являются P1 = (х, у,z), P2 = ( х,у).
III. Формирование матрицы А покрытий множества простых наборов {P} = {P1, ... ,Ps} элементарными наборами {N} = {N1, ... , Nk}.
Допустим, на предыдущих шагах построены: множество простых наборов {P} = {P1, ... , Ps}, входящих в сокращенную форму, и множество элементарных наборов {N} = {N1 , ... , Nk}, входящих в совершенную форму. Строим матрицу А размером s k покрытий простых наборов {P} элементарными наборами {N} по следующему правилу. Строки А соответствуют простым наборам Pi, столбцы – элементарным Nj. Элементы aij задаём следующим образом: aij = 1, если набор Pi входит в Nj , если не входит - то aij = 0. В итоге получаем матрицу А, содержащую единичные и нулевые элементы:
|
|
N 1 |
N 2 |
... |
Nk |
|
P1 |
a 11 |
a 12 |
... |
a 1k |
|
... |
... |
... |
... |
... |
|
Ps |
a s1 |
a s2 |
... |
a sk |
IV. Построение решеточного выражения В и упрощение его. Построение множества {Т} всех тупиковых нормальных форм функции.
Для каждого столбца j матрицы покрытий А, который соответствует элементарному набору Nj, выписываем номера строк i = i1 , ... , in , у которых aij = 1. Строим по ним дизъюнкцию D j = (ei1, j ... einj, j). Она показывает все возможные варианты вхождения простых наборов в элементарный Nj. Решеточное выражение записывают в виде конъюнкции всех Di :
В = D j .
В решёточном выражении В раскрывают все скобки, представив его в виде дизъюнкции элементарных конъюнкций:
В = (е s 1 е s 2 ... е s ps) .
В полученной дизъюнкции В производим все операции удаления дублирующих членов и все операции поглощения. В том случае, когда операции применялись, получим новый упрощенный вид дизъюнкции В:
В = (е l 1 е l 2 ... е l pl ) .
Каждая элементарная дизъюнкция еl1 еl2 ... еl pl , входящая в В, описывает тупиковую нормальную форму функции f следующим образом: каждый набор переменных еli является набором переменных во внутренней функции формы. Например, в ДНФ - наборы переменных входят во внутренние конъюнкции, а полная ТДНФ образуется в результате их логического сложения: f = K l,1 K l,2 … K l,pl.
После построения множества {Т} всех тупиковых форм из них выбирается самая короткая (с наименьшим числом переменных), которая и будет искомой минимальной нормальной формой.
Пример 3. Построить МДНФ функции, заданной вектором истинности: f = (01100111).
Решение. Переменные обозначим x, y, z.
1.Множество {N} элементарных наборов, на которых функция равна единице, имеет вид: N1 = (x,y, z); N2 = (x, y,z); N3 = (x,y, z); N4 = ( x, y,z ); N5 = ( x, y, z). При умножении этих наборов получаем конституенты единиц функции.
СДНФ имеет вид: f =xy z x yz xy z x yz x y z.
2. СкДНФ определяем по алгоритму Куайна:
а) неполное склеивание в СДНФ:
f =x y z x yz xy z x yz x y z y z yz x z x y ,
б) полное склеивание:
f = y z yz x z x y .
Полученная форма является искомой СкДНФ. Множество простых наборов {P} имеет вид:
P1 = (y, z), P2 = (y,z ), P3 = (х, z), P4 = (x, y).
3. Строим матрицу покрытий А:
|
|
N1 |
N2 |
N3 |
N4 |
N5 |
|
Р1 |
1 |
0 |
1 |
0 |
0 |
|
Р2 |
0 |
1 |
0 |
1 |
0 |
|
Р3 |
0 |
0 |
1 |
0 |
1 |
|
Р4 |
0 |
0 |
0 |
1 |
1 |
4. Строим решёточное выражение. Поскольку элементарный набор N1 покрывается простым набором Р1, N2 – Р2, N3 – (Р1 и Р3), N4 – (Р2 и Р4), N5 – (Р3 и Р4), то выражение принимает следующий вид:
В =1 2 (1 3) (2 4) (3 4).
5. Поочередно раскрываем скобки в конъюнкции В, устраняя повторные сомножители в слагаемых и применяя правило поглощения:
В = (121 123) (2 4) (3 4) = (12 123) (2 4) (3 4) = 12 (2 4) (3 4) = (122 124) (3 4) = 12 (3 4) = 123 124.
Таким образом, функция имеет две ТДНФ, в которые входят простые наборы (Р1, Р2, Р3) и (Р1, Р2, Р4):
Т1 = y z yz x z , Т2 = y z yz x y .
Так как в обеих формах по 6 символов переменных, то они обе являются искомыми МДНФ рассмотренной функции.
Пример 4. Построить МВНФ функции из Примера 3 с использованием базисных наборов {, } и {}.
Решение.
1. Элементарные наборы, на которых внутренние функции СВНФ образуют конституенты единицы, являются инвертированными по отношению к наборам из ДНФ и имеют вид:
N1 = (x, y,z); N2 = (x,y, z); N3 = (x, y,z); N4 = (x,y, z); N 5 = (x,y,z).
СВНФ для базисного набора { , } имеет вид:
f = ((x, y,z); (x,y, z); (x, y,z); (x,y, z); (x,y,z)).
2.СкВНФ определяем по алгоритму Куайна:
а) неполное склеивание в СBНФ:
f = ( (x, y,z); (x,y, z); (x, y,z); (x,y, z); (x,y,z); (y,z); (y, z); (x,z); (x,y)).
б) полное склеивание:
f = ((y,z ); (y, z); (x,z); (x,y)).
Полученная форма является искомой СкВНФ. Множество простых наборов {P} имеет вид:
P1 = (y, z), P2 = (y, z), P3 = (х,z), P4 = (x,y).
3.Построение матрицы покрытий, решеточного выражения и его преобразования выполняются аналогично Примеру 3.
Полученные в итоге ТВНФ в базисе {, } имеют вид:
Т1 = ((y,z); (y, z); (x,z)),
Т2 = ((y,z ); (y, z); (x,y)).
Обе формы будут минимальными.
Переход к однофункциональном набору {} осуществляем с использованием правила А = (А, 0). Тождественный нуль формально является функцией, однако на практике его получают, заземляя соответствующий вход элемента {}. После замены получим:
Т1 = (((y, (z, 0)); ((у, 0), z); ((х, 0), (z, 0))), 0),
Т2 = (((y, (z, 0)); ((у, 0), z); ((х, 0), (у, 0)) ), 0).
