Разложение Шеннона

Материал из testwiki
Перейти к навигации Перейти к поиску

В математике разложением Шеннона или декомпозицией Шеннона по переменной xi называется метод представления булевой функции от n переменных в виде суммы двух подфункций от (n−1) остальных переменных. Хотя этот метод часто приписывают Клоду Шеннону, но Буль доказал его гораздо раньше, а сама возможность такого разложения по любой из переменной непосредственно вытекает из возможности определения любой булевой функции с помощью таблицы истинности.

Разложение

Разложение Шеннона по переменной xi основано на том, что таблицу истинности для булевой функции от n бинарных переменных можно разбить на две части таким образом, чтобы в первой части оказались только те входные комбинации, в которых переменная xi всегда принимает значение 1, а во второй части остались только те входные комбинации, в которых переменная xi всегда принимает значение 0 (а её инвертированное значение xi‾ принимает значение 1). В результате становится справедливым следующее тождество, называемое разложением Шеннона:

f(x)=xi⋅fxi(x)+xi‾⋅fxi‾(x)=(xi‾+fxi(x))⋅(xi+fxi‾(x))

где f(x) является разлагаемой булевой функцией, xi и xi‾ являются неинвертированным и инвертированным значением переменной, по которой производится разложение, а fxi(x) и fxi‾(x) являются соответственно положительным и отрицательным дополнением для функции f(x) по переменной xi. В разложении Шеннона знаками ⋅ и + обозначены операции конъюнкции («И», AND) и дизъюнкции («ИЛИ», OR) соответственно, но тождество остается справедливым и при замене дизъюнкции на строгую дизъюнкцию (сложение по модулю 2, исключающее «ИЛИ», XOR), так как слагаемые никогда не принимают истинное значение одновременно (поскольку положительное дополнение fxi(x) объединено конъюнкцией с xi, а отрицательное дополнение fxi‾(x) объединено конъюнкцией с его инверсией xi‾).

Положительное дополнение fxi(x) определяется той частью таблицы истинности, в которой переменная xi всегда принимает значение 1 (а её инвертированное значение xi‾ принимает значение 0):

fxi(x)=f(x1,...,xi−1,1,xi+1,...,xn)

Отрицательное дополнение fxi‾(x) определяется оставшейся частью таблицы, в которой переменная xi всегда принимает значение 0 (а инвертированное значение xi‾ принимает значение 1):

fxi‾(x)=f(x1,...,xi−1,0,xi+1,...,xn)

Теорема разложения Шеннона при всей своей очевидности является важной идеей в булевой алгебре для представления булевых функций в виде бинарных диаграмм решений, решения задачи выполнимости булевых формул и реализации множества других техник, относящихся к компьютерной инженерии и формальной верификации цифровых схем.

В статье «The Synthesis of Two-Terminal Switching Circuits»[1] Шеннон описал разложение функции по переменной x1 как:

f(x1,x2,…,xn)=x1⋅f(1,x2,…,xn)+x1‾⋅f(0,x2,…,xn)

с последующим разложением по двум переменным, и отметил, что разложение может быть продолжено по любому количеству переменных.

Пример разложения

Пусть дана булева функция от трех переменных x, y и z, записанная в виде совершенной дизъюнктивной нормальной формы, то есть в виде дизъюнкции элементарных конъюнкций, каждая из которых содержит в одинаковом порядке каждую переменную или её дополнение (инверсию):

f=x⋅y⋅z+x⋅y‾⋅z+x‾⋅y‾⋅z+x‾⋅y⋅z+x‾⋅y‾⋅z‾

Для разложения по переменной x эту функцию можно переписать в виде суммы:

f=x⋅gx+x‾⋅gx‾

получив разложение булевой функции f по переменной x путём простого применения свойства дистрибутивности для переменной x и её дополнения (инверсии) x′:

f=x(y⋅z+y‾⋅z)+x‾(y‾⋅z+y⋅z+y‾⋅z‾)

Аналогично выполняется разложение функции f по переменной y или z:

f=y(x⋅z+x‾⋅z)+y‾(x⋅z+x‾⋅z+x‾⋅z‾)
f=z(x⋅y+x⋅y‾+x‾⋅y‾+x‾⋅y‾)+z‾(x‾⋅y‾)

В свою очередь для каждой из оставшихся функций от меньшего числа переменных можно продолжить разложение по одной из оставшихся переменных.

Обобщение

В качестве переменной при разложении булевой функции могут выступать не только отдельные переменные, входящие в эту функцию, но любое мультиплексирующее условие. Например известноШаблон:Нет АИ разложение по выражению (x > y) и его отрицанию.

См. также

Примечания

Шаблон:Примечания

Ссылки