Дискуссионный математический форумМатематический форум

Математический форум Math Help Planet

Обсуждение и решение задач по математике, физике, химии, экономике

Теоретический раздел
Часовой пояс: UTC + 4 часа [ Летнее время ]
MathHelpPlanet.com RSS-лента Математического форума

Часовой пояс: UTC + 4 часа [ Летнее время ]


Формулы и суперпозиции булевых функций

Формулы и суперпозиции булевых функций


Табличный способ задания булевой функции не является эффективным. Им практически нельзя воспользоваться при большом числе переменных. Помимо этого способа существует способ представления булевых функций в виде формул. Этот способ аналогичен аналитическому способу задания функций действительного переменного.


Как известно, в математическом анализе мы исходили из определенного множества элементарных функций и строили из них сложные функции, записывая их в виде формул, например: [math]y=\sin \operatorname{tg}x\,,[/math] [math]y=\ln\cos{x}\,,[/math] [math]y=\exp(-\cos(x+ \operatorname{tg}x))[/math] и т.п. Аналогично обстоит дело для булевых функций, но только вместо элементарных функций математического анализа мы используем элементарные булевы функции — главным образом, те функции от одной и от двух переменных, которые мы определили ранее.


Но в отличие от математического анализа в теории булевых функций ставится задача представления любой булевой функции такой формулой, которая содержала бы строго определенное конечное множество элементарных булевых функций. Эти функции назовем пока условно "базисными функциями". Множества таких базисных функций могут быть разными, но, так или иначе, мы хотим иметь нечто вроде функционального базиса (или множества таких базисов), через элементы которого можно было бы выразить любую булеву функцию. Аналогичная задача не может быть решена для функций действительного переменого. Для булевых же функций задача оказывается разрешимой, и это обусловлено прежде всего тем, что булева функция является конечной функцией.


Чтобы математически точно сформулировать и решить поставленную выше задачу, нам необходимо уточнить понятие формулы. В анализе, поскольку там не возникала задача подобного рода, мы могли ограничиться интуитивной идеей формулы как некоего способа представления функции. В теории булевых функций мы хотим доказывать утверждения вида "любая булева функция может быть представлена формулой над заданным множеством базисных функций [math]F[/math]". Но тогда нам нужно дать математическое определение "формулы над заданным множеством базисных функций [math]F[/math]", а также уточнить, что значит "булева функция представлена некоторой формулой". Кроме того, формулы обретают "самостоятельную жизнь" еще и потому, что одну и ту же булеву функцию можно представить, вообще говоря, разными формулами (как над одним и тем же базисом, так и над разными базисами). Тогда необходимо иметь механизм эквивалентного преобразования формул, т.е. перехода от заданной формулы, представляющей некоторую булеву функцию, к новой, скажем, более простой формуле, которая представляет ту же самую функцию.


Определение формулы основано на понятии сложной функции, или суперпозиции.


Пусть булева функция [math]f[/math] есть функция от [math]n[/math] переменных, а булевы функции [math]g_1,\ldots,g_n[/math] — произвольные (и не обязательно различные) функции от одного и того же числа переменных, которое обозначим [math]m[/math].


Определим функцию [math]f(g_1,\ldots,g_n)[/math] называемую суперпозицией функций [math]f,g_1,\ldots,g_n[/math] так, что для любого [math]\widetilde{\alpha}=\mathbb{B}^m[/math] имеет место равенство


[math]f(g_1,\ldots,g_n)(\widetilde{\alpha})= f\bigl(g_1(\widetilde{\alpha}),\ldots, g_n(\widetilde{\alpha})\bigr).[/math]

Таким образом, суперпозиция [math]f(g_1,\ldots,g_n)[/math] есть не что иное, как композиция булевых операторов [math]g\circ f[/math], где булев оператор [math]g[/math] задается семейством координатных функций [math]g_i,~i=\overline{1,n}[/math].


