Булева функция

Материал из Википедии — свободной энциклопедии
(перенаправлено с «Представление двоичных функций»)
Перейти к навигации Перейти к поиску

Бу́лева фу́нкция (или логи́ческая функция, или функция а́лгебры ло́гики)[1] от аргументов — в дискретной математике — отображение , где  — булево множество. Элементы булева множества обычно интерпретируют как логические значения «истинно» и «ложно», хотя в общем случае они рассматриваются как формальные символы, не несущие определённого смысла. Неотрицательное целое число , обозначающее количество аргументов, называется арностью или местностью функции, в случае булева функция превращается в булеву константу. Элементы декартова произведения (-я прямая степень) называют булевыми векторами или булевыми наборами. Множество всех булевых функций от любого числа аргументов часто обозначается , а от аргументов — . Переменные, принимающие значения из булева множества, называются булевыми переменными[2]. Булевы функции названы по фамилии математика Джорджа Буля.

При работе с булевыми функциями происходит полное абстрагирование от того содержательного смысла, какой предполагается в алгебре высказываний[2]. Тем не менее между булевыми функциями и формулами алгебры высказываний можно установить взаимно-однозначное соответствие, если[3]:

Раздел математики, изучающий булевы функции, называется теория булевых функций. Он является подразделом теории функций k-значной логики.

Основные сведения

[править | править код]

Каждая булева функция арности полностью определяется заданием своих значений на своей области определения, то есть на всех булевых векторах длины . Число таких векторов равно . Поскольку на каждом векторе булева функция может принимать значение либо , либо , то количество всех n-арных булевых функций равно . Поэтому в этом разделе рассматриваются только простейшие и важнейшие булевы функции.

Практически все булевы функции низших арностей (0, 1, 2 и 3) получили исторически сложившиеся имена. Если значение функции не зависит от одной из переменных (то есть, по сути, для любых двух булевых векторов, отличающихся лишь в значении этой переменной, значение функции на них совпадает), то эта переменная, не играя никакого «значения», называется фиктивной. В противном случае переменная называется существенной. Некоторые авторы определяют булевы функции с точностью до добавления/удаления фиктивной переменной. Другие же авторы используют обычное теоретико-множественное равенство функций, а функции, совпадающие с точность до добавления/удаления существенных переменных, они называют эквивалентными.

Таблицы истинности

[править | править код]

Булева функция задаётся конечным набором значений, что позволяет представить её в виде таблицы истинности, например[4]:

x1 x2 xn−1 xn f(x1, x2, …, xn)
0 0 0 0 0
0 0 0 1 0
0 0 1 0 1
0 0 1 1 0
1 1 0 0 1
1 1 0 1 0
1 1 1 0 0
1 1 1 1 0

Иногда, для краткости, таблицу истинности представляют в виде строки значений функции:

Значения функции в этой строке идут в лексикографическом порядке векторов аргументов.[5]

Нульарные функции

[править | править код]

При n = 0 количество булевых функций сводится к двум 220 = 21 = 2, первая из них тождественно равна 0, а вторая 1. Их называют булевыми константами — тождественный нуль и тождественная единица.
Таблица значений и названий нульарных булевых функций:

Значение Обозначение Название
0 F0,0 = 0 тождественный ноль
1 F0,1 = 1 тождественная единица

Унарные функции

[править | править код]

При n = 1 число булевых функций равно 221 = 22 = 4. Определение этих функций содержится в следующей таблице.

Таблица значений и названий булевых функций от одной переменной:

x0=x 1 0 Обозначение Название
0 0 0 F1,0 = 0 тождественный ноль
1 0 1 F1,1 = NOT(x) = x = ¬x = x' отрицание, логическое «НЕТ», «НЕ», инвертор, SWAP (обмен)
2 1 0 F1,2 = YES(x) = x логическое "ДА", повторитель, тавтология
3 1 1 F1,3 = 1 тождественная единица

Бинарные функции

[править | править код]

При n = 2 число булевых функций равно 222 = 24 = 16.

В таблице значений и названий булевых функций от двух переменных (в зависимости от области применения, функции имеют разные обозначения и разные словесные названия, но один и тот же номер[6]):

