Классы Поста: замкнутые классы булевых функций

Классы Поста - это особый набор замкнутых классов булевых функций, через который формулируется критерий функциональной полноты. Замкнутый класс - это множество функций, устойчивое к операции суперпозиции: если подставлять функции класса друг в друга, результат снова останется в классе. Эмиль Пост в 1921 году описал решётку всех таких классов и доказал теорему: система булевых функций полна тогда и только тогда, когда она не целиком вкладывается ни в один из пяти специальных предполных классов. Инструмент ниже соберёт по вашему выбору функций запрос и проверит, образуют ли они полную систему - то есть базис, из которого суперпозицией строится любая булева функция.
Что такое замкнутый класс
Булева функция - это отображение из набора нулей и единиц снова в ноль или единицу, то есть . Множество всех булевых функций обозначают («два» - это размер множества значений). Над функциями определена операция суперпозиции: подстановка одних функций на места аргументов других, переименование и отождествление переменных. Так из дизъюнкции и отрицания строится, например, импликация.
Класс функций называют замкнутым, если любая суперпозиция функций из снова принадлежит . Формально замыкание - это множество всех функций, выразимых через суперпозицией; класс замкнут, когда . Само множество тривиально замкнуто, как и пустой класс. Между ними лежит вся решётка промежуточных замкнутых классов, которую и описал Пост.
Понятие замыкания тесно связано с понятием полной системы: система функций полна, если её замыкание совпадает со всем , то есть . Полная система без избыточности (удаление любой функции нарушает полноту) называется базисом. Классическая пара примеров полных систем - и одиночные базисы из штриха Шеффера или стрелки Пирса.

Пять предполных классов Поста
Критерий полноты опирается на пять конкретных замкнутых классов. Каждый из них предполный (или максимальный): он не совпадает с , но добавление к нему любой не входящей в него функции порождает суперпозицией всё . Именно эти пять классов перекрывают «все способы остаться неполной системой».
Класс - функции, сохраняющие ноль. Сюда входят те , для которых . Дизъюнкция и конъюнкция сохраняют ноль, отрицание - нет. Проверяется по верхней строке таблицы истинности.
Класс - функции, сохраняющие единицу: . Проверяется по нижней строке таблицы. Конъюнкция и дизъюнкция сохраняют единицу, отрицание снова выпадает.
Класс - самодвойственные функции. Функция самодвойственна, если : инверсия всех входов инвертирует выход. Самодвойственна, например, медиана трёх переменных .
Класс - монотонные функции. Монотонность означает: если по всем аргументам набор не больше набора (покоординатно ), то . Усиление любого входа с нуля до единицы не может перевести выход с единицы в ноль. Конъюнкция и дизъюнкция монотонны, отрицание - нет.
Класс - линейные функции. Линейная функция представима полиномом Жегалкина без произведений переменных: , где - сложение по модулю два. Линейны отрицание и сложение по модулю два; конъюнкция - нет, у неё в полиноме есть член .

Теорема Поста о функциональной полноте
Главный результат формулируется удивительно компактно. Система булевых функций полна тогда и только тогда, когда она не содержится целиком ни в одном из пяти классов , , , , . Иначе говоря, для каждого из пяти классов в системе должна найтись хотя бы одна функция, не принадлежащая этому классу.
Удобный способ проверки - таблица Поста: строки соответствуют функциям системы, столбцы - пяти классам, в ячейке ставится плюс, если функция входит в класс. Система полна, когда в каждом столбце есть хотя бы одна функция вне класса, то есть ни один столбец не заполнен плюсами целиком.
Почему именно пять и почему этого достаточно - потому что каждый из них предполный (максимальный замкнутый класс, отличный от ), а любой собственный замкнутый класс содержится хотя бы в одном предполном. Если бы система целиком сидела в каком-то замкнутом классе, она сидела бы и в накрывающем его предполном - и не была бы полной. Пять перечисленных классов исчерпывают все предполные классы в .
Разбор примера: проверяем штрих Шеффера
Покажем механику на классическом одиночном базисе - штрихе Шеффера (антиконъюнкция, «И-НЕ»). Таблица истинности: на наборе функция даёт , на даёт .
Сохранение нуля: , значит функция не сохраняет ноль, . Сохранение единицы: , значит . Самодвойственность: и - инверсия входов инвертирует выход на этой паре, но проверка на остальных наборах показывает , тогда как самодвойственность требует , то есть - неверно, . Монотонность: при переходе от к значение падает с до , монотонность нарушена, . Линейность: полином Жегалкина штриха равен , в нём есть произведение , значит .
Функция не лежит ни в одном из пяти классов - значит одного штриха Шеффера достаточно для полноты. То же верно для стрелки Пирса . Эти две функции - единственные булевы функции двух переменных, образующие базис в одиночку.

