Глава 4 Алгебра логики В этой главе будем рассматривать практические основы решения логических задач, возникающих при проектировании дискретных устройств. Под дискретными устройствами понимают устройства, осуществляющие переработку информации, представимой в дискретном виде (ЭВМ, устройства управления, системы связи). Процесс проектирования д.у. можно разделить на 2 части: 1. Логическое проектирование, т.е. построение функциональной схемы: описание узлов схемы и связей между ними (наша часть задачи). 2. Техническое проектирование, т.е. построение устройства из физических элементов. Дискретные устройства делятся на 2 класса: 1. Комбинационные схемы – устройства, в которых каждому входному сигналу соответствует выходной сигнал. 2. Последовательностные схемы (схемы с памятью) – устройства, в которых каждому входному сигналу может соответствовать несколько выходных в зависимости от истории работы схемы (т.е. последовательности подаваемых сигналов). Наиболее удобные методы представления информации в ЭВМ, устройствах управления и автоматизации, широко используют двоичные схемы и двоичную систему счисления. Простая модель, описывающая поведение комбинационных переключательных схем, основана на теории алгебры логики. 4.1 Формулы и функции алгебры логики 4.1.1 Высказывания и операции над ними Высказыванием называется повествовательное предложение, о котором в данной ситуации можно сказать, что оно истинно либо ложно. В качестве примеров высказываний можно назвать «Сейчас идет снег» и «Первокурсники СибГУТИ изучают математику». Если имеется несколько высказываний, то из них с помощью логических связок (логических операций) можно образовывать новые высказывания. При этом исходные высказывания называются простыми, а построенные из них – составными (сложными), например: «Если студент сдаст всю сессию на «отлично», то будет получать повышенную стипендию». В дальнейшем нас будет интересовать не то, о чем идет речь в данном высказывании (его содержательная часть), а лишь какое значение истинности оно имеет. В алгебре логики все высказывания, имеющие одинаковые значения истинности, взаимозаменяемы, т.е. имеется два класса: класс истинных высказываний и класс ложных высказываний – (И, Л), (T, F), (1,0). Высказывания a и b являются равносильными (a b), если совпадают их значения истинности. 63 Высказыванию Р поставим в соответствие логическую переменную x, которая принимает значение 1, если Р истинно и 0, если оно ложно. Переменная, которая может принимать только одно из двух значений – 1 или 0, истина или ложь, называется булевой переменной. Логические операции, или связки: унарная операция – инверсия, бинарные – конъюнкция, дизъюнкция, импликация, равносильность (эквивалентность), штрих Шеффера, стрелка Пирса, кольцевая сумма. Инверсия (логическое отрицание): NOT, НЕ, ¬, черта над переменной. Меняет значение переменной на противоположное. Конъюнкция (логическое умножение): AND, И, , , . Имеет значение ЛОЖЬ, если значение хотя бы одного операнда ложно. Дизъюнкция (логическое сложение): OR, ИЛИ, . Имеет значение ИСТИНА, если значение хотя бы одного операнда истинно. Импликация (логическое следование): ЕСЛИ…ТО…, . В выражении ЕСЛИ a ТО b переменная a является посылкой (основанием), переменная b – заключением (следствием, выводом). Имеет значение ЛОЖЬ тогда и только тогда, когда из истинной посылки делается ложное заключение. Равносильность (эквивалентность): …ТОГДА И ТОЛЬКО ТОГДА, КОГДА…, , , . Имеет значение ИСТИНА, когда переменные совпадают. Штрих Шеффера (антиконъюнкция): по определению (a|b) ¬(ab). Стрелка Пирса (антидизъюнкция): (ab), по определению (ab) ¬(ab). Кольцевая сумма (сложение по модулю 2, исключающее ИЛИ): по определению (ab)¬(ab). Имеет значение ИСТИНА, когда оба аргумента различны (для большего числа аргументов – когда количество единиц нечетно). Действия логических операций задаются таблицами истинности, каждой строке которых взаимно однозначно сопоставляется набор значений переменных и соответствующий этому набору результат логической операции. Таблица истинности для основных операций имеет вид: A B ¬A A&B AB AB AB A|B AB AB 0 0 1 0 0 1 1 1 1 0 0 1 1 0 1 1 0 1 0 1 1 0 0 0 1 0 0 1 0 1 1 1 0 1 1 1 1 0 0 0 Введенные операции не являются независимыми, т.е. одни из них могут быть выражены через другие. Теорема 4.1 1. A B A B. 2. A B (A B)( B A) (A & B) (A & B) (A B) & (A B). Доказательство: с помощью таблиц истинности. 64 4.1.2 Построение формул Из логических переменных с помощью логических связок можно составлять конструкции, которые образуют формулы алгебры логики. Пусть {xi | iI} – некоторое множество логических переменных. Формулой алгебры логики является любая логическая переменная (атомарной формулой) или выражение, построенное из формул с помощью логических операций. Данное определение задает синтаксис формул, т.е. формальные законы их построения. Приведенные выше таблицы истинности являются интерпретациями логических операций и задают семантику формул (т.е. придают им смысл). На основании таблиц истинности для логических операций можно строить Т.И. для произвольных формул. Любая формула, кроме элементарной, должна быть заключена в наружные круглые скобки. Однако обилие скобок затрудняет чтение формул, поэтому в алгебре логики приняты некоторые соглашения относительно расстановки скобок: 1) внешние скобки не пишутся; 2) знак конъюнкции можно обозначать точкой или не писать; 3) на множестве {¬, , , , , |, , } вводится приоритет операций, который определяется посредством транзитивного отношения > «быть сильнее» и отношения эквивалентности «быть равносильным». Если все равносильные операции объединить в классы эквивалентности {}, то можно записать: {¬} > {, |, } > {} > {} > {, }. В таком случае скобки в формулах ставятся только тогда, когда требуется изменить последовательность выполнения операций. Пример 4.1 ((((ab)¬c)d)((a¬b)a)) ab¬c d (a¬b)a, в итоге в формуле осталась только одна пара скобок, которая нужна для того, чтобы дизъюнкция выполнилась прежде конъюнкции. И наоборот, расставим скобки в формуле в соответствии с последовательностью выполнения операций: xy¬zuvwx|y ((xy)(¬z(u(((vw)x)|y)))). 4.1.3 Булевы функции и формулы Функцией алгебры логики (ФАЛ) от n переменных x1, x2, …, xn называется функция f:{0,1}n{0,1}, т.е. функция, которая произвольному набору (1, …, n) нулей и единиц ставит в соответствие значение f(1, …, n){0,1}. ФАЛ называются также булевыми функциями, двоичными функциями или переключательными функциями. Аргументы булевой функции являются булевыми переменными. Булеву функцию можно задать таблицей истинности. Утверждение Для булевой функции от n аргументов существует 2n различных наборов аргументов. Булева функция f(x1, x2, …, xn) называется полностью определенной, если ее значения определены на всех 2n наборах переменных. В противном случае функция частично определенная. 65 Функция f ( x 1 ,, x i 1 , x i , x i 1 ,, x n ) существенно зависит от переменной xi, (или переменная xi – существенная), если такой набор значений x1, x2, …, xn ( 1 ,..., i 1 , i , i 1 ,..., n ) , что f ( 1 ,, i 1 ,0, i 1 ,, n ) f ( 1 ,, i 1 ,1, i 1 ,, n ) . В противном случае переменная xi – несущественная (фиктивная). Пример 4.2 Пусть две булевы функции заданы таблицей x1 x2 f1 f2 0 0 1 истинности. Для них переменная x1 существенная, а x2 – 0 0 1 0 1 несущественная. 1 0 1 0 По определению булевы функции равны, если одна из 1 1 1 0 другой получается введением или удалением несущественных переменных. Одна и та же функция может иметь множество реализаций формулами над данным базисом (т.е. множеством логических операций). Формулы, реализующие одну и ту же функцию, называются равносильными (т.е. на всех наборах переменных их значение истинности совпадает). Отношение равносильности формул является отношением эквивалентности. Пусть даны формулы F(y1, y2, …, ym ), f1(x1, x2, …, xn ), …, fm(x1, x2, …, xn ). Тогда подстановкой формул fi в формулу F называется следующая конструкция: (F| yi fi )(x1, x2, …, xn) F(f1(x1, x2, …, xn ), …, fm(x1, x2, …, xn )). Теорема 4.2 (О подстановке формул) Если F(y1, y2, …, ym ) и fi (x1, x2, …, xn ) – формулы алгебры логики, то (F| yi fi )(x1, x2, …, xn ) также является формулой. Иначе: Вместо некоторой подформулы в формулу может быть подставлена другая формула, и в результате получится правильно построенная формула. Правило подстановки Если в равносильных формулах: F(y1, y2, …, ym ) G(y1, …, ym ) – вместо всех вхождений некоторой переменной yi подставить одну и ту же формулу, то получатся равносильные формулы. Правило замены Если в формуле F заменить некоторую подформулу yi на равносильную gi, то получатся равносильные формулы. ФАЛ, при образовании которых используются только операции отрицания, конъюнкции и дизъюнкции, называются булевыми формулами. Теорема 4.3 Для любой формулы алгебры логики существует равносильная ей булева формула. 4.1.4 Булевы функции и булева алгебра Множество булевых функций с определенными на нем операциями отрицания, конъюнкции и дизъюнкции называется булевой алгеброй. Множество булевых функций от n аргументов будем обозначать Pn. 66 Для булевой алгебры выполняется ряд равносильностей, которые являются ее аксиомами. Аксиомы булевой алгебры: 1. 2. 3. 4. 5. 6. 7. 8. 9. Операции с константами: 1) A 1 1; A & 1 A; 2) A 0 A; A & 0 0. Противоречие: A & A 0. Исключение третьего: A A 1. Идемпотентность: A & A A; A A A. Двойное отрицание: A A. Коммутативность: A & B B & A; A B B A. Ассоциативность: (AB)C A(BC); (A&B)&C A&(B&C). Дистрибутивность: A & (B C) (A & B) (A & C); A (B & C) (A B) & (A C). Законы де Моргана: (A&B) A B; (AB) A & B. Используя приведенные аксиомы, возможно выполнять равносильные преобразования, выводить и доказывать новые законы. В частности, при выполнении преобразований часто используются законы поглощения: 1) A & (A B) A; A A & B A; 2) A & (A B) A & B; A A & B A B. Эти законы несложно доказать с помощью аксиом. 4.1.5 Принцип двойственности Пусть f(x1, x2, …, xn ) – булева функция. Двойственной к ней называется функция f*(x1, x2, …, xn ) f (x1,x2, …,xn ). Из определения видно, что двойственность инволютивна: f**=f. Если двойственная функция f* совпадает с исходной функцией f, то такая функция f называется самодвойственной. Пример 4.3 (0)* 01; (x)*= ¬(x) x Функция, тождественно равная своему аргументу, является самодвойственной. Теорема 4.4 (Общий принцип двойственности) Если G(x1, …, xn ) получена подстановкой fi из F(y1, …, ym ): G(x1, …, xn ) (F| yi fi )(x1, …, xn ), то G*(x1, …, xn ) (F*| yi f*i )(x1, …, xn ). Теорема 4.5 (Принцип двойственности для булевых функций) Двойственная к булевой функции может быть получена заменой констант 0 на 1, 1 на 0, дизъюнкции на конъюнкцию, конъюнкции на дизъюнкцию и сохранением структуры формулы (т.е. соответствующего исходному порядка действий). 67 Пример 4.4 (xy z)* (xy) z., (xy)* xy в таблице истинности значения функции и переменных меняются на противоположные x 0 0 1 1 y 0 1 0 1 f=xy 0 1 1 1 x 1 1 0 0 y 1 0 1 0 f* 1 0 0 0 4.1.6 Алгебра Жегалкина Булевы функции с операциями умножения и сложения по модулю 2 образуют алгебру Жегалкина. Аксиомы алгебры Жегалкина: 1. Операции с константами: A1 A; A0 0; A 0 A. 2. Идемпотентность: AA A; A A 0. 3. Коммутативность: AB BA; A B B A. 4. Ассоциативность: (A B) C A (B C); (AB)C A(BC). 5. Дистрибутивность: A(B C) AB AC. Можно перейти от алгебры Буля к алгебре Жегалкина, используя следующие соотношения: A 1 A; AB=A B AB. И наоборот, от алгебры Жегалкина к алгебре Буля: A B =AB AB Пример 4.5 Перейти к выражению булевой алгебры: (x 1)y (x 1) = xy x = xyx xxy = (x y)x 0 =xy. 4.1.7 Контрольные вопросы 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Какие высказывания являются равносильными? Приведите пример. Какие существуют логические операции? Какие логические операции дают в результате их применения к двум аргументам только одно истинное (ложное) значение? На каких наборах переменных достигается это значение? Какие операции на всех наборах значений переменных имеют взаимно противоположные значения? Какие существуют формулы, позволяющие выразить одну операцию через другую? Каков порядок логических операции в соответствии с их приоритетом? Что такое переключательная функция? Сколько существует различных наборов аргументов для функции 5 переменных? Какая функция является полностью определенной? Что такое булева алгебра? Что представляют собой аксиомы? Какая функция является самодвойственной? В чем состоит принцип двойственности для булевых функций? Какие операции определяют алгебру Жегалкина? Как связаны алгебры Буля и Жегалкина? 68 4.2 Способы представления булевых функций 4.2.1 Нормальные формы Табличный способ определения истинности сложного выражения имеет ограниченное применение, т.к. с увеличением числа логических переменных число вариантов становится слишком большим. Тогда может быть использован способ приведения формул к нормальной форме. Аналитическое выражение функции (или формула) находится в нормальной форме, если в ней отсутствуют знаки эквивалентности, импликации, двойного отрицания, а знаки отрицания находятся только при переменных. Элементарной дизъюнкцией (произведением) называется дизъюнкция (произведение) переменных или их отрицаний, в котором каждая переменная встречается только один раз. ДНФ – это дизъюнкция элементарных произведений. КНФ – это произведение элементарных дизъюнкций. Как ДНФ, так и КНФ функции не единственна. Обычно предполагают, что входящие в ДНФ (КНФ) элементарные конъюнкции (дизъюнкции) попарно различны. ДНФ (КНФ) называется совершенной, если каждая переменная формулы входит в каждую элементарную конъюнкцию (дизъюнкцию) ровно один раз. СДНФ (СКНФ) функции единственна. Пример 4.6 Элементарные дизъюнкции: xy, z. Элемент. конъюнкции: xyz, x. f(x,y,z) = xyz xy – ДНФ ; f(x,y,z) = (x y)z – КНФ. x, x, Введем обозначения: x 1 0 Теорема 4.6 О разложении булевой функции по k переменным (знак ). f ( x1 ,...,xn ) V 1 ,..., k Пример 4.7 x11 x2 2 ...xk k f ( 1 , 2 ,..., k , xk 1 ,...,xn ) n=3, k=2. f ( x 1 , x 2 , x 3 ) V x 1 1 x 2 2 f ( 1 , 2 , x 3 ) x 1 x 2 f (0 ,0 , x 3 ) 1 , 2 x 1 x 2 f (0 ,1, x 3 ) x 1 x 2 f (1,0 , x 3 ) x 1 x 2 f (1,1, x 3 ) Доказательство: Выберем какой-либо набор значений для переменных x1, …, xn. Пусть это 1, i i будет 1, …, n.. Заметим, что i (11=1, 00=1, 10=¬1=0, 01=0) 0 , i i i Подставим в правую часть формулировки теоремы вместо x1, …, xn набор 1, …, n. Получим ( V 1 ,..., k ) 1 1 2 2 ... k k f ( 1 , 2 ,..., k , k 1 ,..., n ) . 69 Поскольку коэффициент перед функцией равен 1 только при равных значениях i и i, в разложении останется только один член: 11 ... k k f ( 1 ,..., k , k 1 ,..., n ) , и i =i, т.е. f ( 1 ,..., k , k 1 ,..., n ) . Получена левая часть формулы теоремы 4.6. Поскольку набор был выбран произвольно, получаем, что утверждение верно набора x1, …, xn. ■ Следствие 1: Разложение Шеннона f ( x1 , x2 ,..., xn ) x1 f (0, x2 ,..., xn ) x1 f (1, x2 ,..., xn ) Следствие 2: При k=n получаем: f ( x1 ,..., xn ) V x1 1 x2 2 ...xn n , т.е. f 1 выбираем те слагаемые, на которых функция равна 1. Полученная формула представляет собой СДНФ. 4.2.2 Построение совершенных нормальных форм 1) 2) Построение СДНФ 1. Построение по таблице истинности Найти строки в ТИ, где f = 1. найденному набору 1, …, n. поставить в соответствие произведение x , если i 1 ~ xi i x1 ~ x 2 ... ~ x n , где ~ xi , если i 0 Составить дизъюнкцию из произведений п.2. 2. Получение из ДНФ. Если некоторое произведение ДНФ не содержит какой-либо переменной (пусть xk), то необходимо домножить это произведение на дизъюнкцию этой переменной и ее отрицания (т.е. на единицу, равную xk xk) и применить дистрибутивный закон. 3) 1) 2) Построение СКНФ 1. Построение по ТИ. Найти строки в ТИ, где f = 0. найденному набору 1, …, n. поставить в соответствие дизъюнкцию x , если i 0 ~ xi i x1 ~ x 2 ... ~ xn , где ~ x i , если i 1 Составить произведение дизъюнкций из п.2. 2. Получение из КНФ. Если некоторая элементарная дизъюнкция КНФ не содержит какой-либо переменной (пусть xk), то необходимо дизъюнктивно добавить в нее произведение этой переменной и ее отрицания (т.е. xkxk) и применить дистрибутивный закон. 3) 70 Пример 4.8 1) Получим СДНФ и СКНФ по ТИ: f ( x, y , z ) x y z x yz x yz xy z xyz СДНФ, f ( x , y , z ) ( x y z )( x y z )( x y z ) СКНФ 2) Получим СДНФ и СКНФ из ДНФ и КНФ: g ( x, y, z ) xy xz xy( z z ) xz ( y y ) xyz xy z x yz x yz g ( x, y, z ) ( x y )( x z )( y z ) ( x y z z )( x y y z )( x x y z ) ( x y z )( x y z )( x y z )( x y z )( x y z )( x y z ) ( x y z )( x y z )( x y z )( x y z ) x 0 0 0 0 1 1 1 1 y 0 0 1 1 0 0 1 1 z 0 1 0 1 0 1 0 1 Произведения в СДНФ называются минтермами, а дизъюнкции в СКНФ – макстермами. Может использоваться запись f ( x1 ,..., x n ) V (m1 , m 2 ,..., m k ) , которая 1 означает, что в качестве минтермов берутся произведения, соответствующие двоичному представлению чисел m1 , m 2 ,..., m k . Аналогично, запись f ( x1 ,..., xn ) ( M 1 , M 2 ,..., M k ) означает, что в качестве макстермов берутся 0 дизъюнкции, соответствующие M 1 , M 2 ,..., M k . двоичному Пример 4.9 Пусть заданы функции f и g: представлению чисел f ( x 1 , x 2 , x 3 ) V (1,3,5,6 ) ; 1 g ( x 1 , x 2 , x 3 ) ( 2,4,5 ) . f: 1 001; 3 011; 5 101; 6 110 0 f ( x1 , x 2 , x 3 ) x1 x 2 x 3 x1 x 2 x 3 x1 x 2 x 3 x1 x 2 x 3 . g: 2 010, 4 100; 5 101 g( x1 , x 2 , x 3 ) ( x1 x 2 x 3 )( x1 x 2 x 3 )( x1 x 2 x 3 ) . 4.2.3 Карты Карно Кроме аналитического, существуют геометрические способы представления булевых функций. Одним из таких способов является карта Карно. Пусть дана булева функция f(x1, x2, …, xn), определенная на 2n наборах переменных. Наборы, отличающиеся значением только одной переменной xi, называются соседними. Множество тех наборов, на которых f(x1, x2, …, xn) = 1, называется прообразом единицы, множество наборов, на которых f(x1, x2, …, xn) = 0 – соответственно прообразом нуля. Карта Карно представляет собой таблицу прямоугольной формы, состоящую из 2n клеток. Каждая клетка соответствует одному из 2n наборов переменных. Любые две соседние клетки отличаются значением только одной переменной, т.е. представляют соседние наборы, причем считается, что 71 f 1 1 0 1 0 1 0 1 противоположные концы каждой строки или столбца являются тоже соседними. Булева функция может быть представлена на карте Карно выделением клеток, соответствующих прообразу 1. В этих клетках будем писать 1 и называть их p-клетками. Незаполненные ячейки соответствуют нулям функции. 2k соседних p-клеток, расположенных в виде прямоугольника или квадрата, образуют k-мерный p-подкуб. Он называется покрытием размерности k и соответствует произведению n–k переменных. Одна p-клетка образует 0мерный p-подкуб (или 0-куб), две – одномерный (1-куб, покрытие размерности 1 – произведение n–1 переменной – все кроме той, которая отличается для этих наборов), четыре – двумерный, и т.п. x1 Для функции трех переменных карту Карно можно представить в следующем виде: x3 Все клетки, отмеченные скобкой xi (по строке и столбцу), x2 x1 представляют наборы с xi = 1, а в неотмеченных строках и столбцах клетки соответствуют наборам с xi = 0. В случае четырех переменных карта Карно имеет следующий x4 x3 вид: x1 Пример 4.10 Заполним карту Карно для функции x2 1 1 f ( x1 , x 2 , x 3 ) x1 x 2 x 3 x1 x 2 x 3 x1 x 2 x 3 x1 x 2 x 3 x3 1 4.2.4 Контрольные вопросы 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 1 x2 Какое представление функции называется ее нормальной формой? Что такое ДНФ? В чем ее отличие от КНФ? Какая нормальная форма называется совершенной? Какой формой является функция xy? Почему? Запишите разложение Шеннона для функции от 4 переменных f(x1,x2,x3,x4) по переменной x3. Какие существуют способы построения СДНФ и СКНФ? В чем их различие при построении по таблице истинности? Как можно получить СДНФ (СКНФ) посредством преобразований? Что называется минтермами (макстермами)? Что такое карта Карно? Какова особенность соседних клеток на карте Карно? Из какого количества клеток состоит карта Карно функции трех переменных? А функции 5 переменных? Что такое покрытие на карте Карно? Сколько клеток карты Карно составляют покрытие размерности 2? А покрытие размерности 4? Как построить карту Карно функции, представленной в ДНФ? 72 4.3 Контактные схемы Контактная цепь (схема) – устройство из проводов и контактов, связывающих два полюса. Любой контакт может быть либо замкнут, либо разомкнут. Контакты будем обозначать x1, x2, x3, … 0, если контакт разомкнут xi 1, если контакт замкнут. Контактной схеме будет соответствовать булева функция, которая принимает значение 1, если контур между двумя полюсами замкнут, и 0 – в противном случае. Основные операции булевой алгебры можно реализовать с помощью последовательного и параллельного соединения контактов. Схема Булева операция x2 x1 x2 x1 x1 x1 x2 x1x2 x1 Соответствие между схемой и булевой операцией легко проверить, сравнив работу схемы с таблицей истинности булевой функции. Для сложных контактных цепей можно построить более простую реализацию, упростив исходную булеву функцию с помощью аксиом булевой алгебры или применив один из методов минимизации булевой функции. Пример 4.11 Пусть задана контактная схема. Упростить ее до пяти контактов. Составим булеву функцию для исходной схемы и упростим ее. x1 x2 x1 x3 x2 x1 f ( x1 , x 2 , x 3 , x 4 ) ( x1 x 2 x1 x 3 ) x1 x1 x 2 x 3 x1 x 3 x1 x 2 x 3 . упрощенной формуле составим схему: x1 x1 x2 x1 x3 По x3 x3 4.3.1 Контрольные вопросы 1. 2. 3. 4. Что такое контактная схема? Какая логическая операция соответствует последовательному соединению контактов? А параллельному соединению? Как можно построить булеву функцию по контактной схеме? Какие алгоритмы булевой алгебры можно использовать для упрощения контактной схемы? 73 4.4 Минимизация булевых функций Минимальная ДНФ – это такая ДНФ функции, которая содержит наименьшее количество вхождений переменных по сравнению с остальными. Элементарная конъюнкция называется импликантой функции f ( x 1 ,, x n ) , если она равна 0 на тех наборах, на которых f обращается в 0. Простой импликантой называется импликанта, в которой отбрасывание любой буквы ведет к получению элементарной конъюнкции, которая не является импликантой (т.е. никакая часть простой импликанты сама импликантой не является). Каждая импликанта соответствует покрытию на карте Карно, а простая импликанта – покрытию наибольшей размерности. Пример 4.12 1) – f ( x1 , x 2 , x 3 ) x1 x 2 x1 x 2 x 3 x1 x 2 x 3 . x1 x 2 x 3 импликанта, причем простая; x 1 x 2 x 3 – импликанта, но не простая, т.к. удаление x3 снова дает импликанту x 1 x 2 (которая является простой). 2) Найдем импликанты и простые импликанты для функции f ( x 1 , x 2 ) x 1 x 2 . Всего имеется 8 элементарных конъюнкций с переменными x1, x2. Приведем их таблицы истинности. x1 x2 x1x2 x1 x2 x1 x2 x1 x2 x1x2 x1 x2 x1 x2 0 0 1 1 0 1 0 1 1 1 0 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1 1 0 0 1 0 1 0 0 0 1 1 0 1 0 1 Из таблицы истинности заключаем, что x 1 x 2 , x 1 x 2 , x1x2, x 1 , x2 являются импликантами функции f. Из них простыми являются x 1 и x2. Дизъюнкция всех простых импликант функции называется сокращенной ДНФ. Сокращенная ДНФ функции единственна. Сокращенная ДНФ может содержать лишние импликанты, удаление которых не меняет значения функции. Если из сокращенной ДНФ удалить все лишние дизъюнктивные члены, и удаление любого из оставшихся приведет к изменению значения функции, то такая форма называется тупиковой ДНФ. Та из всех тупиковых ДНФ, которая имеет наименьшее число вхождений переменных, является минимальной ДНФ. Минимальных ДНФ может быть несколько. Процесс нахождения минимальной ДНФ из СДНФ можно разбить на следующие этапы: 1) нахождение сокращенной ДНФ (она единственна); 2) нахождение всех тупиковых ДНФ (их м.б. несколько); 3) выбор из всех тупиковых минимальной ДНФ (их тоже м.б. несколько). Известны аналитические и графические способы построения минимальной ДНФ. Графический способ использует представление на картах Карно. 74 4.4.1 Применение карт Карно Этот метод используется для формул с малым числом переменных. Покрытие, состоящее из двух клеток, соответствует произведению всех переменных кроме одной, значением которой отличаются эти клетки. Покрытие из четырех клеток соответствует произведению, в котором отсутствуют две переменные и т.д. Для построения минимальной ДНФ следуют двум правилам: 1. Выбирают покрытия наибольшего размера, содержащие клетки, которые не могут быть ни в каком другом покрытии. 2. Для оставшихся клеток выбирают покрытие наибольшей размерности. Пример 4.13 Найдем минимальную ДНФ для функции f ( x1 , x 2 , x3 , x4 ) =V 0,1,2,3,4,6 ,7 ,8,9,11,15 . Выпишем двоичные x1 1 номера всех 0-кубов: 0000, 0001, 0010, 0011, 0100, 0110, 0111, 1000, 1001, 1011, 1111. Построим карту Карно и покроем все единицы на карте Карно покрытиями наибольшего размера. Порядок построения минимальной ДНФ будет таким: 1) Выбираем покрытие наибольшего размера для ячейки, соответствующей x1x2x3x4. Это импликанта x3x4. 2) Выбираем покрытие для ячейки x 1 x 2 x 3 x 4 – импликанта 3) Выбираем покрытие для ячейки x1 x 2 x 3 x4 – x2 x3 . импликанта x1 x 4 . Непокрытых ячеек не осталось минимальная ДНФ имеет вид x 3 x 4 x 2 x 3 x 1 x 4 . 4.4.2 Метод Квайна-Мак-Класки x3 1 1 1 1 1 1 1 1 1 1 1 x4 x2 x1 x3 1 1 1 1 1 1 11 1 1 1 x2 Будем предполагать, что функция представлена в СДНФ. Метод КвайнаМак-Класки позволяет получить минимальную ДНФ независимо от количества аргументов. На первом этапе выполняется построение сокращенной ДНФ (т.е. поиск всех простых импликант), на втором – получение из нее минимальной ДНФ. Этап 1. Нахождение сокращенной ДНФ. 1) Каждому дизъюнктивному члену ставим в соответствие двоичный набор. Полученное множество 0-кубов обозначим K0 и разобьем его на группы по количеству единиц, обозначив группу с i единицами через K0i. 2) Нахождение простых импликант. а) Применяем операцию склеивания к 0-кубам из соседних подмножеств, которые различаются одной переменной: Axi A x i A . Склеивание возможно только между элементами соседних групп (только они могут различаться ровно одной переменной). Элементы, участвующие в склеивании, помечаем. Результат склеивания – набор 1-кубов (импликант) и, возможно, простые импликанты, которые остались не помеченными. Для 1-кубов на месте отсутствующей переменной будем писать знак x. 75 x4 б) Разбиваем 1-кубы на подмножества по расположению x и производим склеивание внутри каждого подмножества (принцип тот же – склеиваются 1-кубы, отличающиеся ровно одной переменной). Склеенные 1-кубы помечаем, результат склеивания – 2-кубы. Неотмеченные 1-кубы – простые импликанты. в) Аналогично склеиваем 2-кубы, 3-кубы и т.п., пока это возможно. По окончании процесса все оставшиеся непомеченными элементы являются простыми импликантами, т.е. получена сокращенная ДНФ. Пример 4.14 Результат склеивания наборов 0110 и 1110 – набор x110, который соответствует импликанте x 2 x 3 x 4 . Результат склеивания 1-кубов x110 и x100 – 2-куб x1x0, который соответствует импликанте x 2 x 4 . Этап 2. Нахождение минимальной ДНФ. 3) Построение импликантной таблицы. По найденным на предыдущем этапе простым импликантам составляем импликантную таблицу, заголовки строк которой – простые импликанты, заголовки столбцов – 0-кубы из исходной СДНФ. В таблице помечаем пересечение строки и столбца, если импликанта покрывает 0-куб. 4) Нахождение существенных импликант. Если в столбце имеется только одна пометка, то импликанта, соответствующая этой строке, называется существенной, и она обязательно должна присутствовать в минимальной ДНФ она включается в ответ. Если не включить ее в ответ, в нем будет потеряна единица, соответствующая рассматриваемому столбцу. Включив эту импликанту в минимальную ДНФ, можно устранить из дальнейшего рассмотрения строку и все столбцы с пометками для этой импликанты вычеркиваем столбец с одной пометкой и все остальные столбцы, имеющие пометки в этой строке, а также саму строку. 5) Вычеркивание доминируемых строк. Если в j-ой строке имеются все пометки i-ой строки и может быть, еще некоторые, то j-я строка доминирует над i-ой, и i-ую строку можно исключить из дальнейшего рассмотрения. Из таблицы вычеркиваются все доминируемые строки (с меньшим числом пометок – в частности, строки без пометок). 6) Вычеркивание столбцов. Если в m-ом столбце таблицы имеются все пометки k-го столбца и может быть, еще некоторые, то m-ый столбец доминирует над k-ым и m-ый столбец можно исключить из дальнейшего рассмотрения (т.е. вычеркивается столбец с большим числом пометок, в отличие от строки). 7) Этапы 4–6 повторяются до тех пор, пока это возможно. Полученная после таких преобразований таблица называется циклической. 8) Выбор минимального покрытия в циклической таблице. Используется процедура ветвления: а) выбирают столбец с минимальным количеством пометок (таких 76 столбцов может быть несколько); б) используя эти столбцы, выбирают из строк, содержащих пометки в выбранном столбце, ту, которая содержит максимальное количество пометок, и включают ее в минимальную ДНФ (в ответ). Если таких строк несколько, то берется любая. в) исключают строку, соответствующую найденной импликанте, и все помеченные в этой строке столбцы из дальнейшего рассмотрения. Если появилась строка, в которой во всех столбцах стоят пометки, то эту импликанту включают в минимальную ДНФ и на этом процесс нахождения минимальной ДНФ закончен. В противном случае выполняется возврат на п.4. В результате описанных преобразований таблицы будет получена минимальная ДНФ. Пример 4.15 Найдем минимальную f ( x1 , x2 , x3 , x4 ) = V 0,3,4,6,7,9,14,15 . ДНФ для функции 1 1) Выпишем все наборы, на которых функция принимает значение 1 (т.е. 0кубы функции): 0000, 0011, 0100, 0110, 0111, 1001, 1110, 1111. Разобьем наборы на группы по количеству единиц. Первая группа состоит из наборов, не содержащих единиц: {0000}; вторая – из наборов, содержащих одну единицу: {0100}, третья – две единицы: {0011, 0110, 1001}, четвертая – три {0111, 1110}, пятая – четыре {1111}. Выполним все возможные склеивания между наборами соседних групп, помечая участвующие в склеивании наборы: 0011 * 0111 * 0000* 0100* 0110 * 1111* Результаты склеивания – 11001 1110 * кубы 0x00, 01x0, 0x11, 011x, x110, x111, 111x. Импликанта 1001 – простая. Разобьем все полученные в результате склеивания импликанты по положению x 110 0 x00 011x x на группы: 1-я группа: ; 2-я: ; 3-я: 01 x 0 ; 4-я: . x 111 0 x 11 111 x Произведем все возможные склеивания внутри каждой группы, помечая наборы, участвующие в склеивании. x 110 * 0 x00 011x * 01x0 Результат склеивания – импликанта, x 111 * 0 x 11 111x * соответствующая x11x, и набор простых импликант, соответствующих 0x00, 0x11, 01x0. Дальнейшее склеивание осуществить нельзя, поэтому x11x соответствует простой импликанте. Можно переходить к составлению импликантной таблицы. 0000 1001 0x00 01x0 0x11 x11x 0011 v 0100 0110 v v v v v 0111 v v 1001 v 1110 1111 v v 77 Импликанты, соответствующие 0x00, 0x11, 1001, x11x – существенные, поэтому они обязательно входят в минимальную ДНФ. Удалим строки и столбцы для этих импликант из таблицы. Вычеркнутся все столбцы, следовательно, на этом процесс поиска минимальной ДНФ закончен. Минимальная ДНФ имеет следующий вид: f ( x1 , x 2 , x3 , x 4 ) x1 x3 x 4 x1 x3 x 4 x1 x 2 x3 x 4 x 2 x3 Можно построить карту Карно и проверить полученный результат. 4.4.3 Минимизация частично определенных функций Для минимизации неполностью определенных функций вводят в рассмотрение две дополнительных функции: 0(x1,x2,...,xn)=0 и 1(x1,x2,...,xn)=1 на всех наборах, на которых функция f не определена, и 0(x1,x2,...,xn)=1(x1,x2,...,xn)=f там, где f определена. Для построения минимальной ДНФ нужно выбрать наименьшее покрытие 0-кубов функции 0 простыми импликантами функции 1. На карте Карно наборы, на которых значения функции не определены, принято обозначать символом d. Тогда минимизация неполностью определенной функции с помощью карты Карно осуществляется по следующему правилу. Все единицы должны быть включены в покрытия наибольшей размерности, при этом при построении покрытий символ d можно заменять единицей, если это позволит получить покрытие большей размерности, и нулем, если для включения всех единиц в покрытия наибольшей размерности он не нужен. Пример 4.16 Рассмотрим функцию f ( x1 , x2 , x3 , x4 ) , заданную Т.И. Дополним ее функциями 0 и 1. Нужно найти x1 x2 x3 x4 f 0 1 сокращенную ДНФ для 1, а затем все покрытия 0- 0 0 0 0 1 1 1 0 0 0 1 * 0 1 кубов 0. 0 0 1 0 * 0 Выпишем наборы, на которых функция 1 принимает 0 0 1 1 0 0 10 значение 1: 0000, 0001, 0010, 0100, 0110, 0111, 1000, 0 1 0 0 * 0 1 1001, 1011, 1101, 1110, 1111. Разобьем наборы на 0 1 0 1 0 0 0 группы по количеству единиц. K00={0000}; 0 1 1 0 1 1 1 K01={0001,0010,0100,1000}; K02={0110,1001}; 0 1 1 1 * 0 1 1 0 0 0 * 0 1 K03={0111,1011,1101,1110}, K04={1111}. Выполним все 1 0 0 1 1 1 1 возможные склеивания между наборами соседних 1 0 1 0 0 0 0 групп, помечая участвующие в склеивании наборы: 1 0 1 1 * 0 1 1 1 0 0 0 0 0 0001 * 0111 * 1 1 0 1 * 0 1 0010 * 1011 * 0110 * 1 1 1 0 1 1 1 0000* 1111* 1 1 1 1 * 0 1 0100 * 1001 * 1101 * 1000 * 1110 * Результаты склеивания – 1-кубы 000x, 00x0, 0x00, x000, x001, 01x0, 100x, 011x, x110, 10x1, 1x01, x111, 1x11, 11x1, 111x. Разобьем все полученные в результате склеивания импликанты по положению x на группы: 78 0 x 00 x 000 * 00 x 0 * 000 x * 10 x 1 * 11 x 1 * 011 x * 111 x * ; K13= 01 x 0 * ; K14= 100 x * . ; K12= K11= x 001 * 1 x 01 * 1 x 11 * x 110 * x 111 * Произведем все возможные склеивания внутри каждой группы, помечая наборы, участвующие в склеивании. Получим: x00x, x11x, 1xx1, 0xx0, 1xx1, x00x, x11x. После устранения дубликатов получим: x00x, x11x, 1xx1, 0xx0. Результат склеивания – простая импликанта – 1-куб, соответствующая 0x00, и набор 2-кубов импликант, соответствующих x00x, x11x, 1xx1, 0xx0. Дальнейшее склеивание осуществить нельзя это простые импликанты. Можно переходить к составлению импликантной таблицы, столбцы которой – 0-кубы функции 0. 0x00 x00x x11x 1xx1 0xx0 0000 v v 0110 1001 1110 v v v v v v Импликанта x11x – существенная для 1110, вычеркиваем столбец 1110 и строку x11x, а также столбец 0110, который она покрывает, при этом импликанту x11x включаем в ответ. Больше существенных импликант нет, а строка x00x доминирует над всеми остальными доминируемые строки вычеркиваем, а импликанту x00x выписываем в ответ. В итоге в ответ вошли импликанты x11x и x00x, т.е. функция имеет вид f = x2x3 x2x3. Проверка: Построенная карта Карно подтверждает полученный результат. x1 Для включения в покрытия всех единиц, используя при 1 d d необходимости символы d и выбирая покрытия наибольшей d 1 d x4 размерности, достаточно покрытий x11x и x00x. Остальные d d d x 3 символы d, не вошедшие в эти покрытия, заменяются нулями. d 1 1 x2 Итак, рассмотрены основные методы получения минимальной ДНФ для полностью определенных и частичных функций. 4.4.4 Контрольные вопросы 1. 2. 3. 4. 5. 6. 7. Что является импликантой функции? В чем отличие простой импликанты? Что соответствует импликанте (простой импликанте) на карте Карно? Что такое сокращенная ДНФ? Каков алгоритм нахождения сокращенной ДНФ? Как можно получить минимальную ДНФ с помощью карт Карно? Что позволяет найти метод Квайна-Мак-Класки? Каковы основные этапы этого метода? Что является результатом каждого из этапов? Что такое 0-кубы? 1-кубы? 79 8. 9. 10. 11. 12. 13. Что представляет операция склеивания? Какие наборы возможно склеить? Как строится импликантная таблица? Что является ее строками, а что – столбцами? Какие строки и какие столбцы удаляются при упрощении импликантной таблицы? В чем состоит процедура ветвления? Единственна ли минимальная ДНФ? Что такое частично определенная функция? Чем отличается минимизация частично определенной функции? 80