Министерство образования и науки Российской Федерации Костромской государственный технологический университет

advertisement
Министерство образования и науки Российской Федерации
Костромской государственный технологический университет
А.В. Чередникова, И.В. Землякова
Алгебра логики
Рекомендовано редакционно-издательским советом университета
в качестве учебного пособия
Кострома
КГТУ
2014
УДК 517.11
Чередникова, А.В. Алгебра логики: учеб. пособие / А.В. Чередникова,
И. В. Землякова. – Кострома: Изд-во Костром. гос. технол. ун-та, 2014. – 71 с.
В учебном пособии представлены основы алгебры логики. Доступное и
наглядное изложение теоретического материала сопровождается большим количеством поясняющих примеров и подробным решением типовых задач.
Пособие предназначено для студентов бакалавриата по направлению подготовки 090900 «Информационная безопасность», 230100 «Информатика и
вычислительная техника» и 230400 «Информационные системы и технологии».
Рецензенты: кафедра алгебры и геометрии
КГУ им. Н.А. Некрасова;
кандидат физ.-мат. наук, доцент
А.В. Сидоров
© Костромской государственный технологический университет, 2014
2
Оглавление
Предисловие ................................................................................................................ 4
Глава I. Логика высказываний ............................................................................. 5
1.1. Высказывания и логические операции над ними ............................................ 5
1.2. Формулы логики высказываний ...................................................................... 10
1.3. Классификация формул .................................................................................... 13
1.4. Равносильность формул .................................................................................... 14
1.5. Нормальные формы формул ............................................................................ 19
1.6. Проблема разрешимости в алгебре логики ..................................................... 24
1.7. Решение логических задач методами алгебры логики ................................... 25
Глава II. Булевы функции ..................................................................................... 27
2.1. Понятие булевой функции ................................................................................ 27
2.2. Представление произвольной булевой функции в виде формулы алгебры
логики ................................................................................................................. 32
2.3. Минимизация булевых функций ...................................................................... 39
2.4. Алгебра Жегалкина ........................................................................................... 51
2.5. Закон двойственности в алгебре логики ......................................................... 54
2.6. Полнота и замкнутость системы булевых функций. Классы Поста ............. 56
2.7. Приложение алгебры логики к релейно-контактным схемам ....................... 64
Глава III. Задачи для самостоятельного решения ........................................... 69
3.1. Задачи к главе I ................................................................................................... 69
3.2. Задачи к главе II ................................................................................................. 70
Список рекомендуемой литературы …………………………………………...71
3
Предисловие
Современная математическая логика – это раздел дискретной математики,
посвященный изучению математических доказательств и вопросов основания
математики.
Математическая логика широко применяется во многих областях науки и
техники. В частности, она лежит в основе работы логических схем и устройств
персонального компьютера. Знание математической логики необходимо при
разработке алгоритмов и программ в связи с тем, что большинство языков программирования содержит логические операции.
Настоящее учебное пособие посвящено изложению простейшей логической теории – алгебры логики, являющейся фундаментом для изучения более
сложных логических теорий, в частности логики предикатов. При этом предполагается, что читатель знаком с материалом учебного пособия [13].
Пособие состоит из трех глав и списка рекомендуемой литературы.
В первой главе «Логика высказываний» рассматриваются высказывания и
логические операции над ними, формулы логики высказываний, классификация
формул и их нормальные формы, приводятся различные методы решения логических задач средствами логики высказываний.
Во второй главе «Булевы функции» излагается следующий теоретический
материал: представление произвольной булевой функции в виде формулы логики высказываний, минимизация булевых функций, алгебра Жегалкина, закон
двойственности, полнота и замкнутость системы булевых функций, приложение логики высказываний к релейно-контактным схемам.
Третья глава содержит задачи для самостоятельного решения к первым
двум главам, формулировки некоторых из которых взяты из учебной литературы [3, 7].
Основная цель пособия – обеспечить студентов доступно и наглядно изложенным теоретическим материалом, который сопровождается многочисленными поясняющими примерами и подробным разбором решений типовых задач,
для возможности выносить некоторые темы на самостоятельное изучение. Это
позволит использовать высвободившееся время для освоения более сложных
разделов математической логики.
Для краткой записи некоторых утверждений используется символ , заменяющий слова «если …, то …», «следует».
def
Для любых предложений A и B запись A  B означает, что предложения A
и B равносильны по определению (от англ. definition – определение).
Знак  будет обозначать конец примера, замечания или доказательства
утверждения (при его отсутствии знак  будет ставиться непосредственно после формулировки).
4
Глава I. Логика высказываний
1.1. Высказывания и логические операции над ними
Основным понятием математической логики является понятие «высказывания». Оно не определяется строго аналогично понятию «множества» в
наивной теории множеств и считается исходным, первичным. Так же как и для
понятия «множества», можно дать только описание понятия «высказывания».
Высказывание – это всякое повествовательное предложение естественного языка, о котором имеет смысл говорить, истинно оно или ложно в данных
конкретных условиях.
Пример 1.1.1. Какие из следующих предложений являются высказываниями:
1) Кострома  областной центр Ярославской области;
2) x2  6x + 8 = 0;
3) Число 7 является делителем числа 56;
4) Студент факультета автоматизированных систем и технологий университета;
5)   {};
6) Все простые числа нечетны;
7) Мойте руки перед едой!
Решение. Легко видеть, что среди перечисленных в условии предложений высказываниями являются 1), 3), 5) и 6), причем высказывания 3) и 5)  истинные,
а высказывания 1) и 6) – ложные. Предложения 2), 4) и 7) не являются высказываниями. 
Замечание 1.1.1. Повелительные, вопросительные, содержащие сослагательное
наклонение предложения высказываниями не являются. 
В логике высказываний все высказывания рассматриваются только с точки зрения их логического значения, отвлекаясь от их житейского содержания.
Логическими значениями высказываний являются «истина» и «ложь», которые
в литературе обозначаются соответственно через 1 (И, T1) и 0 (Л, F2). Отметим,
что ни одно высказывание не может быть одновременно истинным и ложным.
Высказывания, в которых нельзя выделить части, являющиеся высказываниями, называют атомарными (простыми или элементарными). Условимся обозначать атомарные высказывания строчными латинскими буквами
x, y, z, … (или x1, x2, …, xn).
Высказывания, образованные на естественном языке из атомарных высказываний с помощью грамматических связок «не», «и», «или», «если…, то…»,
1
2
От англ. true  истинный.
От англ. false  ложный.
5
«тогда и только тогда, когда», называют сложными (составными). Истинность значения сложного высказывания зависит только от истинностных значений входящих в него атомарных высказываний и вида связки, использованной
при его составлении.
В логике высказываний перечисленным выше грамматическим связкам
соответствуют пять основных логических операций, которые строго определяются.
Определение 1.1.1. Отрицанием (инверсией) высказывания x называется высказывание, истинное тогда и только тогда, когда x ложно.
Отрицание высказывания x обозначается через x или  x (читается:
«не x», «неверно, что x»).
Замечание 1.1.2. Любая логическая операция определяется также таблицей,
называемой таблицей истинности, в левой части которой перечисляются
всевозможные наборы истинностных значений высказываний, к которым применяется операция, а в правой – соответствующие этим наборам истинностные
значения результата операции. 
Таблица истинности отрицания показана ниже (табл. 1.1.1).
Таблица 1.1.1
x
0
1
x
1
0
В естественном языке отрицание соответствует составлению из высказывания x нового высказывания, передаваемого словами «не х» или «неверно, что x».
Пример 1.1.2. Сформулируйте отрицание высказывания «Число
нальное».
Решение. Неверно, что число
 рациональное. 
 рацио-
Определение 1.1.2. Конъюнкцией3 (логическим произведением) двух высказываний x и y называется высказывание, истинное тогда и только тогда, когда
оба высказывания x и y истинны.
Конъюнкция высказываний x и y обозначается через x  y, или x  y (причем точку часто опускают и пишут xy), или x & y (читается: «x и y»).
Операцию конъюнкцию, называемую также логическим умножением,
можно определить таблицей истинности (табл. 1.1.2).
Таблица 1.1.2
x
y
xy
0
0
0
0
1
0
1
0
0
3
Лат. conjunctivus – соединительный.
6
1
1
1
В естественном языке конъюнкция соответствует соединению высказываний союзом «и» или совпадающими с ним по смыслу
грамматическими связками «а», «но», «однако», «хотя» и т.п.
Пример 1.1.3. Пусть x и y обозначают следующие высказывания:
x – «Я изучаю в университете информационные технологии»,
y – «Я люблю программирование».
Сформулируйте сложное высказывание x  y.
Решение. Я изучаю в университете информационные технологии и я люблю
программирование. 
Определение 1.1.3. Дизъюнкцией4 (логической суммой) двух высказываний x
и y называется высказывание, ложное тогда и только тогда, когда оба высказывания x и y ложны.
Дизъюнкция высказываний x и y обозначается через x  y или x + y (читается: «x или y»).
Операцию дизъюнкцию, называемую также логическим сложением,
можно определить таблицей истинности (табл. 1.1.3).
Таблица 1.1.3
x
y xy
0
0
0
0
1
1
1
0
1
1
1
1
В естественном языке дизъюнкция соответствует соединению высказываний союзом «или» в неразделительном
смысле.
Пример 1.1.4. Пусть x и y обозначают следующие высказывания:
x – «Любое целое число принадлежит множеству рациональных чисел»,
y – «Число 30 кратно 8».
Сформулируйте сложное высказывание x  y.
Решение. Любое целое число принадлежит множеству рациональных чисел или
число 30 кратно 8. 
Определение 1.1.4. Импликацией5 (логическим следованием) двух высказываний x и y называется высказывание, ложное тогда и только тогда, когда x истинно, а y ложно.
Импликация высказываний x и y обозначается через x  y или x  y
(читается: «если x, то y», «из x следует y», «x влечет y», «x является достаточным для у», «y является необходимым для x»). Высказывание x называется по-
4
5
Лат. disjnctivus – разделительный.
Лат. implicatio – сплетение, переплетение.
7
сылкой, условием или антецедентом импликации, а высказывание y – заключением, следствием или консеквентом.
Таблица истинности импликации приведена ниже (табл. 1.1.4).
В естественном языке импликация выражается словами «если x, то y» , «из x следует y», «x влечет y», «тогда y,
когда x», «постольку y, поскольку x» и т. п.
Использование слов «если x, то y» в логике высказываний отличается от употребления их в разговорной речи на
естественном языке. Если высказывание x в разговорной речи ложно, то предложение «если x, то y» вообще не имеет
смысла. Кроме того, употребляя в разговорной речи слова «если x, то y», мы
подразумеваем, что из предложения x всегда вытекает предложение y. Употребление слов «если x, то y» в логике высказываний не требует этого, так как в
ней содержательный смысл высказываний не имеет значения.
Таблица 1.1.4
x
y xy
0
0
1
0
1
1
1
0
0
1
1
1
Пример 1.1.5. Пусть x и y обозначают следующие высказывания:
x – «Пятью пять – двадцать пять»,
y – «Семью семь – сорок семь».
Сформулируйте сложное высказывание x  y.
Решение. Если пятью пять – двадцать пять, то семью семь – сорок семь. 
Замечание 1.1.3. Импликация играет важную роль при доказательствах математических утверждений в связи с тем, что многие теоремы имеют форму
«если x, то y». Тогда, если истинна посылка x и доказана истинность импликации «если x, то y», то делают вывод об истинности заключения y. 
Определение 1.1.5. Эквиваленцией6 (эквивалентностью, логической эквивалентностью) двух высказываний x и y называется высказывание, истинное тогда и только тогда, когда истинности высказываний x и y совпадают.
Эквиваленция обозначается символами x  y или x ~ y (читается: «x эквивалентно y», «x тогда и только тогда, когда y», «x, если и только если y», «x
необходимо и достаточно для y»).
Таблица 1.1.5
x
y xy
0
0
1
0
1
0
1
0
0
6
Лат. aequus – равный, valentis – имеющий значение.
8
1
1
1
В естественном языке эквиваленция выражается словами
«x тогда и только тогда, когда y», «если x, то y, и обратно», «для того чтобы x,
необходимо и достаточно, чтобы y»,
«x, если и только если y», и т.п.
Пример 1.1.6. Пусть x и y обозначают следующие высказывания:
x – «На улице идет дождь»,
y – «На улице пасмурная погода».
Сформулируйте сложное высказывание x  y.
Решение. На улице идет дождь тогда и только тогда, когда на улице пасмурная
погода. 
Замечание 1.1.4. Эквиваленция так же, как и импликация, играет важную роль
в математических доказательствах. Часто теоремы имеют форму эквиваленции
«для того чтобы x, необходимо и достаточно, чтобы y». Тогда, если один из
членов эквиваленции истинен (ложен) и доказана истинность эквиваленции, то
делают вывод об истинности (ложности) другого члена эквиваленции. 
Рассмотренные логические операции , , , ,  называются пропозициональными7 операциями, а используемые для их обозначения символы 
пропозициональными (логическими) связками.
В логике высказываний, кроме перечисленных выше операций, используются и другие операции, являющиеся производными от пропозициональных.
Среди них особую роль играют следующие три операции: сложение по
модулю 2, штрих Шеффера и стрелка Пирса.
Сложение по модулю 2 обозначается символом  и определяется таблицей истинности 1.1.6.
Таблица 1.1.6
x
y xy
0
0
0
0
1
1
1
0
1
1
1
0
Из табл. 1.1.6 видно, что сложение по модулю 2 являdef
ется отрицанием эквиваленции, то есть x  y  x  y .
Штрих Шеффера обозначается символом | и определяется таблицей истинности 1.1.7.
Таблица 1.1.7
x
y
x|y
0
0
1
7
Лат. propositio – предложение и др.
9
0
1
1
1
0
1
1
1
0
Как видно из табл. 1.1.7, штрих Шеффера представляет
def
собой отрицание конъюнкции, то есть x | y  x  y . Штрих
Шеффера называют также антиконъюнкцией.
Стрелка Пирса обозначается символом  и определяется таблицей истинности 1.1.8.
Таблица 1.1.8
Из табл. 1.1.8 видно, что стрелка Пирса является отриx
y
xy
def
0
0
1
цанием дизъюнкции, то есть x  y  x  y . Стрелку Пирса
0
1
0
называют также антидизъюнкцией.
1
0
0
1
1
0
1.2. Формулы логики высказываний
С помощью логических операций над высказываниями из заданного
множества высказываний можно строить различные новые, более сложные высказывания. При этом для указания порядка выполнения операций используются скобки. Всякое сложное высказывание, которое может быть получено из
атомарных высказываний с помощью логических операций и круглых скобок,
указывающих порядок их выполнения, называется формулой логики высказываний.
Логика высказываний является формальной системой. Поэтому требуется
дать формальное определение понятия «формула». Для этого необходимо определить язык логики высказываний, так как язык является первой частью любой
формальной системы. В свою очередь, чтобы определить язык формальной системы, нужно первоначально определить его алфавит.
Определение 1.2.1. Алфавитом называется любое непустое множество. Элементы этого множества называются символами (буквами) данного алфавита.
Определение 1.2.2. Словом в данном алфавите называется произвольная конечная последовательность символов (возможно, пустая). Пустая последовательность символов называется пустым словом и обозначается через  .
Если a и b – слова, то для их соединения в одно слово используют обозначение ab.
Определение 1.2.3. Слово b называется подсловом слова а, если a  c1bc2 для
некоторых слов c1 и c2.
Определение 1.2.4. Языком в данном алфавите называется любое подмножество слов в этом алфавите.
Рассмотрим язык логики высказываний.
Определение 1.2.5. Пропозициональными (логическими или высказывательными) переменными называются переменные, принимающие только два истинностных значения: «истина» и «ложь», которые обозначаются через 1 и 0
10
соответственно. При этом символы 1 и 0 называются логическими константами (или просто константами).
Другими словами, пропозициональные переменные – это переменные,
которые могут принимать логические значения конкретных высказываний.
Примем соглашение обозначать пропозициональные переменные строчными
буквами латинского алфавита с индексами или без них: x1, x2, x3, … или
x, y, z, …
Определение 1.2.6. Алфавитом логики высказываний называется множество,
содержащее следующие символы:
1) пропозициональные переменные и логические константы;
2) логические связки: , , , , ;
3) символы скобок (, ).
Определение 1.2.7. Формулой логики высказываний называется слово в алфавите логики высказываний, удовлетворяющее следующим условиям:
1) любая пропозициональная переменная есть формула, которая называется атомарной;
2) если А и В – формулы, то
, (A  B), (A  B), (A  B), (A  B) –
тоже формулы;
3) других правил образования формул нет.
Формулы логики высказываний будем обозначать прописными буквами
латинского алфавита и называть просто формулами.
Определение 1.2.8. Подформулой формулы А называется любое подслово А,
которое само является формулой.
Даже при записи несложных формул возникает обилие скобок. Для
упрощения записи формул в логике высказываний приняты следующие правила расстановки скобок.
1. Внешние скобки не пишутся.
2. На множестве логических связок {, , , , , , , } вводятся транзитивное отношение «быть более сильной» (>) и отношение эквивалентности «быть равносильной» (~) следующим образом:
 >  >  >  > ;  ~  ~ ;  ~ .