x0=x 1 0 1 0 Обозначение функции Название функции
x1=y 1 1 0 0
0 0 0 0 0 F2,0 = 0 тождественный ноль
1 0 0 0 1 F2,1 = xy = xy = x NOR y = NOR(x,y) = x НЕ-ИЛИ y = НЕ-ИЛИ(x,y) = NOT(MAX(X,Y)) стрелка Пи́рса - "↓" (кинжал Куайна - "†"), функция Ве́бба - "°"[7], НЕ-ИЛИ, 2ИЛИ-НЕ, антидизъюнкция, инверсия максимума
2 0 0 1 0 F2,2 = x > y = x GT y = GT(x,y) = xy = x y функция сравнения "первый операнд больше второго операнда", инверсия прямой импликации, коимпликация[8]
3 0 0 1 1 F2,3 = y = y' = ¬y = NOT2(x,y) = НЕ2(x,y) отрицание (негация, инверсия) второго операнда
4 0 1 0 0 F2,4 = x < y = x LT y = LT(x,y) = xy = x y функция сравнения "первый операнд меньше второго операнда", инверсия обратной импликации, обратная коимпликация[8]
5 0 1 0 1 F2,5 = x = x' = ¬x = NOT1(x,y) = НЕ1(x,y) отрицание (негация, инверсия) первого операнда
6 0 1 1 0 F2,6 = x >< y = x <> y = x NE y = NE(x, y) = xy = x XOR y = XOR(x,y) = XMAX(x,y) = x XMAX y функция сравнения "операнды не равны", сложение по модулю 2, исключающее «или», сумма Жегалкина[9], исключающий max
7 0 1 1 1 F2,7 = x | y = xy = x NAND y = NAND(x,y) = x НЕ-И y = НЕ-И(x,y) = NOT(MIN(X,Y)) штрих Ше́ффера, пунктир Чулкова[10], НЕ-И, 2И-НЕ, антиконъюнкция, инверсия минимума
8 1 0 0 0 F2,8 = xy = x · y = xy = x & y = x AND y = AND(x,y) = x И y = И(x,y) = min(x,y) конъюнкция, 2И, минимум
9 1 0 0 1 F2,9 = (xy) = x ~ y = xy = x EQV y = EQV(x,y) функция сравнения "операнды равны", эквивалентность
10 1 0 1 0 F2,10 = YES1(x,y) = ДА1(x,y) = x первый операнд
11 1 0 1 1 F2,11 = xy = x >= y = x GE y = GE(x,y) = xy = xy функция сравнения "первый операнд не меньше второго операнда", обратная импликация (от второго аргумента к первому)
12 1 1 0 0 F2,12 = YES2(x,y) = ДА2(x,y) = y второй операнд
13 1 1 0 1 F2,13 = xy = x <= y = x LE y = LE(x,y) = xy = xy = x IMP y[11] функция сравнения "первый операнд не больше второго операнда", прямая (материальная) импликация (от первого аргумента ко второму)
14 1 1 1 0 F2,14 = xy = x + y = x OR y = OR(x,y) = x ИЛИ y = ИЛИ(x,y) = max(x,y) дизъюнкция, 2ИЛИ, максимум
15 1 1 1 1 F2,15 = 1 тождественная единица

При двух аргументах префиксная, инфиксная и постфиксная записи, по экономичности, почти одинаковы.

