Как найти двойственную функцию: решение по шагам
Дано: булева функция . Найти: двойственную функцию , её формулу и ответ на вопрос, самодвойственна ли .
Двойственная функция получается по определению : инвертируем все аргументы и инвертируем результат. Ответ: , вектор значений 10101011, функция не самодвойственна. Калькулятор сверху строит обе таблицы для любой функции трёх переменных, а ниже тот же расчёт разобран по шагам.
Решение по шагам
Шаг 1. Таблица истинности исходной функции. Переменных три, значит наборов . Перебираем их в стандартном порядке, читая набор как двоичную запись номера строки: 000, 001, 010 и так далее до 111. Сначала считаем дизъюнкцию и отрицание , потом их конъюнкцию.
| № | x y z | |||
|---|---|---|---|---|
| 0 | 0 0 0 | 0 | 1 | 0 |
| 1 | 0 0 1 | 0 | 0 | 0 |
| 2 | 0 1 0 | 1 | 1 | 1 |
| 3 | 0 1 1 | 1 | 0 | 0 |
| 4 | 1 0 0 | 1 | 1 | 1 |
| 5 | 1 0 1 | 1 | 0 | 0 |
| 6 | 1 1 0 | 1 | 1 | 1 |
| 7 | 1 1 1 | 1 | 0 | 0 |
Вектор значений записываем сверху вниз: 00101010. Если построение таблицы само по себе вызывает вопросы, порядок заполнения столбцов подробно разобран в задаче как построить таблицу истинности.
Шаг 2. Находим противоположные наборы. Инверсия всех переменных переводит набор 000 в 111, набор 001 в 110 и так далее. В нумерации строк это означает переход от строки к строке : противоположные наборы стоят симметрично относительно середины таблицы. Поэтому искать их не нужно, достаточно читать вектор снизу вверх.
Шаг 3. Инвертируем результат. По определению значение на наборе берётся со строки-зеркала и меняется на противоположное:
| № | x y z | зеркальный набор | на нём | ||
|---|---|---|---|---|---|
| 0 | 0 0 0 | 0 | 1 1 1 | 0 | 1 |
| 1 | 0 0 1 | 0 | 1 1 0 | 1 | 0 |
| 2 | 0 1 0 | 1 | 1 0 1 | 0 | 1 |
| 3 | 0 1 1 | 0 | 1 0 0 | 1 | 0 |
| 4 | 1 0 0 | 1 | 0 1 1 | 0 | 1 |
| 5 | 1 0 1 | 0 | 0 1 0 | 1 | 0 |
| 6 | 1 1 0 | 1 | 0 0 1 | 0 | 1 |
| 7 | 1 1 1 | 0 | 0 0 0 | 0 | 1 |
Вектор двойственной функции: 10101011. Короткое правило видно сразу: вектор переворачивается задом наперёд и каждый разряд инвертируется.
Шаг 4. Записываем формулу двойственной функции. Единицы стоят на наборах 000, 010, 100, 110 и 111. Первые четыре отличаются только значениями и , а в них равен нулю, так что они склеиваются в одно слагаемое . Остаётся набор 111, то есть конъюнкция , и она поглощается вместе с по правилу :
Шаг 5. Проверяем самодвойственность. Сравниваем вектор = 00101010 и вектор = 10101011 разряд за разрядом. Совпадений шесть, расхождения два: строки 000 и 111. На этой паре противоположных наборов исходная функция даёт одно и то же значение, , а самодвойственность требует, чтобы значения были разными.
Ответ: с вектором значений 10101011; функция не самодвойственна, контрпример - пара наборов 000 и 111.
Формула и откуда она берётся
Определение двойственной функции выглядит так: для булевой функции от переменных
Здесь черта над переменной означает её отрицание, а внешняя черта - отрицание всего результата. Операция ровно из двух шагов: сначала подменяем входы противоположными, потом переворачиваем выход.
Именно из этого определения и вытекает работа с вектором. Набор, противоположный набору с номером , имеет номер , потому что инверсия каждого бита равна дополнению числа до единиц во всех разрядах. Значит, значение в строке лежит в строке вектора , остаётся только его инвертировать. Никаких вычислений по формуле при этом не требуется: достаточно готовой таблицы.
Двойственность обратима. Применим определение дважды: . То есть функция, двойственная к двойственной, совпадает с исходной, и пары функций всегда двойственны друг другу взаимно. Полезное следствие для самопроверки: если вы нашли , примените ту же процедуру к ответу - должна вернуться .
Двойственная формула без таблицы: замена операций
Когда функция задана формулой, таблицу можно не строить. Двойственная формула получается заменой каждой операции на двойственную ей: конъюнкция меняется на дизъюнкцию, дизъюнкция на конъюнкцию, константа 0 на 1 и наоборот. Отрицания и сами переменные остаются на своих местах, скобки сохраняются.
Проверим правило на нашем примере: в формуле меняем внешнюю конъюнкцию на дизъюнкцию, внутреннюю дизъюнкцию на конъюнкцию и получаем - ровно тот ответ, который дала таблица. Отрицание не трогаем: двойственность меняет операции связывания, а не отрицание.
Основание у правила - законы де Моргана. Раскроем определение для дизъюнкции: . Для конъюнкции симметрично: . А отрицание двойственно само себе, потому что . Дальше работает индукция по построению формулы: двойственная к суперпозиции есть суперпозиция двойственных.
Отсюда же следует принцип двойственности: если две формулы равносильны, то равносильны и двойственные к ним. Поэтому в алгебре логики законы идут парами - распределительный закон для конъюнкции и для дизъюнкции, два закона поглощения, два закона де Моргана. Выводить вторую половину каждой пары не нужно, она получается автоматически. Этим удобно пользоваться при упрощении логических выражений: доказав одно тождество, вы бесплатно получаете двойственное.
Самодвойственные функции и класс S
Функцию называют самодвойственной, если , то есть векторы значений совпали. Развернём условие: на любой паре противоположных наборов функция обязана принимать противоположные значения, . Проверка сводится к четырём сравнениям для трёх переменных: строка 0 против строки 7, строка 1 против строки 6, строка 2 против строки 5, строка 3 против строки 4.
Такое описание сразу даёт и счёт. Вектор длины разбивается на зеркальных пар, в каждой верхнее значение выбирается свободно, а нижнее определено однозначно. Значит, самодвойственных функций от переменных ровно : для трёх переменных это 16 функций из 256.
Классические представители - отрицание , тождественная функция , медиана и сумма по модулю два от нечётного числа переменных. Все они есть среди готовых чипов калькулятора сверху: выберите медиану, и подсветка расхождений пропадёт, а счётчик покажет ноль. Самодвойственные функции образуют замкнутый класс - один из пяти предполных классов в критерии полноты, о которых подробно написано в статье про классы Поста.
Частые ошибки
- Инвертируют только аргументы и забывают внешнее отрицание. Получается не , а функция , у которой вектор просто перевёрнут. Внешняя черта обязательна.
- Меняют отрицания над переменными. При переходе к двойственной формуле заменяются только конъюнкции, дизъюнкции и константы. Запись остаётся как есть.
- Забывают про константы. Если в формуле есть 0 или 1, они тоже меняются местами: например, двойственная к будет .
- Считают самодвойственной любую функцию с равным числом нулей и единиц. Баланс необходим, но не достаточен: важно, чтобы противоположные значения стояли именно в зеркальных парах строк.
- Переносят свойство с нечётного числа переменных на чётное. Сумма по модулю два от трёх переменных самодвойственна, а от двух нет: двойственной к оказывается эквивалентность .
- Сбивают порядок наборов. Если таблица заполнена не в порядке двоичных чисел, зеркальные строки перестают быть симметричными, и переворот вектора даёт неверный ответ.
FAQ
Чем двойственная функция отличается от отрицания функции? Отрицание меняет только выход: имеет вектор с инвертированными разрядами в тех же строках. Двойственная функция дополнительно переставляет строки зеркально. Совпадают эти операции лишь тогда, когда не зависит от переменных по существу.
Как быстро найти двойственную функцию, если дан только вектор значений? Прочитайте вектор справа налево и инвертируйте каждый разряд. Для вектора 00101010 обратный порядок даёт 01010100, после инверсии получается 10101011 - это и есть вектор .
Сколько единиц у двойственной функции? Столько же, сколько нулей у исходной. Перестановка строк количество значений не меняет, а инверсия меняет нули на единицы: в примере у три единицы, у их пять.
Двойственна ли функция сама себе, если она задана СДНФ? Форма записи роли не играет, самодвойственность - свойство самой функции. Но по совершенной дизъюнктивной нормальной форме её видно быстро: наборы с единицами не должны содержать ни одной зеркальной пары, при этом их ровно половина от общего числа. Как строится сама форма, разобрано в материале про СДНФ.
Коротко
- По определению : инвертировать аргументы и инвертировать результат.
- На векторе значений это переворот вектора задом наперёд плюс инверсия каждого разряда; строка берётся из строки .
- По формуле - замена конъюнкции на дизъюнкцию, дизъюнкции на конъюнкцию, 0 на 1 и обратно; переменные и отрицания не трогаем.
- Для вектор 00101010 даёт 10101011, то есть .
- Функция самодвойственна, когда , то есть на каждой паре противоположных наборов значения разные; у нашей пара 000 и 111 даёт одинаковые нули, поэтому она не самодвойственна.
Похожие задачи
Как найти полином Жегалкина: решение по шагам
Как найти полином Жегалкина булевой функции по вектору значений 10011110: треугольник Паскаля, метод неопределённых коэффициентов, проверка подстановкой и вывод о линейности.
Дискретная математикаКак составить СКНФ по таблице: пошаговое решение
СКНФ по таблице истинности: разбор задачи с числами. Строки с нулём дают макстермы, отрицание ставится на единицах, ответ проверяется подстановкой. Внутри калькулятор и сравнение с СДНФ.
Дискретная математикаКак найти матрицу инцидентности графа: пошаговое решение
Как найти матрицу инцидентности графа: строки вершины, столбцы рёбра, пошаговый разбор примера на 5 вершинах и 6 рёбрах, знаки для орграфа, проверка по степеням вершин и связь с матрицей смежности.
Дискретная математикаКак найти мощность множества: пошаговое решение
Как найти мощность множества: разбор задачи о 30 студентах по формуле включений исключений, мощность булеана 2 в степени n, счётные и континуальные множества, частые ошибки.
Дискретная математикаКак построить карту Карно: решение по шагам
Как построить карту Карно на четыре переменные: разметка осей кодом Грея, перенос единиц из таблицы истинности, склейка соседних клеток в группы и запись МДНФ с проверкой.
Дискретная математикаКак упростить логическое выражение: решение по шагам
Как упростить логическое выражение по законам алгебры логики: де Морган, распределительный закон, склеивание и поглощение. Пошаговый разбор примера и проверка ответа таблицей.