В формуле опускаются те пары скобок, без которых можно восстановить
эту формулу, расставляя последовательно недостающие скобки согласно
рассмотренным отношениям, начиная с наиболее сильных связок и заканчивая наиболее слабыми, а для равносильных связок  слева направо.
Пример 1.2.1. Расставим в следующей формуле недостающие скобки согласно
правилам расстановки скобок: x  z  y  x  y   x  y  z.
Решение. Начнем расставлять скобки с самой сильной связки, которой является
: x  z  y  x  y  ( x)  y  z. Следующими наиболее сильными и попарно
равносильными связками являются ,  и . Расставляя последовательно слева
направо недостающие скобки для равносильных связок, получим:
x  z  y  ((x  y)  ( x))  (y  z). Затем последовательно расставим скобки
для связок  и : ((x  z)  y)  ((x  y)  ( x))  (y  z). Осталось восстано11
вить скобки для равносильных связок  и . Так как первой из них в записи
формулы встречается , то поставим скобки сначала для этой связки:
(((x  z)  y)  ((x  y)  ( x)))  (y  z). Наконец, восстановим внешние скобки. В итоге получим формулу, в которой расставлены все недостающие скобки:
((((x  z)  y)  ((x  y)  ( x)))  (y  z)). 
Каждая формула принимает свое логическое значение, которое определяется значениями входящих в нее пропозициональных переменных. Приписывание конкретных значений пропозициональным переменным, входящим в формулу, называется (логической) интерпретацией формулы. Заметим, что содержательных интерпретаций данной формулы бесконечное множество.
Все возможные логические значения формулы, в зависимости от различных логических интерпретаций (наборов значений входящих в нее пропозициональных переменных), могут быть полностью описаны с помощью таблицы, которая называется таблицей истинности формулы. Столбцами таблицы истинности являются имена всех пропозициональных переменных и подформул
формулы, а в строках указываются логические значения подформул для соответствующих наборов значений переменных. При этом наборы значений переменных располагаются в лексикографическом порядке, то есть в порядке возрастания наборов, рассматриваемых как двоичные числа.
Пример 1.2.2. Построить таблицу истинности для формулы F = 
 y  z.
Решение. Построим таблицу, в первых трех столбцах которой выпишем всевозможные наборы значений пропозициональных переменных в лексикографическом порядке. В последующих столбцах расположим логические значения
подформул формулы F, которые образуют порождающую последовательность для этой формулы. В результате получим следующую таблицу
(табл. 1.2.1).
x
0
0
0
0
1
1
1
1
y
0
0
1
1
0
0
1
1
z
0
1
0
1
0
1
0
1
1
1
1
1
0
0
0
0
0
0
0
1
0
0
0
1
yz
0
1
1
1
0
1
1
1
1
1
1
0
1
1
1
0
Таблица 1.2.1
yz F
0
1
1
0
1
0
1
0
0
0
1
1
1
1
1
1
Следует отметить, что таблицу истинности формулы F образуют только первые три и последний
столбец табл. 1.2.1. Остальные
столбцы этой таблицы носят вспомогательный, промежуточный характер. 
Замечание 1.2.1. Рассматриваемая нами формальная система является алгеброй. Действительно, пусть P – множество всех высказываний. Согласно определениям логических операций, применяя их к высказываниям, мы получаем
снова высказывания. Это означает, что множество P замкнуто относительно ло12
гических операций. Следовательно, логические связки алфавита логики высказываний обозначают логические операции, которые являются алгебраическими
на множестве P. При этом отрицание является унарной алгебраической операцией, а остальные четыре логические операции: конъюнкция, дизъюнкция, импликация и эквиваленция – это бинарные алгебраические операции. Таким образом, множество P вместе с пропозициональными операциями на нем является
алгеброй с пятью алгебраическими операциями < P, , , , ,  > типа
(1, 2, 2, 2, 2), которая называется алгеброй логики8. Поэтому далее в пособии
формальную систему логики высказываний мы будем называть алгеброй
логики. 
Замечание 1.2.2. Во всяком естественном или формальном (искусственном)
языке различают три его стороны: синтаксис, семантику и прагматику. Синтаксис9 представляет собой набор правил построения слов, конструкций и структур текста в языке. Семантика10 изучает смысл каждой синтаксической конструкции в языке. Прагматика11 изучает цели использования средств языка. В
математической логике изучаются общие вопросы синтаксиса и семантики
языка. Рассмотрим, в частности, синтаксис и семантику языка алгебры логики.
Синтаксис языка алгебры логики изучает правильность написания формул, согласно определению формулы алгебры логики. Ошибками в написании
формулы являются, например, использование символа не из алфавита алгебры
логики, отсутствие необходимой или присутствие лишней логической связки,
отсутствие или несоответствие скобок в формуле и др.
Семантика языка алгебры логики изучает смысл формул с точки зрения
их оценивания на истинность. Вопросы семантики часто решаются с помощью
составления таблиц истинности формул. 
1.3. Классификация формул
Все формулы алгебры логики подразделяются на следующие типы: выполнимые, тождественно истинные, опровержимые и тождественно ложные.
Определение 1.3.1. Формула называется выполнимой, если она принимает
значение 1 хотя бы на одном наборе входящих в нее пропозициональных переменных.
Определение 1.3.2. Формула называется тождественно истинной (или тавтологией), если она принимает значение 1 на всех возможных наборах входящих в нее пропозициональных переменных.
Другое название  алгебра высказываний.
От греч. syntaxis – построение, порядок.
10
От греч. semantikos – обозначающий.
11
От греч. pragma  дело, действие.
8
9
13
Определение 1.3.3. Формула называется опровержимой, если она принимает
значение 0 хотя бы на одном наборе входящих в нее пропозициональных переменных.
Определение 1.3.4. Формула называется тождественно ложной (или противоречием), если она принимает значение 0 на всех возможных наборах входящих в нее пропозициональных переменных.
Пусть A – множество всех выполнимых формул, B – множество всех
опровержимых формул, C – множество всех тождественно истинных формул и
D – множество всех тождественно ложных формул. Отношения между указанными множествами проиллюстрируем с помощью диаграммы Эйлера  Венна
(рис. 1.3.1).
B
A
C=A\B
D=B\A
Таким образом, опровержимые
формулы – это формулы, которые не
являются тавтологиями, а тождественно ложные формулы – это формулы, не
являющиеся выполнимыми.
Рис. 1.3.1
Пример 1.3.1. Даны формулы: F1 = (x  y)  (x  y); F2 = xy (  );
F3 = (x  y) (x  y). Рассмотрим их таблицы истинности, соединив их в одну
таблицу (табл. 1.3.1).
Таблица 1.3.1
x y F1 F2 F3
0 0 1 0 0
0 1 1 0 0
1 0 1 0 0
1 1 1 0 1
Согласно определениям 1.3.1, 1.3.2 и 1.3.4 формула F1
является тождественно истинной, формула F2  тождественно ложной, а формула F3  выполнимой. 
Замечание 1.3.1. С точки зрения логики тавтология есть не что иное, как логический закон, так как при любых значениях входящих в нее пропозициональных переменных она принимает значение «истина». 
1.4. Равносильность формул
Определение 1.4.1. Пусть A и B – формулы и { x1, x2, …, xn} есть множество
всех пропозициональных переменных, входящих хотя бы в одну из формул A и
B. Эти формулы называются равносильными, если на любом наборе значений
переменных {x1, x2, …, xn} они принимают одинаковые значения.
14
Равносильность формул будем обозначать символом  и использовать
запись A  B, если формулы A и B равносильны.
Замечание 1.4.1. Следует различать символы  и , так как   символ логической операции языка алгебры логики, а символ  не принадлежит алфавиту языка алгебры логики (является метасимволом) и обозначает отношение на
множестве формул. 
Покажем, что отношение равносильности на множестве формул является
отношением эквивалентности на этом множестве. Пусть A, B и C – формулы.
Тогда ( A) A  A, то есть отношение  является рефлексивным. Далее для любых A, B если A  B, то B  A. Значит, отношение  симметрично. Наконец, отношение  транзитивно, так как для любых A, B, C, если A  B и B  C, то
A  C.
Замечание 1.4.2. Равносильные формулы выражают собой законы логики, так
как если A и B  произвольные формулы, то A  B тогда и только тогда, когда
формула A  B является тавтологией. 
Приведем некоторые основные равносильности (законы) алгебры логики.
Для любых формул A, B, C справедливы следующие равносильности:
1. A  A  A (идемпотентность );
2. A  A  A (идемпотентность );
3. A  B  B  A (коммутативность );
4. A  B  B  A (коммутативность );
5. A  (B  C)  (A  B)  C (ассоциативность );
6. A  (B  C)  (A  B)  C (ассоциативность );
7. A  (B  C)  (A  B)  (A  C) (дистрибутивность  относительно );
8. A  (B  C)  (A  B)  (A  C) (дистрибутивность  относительно );
9. A  (A  B)  A (первый закон поглощения);
10. A  (A  B)  A (второй закон поглощения);
11.   A  A (закон инволюции или закон двойного отрицания);
12.  (A  B)   A   B (первый закон де Моргана);
13.  (A  B)   A   B (второй закон де Моргана);
14. A  1  A;
15. A  1  1;
16. A  0  0;
17. A  0  A;
18. A   A  0 (закон противоречия);
19. A   A  1 (закон исключенного третьего);
20. A  B   A  B;
21. A  B  (A  B)  (B  A)  (A  B)  ( A   B);
22. A  B   ( A   B)   A  B;
15
23. A  B   ( A   B).
Доказательство равносильностей алгебры логики можно проводить различными способами: табличным, логическим или алгебраическим. Рассмотрим
суть этих способов на примерах доказательств некоторых основных равносильностей.
Табличный способ доказательства заключается в составлении и сравнении таблиц истинности формул, равносильность которых доказывается.
Формулы равносильны, если их таблицы истинности совпадают.
Пример 1.4.1. Докажем табличным способом первый закон де Моргана (12).
Для удобства таблицы истинности формул  (A  B) и  A   B сведем в
одну таблицу (табл. 1.4.1).
A
0
0
1
1
B
0
1
0
1
Таблица 1.4.1
A  B  (A  B)  A  B  A   B
0
1
1
1
1
0
1
0
1
1
0
0
1
1
1
1
0
0
0
0
Сравним четвертый и
последний столбцы табл. 1.4.1.
Мы видим, что они одинаковы.
Следовательно, формулы
 (A  B) и  A   B равносильны. 
Логический способ доказательства имеет два хода рассуждений: «слева
направо» и «справа налево». Ход «слева направо» заключается в следующем.
Мы предполагаем, что формула в левой части равносильности имеет конкретное истинностное значение, например «истина». С учетом определений логических операций, которые используются в этой формуле, доказывают, что формула в правой части равносильности принимает такое же истинностное значение.
Рассуждения «справа налево» проводятся аналогично для этого же истинностного значения формулы справа.
Замечание 1.4.3. При логическом способе доказательства достаточно рассматривать только один случай истинности составляющих равносильность формул,
но обязательно в два хода: «слева направо» и «справа налево». Действительно,
доказательство для другого случая истинности можно провести методом от
противного, используя при этом доказанное. Например, пусть равносильность
доказана для случая «истины». Тогда, предположив, что формула в левой части
равносильности имеет значение «ложь», мы получим и справа «ложь», так как в
противном случае, если формула справа имеет значение «истина», то, по уже
доказанному, формула слева имеет значение «истина». 
Пример 1.4.2. Докажем логическим способом первый закон поглощения:
A  (A  B)  A. Сначала проведем ход рассуждений «слева направо». Пусть
A  (A  B) = 1. Тогда по определению конъюнкции A = 1 и A  B = 1. Таким
образом, мы получили, что формула в правой части равносильности имеет зна16
чение 1. Теперь проведем ход рассуждений «справа налево». Пусть A = 1. Отсюда по определению дизъюнкции A  B = 1. Так как A = 1 и A  B = 1, то по
определению конъюнкции A  (A  B) = 1. Следовательно, равносильность доказана. 
Алгебраический способ доказательства состоит в преобразовании левой
и правой частей равносильности к одному и тому же виду, используя при этом
уже доказанные равносильности и транзитивность отношения равносильности
формул.
Пример 1.4.3. Докажем алгебраическим способом следующую равносильность:
(A  B)  (B  A)  (A  B)  ( A   B) (21). Рассмотрим левую часть равносильности. Тогда, используя равносильность A  B   A  B (20), получаем,
что (A  B)  (B  A)  ( A  B)  ( B  A). Далее, согласно дистрибутивности  относительно  (8) и коммутативности  (3) имеем:
( A  B)  ( B  A)  (( A  B)   B)  (( A  B)  A) 
 ( B  ( A  B))  (A  ( A  B))  (( B   A)  ( B  B)) 
 ((A   A)  (A  B)). Применим для дальнейших преобразований закон противоречия (18). Тогда (( B   A)  ( B  B))   ((A   A)  (A  B)) 
 (( B   A)  0)  (0  (A  B)). Затем, используя равносильности (17) и (3),
получаем, что (( B   A)  0)  (0  (A  B))  ( B   A)  (A  B) 
 (A  B)  ( B   A). Так как отношение равносильности формул транзитивно, то рассматриваемая равносильность доказана. 
Рассмотрим правила перехода от одних равносильностей к другим. Эти
правила представляют собой следующие теоремы, доказательство которых мы
опустим.
Теорема 1.4.1 (правило равносильных добавлений и удалений формул). Пусть
A  B и C – произвольная формула. Тогда  A   B, A  C  B  C,
C  A  C  B, A  C  B  C, C  A  C  B, A  C  B  C, C  A  C  B,
A  C  B  C, C  A  C  B. 
Пример 1.4.4. Пусть A = x  , B = y  и C = xy  x. Можно показать, что
A  B. Тогда по теореме 1.4.1 справедлива равносильность
(x  ) (xy  x)  (y  ) (xy  x). 
Замечание 1.4.4. Любой символ алфавита алгебры логики может неоднократно
использоваться в записи данной формулы. Под вхождением символа в формулу понимается место, занимаемое символом в формуле. 
Теорема 1.4.2 (правило равносильных замен пропозициональных переменных). Пусть A  B и C – формула, в которой выделено одно вхождение пропозициональной переменной xi. Пусть CA получается из C заменой этого вхождения xi на A, а CB  из C заменой того же вхождения xi на B. Тогда CA  CB. 
17
Пример 1.4.5. Рассмотрим формулы A, B и C из примера 1.4.4. В формуле C
выделим второе вхождение переменной x: C = xy  x. Пусть формулы CA и CB
получается из C заменой этого вхождения x на A и B соответственно. Тогда
CA = xy  x  и CB = xy  y  . По теореме 1.4.2 xy  x   xy  y  . 
Теорема 1.4.3 (правило равносильных замен подформул). Пусть CA – формула,
содержащая A в качестве своей подформулы, а CB получается из CA заменой A в
этом вхождении на B. Тогда, если A  B, то CA  CB. 
Пример 1.4.6. Пусть A и B  формулы из примера 1.4.4, а C =
 xy. Заметим, что формула A является подформулой формулы C. Так как A  B, то по
теореме 1.4.3 справедлива равносильность
 xy 
 xy. 
Теорема 1.4.4 (правило устранения импликаций и эквиваленций). Для каждой формулы можно указать равносильную ей формулу, которая не содержит
логических связок  и . 
Пример 1.4.7. Представить формулу F = (x  y)  (x  z) в виде равносильной
ей формулы наиболее простой формы, не содержащей логических связок  и
.
Решение. Применяя основные равносильности (20), (21) и другие, упростим
формулу F. Получим
F = (x  y)  (x  z)  xy 
  z  xy   z  (x  ) (y  )  z 
 y  z. 
Определение 1.4.2. Преобразования формул с использованием основных равносильностей и правил перехода от одних равносильностей к другим, с помощью которых формулу или ее часть можно заменить равносильной ей формулой, называются равносильными (или эквивалентными).
Равносильные преобразования формул используются для доказательства
равносильностей, для приведения формул к заданному виду, а также для упрощения формул. При этом формула A считается проще равносильной ей формулы B, если она содержит меньше символов пропозициональных переменных и
логических связок.
Замечание 1.4.5. Из основных равносильностей (20)(23) следует, что всякую
формулу алгебры логики можно заменить равносильной ей формулой, содержащей:
а) только две логических связки  конъюнкцию и отрицание или дизъюнкцию и
отрицание, или импликацию и отрицание;
б) только три логических связки – конъюнкцию, дизъюнкцию и отрицание. 
Замечание 1.4.6. Покажем, что всякую формулу алгебры логики можно заменить равносильной ей формулой, содержащей только одну логическую связку
18
штрих Шеффера или стрелку Пирса. Учитывая замечание 1.4.5, для этого достаточно доказать, что конъюнкция и отрицание могут быть выражены с помощью штрих Шеффера, а также дизъюнкция и отрицание – с помощью стрелки
Пирса.
Действительно, имеем следующие цепочки равносильных формул:
 A   (A  A)  A  A,
A  B    (A  B)   (A  B)  (A  B)  (A  B),
 A   (A  A)  A  A,
