EssayAI
Блог
Блог

Как составить СКНФ по таблице: пошаговое решение

Запрос

Дано: булева функция F(A,B,C)F(A,B,C), заданная таблицей истинности, столбец значений 1 1 0 1 0 1 0 1 по наборам от 000 до 111. Найти: совершенную конъюнктивную нормальную форму и проверить её подстановкой набора 110.

Преобразовывать формулу не придётся: СКНФ читается прямо из таблицы. Берём только строки, где функция равна нулю, каждую превращаем в дизъюнкцию всех трёх переменных и соединяем полученные скобки конъюнкцией. Нулевых строк здесь три, значит и сомножителей в ответе будет три: F=(A∨¬B∨C)∧(¬A∨B∨C)∧(¬A∨¬B∨C)F = (A \vee \neg B \vee C) \wedge (\neg A \vee B \vee C) \wedge (\neg A \vee \neg B \vee C).

Калькулятор сверху построен на этих же данных. Щёлкни по любому значению столбца F, и таблица пересоберётся вместе с формулой: подсветятся новые нулевые строки, а справа от каждой появится её сомножитель.

Решение по шагам

Шаг 1. Пронумеровать строки и найти нули. Переменных три, поэтому строк ровно 23=82^3 = 8. Номер строки и есть её набор в двоичной записи: строка 0 это 000, строка 6 это 110. Столбец значений из условия раскладывается так:

№AABBCCFFМакстерм строки
00001не берём
10011не берём
20100A∨¬B∨CA \vee \neg B \vee C
30111не берём
41000¬A∨B∨C\neg A \vee B \vee C
51011не берём
61100¬A∨¬B∨C\neg A \vee \neg B \vee C
71111не берём

Нули стоят в строках с номерами 2, 4 и 6, то есть на наборах 010, 100 и 110. Остальные пять строк для СКНФ не нужны совсем.

Шаг 2. Записать правило перевода строки в макстерм. Для каждой нулевой строки составляется полная дизъюнкция всех переменных функции, по одному литералу на переменную. Литерал берётся с отрицанием, если в этой строке переменная равна единице, и без отрицания, если равна нулю. Такую дизъюнкцию называют макстермом или конституентой нуля.

Шаг 3. Перевести нулевые строки. Набор 010: у AA стоит ноль, значит литерал AA; у BB единица, значит ¬B\neg B; у CC ноль, значит CC. Получается A∨¬B∨CA \vee \neg B \vee C. Набор 100 даёт ¬A∨B∨C\neg A \vee B \vee C, набор 110 даёт ¬A∨¬B∨C\neg A \vee \neg B \vee C.

Шаг 4. Соединить макстермы конъюнкцией. Порядок сомножителей значения не имеет, но привычнее выписывать их по возрастанию номера строки:

F=(A∨¬B∨C)∧(¬A∨B∨C)∧(¬A∨¬B∨C).F = (A \vee \neg B \vee C) \wedge (\neg A \vee B \vee C) \wedge (\neg A \vee \neg B \vee C).

Шаг 5. Проверить подстановкой. Возьмём набор 110, то есть A=1A = 1, B=1B = 1, C=0C = 0. Первый сомножитель: 1∨0∨0=11 \vee 0 \vee 0 = 1. Второй: 0∨1∨0=10 \vee 1 \vee 0 = 1. Третий: 0∨0∨0=00 \vee 0 \vee 0 = 0. Вся конъюнкция обращается в ноль, а в таблице на строке 6 как раз F=0F = 0 - сходится.

Для контроля проверим и единичную строку, например 011: сомножители дают 0∨0∨1=10 \vee 0 \vee 1 = 1, 1∨1∨1=11 \vee 1 \vee 1 = 1 и 1∨0∨1=11 \vee 0 \vee 1 = 1, произведение равно единице, в таблице там тоже стоит единица.

Ответ: F=(A∨¬B∨C)∧(¬A∨B∨C)∧(¬A∨¬B∨C)F = (A \vee \neg B \vee C) \wedge (\neg A \vee B \vee C) \wedge (\neg A \vee \neg B \vee C), в числовой записи F=∏M(2,4,6)F = \prod M(2, 4, 6).

Формула и откуда берётся правило отрицания

Правило «отрицание на единицах» выглядит вывернутым наизнанку ровно до тех пор, пока не посмотреть, что должен делать один макстерм. Дизъюнкция ложна в единственном случае: когда ложны все её слагаемые. Значит макстерм, собранный по строке σ\sigma, обязан обратиться в ноль именно на наборе σ\sigma и остаться единицей на всех остальных семи наборах.

