1 Понятие булевой функции
В курсе математического анализа изучаются функции, определённые на числовой прямой или на отрезке числовой прямой или на (гипер-) плоскости и т.п. Так или иначе область определения – непрерывное множество. В курсе дискретной математики изучаться должны функции, область определения которых – дискретное множество*. Простейшим (но нетривиальным) таким множеством является множество, состоящее из двух элементов.* Так мы и приходим к понятию булевой функции.
Определение 1 (Булева функция). Булевой функцией от n аргументов называется функция f из n-ой степени множества { 0, 1 } в множество { 0, 1 }.
Иначе говоря, булева функция – это функция, и аргументы и значение которой принадлежит множеству { 0, 1 }. Множество { 0, 1 } мы будем в дальнейшем обозначать через B.
Булеву функцию от n аргументов можно рассматривать как n-местную алгебраическую операцию на множестве B. При этом алгебра <B;W>, где W – множество всевозможных булевых функций называется алгеброй логики.
Конечность области определения функции имеет важное преимущество – такие функции можно задавать перечислением значений при различных значениях аргументов. Для того, чтобы задать значение функции от n переменных, надо определить значения для каждого из 2n наборов. Эти значения записывают в таблицу в порядке соответсвующих двоичных чисел. В результате получается таблица следующего вида:
x1 x2 ... xn-1 xn f 0 0 ... 0 0 f(0,0,...,0,0) 0 0 ... 0 1 f(0,0,...,0,1) 0 0 ... 1 0 f(0,0,...,1,0) 0 0 ... 1 1 f(0,0,...,1,1) ... ... ... ... ... ... 1 1 ... 0 0 f(1,1,...,0,0) 1 1 ... 0 1 f(1,1,...,0,1) 1 1 ... 1 0 f(1,1,...,1,0) 1 1 ... 1 1 f(1,1,...,1,1) Раз у нас есть стандартный порядок записывания наборов, то для того, чтобы задать функцию, нам достаточно выписать значения f(0,0,...,0,0), f(0,0,...,0,1), f(0,0,...,1,0), f(0,0,...,1,1),..., f(1,1,...,0,0), f(1,1,...,0,1), f(1,1,...,1,0), f(1,1,...,1,1). Этот набор называют вектором значений функции.
Таким образом, различных функций n переменных столько, сколько различных двоичных наборов длины 2n*. А их 22n.
Множество B содержит два элемента – их можно рассматривать как булевы функции от нуля (пустого множества) переменных – константу 0 и константу 1.
Функций от одной переменной четыре: это константа 0, константа 1, тождественная функция, т.е. функция, значение которой совпадает с аргументом и так называемая функция ``отрицание''. Отрицание будем обозначать символом ¬ как унарную операцию. Приведём таблицы этих четырёх функций:
x 0 x ¬ x 1 0 0 0 1 1 1 0 1 0 1 Как видим, функции от некоторого числа переменных можно рассматривать как функции от большего числа переменных. При этом значения функции не меняется при изменении этих ``добавочных'' переменных. Такие переменные называются фиктивными, в отличие от остальных – существенных.
Определение 2 (Фиктивные и существенные переменные). Переменная xi называется фиктивной (несущественной) переменной функции f(x1,···,xn), если
f(x1,···,xi-1,0,xi+1,···,xn) = f(x1,···,xi-1,1,xi+1,···,xn) для любых значений x1,···,xi-1,xi+1,···,xn. Иначе переменная xi называется существенной.Функций от двух аргументов шестнадцать. Наиболее употребимые из этих функций (только те, которые существенно зависят от обеих переменных) мы приводим в следующей таблице:
x1 x2 x1 & x2 x1 Ъ x2 x1 Йx2 x1 є x2 x1 Е x2 x1 | x2 0 0 0 0 1 0 1 0 0 1 0 1 1 1 0 1 1 0 0 1 0 1 0 1 1 1 1 1 1 0 1 1 Эти функции записываются как бинарные операции в инфиксной нотации. x1 & x2 называется конъюнкцией, x1 Ъ x2 – дизъюнкцией, x1 Й x2 – импликацией, x1 є x2 – эквивалентностью, x1 Е x2 – суммой по модулю 2, x1 | x2 – штрихом Шеффера.
Значения 0 и 1 часто интерпретируют как ``ложь'' и ``истину''. Тогда понятным становится название функции ``отрицание'' – она меняет ``ложь'' на ``истину'', а ``истину'' на ``ложь''. Отрицание читается как ``не''. Конъюнкция читается обычно как ``и'' – действительно, конъюнкция равна 1 тогда и только тогда, когда равны 1 и первая и вторая переменная.* Кроме x1& x2 часто используют обозначение x1 Щ x2 или x1 · x2 или x1x2 или min(x1,x2). Дизъюнкция читается ``или'' – дизъюнкция равна 1 тогда и только тогда, когда равны 1 первая или вторая переменная.* Импликация выражает факт, что из x1 следует x2.* Импликацию часто также обозначают x1 ® x2.
2 Суперпозиция функций
Определение 3 (Суперпозиция функций). Суперпозицией булевых функций f0 и f1,...,fn называется функция f(x1,...,xm) = f0(g1(x1,...,xm),...,gk(x1,...,xm)), где каждая из функций gi(x1, ...,xm) либо совпадает с одной из переменных (тождественная функция), либо – с одной из функций f1,...,fn.
Пример 1 (суперпозиция функций).
Функция f(x,y) = ¬(x & y) является суперпозицией функций ¬ и &. Функция g(x,y) = x Е (x Ъ y) является суперпозицией функций Е и Ъ. Функция h(x,y,z) = (x & y) Е z является суперпозицией функций Е и &. Построим таблицы этих функций.
Суперпозицию (x & y) Е (¬x Ъ ¬y) можно прочитать как ``x и y плюс не x или не y''.
Следующие соотношения могут быть проверены прямым сравнением значений функций в левой и правой части соотношения на всевозможных наборах аргументов.
- x & y = y & x
- x
Ъ y = y Ъ x- x
Е y = y Е x- x &
(y & z) = (x & y) & z- x
Ъ (y Ъ z) = (x Ъ y) Ъ z- x
Е (y Е z) = (x Е y) Е z- x
Ъ (y & z) = (x Ъ y) & (x Ъ z)- x & (y Ъ z) = (x & y) Ъ (x & z)
- ¬¬x = x
- ¬
(x & y) = ¬x Ъ ¬y- ¬
(x Ъ y) = ¬x & ¬y- x & x = x
- x & ¬x =
0- x & 0 = 0
- x & 1 = x
- x
Ъ x = x- x
Ъ ¬x = 1- x Ъ 0 = x
- x
Ъ 1 = 1- x Е y = (x & ¬y) Ъ (¬x & y)
- x Й y = ¬x Ъ y
- x
є y = (x & y) Ъ (¬x & ¬y)Автоматическое построение таблиц булевых функций
3 Двойственные функции
Симметрия элементов 0 и 1 в множестве B приводит к понятию двойственности.Определение 4 (Двойственная функция). Функция g(x1,...,xn) = ¬f(¬x1,...,¬xn) называется двойственной функцией к функции f и обозначается f* .
Пример 2 (двойственные функции).
(x & y)* = ¬(¬x & ¬y) = x Ъ y.
Предложение 1 (Двойственная к двойственной функции). Функция, двойственная к двойственной функции f равна самой функции f.
Доказательство. f*(x1,...,xn)* = (¬f(¬x1,...,¬xn))* = *
= ¬¬f(¬¬x1,...,¬¬xn) = *
= f(x1,...,xn) *
Рассмотрим, что происходит с таблицей двойственной функции. Замена набора (x1,...,xn) на (¬x1,...,¬xn) соответствует ``переворачиванию'' таблицы. Действительно, наборы (x1,...,xn) и (¬x1,..., ¬xn) расположены симметрично относительно середины таблицы. Теперь остаётся применить операцию ¬ к результату функции, т.е. поменять 0 на 1 и 1 на 0. Т.о. вектор значений функции, двойственной к исходной, получается из вектора исходной функции переворачиванием и заменой 0 на 1, а 1 на 0.
Пример 3 (вектор двойственной функции).
Функции x & y и x Ъ y, задаваемые векторами значений (0,0,0,1) и (0,1,1,1) двойственны друг к другу. Также двойственными являются x Е y и x є y, задаваемые векторами (0,1,1,0) и (1,0,0,1). Каждая из функций x и ¬x (векторы (0,1) и (1,0) соответственно) двойственна сама себе.
Теорема 1 (Принцип двойственности). Функция, двойственная к суперпозиции функций, равна суперпозиции двойственных функций. Точнее:
f0(f1,...,fm)* = f0*(f1*,...,fm*) Доказательство. f0(f1(x1,...,xn),...,fm(x1,...,xn))* =
= ¬f0(f1(¬x1,...,¬xn),...,fm(¬x1,...,¬xn)) = * = ¬f0(¬¬f1(¬x1,...,¬xn),...,¬¬fm(¬x1,...,¬xn)) = * = ¬f0(¬f1*(x1,...,xn),...,¬fm*(x1,...,xn)) = * = f0*(f1*(x1,...,xn),...,fm*(x1,...,xn)) *
4 Разложение функции по переменным
Введём обозначение:
.
xs =
м ¬x, если s=0 н о x, если s=1 Теорема 2 (Разложение в дизъюнкцию). Любую функцию f(x1,...,xm) для любого n (1 Ј n Ј m) можно представить в виде
f(x1,...,xm) = x1s1 & ... & xnsn & f(s1,...,sn,xn+1,...,xm) Доказательство. Покажем, что для любого набора значений переменных (x1,...,xn,xn+1,...,xm) значения левой и правой частей совпадают. Возьмём фиксированный набор (x1,...,xn,xn+1,...,xm). Рассмотрим выражение x1s1 & ... & xnsn. Если одно из значений xisi равно 0, то и всё выражение равно 0. Тогда и выражение x1s1 & ... & xnsn & f(s1,...,sn,xn+1,...,xm) равно 0. Единице же выражение x1s1 & ... & xnsn равно только в том случае, если s1 = x1, ..., sn = xn. При этом f(s1,...,sn,xn+1,...,xm) = f(x1,...,xn,xn+1,...,xm) Таким образом, значение правой части всегда равно равно f(x1,...,xm), то есть значению левой части.
Теорема 3 (Разложение в конъюнкцию). Любую функцию f(x1,...,xm) для любого n (1 Ј n Ј m) можно представить в виде
f(x1,...,xm) = x1¬s1 Ъ ... Ъ xn¬sn Ъ f(s1...,sn,xn+1,...,xm) Разложения по всем переменным дают суперпозицию конъюнкции, дизъюнкции и отрицания.
Следствие 1 (Совершенная дизъюнктивная нормальная форма).
Любая функция f может быть представлена в следующей форме:*
f(x1,...,xm) = x1s1 & ... & xmsm & f(s1,...,sm) = * = x1s1 & ... & xmsm Следствие 2 (Совершенная конъюнктивная нормальная форма).
Любая функция f может быть представлена в следующей форме:*
f(x1,...,xm) = x1¬s1 Ъ ... Ъ xm¬sm Таким образом, любая булева функция может быть представлена суперпозицией конъюнкции, дизъюнкции и отрицания. Разложение по всем переменным в дизъюнкцию называется совершенной дизъюнктивной нормальной формой функции, а в конъюнкцию – совершенной конъюнктивной нормальной формой.*
Совершенная дизъюнктивная и конъюнктивная нормальная формы дают способ представления булевой функции через суперпозицию конъюнкции, дизъюнкции и отрицания если у нас есть таблица значений функции.
Чтобы получить совершенную дизъюнктивную нормальную форму, надо взять все наборы, на которых значение функции равно 1 и записать для каждого из них конъюнкцию переменных и их отрицаний. Если в наборе значение переменной 0 – то переменную надо взять с отрицанием, если 1 – без отрицания. Из получившихся конъюнкций надо построить дизъюнкцию.
Чтобы получить совершенную конъюнктивную нормальную форму, надо взять все наборы, на которых значение функции равно 0 и записать для каждого из них дизъюнкцию переменных и их отрицаний. Если в наборе значение переменной 0 – то переменную надо взять без отрицания, если 1 – с отрицанием. Из получившихся дизъюнкций надо построить конъюнкцию.
Пример 4 (совершенная дизъюнктивная нормальная форма).
Построим совершенную дизъюнктивную нормальную форму функции, заданной следующей таблицей.
x y z f 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 1 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 1 Наборы, на которых функция равна 1 – это (0,1,1), (1,0,1), (1,1,0), (1,1,1). Первый набор даёт конъюнкцию ¬x & y & z, второй – x & ¬y & z, третий – x & y & ¬z, четвёртый – x & y & z. В результате получаем (¬x & y & z) Ъ (x & ¬y & z) Ъ (x & y & ¬z) Ъ (x & y & z).
Литература
- Кузнецов О.П., Адельсон-Вельский Г.М. Дискретная математика для инженера. – М.: Энергоатомиздат, 1988.
- Гаврилов С.П. Сапоженко А.А. Сборник задач по дискретной математике. – М.: Наука, 1978.
- Нефедов В.Н., Осипова В.А. Курс дискретной математики. – М.: Издательство МАИ, 1992.
- Кук Д., Бейз Г. Компьютерная математика. – М.: Наука, 1990.