A  B    (A  B)   (A  B)  (A  B)  (A  B),
где A и B – произвольные формулы. 
На основании замечаний 1.4.5 и 1.2.1 алгебру логики можно рассматривать как алгебру < P, , ,  > типа (2, 2, 1), где P – множество всех высказываний. Пусть равенство элементов множества P означает их равносильность. Все
тавтологии равносильны, следовательно, они неразличимы с точки зрения отношения равенства на P. Аналогичный вывод имеет место относительно всех
противоречий. Обозначим любую тавтологию через 1, а любое противоречие
через 0. Тогда мы можем считать, что 1 и 0 являются элементами P, причем они
единственны на этом множестве.
Покажем, что в алгебре логики выполняются все аксиомы булевой алгебры. Напомним определение этого понятия [13].
Алгебра < А, +, ,  > типа (2, 2, 1) называется булевой алгеброй, если
выполняются следующие условия, называемые аксиомами:
А1. Существуют различные элементы e1, e2  A, являющиеся нейтральными относительно бинарных операций + и , соответственно, то есть
( a  A)  e1, e2  A: a + e1 = e1 + a = a  a + e1 = e1 + a = a.
А2. Операции + и  ассоциативны, то есть
( a, b, c  A) (a + b) + c = a + (b + c)  (a  b)  c = a  (b  c).
A3. Операции + и  коммутативны, то есть
( a, b  A) a + b = b + a  a  b = b  a.
А4. Операции + и  дистрибутивны относительно друг друга, то есть
( a, b, c  A) a + (b  c) = (a + b)  (a + c)  a  (b + c) = (a  b) + (a  c).
A5. ( a  A)  a A: a + a = e2, a  a = e1.
Из основных равносильностей (14) и (17) следует, что 0 является
нейтральным элементом относительно , а 1  нейтральным элементом относительно . Операции  и  коммутативны, ассоциативны и дистрибутивны относительно друг друга (равносильности (3)(8)). Закон исключенного третьего
показывает, что результат операции дизъюнкции, примененной к произвольной
формуле A и  A, есть нейтральный элемент относительно конъюнкции. Закон
противоречия показывает, что результат операции конъюнкции, примененной к
произвольной формуле A и  A, есть нейтральный элемент относительно конъюнкции. Следовательно, в алгебре логики выполняются все аксиомы A1A5.
19
Если для некоторой системы аксиом удается подобрать конкретные объекты и конкретные отношения между ними так, чтобы выполнялись все аксиомы данной системы, то говорят, что найдена ее интерпретация (или модель).
Таким образом, алгебра логики является интерпретацией булевой алгебры.
При изучении дисциплин «Дискретная математика» и «Теория вероятностей и
математическая статистика» мы рассматривали другие интерпретации булевой
алгебры – алгебру множеств и алгебру событий соответственно. Основные равносильности алгебры логики, основные свойства операций над множествами и
событиями очень похожи между собой, так как представляют собой не что
иное, как законы булевой алгебры.
1.5. Нормальные формы формул
Согласно замечанию 1.4.5 любая формула алгебры логики с помощью
равносильных преобразований может быть приведена к равносильной ей формуле, содержащей пропозициональные переменные и только три логические
связки: конъюнкцию, дизъюнкцию и отрицание.
Определение 1.5.1. Формулы, содержащие кроме пропозициональных переменных и скобок только логические связки , , , называются булевыми.
Среди булевых формул особое значение в языке алгебры логики имеют
нормальные формы формул, определения которых даны ниже.
Рассмотрим выражения
x1  x2  …  xm и x1  x2  …  xm, где m  3.
(1.5.1)
Так как  и  ассоциативны, то при любой расстановке скобок в этих выражениях получим равносильные формулы. Условимся считать каждое из выражений (1.5.1) формулой.
Определение 1.5.2. Элементарной конъюнкций (или конъюнктом) называется формула, являющаяся конъюнкцией пропозициональных переменных или
их отрицаний.
Пример 1.5.1. Формулы
конъюнкциями. 
 x2 и x1  x2 

являются элементарными
Определение 1.5.3. Дизъюнктивной нормальной формой (ДНФ) формулы A
называется равносильная ей формула, представляющая собой дизъюнкцию
элементарных конъюнкций.
Пример 1.5.2. Формула (x1 

)(
 x2  x3) находится в ДНФ. 
Определение 1.5.4. Элементарной дизъюнкцией (или дизъюнктом) называется формула, являющаяся дизъюнкцией пропозициональных переменных или
их отрицаний.
Пример 1.5.3. Формулы
конъюнкциями. 
 x2 и x1  x2 
20

являются элементарными
Определение 1.5.5. Конъюнктивной нормальной формой (КНФ) формулы A
называется равносильная ей формула, представляющая собой конъюнкцию
элементарных дизъюнкций.
Пример 1.5.4. Формула (x1 

)(
 x2  x3) находится в ДНФ. 
Справедлива следующая теорема, которую приведем без доказательства.
Теорема 1.5.1. Для любой формулы алгебры логики путем равносильных преобразований можно получить ее ДНФ и КНФ. 
Замечание 1.5.1. ДНФ и КНФ формулы A определены неоднозначно. Любая
формула может иметь бесконечно много равносильных друг другу ДНФ и
КНФ. 
Рассмотрим алгоритм приведения произвольной формулы F алгебры
логики к нормальной форме.
1. Используя равносильности A  B   A  B и A  B  (A  B)  ( A   B)
и определения логических операций ,  и , преобразовать формулу F к равносильной ей формуле F1, содержащей только пропозициональные переменные
и логические связки конъюнкцию, дизъюнкцию и отрицание.
2. Используя законы де Моргана и закон инволюции, преобразовать формулу F1
к равносильной ей формуле F2, в которой отрицание относится только к пропозициональным переменным. Такая формула называется формулой с «тесными»
отрицаниями.
3. а) При приведении формулы F к ДНФ, используя дистрибутивный закон
A  (B  C)  (A  B)  (A  C), преобразовать формулу F2 к равносильной ей
формуле F3, в которой все конъюнкции выполняются раньше дизъюнкций.
б) При приведении формулы F к КНФ, используя дистрибутивный закон
A  (B  C)  (A  B)  (A  C), преобразовать формулу F2 к равносильной ей
формуле F3, в которой все дизъюнкции выполняются раньше конъюнкций.
В результате применения пп. 13(а) будет получена ДНФ формулы F, а в
результате применения пп. 13(б)  КНФ формулы F.
Пример 1.5.5. Привести равносильными преобразованиями следующую формулу к ДНФ и КНФ: F = ((x  y)  (z  ))  (y  ).
Решение. Приведем сначала формулу F к ДНФ:
F  ((  y)  (  ))  (  )  (
  )(  )
 (x   )  (  )  (   )  (  ) 
  
 xyz   = ДНФ F.
При приведении формулы F к КНФ воспользуемся результатом проведенных выше равносильных преобразований:
F  xyz    (xy  ) (z  )   (x  ) (y  ) (z  )  
 (x  ) (z  )   (x   ) (  z  )  x   = КНФ F. 
21
Среди множества ДНФ формулы A существует ДНФ, которая обладает
свойством единственности.
Определение 1.5.6. Совершенной дизъюнктивной нормальной формой
(СДНФ) формулы A называется ДНФ формулы A, удовлетворяющая следующим четырем условиям:
1) все логические слагаемые формулы различны;
2) каждое логическое слагаемое формулы содержит все пропозициональные
переменные или их отрицания;
3) ни одно логическое слагаемое формулы не содержит одновременно пропозициональную переменную и ее отрицание;
4) ни одно логическое слагаемое формулы не содержит одну и ту же пропозициональную переменную дважды.
Условия (1)(4) определения 1.5.6. называются условиями совершенства
для ДНФ.
Для любой не тождественно ложной формулы алгебры логики путем равносильных преобразований можно получить ее СДНФ, единственную с точностью до перестановки элементарных конъюнкций и логических сомножителей в
них (ввиду коммутативности операций дизъюнкции и конъюнкции). Это
утверждение будет доказано в главе II (п. 2.2.2).
Алгоритм приведения произвольной формулы F алгебры логики к
СДНФ, основанный на равносильных преобразованиях формулы, состоит в
следующем.
1. Для формулы F получают любую ДНФ.
2. Если в полученной ДНФ F есть элементарная конъюнкция A, не содержащая
пропозициональную переменную xi, то A заменяют на две элементарных конъюнкции A  xi и A   xi, так как A  A  ( xi   xi)  (A  xi)  ( A   xi).
3. Если в ДНФ F входят две одинаковых элементарных конъюнкции A, то лишнюю можно удалить, так как A  A  A.
4. Если некоторая элементарная конъюнкция, входящая в ДНФ F, содержит
пропозициональную переменную xi дважды, то одну xi можно удалить, так как
xi  xi  xi .
5. Если некоторая элементарная конъюнкция, входящая в ДНФ F, содержит
пропозициональную переменную xi и ее отрицание  xi, то xi   xi  0 и A  0.
Следовательно, A можно удалить, так как для любой формулы B справедливы
равносильности B  0  0  B  B.
В результате применения пп. 15 будет получена СДНФ формулы F.
Пример 1.5.6. Найти СДНФ следующей формулы с помощью равносильных
преобразований: F = (xy  yz)  ((x  y)  (z  y)).
Решение. Приведем сначала формулу F к ДНФ:
F

  y  xy
 x   y  xy (  )  x   y 
 xy  x   y = ДНФ F.
Заметим, что в полученной ДНФ F вторая элементарная конъюнкция не
содержит переменную z, третья – переменные x и y, четвертая – переменные
22
x и z. Исходя из этого, согласно п. 2 алгоритма приведения произвольной формулы F алгебры логики к СДНФ преобразуем ДНФ F следующим образом:
F  xy  x   y  xy  x (z  )  (x  ) (y  )  (x  ) y (z  ) 
 xy  x z  x  (xy  y  x  )  (xz  z  x  ) y 
 xy  x z  x  xy  y  x 
 xyz  yz  xy 


 y  yz  x  x z  xy  xyz = СДНФ F. 
Среди всех КНФ формулы A существует КНФ, обладающая свойством
единственности.
Определение 1.5.7. Совершенной конъюнктивной нормальной формой
(СКНФ) формулы A называется ДНФ формулы A, удовлетворяющая следующим четырем условиям:
1) все логические сомножители (элементарные дизъюнкции) формулы различны;
2) каждый логический сомножитель формулы содержит все пропозициональные переменные или их отрицания;
3) ни один из логических сомножителей формулы не содержит одновременно
пропозициональную переменную и ее отрицание;
4) ни один из логических сомножителей формулы не содержит одну и ту же
пропозициональную переменную дважды.
Условия (1)(4) определения 1.5.7 называются условиями совершенства
для КНФ.
Для любой не тождественно истинной формулы алгебры логики путем
равносильных преобразований можно получить ее СКНФ, единственную с точностью до перестановки элементарных дизъюнкций и логических слагаемых в
них.
Алгоритм приведения произвольной формулы F алгебры логики к
СКНФ, основанный на равносильных преобразованиях формулы, состоит в
следующем.
1. Для формулы F получают любую КНФ.
2. Если в полученной КНФ F есть элементарная дизъюнкция A, не содержащая
пропозициональную переменную xi, то A заменяют на две элементарных дизъюнкции A  xi и A   xi, так как A  A  ( xi   xi)  (A  xi)  (A   xi).
3. Если в КНФ F входят две одинаковых элементарных дизъюнкции A, то одну
из них можно удалить, так как A  A  A.
4. Если некоторая элементарная дизъюнкция, входящая в КНФ F, содержит
пропозициональную переменную xi дважды, то лишнюю переменную xi можно
удалить, так как xi  xi  xi.
5. Если некоторая элементарная дизъюнкция, входящая в КНФ F, содержит
пропозициональную переменную xi и ее отрицание  xi, то xi   xi  1 и A  1.
Следовательно, A можно удалить, так как для любой формулы B справедливы
равносильности B  1  1  B  B.
В результате применения пп. 15 будет получена СКНФ формулы F.
23
Пример 1.5.7. Найти СКНФ формулы из примера 1.5.6 с помощью равносильных преобразований.
Решение. Приведем сначала формулу F к КНФ, воспользовавшись результатом
проведенных в примере 1.5.6 равносильных преобразований:
F = (xy  yz)  ((x  y)  (z  y))  xy  x   y  x   y 
 (x  y) (  y)  x  y  = КНФ F.
Полученная КНФ F содержит единственную элементарную дизъюнкцию,
содержащую все пропозициональные переменные x, y и z, а значит, согласно
определению 1.5.7 является СКНФ F. Итак, СКНФ F = x  y  . 
Замечание 1.5.2. Единственность совершенных нормальных форм формул позволяет использовать их для решения вопроса о равносильности двух формул.
Имеет место следующий критерий равносильности двух произвольных формул алгебры логики: «Пусть A и B – две произвольные, не тождественно ложные (истинные) формулы алгебры логики и { x1, x2, …, xn}  множество всех
пропозициональных переменных, входящих хотя бы в одну из формул A и B.
Формулы A и B равносильны тогда и только тогда, когда их СДНФ (СКНФ) отличаются друг от друга только порядком следования элементарных конъюнкций (дизъюнкций)». 
Пример 1.5.8. Выясните, равносильны ли следующие формулы:
A = x  y  yz и B = z   x .
Решение. Приведем формулы A и B к СДНФ.
A
 yz  x  yz  x (z  )  (x  ) yz 
 x z  x  xyz  yz = СДНФ A.
B
 x  zy  x  (x  ) zy  x (z  ) 
 xyz  yz  x z  x = СДНФ B.
Сравнивая СДНФ A и СДНФ B, замечаем, что они отличаются друг от
друга только порядком следования элементарных конъюнкций. Следовательно,
на основании критерия равносильности двух произвольных формул алгебры
логики можно сделать вывод, что данные формулы A и B равносильны. 
1.6. Проблема разрешимости в алгебре логики
Проблема разрешимости в алгебре логики заключается в выяснении существования алгоритма, позволяющего за конечное число шагов определить
для произвольной формулы, является ли она тавтологией.
Легко видеть, что эта проблема разрешима. Например, ее можно решить
следующими способами:
1) табличным, то есть с помощью построения таблицы истинности;
2) алгебраическим, то есть приведением формулы с помощью равносильных
преобразований к константе 1.
Рассмотрим еще один алгоритм, позволяющий определить, является ли
данная формула тавтологией. Он основан на следующей теореме, которая явля24
ется критерием тождественной истинности произвольной формулы алгебры логики. Приведем эту теорему без доказательства.
Теорема 1.6.1. Формула алгебры логики является тавтологией тогда и только
тогда, когда любая элементарная дизъюнкция, входящая в КНФ этой формулы,
содержит некоторую пропозициональную переменную одновременно с ее отрицанием. 
Пример 1.6.1. Выяснить, является ли следующая формула тавтологией:
(xy  y)  (y  x).
Решение. Обозначим данную формулу через F. Покажем решение этой задачи
двумя способами.
I способ. Построим таблицу истинности формулу F (табл. 1.6.1).
x
0
0
1
1
y
0
1
0
1
xy
0
0
0
1
Таблица 1.6.1
xy  y y  x A
1
1
1
0
0
1
1
1
1
1
1
1
Так как формула F принимает значение 1 на всех возможных наборах
входящих в нее пропозициональных переменных, то она является тавтологией.
II способ. Упростим формулу F с помощью равносильных преобразований:
F  (xy 
)  (  x)  (xy  (  ) )  (  x)  (xy  )  (  x) 
 (x  )  (  x)  1. Следовательно, формула F является тавтологией. 
1.7. Решение логических задач методами алгебры логики
При решении логических задач с использованием методов алгебры логики
сначала проводят формализацию конкретных условий задачи, то есть записывают их виде одной или нескольких формул алгебры логики. Далее применяют
один из следующих способов решения (или, быть может, их комбинацию): табличный, логический или алгебраический. Покажем на конкретном примере суть
этих способов решения.
Пример 1.7.1. Рассмотрим текстовую логическую задачу: «В совершении преступления были заподозрены три человека: Андреев, Иванов и Сергеев. В результате расследования были выявлены следующие факты.
1. Андреев не виновен тогда и только тогда, когда Иванов виновен и Сергеев не
виновен или Иванов не участвовал в совершении преступления, а Сергеев 
участвовал.
2. Если Иванов не виновен, то Андреев виновен и Сергеев не виновен.
3. Если Андреев виновен, то Иванов – его соучастник, а Сергеев не виновен.
Кто из подозреваемых был участником преступления?».
25
Проведем сначала формализацию условий этой задачи. Обозначим через
A, B и C соответствующие высказывания «Андреев виновен», «Иванов виновен» и «Сергеев виновен». Тогда первый установленный в ходе следствия факт
можно записать в виде формулы F1 =  A  B   C   B  C, второй – в виде формулы F2 =  B  A   C, а третий – в виде формулы F3 = A  B   C.
Все указанные формулы истинны.
Таким образом, в результате формализации задачи имеем систему из трех
равносильностей:
(1.7.1)
Дальнейшие рассуждения можно проводить различными способами. При
табличном способе вместо системы равносильностей удобнее рассматривать
одну формулу, представляющую собой конъюнкцию формул, формализирующих условия логической задачи. Так как каждый логический сомножитель, составляющий полученную конъюнкцию, истинен, то и сама конъюнкция также
истинна. В нашем случае получаем следующую формулу:
F = ( A  B   C   B  C)  (  B  A   C)  ( A  B   C).
Составим таблицу истинности формулы F (табл. 1.7.1).
Из табл. 1.7.1 видно, что формула F истинна только в одном, а именно, в третьем из восьми
занумерованных случаев. Итак, получили, что
1 0 0 0 0 0 1 0 A = 0, B = 1 и C = 0. На естественном языке это
2 0 0 1 1 0 1 0 означает, что преступление совершил один чело3 0 1 0 1 1 1 1 век – Иванов.
Теперь решим эту же задачу логическим
4 0 1 1 0 1 1 0
5 1 0 0 1 1 0 0 способом. Не нарушая общности рассуждений,
6 1 0 1 0 0 0 0 будем их проводить относительно подозреваемо7 1 1 0 0 1 1 0 го Андреева. Возможны два случая: либо Андре8 1 1 1 0 1 0 0 ев виновен, либо не виновен.
Первый случай: A = 1. Будем рассматривать
систему (1.7.1). Из третьей равносильности этой системы находим, что
B   C = 1. Отсюда получаем, что B = 1 и C = 0. Подставляем полученные значения A, B и C в остальные равносильности системы и убеждаемся, что вторая
равносильность выполняется, а первая – не выполняется. Действительно,
 A = 0, а B   C   B  C = 1. Следовательно, F1 = 0. Значит, этот случай не
возможен.
Второй случай: A = 0. Тогда A   C = 0 и  A = 1. Из второй равносильности системы (1.7.1) находим, что B = 1. Затем из первой равносильности системы (1.7.1) получаем, что B   C   B  C = 1. Отсюда, учитывая, что B = 1,
имеем последовательно следующее:  B  C = 0, B   C = 1,  C = 1, C = 0.
Таблица 1.7.1
№ A B C F1 F2 F3 F
п/п
26
Найденные значения A, B, C удовлетворяют третьей равносильности системы
(1.7.1). Следовательно, решение найдено.
Рассмотрим третий способ решения – алгебраический. Он заключается в
приведении формулы F с помощью равносильных преобразований к наиболее
простому виду, позволяющему дать ответ на вопрос задачи. В результате
упрощения формулы F получим следующую цепочку равносильностей:
F  ( A  (B   C   B  C)  A   (B   C   B  C))  (B   A 
 B   C  A  B   C)  ( A  B   C   A   B  C  A  ( B  C) 
 ( B   C))  (B   A  B   C)  ( A  B   C   A   B  C  A 
 (C  B   B   C))  (B   A  B   C)  ( A  B   C   A   B 
 C  A  B  C  A   B   C))  (B   A  B   C)   A  B   C 
  A  B   C   A  B   C. Так как F  1, то и  A  B   C  1. В свою
