Булевы функции
Поскольку значение логической формулы определяется значениями входящих в формулу переменных, логическая формула может рассматриваться как логическая функция.
- Булева функция
- Это функция f(x1,x2,…,xn), аргументы которой x1,x2,…,xn, и сама функция f принимают значения 0 или 1.
Логические функции могут быть заданы таблично, либо аналитически.
В общем случае, булеву функцию от n переменных можно рассматривать как отображение {0,1}n→{0,1}. Пространство {0,1}n можно интерпретировать как n-битное двоичное число.
Существует 2n различных n-битных двоичных чисел. Так как каждому из них сопоставляется значение функции – 0 или 1, то общее количество различных булевых функций n аргументов равно 22n.
От двух переменных существует 16 различных булевых функций. Особо интересными из них являются:
- Штрих Шеффера f(x,y)=¯a&b=a|b
- Стрелка Пирса f(x,y)=¯a∨b=a↓b
Канонические формы логических функций
Ясно, что для определения любой логической функции может существовать бесконечно много различных эквивалентных логических формул.
Одно из основных применений алгебры логики заключается в нахождении канонических форм, то есть, логических формул, взаимно однозначно соответствующих логическим функциям.
- Нормальная форма
- Если логическая функция выражена через дизъюнкцию, конъюнкцию и отрицание переменных, то такая форма записи называется нормальной.
Среди нормальных форм выделяют такие, в которых функции записываются единственным образом. Их называют совершенными.
- Элементарная конъюнкция
- Это конъюнкция одной или нескольких переменных, или их отрицаний.
- Элементарная дизъюнкция
- Это дизъюнкция одной или нескольких переменных, или их отрицаний.
- Дизъюнктивная нормальная форма (ДНФ)
- Это дизъюнкция не повторяющихся элементарных конъюнкций.
- Конъюнктивная нормальная форма (КНФ)
- Это конъюнкция не повторяющихся элементарных дизъюнкций.
Среди дизъюнктивных или конъюнктивных нормальных форм, очевидно, существуют совершенные.
- Совершенная ДНФ (СДНФ)
- Это ДНФ, в которой каждая элементарная конъюнкция состоит из k переменных x1,x2,…,xk, причем на i-том месте конъюнкции стоит переменная xi или ее отрицание ¯xi, и все элементарные конъюнкции различны.
- Совершенная КНФ (СКНФ)
- Это КНФ, в которой каждая элементарная дизъюнкция состоит из k переменных x1,x2,…,xk, причем на i-том месте дизъюнкции стоит переменная xi или ее отрицание ¯xi, и все элементарные дизъюнкции различны.
Любую логическую функцию можно представить в виде СДНФ или СКНФ. Для обоснования этого утверждения, рассмотрим две теоремы.
- Теорема о существовании СДНФ
- Пусть f(x1,x2,…,xn) – булева функция от n переменных, не равная тождественно нулю. Тогда существует СДНФ, выражающая функцию f.
- Доказательство
Для начала покажем, что переменную можно “вынести” за знак функции с помощью конъюнкции:
f(x1,…,xi,…,xn)=¯xi&f(x1,…,0,…,xn)∨xi&f(x1,…,1,…,xn)
Действительно, если xi=0, то f(x1,…,xi,…,xn)=1&f(x1,…,0,…,xn)∨0&f(x1,…,1,…,xn)=f(x1,…,0,…,xn)
Иначе, если xi=1, f(x1,…,xi,…,xn)=0&f(x1,…,0,…,xn)∨1&f(x1,…,1,…,xn)=f(x1,…,1,…,xn)
Последовательно “вынося” переменные за знак функции, получим следующую формулу (знаки конъюнкции опущены):
f(x1,…,xn)=¯x1¯x2…¯xn−1¯xnf(0,0,…,0,0)∨∨¯x1¯x2…¯xn−1xnf(0,0,…,0,1)∨∨¯x1¯x2…xn−1xnf(0,0,…,1,1)∨…∨¯x1x2…xn−1xnf(0,1,…,1,1)∨∨x1x2…xn−1xnf(1,1,…,1,1)
Теперь, зная значения функции, можно полностью исключить конъюнкции, содержащие f=0, по закону поглощения нуля, и опустить в остальных конъюнкциях f=1 по закону поглощения единицы.
Мы получили СДНФ, следовательно, она существует по построению. ◼
Очевидна причина требования неравенства нулю: для f=0 СДНФ не будет иметь ни одного члена.
- Теорема о существовании СКНФ
- Пусть f(x1,x2,…,xn) – булева функция от n переменных, не равная тождественно единице. Тогда существует СКНФ, выражающая функцию f.
- Доказательство
Для начала покажем, что переменную можно “вынести” за знак функции с помощью дизъюнкции:
f(x1,…,xi,…,xn)=(xi∨f(x1,…,0,…,xn))&(¯xi∨f(x1,…,1,…,xn))
Действительно, если xi=0, то f(x1,…,xi,…,xn)=(0∨f(x1,…,0,…,xn))&(1∨f(x1,…,1,…,xn))=f(x1,…,0,…,xn)
Иначе, если xi=1, f(x1,…,xi,…,xn)=(1∨f(x1,…,0,…,xn))&(0∨f(x1,…,1,…,xn))=f(x1,…,1,…,xn)
Последовательно “вынося” переменные за знак функции, получим следующую формулу:
f(x1,…,xn)=(¯x1∨¯x2∨…∨¯xn−1∨¯xn∨f(1,1,…,1,1))&&(¯x1∨¯x2∨…∨¯xn−1∨xn∨f(1,1,…,1,0))&&(¯x1∨¯x2∨…∨xn−1∨xn∨f(1,1,…,0,0))&…&(¯x1∨x2∨…∨xn−1∨xn∨f(1,0,…,0,0))&&(x1∨x2∨…∨xn−1∨xn∨f(0,0,…,0,0))
Теперь, зная значения функции, можно полностью исключить дизъюнкции, содержащие f=1, по закону поглощения единицы, и опустить в остальных дизъюнкциях f=0 по закону поглощения нуля.
Мы получили СКНФ, следовательно, она существует по построению. ◼
Очевидна причина требования неравенства единице: для f=1 СКНФ не будет иметь ни одного члена.
Полные системы булевых функций
- Полная система булевых функций
- это система булевых функций {f1,…,fn}, которая позволяет выразить произвольную логическую функцию.
По теоремам о существовании СДНФ и СКНФ, система функций {&,∨,¬} является полной.
Полноту других систем можно обосновать при помощи следующего очевидного утверждения:
Если система {f1,…,fn} является полной, и каждая из функций f1,…,fn может быть выражена через функции g1,…,gn, то система {g1,…,gn} так же является полной.
Так, несложно доказать, что системы {∨,¬} и {&,¬} так же являются полными.
Из всех булевых функций двух переменных, штрих Шеффера и стрелка Пирса образуют полные системы булевых функций сами по себе.
Штрих Шеффера x|y определяется как
x | y | x|y |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Можно видеть так же, что x|y=¯x&y, что объясняет другое название этой функции: “И-НЕ”.
Через штрих Шеффера легко выражаются конъюнкция, дизъюнкция и инверсия:
x|x=¯x&x=¯x
x|y=¯x&y=¯x∨¯y
Следовательно,
x∨y=¯¯x∨y=¯¯x&¯y=¯x|¯y=(x|x)|(y|y)
x&y=¯¯x&y=¯x|y=(x|y)|(x|y)
Стрелка Пирса x↓y определяется как
x | y | x↓y |
---|---|---|
0 | 0 | 1 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 0 |
Можно видеть так же, что x↓y=¯x∨y, что объясняет другое название этой функции: “ИЛИ-НЕ”.
Через стрелку Пирса легко выражаются конъюнкция, дизъюнкция и инверсия:
x↓x=¯x∨x=¯x
x↓y=¯x∨y=¯x&¯y
Следовательно,
x∨y=¯¯x∨y=¯x↓y=(x↓y)↓(x↓y)
x&y=¯¯x&y=¯¯x∨¯y=¯x↓¯y=(x↓x)↓(y↓y)
Возможность выражения любой булевой функции через одну имеет большое значение при разработке элементной базы для реализации алгебры логики в вычислительных машинах. В частности, возможность на одинаковых логических элементах собрать схему произвольной сложности значительно упрощает задачу производства логических схем.
Особенно интересным является тот факт, что СДНФ может быть непосредственно выражена через элементы И-НЕ со многими входами, а СКНФ – через элементы ИЛИ-НЕ со многими входами. Для этого все элементарные конъюнкции/дизъюнкции заменяются на И-НЕ/ИЛИ-НЕ, и их дизъюнкция/конъюнкция так же заменяется на И-НЕ/ИЛИ-НЕ