Булевы функции. Канонические формы логических функций. Полные системы булевых функций.

Булевы функции

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

Булева функция
Это функция \(f(x_1, x_2, \ldots, x_n)\), аргументы которой \(x_1, x_2, \ldots, x_n\), и сама функция \(f\) принимают значения \(0\) или \(1\).

Логические функции могут быть заданы таблично, либо аналитически.

В общем случае, булеву функцию от \(n\) переменных можно рассматривать как отображение \(\lbrace 0, 1\rbrace^n \to \lbrace 0, 1 \rbrace\). Пространство \(\lbrace 0, 1\rbrace^n\) можно интерпретировать как \(n\)-битное двоичное число.

Существует \(2^n\) различных \(n\)-битных двоичных чисел. Так как каждому из них сопоставляется значение функции – 0 или 1, то общее количество различных булевых функций \(n\) аргументов равно \(2^{2^n}\).

От двух переменных существует 16 различных булевых функций. Особо интересными из них являются:

  • Штрих Шеффера \[f(x,y) = \;\overline{a \,\&\,b}\; = a | b\]
  • Стрелка Пирса \[f(x,y) = \;\overline{a \vee b}\; = a \downarrow b\]

Канонические формы логических функций

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

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

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

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

Элементарная конъюнкция
Это конъюнкция одной или нескольких переменных, или их отрицаний.
Элементарная дизъюнкция
Это дизъюнкция одной или нескольких переменных, или их отрицаний.
Дизъюнктивная нормальная форма (ДНФ)
Это дизъюнкция не повторяющихся элементарных конъюнкций.
Конъюнктивная нормальная форма (КНФ)
Это конъюнкция не повторяющихся элементарных дизъюнкций.

Среди дизъюнктивных или конъюнктивных нормальных форм, очевидно, существуют совершенные.

Совершенная ДНФ (СДНФ)
Это ДНФ, в которой каждая элементарная конъюнкция состоит из \(k\) переменных \(x_1, x_2, \ldots, x_k\), причем на \(i\)-том месте конъюнкции стоит переменная \(x_i\) или ее отрицание \(\;\overline{x_i}\;\), и все элементарные конъюнкции различны.
Совершенная КНФ (СКНФ)
Это КНФ, в которой каждая элементарная дизъюнкция состоит из \(k\) переменных \(x_1, x_2, \ldots, x_k\), причем на \(i\)-том месте дизъюнкции стоит переменная \(x_i\) или ее отрицание \(\;\overline{x_i}\;\), и все элементарные дизъюнкции различны.

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

Теорема о существовании СДНФ
Пусть \(f(x_1, x_2, \ldots, x_n)\) – булева функция от \(n\) переменных, не равная тождественно нулю. Тогда существует СДНФ, выражающая функцию \(f\).
Доказательство

Для начала покажем, что переменную можно “вынести” за знак функции с помощью конъюнкции:

\[f(x_1,\ldots,x_i,\ldots,x_n) = \;\overline{x_i}\; \,\&\,f(x_1,\ldots,0,\ldots,x_n) \vee x_i \,\&\,f(x_1,\ldots,1,\ldots,x_n)\]

Действительно, если \(x_i = 0\), то \[f(x_1,\ldots,x_i,\ldots,x_n) = 1 \,\&\,f(x_1,\ldots,0,\ldots,x_n) \vee 0 \,\&\,f(x_1,\ldots,1,\ldots,x_n) = f(x_1,\ldots,0,\ldots,x_n)\]

Иначе, если \(x_i = 1\), \[f(x_1,\ldots,x_i,\ldots,x_n) = 0 \,\&\,f(x_1,\ldots,0,\ldots,x_n) \vee 1 \,\&\,f(x_1,\ldots,1,\ldots,x_n) = f(x_1,\ldots,1,\ldots,x_n)\]

Последовательно “вынося” переменные за знак функции, получим следующую формулу (знаки конъюнкции опущены):