очередь  A  B   C  1 тогда и только тогда, когда A = 0, B =1 и C = 0. 
Глава II. Булевы функции
2.1. Понятие булевой функции
В главе I отмечалось, что семантически формулы алгебры логики полностью описываются таблицами истинности. Следовательно, можно отвлечься от
синтаксической структуры формул и рассматривать только их таблицы истинности, которые представляют собой не что иное как табличное задание различных функциональных зависимостей.
В связи с этим естественно ввести в алгебре логики понятие функции,
принимающей значения 0 или 1, аргументы которой также принимают значения
0 или 1. Дадим строгое определение этого понятия. При этом элементы множества {0, 1} рассматриваются как формальные символы, допускающие логическую интерпретацию, но не имеющие арифметического смысла.
Определение 2.1.1. Произвольное отображение n-й степени множества
{0, 1} во множество {0, 1} называется булевой функцией n переменных.
Таким образом, f (x1, x2, …, xn) – булева функция n переменных, если
f: {0, 1}n  {0, 1}.
Булевы функции также называют логическими, переключательными
функциями или функциями алгебры логики.
Рассмотрим различные способы задания булевых функций. Всякую булеву функцию f (x1, x2, …, xn) можно задать таблицей истинности (табл. 2.1.1), в
левой части которой перечислены в лексикографическом порядке все возможные наборы значений переменных, а в правой части – соответствующие значения функции.
x1
0
0
x2
0
0
… xn1 xn
… 0
0
… 0
1
Таблица 2.1.1
f (x1, x2, …, xn)
f (0,0, …, 0, 0)
f (0,0, …, 0, 1)
27
…
…
…
…
…
…
Если булева функция f и формула
F алгебры логики имеют одну и ту же
1 1 … 1
0 f (1,1, …, 1, 0) таблицу истинности, то будем говорить,
1 1 … 1
1 f (1,1, …, 1, 1) что формула F представляет или реализует функцию f. Таким образом, формула F алгебры логики, представляющая булеву функцию f, может служить способом задания этой функции.
Следует отметить, что задание булевой функции представляющей ее формулой алгебры логики неоднозначно. Действительно, любые две равносильные
формулы алгебры логики имеют одинаковые таблицы истинности, а значит,
представляют одну и ту же булеву функцию.
Еще одним способом задания булевой функции является перечисление
всех наборов значений переменных, на которых она принимает значение 0, либо перечислением всех наборов значений переменных, на которых она принимает значение 1.
Пример 2.1.1. Для булевой функции f (x1, x2, x3) даны наборы значений переменных x1, x2, x3, на которых функция принимает значение нуль, остальные
значения функции f равны единице: f (1, 0, 0) = f (1, 0, 1) = f (1, 1, 1) = 0. 
Определение 2.1.2. Кортеж всех возможных значений булевой функции
f (x1, x2, …, xn), упорядоченный в соответствии с лексикографическим порядком
на множестве наборов значений переменных x1, x2, …, xn, называется вектором
значений функции f.
Указание значений булевой функции также является одним из способов
ее задания.
Пример 2.1.2. Вектором значений булевой функции f (x1, x2, x3) из примера
2.1.1 является кортеж (1111 0010). 
Определим, сколько существует различных булевых функций n переменных.
Теорема 2.1.1 (о числе булевых функций n переменных). Число различных бу-
левых функций n переменных равно
.
Доказательство. Чтобы задать булеву функцию f (x1, x2, …, xn) n переменных,
нужно перечислить все возможные наборы значений переменных x1, x2, …, xn,
составленных из нулей и единиц, и для каждого такого набора указать значение
функции, которое она принимает на этом наборе.
Таким образом, сначала требуется определить число всех возможных
наборов значений переменных x1, x2, …, xn. Эти наборы представляют собой
кортежи длины n с элементами из множества {0, 1}, причем элементы в кортежах могут повторяться. Другими словами, набор значений переменных x1, x2,
…, xn – это размещение с повторением из двух элементов по n. Следовательно,
28
число всех возможных наборов значений переменных x1, x2, …, xn равно числу
всех размещений с повторением из двух элементов по n. Известно, что число
всех размещений с повторениями из m элементов по k равно mk. Отсюда
= 2n.
Получили, что для задания булевой функции f (x1, x2, …, xn) n переменных
нужно указать ее значение (0 или 1) для каждого из 2 n различных наборов значений переменных x1, x2, …, xn. Значит, число различных булевых функций n
переменных равно числу
всех размещений с повторениями из двух элемен-
тов по 2n. Имеем
=
. Теорема доказана. 
Определение 2.1.3. Булева функция f (x1, x2, …, xn) называется тождественно
равной нулю (или константой 0), если она при любых значениях переменных
принимает значение 0.
Определение 2.1.4. Булева функция f (x1, x2, …, xn) называется тождественно
равной единице (или константой 1), если она при любых значениях переменных принимает значение 1.
Определение 2.1.5. Две булевы функции f (x1, x2, …, xn) и g (x1, x2, …, xn) называются равными, если для всех возможных наборов значений переменных они
принимают одинаковые значения.
Если булевы функции f (x1, x2, …, xn) и g (x1, x2, …, xn) равны, то пишут:
f (x1, x2, …, xn) = g (x1, x2, …, xn). Из определения 2.1.3 следует, что равные функции имеют одну и ту же таблицу истинности.
Определение 2.1.6. Переменная xi в булевой функции
f (x1, x2, …, xi1, xi , xi+1, …, xn) называется существенной, если
f (x1, x2, …, xi1, 0 , xi+1, …, xn)  f (x1, x2, …, xi1, 1 , xi+1, …, xn)
хотя бы для одного набора значений остальных переменных. В этом случае говорят, что булева функция f (x1, x2, …, xi1, xi , xi+1, …, xn) существенно зависит
от переменной xi.
Определение 2.1.7. Переменная xi в булевой функции
f (x1, x2, …, xi1, xi , xi+1, …, xn) называется несущественной (или фиктивной),
если
f (x1, x2, …, xi1, 0 , xi+1, …, xn) = f (x1, x2, …, xi1, 1 , xi+1, ..., xn)
при любых значениях остальных переменных.
Другими словами, переменная xi в булевой функции
f (x1, x2, …, xi1, xi , xi+1, …, xn) является фиктивной, если изменение значения переменной xi в любом наборе значений переменных x1, x2, …, xn не меняет значения функции f.
Пример 2.1.3. Рассмотрим булеву функцию f (x, y, z), заданную таблицей истинности (табл. 2.1.2).
29
Из табл. 2.1.2 находим:
f (0, 0, 0) = f (0, 0, 1) = 0;
f (0, 1, 0) = f (0, 1, 1) = 1;
f (1, 0, 0) = f (1, 0, 1) = 0;
f (1, 1, 0) = f (1, 1, 1) = 0.
Таким образом, для функции f (x, y, z) выполняется
следующее условие: f (x, y, 0) = f (x, y, 1) при любых значениях переменных x и y. Значит, согласно определению 2.1.7
переменная z в функции f (x, y, z) является фиктивной.
Переменная x в рассматриваемой функции является
существенной, так как, например, f (0, 1, 1) = 1, а
f (1, 1, 1) = 0. Функция f также существенно зависит и от переменной y, так как,
например, f (0, 0, 0) = 0, а f (0, 1, 0) = 1. 
Пусть переменная xi в булевой функции f (x1, x2, …, xi1, xi , xi+1, …, xn) является фиктивной. Рассмотрим таблицу истинности функции f и вычеркнем в
ней все строки вида (1, 2, …, i1, 1, i+1, …, n) и столбец значений переменной xi. В результате получим таблицу истинности функции
 (x1, x2, …, xi1, xi+1, …, xn), которая уже зависит от n  1 переменных. В этом
случае говорят, что функция  получена из функции f с помощью удаления
фиктивной переменной xi, а функция f получена из функции  с помощью введения фиктивной переменной xi.
Определение 2.1.8. Пусть f (x1, x2, …, xn) и  (x1, x2, …, xm) – две булевы функции, где n  m. Функции f и , зависящие от разного числа переменных, называются равными, если одна из них получается из другой с помощью введения
или удаления некоторых фиктивных переменных.
Согласно определению 2.1.6 любое конечное множество M булевых
функций можно считать зависящим от одного и того же множества переменных, которое является объединением множеств переменных всех функций из
множества M.
Рассмотрим все булевы функции одной и двух переменных.
Определение 2.1.9. Булевой функцией одной переменной называется функция
f: {0, 1}  {0, 1}.
Таким образом, областью определения и областью значений булевой
функции одной переменной является множество {0, 1}. Из теоремы 2.1.1 следует, что существуют четыре различных булевых функций одной переменной.
Все они приведены в таблице истинности (табл. 2.1.3), где номер функции, записанный в двоичной системе счисления, есть столбец значений соответствующей функции.
Таблица 2.1.2
x
y z f
0
0 0 0
0
0 1 0
0
1 0 1
0
1 1 1
1
0 0 0
1
0 1 0
1
1 0 0
1
1 1 0
Таблица 2.1.3
x f0 (x) f1 (x) f2 (x) f3 (x)
0 0
0
1
1
1 0
1
0
1
Из этой таблицы легко видеть, что булевы
функции одной переменной могут быть представлены формулами алгебры логики следующим образом:
f0 (x) = 0, f1 (x) = x, f2 (x) =  x, f3 (x) = 1.
30
Замечание 2.1.1. Если функция алгебры логики реализуется формулой, содержащей единственную логическую связку, то она имеет такое же название, какое
имеет используемая в формуле логическая связка. 
Согласно замечанию 2.1.1 булевы функции одной переменной имеют следующие названия:
f0 (x) – тождественно равная нулю (или константа 0);
f1 (x) – тождественная;
f2 (x) – отрицание;
f3 (x)  тождественно равная единице (или константа 1).
В функциях f0 (x) и f3 (x) переменная x является фиктивной, а в функциях
f1 (x) и f2 (x) – существенной.
Определение 2.1.10. Булевой функцией двух переменных называется функция
g: {0, 1}2  {0, 1}.
Областью определения булевой функции двух переменных является множество {0, 1}2 – множество всех упорядоченных пар, составленных из нулей и
единиц, а областью значений  множество {0, 1}. По теореме 2.1.1 имеется 16
различных булевых функций двух переменных. Перечислим их в таблице истинности (табл. 2.1.4), нумеруя функции так же, как и функции одной переменной. При этом будем обозначать gi (x1, x2) более кратко через gi.
x1
0
0
1
1
x2
0
1
0
1
g0
0
0
0
0
g1
0
0
0
1
g2
0
0
1
0
g3
0
0
1
1
g4
0
1
0
0
g5
0
1
0
1
g6
0
1
1
0
g7
0
1
1
1
g8
1
0
0
0
g9 g10 g11
1 1 1
0 0 0
0 1 1
1 0 1
Таблица 2.1.4
g12 g13 g14 g15
1 1 1 1
1 1 1 1
0 0 1 1
0 1 0 1
Учитывая таблицу 2.1.4 и замечание 2.1.1, для наиболее важных булевых
функций двух переменных приведем реализующие их формулы алгебры логики
и соответствующие названия функций:
g0 (x1, x2) = 0 – тождественно равная нулю (или константа 0);
g1 (x1, x2) = x1  x2 – конъюнкция;
g6 (x1, x2) = x1  x2 – сложение по модулю 2 (mod 2);
g7 (x1, x2) = x1  x2 – дизъюнкция;
g8 (x1, x2) = x1  x2 – стрелка Пирса;
g9 (x1, x2) = x1  x2 – эквиваленция;
g13 (x1, x2) = x1  x2 – импликация;
g14 (x1, x2) = x1  x2 – штрих Шеффера;
g15 (x1, x2) = 1 – тождественно равная единице (или константа 1).
Замечание 2.1.2. Функции g0 (x1, x2) и g15 (x1, x2) имеют две фиктивные переменные. Формально эти функции отличаются от f0 (x) и f3 (x) в табл. 2.1.3, так
31
как все булевы функции одной переменной представляют собой унарные алгебраические операции на множестве {0, 1}, а все булевы функции двух переменных – бинарные алгебраические операции на множестве {0, 1}. Однако, согласно определению 2.1.6, f0 (x) = g0 (x1, x2) и f3 (x) = g15 (x1, x2). 
Определим операцию над булевыми функциями, с помощью которой
можно образовывать новые функции из нескольких исходных.
Определение 2.1.11. Суперпозицией функций f1, f2, …, fk называется функция
f, полученная некоторой подстановкой функций f1, f2, …, fk друг в друга и переименования переменных.
Замечание 2.1.3. Приведенное определение суперпозиции не является строгим,
а отражает интуитивный смысл этой операции. Строгое определение суперпозиции булевых функций можно найти, например, в курсе лекций И.А. Палий
[9]. 
Пример 2.1.4. Рассмотрим функции f1 (x, y) = x  y, f2 (x, y) = x  y, f3 (x) = .
Функция f (x, y) = (x  y)  является суперпозицией функций f1, f2 и f3. 
2.2. Представление произвольной булевой функции
в виде формулы алгебры логики
Всякая формула алгебры логики является булевой функцией. Тавтология
и противоречие есть постоянные функции. Возникает вопрос о представлении
произвольной булевой функции некоторой формулой алгебры логики.
Соглашение 2.2.1. В этом параграфе и далее в главе II условимся операцию
конъюнкцию обозначать символом «» и при этом точку опускать. 
Пусть x – переменная и   параметр, принимающие значения из множества {0, 1}. Обозначим через x выражение x  . Тогда
Выражение x, то есть переменная x с отрицанием или без него, называется литерой.
Лемма 2.2.1. x = 1  x = .
Доказательство. Пусть x = 1, то есть x 
= 1. Следовательно, согласно
определению операции дизъюнкции, x = 1 или
= 1. Если x = 1, то по
определению операции конъюнкции x =  = 1. Если же
= 1, то
= 1,

откуда x =  = 0. Итак, мы показали, что если x = 1, то x = .
Пусть x = . Тогда x = x 
=xx
= x  = 1. Лемма доказана. 
32
Теорема 2.2.1 (разложение булевой функции n переменных по m переменным). Всякая булева функция f (x1, x2, …, xn) может быть представлена в следующем виде:
где m  n, а дизъюнкция берется по всем возможным наборам значений переменных x1, x2, …, xm.
Доказательство. В левой и правой частях равенства (2.2.1) – булевы функции
переменных x1, x2, …, xn. Чтобы доказать равенство двух булевых функций,
число переменных которых одинаково, нужно показать равенство их значений
для всех возможных наборов значений переменных.
Пусть (1, 2, …, n) – произвольный набор значений переменных
(x1, x2, …, xn). Тогда функция в левой части равенства (2.2.1) на этом наборе
принимает значение f (1, 2, …, n).
Найдем значение функции в правой части равенства (2.2.1) на наборе
(1, 2, …, n). Пусть (1, 2, …, m) – произвольный набор переменных
x1, x2, …, xm. Заметим сначала, что по лемме 2.2.1 для любого номера i
(i = 1, 2, …, m) равенство
= 1 выполняется тогда и только тогда, когда
xi = i. Значит, конъюнкция
на наборе (1, 2, …, m) равна 1
тогда и только тогда, когда i = i (i = 1, 2, …, m). Во всех остальных случаях,
то есть когда для некоторого номера i {1, 2, …, m} справедливо неравенство
i  i и, следовательно,
= 0, значение конъюнкции
на
наборе (1, 2, …, m) равно 0. Поэтому функция в правой части равенства
(2.2.1) на наборе (1, 2, …, n) принимает значение
Получили, что булевы функции в обеих частях равенства (2.2.1) равны,
так как на произвольном наборе (1, 2, …, n) принимают одно и то же значение. 
Представление (2.2.1) булевой функции f (x1, x2, …, xm, xm+1, …, xn) называется разложением этой функции по m переменным x1, x2, …, xm.
Рассмотрим важные частные случаи, когда m = 1 и m = n.
Следствие 2.2.1 (разложение булевой функции одной переменной). Всякая
булева функция f (x1, x2, …, xn) может быть представлена в следующем виде:
33
Доказательство. Разложим функцию f (x1, x2, …, xn), например, по переменной
x1. Тогда по теореме 2.2.1 функцию можно представить в виде:
Так как 1 может принимать два значения  0 или 1, то в этом равенстве всего
два логических слагаемых. Подставляя вместо 1 его возможные значения, получаем, что
В этом случае функции f (0, x2, …, xn) и f (1, x2, …, xn) называются компонентами разложения.
Аналогичное разложение справедливо для любой из n переменных. 
Следствие 2.2.2 (разложение булевой функции по всем n переменным). Всякая булева функция f (x1, x2, …, xn), не равная тождественно нулю, может быть
представлена в следующем виде:
где дизъюнкция берется по всем наборам (1, 2, …, n) значений переменных
x1, x2, …, xn, на которых функция f принимает значение 1.
Доказательство. По теореме 2.2.1 функцию f (x1, x2, …, xn) можно представить
в виде:
где дизъюнкция берется по всем 2n наборам значений переменных x1, x2, …, xn.
Логические сомножители f (1, 2, …, n) в конъюнкциях правой части равенства (2.2.4) равны 0 или 1. Если f (1, 2, …, n) = 0, то соответствующая конъюнкция также равна 0. Так как по условию функция f не является тождественно равной нулю, то, удаляя в правой части этого равенства равные нулю конъюнкции, получим
34
Таким образом, произвольная булева функция f (x1, x2, …, xn) n переменных, не равная тождественно нулю, может быть представлена в виде формулы
алгебры логики (2.2.3). 
Заметим, что любая подформула
формулы
является элементарной конъюнкцией. Следовательно, формула (2.2.5) находится в ДНФ. При этом, как легко видеть, она удовлетворяет все четырем условиям
совершенства. Таким образом, формула (2.2.5) находится в СДНФ. Поэтому
разложение (2.2.5) не равной тождественно нулю булевой функции
f (x1, x2, …, xn) называется совершенной дизъюнктивной нормальной формой
(СДНФ) этой функции. Число логических слагаемых в СДНФ функции
f (x1, x2, …, xn) равно числу наборов значений переменных x1, x2, …, xn, на которых функция принимает значение 1. Значит, между таблицей истинности функции f и ее СДНФ существует взаимно однозначное соответствие. Следовательно, СДНФ для любой тождественно не равной нулю булевой функции является единственной (с точностью до перестановки элементарных конъюнкций
и литер в них).
Единственной булевой функцией, не имеющей СДНФ, является тождественно равная нулю. Ее также можно представить формулой алгебры логики,
например формулой x . Таким образом, справедлива следующая теорема.
Теорема 2.2.2. Всякая булева функция f (x1, x2, …, xn) может быть представлена булевой формулой. Если f не является тождественно равной нулю, то существует представляющая ее формула, находящаяся в СДНФ:
причем такое представление единственно с точностью до перестановки элементарных конъюнкций и литер в них. 
Каждое логическое слагаемое в СДНФ функции f называется конституентой единицы. Дадим строгое определение этого понятия.
Определение 2.2.1. Пусть x1, x2, …, xn – переменные, принимающие значения из
множества {0, 1}, и (1, 2, …, n) – набор, состоящий из нулей и единиц.
Конституентой единицы набора (1, 2, …, n) называется элементарная
конъюнкция K1(1, 2, …, n) =
.
35
Из леммы 2.2.1 следует, что K1(1, 2, …, n) = 1 тогда и только тогда, когда xi = i (i = 1, 2, …, n).
Таким образом, СДНФ булевой функции является дизъюнкция некоторых
конституент единицы, среди которых нет одинаковых.
Из формулы (2.2.5) следует алгоритм построения СДНФ произвольной
тождественно не равной нулю булевой функции f (x1, x2, …, xn) по таблице
истинности:
1. В таблице истинности функции f (x1, x2, …, xn) отмечаются все наборы
(1, 2, …, n) значений переменных x1, x2, …, xn, для которых
f (1, 2, …, n) = 1.
2. Для каждого отмеченного набора (1, 2, …, n) записывается конституента
единицы
,
в которой переменная xi (i = 1, 2, …, n) берется с отрицанием, если i = 0, и без
отрицания, если i = 1.
3. Дизъюнкция всех полученных в результате выполнения п. 2 конституент
единицы дает СДНФ функции f.
Пример 2.2.1. Найти СДНФ булевой функции f (x1, x2, x3), заданной таблицей
истинности (табл. 2.2.1).
Решение. Выделим в табл. 2.2.1 жирным шрифтом наборы
Таблица 2.2.1
x1 x2 x3 f значений переменных, на которых данная функция прини0
0 0 1 мает значение 1.
Для каждого выделенного набора (1, 2, n) записыва0
0 1 0
0
1 0 1 ется конституента единицы
,
0
1 1 0
1
0 0 0 в которой переменная xi (i = 1, 2, 3) берется с отрицанием,
1
0 1 1 если i = 0, и без отрицания, если i = 1. Получаем, что
,
1
1 0 1 набору (0, 0, 0) соответствует конституента единицы
, (1, 0, 1) 
, (1, 1, 0) 
.
1
1 1 0 (0, 1, 0) 
Дизъюнкция всех полученных конституент единицы является СДНФ
функции f. Таким образом, получаем, что
СДНФ f =