Для суперпозиции [math]f(g_1,\ldots,g_n)[/math] используется также обозначение [math]\mathcal{S}(f,g_1,\ldots,g_n)[/math]. Предположение о том, что все функции [math]g_i,~i=\overline{1,n}[/math], — функции от одного и того же числа переменных, не ограничивает общности, поскольку, как было показано ранее, любое конечное множество булевых функции всегда можно рассматривать как множество функций от одного и того же числа переменных.


Замечание 6.4. Обратим внимание на то, что в общем случае "уравнивание" числа переменных функций [math]g_i,~i=\overline{1,n}[/math], связано с добавлением фиктивных переменных, а его, как известно, можно осуществлять разными способами. Поэтому суперпозиция [math]f(g_1,\ldots,g_n)[/math], вообще говоря, определена однозначно лишь с точностью до равенства булевых функций согласно определению 6.2.


Пусть дано некоторое множество булевых функций [math]F[/math]. Тогда формулой над множеством [math]F[/math] мы считаем любую константу из [math]F[/math] (если она там есть) и любое булево переменное. Далее, если известно, что [math]\Phi_1,\ldots,\Phi_n~(n\geqslant1)[/math] — формулы над множеством [math]F[/math], а [math]f[/math] — функция из [math]F[/math] от [math]n[/math] переменных, то выражение [math]f(\Phi_1,\ldots,\Phi_n)[/math] есть формула над множеством [math]F[/math]. Никаких других формул над множеством [math]F[/math], кроме определенных выше, не существует.


Замечание 6.5. 1. Строго говоря, в формуле [math]f(\Phi_1,\ldots,\Phi_n)[/math] фигурирует не сама булева функция из множества [math]F[/math], а ее обозначение, т.е. индивидная константа с областью значений [math]\mathcal{P}_2[/math]. Но мы, чтобы не усложнять терминологию, будем отождествлять обозначения базисных функций, т.е. функции из заданного множества [math]F[/math], с самими базисными функциями.


2. Обычно предполагают, что рассматриваются переменные из некоторого заранее фиксированного (и не более чем счетного) множества переменных [math]X[/math].




Пример 6.6. а. Пусть [math]F=\{\lor,\cdot,\overline{\phantom{A}}\}[/math]. Это множество, состоящее из функций дизъюнкции, конъюнкции и отрицания, называют стандартным базисом. Формулами над стандартным базисом будет любое переменное: [math]x,y,\ldots,x_1,\ldots,x_n[/math] и т.д. Далее, из переменных [math]x,y[/math] как формул и функции [math]\lor[/math] можно построить новую формулу, например [math]\lor(x,y)[/math] или [math]\cdot(x,y)[/math]. Эти формулы, однако, естественно записывать несколько иначе. Поскольку каждая булева функция от двух переменных (каковы, в частности, дизъюнкция и конъюнкция) является одновременно бинарной операцией на множестве [math]\mathbb{B}=\{0;1\}[/math], то формулы с такими функциями обычно записывают в "инфиксной форме", т.е. как [math](x\lor y),\,(x\cdot y)[/math] и т.п. Аналогично для отрицания используют запись [math]\overline{x}[/math], а не [math]\overline{\phantom{x}}(x)[/math].


Кроме того, в формулах над стандартным базисом, во-первых, опускают скобки, используя ассоциативность булевых операций [math]\lor[/math] и [math]\cdot[/math], то есть вместо [math]((x\lor y)\lor z)[/math] пишут [math](x\lor y\lor z)[/math]; во-вторых, опускают, как правило, внешние скобки, записывая формулу, аналогичную последней, просто как [math]x\lor y\lor z[/math]; в-третьих, используют соглашение о "старшинстве" (или о приоритете) операций, полагая, что самый высокий приоритет имеет операция отрицания (т.е. она всегда выполняется перед конъюнкцией и дизъюнкцией), затем идет конъюнкция и после нее — дизъюнкция.


С учетом сказанного формула [math]\bigl(\overline{x\lor y}\lor ((y\cdot z)\cdot u)\bigr)[/math] может быть переписана так:


[math]\overline{x\lor y}\lor y\cdot z\cdot u\,.[/math]
(6.6)