Связь с решёткой Поста и предполными классами
Пять классов критерия - вершина гораздо более богатой структуры. Эмиль Пост описал полную решётку всех замкнутых классов относительно включения. Эта решётка счётна, у неё есть наибольший элемент , наименьший (класс констант и проекций) и сложная сеть промежуточных классов, многие из которых задаются бесконечными сериями условий сохранения предикатов.
Для критерия полноты важна только верхушка: предполные классы - это атомы «снизу от », максимальные собственные замкнутые классы. В их ровно пять, и это редкая удача - в логиках с тремя и более значениями ( при ) предполных классов уже бесконечно много, и аналог простого критерия Поста там не работает. Конечность системы предполных классов в двузначной логике - то, что делает теорему Поста таким удобным инструментом.
Понимание решётки помогает в смежных задачах дискретной математики: линейный класс возникает как естественная граница при работе с полиномами Жегалкина, а двойственность связывает и через инверсию входов. Те же приёмы суперпозиции и подсчёта структур встречаются и в теории графов - например, при выводе хроматического полинома графа.
Частые ошибки
- Проверяют принадлежность только нужным классам. Для полноты надо убедиться, что для каждого из пяти классов в системе есть функция вне него; пропуск даже одного столбца таблицы Поста ломает вывод.
- Путают «функция полна» и «функция не в классе». Одиночная функция образует базис, только если она выпадает сразу из всех пяти классов; принадлежность хотя бы к одному классу делает её недостаточной для полноты в одиночку.
- Считают отрицание линейным «потому что простое». Отрицание действительно линейно, но конъюнкцию по той же логике в записать нельзя - её полином Жегалкина содержит произведение.
- Забывают, что самодвойственность проверяется на всех наборах. Совпадение на паре крайних наборов не гарантирует самодвойственности; нужно проверить тождество на всей таблице.
- Смешивают замкнутость и полноту. Замкнутый класс - устойчивый к суперпозиции; полная система - та, чьё замыкание равно всему . Это разные свойства.
FAQ
Сколько всего предполных классов в двузначной логике? Ровно пять: , , , , . Именно их конечность и даёт простой критерий полноты. В -значных логиках при предполных классов бесконечно много.
Почему штрих Шеффера полон сам по себе? Потому что он не сохраняет ноль, не сохраняет единицу, не самодвойствен, не монотонен и не линеен - выпадает сразу из всех пяти классов Поста. По теореме Поста этого достаточно для полноты системы из одной функции.
Чем замкнутый класс отличается от полной системы? Замкнутый класс устойчив к суперпозиции: . Полная система - та, чьё замыкание равно всему множеству булевых функций: . Полная система не содержится целиком ни в одном собственном замкнутом классе.
Коротко
Классы Поста - это пять предполных замкнутых классов булевых функций: сохраняющие ноль , сохраняющие единицу , самодвойственные , монотонные и линейные . Замкнутый класс устойчив к суперпозиции, а система функций полна по теореме Поста тогда и только тогда, когда она не вкладывается целиком ни в один из этих пяти классов. Удобная проверка - таблица Поста: в каждом столбце должна быть хотя бы одна функция вне соответствующего класса.
Читайте также

Абстрактный класс и интерфейс: в чём отличие
Абстрактный класс и интерфейс: чем отличаются в ООП, когда наследовать поведение, а когда задавать контракт, как выбрать на примерах Java, C# и Python.

Алгоритм AdaBoost: как слабые классификаторы дают сильный
Алгоритм AdaBoost простыми словами: адаптивный бустинг, перевзвешивание объектов, формула веса классификатора, итоговый ансамбль и разбор шага на примере с формулами.

Алгоритм CatBoost: бустинг с обработкой категорий
Алгоритм CatBoost простыми словами: упорядоченный бустинг против сдвига прогноза, кодирование категориальных признаков через ordered target statistics, симметричные деревья и разбор типовых задач.