.
Если булева функция f задана реализующей ее формулой алгебры логики
F, не находящейся в СДНФ, то найти СДНФ булевой функции f можно двумя
способами:
1) построить таблицу истинности формулы F и воспользоваться приведенным
выше алгоритмом построения СДНФ булевой функции по таблице истинности;
2) привести формулу F к СДНФ, используя алгоритм приведения формулы алгебры логики к СДНФ, основанный на ее равносильных преобразованиях
(см. п. 1.1.5).
36
Булеву функцию можно представить не только ее СДНФ. Справедлива
следующая теорема, которую сформулируем без доказательства.
Теорема 2.2.3. Всякая булева функция f (x1, x2, …, xn), не равная тождественно
единице, может быть представлена в следующем виде:
где конъюнкция берется по всем наборам (1, 2, …, n) значений переменных
x1, x2, …, xn, на которых функция f принимает значение 0. 
Очевидно,
что
любая
подформула
формулы
(2.2.6) является элементарной дизъюнкцией. Это означает, что формула (2.2.6)
находится в КНФ. Более того, она удовлетворяет все четырем условиям совершенства и, следовательно, находится в СКНФ. Поэтому представление (2.2.6)
не равной тождественно единице булевой функции f (x1, x2, …, xn) называется
ее совершенной конъюнктивной нормальной формой (СКНФ). Так же как и
СДНФ булевой функции, СКНФ определяется однозначно с точностью до перестановки элементарных дизъюнкций и литер в них.
Единственной булевой функцией, не имеющей СКНФ, является тождественно равная единице. Она реализуется, например, формулой x  . Таким
образом, имеет место теорема, аналогичная теореме 2.2.2.
Теорема 2.2.4. Если f не является тождественно равной единице, то существует представляющая ее формула, находящаяся в СКНФ:
причем такое представление единственно с точностью до перестановки элементарных дизъюнкций и литер в них. 
Каждый логический сомножитель в СКНФ функции f называется конституентой единицы. Строго это понятие определяется следующим образом.
Определение 2.2.2. Пусть x1, x2, …, xn – переменные, принимающие значения из
множества {0, 1}, и (1, 2, …, n) – набор, состоящий из нулей и единиц.
Конституентой нуля набора (1, 2, …, n) называется элементарная дизъюнкция
K0
( 1 ,
2,
…,
n)
=
.
0
Из леммы 2.2.1 следует, что K (1, 2, …, n) = 0 тогда и только тогда, когда xi = i (i = 1, 2, …, n).
37
Значит, СКНФ булевой функции является конъюнкцией некоторых конституент нуля, среди которых нет одинаковых.
Из формулы (2.2.6) следует алгоритм построения СКНФ произвольной
тождественно не равной единице булевой функции f (x1, x2, …, xn) по таблице истинности.
1. В таблице истинности функции f (x1, x2, …, xn) отмечаются все наборы
(1, 2, …, n) значений переменных x1, x2, …, xn, для которых
f (1, 2, …, n) = 0.
2. Для каждого набора (1, 2, …, n) записывается конституента нуля
,
в которой переменная xi (i = 1, 2, …, n) берется с отрицанием, если i = 1, и без
отрицания, если i = 0.
3. Конъюнкция всех полученных в результате выполнения п. 2 конституент нуля дает СКНФ функции f.
Пример 2.2.2. Найти СКНФ булевой функции f(x1, x2, x3) из примера 2.2.1.
Решение. В табл. 2.2.1 находим все наборы значений переменных, на которых
данная функция принимает значение: (0, 0, 1), (0, 1, 1), (1, 0, 0), (1, 1, 1).
Для каждого из вышеперечисленных наборов (1, 2, n) записывается
конституента нуля
,
в которой переменная xi (i = 1, 2, 3) берется с отрицанием, если i = 1, и без отрицания, если i = 0. Получаем, что набору (0, 0, 1) соответствует конституента
нуля
, (0, 1, 1) 
, (1, 0, 0) 
, (1, 1, 1) 
.
Конъюнкция всех полученных конституент нуля является СКНФ функции f. Таким образом, получаем, что
СКНФ f = (
)(
)(
)(
). 
Если булева функция f представлена формулой алгебры логики F, не
находящейся в СКНФ, то найти СКНФ булевой функции f можно следующими
способами:
1) построить таблицу истинности формулы F и воспользоваться приведенным
выше алгоритмом построения СКНФ булевой функции по таблице истинности;
2) привести формулу F к СКНФ, используя алгоритм приведения формулы алгебры логики к СКНФ, основанный на ее равносильных преобразованиях
(см. п. 1.1.5).
Между СДНФ и СКНФ булевой функции существует связь, отраженная в
следующей теореме.
Теорема 2.2.5. Пусть f (x1, x2, …, xn) – булева функция n переменных, тождественно не равная единице. Тогда справедлива равносильность
СКНФ f 
.
Доказательство. Используя теорему 2.2.2 и учитывая, что
38

, имеем
то
Заметим, что
Получили, что
Тогда
=
(i = 1, 2, …, n).
Теорема доказана. 
СДНФ и СКНФ булевых функций имеют большое значение для теоретических исследований и решения практических задач. В частности, их используют при минимизации булевых функций.
2.3. Минимизация булевых функций
На основании теорем 2.2.2 и 2.2.3 любая булева функция представима в
виде СДНФ или СКНФ, причем единственным образом. Во многих случаях совершенную нормальную форму можно преобразовать к другой, равносильной
нормальной форме (ДНФ или КНФ). В связи с этим множество P2 всех булевых
функций можно рассматривать как класс ДНФ или КНФ.
Булевы функции используются в качестве математических моделей различных цифровых электронных устройств. Чем проще аналитическое выражение функции, тем экономичнее и практически проще ее техническая реализация. Сложность булевой функции определяется обычно количеством букв в ее
конъюнктах или дизъюнктах. В связи с этим актуальной является задача преобразования булевых функций к более простому аналитическому представлению,
имеющему наименьшее возможное число вхождений переменных (см. замечание 1.4.4). Такое преобразование называется минимизацией булевой функции.
39
Рассмотрим два метода минимизации булевых функций в классе ДНФ –
метод Квайна и метод карт Карно. Предварительно введем ряд понятий, необходимых в дальнейшем.
Определение 2.3.1. Булева функция  (x1, x2, …, xn) называется импликантой
булевой функции f (x1, x2, …, xn), если на любом наборе значений переменных
x1, x2, …, xn, на котором функция  принимает значение 1, функция f также
принимает значение 1.
Определение 2.3.2. Элементарным произведением называется элементарная
конъюнкция, в которую любая переменная входит не более одного раза.
Определение 2.3.3. Импликанта  (x1, x2, …, xn) булевой функции
f (x1, x2, …, xn) называется простой, если она реализуется элементарным произведением F =
, обладающим свойством: удаление любой литеры из F не приводит к формуле, представляющей импликанту функции f.
Пример 2.3.1. Найти все импликанты и простые импликанты булевой функции
f (x, y) = x  y.
Решение. Прежде всего заметим, что всего существует восемь элементарных
произведений, содержащих переменные x и y: x, y, , , xy, y, x ,
. Чтобы
определить, какие из них являются импликантами, составим следующую таблицу (табл. 2.3.1).
1
x
0
0
1
1
2 3
y xy
0 1
1 1
0 1
1 0
4
x
0
0
1
1
5
y
0
1
0
1
6 7
1
1
0
0
1
0
1
0
Таблица 2.3.1
8 9 10 11
xy y x
0 0 0 1
0 1 0 0
0 0 1 0
1 0 0 0
По табл. 2.3.1 находим функции, значения которых на фиксированных
наборах значений переменных x и y не превосходят соответствующих значений данной функции. Этому условию удовлетворяют функции, значения которых расположены в 6-м, 7-м, 9-м, 10-м и 11-м столбцах табл. 2.3.1. Таким образом, согласно определению 2.3.1 функции , , y, x и
являются импликантами данной функции f.
Используя определение 2.3.3, находим, что среди них простыми импликантами являются только функции
и . Действительно, импликанта x не
является простой, так как удаление из нее литеры x приводит к импликанте
данной функции f. Импликанта
не является простой, так как удаление из
нее, например, литеры приводит к импликанте функции f. 
40
Легко видеть, что справедливы следующие утверждения.
Утверждение 2.3.1. Дизъюнкция любого числа импликант булевой функции
так же является импликантой этой функции. 
Утверждение 2.3.2. Любая булева функция реализуется дизъюнкцией
своих простых импликант. 
всех
Определение 2.3.4. Сокращенной ДНФ булевой функции называется дизъюнкцией всех ее простых импликант.
Определение 2.3.5. Простая импликанта, содержащаяся в сокращенной ДНФ
булевой функции f, называется лишней, если ее удаление не меняет таблицы
истинности функции f.
Определение 2.3.6. ДНФ булевой функции, полученная из сокращенной ДНФ
этой функции путем удаления всех лишних импликант, называется тупиковой.
Следует отметить, что представление булевой функции в виде тупиковой
ДНФ в общем случае не единственно. Тупиковые ДНФ одной и той же функции
могут содержать разное число букв.
Определение 2.3.7. Множество простых импликант булевой функции f , входящих во все тупиковые ДНФ функции f , называется ядром функции f.
Определение 2.3.8. Тупиковая ДНФ булевой функции, содержащая наименьшее число вхождений переменных, называется минимальной ДНФ (МДНФ)
этой функции.
Метод Квайна12
Метод Квайна применим к булевым функциям, представленным в виде
СДНФ, и основывается на использовании следующих двух операций.
1. Операция неполного склеивания:
K x  K  K x  K  K,
где K – произвольное элементарное произведение; х – переменная.
Доказательство. K x  K  K x  K  K (x  )  K x  K  K.
2. Операция элементарного поглощения:
K x  K  K,  {0, 1}.
Доказательство. K x  K  K (x  1)  K.
Решение задачи минимизации булевой функции методом Квайна включает три этапа:
1) получение сокращенной ДНФ;
2) нахождение всех тупиковых ДНФ;
3) выбор из полученных тупиковых ДНФ минимальных ДНФ.
Уиллард Ван Орман Квайн (англ. Willard Van Orman Quaine) (19082000)  американский
логик и философ.
41
12
Рассмотрим подробнее каждый их перечисленных этапов, одновременно
демонстрируя их реализацию на конкретном примере.
Этап I. Получение сокращенной ДНФ основывается на следующей теореме.
Теорема 2.3.1 (Квайна). Если исходя из СДНФ булевой функции произвести
все возможные операции неполного склеивания, а затем операции элементарного поглощения, то получится сокращенная ДНФ. 
Таким образом, на этом этапе в СДНФ булевой функции следует последовательно выполнить все возможные операции неполного склеивания и затем
все операции элементарного поглощения. В результате получится сокращенная
ДНФ функции.
Пример 2.3.2. Применим первый этап минимизации к булевой функции
f=


x x
 xyz. Имеем
f
(  y) 




x
(1 ) 

(1 z) 
x
(1 y) 
(  x) 
x
x
(1 ) 


(  z) 
x
 xyz 

 xyz 
(1 ) 
(  x)  x (  z)  x


(1 y) 
x x 

(1  ) 
(1  x)
(1 x)  x (1  )   x (1 z)  x

(  y) 
(1 ) 
 x  x . Итак, сокращенной ДНФ функции
f является функция f сокр. ДНФ (x, y, z) =



x x .
На практике этот этап удобно проводить с помощью таблицы, в заголовках
столбцов и строк которой записываются конституенты единицы СДНФ минимизируемой булевой функции. С помощью этой таблицы подбираются пары конституент единицы, отличающиеся друг от друга только одной литерой. Результат
неполного склеивания записывается в таблицу на пересечении строки и столбца,
которые соответствуют склеиваемым конституентам единицы. Такая таблица является симметричной относительно главной диагонали, поэтому сокращенной
ДНФ функции является дизъюнкция импликант только в верхней (или только в
нижней) части таблицы при условии, что к этим импликантам не применима
операция неполного склеивания. В противном случае аналогичным способом заполняется следующая таблица, столбцы и строки которой соответствуют импликантам в верхней (или нижней) относительно главной диагонали части
предыдущей таблицы. Заполнение таблиц продолжается до тех пор, пока полученные при неполном склеивании импликанты не будут являться простыми, то
есть к ним нельзя будет применить операцию неполного склеивания.
42
В качестве примера заполним таблицу (табл. 2.3.2) по указанному алгоритму для рассматриваемой нами функции f.
Таблица 2.3.2
xyz
x
x
Конституенты
единицы
x
x
x
x
x
xyz
x
Так как все импликанты, стоящие в верхней относительно главной диагонали части таблицы, больше нельзя склеить, то они являются простыми и, значит, их дизъюнкция представляет собой сокращенную ДНФ функции f. 
Замечание 2.3.1. Условимся в дальнейшем на первом этапе минимизации булевой функции заполнять только верхнюю относительно главной диагонали часть
таблицы. 
Этап II. Для нахождения всех тупиковых ДНФ строится таблица Квайна,
столбцы которой соответствуют конституентам единицы СДНФ булевой функции, а строки – простым импликантам из полученной на первом этапе сокращенной ДНФ функции. Если простая импликанта является частью конституенты единицы, то на пересечении соответствующих строки и столбца ставится
метка («1», «» или «»). Условимся использовать метку «1».
Для примера 2.3.2 таблица Квайна (табл. 2.3.3) имеет вид
Таблица 2.3.3
№
простой
импликанты
1
2
3
4
5
6
Простые
импликанты
Конституенты единицы
x
1
1
xyz
x
1
1
1
1
1
1
1
x
x
43
1
1
1
Далее с помощью таблицы Квайна находится ядро булевой функции, которое обязательно входит во все ее тупиковые ДНФ. Для этого ищутся столбцы
таблицы Квайна, имеющие только одну единицу. Соответствующие этим единицам простые импликанты называются базисными и составляют ядро булевой
функции.
В тупиковую ДНФ, кроме базисных, выбирается минимальное число простых импликант, которые совместно с ядром функции поглощают (перекрывают)
все конституенты единицы. Это означает, что каждый столбец таблицы Квайна
должен содержать хотя бы одну единицу, стоящую на пересечении со строкой,
соответствующей одной из выбранных импликант. При выборе простых импликант в тупиковую ДНФ следует учитывать, что импликанта является лишней, если после условного удаления соответствующей ей строки в каждом
столбце таблицы остается хотя бы по одной единице.
Возвращаясь к примеру 2.3.2 находим, что ядро функции f является пустым множеством. Из таблицы 2.3.2 видно, что все конституенты единицы
СДНФ функции f могут быть перекрыты пятью способами: совокупностями
импликант {
{
,
,
,
,
, x }, {
,
, x , x }, {
,
, x }, {
,
,x }и
, x }. Следовательно, функция f имеет пять тупиковых ДНФ:
f1 (x, y, z) =


  x , f4 (x, y, z) =
 x , f2 (x, y, z) =


 x , f5 (x, y, z) =
 x  x , f3 (x, y, z) =


 x .

