Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Дискретная математика.doc
Скачиваний:
70
Добавлен:
02.12.2018
Размер:
1.95 Mб
Скачать

§ 6. Замыкание и его свойства

С понятием полноты тесно связано понятие замыкания и замкнутого класса. Пусть М  некоторое подмножество функций из P2. Замыканием множества М называется множество всех булевых функций, представимых в виде формул через функции множества М. Замыкание множества М обозначается [М].

Примеры. 1. [i (i=1,...,7)] = P2.

2. Пусть M={1,x1x2}. Замыканием этого множества будет множество L всех линейных функций, то есть функций, имеющих вид: f(x1,...,xn)=c0c1x1...cnxn, где константы ci принимают значения либо 0, либо 1 (i = 0,1,...,n).

Свойства замыкания

1. Множество является подмножеством своего замыкания, т.е. М  [М].

2. Замыкание к замыканию множества М равно замыканию множества М, т.е. [[М]] = [М].

3. Если множество М1 является подмножеством множества М2, то и для их замыканий справедливо такое же соотношение: (М1М2)  ([М1]  [М2]).

4. Объединение замыканий является подмножеством замыкания от объединения:

[М1]  [М2]  [М1М2].

Множество М называется функционально замкнутым, если оно совпадает со своим замыканием: [М] = М. Замкнутое множество иногда называют замкнутым классом.

Примеры. 1. Класс М=P2 является замкнутым классом.

2. Класс L всех линейных функций является замкнутым, так как выражение, составленное из линейных выражений, является линейным.

3. Множество M={1,x1x2} не замкнуто, так как, например, отрицание, которое можно выразить через функции этого множества (=x1), в самом этом множестве не содержится.

Из второго свойства замыкания следует, что всякий класс [M] будет замкнутым. Это дает возможность получать многочисленные примеры замкнутых классов.

В терминах замыкания и замкнутого класса можно дать другое определение полноты (эквивалентное исходному): множество Mполная система, если замыкание этого множества представляет собой все множество булевых функций: [M] = P2.

§ 7. Важнейшие замкнутые классы

Класс функций, сохраняющих константу 0

Обозначим через T0 класс всех булевых функций f(x1,x2,...,xn), сохраняющих константу 0, то есть функций, для которых выполнено равенство f(0,0,...,0)=0. Очевидно, что функции 0, x, x1 x2, x1 x2, x1 x2 принадлежат классу T0, а функции 1, , x1 x2 в него не входят.

Поскольку таблица для функций f(x1,x2,...,xn) из класса T0 в первой строке содержит фиксированное значение 0, то в T0 попадает ровно половина всех булевых функций: .

Покажем, что T0  замкнутый класс. Так как он содержит тождественную функцию, то для обоснования его замкнутости достаточно показать, что функция Ф=f(f1,...,fm) принадлежит классу T0, если только f, f1,..., fm принадлежат этому классу.

 Ф(0,0,...,0)= f(f1(0,0,...,0),...,fm(0,0,...,0))= f(0,0,...,0)=0. 

Класс функций, сохраняющих константу 1

Обозначим через T1 класс всех булевых функций f(x1,x2,...,xn), сохраняющих константу 1; для них выполнено равенство f(1,1,...,1)=1. Этому классу принадлежат функции 1, x, x1 x2, x1 x2, x1 x2 и не принадлежат функции 1, , x1x2.

Покажем, что класс T1 состоит из функций, двойственных функциям из класса T0 (говорят, что класс T1 двойственен классу T0).

 Пусть f(x1,x2,...,xn) принадлежит T1, т.е. выполняется равенство f(1,1,...,1)=1. Тогда, воспользовавшись определением двойственной функции, получим: f*(0,0,...,0)= (,,...,)= (1,1,...,1)=0. Это значит, что f*(x1,x2,...,xn) принадлежит классу T0. 

Из взаимной двойственности классов T0 и T1 следует, что T1 также является замкнутым классом, и что он содержит столько же булевых функций, что и класс T0.