Чтобы литерал переменной AA стал нулём на наборе, где A=1A = 1, его нужно взять с отрицанием: ¬A\neg A при A=1A = 1 даёт ноль. А если в строке A=0A = 0, то нулём становится сама переменная без отрицания. Отсюда и зеркальность по отношению к минтерму.

В общем виде для функции nn переменных макстерм строки σ=(σ1,…,σn)\sigma = (\sigma_1, \dots, \sigma_n) записывается через степенное обозначение литерала xσx^{\sigma} , где x1=xx^1 = x и x0=¬xx^0 = \neg x:

Mσ=x1σ1‾∨x2σ2‾∨⋯∨xnσn‾,F=⋀σ: F(σ)=0Mσ.M_{\sigma} = x_1^{\overline{\sigma_1}} \vee x_2^{\overline{\sigma_2}} \vee \dots \vee x_n^{\overline{\sigma_n}}, \qquad F = \bigwedge_{\sigma:\, F(\sigma) = 0} M_{\sigma}.

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

Чем СКНФ отличается от СДНФ

Обе формы читаются из одной таблицы, но по разным строкам и с разными знаками. Для совершенной дизъюнктивной формы берут строки с единицей, из каждой строят конъюнкцию (минтерм) и ставят отрицание там, где в строке ноль; подробный разбор этого построения есть в статье про СДНФ. Для СКНФ всё зеркально: строки с нулём, дизъюнкция вместо конъюнкции, отрицание на единицах.

Сравним на нашей функции. Единиц в столбце пять, поэтому СДНФ состоит из пяти минтермов и содержит 5⋅3=155 \cdot 3 = 15 литералов, а СКНФ из трёх макстермов и 3⋅3=93 \cdot 3 = 9 литералов. Правило простое: короче та форма, которой соответствует меньшее число строк. Если нулей в столбце меньше половины, выгоднее СКНФ, если меньше половины единиц, то СДНФ.

Удобна и числовая запись: наша функция это ∏M(2,4,6)\prod M(2, 4, 6) для конъюнктивной формы и ∑m(0,1,3,5,7)\sum m(0, 1, 3, 5, 7) для дизъюнктивной. Номера в двух списках дополняют друг друга до полного набора от 0 до 7, потому что каждая строка таблицы попадает ровно в один из них.

Если функция задана формулой, а не столбцом

Тогда добавляется нулевой шаг: по формуле строится таблица истинности, а дальше всё как выше. Столбец из условия соответствует формуле F=(A∨B)→CF = (A \vee B) \to C. Импликация ложна только при истинной посылке и ложном следствии, то есть когда A∨B=1A \vee B = 1 и C=0C = 0: это наборы 010, 100 и 110, те самые три нулевые строки.

Заполнять таблицу лучше по промежуточным столбцам, а не считать формулу целиком в уме; порядок действий и разбор приоритета операций разобраны в задаче как построить таблицу истинности. Ошибка в одной клетке столбца FF тихо меняет ответ: лишний ноль добавит в СКНФ лишний сомножитель, пропущенный ноль отнимет нужный.

Проверка эквивалентности и упрощение

Совершенные формы канонические, поэтому они дают самый прямой способ проверить равносильность двух формул: строишь для каждой таблицу, выписываешь СКНФ и сравниваешь. Совпали с точностью до порядка скобок - формулы равносильны, разошлись хотя бы одним макстермом - нет. Например, для (¬A∧¬B)∨C(\neg A \wedge \neg B) \vee C таблица даёт те же нули на наборах 010, 100 и 110, значит эта формула равносильна нашей.

Сама СКНФ почти никогда не минимальна. Второй и третий сомножители отличаются только знаком при BB, поэтому склеиваются в ¬A∨C\neg A \vee C; первый и третий отличаются знаком при AA и дают ¬B∨C\neg B \vee C. Минимальная КНФ получается вдвое короче: (¬A∨C)∧(¬B∨C)(\neg A \vee C) \wedge (\neg B \vee C). Склейка макстермов делается теми же приёмами, что и склейка минтермов, в карте Карно или упрощением логического выражения.