Некоторые функции, имеющие смысл в цифровой технике, например функции сравнения, минимум и максимум, не имеют смысла в логике, так как в логике, в общем случае, логические значения TRUE и FALSE не имеют жёсткой привязки к числовым значениям (например в TurboBasic'е, для упрощения некоторых вычислений, TRUE = -1, а FALSE = 0) и невозможно определить, что больше TRUE или FALSE, импликации же и др. имеют смысл и в цифровой технике и в логике.

Тернарные функции

[править | править код]

При n = 3 число булевых функций равно 2(23) = 28 = 256. Некоторые из них определены в следующей таблице:
Таблица значений и названий некоторых булевых функций от трёх переменных, имеющих собственное название:

x0=x 1 0 1 0 1 0 1 0 Обозначения Названия
x1=y 1 1 0 0 1 1 0 0
x2=z 1 1 1 1 0 0 0 0
1 0 0 0 0 0 0 0 1 F3,1 = xyz = ↓(x,y,z) = Webb2(x,y,z) = NOR(x,y,z) 3ИЛИ-НЕ, функция Вебба, стрелка Пирса, кинжал Куайна - "†"
23 0 0 0 1 0 1 1 1 F3,23 = = ≥2(x,y,z) Переключатель по большинству с инверсией, 3ППБ-НЕ, мажоритарный клапан с инверсией
126 0 1 1 1 1 1 1 0 F3,126 = (x≠y≠z) = [≠(x,y,z)] = NE(x,y,z) Неравенство
127 0 1 1 1 1 1 1 1 F3,127 = x|y|z = |(x,y,z) = NAND(x,y,z) 3И-НЕ, штрих Шеффера
128 1 0 0 0 0 0 0 0 F3,128 = x&y&z = &(x,y,z) = (x AND y AND z) = AND(x,y,z) = (x И y И z) = И(x,y,z) = min(x,y,z) 3И, минимум
129 1 0 0 0 0 0 0 1 F3,129 = (x=y=z) = [=(x,y,z)] = EQV(x,y,z) Равенство
150 1 0 0 1 0 1 1 0 F3,150 = x⊕y⊕z = x⊕2y⊕2z = ⊕2(x,y,z) Тернарное сложение по модулю 2
184 1 0 1 1 1 0 0 0 F3,184 = Условная дизъюнкция
202 1 1 0 0 1 0 1 0 F3,202 = MUX(x,y) Мультиплексор 2 в 1
216 1 1 0 1 1 0 0 0 F3,216 = f1 Разряд займа при тернарном вычитании
232 1 1 1 0 1 0 0 0 F3,232 = f2 = [>=2(x,y,z)] = ≥2(x,y,z) = (x И y) ИЛИ (y И z) ИЛИ (z И x) Разряд переноса при тернарном сложении, переключатель по большинству, 3ППБ, мажоритарный клапан
248 1 1 1 1 1 0 0 0 F3,248 = x OR (y AND z) = Gi+1,j+1 = Gi+1,j OR (Pi+1,j AND Gi,j) Оператор G (Genarate) Valency-2 (валентность=2) в параллельно префиксных сумматорах
254 1 1 1 1 1 1 1 0 F3,254 = (x+y+z) = +(x,y,z) = (x OR y OR z) = OR(x,y,z) = (x ИЛИ y ИЛИ z) = ИЛИ(x,y,z) = max(x,y,z) ИЛИ, максимум

При трёх и более аргументах префиксная (и постфиксная) запись экономичнее инфиксной записи.
Обычный вид записи функций — префиксный (перед операндами). При инфиксной (между операндами) записи функций функции называются операторами, а аргументы функции — операндами.

Представление булевых функций

[править | править код]

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

  • Как построить по данной функции представляющую её формулу?
  • Как проверить, что две разные формулы эквивалентны, то есть задают одну и ту же функцию?
    • В частности: существует ли способ приведения произвольной формулы к эквивалентной ей канонической форме такой, что две формулы эквивалентны тогда и только тогда, когда их канонические формы совпадают?
  • Как по данной функции построить представляющую её формулу с теми или иными заданными свойствами (например, наименьшего размера), и возможно ли это?

Положительные ответы на эти и другие вопросы существенно увеличивают прикладное значение выбранной системы функций.

Дизъюнктивная нормальная форма (ДНФ)

[править | править код]

Простой конъюнкцией или конъюнктом называется конъюнкция некоторого конечного набора переменных или их отрицаний, причём каждая переменная встречается не более одного раза. Дизъюнктивной нормальной формой или ДНФ называется дизъюнкция простых конъюнкций. Элементарная конъюнкция

  • правильная, если каждая переменная входит в неё не более одного раза (включая отрицание);
  • полная, если каждая переменная (или её отрицание) входит в неё ровно 1 раз;
  • монотонная, если она не содержит отрицаний переменных.

Например   — является ДНФ.

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

Легко убедиться, что каждой булевой функции соответствует некоторая ДНФ, а функции, отличной от тождественного нуля — даже СДНФ. Для этого достаточно в таблице истинности этой функции найти все булевы векторы, на которых её значение равно 1, и для каждого такого вектора построить конъюнкцию , где . Дизъюнкция этих конъюнкций является СДНФ исходной функции, поскольку на всех булевых векторах её значения совпадают со значениями исходной функции. Например, для импликации результатом является , что можно упростить до .

Конъюнктивная нормальная форма (КНФ)

[править | править код]

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

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

КНФ может быть преобразована к эквивалентной ей ДНФ путём раскрытия скобок по правилу:

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

выражающее дистрибутивность дизъюнкции относительно конъюнкции. Результат нужно преобразовать описанным выше способом, заменив слово «конъюнкция» на «дизъюнкция» и наоборот.

Алгебраическая нормальная форма (АНФ или полином Жегалкина)

[править | править код]

Алгебраическая нормальная форма (общепринятое название в зарубежной литературе) или полином Жегалкина (название, используемое в отечественной литературе) — это форма представления логической функции в виде полинома с коэффициентами вида 0 и 1, в котором в качестве произведения используется операция конъюнкции («И», AND), а в качестве сложения — сложение по модулю 2 (исключающее «ИЛИ», XOR). Для получения полинома Жегалкина следует выполнить следующие действия:

  1. Получить СДНФ функции
  2. Все ИЛИ заменить на Исключающее ИЛИ
  3. Во всех термах заменить элементы с отрицанием на конструкцию: («элемент» «исключающее ИЛИ» 1)
  4. Раскрыть скобки по правилам алгебры Жегалкина и привести попарно одинаковые термы

Переменная булевой функции входит в её полином Жегалкина тогда и только тогда, когда она существенна.

Полные системы булевых функций

[править | править код]

Суперпозиция и замкнутые классы функций

[править | править код]

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

0 0 0 1
0 0 1 1
0 1 0 1
0 1 1 1
1 0 0 0
1 0 1 0
1 1 0 1
1 1 1 0

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

В качестве простейших примеров замкнутых классов булевых функций можно назвать множество , состоящее из одной тождественной функции, или множество , все функции из которого тождественно равны нулю вне зависимости от своих аргументов. Замкнуты также множество функций и множество всех унарных функций. А вот объединение замкнутых классов может таковым уже не являться. Например, объединив классы и , мы с помощью суперпозиции сможем получить константу 1, которая в исходных классах отсутствовала.

Разумеется, множество всех возможных булевых функций тоже является замкнутым.

Тождественность и двойственность

[править | править код]

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

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

А проверка таблиц, построенных для некоторых суперпозиций, даст следующие результаты:

(законы де Моргана)


(дистрибутивность конъюнкции и дизъюнкции)

Функция называется двойственной функции , если . Легко показать, что в этом равенстве f и g можно поменять местами, то есть функции f и g двойственны друг другу. Из простейших функций двойственны друг другу константы 0 и 1, а из законов де Моргана следует двойственность конъюнкции и дизъюнкции. Тождественная функция, как и функция отрицания, двойственна сама себе.

Если в булевом тождестве заменить каждую функцию на двойственную ей, снова получится верное тождество. В приведённых выше формулах легко найти двойственные друг другу пары.

Полнота системы, критерий Поста

[править | править код]

Система булевых функций называется полной, если можно построить их суперпозицию, тождественную любой заранее заданной функции. Говорят ещё, что замыкание данной системы совпадает с множеством .

Американский математик Эмиль Пост ввёл в рассмотрение следующие замкнутые классы булевых функций:

  • Функции, сохраняющие константу и ;
  • Самодвойственные функции ;
  • Монотонные функции ;
  • Линейные функции .

Им было доказано, что любой замкнутый класс булевых функций, не совпадающий с , целиком содержится в одном из этих пяти так называемых предполных классов, но при этом ни один из пяти не содержится целиком в объединении четырёх других. Таким образом, критерий Поста для полноты системы сводится к выяснению, не содержится ли вся эта система целиком в одном из предполных классов. Если для каждого класса в системе найдётся функция, не входящая в него, то такая система будет полной, и с помощью входящих в неё функций можно будет получить любую другую булеву функцию. Пост доказал, что множество замкнутых классов булевых функций — счётное множество.

Заметим, что существуют функции, не входящие ни в один из классов Поста. Любая такая функция сама по себе образует полную систему. В качестве примеров можно назвать штрих Шеффера или стрелку Пирса.

Классификация булевых функций

[править | править код]
  • По количеству n входных операндов, от которых зависит значение на выходе функции, различают нульарные (n = 0), унарные (n = 1), бинарные (n = 2), тернарные (n = 3) булевы функции и функции от большего числа операндов.
  • По количеству единиц и нулей в таблице истинности отличают узкий класс сбалансированных булевых функций (также называемых уравновешенными или равновероятностными, поскольку при равновероятных случайных значениях на входе или при переборе всех комбинаций по таблице истинности вероятность получения на выходе значения 1 равна 1/2) от более широкого класса несбалансированных булевых функций (так же называемых неуравновешенными, поскольку вероятность получения на выходе значения 1 отлична от 1/2). Сбалансированные булевы функции в основном используются в криптографии.
  • По зависимости значения функции от перестановки её входных битов различают симметричные булевы функции (значение которых зависит только от количества единиц на входе) и несимметричные булевы функции (значение которых так же зависит от перестановки её входных бит).
  • По значению функции на противоположных друг другу наборах значений аргументов отличают самодвойственные функции (значение которых инвертируется при инвертировании значения всех входов) от остальных булевых функций, не обладающих таким свойством. Нижняя часть таблицы истинности для самодвойственных функций является зеркальным отражением инвертированной верхней части (если расположить входные комбинации в таблице истинности в естественном порядке).

Геометрическая интерпретация

[править | править код]

Элементы множества можно представлять себе как координаты вершин единичного гиперкуба. На этом основывется геометрическая интерпретация булевых функций. В геометрической терминологии подмножества булева гиперкуба отождествляют с подмножествами вершин, например под гранью гиперкуба понимают её множество вершин, а под самим гиперкубом — множество .

Само понятие булев гиперкуб (или для краткости говорят просто булев куб) формально могут определять по-разному: как единичный куб в евклидовом пространстве, как граф или прямо так определяют как . При этом при работе с этим понятием его просто используют как синоним к , подмножество булева куба — синоним к понятию подмножество , а k-мерную грань булева куба определяют как подмножество , имеющее вид:

.

здесь булевы константы, фиксированные для определённой грани. Таким образом, грань булева куба — множество всех булевых векторов, в которых определённые координат имеют заданные значения. Число называется коразмерностью грани булева куба. По сути все эти термины — просто другая терминология, для объектов теории булевых функций; просто в некоторых случаях она оказывается удобнее обычной терминологии, например при изучении ДНФ и КНФ.[12]

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

Множеством нулей булевой функции называется множество:

[13]

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

Интерпретация множеством единиц

[править | править код]

При интерпретации функции множеством её единиц происходит следующее соответствие:

  • булева функция — подмножество булева куба;
  • дизъюнкция булевых функций — объединение подмножеств булева куба;
  • конъюнкция булевых функций — пересечение подмножеств булева куба;
  • элементарная конъюнкция — грань булева куба;
  • ДНФ — множество граней булева куба;
  • совершенная ДНФ — множество 0-мерных граней булева куба (то есть множество синглтонов вершин булева куба);
  • функция, задаваемая ДНФ — объединение множества граней булева куба;
  • импликанта функции — подмножество подмножества булева куба;
  • простая импликанта функции — максимальная грань, входящая в подмножество булева куба (то есть такая грань, которая не является собственным подмножеством никакой другой грани, входящей в подмножество булева куба)
  • сокращённая ДНФ функции — множество всех максимальных граней подмножества булева куба;

Интерпретация множеством нулей

[править | править код]

При интерпретации функции множеством её нулей происходит следующее соответствие:

  • булева функция — подмножество булева куба;
  • дизъюнкция булевых функций — пересечение подмножеств булева куба;
  • конъюнкция булевых функций — объединение подмножеств булева куба;
  • элементарная дизъюнкция — грань булева куба;
  • КНФ — множество граней булева куба;
  • совершенная КНФ — множество 0-мерных граней булева куба;
  • функция, задаваемая КНФ — объединение множества граней булева куба;
  • следствие фукции — подмножество подмножества булева куба;
  • простое следствие функции — максимальная грань, входящая в подмножество булева куба
  • сокращённая КНФ функции — множество всех максимальных граней подмножества булева куба;

Литература

[править | править код]
  1. Игошин, 2008, Глава 2. Булевы функции.
  2. 1 2 Игошин, 2008, с. 94.
  3. Игошин, 2008, с. 104-105.
  4. Самофалов, 1987.
  5. Рагимханов, 2019, с. 30.
  6. Номера логических функций https://dzen.ru/a/Zn5r7J4wYEgC3ubl
  7. Элементарные булевы функции. Дата обращения: 9 ноября 2016. Архивировано 10 ноября 2016 года.
  8. 1 2 Избранные вопросы теории булевых функций. // А. С. Балюк и др. Под ред. С. Ф. Винокурова и Н. А. Перязева. — М.: ФИЗМАТЛИТ, 2001. — 192 с. — С. 13.
  9. Игошин, 2008, с. 96.
  10. И.А. Насыров. учебно-методическое пособие. Дата обращения: 20 ноября 2020. Архивировано 22 декабря 2019 года.
  11. Borland Turbo BASIC Owners Handbook 1987, p.80
  12. Яблонский, 2006, с. 307.
  13. Нурлыбаев, 1991, с. 88.