Полные системы функций. Теорема Поста о полной системе функций — различия между версиями
(→Доказательство) |
|||
| Строка 1: | Строка 1: | ||
| − | = | + | {{ |
| + | Теорема|statement= | ||
| + | Система булевых функций F является полной тогда и только тогда, когда она не содержится ни в одном из классов <tex>~S,M,L,T_0,T_1</tex>, т.е. когда в ней имеется хотя бы одна функция, не сохраняющая 0, хотя бы одна функция, не сохраняющая 1, хотя бы одна несамодвойственная функция, хотя бы одна немонотонная функция и хотя бы одна нелинейная функция. | ||
| − | + | |proof= | |
| − | |||
| − | = | ||
| − | |||
| − | |||
Заметим, что необходимость этого утверждения очевидна, так как если бы все функции из набора К входили в один из перечисленных классов, то и все суперпозиции, а значит, и замыкание набора входило бы в этот класс и класс К не мог быть полным. | Заметим, что необходимость этого утверждения очевидна, так как если бы все функции из набора К входили в один из перечисленных классов, то и все суперпозиции, а значит, и замыкание набора входило бы в этот класс и класс К не мог быть полным. | ||
| Строка 13: | Строка 11: | ||
Докажем достаточность этого утверждения. | Докажем достаточность этого утверждения. | ||
| − | Рассмотрим функцию, несохраняющую 0 - < | + | Рассмотрим функцию, несохраняющую 0 - <tex>f_0</tex>'''.''' <tex>f_0</tex>(0) = 1'''.''' <tex>f_0</tex>(1) может принимать два значения: |
| − | а) < | + | а) <tex>f_0</tex>(1) = 1, тогда <tex>f_0</tex>(x, x, x, ..., x) = <tex>~1</tex>'''.''' |
| − | б) < | + | б) <tex>f_0</tex>(1) = 0, тогда <tex>f_0</tex>(x, x, x, ..., x) = ¬x'''.''' |
| − | Возьмем функцию, несохраняющую 1 - < | + | Возьмем функцию, несохраняющую 1 - <tex>f_1</tex>. <tex>f_1</tex>(1) = 0. <tex>f_1</tex>(0) может принимать два значения: |
| − | а) < | + | а) <tex>f_1</tex>(0) = 0, тогда <tex>f_1</tex>(x, x, x, ..., x) = <tex>~0</tex>'''.''' |
| − | б) < | + | б) <tex>f_1</tex>(0) = 1, тогда <tex>f_1</tex>(x, x, x, ..., x) = ¬x'''.''' |
Возможны 4 варианта: | Возможны 4 варианта: | ||
| − | '''1''') Мы получили функцию '''НЕ'''. Используем несамодвойственную функцию < | + | '''1''') Мы получили функцию '''НЕ'''. Используем несамодвойственную функцию <tex>f_s</tex>. |
| − | По определению найдется такой вектор < | + | По определению найдется такой вектор <tex>x_0</tex>, что <tex>f_s</tex>(<tex>x_0</tex>) = <tex>f_s</tex>(¬<tex>x_0</tex>). <tex>x_0</tex> = (<tex>x_{01}, x_{02}, ..., x_{0k}</tex>)'''.''' |
| − | Возьмем < | + | Возьмем <tex>f_s</tex>(<tex>x^{x_{01}}, x^{x_{02}}, ..., x^{x_{0k}}</tex>), где <tex>x^{x_{0i}}</tex> = x, при <tex>x_{0i}</tex> = 1 и <tex>x^{x_{0i}}</tex> = ¬x, при <tex>x_{0i}</tex> = 0'''.''' |
| − | Нетрудно заметить, что < | + | Нетрудно заметить, что <tex>f_s</tex>(0) = <tex>f_s</tex>(1) => <tex>f_s</tex> = '''const.''' |
Таким образом мы получили одну из констант'''.''' | Таким образом мы получили одну из констант'''.''' | ||
| − | '''2''')Мы получили '''НЕ''' и < | + | '''2''')Мы получили '''НЕ''' и <tex>~0</tex>. '''¬'''<tex>~0</tex> = <tex>~1</tex>'''.''' |
| − | '''3''')Мы получили '''НЕ''' и < | + | '''3''')Мы получили '''НЕ''' и <tex>~1</tex>. '''¬'''<tex>~1</tex> = <tex>~0</tex>'''.''' |
| − | '''4''')Мы получили < | + | '''4''')Мы получили <tex>~1</tex> и <tex>~0</tex>'''.''' |
| − | Рассмотрим немонотонную функцию < | + | Рассмотрим немонотонную функцию <tex>f_m</tex>. Существуют такие <tex>x_1, x_2, ..., x_n</tex>, что <tex>f_m(x_1, x_2, ..., x_{i-1}, 0 , x_{i+1}, ..., x_n)</tex> = 1, <tex>f_m(x_1, x_2, ..., x_{i-1}, 1 , x_{i+1}, ..., x_n)</tex> = 0, зафиксируем все <tex>x_1, x_2, ..., x_n</tex>, тогда <tex>f_m(x_1, x_2, ..., x_{i-1}, x, x_{i+1}, ..., x_n)</tex> = ¬x'''.''' |
| − | В итоге мы имеем три функции: '''НЕ''', < | + | В итоге мы имеем три функции: '''НЕ''', <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>x_1</tex>^<tex>x_2</tex> ⊕ [<tex>x_1</tex>] ⊕ [<tex>x_2</tex>] ⊕ [<tex>~1</tex>], где в квадратных скобках указаны члены, которые могут и не присутствовать'''.''' |
Рассмотрим несколько вариантов: | Рассмотрим несколько вариантов: | ||
| − | 1) Присутствует член < | + | 1) Присутствует член <tex>~1</tex>. Возьмем отрицание от <tex>f_l</tex> и член <tex>~1</tex> уберется'''.''' |
| − | 2) Присутствуют 3 члена, без < | + | 2) Присутствуют 3 члена, без <tex>~1</tex>: <tex>f_l</tex> = <tex>x_1</tex>^<tex>x_2</tex> ⊕ <tex>x_1</tex> ⊕ <tex>x_2</tex>'''.''' Составив таблицу истинности для этой функции, нетрудно заметить, что она эквивалентна функции '''ИЛИ.''' |
| − | 3) Присутствуют 2 члена, без < | + | 3) Присутствуют 2 члена, без <tex>~1</tex>. Посторив две таблицы истинности, для двух различных вариантов, видим, что в обоих случаях функция истинна только в одной точке => СДНФ будет состоять только из одного члена, а если это так, то не составляет труда выразить '''И''', через '''НЕ''' и <tex>f_l</tex>. |
| − | 4) Присутствует 1 член. Выразим '''И''', через '''НЕ''' и < | + | 4) Присутствует 1 член. Выразим '''И''', через '''НЕ''' и <tex>f_l</tex>. |
| − | + | В итоге получаем функцию '''НЕ''', а также либо функцию '''И''', либо функцию '''ИЛИ''', но '''НЕ''' образует базис и с той и с другой функциями. Из того, что через функции '''F''' можно выразить базис, следует, что '''F''' - полная система функций, что и требовалось доказать'''.''' | |
| + | }} | ||
Версия 08:34, 20 октября 2010
| Теорема: |
Система булевых функций F является полной тогда и только тогда, когда она не содержится ни в одном из классов , т.е. когда в ней имеется хотя бы одна функция, не сохраняющая 0, хотя бы одна функция, не сохраняющая 1, хотя бы одна несамодвойственная функция, хотя бы одна немонотонная функция и хотя бы одна нелинейная функция. |
| Доказательство: |
|
Заметим, что необходимость этого утверждения очевидна, так как если бы все функции из набора К входили в один из перечисленных классов, то и все суперпозиции, а значит, и замыкание набора входило бы в этот класс и класс К не мог быть полным. Докажем достаточность этого утверждения. Рассмотрим функцию, несохраняющую 0 - . (0) = 1. (1) может принимать два значения: а) (1) = 1, тогда (x, x, x, ..., x) = . б) (1) = 0, тогда (x, x, x, ..., x) = ¬x. Возьмем функцию, несохраняющую 1 - . (1) = 0. (0) может принимать два значения: а) (0) = 0, тогда (x, x, x, ..., x) = . б) (0) = 1, тогда (x, x, x, ..., x) = ¬x. Возможны 4 варианта: 1) Мы получили функцию НЕ. Используем несамодвойственную функцию . По определению найдется такой вектор , что () = (¬). = (). Возьмем (), где = x, при = 1 и = ¬x, при = 0. Нетрудно заметить, что (0) = (1) => = const. Таким образом мы получили одну из констант. 2)Мы получили НЕ и . ¬ = . 3)Мы получили НЕ и . ¬ = . 4)Мы получили и . Рассмотрим немонотонную функцию . Существуют такие , что = 1, = 0, зафиксируем все , тогда = ¬x. В итоге мы имеем три функции: НЕ, , . Используем нелинейную функцию . Среди нелинейных членов , выберем тот, в котором минимальное количество элементов, все элементы, кроме двух, в этом члене, сделаем равными 1, оставшиеся 2 назавем и , а все элементы, не входящие в данный член, сделаем равными 0. Тогда = ^ ⊕ [] ⊕ [] ⊕ [], где в квадратных скобках указаны члены, которые могут и не присутствовать. Рассмотрим несколько вариантов: 1) Присутствует член . Возьмем отрицание от и член уберется. 2) Присутствуют 3 члена, без : = ^ ⊕ ⊕ . Составив таблицу истинности для этой функции, нетрудно заметить, что она эквивалентна функции ИЛИ. 3) Присутствуют 2 члена, без . Посторив две таблицы истинности, для двух различных вариантов, видим, что в обоих случаях функция истинна только в одной точке => СДНФ будет состоять только из одного члена, а если это так, то не составляет труда выразить И, через НЕ и . 4) Присутствует 1 член. Выразим И, через НЕ и . В итоге получаем функцию НЕ, а также либо функцию И, либо функцию ИЛИ, но НЕ образует базис и с той и с другой функциями. Из того, что через функции F можно выразить базис, следует, что F - полная система функций, что и требовалось доказать. |