Согласно определению формулы, можно представить процесс построения формулы (6.6) следующим образом. Из переменных [math]x,y[/math] и функции [math]\lor[/math] строим формулу [math]\Phi_1=(x\lor y)[/math], затем из нее и функции отрицания получаем формулу [math]\Phi_2=\overline{\Phi}_1[/math], т.е. формулу [math]\overline{x\lor y}[/math]. Далее из переменных [math]y,z[/math] и функции [math]\cdot()[/math] строим формулу [math](y\cdot z)[/math], а из нее, переменного [math]u[/math] и опять функции [math]\cdot()[/math] — формулу [math]\Phi_3=(y\cdot z)\cdot u[/math], которую записываем как [math]y\cdot z\cdot u[/math]. И наконец, из формул [math]\Phi_2,\,\Phi_3[/math] и функции [math]\lor[/math] строим формулу [math]\Phi_2\lor\Phi_3[/math], т.е. формулу (6.6).


Описанный процесс можно наглядно изобразить в виде ориентированного дерева (рис. 6.3). Листья этого дерева помечены переменными или константами формулы, а каждый узел, не являющийся листом, — одной из функций из множества [math]F[/math] (на рисунке эти узлы изображены в виде кружочков, внутри которых указано имя функции).


Процесс построения формулы в виде ориентированного дерева

б. Рассмотрим множество булевых функций [math]\{\oplus,\cdot,1\}[/math], которое называют базисом Жегалкина. При записи формул над базисом Жегалкина используют те же принципы, что и при записи формул над стандартным базисом. Приоритет операции конъюнкции считается выше приоритета операции сложения по модулю 2. Так как последняя ассоциативна, то при записи формул с этой операцией соответствующим образом опускают скобки. Так, формулами над базисом Жегалкина будут:


[math]xy\oplus x\oplus y,\qquad x\oplus 1,\qquad xyz\oplus xy\oplus xz\oplus yz\oplus x\oplus y\oplus z\oplus 1.[/math]

Процесс построения первых двух формул изображен в виде деревьев на рис. 6.4.


Процесс построения двух формул в виде деревьев

в. Пусть множество базисных функций [math]F[/math] состоит из единственной функции [math]\mid[/math] (штрих Шеффера). Как бинарная операция, эта функция не ассоциативна, т.е. булева функция [math](x|y)|z[/math] не равна булевой функции [math]x|(y|z)[/math]. Поэтому при записи формул над множеством [math]\{\mid\}[/math] следует заботиться о расстановке скобок. Примеры формул над множеством [math]\{\mid\}:[/math]


[math](x|x)|(y|y),\qquad (x|y)|(x|y),\qquad (x|x)|(x|x).[/math]

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


Дерево, показывающее процесс построения формулы



Мы будем использовать запись [math]\Phi(x_1,\ldots,x_n)[/math], указывая тем самым, что формула [math]\Phi[/math] содержит переменные [math]x_1,\ldots,x_n[/math], и только их. Множество переменных формулы [math]\Phi[/math] будем обозначать через [math]Var(\Phi)[/math].


Нам понадобится также понятие подформулы.


Из определения и рассмотренных примеров следует, что процесс построения формулы есть процесс определения некоторой сложной булевой функции, т.е. суперпозиции. Формула "собирается" из "элементарных формул", т.е. переменных и базисных функций, так, что на каждом шаге из уже полученных формул строится новая, более сложная формула. Естественно назвать эти "промежуточные" формулы подформулами рассматриваемой формулы. Так, в примере б.б.а формулы [math]\Phi_1,\,\Phi_2,\,Phi_3[/math] (и, конечно, переменные и базисные функции) — это подформулы формулы (6.6).