Замечание 2.3.2. Если булева функция имеет более четырех простых импликант, то для выявления тупиковых ДНФ удобно воспользоваться следующей
последовательностью действий.
В таблице Квайна все простые импликанты нумеруются, и по каждому
столбцу составляется символическая дизъюнкция номеров простых импликант,
имеющих в этом столбце единицу. Далее составляется символическое выражение, представляющее собой конъюнкцию всех дизъюнкций, образованных по
всем столбцам таблицы Квайна. Это символическое выражение с помощью
дистрибутивного закона и закона поглощения приводится к ДНФ. Каждой символической конъюнкции в полученной ДНФ сопоставляется тупиковая ДНФ
минимизируемой булевой функции, являющаяся дизъюнкцией простых импликант с номерами из соответствующей символической конъюнкции.
Руководствуясь предложенной последовательностью действий, найдем
все тупиковые ДНФ булевой функции из примера 2.3.2. По каждому столбцу
составим символическую дизъюнкцию номеров простых импликант, имеющих
44
в этом столбце единицу, и рассмотрим символическую конъюнкцию F этих
дизъюнкций. Имеем F = (1  2)  (1  3)  (3  4)  (2  5)  (5  6)  (4  6).
Приведем формулу F к ДНФ:
F  (1  1  2  1  3  2  3)  (3  4  4  3  6  4  6)  (2  5  5  2  6  5  6) 
 (1  2  3)  (4  3  6)  (5  2  6) 
 (1  4  2  3  4  1  3  6  2  3  6)  (5  2  6) 
14523451356235612462346
 1  2  3  6  2  3  6  1  4  5  2  3  4  5  1  3  5  6  1  2  4  6  2  3  6.
Так как ДНФ F содержит пять логических слагаемых, то исходная функция имеет пять тупиковых ДНФ. А именно символической конъюнкции 1  4  5
соответствует тупиковая ДНФ

 x , символической конъюнкции
2345 


 x , символической конъюнкции 1  3  5  6 

 x  x , символической конъюнкции 1  2  4  6 
x , символической конъюнкции 2  3  6 

x .



Этап III. Из тупиковых ДНФ в качестве МДНФ выбирается та, которая содержит наименьшее число вхождений переменных. Отметим, что булева функция
может иметь несколько МДНФ, но число вхождений переменных в них обязательно должно быть одинаковым.
В примере 2.3.2 находим, что из пяти тупиковых ДНФ две функции
f3 (x, y, z) =

 x и f4 (x, y, z) =

 x содержат наименьшее
число букв и, следовательно, являются МДНФ функции f .
Пример 2.3.3. Найти МДНФ булевой функции f (x, y, z) методом Квайна, если
известно, что f (1, 0, 1) = f (1, 1, 0) = 0, а остальные значения функции f равны
единице.
Решение. Представим сначала функцию f в виде СДНФ. Для этого построим
следующую таблицу (табл. 2.3.4).
Таблица 2.3.4
x y z f (x, y, z) Конституенты
единицы
0 0 0
0 0 1
0 1 0
1
1
1
45
0
1
1
1
1
1
0
0
1
1
1
0
1
0
1
1
1
0
0
1
xyz
По последнему столбцу таблицы находим:
СДНФ f =




 xyz.
Далее для получения сокращенной ДНФ заполним верхнюю относительно
главной диагонали часть таблицы (табл. 2.3.5).
Таблица 2.3.5
xyz
Конституенты
единицы
yz
xyz
Из таблицы 2.3.5 видно, что к некоторым парам из полученных импликант применима операция неполного склеивания. Проведем второй этап неполного склеивания с помощью таблицы 2.3.6.
Таблица 2.3.6
Импликанты
В таблице 2.3.6 жирным шрифтом выделены импликанты, не участвующие ни в каком склеивании. Итак, все возможные операции неполного склеивания выполнены. Получили, что простыми импликантами булевой функции f
являются следующие: ,
и yz. Отсюда f сокр. ДНФ (x, y, z) = 
 yz.
Далее для получения тупиковых ДНФ построим таблицу Квайна
46
(табл. 2.3.7).
Таблица 2.3.7
Простые
импликанты
Конституенты единицы
xyz
1
1
1
1
1
1
1
1
Из таблицы 2.3.7 видно, что все простые импликанты являются базисными. Таким образом, в рассматриваемом примере сокращенная ДНФ минимизируемой булевой функция f совпадает с единственной тупиковой и, следовательно, является минимальной. 
Метод карт Карно13
Карты Карно представляют собой графический метод минимизации булевых функций. Этот метод наиболее целесообразно использовать для минимизации булевых функций от двух до шести переменных. Карта Карно для булевой
функции n переменных – это таблица, состоящая из 2k столбцов и 2n  k строк.
Столбцы соответствуют значениям переменных x1, x2, …, xk, а строки – значениям переменных xk+1, xk+2, …, xn. При этом соседние по горизонтали и вертикали
клетки соответствуют наборам значений переменных, отличающихся друг от
друга только значением одной переменной. Так как соответствие между таблицей истинности булевой функции и картой Карно является взаимно однозначным, то карту Карно можно рассматривать как перестроенную соответствующим образом таблицу истинности.
Для каждой булевой функции возможны различные варианты построения
карты Карно. Рассмотрим один из них (рис. 2.3.1) для функций двух, трех и четырех переменных.
x1
x2
13
00
10
01
11
Морис Карнó (англ. Maurice Karnaugh) (1924 г. рождения)  американский физик.
47
а
x1
x3
000
010
110
100
001
011
111
101
x2
б
x1
0000 0100 1100 1000
0001 0101 1101 1001
x4
0011 0111 1111 1011
x3
0010 0110 1110 1010
x2
в
Рис. 2.3.1. Варианты карты Карно:
а – для функции двух переменных; б  для функции трех переменных;
в – для функции четырех переменных.
Для представления булевой функции f(x1, x2, …, xn) на карте Карно выделяют с помощью единиц клетки, соответствующие наборам значений переменных x1, x2, …, xn, на которых она принимает значение 1. Тогда конституенты
единицы этих наборов значений переменных входят в СДНФ функции f. Единицы в соседних по горизонтали и вертикали клетках могут склеиваться. Это
соответствует последовательному применению операций неполного склеивания
и элементарного поглощения к конституентам единицы в СДНФ, которые отличаются друг от друга только одной литерой.
Отыскание МДНФ булевой функции с помощью карт Карно производится
по следующим правилам:
48
1. В карте Карно группы клеток, содержащие единицы, обводятся прямоугольными контурами.
2. Количество клеток внутри каждого контура должно быть равно 2i, где i  целое неотрицательное число. При i = 0 контур содержит только одну клетку, что
означает невозможность склеить единицу в этой клетке с какой-либо другой
единицей на карте.
3. Карты функций трех и четырех переменных при проведении контуров следует считать трехмерными. Карту функции трех переменных следует рассматривать как цилиндр со склеенными правым и левым краями. Поэтому на плоском
изображении карты функции трех переменных крайние клетки одной строки
считаются соседними (рис. 2.3.2).
Карту функции четырех переменных следует представлять в виде тора14.
Поэтому здесь соседними считаются не только правый и левый, но и верхний и
нижний края карты. Отсюда следует, что если во всех четырех угловых клетках
стоят единицы, то их можно объединить в один контур (рис. 2.3.3).
1
1
1
1
1
1
Рис. 2.3.2
Рис. 2.3.3
4. Каждый контур должен содержать максимально возможное количество клеток с единицами, а число контуров должно быть минимально возможным.
5. Каждая клетка, содержащая единицу, должна входить хотя бы в один из выделенных контуров. Контуры могут пересекаться, однако любой контур должен
иметь не менее одной собственной клетки, принадлежащей только ему.
6. МДНФ функции записывается в виде дизъюнкции элементарных произведений, каждое их которых соответствует одному контуру и содержит только те
переменные, значение которых не изменяется в пределах этого контура. Переменные функции входят в элементарное произведение без инверсии, если их
значение на соответствующих контуру наборах значений переменных равно 1 и
с инверсией  если равно 0.
7. Возможно несколько различных вариантов проведения контуров, что соответствует наличию нескольких равносильных друг другу МДНФ функции.
Тор (от лат. torus  валик, выпуклость)  поверхность вращения, получаемая вращением
образующей окружности вокруг не пересекающей ее и лежащей в одной с ней плоскости
прямой. Приблизительную форму тора имеет поверхность спасательного круга или бублика.
49
14
Пример 2.3.4. Минимизируем методом карт Карно булеву функцию трех переменных, заданную в примере 2.3.2:
f(x, y, z) =


x x
 xyz.
Сначала построим карту Карно для этой функции (рис. 2.3.4).
x
z
1
1
000
010
110
100
1
1
1
011
111
101
001
1
y
Рис. 2.3.4
Далее, руководствуясь приведенными выше правилами 15 минимизации
булевых функций, обводим контурами клетки карты, содержащие единицы,
нумеруя их римскими цифрами. В рассматриваемом примере это возможно выполнить двумя способами (рис. 2.3.4 а и б). Значит, функция f имеет две различные МДНФ.
x
1
000
I
1
010
1
z
001
III 1
110
II
100
1
011
1
111
101
y
а
x
I 1
000
1
I 1
010
110
50
100
II 1
z
001
1 III
011
111
1
101
y
б
Рис. 2.3.5. Карты Карно функции f с обведенными контурами:
а  первый способ; б  второй способ.
Остановимся на первом варианте проведения контуров (см. рис. 2.3.5 а).
Согласно правилу 6 минимизации булевых функций, каждому контуру соответствует элементарное произведение в МДНФ функции f. Для записи элементарных произведений удобно воспользоваться следующей таблицей (табл. 2.3.8):
Номер контура
Таблица 2.3.8
I
II III
Наборы значений
000 011 100
переменных в пределах
010 111 101
контура
Элементарное произведение
x
в МДНФ функции
На основании табл. 2.3.8 получаем МДНФ f1 (x, y, z) =

 x (совпадает с МДНФ f3 (x, y, z) в примере 2.3.2).
Рассмотрим теперь второй вариант проведения контуров (см. рис. 2.3.5 б).
Заполним таблицу (табл. 2.3.9).
Номер контура
Таблица 2.3.9
I
II III
Наборы значений
000 010 101
переменных в пределах
100 011 111
контура
Элементарное произведение
x
в МДНФ функции
На основании табл. 2.3.9 получаем МДНФ f2 (x, y, z) =
(совпадает с МДНФ f4 (x, y, z) в примере 2.3.2). 

x
Пример 2.3.5. Минимизируем методом карт Карно булеву функцию четырех
переменных, заданную вектором своих значений:
f (x, y, z, w) = (1010 0101 1010 0111).
51
Карта Карно для данной функции с проведенными контурами имеет вид,
представленный на рис. 2.3.6.
x
I 1
0000
1 I
0100
1100
1
III 1
0001
0101
1101
0011
0111
1
0010
1001
1
I 1
z
1000
0110
w
1111
1011
II 1
1 I
1110
1010
y
Рис. 2.3.6
Определим элементарные произведения в МДНФ функции f с помощью
таблицы 2.3.10.
Номер контура
Таблица 2.3.10
I
II
III
Наборы значений
переменных в пределах
контура
0000 1110 0101
0010 1111 0111
1000
1101
1010
1111
Элементарное произведение
в МДНФ функции
xyz
yw
В результате имеем, что МДНФ является функция
f(x, y, z, w) =
 xyz  yw. 
2.4. Алгебра Жегалкина15
Определение 2.4.1. Алгеброй Жегалкина называется алгебра, носителем которой является множество булевых функций, а сигнатура содержит две бинарные
операции  и , и две нульарные операции – константы 0 и 1.
В алгебре Жегалкина для любых формул A, B, C справедливы следующие
равносильности:
1. A  B  B  A (коммутативность );
2. A  B  B  A (коммутативность );
3. A  (B  C)  (A  B)  C (ассоциативность );
Жегалкин Иван Иванович (18691947)  русский логик и математик, один из создателей
школы математической логики.
52
15
4. A  (B  C)  (A  B)  C (ассоциативность );
5. A  (B  C)  (A  B)  (A  C) (дистрибутивность  относительно );
6. A  1  A, A  0  0, A  0  A (свойства констант);
7. A  A  0, A  A  A.
Определение 2.4.2. Полиномом (многочленом) Жегалкина от n логических
переменных x1, x2, …, xn называется булева функция вида
P(x1, x2, …, xn) = a0  a1 x1  a2 x2  …  an xn  a12 x1 x2  …  a12…n x1 x2 … xn,
где a0, a1, …, a12…n {0, 1}.
(2.4.1)
В более формализованном виде полином Жегалкина можно представить
следующим образом:
где знак суммы означает сумму по модулю 2; a0,
{0, 1}; k = 0, 1, …, n.
Таким образом, полином Жегалкина представляет собой сумму по
модулю 2 элементарных конъюнкций различных переменных без отрицаний,
среди которых может быть константа 1. Если все коэффициенты полинома Жегалкина (2.4.1) равны нулю, то пишут P (x1, x2, …, xn) = 0.
Замечание 2.4.1. Представление булевой функции в виде полинома Жегалкина
называется также совершенной полиномиальной нормальной формой
(СПНФ). 
Рассмотрим взаимосвязь, которая существует между операциями алгебры
логики и алгебры Жегалкина.
Утверждение 2.4.1. Через операции алгебры Жегалкина можно выразить все
остальные операции алгебры логики:
 1  x,
(2.4.2)
x  y  x  y  xy,
(2.4.3)
x  y  1 x  xy,
(2.4.4)
x  y  1 x  y,
(2.4.5)
x  y  1 xy,
(2.4.6)
x  y  1x  y  xy.
(2.4.7)
Справедливость равносильностей (2.4.2)–(2.4.7) можно непосредственно
проверить табличным способом. 
Теорема 2.4.1 (Жегалкина). Любая булева функция представляется в виде полинома Жегалкина, причем единственным образом с точностью до перестановки слагаемых и до перестановки сомножителей в слагаемых. 
Рассмотрим основные методы построения полиномов Жегалкина.
1. Метод равносильных преобразований формул. Представляющая заданную
булеву функцию формула с использованием равносильностей (2.4.2)–(2.4.7)
53
приводится к формуле, содержащей логические связки ,  и 1. Далее, используя закон дистрибутивности  относительно  (закон 5 алгебры Жегалкина),
раскрываются скобки. Затем применяются законы 6 и 7 алгебры Жегалкина.
Пример 2.4.1. Для функции f(x, y, z) = (xz  xyz)  (
 ) найти представляющий ее полином Жегалкина методом равносильных преобразований формул.
Решение. Во избежание громоздких преобразований сначала упростим реализующую данную функцию формулу, используя основные равносильности из
п. 1.4:
f(x, y, z) = (xz  xyz)  (  )  xyz 
(  )  xy   xy 
 
 xy    y   .
Далее применяем к упрощенной формуле равносильности (2.4.2) и (2.4.3)
из утверждения 2.4.1:
y    (y   y )   (y  (1  x)  y (1  x))  
 (y  1  x  y  xy)  (1  z)  1  x  xy  1  z  (1  x  xy) (1  z) 
 x  xy  z  1  x  xy  z  xz  xyz  1  xz  xyz.
Итак, полином Жегалкина, представляющий данную функцию, имеет вид
P(x, y, z) = 1  xz  xyz. 
2. Метод неопределенных коэффициентов. Искомый полином Жегалкина,
реализующий заданную булеву функцию f(x1, x2, …, xn), записывается в виде
(2.4.1) с неопределенными коэффициентами. Для нахождения коэффициентов
полинома переменным x1, x2, …, xn последовательно придаются значения из
каждой строки таблицы истинности булевой функции. Выражение значения
полинома на фиксированном наборе через неопределенные коэффициенты приравнивается соответствующему этому набору значению функции, взятому из
таблицы истинности. В результате получается система из 2n уравнений с 2n неизвестными, которая всегда имеет единственное решение. Решение этой системы дает значения всех коэффициентов полинома Жегалкина.
Пример 2.4.2. Для функции f(x, y, z) =
найти представляющий ее полином Жегалкина методом неопределенных коэффициентов.
Решение. Предварительно упростим реализующую данную функцию формулу,
используя основные равносильности из п. 1.4, и построим таблицу истинности
функции f .
Имеем, что f(x, y, z) =


 (  y)  (  )  (  y) (  ) 


 y   y  x z   y  x z.
Таблица истинности функции f показана ниже (табл. 2.4.1).
Таблица 2.4.1
54
Искомый полином Жегалкина с неопределенными коэффициентами, реализующий заданную булеву функцию
f (x, y, z), имеет вид
P (x, y, z) = a0  a1 x  a2 y  a3 z  a12 x y  a13 x z 
 a23 yz  a123 x yz,
