МатВектор

Command Palette

Search for a command to run...

🔀 Дискретка30 минСложность 3/5+65 XP

Булевы функции и полином Жегалкина: единственная нормальная форма

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

2 интерактива3 квизаУрок 6 из 20Обновлено 05.10.2026Обычный

Инженер собирает схему из элементов «И-НЕ»: два вида работы — отрицание и конъюнкция — покрывают всё. Возникает неудобный вопрос: а из чего собирает математик? Если разрешить только сложение по модулю 2 и умножение, выйдет ли полноценная арифметика логики? Ответ: да, выйдет, и даже лучше, чем в ДНФ — каждая функция получит единственную запись. Эту запись называют полиномом Жегалкина, и она сидит внутри самых разных вещей: от контрольных сумм из урока об основах кодирования до криптографии, где линейность полинома меряется буквально, потому что линейная функция вскрывается проще нелинейной.

Сколько вообще булевых функций#

Булева функция принимает аргументы из и возвращает 0 или 1. Таблица истинности из столбцов переменных имеет строк — по строке на каждый входной набор, и в каждой строке значение выбирается из двух вариантов. Отсюда арифметика: функций от переменных ровно . При их шестнадцать — все были разложены по полочкам ещё в уроке о булевой алгебре; при — уже 256, а при — более триллиона. Писать для каждой свою формулу бессмысленно, нужны стандартные формы.

Одна из них вам уже знакома — дизъюнктивная нормальная форма: дизъюнкция конъюнкций, по одному слагаемому на каждую строку таблицы с единицей. СДНФ честно воспроизводит функцию, но у неё есть дефект: она не единственная. Функцию XOR можно записать как , а можно упростить до — и обе записи «правильные». Для сравнения схем, для автоматических доказательств и для криптографии нужна форма, которая у каждой функции одна. Такой формой и оказывается многочлен.

Что такое полином Жегалкина#

Сумма по модулю 2 одночленов; каждая переменная входит в одночлен не выше первой степени, константа допустима

Это обычный многочлен, но арифметика — модульная. Сложение — XOR: . Умножение — обычное И: . Отрицаний нет, степеней выше первой нет — и быть не может, ведь : квадрат переменной в мире нулей и единиц равен самой переменной. Именно это правило убивает все высшие степени и делает число возможных многочленов конечным: для каждой из комбинаций переменных одночлен либо есть, либо нет. Многочленов ровно — столько же, сколько функций. Гадать не приходится: если различных объектов поровну и каждый многочлен задаёт какую-то функцию, то соответствие взаимно однозначно. Единственность полинома доказывается без единой строки вычислений.

Мостом между привычными операциями и полиномиальным миром служат три тождества — их достаточно, чтобы перевести любую формулу:

  • — дизъюнкция равна сумме минус произведение (проверьте на четырёх наборах: совпадение на трёх, а на двойная единица схлопывается в ноль, и остаётся )
  • — отрицание это прибавление единицы; в мире по модулю 2 знак минус неотличим от плюса
  • — импликация тоже раскладывается, хотя на вид кажется далёкой от многочленов

Дальше механика: заменить в ДНФ каждую связку по этим правилам, раскрыть скобки (дистрибутивность И над XOR работает, как в школьной алгебре), собрать повторяющиеся одночлены парами и вычеркнуть — .

Способ первый: алгебра, раскрытие скобок#

Возьмём функцию мажоритарного голосования — она равна 1, когда хотя бы два из трёх аргументов равны 1. Такое устройство стоит в тройных системах дублирования: два канала против одного. В ДНФ она записывается как — три слагаемых, каждый голос в паре. Переводим: дизъюнкция трёх слагаемых раскладывается итеративно, каждое заменяется по правилу выше. Раскрытие скобок даёт шесть одночленов-произведений (все пары возникают дважды), пары гасятся по чётности, и остаётся элегантный итог:

Мажоритарная функция: ровно три одночлена второй степени, константа и линейные члены нулевые

Способ быстрый, но требует алгебраической аккуратности: на четырёх-пяти переменных скобки распухают, и потерять слагаемое проще, чем его найти. Для контрольных работ и самопроверки существует второй путь — систематический.

Способ второй: метод неопределённых коэффициентов#

Выпишем полином с восемью неизвестными коэффициентами — по одному на каждую возможную комбинацию переменных :

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

Метод выигрывает в надёжности: он не требует ни формулы-исходника, ни знания ДНФ — только таблицу. Именно таблица и есть полный паспорт функции, а полином — её сжатая портретная карточка. Для функций с большим числом переменных оба пути механизируются: коэффициенты метода — это в точности биты преобразования Уолша—Адамара, и вся процедура сводится к быстрому преобразованию, которое работает за операций.