Строго понятие подформулы может быть введено следующим образом. Пусть [math]\Psi[/math] — формула над [math]F[/math]. Если [math]\Psi\in F[/math] или [math]\Psi[/math] есть переменное, то ее единственной подформулой является она сама. Если [math]\Psi[/math] имеет вид [math]f(\Phi_1,\ldots,\Phi_n)[/math], где [math]f[/math] — функция из [math]F[/math] от [math]n[/math] переменных, а [math]\Phi_i,~i=\overline{1,n}[/math], суть формулы над [math]F[/math], то подформулами формулы [math]\Psi[/math] будут:


1) все формулы [math]\Psi_i[/math];
2) для каждого [math]i=\overline{1,n}[/math] все подформулы формулы [math]\Psi_i[/math].

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


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


Пример 6.7. Полагая в формуле (6.6) [math]x=1,~y=0,~z=u=1[/math], получим значение формулы (6.6), равное


[math]\overline{1\lor 0}\lor 0\cdot 1\cdot 1=0.[/math]

Таким образом, по каждому набору значений переменных формулы можно по определенному алгоритму вычислить значение формулы. Это значит, что каждая формула определяет (или представляет) некоторую булеву функцию. Введем понятие функции, представляемой формулой над множеством [math]F[/math]. Мы полагаем, что:


1) любая константа из [math]F[/math] представляет саму себя;

2) любое переменное [math]x[/math] из [math]X[/math] представляет проектирующую функцию [math]x[/math] (точнее, любую из множества равных между собой проектирующих функций существенного переменного [math]x[/math], см. замечание 6.3);

3) если формулы [math]\Phi_1,\ldots,\Phi_n[/math] над множеством [math]F[/math] представляют соответственно функции [math]g_1,\ldots,g_n[/math], a [math]f[/math] — функция из [math]F[/math] от [math]n[/math] переменных [math](n\geqslant1)[/math], то формула [math]f(\Phi_1,\ldots, \Phi_n)[/math] представляет суперпозицию функций [math]f(g_1,\ldots,g_n)[/math];

4) других булевых функций, представляемых формулами над множеством [math]F[/math], кроме тех, которые могут быть получены согласно пунктам 1-3 данного определения, не существует.


Функцию, представляемую некоторой формулой над множеством [math]F[/math], называют суперпозицией над множеством [math]F[/math]. Таким образом, суперпозиция над множеством F — это любая суперпозиция функций вида [math]f(g_1,\ldots,g_n)[/math], где [math]f\in F[/math], а каждая из функций [math]g_1,\ldots,g_n[/math] есть либо элемент [math]F[/math], либо переменное (точнее, проектирующая функция), либо некоторая суперпозиция над [math]F[/math]. Множество всех суперпозиций над [math]F[/math] будем обозначать [math][ F][/math] и называть замыканием множества [math]F[/math] булевых функций.


Понятия формулы и суперпозиции взаимно предполагают друг друга. Суперпозиция над множеством [math]F[/math] есть некоторая сложная функция, которая определенным образом построена из базисных функций — функций фиксированного множества [math]F[/math] (и проектирующих функций). Само "строение" суперпозиции, т.е. то, из каких именно базисных функций и в какой последовательности образуется результирующая сложная функция (суперпозиция), и есть формула.


Если булева функция [math]f(x_1,\ldots,x_n)[/math] представляется формулой [math]\Phi(x_1,\ldots, x_n)[/math], то будем писать [math]f(x_1,\ldots,x_n)= \Phi(x_1,\ldots,x_n)[/math], или, короче, [math]f=\Phi(x_1,\ldots,x_n)[/math].


Определение 6.3. Множество булевых функций [math]F[/math] называют:


1) замкнутым, если любая формула над [math]F[/math] представляет некоторую функцию из [math]F[/math];
2) полным, если любая булева функция может быть представлена некоторой формулой над [math]F[/math].

Определение 6.3 равносильно следующему (на "языке суперпозиций"): множество [math]F[/math] функций замкнуто, если каждая суперпозиция над [math]F[/math] есть функция из [math]F[/math], то есть [math][ F]=F[/math], и полно, если всякая булева функция есть некоторая суперпозиция над [math]F[/math], то есть [math][ F]=\mathcal{P}_2[/math].