\[\begin{array}{c} f(x_1,\ldots,x_n) & = & \;\overline{x_1}\; & \;\overline{x_2}\; & \ldots & \;\overline{x_{n-1}}\; & \;\overline{x_n}\; & f(0, 0, \ldots, 0, 0) & \vee\\ & \vee& \;\overline{x_1}\; & \;\overline{x_2}\; & \ldots & \;\overline{x_{n-1}}\; & x_n & f(0, 0, \ldots, 0, 1) & \vee\\ & \vee& \;\overline{x_1}\; & \;\overline{x_2}\; & \ldots & x_{n-1} & x_n & f(0, 0, \ldots, 1, 1) & \vee\\ & \ldots \\ & \vee& \;\overline{x_1}\; & x_2 & \ldots & x_{n-1} & x_n & f(0, 1, \ldots, 1, 1) & \vee\\ & \vee& x_1 & x_2 & \ldots & x_{n-1} & x_n & f(1, 1, \ldots, 1, 1) \end{array}\]

Теперь, зная значения функции, можно полностью исключить конъюнкции, содержащие \(f=0\), по закону поглощения нуля, и опустить в остальных конъюнкциях \(f=1\) по закону поглощения единицы.

Мы получили СДНФ, следовательно, она существует по построению. \(\blacksquare\)

Очевидна причина требования неравенства нулю: для \(f=0\) СДНФ не будет иметь ни одного члена.

Теорема о существовании СКНФ
Пусть \(f(x_1, x_2, \ldots, x_n)\) – булева функция от \(n\) переменных, не равная тождественно единице. Тогда существует СКНФ, выражающая функцию \(f\).
Доказательство

Для начала покажем, что переменную можно “вынести” за знак функции с помощью дизъюнкции:

\[f(x_1,\ldots,x_i,\ldots,x_n) = (x_i \vee f(x_1,\ldots,0,\ldots,x_n)) \,\&\,(\;\overline{x_i}\; \vee f(x_1,\ldots,1,\ldots,x_n))\]

Действительно, если \(x_i = 0\), то \[f(x_1,\ldots,x_i,\ldots,x_n) = (0 \vee f(x_1,\ldots,0,\ldots,x_n)) \,\&\,(1 \vee f(x_1,\ldots,1,\ldots,x_n)) = f(x_1,\ldots,0,\ldots,x_n) \]

Иначе, если \(x_i = 1\), \[f(x_1,\ldots,x_i,\ldots,x_n) = (1 \vee f(x_1,\ldots,0,\ldots,x_n)) \,\&\,(0 \vee f(x_1,\ldots,1,\ldots,x_n)) = f(x_1,\ldots,1,\ldots,x_n) \]

Последовательно “вынося” переменные за знак функции, получим следующую формулу:

\[\begin{array}{c} f(x_1,\ldots,x_n) & = & (\;\overline{x_1}\; &\vee& \;\overline{x_2}\; &\vee& \ldots &\vee& \;\overline{x_{n-1}}\; &\vee& \;\overline{x_n}\; &\vee& f(1, 1, \ldots, 1, 1)) & \,\&\,\\ & \,\&\,& (\;\overline{x_1}\; &\vee& \;\overline{x_2}\; &\vee& \ldots &\vee& \;\overline{x_{n-1}}\; &\vee& x_n &\vee& f(1, 1, \ldots, 1, 0)) & \,\&\,\\ & \,\&\,& (\;\overline{x_1}\; &\vee& \;\overline{x_2}\; &\vee& \ldots &\vee& x_{n-1} &\vee& x_n &\vee& f(1, 1, \ldots, 0, 0)) & \,\&\,\\ & \ldots \\ & \,\&\,& (\;\overline{x_1}\; &\vee& x_2 &\vee& \ldots &\vee& x_{n-1} &\vee& x_n &\vee& f(1, 0, \ldots, 0, 0)) & \,\&\,\\ & \,\&\,& (x_1 &\vee& x_2 &\vee& \ldots &\vee& x_{n-1} &\vee& x_n &\vee& f(0, 0, \ldots, 0, 0)) \end{array}\]