(2.4.8)
где a0, a1, a2, a3, a12, a13, a23, a123 {0, 1}.
Для нахождения коэффициентов полинома (2.4.8) выражения значений полинома на фиксированных наборах через неопределенные коэффициенты последовательно приравниваем к соответствующим наборам значениям функции,
взятым из табл. 2.4.1. Получаем, что:
1) a0 = f(0, 0, 0) = 1;
2) a0  a3 = 1  a3 = f(0, 0, 1) = 1  a3 = 0;
3) a0  a2 = 1  a2 = f(0, 1, 0) = 1  a2 = 0;
4) a0  a2  a3  a23 = 1  a23 = f(0, 1, 1) = 1  a23 = 0;
5) a0  a1 = 1  a1 = f(1, 0, 0) = 0  a1 = 1;
6) a0  a1  a3  a13 = 1  1  a13 = f(1, 0, 1) = 1  a13 = 1;
7) a0  a1  a2  a12 = 1  1  a12 = f(1, 1, 0) = 1  a12 = 1;
8) a0  a1  a2  a3  a12  a13  a23  a123 = 1  1  1  1  a123 =
= f(1, 1, 1) = 0  a123 = 0.
Подставляем найденные коэффициенты в выражение (2.4.8). Таким образом, полином Жегалкина, представляющий данную функцию, имеет вид
P(x, y, z) = 1  x  xy  xz. 
x
0
0
0
0
1
1
1
1
y
0
0
1
1
0
0
1
1
z
0
1
0
1
0
1
0
1
f
1
1
1
1
0
1
1
0
2.5. Закон двойственности в алгебре логики
Определение 2.5.1. Функция
называется двойственной к
функции
, если
.
Так как каждая булева функция представима в виде некоторой формулы
алгебры логики, то определение понятия двойственной функции можно перенести и на формулы.
Заметим, что таблица истинности двойственной функции (формулы) получается из таблицы истинности исходной функции заменой 0 на 1 и 1 на 0.
Двойственные функции обладают свойством взаимности, то есть функция f является двойственной к f *, так как согласно определению 2.5.1 и закону
инволюции
.
Теорема 2.5.1 (Принцип двойственности для булевых функций). Функция,
двойственная суперпозиции некоторых функций, равносильна соответствующей суперпозиции двойственных функций. То есть если
то
.
55
Доказательство. Применяя определение двойственной функции и закон инволюции получаем, что
.
Теорему 2.5.1 можно сформулировать в следующем виде: «Пусть формула
F представляет функцию f. Тогда формула F *, представляющая двойственную
функцию f *, может быть получена из F заменой всех ее подформул на двойственные им».
Замечание 2.5.1. Легко видеть, что среди булевых функций 0, 1, x, , x1  x2,
x1  x2 функция 0 двойственна к 1, функция 1 двойственна к 0, функция х
двойственна к х, функция двойственна к , функция x1  x2 двойственна к
x1  x2 и функция x1  x2 двойственна к x1  x2. 
Из теоремы 2.5.1 и замечания 2.5.1 вытекает принцип двойственности
для булевых формул: «Формула F *, двойственная к заданной булевой формуле
F может быть получена заменой констант 0 на 1, 1 на 0, логических связок  на
,  на , при условии сохранения порядка выполнения операций».
Согласно принципу двойственности для булевых формул логические операции  и , а также константы 0 и 1, считаются двойственными друг другу.
Пример 2.5.1. Для булевой функции f (x, y, z) = (z  ) (x  y) найти двойственную к ней функцию двумя способами:
1) используя непосредственно определение двойственной функции;
2) представив данную функцию булевой формулой и применив принцип двойственности для булевых формул.
Решение. Согласно определению 2.5.1, имеем:
f *(x, y, z) =





 y
 (  y).
Представим данную функцию булевой формулой:
f (x, y, z) = (z  ) (x  y)  (
) (  y) 
  y  y   y.
56
Применив принцип двойственности для булевых формул к формуле
F =  y, получаем, что F * = (  y). Итак, f *(x, y, z) = (  y). 
В заключение приведем без доказательства следующую теорему.
Теорема 2.5.2. Если формулы F1 и F2 равносильны, то равносильны и двойственные им формулы F1* и F2*. 
2.6. Полнота и замкнутость системы булевых функций. Классы Поста
Определение 2.6.1. Система булевых функций S = {f1, f2, …, fn} называется
функционально полной (или кратко – полной), если любая булева функция
может быть представлена в виде суперпозиции функций из системы S.
Другими словами, система функций является полной, если каждая булева
функция может быть представлена в виде формулы через функции этой системы.
Из теоремы 2.2.2 следует, что система функций {, , } является полной.
Согласно теореме Жегалкина (теорема 2.4.1) полной является также система
функций {, , 1}.
Следующие две теоремы показывают, что одним из способов получения
полных систем функций является использование систем функций, полнота которых известна.
Теорема 2.6.1. Если к полной системе функций S1 = { f1, f2, …, fn} добавить
произвольную функцию fn+1, то система функций S2 = { f1, f2, …, fn, fn+1} является полной. 
Теорема 2.6.2. Если каждая функция полной системы функций
S1 = { f1, f2, …, fn } может быть представлена в виде формулы через функции системы S2 = {g1, g2, …, gn}, то система S2 также является полной. 
Из теоремы 2.6.1 и полноты, например, системы {, , } следует, что
множество P2 всех булевых функций образует полную систему.
Из теоремы 2.6.2, полноты системы {, , }, справедливости равносильностей x1  x2   ( x1   x2) и x1  x2   ( x1   x2) следует полнота следующих двух систем булевых функций: {, } и {, }.
Определение 2.6.2. Множество булевых функций называется функционально
замкнутым классом (или кратко – замкнутым классом), если вместе с функциями из этого множества оно содержит и все их суперпозиции.
Другими словами, множество функций M является замкнутым классом,
если оно, кроме функций этого множества, содержит все функции, которые могут быть представлены в виде формулы через функции множества M.
Очевидно, что множество P2 всех булевых функций – замкнутый класс.
Американский математик и логик Эмиль Леон Пост (18971954) дал полное описание всех замкнутых классов булевых функций. Среди них он особо
57
выделил пять классов, которые носят название классов Поста. Рассмотрим
каждый из них.
I. Класс функций, сохраняющих нуль
Определение 2.6.3. Говорят, что булева функция f (x1, x2, …, xn) сохраняет
нуль, если f (0, 0, …, 0) = 0.
Обозначим через P0 класс всех булевых функций, сохраняющих нуль.
Легко видеть, что этому классу принадлежат функции 0, x, x1  x2, x1  x2,
x1  x2, а функции 1, , x1  x2, x1  x2  не принадлежат.
Выясним, сколько булевых функций n переменных содержит класс P0. Так
как каждая функция f (x1, x2, …, xn) на наборе (0, 0, …, 0) может иметь два возможных значения 0 или 1, то в P0 содержится ровно половина всех функций от
n переменных, то есть
булевых функций от n переменных.
Определить принадлежность булевой функции классу P0 не составляет
труда. Для этого достаточно найти значение функции f (x1, x2, …, xn) на наборе
(0, 0, …, 0) и воспользоваться определением 2.3.6.
Пример 2.6.1. Выяснить, принадлежит ли следующая функция классу P0:
f (x, y, z) = x (y  z)  (x  z).
Решение. Так как f (0, 0, 0) = 1, то f  P0. 
II. Класс функций, сохраняющих единицу
Определение 2.6.4. Говорят, что булева функция f (x1, x2, …, xn) сохраняет
единицу, если f (1, 1, …, 1) = 1.
Обозначим через P1 класс всех булевых функций, сохраняющих единицу.
Легко видеть, что этот класс содержит функции 1, x, x1  x2, x1  x2, x1  x2,
x1  x2, а функции 1, , x1  x2  не содержит.
Рассуждения, аналогичные проведенным для класса P0, позволяют сделать
вывод о числе функций n переменных, принадлежащих классу P1. Существует
всего
P1.
булевых функций от n переменных, содержащихся в классе
Чтобы определить принадлежность булевой функции классу P1, достаточно найти значение функции f (x1, x2, …, xn) на наборе (1, 1, …, 1) и воспользоваться определением 2.6.4.
58
Пример 2.6.2. Выяснить, принадлежит ли следующая функция классу P1:
f (x, y, z) = 
 (x  z).
Решение. Так как f (1, 1, 1) = 1, то f  P1. 
III. Класс самодвойственных функций
Определение 2.6.5. Функция f (x1, x2, …, xn) называется самодвойственной, если она является двойственной к самой себе, то есть
f (x1, x2, …, xn) = f *(x1, x2, …, xn) =
.
Определение 2.6.6. Наборы (1, 2, …, n) и
значений логических переменных x1, x2, …, xn называются противоположными.
Замечание 2.6.1. Из определения 2.6.5 следует, что на противоположных наборах самодвойственная функция принимает противоположные значения. 
Обозначим через S класс всех самодвойственных булевых функций.
Найдем число булевых функций n переменных, содержащихся в классе S.
Из замечания 2.6.1 следует, что самодвойственная функция полностью определяется своими значениями на половине возможных наборов переменных
x1, x2, …, xn, любые два из которых не являются противоположными. В ходе доказательства теоремы 2.2.1 было показано, что число всех возможных наборов
значений переменных x1, x2, …, xn равно 2n. Значит, самодвойственная функция
n переменных полностью определяется своими значениями на
2n наборах
переменных. Отсюда число самодвойственных булевых функций n переменных равно .
Определить принадлежность булевой функции классу S можно следующими способами:
1) используя непосредственно определение двойственной функции и равносильные преобразования;
2) используя замечание 2.6.1 и таблицу истинности, непосредственно проверить, принимает ли функция противоположные значения на противоположных
наборах.
Пример 2.6.3. Выяснить, является ли функция f (x, y, z) = x (z  y) 
самодвойственной, используя непосредственно определение двойственной
функции и равносильные преобразования.
Решение. Представим сначала данную функцию в виде булевой формулы с
«тесными» отрицаниями:
f (x, y, z) = x (z  y) 
 x (  y) 
 x  xy  y .
Найдем функцию, двойственную к данной, используя определение 2.5.1:
f *(x, y, z) =
 (x  ) (x  y) (y  )  (x  x  xy  y ) (y  ) 
 (x  y ) (y  )  xy  y  x  y  x  xy  y .
59
Так как f (x, y, z) = f *(x, y, z), то согласно определению 2.6.5 данная функция является самодвойственной. 
Пример 2.6.4. Исследовать, является ли самодвойственной функция, заданная
вектором своих значений: f (x, y, z) = (1001 0110).
Решение. При векторном способе задания булевой функции исследовать ее на
принадлежность классу S удобно с помощью таблицы истинности (табл. 2.6.1).
Чтобы выяснить, является ли данная функция самодвойТаблица 2.6.1
x
y z f ственной, требуется непосредственно проверить, принимает
0
0 0 1 ли она противоположные значения на противоположных
0
0 1 0 наборах. В рассматриваемом случае это условие выполняет0
1 0 0 ся. Следовательно, по замечанию 2.6.1 функция f  самод0
1 1 1 войственная. 
1
0 0 0
1
0 1 1
1
1 0 1
1
1 1 0
IV. Класс линейных функций
Определение 2.6.7. Булева функция называется линейной, если в ее полиноме
Жегалкина коэффициенты при всех слагаемых, содержащих произведения переменных, равны 0.
Таким образом, функция f (x1, x2, …, xn) является линейной, если ее можно представить в виде
f (x1, x2, …, xn) = a0  a1 x1  a2 x2  …  an xn,
(2.6.1)
где a0, a1, …, an {0, 1}.
Замечание 2.6.2. Полином Жегалкина в правой части равенства (2.6.1) называется линейным. В нем отсутствуют слагаемые, содержащие произведения
переменных. В противном случае полином Жегалкина называется нелинейным. 
Обозначим через L класс всех линейных булевых функций. Очевидно, что
этот класс содержит константы 0 и 1, тождественную функцию x, функцию
x1  x2. Из утверждения 2.4.1 следует, что линейными являются также функции
, x  y, а функции x  y, x  y, x  y и x  y – нелинейны.
Число булевых функций n переменных, принадлежащих классу L, равно
n+1
2 . Действительно, каждой линейной функции f (x1, x2, …, xn), представимой
полиномом Жегалкина a0  a1 x1  a2 x2  …  an xn, можно поставить во взаимно однозначное соответствие кортеж (a0, a1, a2 , …, an ) длины n + 1. Так как
каждая компонента такого кортежа может принимать два значения 0 или 1, то
число линейных функций равно числу кортежей длины n + 1, составленных из
элементов множества {0, 1}, которое в свою очередь равно числу
размеn+1
щений с повторениями из двух элементов по n + 1, то есть 2 .
60
Для определения принадлежности булевой функции классу L достаточно
представить функцию в виде полинома Жегалкина. Если полином Жегалкина,
реализующего булеву функцию, является линейным, то функция принадлежит
классу L, в противном случае – не принадлежит.
Пример 2.6.5. Выяснить, являются ли следующие функции линейными:
а) f (x, y, z) = yz  (  x );
б) f (x, y) = xy (x  y).
Решение. а) Представим исследуемую функцию полиномом Жегалкина, используя метод равносильных преобразований формул и равносильности (2.4.2),
(2.4.3) утверждения 2.4.1:
f (x, y, z) = yz  (  x )  yz  (  x  x ) 
 yz  ((1  y)  x (1  z)  x (1  y) (1  z)) 
 yz  1  y  x  xz  x  xy  xz  xyz  1  y  xy  yz  xyz.
Полученный полином Жегалкина является нелинейным, так как содержит
произведения переменных. Значит, и данная функция f (x, y, z) = yz  (  x ),
которую он реализует, является нелинейной.
б) Методом равносильных преобразований найдем полином Жегалкина, представляющий данную функцию: f (x, y) = xy (x  y)  xy  xy  0. Полученный
полином Жегалкина является линейным. Следовательно, функция
f (x, y) = xy (x  y) является линейной. 
V. Класс монотонных функций
Введем на множестве {0, 1} отношение частичного порядка , полагая,
что 0  0, 0  1, 1  1. Это отношение порождает отношение частичного порядка на множестве наборов значений переменных x1, x2, …, xn, которое также условимся обозначать символом : для любых двух наборов (1, 2, …, n) и
(1, 2, …, n) выполняется условие (1, 2, …, n)  (1, 2, …, n), если i  i
для любых i = 1, 2, …, n.
Определение 2.6.8. Функция f (x1, x2, …, xn) называется монотонной, если для
любых наборов (1, 2, …, n) и (1, 2, …, n) значений переменных
x1, x2, …, xn, таких что (1, 2, …, n)  (1, 2, …, n), выполняется условие
f (1, 2, …, n)  f (1, 2, …, n).
Обозначим через M класс всех монотонных булевых функций. Легко видеть, что этот класс содержит функции 0, 1, x, x  y, x  y и не содержит функции , x1  x2, x  y, x  y, x  y и x  y.
Вопрос о числе монотонных булевых функций n переменных является
очень сложным и в рамках этого учебного пособия рассматриваться не будет.
Покажем на примерах, как определять принадлежность булевых функций
двух и трех переменных классу M.
Пример 2.6.6. Выяснить, является ли функция f(x, y, z) = xy  xz  yz монотонной.
61
Решение. Сначала построим таблицу истинности функции f (табл. 2.6.2).
Таблица 2.6.2
x
y z f
0
0 0 0
0
0 1 0
0
1 0 0
0
1 1 1
1
0 0 0
1
0 1 1
1
1 0 1
1
1 1 1
Чтобы проверить выполнение условия монотонности
для рассматриваемой функции, удобно воспользоваться
наглядным методом, который заключается в следующем.
Строится диаграмма Хассе частично упорядоченного множества всех возможных наборов значений переменных x, y, z
(рис. 2.6.1), на которой рядом с вершинами проставляются
значения функции на соответствующем вершине наборе. На
рис. 2.6.1 соответствующие набору значения функции выделены жирным шрифтом.
На диаграмме Хассе любая ее часть, состоящая из
единственной линии без разветвлений, называется цепью и
соответствует некоторому линейно упорядоченному подмножеству множества
всех возможных наборов значений переменных. Исследуемая функция является монотонной, если при движении вверх по любой цепи в диаграмме
Хассе значения функции не увеличиваются.
Анализ рис. 2.6.1 показывает, что
1 (1,1,1)
что функция f монотонна. 
1
0
(1,1,0)
(1,0,0)
1 (1,0,1)
0 (0,1,0)
1
(0,1,1)
0
(0,0,1)
0 (0,0,0)
Рис. 2.6.1
Пример 2.6.7. Исследовать на монотонность функцию f (x, y, z) =
 y.
Решение. Для удобства построения таблицы истинности данной функции представим ее формулой с «тесными» отрицаниями:
f (x, y, z) =
 y  x  y.