Частые ошибки

  • Берут строки с единицей. Это самая частая путаница: для СКНФ нужны нулевые строки, единичные работают на СДНФ.
  • Ставят отрицание на нулях. В макстерме отрицание идёт туда, где в строке стоит единица. Проверка за одну секунду: подставь набор своей строки в свою же скобку, должен получиться ноль.
  • Пишут конъюнкцию внутри скобки, а дизъюнкцию между скобками. Внутри макстерма только ∨\vee, между макстермами только ∧\wedge; перепутанные знаки превращают ответ в СДНФ чужой функции.
  • Теряют переменную. Форма называется совершенной именно потому, что каждая скобка содержит все nn переменных ровно по одному разу. Скобка A∨CA \vee C без BB это уже не макстерм, а элемент обычной КНФ.
  • Сокращают ответ по ходу дела. Склеивать сомножители можно только после того, как СКНФ выписана целиком, иначе проверить её по таблице уже нельзя.
  • Забывают случай тождественной истины. Если нулей в столбце нет, СКНФ не существует, и правильный ответ звучит именно так, а не «формула пустая».

FAQ

Чем макстерм отличается от минтерма? Минтерм это конъюнкция всех переменных, он равен единице ровно на одном наборе. Макстерм это дизъюнкция всех переменных, и он равен нулю ровно на одном наборе. Первый строится по строке с единицей, второй по строке с нулём, и правила расстановки отрицаний у них противоположны.

Сколько сомножителей должно получиться? Ровно столько, сколько нулей в столбце значений. Для функции nn переменных это число от 0 до 2n2^n: при нуле СКНФ не существует (функция тождественно истинна), при 2n2^n конъюнкция гасит все наборы и функция тождественно ложна.

Можно ли получить СКНФ, не строя таблицу? Да, равносильными преобразованиями: снять импликации, загнать отрицания к переменным по законам де Моргана, раскрыть по дистрибутивному закону до КНФ и дополнить неполные скобки выражением вида x∧¬xx \wedge \neg x. Путь через таблицу короче и почти не даёт ошибок, поэтому в контрольных обычно требуют именно его.

Зачем нужна СКНФ, если она длиннее минимальной формы? Она каноническая: у равносильных функций она совпадает буква в букву. На этом держатся проверка равносильности, сравнение схем и стартовая форма для минимизации, а ещё перевод функции в базис ИЛИ-НЕ. Если нужна не каноническая, а компактная запись, посмотри на полином Жегалкина как на ещё одну каноническую форму.

Коротко

  1. Построй или выпиши таблицу истинности и отметь строки, где F=0F = 0.
  2. Каждую такую строку переведи в макстерм: дизъюнкция всех переменных, отрицание ставится там, где в строке стоит единица.
  3. Соедини все макстермы знаком конъюнкции, порядок скобок роли не играет.
  4. Проверь подстановкой: на своём наборе макстерм должен давать ноль, на чужих единицу.
  5. Для столбца 1 1 0 1 0 1 0 1 ответ равен F=(A∨¬B∨C)∧(¬A∨B∨C)∧(¬A∨¬B∨C)F = (A \vee \neg B \vee C) \wedge (\neg A \vee B \vee C) \wedge (\neg A \vee \neg B \vee C), то есть ∏M(2,4,6)\prod M(2, 4, 6).
Задача в тетради или методичке? Сфотографируйте условие - сервис распознает его и решит по шагам с пояснениями.

Похожие задачи

Дискретная математика

Как построить таблицу истинности: пошаговое решение

Как построить таблицу истинности логической формулы: сколько получится строк, в каком порядке перебирать наборы значений, как заполнять промежуточные столбцы и проверять итог.

Дискретная математика

Как найти двойственную функцию: решение по шагам

Как найти двойственную функцию булевой алгебры: определение через отрицание аргументов и результата, вектор значений наоборот, замена операций в формуле и проверка на самодвойственность.

Дискретная математика

Как найти матрицу инцидентности графа: пошаговое решение

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

Дискретная математика

Как найти мощность множества: пошаговое решение

Как найти мощность множества: разбор задачи о 30 студентах по формуле включений исключений, мощность булеана 2 в степени n, счётные и континуальные множества, частые ошибки.

Дискретная математика

Как найти полином Жегалкина: решение по шагам

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

Дискретная математика

Как построить карту Карно: решение по шагам

Как построить карту Карно на четыре переменные: разметка осей кодом Грея, перенос единиц из таблицы истинности, склейка соседних клеток в группы и запись МДНФ с проверкой.