Полные системы функций. Теорема Поста о полной системе функций — различия между версиями
м (→Формулировка и доказательство критерия) |
|||
Строка 1: | Строка 1: | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Полные системы функций == | == Полные системы функций == | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | '''Замкнутым множеством''' | + | '''Замкнутым множеством функций''' называется такое множество, что любая [[Определение булевой функции|булева функция]], [[Суперпозиции|выражаемая]] с помощью содержащихся в множестве функций, уже содержится в этом множестве.}} |
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | '''Замыканием''' множества функций называется | + | '''Замыканием''' множества функций называется такое подмножество всех булевых функций, что любую из этих функций можно выразить через функции исходного множества.}} |
{{Определение | {{Определение | ||
|id=def1 | |id=def1 | ||
|definition= | |definition= | ||
− | Множество <tex>A</tex> функций | + | Множество <tex>A</tex> булевых функций называется '''полной системой''', если замыкание этого множества совпадает с множеством всех функций.}} |
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | Полная система функций называется '''безызбыточной''', если она | + | Полная система функций называется '''безызбыточной''', если она перестает быть полной при исключении из неё любого элемента. |
}} | }} | ||
Строка 34: | Строка 27: | ||
Класс функций <tex>T_0</tex>. | Класс функций <tex>T_0</tex>. | ||
{{Определение | {{Определение | ||
− | |definition=Говорят, что функция '''сохраняет | + | |definition=Говорят, что функция '''сохраняет 0''', если <tex>f(0, 0, \dots, 0) = 0</tex>. |
}} | }} | ||
Строка 40: | Строка 33: | ||
Класс функций <tex>T_1</tex>. | Класс функций <tex>T_1</tex>. | ||
{{Определение | {{Определение | ||
− | |definition=Говорят, что функция '''сохраняет | + | |definition=Говорят, что функция '''сохраняет 1''', если <tex>f(1, 1, \dots, 1) = 1</tex>. |
}} | }} | ||
Строка 59: | Строка 52: | ||
:<tex>f(x_1, x_2, \dots, x_n) = a_0\oplus a_1\cdot x_1\oplus a_2\cdot x_2 \oplus\dots\oplus a_n\cdot x_n</tex>. | :<tex>f(x_1, x_2, \dots, x_n) = a_0\oplus a_1\cdot x_1\oplus a_2\cdot x_2 \oplus\dots\oplus a_n\cdot x_n</tex>. | ||
}} | }} | ||
− | + | Количество линейных функций от <tex>n</tex> переменных равно <tex>~2^{n+1}</tex>. | |
− | |||
− | |||
− | + | Функция является линейной тогда, и только тогда, когда в ее [[Полином_Жегалкина|полиноме Жегалкина]] присутствуют слагаемые, каждое из которых зависит не более чем от одной переменной. Построить полином Жегалкина можно с помощью [[Преобразование Мёбиуса для получения коэффициентов полинома Жегалкина|преобразования Мебиуса]]. | |
− | |||
− | == Формулировка и доказательство критерия == | + | == Формулировка и доказательство критерия Поста == |
{{ | {{ | ||
Теорема|statement= | Теорема|statement= | ||
− | + | Набор булевых функций K является полным тогда и только тогда, когда он не содержится полностью ни в одном из классов <tex> S,M,L,T_0,T_1 </tex>, т.е. когда в нем имеется хотя бы одна функция, не сохраняющая 0, хотя бы одна функция, не сохраняющая 1, хотя бы одна несамодвойственная функция, хотя бы одна немонотонная функция и хотя бы одна нелинейная функция. | |
|proof= | |proof= | ||
Строка 77: | Строка 67: | ||
Докажем достаточность этого утверждения. | Докажем достаточность этого утверждения. | ||
− | Рассмотрим функцию, | + | Рассмотрим функцию, не сохраняющую 0 {{---}} <tex>f_0</tex>. <tex>f_0(0) = 1</tex>. <tex>f_0(1)</tex> может принимать два значения: |
а) <tex>f_0(1) = 1</tex>, тогда <tex>f_0(x, x, x, \ldots, x) = 1</tex>. | а) <tex>f_0(1) = 1</tex>, тогда <tex>f_0(x, x, x, \ldots, x) = 1</tex>. | ||
Строка 83: | Строка 73: | ||
б) <tex>f_0(1) = 0</tex>, тогда <tex>f_0(x, x, x, \dots, x) = \neg x</tex>. | б) <tex>f_0(1) = 0</tex>, тогда <tex>f_0(x, x, x, \dots, x) = \neg x</tex>. | ||
− | Рассмотрим функцию, | + | Рассмотрим функцию, не сохраняющую 1 {{---}} <tex>f_1</tex>. <tex>f_1(1) = 0</tex>. <tex>f_1(0)</tex> может принимать два значения: |
а) <tex>f_1(0) = 0</tex>, тогда <tex>f_1(x, x, x, \ldots, x) = 0</tex>. | а) <tex>f_1(0) = 0</tex>, тогда <tex>f_1(x, x, x, \ldots, x) = 0</tex>. | ||
Строка 91: | Строка 81: | ||
Возможны 4 варианта: | Возможны 4 варианта: | ||
− | 1) Мы получили функцию | + | 1) Мы получили функцию НЕ. Используем несамодвойственную функцию <tex>f_s</tex>. |
По определению найдется такой вектор <tex>x_0</tex>, что <tex>f_s(x_0) = f_s(\lnot x_0)</tex>. <tex>x_0 = (x_{01}, x_{02}, ..., x_{0k})</tex>. | По определению найдется такой вектор <tex>x_0</tex>, что <tex>f_s(x_0) = f_s(\lnot x_0)</tex>. <tex>x_0 = (x_{01}, x_{02}, ..., x_{0k})</tex>. | ||
Строка 100: | Строка 90: | ||
Таким образом мы получили одну из констант. | Таким образом мы получили одну из констант. | ||
− | 2)Мы получили | + | 2)Мы получили НЕ и <tex>0</tex>. <tex>\lnot 0 = 1</tex>. |
− | 3)Мы получили | + | 3)Мы получили НЕ и <tex>1</tex>. <tex>\lnot 1 = 0</tex>. |
4)Мы получили <tex>1</tex> и <tex>0</tex>. | 4)Мы получили <tex>1</tex> и <tex>0</tex>. | ||
Строка 108: | Строка 98: | ||
Рассмотрим немонотонную функцию <tex>f_m</tex>. Существуют такие <tex>x_1, x_2, \ldots, x_n</tex>, что <tex>f_m(x_1, x_2, \ldots, x_{i-1}, 0 , x_{i+1}, \ldots, x_n) = 1</tex>, <tex>f_m(x_1, x_2, \ldots, x_{i-1}, 1 , x_{i+1}, \ldots, x_n) = 0</tex>, зафиксируем все <tex>x_1, x_2, \ldots, x_n</tex>, тогда <tex>f_m(x_1, x_2, \ldots, x_{i-1}, x, x_{i+1}, \ldots, x_n)= \lnot x</tex>. | Рассмотрим немонотонную функцию <tex>f_m</tex>. Существуют такие <tex>x_1, x_2, \ldots, x_n</tex>, что <tex>f_m(x_1, x_2, \ldots, x_{i-1}, 0 , x_{i+1}, \ldots, x_n) = 1</tex>, <tex>f_m(x_1, x_2, \ldots, x_{i-1}, 1 , x_{i+1}, \ldots, x_n) = 0</tex>, зафиксируем все <tex>x_1, x_2, \ldots, x_n</tex>, тогда <tex>f_m(x_1, x_2, \ldots, x_{i-1}, x, x_{i+1}, \ldots, x_n)= \lnot x</tex>. | ||
− | В итоге имеем три функции: | + | В итоге имеем три функции: НЕ, <tex>0</tex>, <tex>1</tex>. |
− | Используем нелинейную функцию <tex>f_l</tex>. Среди нелинейных членов <tex>f_l</tex>, выберем тот, в котором минимальное количество элементов, все элементы, кроме двух, в этом члене, сделаем равными 1, оставшиеся 2 назовем <tex>x_1</tex> и <tex>x_2</tex>, а все элементы, не входящие в данный член, сделаем равными 0 | + | Используем нелинейную функцию <tex>f_l</tex>. Среди нелинейных членов <tex>f_l</tex>, выберем тот, в котором минимальное количество элементов, все элементы, кроме двух, в этом члене, сделаем равными 1, оставшиеся 2 назовем <tex>x_1</tex> и <tex>x_2</tex>, а все элементы, не входящие в данный член, сделаем равными 0. Тогда <tex>g_l = x_1 \land x_2 [ \oplus x_1] [\oplus x_2][ \oplus ~1]</tex>, где в квадратных скобках указаны члены, которые могут и не присутствовать. |
Рассмотрим несколько вариантов: | Рассмотрим несколько вариантов: | ||
− | # Присутствует член <tex>~1</tex>. Возьмем отрицание от <tex> | + | # Присутствует член <tex>\oplus ~1</tex>. Возьмем отрицание от <tex>g_l</tex> и член <tex>\oplus ~1</tex> уберется. |
− | # Присутствуют 3 члена, без <tex>~1</tex>: <tex> | + | # Присутствуют 3 члена, без <tex>\oplus ~1</tex>: <tex>g_l= x_1 \land x_2 \oplus x_1 \oplus x_2</tex>. Составив таблицу истинности для этой функции, нетрудно заметить, что она эквивалентна функции ИЛИ. |
− | # Присутствуют 2 члена, без <tex>~1</tex>. Построив две таблицы истинности, для двух различных вариантов, видим, что в обоих случаях функция истинна только в одной точке, следовательно, СДНФ будет состоять только из одного члена, а если это так, то не составляет труда выразить | + | # Присутствуют 2 члена, без <tex>\oplus ~1</tex>. Построив две таблицы истинности, для двух различных вариантов, видим, что в обоих случаях функция истинна только в одной точке, следовательно, СДНФ будет состоять только из одного члена, а если это так, то не составляет труда выразить И, через НЕ и <tex>g_l</tex>. |
− | # Присутствует 1 член. Выразим | + | # Присутствует 1 член. Выразим И, через НЕ и <tex>g_l</tex>. |
− | В итоге получаем функцию | + | В итоге получаем функцию НЕ, а также либо функцию И, либо функцию ИЛИ. Поскольку функцию И можно выразить через ИЛИ и НЕ, а функцию ИЛИ через И и НЕ, то мы получили базис И, ИЛИ, НЕ. Любую булеву функцию, не равную тождественному нулю, можно представить в форме [[СДНФ]], т. е. с помощью данного базиса. Если же функция равна тождественному нулю, то ее можно представить в виде <tex>x \land \overline{x}</tex>. Значит, полученные функции образуют полную систему, т. к. с их помощью можно выразить любую булеву функцию. Из этого следует, что K {{---}} полная система функций, что и требовалось доказать. |
}} | }} | ||
Строка 125: | Строка 115: | ||
Согласно критерию Поста система булевых функций полна тогда и только тогда, когда она не содержится целиком ни в одном из классов <tex>T_0</tex>, <tex>T_1</tex>, <tex>S</tex>, <tex>M</tex>, <tex>L</tex>. | Согласно критерию Поста система булевых функций полна тогда и только тогда, когда она не содержится целиком ни в одном из классов <tex>T_0</tex>, <tex>T_1</tex>, <tex>S</tex>, <tex>M</tex>, <tex>L</tex>. | ||
− | В частности, если функция не входит ни в один из классов Поста, она сама по себе формирует полную систему. В качестве примера можно назвать штрих Шеффера или стрелку Пирса. | + | В частности, если функция не входит ни в один из классов Поста, она сама по себе формирует полную систему. В качестве примера можно назвать [[Определение_булевой_функции|штрих Шеффера]] или [[Определение_булевой_функции|стрелку Пирса]]. |
Широко известны такие полные системы булевых функций: | Широко известны такие полные системы булевых функций: |
Версия 01:11, 1 января 2012
Содержание
Полные системы функций
Определение: |
Замкнутым множеством функций называется такое множество, что любая булева функция, выражаемая с помощью содержащихся в множестве функций, уже содержится в этом множестве. |
Определение: |
Замыканием множества функций называется такое подмножество всех булевых функций, что любую из этих функций можно выразить через функции исходного множества. |
Определение: |
Множество | булевых функций называется полной системой, если замыкание этого множества совпадает с множеством всех функций.
Определение: |
Полная система функций называется безызбыточной, если она перестает быть полной при исключении из неё любого элемента. |
Американский математик Эмиль Пост сформулировал необходимое и достаточное условие полноты системы булевых функций. Для этого он ввел в рассмотрение следующие замкнутые классы булевых функций:
- Функции, сохраняющие константу и ;
- Самодвойственные функции ;
- Монотонные функции ;
- Линейные функции .
Замкнутые классы булевых функций
Класс функций
.Определение: |
Говорят, что функция сохраняет 0, если | .
Класс функций
.Определение: |
Говорят, что функция сохраняет 1, если | .
Класс самодвойственных функций
.Определение: |
Говорят, что функция самодвойственна, если | . Иными словами, функция называется самодвойственной, если на противоположных наборах она принимает противоположные значения.
Класс монотонных функций .
Определение: |
Говорят, что функция монотонна, если | .
Класс линейных функций .
Определение: |
Говорят, что функция линейна, если существуют такие
| , где , что для любых имеет место равенство:
Количество линейных функций от
переменных равно .Функция является линейной тогда, и только тогда, когда в ее полиноме Жегалкина присутствуют слагаемые, каждое из которых зависит не более чем от одной переменной. Построить полином Жегалкина можно с помощью преобразования Мебиуса.
Формулировка и доказательство критерия Поста
Теорема: |
Набор булевых функций K является полным тогда и только тогда, когда он не содержится полностью ни в одном из классов , т.е. когда в нем имеется хотя бы одна функция, не сохраняющая 0, хотя бы одна функция, не сохраняющая 1, хотя бы одна несамодвойственная функция, хотя бы одна немонотонная функция и хотя бы одна нелинейная функция. |
Доказательство: |
Заметим, что необходимость этого утверждения очевидна, так как если бы все функции из набора К входили в один из перечисленных классов, то и все суперпозиции, а значит, и замыкание набора входило бы в этот класс и класс К не мог быть полным. Докажем достаточность этого утверждения. Рассмотрим функцию, не сохраняющую 0 — . . может принимать два значения:а) , тогда .б) , тогда .Рассмотрим функцию, не сохраняющую 1 — . . может принимать два значения:а) , тогда .б) , тогда .Возможны 4 варианта: 1) Мы получили функцию НЕ. Используем несамодвойственную функцию .По определению найдется такой вектор , что . .Возьмем , где , при и , при .Нетрудно заметить, что . Таким образом мы получили одну из констант.2)Мы получили НЕ и . .3)Мы получили НЕ и . .4)Мы получили и .Рассмотрим немонотонную функцию . Существуют такие , что , , зафиксируем все , тогда .В итоге имеем три функции: НЕ, , .Используем нелинейную функцию . Среди нелинейных членов , выберем тот, в котором минимальное количество элементов, все элементы, кроме двух, в этом члене, сделаем равными 1, оставшиеся 2 назовем и , а все элементы, не входящие в данный член, сделаем равными 0. Тогда , где в квадратных скобках указаны члены, которые могут и не присутствовать.Рассмотрим несколько вариантов:
|
Примеры
Согласно критерию Поста система булевых функций полна тогда и только тогда, когда она не содержится целиком ни в одном из классов
, , , , .В частности, если функция не входит ни в один из классов Поста, она сама по себе формирует полную систему. В качестве примера можно назвать штрих Шеффера или стрелку Пирса.
Широко известны такие полные системы булевых функций:
- (конъюнкция, дизъюнкция, отрицание);
- (конъюнкция, сложение по модулю 2, константа 1).
Первая система используется, например, для представления функций в виде дизъюнктивных и конъюнктивных нормальных форм, вторая — для представления в виде полиномов Жегалкина.
Первая из упоминавшихся выше полных систем безызбыточной не является, поскольку согласно законам де Моргана либо дизъюнкцию, либо конъюнкцию можно исключить из системы и восстановить с помощью остальных двух функций. Вторая система является безызбыточной — все три её элемента необходимы для полноты. Максимально возможное число булевых функций в базисе — 4.
Иногда говорят о системе функций, полной в некотором замкнутом классе, и соответственно о базисе этого класса. Например, систему
можно назвать базисом класса линейных функций.