Таблица истинности функции f показана ниже (табл. 2.6.3).
Таблица 2.6.3
x
y
f
0
0
0
0
1
1
1
0
1
1
1
0
Построим диаграмму Хассе частично упорядоченного
множества всех возможных наборов значений переменных
x, y (рис. 2.6.2) и проставим рядом с вершинами значения
функции на соответствующем вершине наборе (выделив их
жирным шрифтом).
62
0
(1,1)
1
(0,1)
Из диаграммы следует, что функция f не является
монотонной, так как, например, f (0,1) > f2 (1,1). 
1
(1,0)
0 (0,0)
Рис. 2.6.2
Для рассмотренных выше пяти классов Поста справедлива следующая
теорема.
Теорема 2.6.3. Каждый из классов Поста P0, P1, S, L, M является замкнутым и
неполным. 
Для установления полноты заданной системы булевых функций используется критерий полноты.
Теорема 2.6.4 (теорема Поста или критерий полноты). Система функций
является полной тогда и только тогда, когда она содержит: 1) функцию, не сохраняющую нуль; 2) функцию, не сохраняющую единицу; 3) несамодвойственную функцию; 4) нелинейную функцию; 5) немонотонную функцию. 
Для проверки выполнения условий теоремы Поста для заданной системы
булевых функций F = {f1, f2, …, fk} удобно использовать так называемую таблицу Поста. Строки этой таблицы соответствуют функциям системы F, а
столбцы – классам Поста. Функции f1, f2, …, fk исследуются на принадлежность классам Поста. Если функция fi принадлежит некоторому классу Поста,
то в соответствующей клетке таблицы ставится знак «+», в противном случае –
знак «». Согласно критерию полноты система F является полной тогда и только тогда, когда в каждом столбце таблицы Поста стоит хотя бы один минус.
Пример 2.6.8. Исследовать на полноту следующую систему булевых функций:
F = {xy  z, xy  z, xy  z}.
Решение. Выясним принадлежность каждой из функций системы F классам
Поста P0, P1, S, L, M.
Пусть f1 = xy  z, f2 = xy  z, f3 = xy  z. Найдем значения функций f1, f2 и
f3 на наборе (0, 0, 0). Имеем: f1 (0, 0, 0) = 0, f2 (0, 0, 0) = 0, f3 (0, 0, 0) = 1. Следовательно, f1  P0, f2  P0, а f3  P0.
Далее находим, что f1 (1, 1, 1) = 1, f2 (1, 1, 1) = 0 и f3 (1, 1, 1) = 1. Отсюда
f1  P1, f2  P1 и f3  P1.
Исследуем функции системы F на принадлежность классу S. Для этого составим таблицы истинности этих функций, которые сведем в одну таблицу
(табл. 2.6.4).
Таблица 2.6.4
63
Используя табл. 2.6.4, проверяем, принимают ли
функции f1, f2 и f3 противоположные значения на
противоположных наборах. Получаем, что все три
функции не являются самодвойственными.
Очевидно, что f2  L. Представим функции f1 и
f3 в виде полиномов Жегалкина:
f1 = xy  z  xy  z  xyz, f3 = xy  z  1  xy  z.
Следовательно, функции f1 и f3 не линейны.
Исследуем функции системы F на монотонность. Построим для них диаграммы Хассе частично
упорядоченного множества всех возможных наборов значений переменных
(рис. 2.6.32.6.5) и проставим рядом с вершинами значения функции на соответствующем вершине наборе (выделив их жирным шрифтом).
x
0
0
0
0
1
1
1
1
y
0
0
1
1
0
0
1
1
z
0
1
0
1
0
1
0
1
f1
0
1
0
1
0
1
1
1
f2
0
1
0
1
0
1
1
0
f3
1
0
1
0
1
0
0
1
0 (1,1,1)
1 (1,1,1)
1
1
(1,1,0)
(1,0,0)
1 (1,0,1)
0 (0,1,0)
1
(0,1,1)
0
(0,0,1)
1 (1,1,0) 1 (1,0,1)
1
Рис. 2.6.3
Рис. 2.6.4
1 (1,1,1)
0
(1,1,0)
(1,0,0)
0 (1,0,1)
1 (0,1,0)
0 (0,1,0)
0
(0,0,1)
0 (0,0,0)
0 (0,0,0)
0
(1,0,0)
1
(0,1,1)
0
(0,1,1)
Анализируя рис. 2.6.32.6.5 получаем,
что функция f1 монотонна, а
функции f2 и f3 не являются монотонными, так как, например,
f2 (1,1,0) > f2 (1,1,1) и f3 (0,0,0) > f3 (1,0,0).
1
(0,0,1)
1 (0,0,0)
Рис. 2.6.5
Составим таблицу Поста для заданной системы функций (табл. 2.6.5).
64
Таблица 2.6.5
P0 P1 S L
f1 + +  +
f2 +   
f3  +  
M



Получаем, что система F является полной, так как в каждом столбце таблицы Поста стоит хотя бы один минус. 
С понятием полной системы булевых функций связано понятие базиса,
имеющее важное значение при решении задач минимизации схем дискретных
устройств.
Определение 2.6.9. Полная система булевых функций называется базисом, если при удалении хотя бы одной функции из этой системы нарушается условие
полноты.
Теорема 2.6.5. Каждый базис содержит не более четырех булевых функций. 
Пример 2.6.9. Следующие системы булевых функций образуют базис:
{, , }, {, , 1}, {, }, {, }, {, }, {}, {}. 
Замечание 2.6.3. Так как система булевых функций {, , } является базисом,
а множество P2 всех булевых функций – замкнутым классом, то логические
операции ,  и  являются алгебраическими операциями на множестве P2.
Следовательно, множество всех булевых функций относительно операций отрицания, конъюнкции и дизъюнкции образует алгебру. Можно показать, что эта
алгебра является булевой. Поэтому алгебра, носитель которой есть множество
P2 всех булевых функций, а сигнатура состоит из операций отрицания, конъюнкции и дизъюнкции, называется булевой алгеброй логических функций. 
2.7. Приложение алгебры логики к релейно-контактным схемам
Рассмотрим применение функций алгебры логики при исследовании электрических цепей, носящих название релейно-контактных схем.
Под релейно-контактной схемой (РКС) понимается дискретное устройство, состоящее из проводников и двухпозиционных контактов. Различают два
типа контактов РКС: замыкающие (или нормально разомкнутые) и размыкающие (или нормально замкнутые). Каждый контакт подключается к некоторому реле (переключателю). Отметим, что к одному реле могут быть подключены несколько контактов любого типа. С технической точки зрения реле
представляет собой катушку с металлическим сердечником, вблизи которого
находится соответствующий контакт. Если через катушку пропускается электрический ток, то металлический сердечник намагничивается и замыкает все
находящиеся вблизи него замыкающие контакты, одновременно размыкая все
соответствующие ему размыкающие контакты. Если реле отключается (при
65
обесточивании обмоток реле), то все замыкающие контакты снова размыкаются, а все размыкающие  замыкаются.
Каждому реле ставится в соответствие логическая переменная xi, принимающая значение 1 в случае срабатывания реле и значение 0 при отключении
реле. Каждому контакту соответствует значение 1, если он проводит ток, и значение 0 – в противном случае. Поэтому на схеме все замыкающие контакты,
которые подключены к соответствующему переменной xi реле, обозначаются
через xi, а все размыкающие контакты, подключенные к этому реле, – .
Пусть РКС содержит n реле, соответствующих логическим переменным
x1, x2, …, xn. Тогда этой схеме соответствует экспериментальная таблица, в которой фиксируется следующее: проводит и не проводит РКС электрический ток
для всевозможных 2n наборов состояний реле. Если при заданном наборе состояний реле x1, x2, …, xn РКС проводит электрический ток, то этому набору
ставится в соответствие 1, в противном случае – 0. Экспериментальная таблица
представляет собой таблицу истинности некоторой булевой функции
f (x1, x2, …, xn), называемой функцией проводимости данной РКС. При этом
функция f (x1, x2, …, xn) принимает значение 1 на тех и только тех наборах значений переменных, которые соответствуют таким состояниям реле, при которых РКС проводит электрический ток.
Таким образом, каждой реальной физической релейно-контактной
схеме соответствует некоторая булева функция, представляющая собой ее
математическую модель.
Возникает вопрос: для каждой ли булевой функции может быть построена
такая релейно-контактная схема, что заданная булева функция является ее
функцией проводимости или, другими словами, каждая ли булева функция может быть реализована с помощью РКС.
Так как система булевых функций {, , } является базисом, то для того
чтобы любая булева функция могла быть реализована с помощью РКС, достаточно возможности реализации с помощью РКС булевых функций отрицания,
конъюнкции и дизъюнкции.
Найдем функции проводимости для следующих трех релейно-контактных
схем (рис. 2.7.1 ав).
а
б
в
Рис. 2.7.1
Схема на рис. 2.7.1 а, состоящая из двух последовательно соединенных
контактов x1 и x2, проводит электрический ток в том и только в том случае, ко66
гда оба контакта замкнуты. Значит, соответствующая этой схеме булева функция f (x1, x2) принимает значение 1 тогда и только тогда, когда переменные x1 и
x2 одновременно принимают значение 1. Следовательно, функцией проводимости РКС, состоящей из двух последовательно соединенных контактов x1 и x2,
является f (x1, x2) = x1  x2.
Схема на рис. 2.7.1 б, состоящая из двух параллельно соединенных контактов x1 и x2, проводит электрический ток в том и только в том случае, когда
хотя бы один из контактов x1 или x2 замкнут. Значит, соответствующая этой
схеме булева функция f (x1, x2) принимает значение 1 тогда и только тогда, когда хотя бы одна из переменных x1 или x2 принимают значение 1. Следовательно, функцией проводимости РКС, состоящей из двух параллельно соединенных
контактов x1 и x2, является f (x1, x2) = x1  x2.
Схема на рис 2.7.1 в состоит из одного размыкающего контакта . Замыкание этого контакта соответствует значению x = 0, а размыкание – x = 1. Следовательно, функцией проводимости РКС, состоящей из одного размыкающего
контакта , является f (x) = .
Таким образом, мы показали, что булевы функции конъюнкция, дизъюнкция и отрицание могут быть реализованы с помощью РКС, которые соответственно представлены на рис. 2.7.1 ав. Следовательно, каждая булева
функция может быть реализована с помощью релейно-контактной схемы.
В связи с рассмотренным соответствием между релейно-контактными
схемами и булевыми функциями различают следующие три задачи: задачу анализа РКС, задачу синтеза РКС и задачу минимизации РКС.
Задача анализа РКС заключается в нахождении для заданной РКС ее математической модели в виде булевой функции.
Пример 2.7.1. Для данной РКС (рис. 2.7.2) найти ее функцию проводимости.
y
z
x
Рис. 2.7.2
Решение. Используя функции проводимости для конъюнкции и дизъюнкции, а
также операцию суперпозиции функций, получаем, что для данной РКС функцией проводимости является f (x, y, z) = (  y)  ( x  z). 
Задача синтеза РКС заключается в построении РКС по заданной ее математической модели в виде булевой функции.
Пример 2.7.2. Построить РКС, реализующую булеву функцию
67
f(x, y, z) = (x  y)  ( (y  z)).
Решение. Представим сначала данную функцию булевой формулой с «тесными» отрицаниями: f (x, y, z) = (x  y)  ( (y  z))  (  y)  ( (y  z)) 

 (y  z)  x  (y  z).
РКС, реализующая функцию f, представляет собой последовательное со-
единение двух схем с функциями проводимости x
и
(y  z). Первая из них
состоит из двух последовательно соединенных контактов x и . Вторая  из последовательно соединенного контакта и двух параллельных ветвей, содержащих соответственно по одному контакту y и z. Таким образом, искомая РКС
имеет вид, показанный на рис. 2.7.3. 
x
y
z
Рис. 2.7.3
Пусть даны РКС и некоторая числовая характеристика LРКС, называемая
сложностью РКС (например, число контактов в РКС). Задача минимизации
РКС заключается в построении РКС с минимальной сложностью, имеющей такую же математическую модель в виде булевой функции, что и исходная РКС.
Определение 2.7.1. Две релейно-контактные схемы, имеющие одинаковые
функции проводимости, называются равносильными.
Пример 2.7.3. Минимизировать РКС (рис. 2.7.4).
x
x
y
z
z
68
x
z
Рис. 2.7.4
Решение. Пусть сложность LРКС релейно-контактной схемы определяется числом контактов в ней. Тогда в рассматриваемом случае LРКС = 15. Найдем сначала функцию проводимости данной РКС:
f (x, y, z) = xyz  x z  x
 z .
Заметим, что реализующая функцию f формула является ее СДНФ. Минимизируем полученную математическую модель данной РКС методом карт Карно.
Карта Карно для функции f с проведенными контурами имеет вид, представленный на рис. 2.7.5.
x
1
000
1
010
110
100
1
1
111
101
1
z
001
011
y
Рис. 2.7.5
Определим элементарные произведения в МДНФ функции f с помощью
таблицы 2.7.1.
Таблица 2.7.1
Номер контура
I
II
Наборы значений
переменных в пределах
контура
69
000 101
001 111
100
101
Элементарное произведение
в МДНФ функции
xz
Используя таблицу 2.7.1, получаем, что МДНФ функции проводимости является функция fМДНФ (x, y, z) =  xz. Соответствующая ей схема показана
ниже (рис. 2.7.6).
x
z
Рис. 2.7.6
В результате минимизации получилась равносильная данной РКС с меньшим числом контактов (LРКС = 3). 
Глава III. Задачи для самостоятельного решения
3.1. Задачи к главе I
1. Пусть x и y обозначают следующие высказывания:
x – «Число 64 делится на 4»,
y – «Число 64  составное число».
Из данных простых высказываний сформулируйте следующие сложные
высказывания: , x  y, x  y, x  y, x  y, x  ,  y, x 
. Определите
истинность этих высказываний.
2. Расставьте в следующей формуле недостающие скобки согласно правилам
расстановки скобок: F = x   z  x  y  z  x  y.
3. Выпишите все подформулы формулы: F = (x  )  (x  z)  y  y  z.
4. Составьте таблицу истинности для формулы F = (  y) 
 x  y  z.
5. Докажите следующую равносильность:
(x(y  z  y  z)  yx  x  y  x  y.
6. Применяя равносильные преобразования, приведите формулу к возможно
более простой форме: F = x  xyz  x z  xy .
7. Выясните, является ли формула тавтологией:
F = (x  z)  ((y  z)  ((x  y)  z)).
70
8. Приведите равносильными преобразованиями следующую формулу к ДНФ и
к КНФ: F = (x  y)
.
9. Приведите равносильными преобразованиями следующую формулу к СДНФ
и к СКНФ: F = (x  )  xz.
10. Решите логическую задачу: «Четыре студента Сергей, Никита, Иван и
Алексей посещают университет по очереди и ведут общий конспект лекций.
Требуется составить график посещения на ближайшую неделю, учитывая, что:
А. Понедельник – день самостоятельной работы на курсе, и в университет никто не ходит, а в субботу необходимо быть всем.
Б. Иван и Алексей не смогут пойти на занятия во вторник, в связи с большой
загруженностью в понедельник.
В. Если Иван выйдет в среду или Алексей – в четверг, то Никита согласится
побывать на занятиях в пятницу.
Г. Если Сергей не пойдет в университет в четверг, то Никита позволит себе
сходить туда в среду.
Д. Если Сергей или Алексей будут в университете в среду, то Иван сможет
пойти в пятницу.
Е. Если Алексей в пятницу вместо университета пойдет на спортивное соревнование, то Сергею придется сходить в университет во вторник, а Ивану – в четверг».
3.2. Задачи к главе II
1. Постройте таблицу истинности булевой функции f (x, y, z) = x  y  z  x.
2. Найдите СДНФ булевой функции f (x1, x2, x3), заданной таблицей истинности
(табл. 3.2.1).
3. Найдите СКНФ булевой функции f (x, y, z), заданной вектором своих значений:
f (x, y, z) = (1100 0101).
4. Найдите МДНФ булевой функции, заданной вектором
своих значений, методом Квайна и методом карт Карно:
а) f (x, y, z) = (0100 1111);
б) f (x, y, z, w) = (1110 0110 1110 0100).
5. Для функции f (x, y, z) найдите представляющий ее полином Жегалкина методом равносильных преобразований:
f (x, y, z) = (x  y)  xz  y.
6. Для функции f (x, y, z) найдите представляющий ее полином Жегалкина методом неопределенных коэффициентов: f (x, y, z) = (  x) 
.
7. Выясните, является ли булева функция линейной:
Таблица 3.2.1
x
y z f
0
0 0 0
0
0 1 1
0
1 0 1
0
1 1 0
1
0 0 0
1
0 1 1
1
1 0 1
1
1 1 1
71
f (x, y, z) = (xy  )z  (x  y).
8. Для булевой функции f (x,y,z) = xy  z  (  y  z) найдите двойственную к
ней функцию, используя непосредственно определение двойственной функции.
9. Выясните, является ли булева функция самодвойственной:
f (x, y, z) = x  y  z  1.
10. Выясните, является ли булева функция монотонной:
f (x, y, z) = x  yz  xyz.
11. Исследуйте на полноту следующую систему булевых функций:
S = {x  ,  y}.
12. Минимизируйте следующую релейно-контактную схему (рис. 3.2.1).
x
x
z
y
x
Рис. 3.2.1
Список рекомендуемой литературы
1. Гринченков Д.В. Математическая логика и теория алгоритмов для про
граммистов: учебное пособие / Д.В. Гринченков, С.И. Потоцкий.  М.:
КНОРУС, 2010.
2. Игошин В.И. Математическая логика и теория алгоритмов: учебное пособие для студ. высш. учеб. заведений / В.И. Игошин. – М.: Академия, 2004.
3. Игошин В.И. Задачи и упражнения по математической логике и теории
алгоритмов: учебное пособие для студ. высш. учеб. заведений / В.И.
Игошин. – М.: Академия, 2005.
4. Кузнецов О.П. Дискретная математика для инженера / О.П. Кузнецов. –
СПб.: Лань, 2007.
5. Лапшин А.Б. Дискретная математика и математическая логика. Часть 2.
Элементы алгебры логики / А.Б. Лапшин, О.Б. Садовская. – Кострома:
Изд-во Костром. гос. технол. ун-та, 2004.
72
6. Лапшин А.Б. Дискретная математика и математическая логика. Часть 3.
Полиномы Жегалкина. Классы Поста / А.Б. Лапшин, О.Б. Садовская. –
Кострома: Изд-во Костром. гос. технол. ун-та, 2005.
7. Лихтарников Л.М. Математическая логика: Кус лекций. Задачникпрактикум и решения / Л.М. Лихтарников, Т.Г. Сукачева. – СПб.: Лань,
1998.
8. Нефедов В.Н. Курс дискретной математики: учебное пособие / В.Н.
Нефедов, В.А. Осипова. – М.: Изд-во МАИ, 1992.
9. Палий И.А. Дискретная математика. Курс лекций / И.А. Палий. – М.:
Эксмо, 2008.
10. Поздняков С.Н. Дискретная математика: учебник для студ. вузов / С.Н.
Поздняков, С.В. Рыбин. – М.: Академия, 2008.
11. Соболева Т.С. Дискретная математика: учебник для студ. вузов / Т.С.
Соболева Т.С. – М.: Академия, 2006.
12. Судоплатов С.В. Дискретная математика: учебник / С.В. Судоплатов,
Е.В. Овчинникова. – М.: ИНФРА-М; Новосибирск: Изд-во НГТУ, 2007.
13. Чередникова А.В. Дискретная математика. Теория и практика: учебное
пособие / А.В. Чередникова, О.Б. Садовская, Л.А. Каминская. – Кострома:
Изд-во Костром. гос. технол. ун-та, 2011.
14. Шапорев С.Д. Математическая логика. Курс лекций и практических занятий / С.Д. Шапорев. – СПб.: БХВ-Петербург, 2007.
73
Download