Полином Жегалкина — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(По таблице истинности)
 
(не показано 56 промежуточных версий 13 участников)
Строка 1: Строка 1:
'''Полином Жегалкина''' — полином с коэффициентами вида 0 и 1, где в качестве произведения берется конъюнкция, а в качестве сложения исключающее или. Полином был предложен в 1927 году И. И. Жегалкиным в качестве удобного средства для представляения функций булевой логики. Полином Жегалкина имеет следующий вид:
+
'''Полином Жегалкина''' (англ. ''Zhegalkin polynomial'') — полином с коэффициентами вида <tex>0</tex> и <tex>1</tex>, где в качестве произведения берётся конъюнкция, а в качестве сложения исключающее или. Полином был предложен в 1927 году И. И. Жегалкиным в качестве средства для представления [[Определение булевой функции|функций булевой логики]]. Полином Жегалкина имеет следующий вид:
  
 +
<tex>P = a_{000\ldots000} \oplus a_{100\ldots0} x_1 \oplus a_{010\ldots0}  x_2 \oplus \ldots \oplus a_{00\ldots01}  x_n \oplus a_{110\ldots0} x_1 x_2 \oplus \ldots \oplus a_{00\ldots011} x_{n-1} x_n \oplus \ldots \oplus a_{11\ldots1} x_1 x_2 \ldots x_n  </tex>
  
<math>P = a_{0} \oplus a_{1} x_{1} \oplus a_{2}  x_{2} \oplus ... \oplus a_{n}  x_{n} \oplus a_{n+1} x_{1} x_{2} \oplus ... \oplus a_{n + C _{n}^2}  x_{n-1} x_{n} \oplus ... \oplus a_{2^n-1} x_{1} x_{2} .. x_{n}  </math>
+
== Полнота ==
== Предпосылки ==
 
  
По теореме Поста, чтобы система булевых функций была полной, надо, чтобы в ней существовали:
+
По [[Теорема Поста о полной системе функций|теореме Поста]], чтобы система булевых функций была полной, надо, чтобы в ней существовали
  
1.Хотя бы одна функция, не сохраняющая 0.
+
#Хотя бы одна функция, не сохраняющая <tex>0</tex>;
2.Хотя бы одна функция, не сохраняющая 1.
+
#Хотя бы одна функция, не сохраняющая <tex>1</tex>;
3.Хотя бы одна нелинейная функция.
+
#Хотя бы одна нелинейная функция;
4.Хотя бы одна немонотонная функция.
+
#Хотя бы одна немонотонная функция;
5.Хотя бы одна несамодвойственная функция.
+
#Хотя бы одна несамодвойственная функция.
  