Класс самодвойственных функций

Класс S включает в себя все самодвойственные функции, то есть такие функции, для которых выполняется равенство: f(x1,x2,...,xn)=f*(x1,x2,...,xn). Очевидно, что функции x и самодвойственные (см. табл. 1.7). Менее тривиальным примером самодвойственной функции является функция h(x1,x2,x3)=x1x2 x1x3 x2x3. Составив двойственную к h функцию h* и преобразовав h*, легко убедиться, что это так. Для самодвойственной функции имеет место тождество:

f(x1,...,xn); (*)

иначе говоря, на наборах (1,...,n) и , которые называются противоположными, самодвойственная функция принимает противоположные значения.

Навесим отрицания на (*) слева и справа:

f(x1,...,xn); (**)

Отсюда следует, что самодвойственная функция полностью определяется своими значениями на первой половине строк, которых для n переменных будет 0.52n. Поэтому число самодвойственных функций, зависящих от переменных x1,...,xn, равно .

Докажем, что класс S замкнут. Поскольку он содержит тождественную функцию, достаточно показать, что функция Ф=f(f1,...,fm) является самодвойственной, если функции f, f1,..., fm самодвойственны. Последнее устанавливается непосредственно:

 Ф* (x1,...,xn) = Ф=f (f1,...,fm) = по (**)

=f (f1 (x1,...,xn),...,fm (x1,...,xn)) = f (f1,...,fm) = по (*)

= f(f1,...,fm) = Ф (x1,...,xn). 

Так как функции x и самодвойственные, а функции 0 и 1 самодвойственными не являются, то несамодвойственная функция одного переменного  это просто константа.

Лемма 1.1 (о несамодвойственной функции)

Если функция f(x1,...,xn) не принадлежит классу S, то из нее путем подстановки функций x и можно получить несамодвойственную функцию одного переменного, то есть константу.

 Так как f(x1,...,xn)  S, то найдется хотя бы один набор (1,...,n), такой, что выполняется равенство f=f (1,...,n). Используя этот набор, составим функцию одной переменной (x)=f. Вычислим значение этой функции в нуле:

(0) = f() = f() = f(1,...,n) = f() = (1).

Так как (0)= (1), то (x)  это константа. 

Пример. Пусть f(x1,x2) = x1 | x2 . Тогда (1,2)=(0,1); (x)=x0|x1=x | x = 1.

Класс монотонных функций

Для двух наборов =(1,...,n) и =(1,..., n), выполнено отношение предшествования , если 11, ..., nn и хотя бы в одной координате i выполнено условие i < i.

Пример. (0, 1, 0, 1) (1, 1, 0, 1), а наборы (0, 1) и (1, 0) не сравнимы.

Функция f(x1,...,xn) называется монотонной, если для любых двух наборов и таких, что , имеет место неравенство: f()f(). Например, функции 0, 1, x, x1x2, x1 x2 монотонные, а функции , x1 x2, x1x2 монотонными не являются.

Обозначим через M множество всех монотонных функций. Покажем, что класс М замкнут. Поскольку тождественная функция принадлежит множеству M, то достаточно показать, что функция Ф=f(f1,...,fm) является монотонной, если функции f, f1,..., fm монотонны.

 Пусть и  два набора длины n значений переменных x1,...,xn, причем . Так как функции f1,..., fm монотонны, то выполняются соотношения fi()fi() при 1  i m, , поэтому набор (f1(),..., fm()) предшествует набору (f1(),..., fm()) или они совпадают. В обоих случаях в силу монотонности функции f справедливо неравенство:

f (f1(),..., fm())  f (f1(),..., fm()),

откуда следует, что Ф ()  Ф (), т.е. Ф  функция монотонная. 

Наборы и называются соседними по i-й координате, если

=(1,..., i1, i, i+1,... n), = (1,..., i1, , i+1,... n).

Лемма 1.2 (о немонотонной функции).