Замечание 6.6. Можно заметить, что определение формулы и суперпозиции над заданным множеством булевых функций похоже на определение Ω-замыкания множества в алгебрах. Эти определения, равно как и основанные на них определения замкнутости и полноты множеств булевых функций, могут быть переведены полностью на алгебраический язык. Тогда замкнутое множество булевых функций, согласно определению 6.3, окажется не чем иным, как замкнутым подмножеством некоторой алгебры булевых функций, а полное множество булевых функций — системой образующих этой алгебры. Однако при попытке чисто алгебраической интерпретации определения 6.3 возникают некоторые технические трудности, обсуждение которых выходит за рамки этого курса.


Пример 6.8. Для каждой из определенных в 6.1 функций от двух переменных мы можем записать следующие формулы над стандартным базисом:


[math]\begin{aligned}x_1\oplus x_2&= x_1\cdot \overline{x}_2\lor \overline{x}_1x_2,\\ x_1\to x_2&= \overline{x}_1\lor x_2,\\ x_1\sim x_2&= (\overline{x}_1\lor x_1)\cdot (\overline{x}_2\lor x_1),\\ x_1\mid x_2&=\overline{x_1\cdot x_2},\\ x_1\downarrow x_2&=\overline{x_1\lor x_2}. \end{aligned}[/math]

Если мы пополним стандартный базис функцией [math]\to[/math] (импликацией), то формула для эквивалентности примет вид


[math]x_1\sim x_2= (x_1\to x_2)\cdot (x_2\to x_1).[/math]



Тот факт, что одна и та же функция (в данном случае эквивалентность) может быть представлена по крайней мере двумя разными формулами над одним и тем же множеством, а именно над [math]\{\lor, \cdot,\overline{\phantom{A}},\to\}[/math], показывает, что соответствие между формулами над фиксированным множеством и представляемыми ими функциями не является взаимно однозначным. Эта ситуация до некоторой степени аналогична разложению по базису векторов конечномерного линейного пространства. Формула, представляющая некоторую булеву функцию, выражает "разложение" этой функции по фиксированному "функциональному базису". Одна и та же функция может иметь несколько таких разложений. В отличие от линейной алгебры в этом случае возникает ситуация, когда возможны различные разложения заданной функции по одному и тому же базису. Например, формулы [math]\overline{x\lor y}[/math] и [math]\overline{x}\cdot\overline{y}[/math] над стандартным базисом представляют одну и ту же функцию.


Назовем эквивалентными формулы, которые представляют равные функции. Эквивалентным (или тождественным) преобразованием формулы [math]\Phi[/math] называют переход (по определенным правилам) к любой формуле [math]\Psi[/math], эквивалентной формуле [math]\Phi[/math]. Необходимо сделать несколько замечаний относительно правил, согласно которым осуществляются эквивалентные преобразования формул.


Введем понятие тождества. Тождеством (над множеством [math]F\subseteq\mathcal{P}_2[/math]) называют выражение


[math]\Phi(x_1,\ldots,x_n)= \Psi(y_1,\ldots,y_m),[/math]
(6.7)

где формулы [math]\Phi[/math] и [math]\Psi[/math] — эквивалентные формулы над [math]F[/math]. Формула [math]\Phi[/math] называется при этом левой, а формула [math]\Psi[/math] — правой частью тождества (6.7).