Линейные функции: полином без произведений#

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

Практический тест на линейность без построения полного полинома: производная по паре переменных. В обычном анализе смешанная вторая производная нелинейного члена не нулевая; здесь то же самое на пальцах — возьмите функцию на двух наборах, различающихся ровно в и одновременно. У линейной функции эффекты двух переменных складываются независимо, и разность значений на «диагональной» паре определяется линейными членами. Быстрее всего нелинейность ловится прямым сравнением: посчитайте на четырёх наборах из квадрата при фиксированных остальных и проверьте, раскладывается ли этот фрагмент в . Если нет — где-то спрятано произведение.

Почему за линейностью следят? Во-первых, по теореме Поста из булевой алгебры класс линейных функций не полон: из одних XOR-сумм не собрать ни конъюнкцию, ни запертую систему — значит, не собрать и вычислитель. Во-вторых, в криптографии шифры стараются строить так, чтобы выход не был линейной функцией входа: линейность для криптоаналитика — открытая дверь, взлом сводится к решению системы уравнений. Существуют даже специально «предельно нелинейные» функции — бент-функции, у которых полином содержит произведения максимальной плотности.

Полином Жегалкина полезен и как инструмент сравнения схем: две формулы задают одну функцию тогда и только тогда, когда их полиномы совпали. Пришла пара кандидаток из оптимизатора схем? Приведите обе к Жегалкину — разошлись, значит, функции разные. Тот же критерий работает для проверки эквивалентности логических формул в логике высказываний, только там удобнее сравнивать таблицы; полином экономнее — он короче таблицы.

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

Частые промахи при построении полинома: первый — забыть правило и оставить «квадраты»; второй — при замене дизъюнкции потерять произведение , записав (это XOR, а не ИЛИ — на наборе они расходятся); третий — в методе коэффициентов решать строки в случайном порядке и упираться в систему из нескольких уравнений. Итоговую шпаргалку темы удобно держать в голове списком:

  • Полином Жегалкина — сумма по модулю 2 одночленов без отрицаний и степеней выше первой; у каждой функции он ровно один
  • Три тождества-переводчика: , ,
  • Метод коэффициентов: строки таблицы от нулевого набора вверх, каждый коэффициент выписывается независимо
  • Линейные функции — штук; их класс не полон, а в шифрах линейность — уязвимость
Проверь себя+10 XP

Чему равен полином Жегалкина функции XOR, ?

Проверь себя+10 XP

Сколько линейных булевых функций от трёх переменных?

Проверь себя+10 XP

Функция (конъюнкция) — линейная?

Частые вопросы

Почему полином Жегалкина единственный?

Счётное рассуждение: одночлен определяется подмножеством переменных, для переменных подмножеств , и каждый входит или нет — всего различных полиномов. Ровно столько же булевых функций от переменных. Каждый полином задаёт какую-то функцию (подставь значения — посчитай), значит, функций и полиномов поровну, и два разных полинома не могут описывать одну функцию — иначе каких-то функций не хватило бы.

Как быстро проверить, линейна ли функция?

Постройте полином и посмотрите на коэффициенты при произведениях. Для ручной проверки хватит фрагмента таблицы: зафиксируйте все переменные, кроме двух, и сравните значения на четырёх наборах из . Если функция линейна, четвёрка значений всегда имеет вид — сумма первой и четвёртой равна сумме второй и третьей.

Чем полином Жегалкина лучше СДНФ?

Единственностью и компактностью. СДНФ зависит от того, как вы упрощали формулу, — разных СДНФ у одной функции сколько угодно, сравнивать их бессмысленно. Полином один, он служит канонической формой: совпали полиномы — совпали функции. Кроме того, в нём нет отрицаний, что упрощает автоматические преобразования и аппаратную реализацию.

Что делать с отрицанием при переводе из ДНФ?

Заменить его первым же тождеством: , и дальше работать как обычно. Двойное отрицание автоматически сократится: . Единственная ловушка — не путать «минус один» с «плюс один»: в арифметике по модулю 2 это одно и то же, поэтому вычитание одночлена означает его добавление, а повторное появление одночлена гасит его пару.

Готовитесь к контрольной?

Чеклист тем по «Дискретка»: что вы уже умеете, что повторить и в каком порядке.

Открыть чеклист предмета →

Проверьте себя в бою

Босс-экзамен по «Дискретка»: квизы всех уроков плюс бесконечный поток сгенерированных задач. Каждая попытка — новый расклад.

Начать босс-экзамен →