LS-Sb89586
.pdf
|
|
C0 |
|
|
|
|
1 |
|
|
|
0 |
|
|
|
|
|
|
|
C0 |
C1 |
|
|
1 |
1 |
|
|
|
1 |
|
1 |
|
|
|
|
|
|
C20 |
C12 |
|
C22 |
|
1 |
2 |
1 |
C0 |
C1 |
C |
2 |
C3 |
1 |
3 |
3 |
1 |
3 |
3 |
3 |
3 |
........................................... |
||||
................................... |
||||||||
|
Рис. 2.2 |
|
|
|
Рис. 2.3 |
|
В этом треугольнике каждое число по выведенной рекуррентной формуле есть сумма двух, стоящих над ним, а по границам треугольника стоят еди-
ницы (рис. 2.3). Например, (a b)3 a3 3a2b 3ab2 b3 .
3.БУЛЕВЫ ФУНКЦИИ
3.1.Определение булевой функции и примеры булевых функций
Определение. Функцию от одной или нескольких переменных, аргументы и значение которой могут принимать только значения 0 или 1, называют булевой функцией (в честь английского математика Джорджа Буля (1815–1864), одного из основателей математической логики).
Примеры:
Конъюнкция: x y = 1 тогда и только тогда, когда x и y оба равны 1. Дизъюнкция: x y = 1 тогда и только тогда, когда x и y оба равны 1.
Для того чтобы каждый раз не описывать значения словами, булеву функцию обычно задают таблицей истинности, то есть таблицей, в которой указаны значения для всех наборов переменных.
При этом значения наборов переменных располагают
в лексикографическом порядке: сначала набор из одних |
x |
y |
x y |
|
0 |
0 |
0 |
||
нулей, затем правый 0 заменяют на 1, и так далее, до на- |
||||
0 |
1 |
0 |
||
бора из одних единиц (табл. 3.1). |
||||
1 |
0 |
0 |
||
Перечислим еще несколько булевых функций: |
||||
1 |
1 |
1 |
||
эквивалентность: x y (значение выражения равно 1, |
||||
|
|
|
||
|
|
|
если значения x и y совпадают);
симметрическая разность: xXORy (значение выражения равно 1, если зна-
чения x и y не совпадают);
импликация: x y (мнемоническое правило: из нуля следует что угодно –
иноль, и единица);
отрицание: x .
21
3.2. Приоритет булевых функций
Высший приоритет у отрицания. За ним идет конъюнкция. Далее – дизъюнкция, симметрическая разность, эквивалентность, импликация. Иногда, впрочем, для дополнительного уточнения конъюнкцию заключают в скобки.
3.3.Некоторые равенства о булевых функциях двух переменных
Вдальнейшем понадобятся следующие три равенства. Их можно обосновать логическими рассуждениями, а можно и с помощью сравнения таблиц истинности.
1.x y x y .
2.x y x y .
3.x y x y .
3.4.Пример построения таблицы истинности для булевой функции трех переменных
Для функции трех переменных таблица истинности содержит 8 строк. Например: f (x, y, z) (y x) (y z) .
x |
y |
z |
y x |
y z |
f |
|
|
|
|
|
|
0 |
0 |
0 |
1 |
0 |
0 |
|
|
|
|
|
|
0 |
0 |
1 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
Для вычисления такой функции можно составить столбцы для промежуточных вычислений (табл. 3.2).
Примечание. Далее будем рассматривать действия с булевыми функциями прежде всего на примере функции f (x, y, z) (y x)
(y z) . Но если студенты быстро понимают материал, можно рассматривать дополнитель-
ные примеры для не очень сложных функций – например, f (x, y, z)
(x y)XOR(y z).
3.5.Совершенные дизъюнктивная (СДНФ)
иконъюнктивная (СКНФ) нормальные формы
Внекоторых случаях бывает удобно выразить булеву функцию только через конъюнкцию, дизъюнкцию и отрицание – например, поскольку выражения с этими операциями удобно подставлять одно в другое.
22
Для вычисления СКНФ и СДНФ пригодится табл. 3.3.
Правило построения СДНФ: выбрать те и только те строки, в которых значение функции равно 1, затем в этих строках записать конъюнкцию x, y, z
по следующему правилу: если соответствующая переменная равна 0, то пишем ее с отрицанием, если она равна 1, то пишем без отрицания.
|
|
|
|
|
|
|
|
|
|
|
|
|
Таблица 3.3 |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x |
y |
z |
y x |
y z |
f |
|
СДНФ |
|
СКНФ |
|||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
0 |
0 |
1 |
0 |
0 |
|
|
|
– |
x y z |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
0 |
1 |
1 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
– |
||||
|
x y z |
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
1 |
0 |
0 |
1 |
0 |
|
|
|
– |
x |
|
|
z |
|||||||
|
|
|
y |
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
0 |
1 |
1 |
0 |
1 |
0 |
|
|
|
– |
x |
|
|
|
|
|
|||||
|
|
|
y |
z |
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
1 |
0 |
0 |
1 |
0 |
0 |
|
|
|
– |
|
|
y z |
||||||||
|
|
|
x |
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
1 |
0 |
1 |
1 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
– |
||||
|
x y z |
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
1 |
1 |
0 |
1 |
1 |
1 |
|
|
|
|
|
|
|
|
|
|
– |
||||
|
x y z |
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
1 |
1 |
1 |
1 |
1 |
1 |
|
x y z |
|
|
|
– |
Например, во второй строке пишем x y z , поскольку в соответствующей строке были значения x = 0, y = 0, z = 1.
СДНФ записывают как дизъюнкцию этих выражений. При этом иногда операцию конъюнкции не пишут, подобно тому как для умножения не пишут знак умножения, то есть, например, yz означает произведение y и z.
В итоге получаем: СДНФ = x yz x yz xyz xyz .
Построение СКНФ в некотором смысле двойственно к построению СКНФ: вместо строк со значением 1 берем строки со значением 0, вместо дизъюнкции – конъюнкцию, а вместо конъюнкции – дизъюнкцию. И существует принципиальное отличие: там, где значение переменной равно 0, она берется без отрицания, а там, где это значение равно 1, – с отрицанием. Сравните первую и третью строки, в которых стоят выражения x y z и
x y z соответственно.
Выражение для СКНФ можно получить, перемножив все эти дизъюнк-
ции: СКНФ = x y z x y z x y z x y z .
23
Следующее важное действие – упростить СДНФ. Это можно сделать с помощью действий, аналогичных вынесению множителя за скобку.
x yz x yz xyz xyz x x yz xy z z yz xy .
Итак, упрощенная форма СДНФ в данном случае равна yz xy .
Но, как во многих задачах на упрощение, возникает вопрос: можно ли упростить выражение дальше? Точнее сказать – можно ли получить выражение, содержащее еще меньше букв и равное данному?
Ответ дает метод минимизирующих карт.
Для его применения составьте табл. 3.4, аналогичную табл. 3.3.
Таблица 3.4
f |
Значения |
|
x |
|
y |
|
|
z |
|
xy |
|
|
xz |
|
yz |
|
|
xyz |
||||||||||||||
переменных |
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
0 |
000 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x |
|
y |
|
|
z |
|
x y |
|
x z |
|
y z |
|
|
x y z |
||||||||||||||||||
1 |
001 |
|
|
|
|
|
|
|
z |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x |
|
y |
|
|
|
x y |
|
|
xz |
|
yz |
|
|
x yz |
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
0 |
010 |
|
|
|
|
y |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x |
|
|
|
z |
|
xy |
|
x y |
|
y z |
|
|
xy z |
|||||||||||||||||||
0 |
011 |
|
|
|
|
y |
|
|
z |
|
|
|
|
|
|
|
|
|
|
|
|
yz |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
xy |
|
|
|
|
|
|
|
|
|
|
xyz |
|||||||||||||||
x |
|
|
|
|
|
|
xz |
|
|
|
||||||||||||||||||||||
0 |
100 |
|
x |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
y |
|
|
|
|
|
x y |
|
|
|
|
|
|
|
|
y z |
|
|
x y z |
|||||||||||||
|
|
|
z |
|
|
x z |
|
|
|
|||||||||||||||||||||||
1 |
101 |
|
x |
|
|
|
|
z |
|
|
|
|
|
|
xz |
|
|
|
|
|
|
|
|
|
|
|
||||||
|
y |
|
|
|
x y |
|
|
|
yz |
|
|
x yz |
||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||
1 |
110 |
|
x |
|
y |
|
|
|
|
|
xy |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
z |
|
|
x z |
|
y z |
|
|
xy z |
|||||||||||||||||||||
1 |
111 |
|
x |
|
y |
|
|
z |
|
xy |
|
|
xz |
|
yz |
|
|
xyz |
Каждую переменную (x, y и z) снабжаем или не снабжаем отрицанием в соответствии со значениями переменных. Например, если во втором столбце стоит 001, то x и y – с отрицанием, а z – без него.
В остальных столбцах переменные сопровождаются отрицаниями в соответствии с третьим, четвертым и пятым столбцами.
Теперь производим вычеркивание по следующему принципу.
Сначала вычеркиваем все строки, в которых значение функции равно нулю. В данном примере вычеркиваются строки с номерами 1, 3, 4 и 5.
Затем в каждом столбце, если элемент был один раз вычеркнут, он вычеркивается во всех оставшихся клетках столбца. Например, если во второй сверху
клетке шестого столбца элемент x y был вычеркнут, то в третьей сверху клетке его также вычеркнем.
Теперь из оставшихся элементов, взяв по одному элементу из строки, составим самое короткое выражение.
24
В данном примере из второй и шестой строк имеет смысл взять два одинаковых выражения yz , а из седьмой и восьмой строк – два одинаковых выражения xy, поскольку при вычислении дизъюнкции получим: yz yz xy xy yz xy .
Рекомендуется сначала найти упрощенное выражение методом минимизирующих карт, а затем упрощать СДНФ алгебраическими преобразованиями.
Если преобразования дали такой же ответ, что и метод минимизирующих карт, это добавляет уверенности в ответе.
Если они дали ответ длиннее, то, видимо, возможности упрощения не до конца использованы.
А если преобразования дали ответ короче, чем метод минимизирующих карт, то такая ситуация теоретически противоречива: метод минимизирующих карт дает самую короткую форму записи.
3.6. Композиция функции от трех переменных, дизъюнкции и конъюнкции
В качестве упражнения на булевы функции можно рассматривать вычисление функции f (x, x y, xy), где f – функция от трех переменных.
Задачу можно решать двумя способами.
Первый способ: найти значения выражений x, x y, xy для всех значений пары x, y. Затем подставить полученные значения в функцию от трех переменных.
Например: если x = y = 0, то f (x, x y, xy) f (0,0,0) 0 (по табл. 3.2).
Дополнительное условие для этой задачи: по таблице истинности необходимо определить формулу для полученной функции от двух переменных. Например, xy или x XOR y.
Второй способ: подставить в исходную формулу для функции (например, f (x, y, z) (y x) (y z) ) вместо переменной y выражение x y , а вместо переменной z – выражение x y , а затем упростить выражение.
3.7. Многочлен Жегалкина
Многочлен Жегалкина – это представление булевой функции в виде арифметического выражения, а точнее – в виде многочлена
a0 a1x a2 y a3z a12xy a23yz a13xz a123xyz ,
25
причем значения переменных x, y, z и полученных выражений рассматриваются в кольце вычетов по модулю 2. При этом каждое четное число заменяют на 0, а каждое нечетное – на 1.
Существует несколько способов вычисления этих коэффициентов, рассмотрим два из них.
Первый способ: метод неопределенных коэффициентов.
Подставим в многочлен все возможные наборы x, y, z и получим 8 условий на 8 коэффициентов. При этом матрица системы будет содержать много нулей.
Например, f (0, 0, 0) = a0 = 0 (значение берем из табл. 3.2).
Затем, f (0, 0, 1) = a0 a3 = 1, поэтому a3 = 1. И так далее, на каждом уравнении будем получать новый коэффициент.
В итоге получим: a3 = 1, a12 = 1, a23 = 1.
Тогда многочлен Жегалкина имеет вид: z + xy + yz.
Второй способ: использование СДНФ:
f (x, y, z) x yz x yz xyz xyz (1 x)(1 y)z x(1 y)z xy(1 z) xyzz zx zy xyz zx xyz xy xyz xyz z zy xy .
Как и следовало ожидать, ответ для второго способа вычисления многочлена Жегалкина совпал с ответом для первого способа.
Если эти ответы различаются, необходимо проверить выкладки.
В ответе с многочленом Жегалкина принято записывать слагаемые в лексикографическом порядке.
3.8. Двойственная функция
Определение. Пусть f – некоторая булева функция. Тогда двойственной к f (обозначается f*) называют функцию, таблица истинности которой получается из таблицы истинности f заменой всех 0 на 1, а всех 1 на 0.
Такую операцию называют инвертированием таблицы истинности. Примечание. Инвертирование происходит не только со значениями
функции, но и со значениями x и y. Поэтому после построения таблицы ее нужно будет «перевернуть», то есть переставить все строки в обратном порядке.
Посмотрим, например, что произойдет с дизъюнкцией при такой замене (табл. 3.4). После инвертирования получается табл. 3.5.
26
|
Таблица 3.4 |
|
|
|
Таблица 3.5 |
|
|
|
Таблица 3.6 |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
x |
x |
x |
|
x |
y |
|
(x y) * |
|
x |
y |
|
(x y) * |
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
0 |
0 |
1 |
1 |
|
1 |
0 |
0 |
|
0 |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
0 |
0 |
1 |
0 |
|
1 |
0 |
1 |
|
1 |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
1 |
1 |
0 |
1 |
|
1 |
1 |
0 |
|
1 |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
1 |
1 |
0 |
0 |
|
0 |
1 |
1 |
|
1 |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
Поскольку в таблице истинности записывают значения переменных в лексикографическом порядке, таблицу следует перевернуть.
Из табл. 3.6 видно, что значения функции, двойственной к конъюнкции, совпали со значениями дизъюнкции.
Следовательно, x y * x y .
Аналогично можно обосновать такие равенства:
x y * x y;
x y * xXORy;
xXORy * x y;
(x)* x.
3.9.Нахождение таблицы значений функции, двойственной к данной булевой функции
Это действие сводится к композиции инвертирования и переворота. Например, для функции со значениями (0, 1, 0, 0, 0, 1, 1, 1) значения
двойственной функции можно получить следующим образом:
инвертирование: (1, 0, 1, 1, 1, 0, 0, 0); переворот: (0, 0, 0, 1, 1, 1, 0, 1),
т. е. значения двойственной функции будут такими: (0, 0, 0, 1, 1, 1, 0, 1). Гораздо более творческое задание – получить формулу для функции,
двойственной к данной булевой функции, используя теорему о двойственной к суперпозиции функций.
При этом используется следующая идея.
Если α и β – две булевы функции, то, например, * * *. Ана-
логично вычисляется двойственная функция для других выражений, например, XOR заменяют эквивалентностью, а эквивалентность – XOR: если
f (x, y, z) (y x) (y z) ,
27
то f *(x, y, z) (y x)*XOR(y z)* y x *XOR(y z)* yx XOR yz .
Для самопроверки следует построить таблицу значений этой функции и сравнить с табл. 3.6, полученной композицией инверсии и переворота.
3.10.Исследование булевой функции на принадлежность
косновным классам замкнутости
Перечисленные далее пять классов замкнутости называются так, поскольку при подстановке одной функции этого класса в другую результат остается функцией этого класса.
Множество функций, сохраняющих 0. Определяется условием f (0, 0, 0) = 0. (Определение приведено для булевых функций от трех переменных, но его легко обобщить на случай произвольного количества переменных.)
Множество функций, сохраняющих 1. Определяется условием f (1, 1, 1) = 1.
Линейные. Множество функций, многочлен Жегалкина которых не содержит произведений.
Монотонные. Выполнено условие: если набор α меньше набора β, то f (α) ≤ f (β).
Уточнение: для сравнения наборов используется правило – набор α меньше набора β тогда и только тогда, когда каждый элемент α не больше соответствующего элемента β и хотя бы один элемент α меньше соответствующего элемента β.
Например, набор (0, 1, 0) меньше набора (1, 1, 1). А про наборы (1, 1, 0) и (1, 0, 1) нельзя сказать, что один меньше другого.
Для проверки функции на монотонность используют рисунок, называе-
мый диаграммой Хассе.
Рис. 3.1
28
Идея здесь состоит в том, чтобы сравнивать не каждые два набора из восьми, а меньшее количество пар. Возле каждого набора переменных пишем значение функции на этом наборе.
При этом если будет нарушение монотонности, оно обнаружится на диа-
грамме. |
|
|
|
|
|
|
|
|
|
|
Например, для функции |
f (x, y, z) (y x) (y z) |
нарушение моно- |
||||||||
тонности происходит следующим образом: |
|
|
|
|
|
|
||||
(0, 0, 1) < (0, 1, 1), |
|
|
|
|
|
|
|
Таблица 3.7 |
||
но |
|
|
|
|
|
|
|
|
|
|
|
Выполнение |
T0 |
T1 |
L |
|
M |
S |
|||
f (0, 0, 1) > f (0, 1, 1), |
|
свойства |
|
|||||||
|
|
f |
+ |
+ |
– |
|
– |
– |
||
поскольку |
|
|
|
|||||||
|
|
|
|
– |
– |
– |
|
– |
– |
|
|
|
f |
|
|||||||
f (0, 0, 1) =1, f (0, 1, 1) = 0. |
|
|
||||||||
|
|
|
|
|
|
|
|
|
Наконец, самодвойственной называют булеву функцию, которая равна двойственной к ней.
Ответ на задачу о проверке принадлежности булевой функции к классам замкнутости записывают таблицей (табл. 3.7).
Здесь T0 означает функции, сохраняющие 0; T1 – функции, сохраняю-
щие 1; L – линейные; M – монотонные; S – самодвойственные.
Ответ в таблице приведен, разумеется, для функции f (x, y, z)
(y x) (y z).
29
Список рекомендуемой литературы
Виноградов И. М. Основы теории чисел. М.: Наука, 1972.
Кемени Дж., Снелл Дж., Томпсон Дж. Введение в конечную математику. М.: Изд-во. иностр. лит., 1963.
Поздняков С. Н., Рыбин С. В. Дискретная математика. М.: Академия, 2008.
Фудзисава Т. Математика для радиоинженеров. Теория дискретных структур. М.: Радио и связь, 1984.
30