Этому требованию отвечает система функций <math>\bigl\langle \wedge, \oplus, 1 \bigr\rangle</math>. На её основе и строятся полиномы Жегалкина.
+
Исходя из этого, система функций <tex>\bigl\langle \wedge, \oplus, 1 \bigr\rangle</tex> является полной:
 +
 +
{| class="wikitable"  style="width:8cm" border="1"
 +
|-align="center" bgcolor=#EEEEFF
 +
!<tex>x_0</tex>||<tex>x_1</tex>||<tex>\ldots</tex>||<tex>x_n</tex>
 +
|<tex>1</tex>||<tex>\land</tex>||<tex>\oplus</tex>
 +
|-align="center"
 +
!<tex>0</tex>||<tex>0</tex>||<tex>\ldots</tex>||<tex>0</tex>
 +
|<tex>1</tex>||<tex>0</tex>||<tex>0</tex>
 +
|-align="center"
 +
!<tex>1</tex>||<tex>0</tex>||<tex>\ldots</tex>||<tex>0</tex>
 +
|<tex>1</tex>||<tex>0</tex>||<tex>1</tex>
 +
|-align="center"
 +
!<tex>\vdots</tex>||<tex>\vdots</tex>||<tex>\vdots</tex>||<tex>\vdots</tex>
 +
|<tex>\vdots</tex>||<tex>\vdots</tex>||<tex>\vdots</tex>
 +
|-align="center"
 +
!<tex>1</tex>||<tex>1</tex>||<tex>\ldots</tex>||<tex>1</tex>
 +
|<tex>1</tex>||<tex>1</tex>||<tex>0</tex>
 +
|-align="center"
 +
!colspan="4"|[[Полные_системы_функций._Теорема_Поста_о_полной_системе_функций#.D0.97.D0.B0.D0.BC.D0.BA.D0.BD.D1.83.D1.82.D1.8B.D0.B5_.D0.BA.D0.BB.D0.B0.D1.81.D1.81.D1.8B_.D0.B1.D1.83.D0.BB.D0.B5.D0.B2.D1.8B.D1.85_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9|Сохраняет 0]]
 +
|<tex>0</tex>||<tex>1</tex>||<tex>1</tex>
 +
|-align="center"
 +
!colspan="4"|[[Полные_системы_функций._Теорема_Поста_о_полной_системе_функций#.D0.97.D0.B0.D0.BC.D0.BA.D0.BD.D1.83.D1.82.D1.8B.D0.B5_.D0.BA.D0.BB.D0.B0.D1.81.D1.81.D1.8B_.D0.B1.D1.83.D0.BB.D0.B5.D0.B2.D1.8B.D1.85_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9|Сохраняет 1]]
 +
|<tex>1</tex>||<tex>1</tex>||<tex>0</tex>
 +
|-align="center"
 +
!colspan="4"|[[Полные_системы_функций._Теорема_Поста_о_полной_системе_функций#.D0.97.D0.B0.D0.BC.D0.BA.D0.BD.D1.83.D1.82.D1.8B.D0.B5_.D0.BA.D0.BB.D0.B0.D1.81.D1.81.D1.8B_.D0.B1.D1.83.D0.BB.D0.B5.D0.B2.D1.8B.D1.85_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9|Самодвойственная]]
 +
|<tex>0</tex>||<tex>0</tex>||<tex>0</tex>
 +
|-align="center"
 +
!colspan="4"|[[Полные_системы_функций._Теорема_Поста_о_полной_системе_функций#.D0.97.D0.B0.D0.BC.D0.BA.D0.BD.D1.83.D1.82.D1.8B.D0.B5_.D0.BA.D0.BB.D0.B0.D1.81.D1.81.D1.8B_.D0.B1.D1.83.D0.BB.D0.B5.D0.B2.D1.8B.D1.85_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9|Монотонная]]
 +
|<tex>1</tex>||<tex>1</tex>||<tex>0</tex>
 +
|-align="center"
 +
!colspan="4"|[[Полные_системы_функций._Теорема_Поста_о_полной_системе_функций#.D0.97.D0.B0.D0.BC.D0.BA.D0.BD.D1.83.D1.82.D1.8B.D0.B5_.D0.BA.D0.BB.D0.B0.D1.81.D1.81.D1.8B_.D0.B1.D1.83.D0.BB.D0.B5.D0.B2.D1.8B.D1.85_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B9|Линейная]]
 +
|<tex>1</tex>||<tex>0</tex>||<tex>1</tex>
 +
|}
  
== Cуществование и единственность представления (теорема Жегалкина) ==
+
На основе этой системы и строятся полиномы Жегалкина.
По теореме Жегалкина каждая булева функция  единственным образом представляется в виде полинома Жегалкина. Теорема доказывается следующим образом. Заметим, что различных булевых функций от <math>n</math> переменных <math>2^{2^n}</math> штук. При этом конъюнкций вида <math>x_{i_1}\ldots x_{i_k}</math> существует ровно <math>2^n</math>, так как из <math>n</math>  возможных сомножителей каждый или входит в конъюнкцию, или нет. В полиноме у каждой такой конъюнкции стоит 0 или 1, то есть существует <math>2^{2^n}</math> различных полиномов Жегалкина от n  переменных. Теперь достаточно лишь доказать, что различные полиномы реализуют различные функции. Предположим противное. Тогда приравняв два различных полинома и перенеся один из них в другую часть равенства, получим полином, тождественно равный нулю и имеющий ненулевые коэффициенты. Тогда рассмотрим слагаемое с единичным коэффициентом наименьшей длины, то есть с наименьшим числом переменных, входящих в него (любой один, если таких несколько). Подставив единицы на места этих переменных, и нули на места остальных, получим, что на этом наборе только одно это слагаемое принимает единичное значение, то есть нулевая функция на одном из наборов принимает значение 1. Противоречие. Значит, каждая булева функция реализуется полиномом Жегалкина единственным образом.
 
  
 +
== Существование и единственность представления (теорема Жегалкина) ==
 +
{{Теорема
 +
|author=Жегалкина
 +
|statement=
 +
Каждая булева функция единственным образом представляется в виде полинома Жегалкина.
 +
|proof=
 +
Заметим, что различных булевых функций от <tex>n</tex> переменных <tex>2^{2^n}</tex> штук. При этом конъюнкций вида <tex>x_{i_1} \ldots x_{i_k}</tex> существует ровно <tex>2^n</tex>, так как из <tex>n</tex>  возможных сомножителей каждый или входит в конъюнкцию, или нет. В полиноме у каждой такой конъюнкции стоит <tex>0</tex> или <tex>1</tex>, то есть существует <tex>2^{2^n}</tex> различных полиномов Жегалкина от <tex>n</tex> переменных.
 +
 +
Теперь достаточно лишь доказать, что различные полиномы реализуют различные функции. Предположим противное. Тогда приравняв два различных полинома и перенеся один из них в другую часть равенства, получим полином, тождественно равный нулю и имеющий ненулевые коэффициенты. Тогда рассмотрим слагаемое с единичным коэффициентом наименьшей длины, то есть с наименьшим числом переменных, входящих в него (любой один, если таких несколько). Подставив единицы на места этих переменных, и нули на места остальных, получим, что на этом наборе только одно это слагаемое принимает единичное значение, то есть нулевая функция на одном из наборов принимает значение 1. Противоречие. Значит, каждая булева функция реализуется полиномом Жегалкина единственным образом.
 +
}}
  
 
== Построение полинома Жегалкина ==
 
== Построение полинома Жегалкина ==
Строка 23: Строка 65:
 
Существует несколько способов построения полинома Жегалкина.  
 
Существует несколько способов построения полинома Жегалкина.  
  
Первый способ - по таблице истинности. Пусть для функции <math>f(x_{1},x_{2},..,x_{n})</math>  задана таблица истинности. Запишем сначала данную функцию в виде полинома Жегалкина с неопределенными коэффициентами. Затем по очереди подставляем всевозможные наборы переменных и находим коэффициенты. Легко видеть, что за каждую подстановку находим только один коэффициент.
+
=== По таблице истинности ===
 +
Пусть для функции <tex>f(x_1,x_2,\ldots,x_n)</tex>  задана таблица истинности. Запишем сначала данную функцию в виде полинома Жегалкина с неопределёнными коэффициентами. Затем по очереди подставляем всевозможные наборы в порядке увеличения количества единиц и находим коэффициенты с учётом того, что <tex> a \oplus 1 = \bar{a}</tex>, а <tex> a \oplus 0 = a</tex>. За каждую подстановку находим только один коэффициент.
 +
 
 +
'''Пример:'''
 +
Дана функция <tex>f(x_1,x_2,x_3,x_4)</tex> и её таблица истинности:
 +
 
 +
{| class="wikitable"  style="width:8cm" border="1"
 +
|-
 +
!class="dark" style="font-weight:normal"| <tex>x_1</tex>
 +
!class="dark" style="font-weight:normal"| <tex>x_2</tex>
 +
!class="dark" style="font-weight:normal"| <tex>x_3</tex>
 +
!class="dark" style="font-weight:normal"| <tex>x_4</tex>
 +
!class="dark" style="font-weight:normal"| <tex>f(x_1,x_2,x_3,x_4)</tex>
 +
|- align="center"
 +
||0||0||0||0||0
 +
|- align="center"
 +
||0||0||0||1||0
 +
|- align="center"
 +
||0||0||1||0||0
 +
|- align="center"
 +
||0||0||1||1||0
 +
|- align="center"
 +
||0||1||0||0||0
 +
|- align="center"
 +
||0||1||0||1||0
 +
|- align="center"
 +
||0||1||1||0||1
 +
|- align="center"
 +
||0||1||1||1||0
 +
|- align="center"
 +
||1||0||0||0||1
 +
|- align="center"
 +
||1||0||0||1||0
 +
|- align="center"
 +
||1||0||1||0||0
 +
|- align="center"
 +
||1||0||1||1||1
 +
|- align="center"
 +
||1||1||0||0||1
 +
|- align="center"
 +
||1||1||0||1||0
 +
|- align="center"
 +
||1||1||1||0||1
 +
|- align="center"
 +
||1||1||1||1||0
 +
|}
 +
Построим для неё полином Жегалкина:
 +
 
 +
<tex>f(x_1,x_2,x_3,x_4) = a_{0000} \oplus a_{1000} x_1 \oplus a_{0100} x_2 \oplus a_{0010} x_3 \oplus a_{0001} x_4 \oplus a_{1100} x_1 x_2 \oplus a_{1010} x_1 x_3 \oplus a_{1001} x_1 x_4 \oplus a_{0110} x_2 x_3 \oplus a_{0101} x_2 x_4 \oplus a_{0011} x_3 x_4 \oplus a_{1110} x_1 x_2 x_3 \oplus a_{1101} x_1 x_2 x_4 \oplus a_{1011} x_1 x_3 x_4 \oplus a_{0111} x_2 x_3 x_4  \oplus a_{1111} x_1 x_2 x_3 x_4</tex>
 +
 
 +
Так как <tex>f(0,0,0,0) = 0</tex>, то <tex>a_{0000} = 0</tex>.
 +
Далее подставляем все остальные наборы в порядке возрастания числа единиц, подставляя вновь полученные значения в следующие формулы:
 +
 
 +
<tex>f(1,0,0,0) = a_{0000} \oplus a_{1000} = 1,</tex> следовательно <tex>a_{1000} = 1</tex>
 +
 
 +
<tex>f(0,1,0,0) = a_{0000} \oplus a_{0100} = 0,</tex> следовательно <tex>a_{0100} = 0</tex>
 +
 
 +
<tex>f(0,0,1,0) = a_{0000} \oplus a_{0010} = 0,</tex> следовательно <tex> a_{0010} = 0</tex>
 +
 
 +
<tex>f(0,0,0,1) = a_{0000} \oplus a_{0001} = 0,</tex> следовательно <tex> a_{0001} = 0</tex>
 +
 
 +
<tex>f(1,1,0,0) = a_{0000} \oplus a_{1000} \oplus a_{0100} \oplus a_{1100} = 1,</tex> следовательно <tex> a_{1100} = 0</tex>
 +
 
 +
<tex>f(1,0,1,0) = a_{0000} \oplus a_{1000} \oplus a_{0010} \oplus a_{1010} = 0, </tex> следовательно <tex> a_{1010} = 1</tex>
 +
 
 +
<tex>f(1,0,0,1) = a_{0000} \oplus a_{1000} \oplus a_{0001} \oplus a_{1001} = 0, </tex> следовательно <tex> a_{1001} = 1</tex>
 +
 
 +
<tex>f(0,1,1,0) = a_{0000} \oplus a_{0100} \oplus a_{0010} \oplus a_{0110} = 1, </tex> следовательно <tex> a_{0110} = 1</tex>
 +
 
 +
<tex>f(0,1,0,1) = a_{0000} \oplus a_{0100} \oplus a_{0001} \oplus a_{0101} = 0, </tex> следовательно <tex> a_{0101} = 0</tex>
 +
 
 +
<tex>f(0,0,1,1) = a_{0000} \oplus a_{0010} \oplus a_{0001} \oplus a_{0011} = 0, </tex> следовательно <tex> a_{0011} = 0</tex>
 +
 
 +
<tex>f(1,1,1,0) = a_{0000} \oplus a_{1000} \oplus a_{0100} \oplus a_{0010} \oplus a_{1100} \oplus a_{1010} \oplus a_{0110} \oplus a_{1110} = 1, </tex> следовательно <tex> a_{1110} = 0</tex>
 +
 
 +
<tex>f(1,1,0,1) = a_{0000} \oplus a_{1000} \oplus a_{0100} \oplus a_{0001} \oplus a_{1100} \oplus a_{1001} \oplus a_{0101} \oplus a_{1101} = 0, </tex> следовательно <tex> a_{1101} = 0</tex>
 +
 
 +
<tex>f(1,0,1,1) = a_{0000} \oplus a_{1000} \oplus a_{0010} \oplus a_{0001} \oplus a_{1010} \oplus a_{1001} \oplus a_{0011} \oplus a_{1011} = 1, </tex> следовательно <tex> a_{1011} = 0</tex>
 +
 
 +
<tex>f(0,1,1,1) = a_{0000} \oplus a_{0100} \oplus a_{0010} \oplus a_{0001} \oplus a_{0110} \oplus a_{0101} \oplus a_{0011} \oplus a_{0111} = 0, </tex> следовательно <tex> a_{0111} = 1</tex>
 +
 
 +
<tex>f(1,1,1,1) = a_{0000} \oplus a_{1000} \oplus a_{0100} \oplus a_{0010} \oplus a_{0001} \oplus a_{1100} \oplus a_{1010} \oplus a_{1001} \oplus a_{0110} \oplus a_{0101} \oplus a_{0011} \oplus a_{1110} \oplus a_{1101} \oplus a_{1011} \oplus a_{0111} \oplus a_{1111} = 0, </tex> следовательно <tex> a_{1111} = 1</tex>
 +
 
 +
Таким образом, полином Жегалкина выглядит так:
 +
 
 +
<tex>f(x_1,x_2,x_3,x_4) = x_1 \oplus x_1 x_3 \oplus x_1 x_4 \oplus x_2 x_3 \oplus x_2 x_3 x_4 \oplus x_1 x_2 x_3 x_4</tex>
 +
 
 +
=== Преобразование [[Определение_булевой_функции#Дизъюнктивная нормальная форма (ДНФ)|дизъюнктивной нормальной формы]] ===
 +
Этот способ основан на том, что <tex> X \oplus 1 = \bar{X} </tex>. Если функция задана в виде ДНФ, то можно сначала убрать дизъюнкцию, используя правило де Моргана, а все отрицания заменить прибавлением единицы по модулю два, после чего раскрыть скобки по обычным правилам, при этом учитывая, что четное число одинаковых слагаемых равно нулю (так как <tex> X \oplus X = 0 </tex>), а нечетное число одинаковых слагаемых равно одному такому слагаемому. Либо же можно заменить дизъюнкцию по следующему правилу:
 +
<tex> A \lor B = AB \oplus A \oplus B </tex> &nbsp; <tex> (1) </tex>.
 +
 
 +
Если функция задана в СДНФ, то так как при любых значениях входных переменных в единицу обращается не более одного члена выражения, то достаточно просто заменить все дизъюнкции исключающим ИЛИ.
 +
 
 +
'''Пример:'''
 +
Дана функция в ДНФ <tex> f(x_1,x_2,x_3,x_4) = (x_1 \land x_2 \land \neg x_3 \land x_4) \lor (\neg x_1 \land \neg x_4) \lor (x_1 \land x_2) \lor x_2 </tex>, построим полином Жегалкина.
 +
 
 +
Запишем функцию так:
 +
 
 +
<tex>f(x_1,x_2,x_3,x_4) = x_1 x_2 \neg x_3 x_4 + \neg x_1 \neg x_4 + x_1 x_2 + x_2</tex>;
 +
 
 +
Сгруппируем слагаемые и воспользуемся преобразованием (1):
 +
 
 +
<tex>f(x_1,x_2,x_3,x_4) = (x_1 x_2 \neg x_3  x_4 \oplus \neg x_1 \neg x_4 \oplus x_1 x_2 \neg x_3 x_4 \neg x_1 \neg x_4) + (x_1 x_2 \oplus x_2 \oplus \oplus  x_1 x_2 x_2)</tex>
 +
 
 +
Воспользуемся свойствами конъюнкции <tex>A \land A = A</tex> и <tex>\neg A \land A = 0</tex>, а также тем, что <tex>A \oplus A = 0</tex>, и упростим выражение:
 +
 
 +
<tex>f(x_1,x_2,x_3,x_4) = (x_1 x_2 \neg x_3 x_4 \oplus \neg x_1 \neg x_4) + x_2</tex>
 +
 
 +
Ещё раз воспользуемся преобразованием (1):
 +
 
 +
<tex>f(x_1,x_2,x_3,x_4) = x_1 x_2 \neg x_3 x_4 \oplus \neg x_1 \neg x_4 \oplus x_2 \oplus (x_1 x_2 \neg x_3 x_4 \oplus \neg x_1 \neg x_4) x_2</tex>
 +
 
 +
Раскроем скобку по алгебраическим правилам:
 +
 
 +
<tex>f(x_1,x_2,x_3,x_4) = x_1 x_2 \neg x_3 x_4 \oplus \neg x_1 \neg x_4 \oplus x_2 \oplus x_1 x_2 x_2 \neg x_3 x_4 \oplus \neg x_1 x_2 \neg x_4</tex>
 +
 
 +
Снова воспользуемся свойствами конъюнкции и исключающего ИЛИ:
 +
 
 +
<tex>f(x_1,x_2,x_3,x_4) = \neg x_1 \neg x_4 \oplus x_2 \oplus \neg x_1 x_2 \neg x_4</tex>
 +
 
 +
Заменим отрицание на прибавление <tex>1</tex>:
 +
 
 +
<tex>f(x_1,x_2,x_3,x_4) = (x_1 \oplus 1) (x_4 \oplus 1) \oplus x_2 \oplus (x_1 \oplus 1) x_2 (x_4 \oplus 1)</tex>
 +
 
 +
Раскроем скобки:
 +
 
 +
<tex>f(x_1,x_2,x_3,x_4) = x_1 x_4 \oplus x_1 \oplus x_4 \oplus 1 \oplus x_2 \oplus x_1 x_2 x_4 \oplus x_1 x_2 \oplus x_2 x_4 \oplus x_2</tex>
 +
 
 +
Выкинем парные слагаемые и получим окончательную формулу:
 +
 
 +
<tex>f(x_1,x_2,x_3,x_4) = x_1 x_2 x_4 \oplus x_1 x_2 \oplus x_1 x_4 \oplus x_2 x_4 \oplus x_1 \oplus x_4 \oplus 1</tex>
 +
 
 +
=== Метод треугольника === <!-- Да, копипаста с википедии, и что? Метод же прост и удобен -->
 +
Метод треугольника позволяет преобразовать таблицу истинности в полином Жегалкина путём построения вспомогательной треугольной таблицы в соответствии со следующими правилами:
 +
# Строится полная таблица истинности, в которой строки идут в порядке возрастания двоичных кодов от <tex>000\ldots00</tex> до <tex>111\ldots11</tex>.
 +
# Строится вспомогательная треугольная таблица, в которой первый столбец совпадает со столбцом значений функции в таблице истинности.
 +
# Ячейка в каждом последующем столбце получается путём сложения по модулю 2 двух ячеек предыдущего столбца — стоящей в той же строке и строкой ниже.
 +
# Столбцы вспомогательной таблицы нумеруются двоичными кодами в том же порядке, что и строки таблицы истинности.
 +
# Каждому двоичному коду ставится в соответствие один из членов полинома Жегалкина в зависимости от позиций кода, в которых стоят единицы. Например, ячейке <tex>111</tex> соответствует член <tex>ABC</tex>, ячейке <tex>101</tex> — член <tex>AC</tex>, ячейке <tex>010</tex> — член <tex>B</tex>, ячейке <tex>000</tex> — член <tex>1</tex> и т.д.
 +
# Если в верхней строке какого-либо столбца стоит единица, то соответствующий член присутствует в полиноме Жегалкина.
 +
 
 +
Фактически, этот метод является модификацией метода построения по таблице истинности, описанного выше. По сравнению с ним он удобнее тем, что расчёты занимают мало места и в них сложнее ошибиться, но метод треугольника требует бо́льшего количества операций.
 +
 
 +
Пример преобразования таблицы истинности в полином Жегалкина для функции трёх переменных <tex>P(A,B,C)</tex> показан на рисунке.
 +
 
 +
[[Файл:Преобразование таблицы истинности в полином Жегалкина методом треугольника.gif]]
 +
 
 +
Чтобы получить формулу, по которой рассчитывается какой-либо коэффициент, нужно из клетки, в которой он записан, пройтись всеми возможными путями влево, до столбца <tex>''P''</tex> таблицы истинности, делая ходы влево и влево-вниз, записать значения в конечных ячейках и сложить их все между собой по модулю 2.
 +
 
 +
Таким образом, в первом столбце сверху записан коэффициент <tex> a_0 = P(0,0,0) </tex>,
 +
 
 +
во втором — <tex> a_1 = P(0,0,0) \oplus P(0,0,1) </tex>,
 +
 
 +
в третьем — <tex> a_2 = P(0,0,0) \oplus P(0,0,1) \oplus P(0,0,1) \oplus P(0,1,0) = P(0,0,0) \oplus P(0,1,0) </tex>,
 +
 
 +
в четвёртом —
 +
 
 +
<tex> a_3 = P(0,0,0) \oplus P(0,0,1) \oplus P(0,0,1) \oplus P(0,0,1)  \oplus P(0,1,0) \oplus P(0,1,0) \oplus P(0,1,0) \oplus P(0,1,1) = P(0,0,0) \oplus P(0,1,0) \oplus P(0,0,1) \oplus P(0,1,1), </tex>
 +
 
 +
и так далее, то есть при построении вспомогательной таблицы коэффициенты полинома просчитываются автоматически.
 +
 
 +
=== Преобразование Мёбиуса ===
 +
Пусть задана [[Определение булевой функции|булева функция]] <tex>f: B^n \rightarrow B, \;\; B=\{ 0; 1 \}</tex>.
 +
Любая булева функция представима в виде полинома Жегалкина, притом единственным образом.
 +
 
 +
Пусть <tex> i = (i_1, i_2, \ldots i_n), \;\; i_k \in \{0 ; 1\}</tex>, и введем обозначение <tex> x ^{i_k} \sim \left\{\begin{matrix} x, \;\; i_k=1
 +
\\ 1, \;\; i_k=0
 +
\end{matrix}\right. </tex>
 +
 
 +
Тогда полином Жегалкина можно записать как:
 +
<tex> f(x) = \bigoplus\limits_i \alpha_i \cdot x_1^{i_1} \cdot x_2^{i_2} \cdot</tex> <tex>\ldots</tex> <tex>\cdot x_n^{i_n}</tex>, где  <tex>\alpha_i \in  \{ 0; 1 \}</tex>.
 +
 
 +
Множество коэффициентов <tex>\{\alpha _i\}</tex> можно рассматривать как функцию <tex>\alpha</tex>, заданной на множестве индексов <tex> i = (i_1, i_2, \ldots i_n)</tex>, то есть <tex>\alpha: i \mapsto \alpha_i</tex>.
 +
 
 +
Очевидно, функцию <tex> f </tex> можно записать и следующим образом: <tex> f(x) = \bigoplus \limits_i \alpha_i \cdot [x_1 , \; </tex> если <tex> \;\; i_1] \cdot [x_2 , \; </tex> если <tex> \;\; i_2] \cdot</tex> <tex>\ldots</tex> <tex>\cdot [x_n , \; </tex> если <tex> \;\; i_n]</tex>.
 +
 
 +
Тут запись <tex>[x_k , \; </tex> если <tex> \; i_k]</tex> означает, что элелемент <tex> x_k </tex> присутствует в соответствующем члене полинома только если <tex> i_k = 1 </tex>.
 +
Тогда если для какого-то <tex>x</tex>, <tex>i \succ x*</tex> ,то в слагаемом будет существовать хотя бы один множитель, равный нулю, и такое слагаемое на сумму не повлияет.
 +
Отсюда ясно, что <tex> f(x) = \bigoplus \limits_{i \preceq x} \alpha_i </tex>&nbsp; <tex> (2) </tex>
 +
Найдем отображение <tex> f \mapsto \alpha</tex> (То есть такое, которое по заданной функции вычисляет значения всех коэффициентов).
 +
 
 +
<tex>*</tex> <tex>i \succ x</tex> обозначает, что <tex>x</tex> "меньше" <tex>i</tex> как последовательность бит
 +
 
 +
{{Теорема
 +
|statement=Пусть задана функция <tex> f </tex>. Тогда функцию <tex> \alpha_x </tex> можно найти по формуле: <tex>\alpha_x = \bigoplus \limits_{j\preceq  x} f(j)</tex> &nbsp; &nbsp; <tex> (3) </tex>.
 +
||proof=Докажем при помощи индукции по количеству единиц в векторе <tex> x </tex> ( иначе говоря, по сумме <tex>x_1+x_2+</tex><tex>\ldots</tex><tex>+x_n</tex> ) и для удобства обозначим это количество единиц(сумму) <tex> wt(x) </tex>.
 +
 
 +
'''1)''' База: если <tex> x = 0 </tex>, то, очевидно <tex> f(0) = \alpha_0 </tex>
 +
 
 +
'''2)''' Пускай теорема справедлива для всех сумм <tex>wt(x) < k</tex>. Покажем, что в таком случае она верна и для <tex>wt(x) = k</tex>. По <tex> (2) </tex>, а далее по предположению индукции видим: <tex> f(x) = \bigoplus \limits_{i \preceq x} \alpha_i = \left [ \bigoplus \limits_{i \prec x} \bigoplus \limits_{j\preceq  i} f(j) \right ] \oplus \alpha_x</tex> .
 +
 
 +
Рассмотрим сумму <tex> \left [ \bigoplus \limits_{i \prec x} \bigoplus \limits_{j\preceq  i} f(j) \right ]  </tex>. Каждый элемент <tex> f(j) </tex> содержится в ней, только если <tex> j \prec x </tex>, и для фиксированных <tex> j</tex> и <tex> x </tex> элемент <tex> f(j)</tex> встречается ровно столько раз, сколько существует <tex> i </tex> , таких, что <tex> j \preceq i \prec x</tex>. Несложно увидеть, что таких <tex> i </tex> существует ровно <tex> 2^{wt(x)-wt(j)}-1 </tex>, то есть нечетное количество раз. Тогда <tex> \left [ \bigoplus \limits_{i \prec x} \bigoplus \limits_{j\preceq  i} f(j) \right ] =  \bigoplus \limits_{j\prec  x} f(j) </tex>.
 +
Но тогда <tex> f(x) = \left [ \bigoplus \limits_{j\prec  x} f(j) \right ] \oplus \alpha_x \Leftrightarrow f(x) \oplus \bigoplus \limits_{j\prec  x} f(j) = \alpha_x \Leftrightarrow \alpha_x = \bigoplus \limits_{j\preceq  x} f(j)</tex>.
 +
То есть при <tex>wt(x) = k</tex> формула также выполняется, значит при любых <tex> x </tex>  выполняется <tex>\alpha_x = \bigoplus \limits_{j\preceq  x} f(j)</tex>.
 +
 
 +
}}
 +
Отображение <tex> f \rightarrow \alpha</tex> также называется преобразованием Мёбиуса.
 +
 
 +
Видно, что <tex> (2) </tex> и <tex> (3) </tex> — это одно и тоже преобразование. Значит, если применить преобразование Мёбиуса к функции, а затем вновь применить то же преобразование к получившейся функции, тогда вновь получим исходную функцию <tex>f</tex>. То есть преобразование Мёбиуса обратно самому себе, иными словами, является инволюцией.
 +
 
 +
== См. также ==
 +
* [[Определение_булевой_функции|Булевы функции]]
 +
* [[Полные_системы_функций._Теорема_Поста_о_полной_системе_функций|Полные системы функций, теорема Поста]]
 +
* [[СДНФ|ДНФ]]
 +
* [[СКНФ|КНФ]]
  
 +
== Источники информации ==
  
Второй способ - преобразование Дизъюнктивной нормальной формы. Этот способ основан на том, что <math> X \oplus 1 = \bar{X} </math>. Если функция задана в виде ДНФ, то сначала убираем дизъюнкцию, используя при этом правило Де-Моргана, а все отрицания заменяем прибавлением единицы. После этого раскрываем скобки по обычным правилам, при этом учитываем, что четное число одинаковых слагаемых равно нулю (так как <math> X \oplus X = 0 </math>), а нечетное число одинаковых слагаемых равно одному такому слагаемому.
+
* [http://www.stat-mat.com/?p=330 Cтатистика | Математика НГУ]
 +
* [http://ru.wikipedia.org/wiki/Полином_Жегалкина Википедия {{---}} Полином Жегалкина]
 +
* [http://dvo.sut.ru/libr/himath/w163rabk/index.htm Е.Л Рабкин, Ю.Б. Фарфоровская, дискретная математика]
 +
* Логачёв О.А, Сальников А.А., Ященко В.В. Булевы фунции в теории кодирования и криптологии — МЦНМО, 2004. - 470с. — ISBN 5-94057-117-4.
  
Третий способ - можно использовать [[Преобразование Мёбиуса для получения коэффициентов полинома Жегалкина]].
+
[[Категория: Дискретная математика и алгоритмы]]
 +
[[Категория: Булевы функции]]

Текущая версия на 17:27, 7 января 2019

Полином Жегалкина (англ. Zhegalkin polynomial) — полином с коэффициентами вида [math]0[/math] и [math]1[/math], где в качестве произведения берётся конъюнкция, а в качестве сложения исключающее или. Полином был предложен в 1927 году И. И. Жегалкиным в качестве средства для представления функций булевой логики. Полином Жегалкина имеет следующий вид:

[math]P = a_{000\ldots000} \oplus a_{100\ldots0} x_1 \oplus a_{010\ldots0} x_2 \oplus \ldots \oplus a_{00\ldots01} x_n \oplus a_{110\ldots0} x_1 x_2 \oplus \ldots \oplus a_{00\ldots011} x_{n-1} x_n \oplus \ldots \oplus a_{11\ldots1} x_1 x_2 \ldots x_n [/math]

Полнота[править]

По теореме Поста, чтобы система булевых функций была полной, надо, чтобы в ней существовали

  1. Хотя бы одна функция, не сохраняющая [math]0[/math];
  2. Хотя бы одна функция, не сохраняющая [math]1[/math];
  3. Хотя бы одна нелинейная функция;
  4. Хотя бы одна немонотонная функция;
  5. Хотя бы одна несамодвойственная функция.

Исходя из этого, система функций [math]\bigl\langle \wedge, \oplus, 1 \bigr\rangle[/math] является полной:

[math]x_0[/math] [math]x_1[/math] [math]\ldots[/math] [math]x_n[/math] [math]1[/math] [math]\land[/math] [math]\oplus[/math]
[math]0[/math] [math]0[/math] [math]\ldots[/math] [math]0[/math] [math]1[/math] [math]0[/math] [math]0[/math]
[math]1[/math] [math]0[/math] [math]\ldots[/math] [math]0[/math] [math]1[/math] [math]0[/math] [math]1[/math]
[math]\vdots[/math] [math]\vdots[/math] [math]\vdots[/math] [math]\vdots[/math] [math]\vdots[/math] [math]\vdots[/math] [math]\vdots[/math]
[math]1[/math] [math]1[/math] [math]\ldots[/math] [math]1[/math] [math]1[/math] [math]1[/math] [math]0[/math]
Сохраняет 0 [math]0[/math] [math]1[/math] [math]1[/math]
Сохраняет 1 [math]1[/math] [math]1[/math] [math]0[/math]
Самодвойственная [math]0[/math] [math]0[/math] [math]0[/math]
Монотонная [math]1[/math] [math]1[/math] [math]0[/math]
Линейная [math]1[/math] [math]0[/math] [math]1[/math]

На основе этой системы и строятся полиномы Жегалкина.

Существование и единственность представления (теорема Жегалкина)[править]

Теорема (Жегалкина):
Каждая булева функция единственным образом представляется в виде полинома Жегалкина.
Доказательство:
[math]\triangleright[/math]

Заметим, что различных булевых функций от [math]n[/math] переменных [math]2^{2^n}[/math] штук. При этом конъюнкций вида [math]x_{i_1} \ldots x_{i_k}[/math] существует ровно [math]2^n[/math], так как из [math]n[/math] возможных сомножителей каждый или входит в конъюнкцию, или нет. В полиноме у каждой такой конъюнкции стоит [math]0[/math] или [math]1[/math], то есть существует [math]2^{2^n}[/math] различных полиномов Жегалкина от [math]n[/math] переменных.

Теперь достаточно лишь доказать, что различные полиномы реализуют различные функции. Предположим противное. Тогда приравняв два различных полинома и перенеся один из них в другую часть равенства, получим полином, тождественно равный нулю и имеющий ненулевые коэффициенты. Тогда рассмотрим слагаемое с единичным коэффициентом наименьшей длины, то есть с наименьшим числом переменных, входящих в него (любой один, если таких несколько). Подставив единицы на места этих переменных, и нули на места остальных, получим, что на этом наборе только одно это слагаемое принимает единичное значение, то есть нулевая функция на одном из наборов принимает значение 1. Противоречие. Значит, каждая булева функция реализуется полиномом Жегалкина единственным образом.
[math]\triangleleft[/math]

Построение полинома Жегалкина[править]

Существует несколько способов построения полинома Жегалкина.

По таблице истинности[править]

Пусть для функции [math]f(x_1,x_2,\ldots,x_n)[/math] задана таблица истинности. Запишем сначала данную функцию в виде полинома Жегалкина с неопределёнными коэффициентами. Затем по очереди подставляем всевозможные наборы в порядке увеличения количества единиц и находим коэффициенты с учётом того, что [math] a \oplus 1 = \bar{a}[/math], а [math] a \oplus 0 = a[/math]. За каждую подстановку находим только один коэффициент.

Пример: Дана функция [math]f(x_1,x_2,x_3,x_4)[/math] и её таблица истинности:

[math]x_1[/math] [math]x_2[/math] [math]x_3[/math] [math]x_4[/math] [math]f(x_1,x_2,x_3,x_4)[/math]
0 0 0 0 0
0 0 0 1 0
0 0 1 0 0
0 0 1 1 0
0 1 0 0 0
0 1 0 1 0
0 1 1 0 1
0 1 1 1 0
1 0 0 0 1
1 0 0 1 0
1 0 1 0 0
1 0 1 1 1
1 1 0 0 1
1 1 0 1 0
1 1 1 0 1
1 1 1 1 0

Построим для неё полином Жегалкина:

[math]f(x_1,x_2,x_3,x_4) = a_{0000} \oplus a_{1000} x_1 \oplus a_{0100} x_2 \oplus a_{0010} x_3 \oplus a_{0001} x_4 \oplus a_{1100} x_1 x_2 \oplus a_{1010} x_1 x_3 \oplus a_{1001} x_1 x_4 \oplus a_{0110} x_2 x_3 \oplus a_{0101} x_2 x_4 \oplus a_{0011} x_3 x_4 \oplus a_{1110} x_1 x_2 x_3 \oplus a_{1101} x_1 x_2 x_4 \oplus a_{1011} x_1 x_3 x_4 \oplus a_{0111} x_2 x_3 x_4 \oplus a_{1111} x_1 x_2 x_3 x_4[/math]

Так как [math]f(0,0,0,0) = 0[/math], то [math]a_{0000} = 0[/math]. Далее подставляем все остальные наборы в порядке возрастания числа единиц, подставляя вновь полученные значения в следующие формулы:

[math]f(1,0,0,0) = a_{0000} \oplus a_{1000} = 1,[/math] следовательно [math]a_{1000} = 1[/math]

[math]f(0,1,0,0) = a_{0000} \oplus a_{0100} = 0,[/math] следовательно [math]a_{0100} = 0[/math]

[math]f(0,0,1,0) = a_{0000} \oplus a_{0010} = 0,[/math] следовательно [math] a_{0010} = 0[/math]

[math]f(0,0,0,1) = a_{0000} \oplus a_{0001} = 0,[/math] следовательно [math] a_{0001} = 0[/math]

[math]f(1,1,0,0) = a_{0000} \oplus a_{1000} \oplus a_{0100} \oplus a_{1100} = 1,[/math] следовательно [math] a_{1100} = 0[/math]

[math]f(1,0,1,0) = a_{0000} \oplus a_{1000} \oplus a_{0010} \oplus a_{1010} = 0, [/math] следовательно [math] a_{1010} = 1[/math]

[math]f(1,0,0,1) = a_{0000} \oplus a_{1000} \oplus a_{0001} \oplus a_{1001} = 0, [/math] следовательно [math] a_{1001} = 1[/math]

[math]f(0,1,1,0) = a_{0000} \oplus a_{0100} \oplus a_{0010} \oplus a_{0110} = 1, [/math] следовательно [math] a_{0110} = 1[/math]

[math]f(0,1,0,1) = a_{0000} \oplus a_{0100} \oplus a_{0001} \oplus a_{0101} = 0, [/math] следовательно [math] a_{0101} = 0[/math]

[math]f(0,0,1,1) = a_{0000} \oplus a_{0010} \oplus a_{0001} \oplus a_{0011} = 0, [/math] следовательно [math] a_{0011} = 0[/math]

[math]f(1,1,1,0) = a_{0000} \oplus a_{1000} \oplus a_{0100} \oplus a_{0010} \oplus a_{1100} \oplus a_{1010} \oplus a_{0110} \oplus a_{1110} = 1, [/math] следовательно [math] a_{1110} = 0[/math]

[math]f(1,1,0,1) = a_{0000} \oplus a_{1000} \oplus a_{0100} \oplus a_{0001} \oplus a_{1100} \oplus a_{1001} \oplus a_{0101} \oplus a_{1101} = 0, [/math] следовательно [math] a_{1101} = 0[/math]

[math]f(1,0,1,1) = a_{0000} \oplus a_{1000} \oplus a_{0010} \oplus a_{0001} \oplus a_{1010} \oplus a_{1001} \oplus a_{0011} \oplus a_{1011} = 1, [/math] следовательно [math] a_{1011} = 0[/math]

[math]f(0,1,1,1) = a_{0000} \oplus a_{0100} \oplus a_{0010} \oplus a_{0001} \oplus a_{0110} \oplus a_{0101} \oplus a_{0011} \oplus a_{0111} = 0, [/math] следовательно [math] a_{0111} = 1[/math]

[math]f(1,1,1,1) = a_{0000} \oplus a_{1000} \oplus a_{0100} \oplus a_{0010} \oplus a_{0001} \oplus a_{1100} \oplus a_{1010} \oplus a_{1001} \oplus a_{0110} \oplus a_{0101} \oplus a_{0011} \oplus a_{1110} \oplus a_{1101} \oplus a_{1011} \oplus a_{0111} \oplus a_{1111} = 0, [/math] следовательно [math] a_{1111} = 1[/math]

Таким образом, полином Жегалкина выглядит так:

[math]f(x_1,x_2,x_3,x_4) = x_1 \oplus x_1 x_3 \oplus x_1 x_4 \oplus x_2 x_3 \oplus x_2 x_3 x_4 \oplus x_1 x_2 x_3 x_4[/math]

Преобразование дизъюнктивной нормальной формы[править]

Этот способ основан на том, что [math] X \oplus 1 = \bar{X} [/math]. Если функция задана в виде ДНФ, то можно сначала убрать дизъюнкцию, используя правило де Моргана, а все отрицания заменить прибавлением единицы по модулю два, после чего раскрыть скобки по обычным правилам, при этом учитывая, что четное число одинаковых слагаемых равно нулю (так как [math] X \oplus X = 0 [/math]), а нечетное число одинаковых слагаемых равно одному такому слагаемому. Либо же можно заменить дизъюнкцию по следующему правилу: [math] A \lor B = AB \oplus A \oplus B [/math]   [math] (1) [/math].

Если функция задана в СДНФ, то так как при любых значениях входных переменных в единицу обращается не более одного члена выражения, то достаточно просто заменить все дизъюнкции исключающим ИЛИ.

Пример: Дана функция в ДНФ [math] f(x_1,x_2,x_3,x_4) = (x_1 \land x_2 \land \neg x_3 \land x_4) \lor (\neg x_1 \land \neg x_4) \lor (x_1 \land x_2) \lor x_2 [/math], построим полином Жегалкина.

Запишем функцию так:

[math]f(x_1,x_2,x_3,x_4) = x_1 x_2 \neg x_3 x_4 + \neg x_1 \neg x_4 + x_1 x_2 + x_2[/math];

Сгруппируем слагаемые и воспользуемся преобразованием (1):

[math]f(x_1,x_2,x_3,x_4) = (x_1 x_2 \neg x_3 x_4 \oplus \neg x_1 \neg x_4 \oplus x_1 x_2 \neg x_3 x_4 \neg x_1 \neg x_4) + (x_1 x_2 \oplus x_2 \oplus \oplus x_1 x_2 x_2)[/math]

Воспользуемся свойствами конъюнкции [math]A \land A = A[/math] и [math]\neg A \land A = 0[/math], а также тем, что [math]A \oplus A = 0[/math], и упростим выражение:

[math]f(x_1,x_2,x_3,x_4) = (x_1 x_2 \neg x_3 x_4 \oplus \neg x_1 \neg x_4) + x_2[/math]

Ещё раз воспользуемся преобразованием (1):

[math]f(x_1,x_2,x_3,x_4) = x_1 x_2 \neg x_3 x_4 \oplus \neg x_1 \neg x_4 \oplus x_2 \oplus (x_1 x_2 \neg x_3 x_4 \oplus \neg x_1 \neg x_4) x_2[/math]

Раскроем скобку по алгебраическим правилам:

[math]f(x_1,x_2,x_3,x_4) = x_1 x_2 \neg x_3 x_4 \oplus \neg x_1 \neg x_4 \oplus x_2 \oplus x_1 x_2 x_2 \neg x_3 x_4 \oplus \neg x_1 x_2 \neg x_4[/math]

Снова воспользуемся свойствами конъюнкции и исключающего ИЛИ:

[math]f(x_1,x_2,x_3,x_4) = \neg x_1 \neg x_4 \oplus x_2 \oplus \neg x_1 x_2 \neg x_4[/math]

Заменим отрицание на прибавление [math]1[/math]:

[math]f(x_1,x_2,x_3,x_4) = (x_1 \oplus 1) (x_4 \oplus 1) \oplus x_2 \oplus (x_1 \oplus 1) x_2 (x_4 \oplus 1)[/math]

Раскроем скобки:

[math]f(x_1,x_2,x_3,x_4) = x_1 x_4 \oplus x_1 \oplus x_4 \oplus 1 \oplus x_2 \oplus x_1 x_2 x_4 \oplus x_1 x_2 \oplus x_2 x_4 \oplus x_2[/math]

Выкинем парные слагаемые и получим окончательную формулу:

[math]f(x_1,x_2,x_3,x_4) = x_1 x_2 x_4 \oplus x_1 x_2 \oplus x_1 x_4 \oplus x_2 x_4 \oplus x_1 \oplus x_4 \oplus 1[/math]

Метод треугольника[править]

Метод треугольника позволяет преобразовать таблицу истинности в полином Жегалкина путём построения вспомогательной треугольной таблицы в соответствии со следующими правилами:

  1. Строится полная таблица истинности, в которой строки идут в порядке возрастания двоичных кодов от [math]000\ldots00[/math] до [math]111\ldots11[/math].
  2. Строится вспомогательная треугольная таблица, в которой первый столбец совпадает со столбцом значений функции в таблице истинности.
  3. Ячейка в каждом последующем столбце получается путём сложения по модулю 2 двух ячеек предыдущего столбца — стоящей в той же строке и строкой ниже.
  4. Столбцы вспомогательной таблицы нумеруются двоичными кодами в том же порядке, что и строки таблицы истинности.
  5. Каждому двоичному коду ставится в соответствие один из членов полинома Жегалкина в зависимости от позиций кода, в которых стоят единицы. Например, ячейке [math]111[/math] соответствует член [math]ABC[/math], ячейке [math]101[/math] — член [math]AC[/math], ячейке [math]010[/math] — член [math]B[/math], ячейке [math]000[/math] — член [math]1[/math] и т.д.
  6. Если в верхней строке какого-либо столбца стоит единица, то соответствующий член присутствует в полиноме Жегалкина.

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

Пример преобразования таблицы истинности в полином Жегалкина для функции трёх переменных [math]P(A,B,C)[/math] показан на рисунке.

Преобразование таблицы истинности в полином Жегалкина методом треугольника.gif

Чтобы получить формулу, по которой рассчитывается какой-либо коэффициент, нужно из клетки, в которой он записан, пройтись всеми возможными путями влево, до столбца [math]''P''[/math] таблицы истинности, делая ходы влево и влево-вниз, записать значения в конечных ячейках и сложить их все между собой по модулю 2.

Таким образом, в первом столбце сверху записан коэффициент [math] a_0 = P(0,0,0) [/math],

во втором — [math] a_1 = P(0,0,0) \oplus P(0,0,1) [/math],

в третьем — [math] a_2 = P(0,0,0) \oplus P(0,0,1) \oplus P(0,0,1) \oplus P(0,1,0) = P(0,0,0) \oplus P(0,1,0) [/math],

в четвёртом —

[math] a_3 = P(0,0,0) \oplus P(0,0,1) \oplus P(0,0,1) \oplus P(0,0,1) \oplus P(0,1,0) \oplus P(0,1,0) \oplus P(0,1,0) \oplus P(0,1,1) = P(0,0,0) \oplus P(0,1,0) \oplus P(0,0,1) \oplus P(0,1,1), [/math]

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

Преобразование Мёбиуса[править]

Пусть задана булева функция [math]f: B^n \rightarrow B, \;\; B=\{ 0; 1 \}[/math]. Любая булева функция представима в виде полинома Жегалкина, притом единственным образом.

Пусть [math] i = (i_1, i_2, \ldots i_n), \;\; i_k \in \{0 ; 1\}[/math], и введем обозначение [math] x ^{i_k} \sim \left\{\begin{matrix} x, \;\; i_k=1 \\ 1, \;\; i_k=0 \end{matrix}\right. [/math]

Тогда полином Жегалкина можно записать как: [math] f(x) = \bigoplus\limits_i \alpha_i \cdot x_1^{i_1} \cdot x_2^{i_2} \cdot[/math] [math]\ldots[/math] [math]\cdot x_n^{i_n}[/math], где [math]\alpha_i \in \{ 0; 1 \}[/math].

Множество коэффициентов [math]\{\alpha _i\}[/math] можно рассматривать как функцию [math]\alpha[/math], заданной на множестве индексов [math] i = (i_1, i_2, \ldots i_n)[/math], то есть [math]\alpha: i \mapsto \alpha_i[/math].

Очевидно, функцию [math] f [/math] можно записать и следующим образом: [math] f(x) = \bigoplus \limits_i \alpha_i \cdot [x_1 , \; [/math] если [math] \;\; i_1] \cdot [x_2 , \; [/math] если [math] \;\; i_2] \cdot[/math] [math]\ldots[/math] [math]\cdot [x_n , \; [/math] если [math] \;\; i_n][/math].

Тут запись [math][x_k , \; [/math] если [math] \; i_k][/math] означает, что элелемент [math] x_k [/math] присутствует в соответствующем члене полинома только если [math] i_k = 1 [/math]. Тогда если для какого-то [math]x[/math], [math]i \succ x*[/math] ,то в слагаемом будет существовать хотя бы один множитель, равный нулю, и такое слагаемое на сумму не повлияет. Отсюда ясно, что [math] f(x) = \bigoplus \limits_{i \preceq x} \alpha_i [/math]  [math] (2) [/math] Найдем отображение [math] f \mapsto \alpha[/math] (То есть такое, которое по заданной функции вычисляет значения всех коэффициентов).

[math]*[/math] [math]i \succ x[/math] обозначает, что [math]x[/math] "меньше" [math]i[/math] как последовательность бит

Теорема:
Пусть задана функция [math] f [/math]. Тогда функцию [math] \alpha_x [/math] можно найти по формуле: [math]\alpha_x = \bigoplus \limits_{j\preceq x} f(j)[/math]     [math] (3) [/math].
Доказательство:
[math]\triangleright[/math]

Докажем при помощи индукции по количеству единиц в векторе [math] x [/math] ( иначе говоря, по сумме [math]x_1+x_2+[/math][math]\ldots[/math][math]+x_n[/math] ) и для удобства обозначим это количество единиц(сумму) [math] wt(x) [/math].

1) База: если [math] x = 0 [/math], то, очевидно [math] f(0) = \alpha_0 [/math]

2) Пускай теорема справедлива для всех сумм [math]wt(x) \lt k[/math]. Покажем, что в таком случае она верна и для [math]wt(x) = k[/math]. По [math] (2) [/math], а далее по предположению индукции видим: [math] f(x) = \bigoplus \limits_{i \preceq x} \alpha_i = \left [ \bigoplus \limits_{i \prec x} \bigoplus \limits_{j\preceq i} f(j) \right ] \oplus \alpha_x[/math] .

Рассмотрим сумму [math] \left [ \bigoplus \limits_{i \prec x} \bigoplus \limits_{j\preceq i} f(j) \right ] [/math]. Каждый элемент [math] f(j) [/math] содержится в ней, только если [math] j \prec x [/math], и для фиксированных [math] j[/math] и [math] x [/math] элемент [math] f(j)[/math] встречается ровно столько раз, сколько существует [math] i [/math] , таких, что [math] j \preceq i \prec x[/math]. Несложно увидеть, что таких [math] i [/math] существует ровно [math] 2^{wt(x)-wt(j)}-1 [/math], то есть нечетное количество раз. Тогда [math] \left [ \bigoplus \limits_{i \prec x} \bigoplus \limits_{j\preceq i} f(j) \right ] = \bigoplus \limits_{j\prec x} f(j) [/math]. Но тогда [math] f(x) = \left [ \bigoplus \limits_{j\prec x} f(j) \right ] \oplus \alpha_x \Leftrightarrow f(x) \oplus \bigoplus \limits_{j\prec x} f(j) = \alpha_x \Leftrightarrow \alpha_x = \bigoplus \limits_{j\preceq x} f(j)[/math].

То есть при [math]wt(x) = k[/math] формула также выполняется, значит при любых [math] x [/math] выполняется [math]\alpha_x = \bigoplus \limits_{j\preceq x} f(j)[/math].
[math]\triangleleft[/math]

Отображение [math] f \rightarrow \alpha[/math] также называется преобразованием Мёбиуса.

Видно, что [math] (2) [/math] и [math] (3) [/math] — это одно и тоже преобразование. Значит, если применить преобразование Мёбиуса к функции, а затем вновь применить то же преобразование к получившейся функции, тогда вновь получим исходную функцию [math]f[/math]. То есть преобразование Мёбиуса обратно самому себе, иными словами, является инволюцией.

См. также[править]

Источники информации[править]