Введем обозначение: xs=x&s Ú & , где s - параметр, равный либо 0, либо 1. Составив таблицу значений для xs, убеждаемся, что
а) xs равно при s = 0 и x при s =1; б) xs=1 Û, когда x =s.
Теорема 1.1 (о разложении функции по m переменным). Каждую функцию f(x1,...,xn) алгебры логики при любом m (1 £ m £ n), можно представить в следующей форме:
где дизъюнкция берется по всевозможным наборам значений переменных x1,...,xm. Это представление называется разложением функции по m переменным x1,...,xm.
f(s1,...,sm,xm+1,...,xn) =
( принимает 2 значения: 0, и тогда вся конъюнкция обращается в 0, или 1 при xi=si ; поэтому среди 2m конъюнкций имеется только одна, не равная нулю, при x1=s1, x2=s2, ..., xm=s m)
Пусть f(x1,...,xn)¹0. Разложим эту функцию по всем n переменным:
f(x1,...,xn) = f(s1,...,sn).
Если значение f(s1,..., sn) равно нулю, то и вся конъюнкция равна 0. Составим дизъюнкцию только по тем наборам переменных, на которых f(s1,..., sn)=1:
f(x1,...,xn) . (1.2)
Такое разложение носит название совершенной дизъюнктивной нормальной формы (СДНФ).
Теорема 1.2.Каждая функция алгебры логики может быть выражена в виде формулы через отрицание, конъюнкцию и дизъюнкцию.
При f(x1,...,xn)º0 f(x1,...,xn)= . Иначе представим f в виде СДНФ (ф-ла 1.2).
Данная теорема позволяет для каждой функции построить формулу, реализующую ее в виде СДНФ: в таблице значений функции f(x1,...,xn) отмечают все строки (s1,...,sn), в которых f(s1,...,sn)=1, затем для каждой такой строки образуют логическое произведение: , после чего все полученные конъюнкции соединяют знаком дизъюнкции.
Примеры. 1) Записать СДНФ для функции xÅy. Решение. Мы имеем два набора (0, 1), (1, 0), на которых эта функция равна 1; поэтому xÅy= x0&y1 Ú x1&y0= y Ú x .
2) СДНФ для функции xy =
3) Путем ~-х преобразований привести к СДНФ выражение yÚ z.
Решение. ДНФ yÚ z не является совершенной, т.к. входящие в нее конъюнкции содержат не все три переменные, от которых зависит функция. Всякую ДНФ можно привести к СДНФ расщеплением конъюнкций с помощью логической единицы.
yÚ z = 1 y 1 Ú 1 z = (xÚ ) y ( z Ú ) Ú ( yÚ ) z =
= xyz Ú Ú xy Ú y Ú Ú z = xyz Ú yz Ú xy Ú y Ú z.
СДНФ -это логическая сумма логических произведений. Возникает вопрос: нельзя ли для булевых функций получить разложение в виде логического произведения логических сумм? Покажем, что при f(x1,...,xn)¹1 это возможно, для чего разложим двойственную к f функцию f* ( очевидно, если f ¹0, то f *¹1) в СДНФ:
f*(x1,...,xn) .
Поменяв знаки & и Ú, составим тождество для двойственных формул:
f(x1,...,xn) .
С учетом определения двойственной функции преобразуем правую часть последнего равенства: f(x1,...,xn) .
Обозначив через для 1 £ i £ n, окончательно получим
f(x1,...,xn) . (1.3)
Это выражение носит название совершенной конъюнктивной нормальной формы (СКНФ).
Примеры. 1) Запишем СКНФ для функции xÅy. Эта функция равна 0 на наборах (0,0) и (1,1); поэтому xÅy = =(х Ú y) ( Ú ).
2) СКНФ для функции x | y = Ú
3) Путем эквивалентных преобразований привести к СКНФ выражение yÚ z = (yÚ )&(yÚz). КНФ (yÚ ) & (yÚz) не является совершенной, т.к. входящие в нее дизъюнкции содержат не все три переменные, от которых зависит функция. Всякую КНФ можно привести к СКНФ расщеплением дизъюнкций с помощью логического нуля.
Итак, в качестве средства для задания булевых функций наряду с таблицами можно использовать язык формул над множеством функций, состоящих из отрицания, конъюнкции и дизъюнкции. На первый взгляд кажется, что по громоздкости язык СНФ примерно эквивалентен табличному языку. На самом деле он существенно лучше табличного языка.
Рассмотрим функцию f(x1,...,x20)=x1Úx2Ú...Úx20. Формула в правой части насчитывает 39 символов (20 символов переменных и 19 символов дизъюнкции), тогда как таблица для функции f(x1,...,x20) содержит 220 (более миллиона) строк.
Полнота. Примеры полных систем
Выше было показано, что всякая функция алгебры логики может быть выражена в виде формулы через элементарные функции , x1&x2, x1Úx2. Оказывается, что таким свойством обладают и некоторые другие системы элементарных функций.
Система функций {f1, f2,..., fk} называется функционально полной, если любая булева функция может быть записана в виде формулы через функции этой системы.
Примеры. Системы P2 - множество всех булевых функций и S2={ , x1&x2, x1Úx2}.
Теорема 1.3. Пусть даны две системы функций из P2: F={f1, f2,...} и G={g1,g2,...}, относительно которых известно, что система F полна и каждая ее функция выражается в виде формулы через функции системы G. Тогда система G также является полной.
Пусть h - произвольная функция из P2. Т.к. система F - полная, можно выразить h формулой над F, то есть h=c(f1, f2,...). По условию f1=c1(g1,g2,...), f2=c2(g1,g2,...), ... Поэтому в формуле c(f1, f2,...) можно исключить вхождения функций f1, f2,..., заменив их функциями из G:
Таким образом, произвольную формулу h удалось выразить через функции системы G, что доказывает полноту этой системы.
Опираясь на теорему 1.3, можно установить полноту еще ряда систем.
3. Система S3={ ,x1&x2} является полной. В качестве полной системы выберем S2={ ,x1&x2,x1Úx2} (см. п. 2). В соответствии с законом де Моргана, x1Úx2= .
4. Система S4={ ,x1Úx2} является полной. Аналогично п. 3 с помощью закона де Моргана выражаем конъюнкцию через дизъюнкцию и отрицание: x1&x2= .
5. Система S5={x1x2}, состоящая из одной функции - стрелки Пирса, является полной. В качестве полной выберем систему S3={ ,x1&x2}. Затем, =xx и x1&x2=(x1x1)(x2x2).
6. Система S6={x1|x2}, состоящая только из одной функции - штриха Шеффера, является полной. За полную возьмем систему S4={ ,x1Úx2}. Затем, =x|x и x1Úx2=(x1|x1)|(x2|x2).
7. Система S7={1,x1&x2,x1Åx2} является полной. За полную возьмем систему S3={ ,x1&x2}. Отрицание выразим через константу 1 и сложение по модулю 2: =xÅ1.
Формула, построенная из констант 0 и 1 и функций x1&x2 и x1Åx2 после раскрытия скобок и несложных алгебраических преобразований переходит в полином по модулю 2, который называют полиномом И.И.Жегалкина.
Пример. Общий вид полинома Жегалкина для функции трех переменных следующий:
f(x1,x2, x3)=a123x1x2x3 Å a12x1x2 Å a13x1x3 Å a23x2x3 Å a1x1 Å a2x2 Å a3x3 Å a0 ,
где a123, a12, ..., a0 - коэффициенты полинома, каждый из которых может принимать одно из двух значений - 0 или 1.
Теорема 1.4 (Жегалкина). Каждая функция из P2 может быть выражена при помощи полинома по модулю 2.
Подсчитаем общее число различных полиномов Жегалкина от n переменных. Число m различных конъюнкций равно количеству подмножеств (i1,i2,...,ik) множества {1,2...,n}, то есть m=2n (Æ соответствует a0). Каждая конъюнкция имеет коэффициент a..., который можно выбрать двумя способами (0 либо 1). В соответствии с правилом произведения число различных полиномов от n переменных, которые можно образовать из этих конъюнкций, равно 2m= (пустому подмножеству конъюнкций соответствует полином 0).
Таким образом, число всех полиномов Жегалкина от n переменных равно числу всех булевых функций от тех же переменных. Отсюда, как следствие, получаем единственность представления функций посредством полиномов Жегалкина.
Пример. Выразить x1|x2 в виде полинома Жегалкина. Ответ. x1|x2 = x1x2Å1.