Левая и правая части тождества представляют равные булевы функции. Поэтому пересечение множеств переменных [math]Var(\Phi)=\{x_1,\ldots,x_n \}[/math] и [math]Var(\Psi)= \{y_1,\ldots, y_m\}[/math] должно содержать все существенные переменные функций /(#1,...,жп) и g(yi,...,ym), представляемых формулами [math]\Phi[/math] и [math]\Psi[/math] соответственно. В частности, если это пересечение пусто, то обе функции равны некоторой константе.




Пример 6.9. В тождествах [math]x\lor \overline{x}=y \overline{y},~ x\lor \overline{x}=1[/math] пересечение множеств переменных в левых и правых частях пусто, причем во втором тождестве правая часть вообще не содержит переменных. В тождестве [math](x\lor y)\cdot (z\lor \overline{z})= x\lor y\lor v\cdot \overline{v}[/math] указанное пересечение равно [math]\{x,y\}[/math].


Все записанные в примере 6.8 выражения являются тождествами над множеством [math]\{\lor,\cdot, \overline{\phantom{A}},\oplus, \to, \sim,\mid,\downarrow\}[/math], причем во всех этих тождествах множества переменных в левой и правой частях тождества совпадают. Такого же рода тождества — аксиомы булевой алгебры* (кроме тождеств [math]x\lor \overline{x}=1[/math] и [math]x\land \overline{x}=0[/math]) и вытекающие из них тождества (подобные, например, законам де Моргана).


*Поскольку все переменные, фигурирующие в этих тождествах, есть булевы переменные, то речь здесь идет об аксиомах булевой алгебры применительно к частному случаю — двухэлементной булевой алгебре [math]\mathbb{B}[/math].




Правила тождественных преобразований булевых функций


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


Теорема 6.1. 1. Если в тождестве (6.7) некоторые переменные заменить произвольными формулами (над множеством [math]F[/math]), то тождество сохранится, т.е. полученные в результате такой замены новые формулы останутся эквивалентными. 2. Если в формуле [math]\Phi[/math] произвольную ее подформулу заменить любой эквивалентной ей, то получится формула, эквивалентная формуле [math]\Phi[/math].


Чтобы использовать сформулированные в теореме 6.1 правила, нужно фиксировать какую-то систему исходных тождеств. Тогда возникает вопрос: можно ли утверждать, что при надлежащем выборе исходных тождеств с помощью правил 1 и 2, сформулированных в теореме 6.1, можно из формулы [math]\Phi[/math] получить эквивалентную ей формулу [math]\Psi[/math], каковы бы ни были эти формулы, или, говоря неформально, любые ли две эквивалентные формулы над заданным множеством [math]F[/math] можно "трансформировать" друг в друга, используя фиксированную систему основных тождеств над [math]F[/math] и правила, сформулированные в теореме 6.1?


Рассмотрение этого вопроса выходит за рамки данного курса. Ответ на него зависит от того, какое множество булевых функций [math]F[/math] и какая система исходных тождеств над [math]F[/math] выбраны. Отметим, что для стандартного базиса ответ на вопрос положителен, причем в качестве исходных тождеств используются аксиомы булевой алгебры.


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


Понятие формулы позволяет также взглянуть по-новому на логическую интерпретацию булевой функции. В силу установленного в 6.2 взаимно однозначного соответствия между логическими связками [math]\lor,\land, \lnot, \Rightarrow,\Leftrightarrow[/math] и булевыми функциями [math]\lor, \cdot, \overline{\phantom{A}},\to,\sim[/math] любому сложному высказыванию, составленному из некоторых "простых" высказываний с использованием указанных выше логических связок, однозначно сопоставляется формула над множеством [math]L=\{\lor, \cdot, \overline{\phantom{A}}, \to,\sim\}[/math], т.е. каждому простому высказыванию сопоставляется булево переменное (так что разным высказываниям сопоставляются и разные переменные), а связки [math]\lor,\land, \lnot, \Rightarrow, \Leftrightarrow[/math] заменяются соответствующими функциями из множества [math]L[/math]. Тогда, например, высказыванию [math](P\Rightarrow Q)\land (Q\Rightarrow P)[/math] (читается: "если [math]P[/math], то [math]Q[/math], и если [math]Q[/math], то [math]P[/math]") будет сопоставлена формула [math](x\to y)\cdot (y\to x)[/math].


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


Но тогда возникают вопросы: как практически построить для любой наперед заданной булевой функции представляющую ее формулу над фиксированным множеством базисных функций [math]F[/math]? Каковы условия полноты множества [math]F[/math]?


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


Часовой пояс: UTC + 4 часа [ Летнее время ]


Яндекс.Метрика

Copyright © 2010-2016 MathHelpPlanet.com. All rights reserved