Сокращенные
таблицы истинности
[предыдущая глава]  [оглавление]  [следующая глава]

Составление таблицы истинности кажется наиболее надежным методом проверки разных булевых формул в том смысле, что этот процесс довольно примитивен. Одно плохо: при большом количестве переменных или большом количестве операций в формуле этот процесс требует много времени. Можно ли как-нибудь ускорить это дело? Да, можно.

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

Составим сокращенную таблицу для формулы

(A B) ((A (B C)) (A ~C))

Для начала нарисуем заготовку. В ней заполним ячейки только для одной переменной, скажем, A:

ABC 
false???
true???

Зафиксируем A = false ("зафиксируем" - значит пока будем рассматриватьтолько те случаи, когда переменная A = false). Подставим false вместо A в формулу и выполним упрощения по законам поглощения:

(A B) ((A (B C)) (A ~C)) = (false B) ((false (B C)) (false ~C)) = true ((false (B C)) (false ~C)) = (false (B C)) (false ~C) = true (false ~C) = true true = true

То есть, когда A = false, формула всегда дает true, независимо от значений остальных переменных. Запишем это, обозначив значения остальных переменных звездочками.

ABC 
false**true
true???

Зафиксируем теперь A = true. Подставим true вместо A в формулу и выполним упрощения по законам поглощения:

(A B) ((A (B C)) (A ~C)) = (true B) ((true (B C)) (true ~C)) = B ((true (B C)) (true ~C)) = B ((B C) (true ~C)) = B ((B C) ~C)

Формула получилась по-проще, но не константа. Подготовим таблицу к рассмотрению обоих случаев для B.

ABC 
false**true
truefalse??
truetrue??

Фиксируем B = false:

B ((B C) ~C) = false ((false C) ~C) = true

Вписываем:

ABC 
false**true
truefalse*true
truetrue??

Фиксируем B = true:

B ((B C) ~C) = true ((true C) ~C) = (true C) ~C = C ~C = ~C

Не константа. Готовим таблицу:

ABC 
false**true
truefalse*true
truetruetrue?
truetruefalse?

Заполняем оставшиеся ячейки таблицы, вычисляя ~C.

ABC 
false**true
truefalse*true
truetruetruefalse
truetruefalsetrue

Замечание. Какую переменную фиксировать первой? Лучше всего ту, которая сильнее всего упростит формулу, благодаря законам поглощения. А это более вероятно для тех переменных, которые в формулах встречаются чаще других. Также это более вероятно для переменных, операции над которыми выполняются последними.