Если функция f(x1,...,xn) не принадлежит классу M, то из нее путем подстановки констант 0 и 1 и функции x можно получить функцию .

 Так как f(x1,...,xn)  немонотонная функция, то найдутся такие два набора и , что и при этом f()>f(). Если наборы и не являются соседними, то отличается от в t>1 координатах. Так как предшествует , то такое различие означает, что эти t координат в наборе имеют значение 0, а в наборе  значение 1. Поставим между наборами и (t1) промежуточных наборов так, чтобы выполнялось отношение предшествования . Наборы, стоящие в этой цепочке рядом, являются соседними. (Например, если =(0, 0, 0), а =(1, 1, 1), то получится цепочка (0, 0, 0) (0, 0, 1) (0, 1, 1) (1, 1, 1)).

Так как f()>f(), то, по крайней мере, на одной из этих пар соседних наборов  обозначим их через и ()  окажется, что f()>f(). Для определенности будем считать, что данные наборы имеют соседство по i-й координате и, следовательно,

=(1,..., i1, 0, i+1,... n), = (1,..., i1, 1, i+1,... n).

Используя эти наборы, составим функцию одной переменной

(х) =f(1,..., i1, x, i+1,... n)

и вычислим ее значения в нуле и единице:

(0) = f(1,..., i1, 0, i+1,... n)= f()>f()=f(1,..., i1, 1, i+1,... n)= (1).

Итак, (0) > (1). Это возможно только в том случае, когда (0)=1, (1)=0, т.е. (х) =. 

Пример. Пусть f(x1,x2) = x1x2 . Тогда =(0,0), =(0,1); (x) = 0  x =x.

Класс L линейных функций содержит функции 0, 1, x, , x1x2 и не содержит функций x1x2 и x1 x2. Выше было показано, что этот класс также замкнут.

Лемма 1.3 (о нелинейной функции).

Если функция f(x1,...,xn) не принадлежит классу L, то из нее путем подстановки констант 0 и 1 и функций x и , а также, быть может, путем навешивания отрицания над f можно получить функцию x1x2.

 Составим полином Жегалкина для функции f(x1,...,xn).

Так как f(x1,...,xn)  нелинейная функция, в полиноме Жегалкина найдется слагаемое, содержащее не менее двух множителей. Без ограничения общности можно считать, что среди этих множителей присутствуют x1 и x2. Тогда соответствующий полином можно представить в виде:

x1x2g12(x3,...,xn)  x1g1(x3,...,xn)  x2g2(x3,...,xn)  g0(x3,...,xn),

причем в силу единственности полинома g12(x3,...,xn)0. Значит, найдется хотя бы один набор (3,...,n) такой, что g12(3,...,n)=1.

Введем обозначения a= g1(3,...,n), b= g2(3,...,n), c= g0(3,...,n)

и составим вспомогательную функцию 2 переменных: (x1,x2)=f(x1,x2,3,...,n)= x1x2 ax1 bx2 c.

Рассмотрим функцию

(x1,x2)= (x1b, x2a)  abc.

Преобразуем ее с учетом определения функции (x1,x2):

(x1,x2)= (x1b, x2a)  abc=(x1b)(x2a)  a(x1b)  b(x2a)  c ab c=

= = x1x2.

Таким образом, с помощью нелинейной функции удалось построить конъюнкцию (x1,x2)= x1&x2. 

Пример. Пусть f(x1, x 2, x3) = x1 x 2 x3 x1 x3 x 2 = x 2 x1 x3.

Тогда (x1,x2) = x1 x 2 x1 x 2. (x1,x2) = x1x2.

Таблица 1.10

f

T0

T1

S

M

L

0

+

+

+

1

+

+

+

x

+

+

+

+

+

+

+

x1&x2

+

+

+

x1 x2

+

+

+

Таблица 1.10 не содержит двух одинаковых столбцов. Это хорошо иллюстрирует тот факт, что замкнутые классы T0, T1, S, M и L попарно различны (знак “+” здесь показывает, что функция содержится в классе, а “” обозначает обратную ситуацию).