Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Дискретная математика

.pdf
Скачиваний:
13
Добавлен:
23.06.2023
Размер:
2.32 Mб
Скачать

 

Основные свойства замыкания:

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| = 22n1 = 12 · 22n .

Доказательство. f T0 f(0, 0, . . . , 0) = 0, то есть вектор значений функции принимает вид fe= (0, α2, α3, . . . , α2n ). Это означает, что число различных функций в классе T0 равно числу различных двоичных наборов (0, α2, α3, . . . , α2n ). Длина этого набора равна k = 2n 1. Всего

число различных наборов длины k равно 2k = 22n1. Таким образом,

|T0| = 22n1 = 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

←−−−−−−
(1010 1010) 7→(0101 0101).

истинности, наборе. Поэтому, для задания вектора значений функции, двойственной к данной, достаточно переписать вектор значения исходной функции справа налево, инвертируя его.

Пример 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−11, α2n−1 | α2n−1 , α2n−11, . . . , α2, α1).

116

Теорема 7.4. Число самодвойственных функций, зависящих от n

переменных, равно

 

:

 

 

 

22n

 

 

 

 

 

|S| =

22n:

 

Доказательство. Так как вектор значений самодвойственной функции имеет вид

fe= (α1, α2, . . . , α2n−11, α2n−1 | α2n−1 , α2n−11, . . . , α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