Теперь, зная значения функции, можно полностью исключить дизъюнкции, содержащие \(f=1\), по закону поглощения единицы, и опустить в остальных дизъюнкциях \(f=0\) по закону поглощения нуля.

Мы получили СКНФ, следовательно, она существует по построению. \(\blacksquare\)

Очевидна причина требования неравенства единице: для \(f=1\) СКНФ не будет иметь ни одного члена.

Полные системы булевых функций

Полная система булевых функций
это система булевых функций \(\lbrace f_1, \ldots, f_n \rbrace\), которая позволяет выразить произвольную логическую функцию.

По теоремам о существовании СДНФ и СКНФ, система функций \(\lbrace \,\&\,, \vee, \neg \rbrace\) является полной.

Полноту других систем можно обосновать при помощи следующего очевидного утверждения:

Если система \(\lbrace f_1, \ldots, f_n \rbrace\) является полной, и каждая из функций \(f_1, \ldots, f_n\) может быть выражена через функции \(g_1, \ldots, g_n\), то система \(\lbrace g_1, \ldots, g_n \rbrace\) так же является полной.

Так, несложно доказать, что системы \(\lbrace \vee, \neg \rbrace\) и \(\lbrace \,\&\,, \neg \rbrace\) так же являются полными.

Из всех булевых функций двух переменных, штрих Шеффера и стрелка Пирса образуют полные системы булевых функций сами по себе.

Штрих Шеффера \(x|y\) определяется как

\(x\) \(y\) \(x|y\)
\(0\) \(0\) \(1\)
\(0\) \(1\) \(1\)
\(1\) \(0\) \(1\)
\(1\) \(1\) \(0\)

Можно видеть так же, что \(x|y = \;\overline{x\,\&\,y}\;\), что объясняет другое название этой функции: “И-НЕ”.

Через штрих Шеффера легко выражаются конъюнкция, дизъюнкция и инверсия:

\[x|x = \;\overline{x\,\&\,x}\; = \;\overline{x}\;\]

\[x|y = \;\overline{x\,\&\,y}\; = \;\overline{x}\; \vee\;\overline{y}\;\]

Следовательно,

\[ x \vee y = \;\overline{\;\overline{x\vee y}\;}\; = \;\overline{\;\overline{x}\; \,\&\,\;\overline{y}\;}\; = \;\overline{x}\; | \;\overline{y}\; = (x|x)|(y|y)\]

\[ x \,\&\,y = \;\overline{\;\overline{x\,\&\,y}\;}\; = \;\overline{x | y}\; = (x|y)|(x|y)\]

Стрелка Пирса \(x\downarrow y\) определяется как

\(x\) \(y\) \(x\downarrow y\)
\(0\) \(0\) \(1\)
\(0\) \(1\) \(0\)
\(1\) \(0\) \(0\)
\(1\) \(1\) \(0\)

Можно видеть так же, что \(x\downarrow y = \;\overline{x\vee y}\;\), что объясняет другое название этой функции: “ИЛИ-НЕ”.

Через стрелку Пирса легко выражаются конъюнкция, дизъюнкция и инверсия:

\[x\downarrow x = \;\overline{x\vee x}\; = \;\overline{x}\;\]

\[x\downarrow y = \;\overline{x\vee y}\; = \;\overline{x}\; \,\&\,\;\overline{y}\;\]

Следовательно,

\[ x \vee y = \;\overline{\;\overline{x\vee y}\;}\; = \;\overline{x\downarrow y}\; = (x\downarrow y)\downarrow(x \downarrow y)\]

\[ x \,\&\,y = \;\overline{\;\overline{x\,\&\,y}\;}\; = \;\overline{\;\overline{x}\; \vee\;\overline{y}\;}\; = \;\overline{x}\; \downarrow\;\overline{y}\; = (x\downarrow x)\downarrow(y\downarrow y)\]

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

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