Дискретная математика
.pdf
|
Основные свойства замыкания: |
• |
K1 K2 [K1] [K2] |
• |
[K1 K2] [K1] [K2] |
• |
[K] K |
• |
[[K]] = [K] |
7.2Классы Tσ, сохраняющие константу σ
Определение 7.3. Классом T0, сохраняющим константу 0, называется множество булевых функций, для которых выполнено равенство f(0, 0, . . . , 0) = 0 :
|
T0 = {f(x) P2 |
| |
|
f(0, 0, . . . , 0) = 0}. |
Аналогично |
определяется класс T |
, сохраняющий константу 1: |
||
e |
|
1 |
|
|
|
T1 = {f(xe) P2 |
| |
|
f(1, 1, . . . , 1) = 1}. |
Пример 7.2. Определить принадлежность функций f1, f2, f3, f4 классам T0 и T1.
а) e1f1 |
(000) = 0 |
|
|
f1 |
T0 |
; |
f1(111) = 1 |
|
f1 |
T1 |
|||||
f |
= (0011 0111) |
|
|
|
|
|
|
|
|
|
|
|
|||
б) e2f2 |
|
|
|
|
/ T0 |
; |
|
|
|
|
|
|
|
/ T1 |
|
(000) = 1 |
|
f2 |
f2(111) = 0 |
f2 |
|||||||||||
f |
= (1010 1010) |
|
|
|
|
|
|
|
|
|
|
|
|||
в) e3f3 |
|
|
|
|
T0 |
; |
|
|
|
|
|
|
|
/ T1 |
|
(000) = 0 |
|
f3 |
f3(111) = 0 |
f3 |
|||||||||||
f |
= (0110 0110) |
|
|
|
|
|
|
|
|
|
|
|
|||
г) e4f4 |
|
|
|
|
/ T0 |
; |
|
|
|
|
|
|
|
T1 |
|
(000) = 1 |
|
f4 |
f4(111) = 1 |
f4 |
|||||||||||
f |
= (1011 1101) |
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
111
Замечание 7.1. Для того, чтобы определить принадлежность функции к классу T0, достаточно знать значение функции только на одном двоичном наборе: наборе, состоящем из всех нулей (значения функций на этом наборе в приведенном выше примере подчеркнуты одной чертой). Этот набор является самым первым набором в таблице истинности и в векторе значений функции. Аналогично, для определения принадлежности функции к классу T1, достаточно знать значение функции только на одном двоичном наборе: наборе, состоящем из всех единиц (значения функций на данном наборе в примере подчеркнуты двумя чертами). Этот набор является последним набором в таблице истинности и в векторе значений функции.
Замечание 7.2. Как видно из приведенного выше примера, классы T0 и T1 пересекаются только частично: одна и та же функция может принадлежать или не принадлежать обоим классам либо одному из них.
Замечание 7.3. Так как суперпозиция функций включает в себя подстановку
а) тождественной функции
б) подстановку других функций,
то для доказательства замкнутости любого класса K булевых функций необходимо рассмотреть два случая:
1.тождественная функция f(x) = x K
2.любая суперпозиция функций f, f1, . . . , fm K также принадлежит классу K :
F = f(f1, . . . , fm) K.
Теорема 7.1. Класс T0 является функционально замкнутым, то есть
[T0] = T0.
Доказательство.
112
1.Очевидно, что f(x) = x T0
2.Пусть функции f, f1, f2, . . . , fm T0. Докажем, что любая суперпозиция функций f1, f2, . . . , fm также принадлежит этому классу, то есть
f, f1, f2, . . . , fm T0 F = f(f1, f2, . . . , fm) T0.
f, f1, f2, . . . , fm T0 f(0, 0, . . . , 0) = f1(0, 0, . . . , 0) =
= f2(0, 0, . . . , 0) = · · · = fm(0, 0, . . . , 0) = 0
Найдем значение функции F на наборе, состоящем из всех нулей.
F (0, 0, . . . , 0) =
=f(f1(0, 0, . . . , 0), f2(0, 0, . . . , 0), . . . , fm(0, 0, . . . , 0)) =
=f(0, 0, . . . , 0) = 0.
Мы получили, что функция F на наборе, состоящем из всех нулей, принимает значение 0, то есть F T0.
Аналогично доказывается
Теорема 7.2. Класс T1 является функционально замкнутым, то есть
[T1] = T1.
Теорема 7.3. Класс T0 содержит 12 · 22n функций, зависящих от n переменных:
|T0| = 22n−1 = 12 · 22n .
Доказательство. f T0 f(0, 0, . . . , 0) = 0, то есть вектор значений функции принимает вид fe= (0, α2, α3, . . . , α2n ). Это означает, что число различных функций в классе T0 равно числу различных двоичных наборов (0, α2, α3, . . . , α2n ). Длина этого набора равна k = 2n −1. Всего
число различных наборов длины k равно 2k = 22n−1. Таким образом,
|T0| = 22n−1 = 12 · 22n .
113
7.3Класс S самодвойственных функций
Определение 7.4. Функция f (x1, x2, . . . , xn) называется двойственной к функции f(x1, x2, . . . , xn), если выполняется равенство
f (x1, x2, . . . , xn) = f(x1, x2, . . . , xn).
Для любой булевой функции можно задать двойственную ей.
Пример 7.3. Построить таблицу истинности функции, двойственной к fe1 = (0011 0111).
Решение. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
x1 |
x2 |
x3 |
|
f1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
0 |
0 |
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
0 |
1 |
|
0 |
|
|
|
Построим таблицу истинности функции f1 и |
||||||||||||||
0 |
1 |
0 |
|
1 |
|
|
|
|||||||||||||||
|
|
|
|
вычислим значения, которые принимает двой- |
||||||||||||||||||
0 |
1 |
1 |
|
1 |
|
|
|
|||||||||||||||
|
|
|
|
ственная к ней функция на всех двоичных на- |
||||||||||||||||||
1 |
0 |
0 |
|
0 |
|
|
|
|||||||||||||||
|
|
|
|
борах. |
||||||||||||||||||
1 |
0 |
1 |
|
1 |
|
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
1 |
1 |
0 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
1 |
1 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x1 x2 x3 |
|
f1 |
|
|
|
f1 |
|||||||||||||||
|
|
|
|
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
0 |
0 |
0 |
|
0 |
|
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
0 |
1 |
|
0 |
|
|
|
|
По определению двойственной функции |
|||||||||||||
0 |
1 |
0 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
1 |
1 |
|
1 |
|
|
|
|
f1 (0, 0, 0) = |
f |
1(0, 0, 0) = |
|||||||||||
1 |
0 |
0 |
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
= f1(1, 1, 1) = 1 = 0. |
|||||||||||||||||
1 |
0 |
1 |
|
1 |
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
1 |
1 |
0 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
1 |
1 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
114
x1 x2 x3 |
|
f1 |
|
f1 |
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
0 |
0 |
0 |
|
0 |
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
0 |
1 |
|
0 |
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
1 |
0 |
|
1 |
|
|
f1 (0, 0, 1) = |
|
|
|
|
|
|
|
|
|
|
||
|
|
|
f |
1(0, 0, 1) = |
|||||||||||||||
0 |
1 |
1 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
= f1(1, 1, 0) = 1 = 0. |
||||||||||||||||
1 |
0 |
0 |
|
0 |
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
1 |
0 |
1 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
1 |
0 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
1 |
1 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
И так далее вычисляем значения двойственной функции в каждой строке таблицы истинности.
x1 x2 x3 |
|
f1 |
|
f1 |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
0 |
0 |
0 |
|
0 |
|
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
f1 (0, 1, 0) = f1 |
(0, 1, 0) = f1(1, 0, 1) = 0; |
|||||||||||||||
0 |
0 |
1 |
|
0 |
|
0 |
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
f1 (0, 1, 1) = f1 |
(0, 1, 1) = f1(1, 0, 0) = 1; |
|||||||||||||||
0 |
1 |
0 |
|
1 |
|
0 |
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
f1 (1, 0, 0) = f1 |
(1, 0, 0) = f1(0, 1, 1) = 0; |
|||||||||||||||
0 |
1 |
1 |
|
1 |
|
1 |
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
f1 (1, 0, 1) = f1 |
(1, 0, 1) = f1(0, 1, 0) = 0; |
|||||||||||||||
1 |
0 |
0 |
|
0 |
|
0 |
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
f1 (1, 1, 0) = f1 |
(1, 1, 0) = f1(0, 0, 1) = 1; |
|||||||||||||||
1 |
0 |
1 |
|
1 |
|
0 |
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
f1 (1, 1, 1) = f1 |
(1, 1, 1) = f1(0, 0, 0) = 1. |
|||||||||||||||
1 |
1 |
0 |
|
1 |
|
1 |
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
1 |
1 |
1 |
|
1 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
Окончательно получаем таблицу истинности двойственной к f1
функции. |
|
|
|
|
|
|
|
|
|
|
|
e |
|
|
|
|
|
|
|
|
|
Определение 7.5. |
, α2 |
, . . . , αn) и β = (α1, α2, . . . , αn) |
||||||||
Наборы α = (α1 |
||||||||||
называются противоположными. |
e |
Например, αf1 = (10110) и βe1 = (01001)− противоположные наборы. Наборы αf2 = (01110) и βe1 = (10011) противоположными не явля-
ются, так как (0 1 1 1 0) = (10001) ≠ (10011).
Замечание 7.4. Противоположные наборы расположены симметрично относительно центра таблицы истинности.
Замечание 7.5. Для определения значений двойственной функции на наборе αe = (α1, α2, . . . , αn) мы инвертируем значение функции на противоположном, то есть симметричном относительно центра таблицы
115
истинности, наборе. Поэтому, для задания вектора значений функции, двойственной к данной, достаточно переписать вектор значения исходной функции справа налево, инвертируя его.
Пример 7.4. Найти функцию, двойственную к fe2 = (1010 1010).
Решение. Используя замечание 7.5, для нахождения двойственной функции перепишем вектор значений исходной функции слева направо. Получим
Инвертируем полученный набор:
(0 1 0 1 0 1 0 1) = (1010 1010);
f2 = (1010 1010).
Пример 7.5. Построить вектор значений функции, двойственной к
fe3 = (1011 0110).
Решение. Аналогично предыдущему примеру
←−−−−−−
(1011 0110) 7→(0110 1101) 7→(0 1 1 0 1 1 0 1) = (1001 0010);
f3 = (1001 0010).
Определение 7.6. Функция f(x1, x2, . . . , xn) называется самодвойственной, если она двойственна сама себе.
Множество всех самодвойственных функций образует класс, который обычно обозначают класс S:
S = {f(xe) P2 | f(x1, x2, . . . , xn) = f(x1, x2, . . . , xn)}.
Функция является самодвойственной тогда и только тогда, когда на противоположных наборах она принимает противоположные значения. Таким образом, вектор значений самодвойственной функции принимает вид
fe= (α1, α2, . . . , α2n−1−1, α2n−1 | α2n−1 , α2n−1−1, . . . , α2, α1).
116
Теорема 7.4. Число самодвойственных функций, зависящих от n |
||||||
переменных, равно |
√ |
|
: |
|
|
|
22n |
√ |
|
|
|||
|
|
|
|S| = |
22n: |
|
Доказательство. Так как вектор значений самодвойственной функции имеет вид
fe= (α1, α2, . . . , α2n−1−1, α2n−1 | α2n−1 , α2n−1−1, . . . , α2, α1),
то любая самодвойственная функция однозначно определяется половиной своего вектора значений, то есть набором длины
k = 12 · 2n = 2n−1.
Значит, число самодвойственных функций n переменных равно числу различных двоичных наборов длины k. Количество таких наборов равно 2k = 22n−1 = √22n:
Таким образом, √
|S| = 22n:
Определять, является ли функция самодвойственной, можно несколькими способами.
7.3.1Алгоритм 1 определения самодвойственности булевой функции
1.Вычислить вектор значений функции, двойственной к данной.
2.Сравнить полученный вектор с вектором значений исходной функции. Если оба вектора тождественно совпали, то функция является самодвойственной. Несовпадение двух векторов хотя бы в одной координате говорит о том, что исходная функция не является самодвойственной.
Пример 7.6.
117
а) Функция fe1 = (0011 0111) не является самодвойственной (f1 / S),
так как
f1 = (0001 0011) ≠ (0011 0111) = f1.
б) Функция fe2 = (1010 1010) S (f2− самодвойственная функция),
так как
f2 = f2.
Так как самодвойственная функция однозначно определяется только половиной своего вектора значений, то удобнее пользоваться следующим алгоритмом:
7.3.2Алгоритм 2 определения самодвойственности булевой функции
1.Делим вектор значений функции пополам. Получаем два набора меньшей длины.
2.Берем любую полученную половину (обычно берут правую), переписываем её справа налево и инвертируем (все нули заменяем на единицы и наоборот).
3.Если полученный набор совпадает с оставшейся (левой) половиной вектора значений, то функция является самодвойственной. При несовпадении строк хотя бы в одной координате, делаем вывод: функция несамодвойственна.
Пример 7.7. Исследовать функцию на самодвойственность: а) fe3 = (0110 0110); б) fe4 = (1110 1000)
Решение.
а) fe3 = (0110 0110)
(0110 | 0110) - делим вектор значений функции пополам;
←−−−−
(0110) - берем правую половину,
(0 1 1 0) - переписываем её справа налево (1001) - и инвертируем её.
Так как (0110) ≠ (1001), то функция не является самодвойственной
(f3 / S);
118
б) fe4 = (1110 1000)
(1110 | 1000) - делим вектор значений функции пополам;
←−−−−
(1000) - берем правую половину,
(0 0 0 1) - переписываем её справа налево (1110) - и инвертируем её.
Так как (1110) ≡ (1110), то функция самодвойственна (f4 S).
7.3.3Алгоритм 3 определения самодвойственности булевой функции
1.Находим середину вектора значений функции.
2.Сравниваем значения функции на наборах, симметричных относительно середины.
3.Если при таком сравнении все полученные значения функции противоположны, то функция является самодвойственной. В противном случае функция несамодвойственна.
Использование данного алгоритма будет дано ниже, при применении леммы о несамодвойственной функции.
Замечание 7.6. Тождественная функция f1(x) = x и её отрицание f2(x) = x являются самодвойственными функциями одной переменной. Константы 0 и 1 к самодвойственным функциям не относятся. В справедливости этого замечания можно убедиться, применив к каждой из перечисленных функций алгоритм определения самодвойственности двоичных функций.
Теорема 7.5. Класс S самодвойственных функций замкнут :
[S] = S.
Доказательство.
1. f(x) = x S (см. замечание 7.6)
119
2. Докажем, |
что, |
если |
|
|
функции |
||||
f(x1, . . . , xm), f1(x1, . . . , xn1 ), . . . , fm(x1, . . . , xnm ) |
S, то и |
||||||||
их суперпозиция F |
= f(f1(x1, . . . , xn1 ), . . . , fm(x1, . . . , xnm )) S. |
||||||||
По определению самодвойственной функции |
|
|
|
||||||
f(x1, . . . , xm), f1(x1, . . . , xn1 ), . . . , fm(x1, . . . , xnm ) S |
|||||||||
.. |
|
|
|
|
|
|
|
|
|
f(x , . . . , xm) = f (x1, . . . , xm) = |
f |
( |
|
1 |
, . . . , |
|
m) |
||
x |
x |
|
. |
(x11, . . . , xn1 ) = f1 (x1, . . . , xn1 ) = f1(x1, . . . , xn1 ) |
||||||
|
f1 |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fm(x1, . . . , xnm ) = fm(x1, . . . , xnm ) = fm(x1, . . . , xnm )
Найдем функцию, двойственную к функции
F = f(f1(x1, . . . , xn1 ), . . . , fm(x1, . . . , xnm )).
F (x1, . . . , xn) =
= F (x1, . . . , xn) = f(f1(x1, . . . , xn ), . . . , fm(x1, . . . , xn )) =
| {z 1 m }
по определению самодвойственной функции
= |
f(f1 |
( |
|
1 |
, . . . , |
|
n1 ), . . . , fm( |
|
1 |
, . . . , |
|
nm )) |
= |
||||
x |
x |
x |
x |
||||||||||||||
|
| |
|
|
|
|
|
|
|
{z |
|
|
} |
|
применяем закон двойного отрицания к f1;:::;fm
= f(f|1(x1,{z. . . , xn}1 ), . . . , f|m(x1,{z. . . , xnm})) =
f1 (x1;:::;xn1 )≡f1 fm(x1;:::;xnm )≡fm
=f(f1(x1, . . . , xn1 ), . . . , fm(x1, . . . , xnm )) =
=f (f1(x1, . . . , xn1 ), . . . , fm(x1, . . . , xnm )) =
=f(f1(x1, . . . , xn1 ), . . . , fm(x1, . . . , xnm )).
Лемма S (лемма о несамодвойственной функции).Из несамодвойственной функции f(x1, . . . , xn) путем подстановки в неё вместо переменных x1, . . . , xn функций x и x можно получить несамодвойственную функцию одной переменной 0 или 1.
Доказательство. По условию теоремы f(x1, . . . , xn) / S, то есть
f(x1, . . . , xn) ̸ ≡f(x1, . . . , xn).
120