Опубликован: 24.04.2007 | Доступ: свободный | Студентов: 722 / 35 | Оценка: 4.60 / 4.30 | Длительность: 25:56:00
Специальности: Программист
Лекция 1:

Логика высказываний

Теорема 5 (о полиномах Жегалкина). Всякая булева функция однозначно представляется таким полиномом.

Существование искомого полинома следует из теоремы 4, так как конъюнкция есть умножение, отрицание — прибавление единицы, а дизъюнкцию можно через них выразить (получится p+q+pq ). Надо только заметить, что степени не нужны: переменные принимают значения 0 и 1, так что x^n можно заменить на x.

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

Далее можно заметить, что полиномов столько же, сколько булевых функций, а именно 2^{2^n}. В самом деле, булева функция может принимать любое из двух значений в каждой из 2^n точек булева куба \mathbb B^n, а многочлен может включать или не включать любой из 2^n мономов. (Мономов ровно 2^n, потому что каждый моном включает или не включает любую из n переменных.) Поэтому избытка полиномов нет, и если любая функция представима полиномом, то единственным образом.

Можно и не ссылаться на сведения из алгебры и теорему 4, а дать явную конструкцию. Это удобно сделать индукцией по n. Пусть мы уже умеем представлять любую булеву функцию от n-1 аргументов с помощью полинома. Тогда \varphi(p_1,\dots,p_n) можно представить как

\varphi(p_1,\dots,p_n) = \varphi(0, p_2,\dots,p_{n})+[\varphi(0,p_2,\dots,p_{n})+\varphi(1,p_2,\dots,p_{n})]p_1
(проверьте). Остается заметить, что правую часть можно представить полиномом по предположению индукции.

Для единственности также есть другое доказательство: пусть два многочлена (имеющие степень 1 по каждой переменной) равны при всех значениях переменных. Тогда их сумма (или разность — вычисления происходят по модулю 2 ) является ненулевым многочленом (содержит какие-то мономы), но тождественно равна нулю. Так не бывает, и это легко доказать по индукции. В самом деле, любой многочлен A(p_1,\dots,p_n) можно представить в виде

A(p_1,\dots,p_n)=B(p_2,\dots,p_n)+p_1C(p_2,\dots,p_n),
где B и C — многочлены от меньшего числа переменных. Подставляя сначала p_1\hm=0, а затем p_1\hm=1, убеждаемся, что многочлены B и C равны нулю во всех точках, и потому (согласно предположению индукции) равны нулю как многочлены (не содержат мономов).

11. Пусть Fпроизвольное поле.Назовем мультилинейной функцией полином от n переменных с коэффициентами из F, в котором все показатели степеней равны либо 0, либо 1. (Таким образом, каждый моном в ней есть произведение коэффициента и некоторого набора переменных без повторений.) Будем рассматривать \mathbb B=\{0,1\} как подмножество F. Докажите, что всякая булева функция \mathbb B^n\to\mathbb B однозначно продолжается до мультилинейной функции F^n\to F, и коэффициенты мультилинейной функции можно считать целыми числами.

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

Теорема 6 (критерий Поста). Набор булевых функций является полным тогда и только тогда, когда он не содержится целиком ни в одном из пяти следующих "предполных классов":

  • монотонные функции;
  • функции, сохраняющие нуль;
  • функции, сохраняющие единицу;
  • линейные функции;
  • самодвойственные функции.

(Функция f монотонна, если она монотонно неубывает по каждому из своих аргументов. Функция f сохраняет нуль/единицу, если f(0,\dots,0)\hm=0 (соответственно f(1,\dots,1)\hm=1 ). Функция f линейна, если она представима многочленом, в котором все мономы содержат не более одной переменной. Наконец, функция f называется самодвойственной, если f(1-p_1,\dots,1-p_n)\hm=1-f(p_1,\dots,p_n).)

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

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

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

Имея отрицание и несамодвойственную функцию, легко получить константы (если их не было). В самом деле, несамодвойственность означает, что f(x_1,\dots,x_n)\hm=f(1\hm-x_1,\dots,1\hm-x_n) для каких-то значений x_1,\dots,x_n\hm\in\{0,1\}. Вместо нулевых значений переменных x_1,\dots,x_n подставим p, вместо единиц подставим \lnot p, получится одна из констант. Вторая получится отрицанием.

Теперь у нас есть константы, отрицание и нелинейная функция f(p_1,\dots,p_n). Нелинейность означает, что в ее представлении в виде многочлена есть моном, состоящий более чем из одной переменной. Пусть, например, этот моном содержит переменные p_1 и p_2. Сгруппируем члены по четырем группам и получим выражение

p_1p_2 A(p_3,\dots)+p_1B(p_3,\dots)+p_2C(p_3,\dots)+D(p_3,\dots).
При этом многочлен A(p_3,\dots) заведомо отличен от нуля, поэтому можно так подставить константы вместо p_3,\dots,p_n, чтобы первое слагаемое не обратилось в нуль. Тогда получим либо p_1p_2+d, либо p_1p_2 + p_1+d, либо p_1p_2+p_2+d, либо p_1p_2+p_1+p_2+d. Свободный член d можно менять, если нужно (у нас есть отрицание), так что получается либо p_1p_2 (конъюнкция, и все доказано), либо p_1p_2+p_1\hm=p_1(p_2+1)\hm=
p_1\land\lnot p_2 (убираем отрицание, получаем конъюнкцию, все доказано), либо p_1p_2+p_2 (аналогично), либо p_1p_2+p_1+p_2\hm= (1+p_1)(1+p_2)-1\hm=\lnot(\lnot p_1\land\lnot
p_2)\hm=p_1\lor p_2 (дизъюнкция, все доказано).