Думаю, каждый, кто изучал или изучает в университете дискретную математику, знаком с понятием многочлена Жегалкина.
Главная особенность этих многочленов состоит в том, что любую булеву функцию можно представить полиномом Жегалкина, причем единственным образом.
Чаще всего для построения полиномов Жегалкина студентам предлагаются два метода построения таких полиномов: метод неопределенных коэффициентов и метод эквивалентных преобразований.
Расчеты с использованием данных методов часто оказываются громоздкими. По невнимательности допустить ошибку не составляет труда.
Под катом приведен один удобный алгоритм, для построения полиномов Жегалкина, который студенты воспринимают «на ура», т.к. требует только выполнение «механических действий» без применения каких-либо умственных усилий. Краткое описание метода можно найти в Википедии, но на мой взгляд по нему не совсем понятно, как быстро проводить вычисления. Мне метод известен под названием «метод треугольника Паскаля».
Порядок проведения вычислений проще показать на примере. Далее я буду по шагам показывать, как должен выглядеть расчет на бумаге (или как его удобно проводить).
- Метод треугольника Паскаля
- Полином Жегалкина. Теорема о представлении в виде полинома Жегалкина
- Полином Жегалкина. Теорема о представлении в виде полинома Жегалкина
- Полнота
- Существование и единственность представления Теорема Жегалкина: Каждая булева функция единственным образом представляется в виде полинома Жегалкина. Заметим, что различных булевых функций от $n$ переменных $2^ $ штук. При этом конъюнкций вида $x_ ldots x_ $ существует ровно $2^n$, так как из $n$ возможных сомножителей каждый или входит в конъюнкцию, или нет. В полиноме у каждой такой конъюнкции стоит $0$ или $1$, то есть существует $2^ $ различных полиномов Жегалкина от $n$ переменных. Теперь достаточно лишь доказать, что различные полиномы реализуют различные функции. Предположим противное. Тогда приравняв два различных полинома и перенеся один из них в другую часть равенства, получим полином, тождественно равный нулю и имеющий ненулевые коэффициенты. Тогда рассмотрим слагаемое с единичным коэффициентом наименьшей длины, то есть с наименьшим числом переменных, входящих в него . Подставив единицы на места этих переменных, и нули на места остальных, получим, что на этом наборе только одно это слагаемое принимает единичное значение, то есть нулевая функция на одном из наборов принимает значение 1. Противоречие. Значит, каждая булева функция реализуется полиномом Жегалкина единственным образом. Построение полинома Жегалкина Существует несколько способов построения полинома Жегалкина. По таблице истинности Пусть для функции $f(x_1,x_2,dots,x_n)$ задана таблица истинности. Запишем сначала данную функцию в виде полинома Жегалкина с неопределёнными коэффициентами. Затем по очереди подставляем всевозможные наборы в порядке увеличения количества единиц и находим коэффициенты с учётом того, что $ a oplus 1 = bar $, а $ a oplus 0 = a$. За каждую подстановку находим только один коэффициент. Пример: Дана функция $f(x_1,x_2,x_3,x_4)$ и её таблица истинности: $x_1$ $x_2$ $x_3$ $x_4$ $f(x_1,x_2,x_3,x_4)$ 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 1 1 0 1 0 1 1 1 0 1 0 0 0 1 1 0 0 1 0 1 0 1 0 0 1 0 1 1 1 1 1 0 0 1 1 1 0 1 0 1 1 1 0 1 1 1 1 1 0 Построим для неё полином Жегалкина: $f(x_1,x_2,x_3,x_4) = a_ oplus a_ x_1 oplus a_ x_2 oplus a_ x_3 oplus a_ x_4 oplus a_ x_1 x_2 oplus a_ x_1 x_3 oplus a_ x_1 x_4 oplus \ oplus a_ x_2 x_3 oplus a_ x_2 x_4 oplus a_ x_3 x_4 oplus a_ x_1 x_2 x_3 oplus a_ x_1 x_2 x_4 oplus \ oplus a_ x_1 x_3 x_4 oplus a_ x_2 x_3 x_4 oplus a_ x_1 x_2 x_3 x_4$ Так как $f(0,0,0,0) = 0$, то $a_ = 0$. Далее подставляем все остальные наборы в порядке возрастания числа единиц, подставляя вновь полученные значения в следующие формулы: $f(1,0,0,0) = a_ oplus a_ = 1 Rightarrow a_ = 1$ $f(0,1,0,0) = a_ oplus a_ = 0 Rightarrow a_ = 0$ $f(0,0,1,0) = a_ oplus a_ = 0 Rightarrow a_ = 0$ $f(0,0,0,1) = a_ oplus a_ = 0 Rightarrow a_ = 0$ $f(1,1,0,0) = a_ oplus a_ oplus a_ oplus a_ = 1 Rightarrow a_ = 0$ $f(1,0,1,0) = a_ oplus a_ oplus a_ oplus a_ = 0 Rightarrow a_ = 1$ $f(1,0,0,1) = a_ oplus a_ oplus a_ oplus a_ = 0 Rightarrow a_ = 1$ $f(0,1,1,0) = a_ oplus a_ oplus a_ oplus a_ = 1 Rightarrow a_ = 1$ $f(0,1,0,1) = a_ oplus a_ oplus a_ oplus a_ = 0 Rightarrow a_ = 0$ $f(0,0,1,1) = a_ oplus a_ oplus a_ oplus a_ = 0 Rightarrow a_ = 0$ $f(1,1,1,0) = a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ = 1 Rightarrow a_ = 0$ $f(1,1,0,1) = a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ = 0 Rightarrow a_ = 0$ $f(1,0,1,1) = a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ = 1 Rightarrow a_ = 0$ $f(0,1,1,1) = a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ = 0 Rightarrow a_ = 1$ $f(1,1,1,1) = a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus \ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ = 0 Rightarrow a_ = 1$ Таким образом, полином Жегалкина выглядит так: $f(x_1,x_2,x_3,x_4) = x_1 oplus x_1 x_3 oplus x_1 x_4 oplus x_2 x_3 oplus x_2 x_3 x_4 oplus x_1 x_2 x_3 x_4$ Преобразование дизъюнктивной нормальной формы Этот способ основан на том, что $ X oplus 1 = bar $. Если функция задана в виде ДНФ, то можно сначала убрать дизъюнкцию, используя правило Де-Моргана, а все отрицания заменить прибавлением единицы по модулю два, после чего раскрыть скобки по обычным правилам, при этом учитывая, что четное число одинаковых слагаемых равно нулю , а нечетное число одинаковых слагаемых равно одному такому слагаемому. Либо же можно заменить дизъюнкцию по следующему правилу: $ A lor B = AB oplus A oplus B $ $ (1) $. Если функция задана в СДНФ, то так как при любых значениях входных переменных в единицу обращается не более одного члена выражения, то достаточно просто заменить все дизъюнкции исключающим ИЛИ. Пример: Дана функция в ДНФ $ f(x_1,x_2,x_3,x_4) = (x_1 land x_2 land neg x_3 land x_4) lor (neg x_1 land neg x_4) lor (x_1 land x_2) lor x_2 $, построим полином Жегалкина. Запишем функцию так: $f(x_1,x_2,x_3,x_4) = x_1 x_2 neg x_3 x_4 + neg x_1 neg x_4 + x_1 x_2 + x_2$; Сгруппируем слагаемые и воспользуемся преобразованием (1): $f(x_1,x_2,x_3,x_4) = (x_1 x_2 neg x_3 x_4 oplus neg x_1 neg x_4 oplus x_1 x_2 neg x_3 x_4 neg x_1 neg x_4) + (x_1 x_2 oplus x_2 oplus oplus x_1 x_2 x_2)$ Воспользуемся свойствами конъюнкции $A land A = A$ и $neg A land A = 0$, а также тем, что $A oplus A = 0$, и упростим выражение: $f(x_1,x_2,x_3,x_4) = (x_1 x_2 neg x_3 x_4 oplus neg x_1 neg x_4) + x_2$ Ещё раз воспользуемся преобразованием (1): $f(x_1,x_2,x_3,x_4) = x_1 x_2 neg x_3 x_4 oplus neg x_1 neg x_4 oplus x_2 oplus (x_1 x_2 neg x_3 x_4 oplus neg x_1 neg x_4) x_2$ Раскроем скобку по алгебраическим правилам: $f(x_1,x_2,x_3,x_4) = x_1 x_2 neg x_3 x_4 oplus neg x_1 neg x_4 oplus x_2 oplus x_1 x_2 x_2 neg x_3 x_4 oplus neg x_1 x_2 neg x_4$ Снова воспользуемся свойствами конъюнкции и исключающего ИЛИ: $f(x_1,x_2,x_3,x_4) = neg x_1 neg x_4 oplus x_2 oplus neg x_1 x_2 neg x_4$ Заменим отрицание на прибавление $1$: $f(x_1,x_2,x_3,x_4) = (x_1 oplus 1) (x_4 oplus 1) oplus x_2 oplus (x_1 oplus 1) x_2 (x_4 oplus 1)$ $f(x_1,x_2,x_3,x_4) = x_1 x_4 oplus x_1 oplus x_4 oplus 1 oplus x_2 oplus x_1 x_2 x_4 oplus x_1 x_2 oplus x_2 x_4 oplus x_2$ Выкинем парные слагаемые и получим окончательную формулу: $f(x_1,x_2,x_3,x_4) = x_1 x_2 x_4 oplus x_1 x_2 oplus x_1 x_4 oplus x_2 x_4 oplus x_1 oplus x_4 oplus 1$ Метод треугольника Метод треугольника позволяет преобразовать таблицу истинности в полином Жегалкина путём построения вспомогательной треугольной таблицы в соответствии со следующими правилами: Строится полная таблица истинности, в которой строки идут в порядке возрастания двоичных кодов от $000dots00$ до $111dots11$. Строится вспомогательная треугольная таблица, в которой первый столбец совпадает со столбцом значений функции в таблице истинности. Ячейка в каждом последующем столбце получается путём сложения по модулю 2 двух ячеек предыдущего столбца — стоящей в той же строке и строкой ниже. Столбцы вспомогательной таблицы нумеруются двоичными кодами в том же порядке, что и строки таблицы истинности. Каждому двоичному коду ставится в соответствие один из членов полинома Жегалкина в зависимости от позиций кода, в которых стоят единицы. Например, ячейке $111$ соответствует член $ABC$, ячейке $101$ — член $AC$, ячейке $010$ — член $B$, ячейке $000$ — член $1$ и т.д. Если в верхней строке какого-либо столбца стоит единица, то соответствующий член присутствует в полиноме Жегалкина. Фактически, этот метод является модификацией метода построения по таблице истинности, описанного выше. По сравнению с ним он удобнее тем, что расчёты занимают мало места и в них сложнее ошибиться, но метод треугольника требует бо́льшего количества операций. Пример преобразования таблицы истинности в полином Жегалкина для функции трёх переменных $P(A,B,C)$ показан на рисунке. Чтобы получить формулу, по которой рассчитывается какой-либо коэффициент, нужно из клетки, в которой он записан, пройтись всеми возможными путями влево, до столбца $»P»$ таблицы истинности, делая ходы влево и влево-вниз, записать значения в конечных ячейках и сложить их все между собой по модулю 2. Таким образом, в первом столбце сверху записан коэффициент $ a_0 = P(0,0,0) $, во втором — $ a_1 = P(0,0,0) oplus P(0,0,1) $, в третьем — $ a_2 = P(0,0,0) oplus P(0,0,1) oplus P(0,0,1) oplus P(0,1,0) = P(0,0,0) oplus P(0,1,0) $, $ a_3 = P(0,0,0) oplus P(0,0,1) oplus P(0,0,1) oplus P(0,0,1) oplus P(0,1,0) oplus P(0,1,0) oplus P(0,1,0) oplus P(0,1,1) = \ = P(0,0,0) oplus P(0,1,0) oplus P(0,1,0) oplus P(0,1,1), $ и так далее, то есть при построении вспомогательной таблицы коэффициенты полинома просчитываются автоматически. Преобразование Мёбиуса Пусть задана булева функция $f: B^n rightarrow B, ;; B= $. Любая булева функция представима в виде полинома Жегалкина, притом единственным образом. Пусть $ i = (i_1, i_2, .. i_n), ;; i_k in $, и введем обозначение $ x ^ sim left[begin x,;; i_k=1 1, ;; i_k=0end right. $ Тогда полином Жегалкина можно записать как: $ f(x) = bigopluslimits_i alpha_i cdot x_1^ cdot x_2^ cdot$$dots$$cdot x_n^ $, где $alpha_i in $. Множество коэффициентов $ $ можно рассматривать как функцию $alpha$, заданной на множестве индексов $ i = (i_1, i_2, dots i_n)$, то есть $alpha: i mapsto alpha_i$. Очевидно, функцию $ f $ можно записать и следующим образом: $ f(x) = bigoplus limits_i alpha_i cdot [x_1 , ; $ если $ ;; i_1] cdot [x_2 , ; $ если $ ;; i_2] cdot$$dots$$cdot [x_n , ; $ если $ ;; i_n]$. Тут запись $[x_k , ; $ если $ ; i_k]$ означает, что элелемент $ x_k $ присутствует в соответствующем члене полинома только если $ i_k = 1 $. Тогда если для какого-то $x$, $i succ x$* ,то в слагаемом будет существовать хотя бы один множитель, равный нулю, и такое слагаемое на сумму не повлияет. Отсюда ясно, что $ f(x) = bigoplus limits_ alpha_i $ $ (2) $ Найдем отображение $ f mapsto alpha$ . $*$ $i succ x$ обозначает, что $x$ «меньше» $i$ как последовательность бит Теорема: Пусть задана функция $ f $. Тогда функцию $ alpha_x $ можно найти по формуле: $alpha_x = bigoplus limits_ f(j)$ (3) Докажем при помощи индукции по количеству единиц в векторе $ x $ и для удобства обозначим это количество единиц $ wt(x) $. 1) База: если $ x = 0 $, то, очевидно $ f(0) = alpha_0 $ 2) Пускай теорема справедлива для всех сумм $wt(x) Огравление $Rightarrow $ Построение таблицы истинности. СДНФ. СКНФ. Полином Жегалкина. Онлайн калькулятор позволяет быстро строить таблицу истинности для произвольной булевой функции или её вектора, рассчитывать совершенную дизъюнктивную и совершенную конъюнктивную нормальные формы, находить представление функции в виде полинома Жегалкина, строить карту Карно и классифицировать функцию по классам Поста. Калькулятор таблицы истинности, СКНФ, СДНФ, полинома Жегалкина введите функцию или её вектор Построено таблиц, форм: Как пользоваться калькулятором Введите в поле логическую функцию (например, x1 ∨ x2) или её вектор (например, 10110101) Укажите действия, которые необходимо выполнить с помощью переключателей Укажите, требуется ли вывод решения переключателем «С решением» Нажмите на кнопку «Построить» Видеоинструкция к калькулятору Используемые символы В качестве переменных используются буквы латинского и русского алфавитов (большие и маленькие), а также цифры, написанные после буквы (индекс переменной). Таким образом, именами переменных будут: a , x , a1 , B , X , X1 , Y1 , A123 и так далее. Для записи логических операций можно использовать как обычные символы клавиатуры ( * , + , ! , ^ , -> , = ), так и символы, устоявшиеся в литературе ( ∧ , ∨ , ¬ , ⊕ , → , ≡ ). Если на вашей клавиатуре отсутствует нужный символ операции, то используйте клавиатуру калькулятора (если она не видна, нажмите «Показать клавиатуру»), в которой доступны как все логические операции, так и набор наиболее часто используемых переменных. Для смены порядка выполнения операций используются круглые скобки (). Обозначения логических операций И (AND): & • ∧ * ИЛИ (OR): ∨ + НЕ (NOT): ¬ ! Исключающее ИЛИ (XOR): ⊕ ^ Импликация: -> → => Эквивалентность: = Что умеет калькулятор Строить таблицу истинности по функции Строить таблицу истинности по двоичному вектору Строить совершенную конъюнктивную нормальную форму (СКНФ) Строить совершенную дизъюнктивную нормальную форму (СДНФ) Строить полином Жегалкина (методами Паскаля, треугольника, неопределённых коэффициентов) Определять принадлежность функции к каждому из пяти классов Поста Строить карту Карно Минимизировать ДНФ и КНФ Искать фиктивные переменные Что такое булева функция Булева функция f(x1, x2, . xn) — это любая функция от n переменных x1, x2, . xn, в которой её аргументы принимают одно из двух значений: либо 0, либо 1, и сама функция принимает значения 0 или 1. То есть это правило, по которому произвольному набору нулей и единиц ставится в соответствие значение 0 или 1. Подробнее про булевы функции можно посмотреть на Википедии. Что такое таблица истинности? Таблица истинности — это таблица, описывающая логическую функцию, а именно отражающую все значения функции при всех возможных значениях её аргументов. Таблица состоит из n+1 столбцов и 2 n строк, где n — число используемых переменных. В первых n столбцах записываются всевозможные значения аргументов (переменных) функции, а в n+1-ом столбце записываются значения функции, которые она принимает на данном наборе аргументов. Довольно часто встречается вариант таблицы, в которой число столбцов равно n + число используемых логических операций. В такой таблице также первые n столбцов заполнены наборами аргументов, а оставшиеся столбцы заполняются значениями подфункций, входящих в запись функции, что позволяет упростить расчёт конечного значения функции за счёт уже промежуточных вычислений. Логические операции Логическая операция — операция над высказываниями, позволяющая составлять новые высказывания путём соединения более простых. В качестве основных операций обычно называют конъюнкцию (∧ или &), дизъюнкцию (∨ или |), импликацию (→), отрицание (¬), эквивалентность (=), исключающее ИЛИ (⊕). Таблица истинности логических операций a b a ∧ b a ∨ b ¬a ¬b a → b a = b a ⊕ b 0 0 0 0 1 1 1 1 0 0 1 0 1 1 0 1 0 1 1 0 0 1 0 1 0 0 1 1 1 1 1 0 0 1 1 0 Как задать логическую функцию Есть множество способов задать булеву функцию: таблица истинности характеристические множества вектор значений матрица Грея формулы Рассмотрим некоторые из них: Чтобы задать функцию через вектор значений необходимо записать вектор из 2 n нулей и единиц, где n — число аргументов, от которых зависит функция. Например, функцию двух аргументов можно задать так: 0001 (операция И), 0111 (операция ИЛИ). Чтобы задать функцию в виде формулы, необходимо записать математическое выражение, состоящее из аргументов функции и логических операций. Например, можно задать такую функцию: a∧b ∨ b∧c ∨ a∧c Способы представления булевой функции С помощью формул можно получать огромное количество разнообразных функций, причём с помощью разных формул можно получить одну и ту же функцию. Иногда бывает весьма полезно узнать, как построить ту или иную функцию, используя лишь небольшой набор заданных операций или используя как можно меньше произвольных операций. Рассмотрим основные способы задания булевых функций: Совершенная дизъюнктивная нормальная форма (СДНФ) Совершенная конъюнктивная нормальная форма (СКНФ) Алгебраическая нормальная форма (АНФ, полином Жегалкина) Совершенная дизъюнктивная нормальная форма (ДНФ) Простая конъюнкция — это конъюнкция некоторого конечного набора переменных, или их отрицаний, причём каждая переменная встречается не более одного раза. Дизъюнктивная нормальная форма (ДНФ) — это дизъюнкция простых конъюнкций. Совершенная дизъюнктивная нормальная форма (СДНФ) — ДНФ относительно некоторого заданного конечного набора переменных, в каждую конъюнкцию которой входят все переменные данного набора. Например, ДНФ является функция ¬a bc ∨ ¬a ¬b c ∨ ac, но не является СДНФ, так как в последней конъюнкции отсутствует переменная b. Совершенная конъюнктивная нормальная форма (КНФ) Простая дизъюнкция — это дизъюнкция одной или нескольких переменных, или их отрицаний, причём каждая переменная входит в неё не более одного раза. Конъюнктивная нормальная форма (КНФ) — это конъюнкция простых дизъюнкций. Совершенная конъюнктивная нормальная форма (СКНФ) — КНФ относительно некоторого заданного конечного набора переменных, в каждую дизъюнкцию которой входят все переменные данного набора. Например, КНФ является функция (a ∨ b) ∧ (a ∨ b ∨ c), но не является СДНФ, так как в первой дизъюнкции отсутствует переменная с. Алгебраическая нормальная форма (АНФ, полином Жегалкина) Алгебраическая нормальная форма, полином Жегалкина — это форма представления логической функции в виде полинома с коэффициентами вида 0 и 1, в котором в качестве произведения используется операция конъюнкции, а в качестве сложения — исключающее ИЛИ. Примеры полиномов Жегалкина: 1, a, a⊕b, ab⊕a⊕b⊕1 Алгоритм построения СДНФ для булевой функции Построить таблицу истинности для функции Найти все наборы аргументов, на которых функция принимает значение 1 Выписать простые конъюнкции для каждого из наборов по следующему правилу: если в наборе переменная принимает значение 0, то она входит в конъюнкцию с отрицанием, а иначе без отрицания Объединить все простые конъюнкции с помощью дизъюнкции Алгоритм построения СКНФ для булевой функции Построить таблицу истинности для функции Найти все наборы аргументов, на которых функция принимает значение 0 Выписать простые дизъюнкции для каждого из наборов по следующему правилу: если в наборе переменная принимает значение 1, то она входит в дизъюнкцию с отрицанием, а иначе без отрицания Объединить все простые дизъюнкции с помощью конъюнкции Алгоритм построения полинома Жегалкина булевой функции Есть несколько методов построения полинома Жегалкина, в данной статье рассмотрим наиболее удобный и простой из всех. Построить таблицу истинности для функции Добавить новый столбец к таблице истинности и записать в 1, 3, 5. ячейки значения из тех же строк предыдущего столбца таблицы истинности, а к значениям в строках 2, 4, 6. прибавить по модулю два значения из соответственно 1, 3, 5. строк. Добавить новый столбец к таблице истинности и переписать в новый столбец значения 1, 2, 5, 6, 9, 10. строк, а к 3, 4, 7, 8, 11, 12. строкам аналогично предыдущему пункту прибавить переписанные значения. Повторить действия каждый раз увеличивая в два раза количество переносимых и складываемых элементов до тех пор, пока длина не станет равна числу строк таблицы. Выписать булевы наборы, на которых значение последнего столбца равно единице Записать вместо единиц в наборах имена переменных, соответствующие набору (для нулевого набора записать единицу) и объединить их с помощью операции исключающего ИЛИ. Примеры построения различных представлений логических функций Построим совершенные дизъюнктивную и дизъюнктивную нормальные формы, а также полином Жегалкина для функции трёх переменных F = ¬a b∨ ¬b c∨ca 1. Построим таблицу истинности для функции a b c ¬a ¬a ∧b ¬b ¬b ∧c ¬a ∧b∨ ¬b ∧c c∧a ¬a ∧b∨ ¬b ∧c∨c∧a 0 0 0 1 0 1 0 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 0 1 1 0 0 1 0 1 0 1 1 1 1 0 0 1 0 1 1 0 0 0 0 1 0 0 0 0 1 0 1 0 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 Построение совершенной дизъюнктивной нормальной формы: Найдём наборы, на которых функция принимает истинное значение: В соответствие найденным наборам поставим элементарные конъюнкции по всем переменным, причём если переменная в наборе принимает значение 0, то она будет записана с отрицанием: Объединим конъюнкции с помощью дизъюнкции и получим совершенную дизъюнктивную нормальную форму: Построение совершенной конъюнктивной нормальной формы: Найдём наборы, на которых функция принимает ложное значение: В соответствие найденным наборам поставим элементарные дизъюнкции по всем переменным, причём если переменная в наборе принимает значение 1, то она будет записана с отрицанием: Объединим дизъюнкции с помощью конъюнкции и получим совершенную конъюнктивную нормальную форму: Построение полинома Жегалкина: Добавим новый столбец к таблице истинности и запишем в 1, 3, 5 и 7 строки значения из тех же строк предыдущего столбца таблицы истинности, а значения в строках 2, 4, 6 и 8 сложим по модулю два со значениями из соответственно 1, 3, 5 и 7 строк: a b c F 1 0 0 0 0 → 0 0 0 1 1 ⊕ 0 1 0 1 0 1 → 1 0 1 1 1 ⊕ 1 0 1 0 0 0 → 0 1 0 1 1 ⊕ 0 1 1 1 0 0 → 0 1 1 1 1 ⊕ 0 1 Добавим новый столбец к таблице истинности и запишем в 1 и 2, 5 и 6 строки значения из тех же строк предыдущего столбца таблицы истинности, а значения в строках 3 и 4, 7 и 8 сложим по модулю два со значениями из соответственно 1 и 2, 5 и 6 строк: a b c F 1 2 0 0 0 0 0 → 0 0 0 1 1 1 → 1 0 1 0 1 1 ⊕ 0 1 0 1 1 1 0 ⊕ 1 1 1 0 0 0 0 → 0 1 0 1 1 1 → 1 1 1 0 0 0 ⊕ 0 0 1 1 1 1 1 ⊕ 1 0 Добавим новый столбец к таблице истинности и запишем в 1 2, 3 и 4 строки значения из тех же строк предыдущего столбца таблицы истинности, а значения в строках 5, 6, 7 и 8 сложим по модулю два со значениями из соответственно 1, 2, 3 и 4 строк: a b c F 1 2 3 0 0 0 0 0 0 → 0 0 0 1 1 1 1 → 1 0 1 0 1 1 1 → 1 0 1 1 1 0 1 → 1 1 0 0 0 0 0 ⊕ 0 0 1 0 1 1 1 1 ⊕ 1 0 1 1 0 0 0 0 ⊕ 1 1 1 1 1 1 1 0 ⊕ 1 1 Окончательно получим такую таблицу: a b c F 1 2 3 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 0 0 0 0 0 1 0 1 1 1 1 0 1 1 0 0 0 0 1 1 1 1 1 1 0 1 Выпишем наборы, на которых получившийся вектор принимает единичное значение и запишем вместо единиц в наборах имена переменных, соответствующие набору (для нулевого набора следует записать единицу): Объединяя полученные конъюнкции с помощью операции исключающего или, получим полином Жегалкина: c⊕b⊕bc⊕ab⊕abc Programforyou — это сообщество, в котором Вы можете подтянуть свои знания по программированию, узнать, как эффективно решать те или иные задачи, а также воспользоваться нашими онлайн сервисами.
- Построение полинома Жегалкина
- По таблице истинности
- Преобразование дизъюнктивной нормальной формы
- Метод треугольника
- Преобразование Мёбиуса
- Построение таблицы истинности. СДНФ. СКНФ. Полином Жегалкина.
- Как пользоваться калькулятором
- Видеоинструкция к калькулятору
- Используемые символы
- Обозначения логических операций
- Что умеет калькулятор
- Что такое булева функция
- Что такое таблица истинности?
- Логические операции
- Таблица истинности логических операций
- Как задать логическую функцию
- Способы представления булевой функции
- Совершенная дизъюнктивная нормальная форма (ДНФ)
- Совершенная конъюнктивная нормальная форма (КНФ)
- Алгебраическая нормальная форма (АНФ, полином Жегалкина)
- Алгоритм построения СДНФ для булевой функции
- Алгоритм построения СКНФ для булевой функции
- Алгоритм построения полинома Жегалкина булевой функции
- Примеры построения различных представлений логических функций
- Построение совершенной дизъюнктивной нормальной формы:
- Построение совершенной конъюнктивной нормальной формы:
- Построение полинома Жегалкина:
- 💡 Видео
Видео:Многочлен полином Жегалкина Метод треугольника Паскаля Преобразование формулСкачать
Метод треугольника Паскаля
Требуется построить полином Жегалкина для функции f. Для примера, в качестве функции f возьмем функцию голосования .
Шаг 1. Строим таблицу значений функции (строки в таблице идут в порядке возрастания двоичных кодов). Таблицу лучше разместить в левой части листа.
Шаг 2. Построение треугольника.
Для этого берем вектор значения функции и выписываем его напротив первой строки таблицы:
Далее заполняем треугольник, складывая попарно соседние значения по модулю 2, результат сложения выписываем ниже.
Продолжаем вычисления, пока в строке не останется лишь одна цифра.
Шаг 3. Построение полинома Жегалкина.
Нас интересует левая сторона треугольника (значения выделены жирным):
Числа на левой стороне (выделены жирным шрифтом) треугольника есть коэффициенты полинома при монотонных конъюнкциях, соответствующих наборам значений переменных.
Теперь выпишем для наглядности эти конъюнкции. Конъюнкции выписываем по двоичным наборам в левой части таблицы по следующему принципу: если напротив переменной xi стоит 1, то переменная входит в конъюнкцию; в противном случае переменная отсутствует в конъюнкции. Набору (0,0,0) соответствует константа 1.
Если принцип получения конъюнкций понятен, то столбец с ними можно (даже лучше) не выписывать, а сразу переходить к построению полинома.
Для построения полинома нужны только конъюнкции из строк с единицами на левой стороне треугольника.
Это и есть конъюнкции, входящие в состав полинома Жегалкина. Осталось лишь выписать сам полином:
Если переменных в функции не 3, а 4 или больше, то метод работает без изменений, только увеличатся размеры таблиц. Тем не менее, в отличие от метода неопределенных коэффициентов, расчеты можно без особых усилий выполнить на листе бумаги.
Видео:A.2.19 Полином ЖегалкинаСкачать
Полином Жегалкина. Теорема о представлении в виде полинома Жегалкина
Полином Жегалкина. Теорема о представлении в виде полинома Жегалкина
- Услуги проектирования
- Алгебра логики [Г.И. Просветов, Е.А. Фоминых, Ф.Г. Кораблёв]
- Полином Жегалкина. Теорема о представлении в виде полинома Жегалкина
Видео:Многочлен полином Жегалкина Метод неопределенных коэффициентов Метод треугольника ПаскаляСкачать
Полином Жегалкина. Теорема о представлении в виде полинома Жегалкина
Полином Жегалкина — многочлен над кольцом $mathbb _2$, то есть полином с коэффициентами вида 0 и 1, где в качестве произведения берётся конъюнкция, а в качестве сложения — исключающее или. Полином был предложен в 1927 году Иваном Жегалкиным в качестве удобного средства для представления функций булевой логики. В зарубежной литературе представление в виде полинома Жегалкина обычно называется алгебраической нормальной формой .
Теорема Жегалкина — утверждение о существовании и единственности представления всякой булевой функции в виде полинома Жегалкина.
Полином Жегалкина представляет собой сумму по модулю два произведений неинвертированных переменных, а также константы
Формально полином Жегалкина можно представить в виде
или в более формализованном виде как:
$P = a oplus bigoplus_ < begin 1leq i_1 Примеры полиномов Жегалкина:
- $ P = B oplus AB;$
- $ P = X oplus YZ oplus ABX oplus ABDYZ;$
- $ P = 1 oplus A oplus ABD.$
Видео:Худший метод построения полинома ЖегалкинаСкачать
Полнота
По теореме Поста, чтобы система булевых функций была полной, надо, чтобы в ней существовали
- Хотя бы одна функция, не сохраняющая $0$;
- Хотя бы одна функция, не сохраняющая $1$;
- Хотя бы одна нелинейная функция;
- Хотя бы одна немонотонная функция;
- Хотя бы одна несамодвойственная функция.
Исходя из этого, система функций $bigllangle wedge, oplus, 1 bigrrangle$ является полной:
$x_0$ | $x_1$ | $dots$ | $x_n$ | $1$ | $land$ | $oplus$ |
$0$ | $0$ | $dots$ | $0$ | $1$ | $0$ | $0$ |
$1$ | $0$ | $dots$ | $0$ | $1$ | $0$ | $1$ |
$vdots$ | $vdots$ | $vdots$ | $vdots$ | $vdots$ | $vdots$ | $vdots$ |
$1$ | $1$ | $dots$ | $1$ | $1$ | $1$ | $0$ |
. | . | . | сохраняет 0 | $0$ | $1$ | $1$ |
. | . | . | сохраняет 1 | $1$ | $1$ | $0$ |
. | . | . | самодвойственная | $0$ | $0$ | $0$ |
. | . | . | монотонная | $1$ | $1$ | $0$ |
. | . | . | линейная | $1$ | $0$ | $1$ |
На основе этой системы и строятся полиномы Жегалкина.
Видео:Лекция 2. Полином Жегалкина (теоретическая часть)Скачать
Существование и единственность представления
Теорема Жегалкина: Каждая булева функция единственным образом представляется в виде полинома Жегалкина.
Заметим, что различных булевых функций от $n$ переменных $2^ $ штук. При этом конъюнкций вида $x_ ldots x_ $ существует ровно $2^n$, так как из $n$ возможных сомножителей каждый или входит в конъюнкцию, или нет. В полиноме у каждой такой конъюнкции стоит $0$ или $1$, то есть существует $2^ $ различных полиномов Жегалкина от $n$ переменных.
Теперь достаточно лишь доказать, что различные полиномы реализуют различные функции. Предположим противное. Тогда приравняв два различных полинома и перенеся один из них в другую часть равенства, получим полином, тождественно равный нулю и имеющий ненулевые коэффициенты. Тогда рассмотрим слагаемое с единичным коэффициентом наименьшей длины, то есть с наименьшим числом переменных, входящих в него . Подставив единицы на места этих переменных, и нули на места остальных, получим, что на этом наборе только одно это слагаемое принимает единичное значение, то есть нулевая функция на одном из наборов принимает значение 1. Противоречие. Значит, каждая булева функция реализуется полиномом Жегалкина единственным образом.
Видео:Полином ЖегалкинаСкачать
Построение полинома Жегалкина
Существует несколько способов построения полинома Жегалкина.
По таблице истинности
Пусть для функции $f(x_1,x_2,dots,x_n)$ задана таблица истинности. Запишем сначала данную функцию в виде полинома Жегалкина с неопределёнными коэффициентами. Затем по очереди подставляем всевозможные наборы в порядке увеличения количества единиц и находим коэффициенты с учётом того, что $ a oplus 1 = bar $, а $ a oplus 0 = a$. За каждую подстановку находим только один коэффициент.
Пример: Дана функция $f(x_1,x_2,x_3,x_4)$ и её таблица истинности:
$x_1$ | $x_2$ | $x_3$ | $x_4$ | $f(x_1,x_2,x_3,x_4)$ |
0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 1 | 0 |
0 | 0 | 1 | 0 | 0 |
0 | 0 | 1 | 1 | 0 |
0 | 1 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 0 |
0 | 1 | 1 | 0 | 1 |
0 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 0 | 1 |
1 | 0 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 0 |
1 | 0 | 1 | 1 | 1 |
1 | 1 | 0 | 0 | 1 |
1 | 1 | 0 | 1 | 0 |
1 | 1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 | 0 |
Построим для неё полином Жегалкина:
$f(x_1,x_2,x_3,x_4) = a_ oplus a_ x_1 oplus a_ x_2 oplus a_ x_3 oplus a_ x_4 oplus a_ x_1 x_2 oplus a_ x_1 x_3 oplus a_ x_1 x_4 oplus \ oplus a_ x_2 x_3 oplus a_ x_2 x_4 oplus a_ x_3 x_4 oplus a_ x_1 x_2 x_3 oplus a_ x_1 x_2 x_4 oplus \ oplus a_ x_1 x_3 x_4 oplus a_ x_2 x_3 x_4 oplus a_ x_1 x_2 x_3 x_4$
Так как $f(0,0,0,0) = 0$, то $a_ = 0$.
Далее подставляем все остальные наборы в порядке возрастания числа единиц, подставляя вновь полученные значения в следующие формулы:
$f(1,0,0,0) = a_ oplus a_ = 1 Rightarrow a_ = 1$
$f(0,1,0,0) = a_ oplus a_ = 0 Rightarrow a_ = 0$
$f(0,0,1,0) = a_ oplus a_ = 0 Rightarrow a_ = 0$
$f(0,0,0,1) = a_ oplus a_ = 0 Rightarrow a_ = 0$
$f(1,1,0,0) = a_ oplus a_ oplus a_ oplus a_ = 1 Rightarrow a_ = 0$
$f(1,0,1,0) = a_ oplus a_ oplus a_ oplus a_ = 0 Rightarrow a_ = 1$
$f(1,0,0,1) = a_ oplus a_ oplus a_ oplus a_ = 0 Rightarrow a_ = 1$
$f(0,1,1,0) = a_ oplus a_ oplus a_ oplus a_ = 1 Rightarrow a_ = 1$
$f(0,1,0,1) = a_ oplus a_ oplus a_ oplus a_ = 0 Rightarrow a_ = 0$
$f(0,0,1,1) = a_ oplus a_ oplus a_ oplus a_ = 0 Rightarrow a_ = 0$
$f(1,1,1,0) = a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ = 1 Rightarrow a_ = 0$
$f(1,1,0,1) = a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ = 0 Rightarrow a_ = 0$
$f(1,0,1,1) = a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ = 1 Rightarrow a_ = 0$
$f(0,1,1,1) = a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ = 0 Rightarrow a_ = 1$
$f(1,1,1,1) = a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ oplus \ oplus a_ oplus a_ oplus a_ oplus a_ oplus a_ = 0 Rightarrow a_ = 1$
Таким образом, полином Жегалкина выглядит так:
$f(x_1,x_2,x_3,x_4) = x_1 oplus x_1 x_3 oplus x_1 x_4 oplus x_2 x_3 oplus x_2 x_3 x_4 oplus x_1 x_2 x_3 x_4$
Преобразование дизъюнктивной нормальной формы
Этот способ основан на том, что $ X oplus 1 = bar $. Если функция задана в виде ДНФ, то можно сначала убрать дизъюнкцию, используя правило Де-Моргана, а все отрицания заменить прибавлением единицы по модулю два, после чего раскрыть скобки по обычным правилам, при этом учитывая, что четное число одинаковых слагаемых равно нулю , а нечетное число одинаковых слагаемых равно одному такому слагаемому. Либо же можно заменить дизъюнкцию по следующему правилу: $ A lor B = AB oplus A oplus B $ $ (1) $.
Если функция задана в СДНФ, то так как при любых значениях входных переменных в единицу обращается не более одного члена выражения, то достаточно просто заменить все дизъюнкции исключающим ИЛИ.
Пример: Дана функция в ДНФ $ f(x_1,x_2,x_3,x_4) = (x_1 land x_2 land neg x_3 land x_4) lor (neg x_1 land neg x_4) lor (x_1 land x_2) lor x_2 $, построим полином Жегалкина.
Запишем функцию так:
$f(x_1,x_2,x_3,x_4) = x_1 x_2 neg x_3 x_4 + neg x_1 neg x_4 + x_1 x_2 + x_2$;
Сгруппируем слагаемые и воспользуемся преобразованием (1):
$f(x_1,x_2,x_3,x_4) = (x_1 x_2 neg x_3 x_4 oplus neg x_1 neg x_4 oplus x_1 x_2 neg x_3 x_4 neg x_1 neg x_4) + (x_1 x_2 oplus x_2 oplus oplus x_1 x_2 x_2)$
Воспользуемся свойствами конъюнкции $A land A = A$ и $neg A land A = 0$, а также тем, что $A oplus A = 0$, и упростим выражение:
$f(x_1,x_2,x_3,x_4) = (x_1 x_2 neg x_3 x_4 oplus neg x_1 neg x_4) + x_2$
Ещё раз воспользуемся преобразованием (1):
$f(x_1,x_2,x_3,x_4) = x_1 x_2 neg x_3 x_4 oplus neg x_1 neg x_4 oplus x_2 oplus (x_1 x_2 neg x_3 x_4 oplus neg x_1 neg x_4) x_2$
Раскроем скобку по алгебраическим правилам:
$f(x_1,x_2,x_3,x_4) = x_1 x_2 neg x_3 x_4 oplus neg x_1 neg x_4 oplus x_2 oplus x_1 x_2 x_2 neg x_3 x_4 oplus neg x_1 x_2 neg x_4$
Снова воспользуемся свойствами конъюнкции и исключающего ИЛИ:
$f(x_1,x_2,x_3,x_4) = neg x_1 neg x_4 oplus x_2 oplus neg x_1 x_2 neg x_4$
Заменим отрицание на прибавление $1$:
$f(x_1,x_2,x_3,x_4) = (x_1 oplus 1) (x_4 oplus 1) oplus x_2 oplus (x_1 oplus 1) x_2 (x_4 oplus 1)$
$f(x_1,x_2,x_3,x_4) = x_1 x_4 oplus x_1 oplus x_4 oplus 1 oplus x_2 oplus x_1 x_2 x_4 oplus x_1 x_2 oplus x_2 x_4 oplus x_2$
Выкинем парные слагаемые и получим окончательную формулу:
$f(x_1,x_2,x_3,x_4) = x_1 x_2 x_4 oplus x_1 x_2 oplus x_1 x_4 oplus x_2 x_4 oplus x_1 oplus x_4 oplus 1$
Метод треугольника
Метод треугольника позволяет преобразовать таблицу истинности в полином Жегалкина путём построения вспомогательной треугольной таблицы в соответствии со следующими правилами:
- Строится полная таблица истинности, в которой строки идут в порядке возрастания двоичных кодов от $000dots00$ до $111dots11$.
- Строится вспомогательная треугольная таблица, в которой первый столбец совпадает со столбцом значений функции в таблице истинности.
- Ячейка в каждом последующем столбце получается путём сложения по модулю 2 двух ячеек предыдущего столбца — стоящей в той же строке и строкой ниже.
- Столбцы вспомогательной таблицы нумеруются двоичными кодами в том же порядке, что и строки таблицы истинности.
- Каждому двоичному коду ставится в соответствие один из членов полинома Жегалкина в зависимости от позиций кода, в которых стоят единицы. Например, ячейке $111$ соответствует член $ABC$, ячейке $101$ — член $AC$, ячейке $010$ — член $B$, ячейке $000$ — член $1$ и т.д.
- Если в верхней строке какого-либо столбца стоит единица, то соответствующий член присутствует в полиноме Жегалкина.
Фактически, этот метод является модификацией метода построения по таблице истинности, описанного выше. По сравнению с ним он удобнее тем, что расчёты занимают мало места и в них сложнее ошибиться, но метод треугольника требует бо́льшего количества операций.
Пример преобразования таблицы истинности в полином Жегалкина для функции трёх переменных $P(A,B,C)$ показан на рисунке.
Чтобы получить формулу, по которой рассчитывается какой-либо коэффициент, нужно из клетки, в которой он записан, пройтись всеми возможными путями влево, до столбца $»P»$ таблицы истинности, делая ходы влево и влево-вниз, записать значения в конечных ячейках и сложить их все между собой по модулю 2.
Таким образом, в первом столбце сверху записан коэффициент $ a_0 = P(0,0,0) $,
во втором — $ a_1 = P(0,0,0) oplus P(0,0,1) $,
в третьем — $ a_2 = P(0,0,0) oplus P(0,0,1) oplus P(0,0,1) oplus P(0,1,0) = P(0,0,0) oplus P(0,1,0) $,
$ a_3 = P(0,0,0) oplus P(0,0,1) oplus P(0,0,1) oplus P(0,0,1) oplus P(0,1,0) oplus P(0,1,0) oplus P(0,1,0) oplus P(0,1,1) = \ = P(0,0,0) oplus P(0,1,0) oplus P(0,1,0) oplus P(0,1,1), $
и так далее, то есть при построении вспомогательной таблицы коэффициенты полинома просчитываются автоматически.
Преобразование Мёбиуса
Пусть задана булева функция $f: B^n rightarrow B, ;; B= $. Любая булева функция представима в виде полинома Жегалкина, притом единственным образом.
Пусть $ i = (i_1, i_2, .. i_n), ;; i_k in $, и введем обозначение $ x ^ sim left[begin x,;; i_k=1 1, ;; i_k=0end right. $
Тогда полином Жегалкина можно записать как: $ f(x) = bigopluslimits_i alpha_i cdot x_1^ cdot x_2^ cdot$$dots$$cdot x_n^ $, где $alpha_i in $.
Множество коэффициентов $ $ можно рассматривать как функцию $alpha$, заданной на множестве индексов $ i = (i_1, i_2, dots i_n)$, то есть $alpha: i mapsto alpha_i$.
Очевидно, функцию $ f $ можно записать и следующим образом: $ f(x) = bigoplus limits_i alpha_i cdot [x_1 , ; $ если $ ;; i_1] cdot [x_2 , ; $ если $ ;; i_2] cdot$$dots$$cdot [x_n , ; $ если $ ;; i_n]$.
Тут запись $[x_k , ; $ если $ ; i_k]$ означает, что элелемент $ x_k $ присутствует в соответствующем члене полинома только если $ i_k = 1 $. Тогда если для какого-то $x$, $i succ x$* ,то в слагаемом будет существовать хотя бы один множитель, равный нулю, и такое слагаемое на сумму не повлияет. Отсюда ясно, что $ f(x) = bigoplus limits_ alpha_i $ $ (2) $ Найдем отображение $ f mapsto alpha$ .
$*$ $i succ x$ обозначает, что $x$ «меньше» $i$ как последовательность бит
Теорема: Пусть задана функция $ f $. Тогда функцию $ alpha_x $ можно найти по формуле: $alpha_x = bigoplus limits_ f(j)$ (3)
Докажем при помощи индукции по количеству единиц в векторе $ x $ и для удобства обозначим это количество единиц $ wt(x) $.
1) База: если $ x = 0 $, то, очевидно $ f(0) = alpha_0 $
2) Пускай теорема справедлива для всех сумм $wt(x) Огравление $Rightarrow $
Видео:Полином ЖегалкинаСкачать
Построение таблицы истинности. СДНФ. СКНФ. Полином Жегалкина.
Онлайн калькулятор позволяет быстро строить таблицу истинности для произвольной булевой функции или её вектора, рассчитывать совершенную дизъюнктивную и совершенную конъюнктивную нормальные формы, находить представление функции в виде полинома Жегалкина, строить карту Карно и классифицировать функцию по классам Поста.
Калькулятор таблицы истинности, СКНФ, СДНФ, полинома Жегалкина
введите функцию или её вектор
Построено таблиц, форм:
Видео:Представление в виде Полинома Жегалкина функции заданной в виде СДНФСкачать
Как пользоваться калькулятором
- Введите в поле логическую функцию (например, x1 ∨ x2) или её вектор (например, 10110101)
- Укажите действия, которые необходимо выполнить с помощью переключателей
- Укажите, требуется ли вывод решения переключателем «С решением»
- Нажмите на кнопку «Построить»
Видео:Самый короткий тест на интеллект Задача Массачусетского профессораСкачать
Видеоинструкция к калькулятору
Используемые символы
В качестве переменных используются буквы латинского и русского алфавитов (большие и маленькие), а также цифры, написанные после буквы (индекс переменной). Таким образом, именами переменных будут: a , x , a1 , B , X , X1 , Y1 , A123 и так далее.
Для записи логических операций можно использовать как обычные символы клавиатуры ( * , + , ! , ^ , -> , = ), так и символы, устоявшиеся в литературе ( ∧ , ∨ , ¬ , ⊕ , → , ≡ ). Если на вашей клавиатуре отсутствует нужный символ операции, то используйте клавиатуру калькулятора (если она не видна, нажмите «Показать клавиатуру»), в которой доступны как все логические операции, так и набор наиболее часто используемых переменных.
Для смены порядка выполнения операций используются круглые скобки ().
Обозначения логических операций
- И (AND): & • ∧ *
- ИЛИ (OR): ∨ +
- НЕ (NOT): ¬ !
- Исключающее ИЛИ (XOR): ⊕ ^
- Импликация: -> → =>
- Эквивалентность: =
Что умеет калькулятор
- Строить таблицу истинности по функции
- Строить таблицу истинности по двоичному вектору
- Строить совершенную конъюнктивную нормальную форму (СКНФ)
- Строить совершенную дизъюнктивную нормальную форму (СДНФ)
- Строить полином Жегалкина (методами Паскаля, треугольника, неопределённых коэффициентов)
- Определять принадлежность функции к каждому из пяти классов Поста
- Строить карту Карно
- Минимизировать ДНФ и КНФ
- Искать фиктивные переменные
Видео:Треугольник ПаскаляСкачать
Что такое булева функция
Булева функция f(x1, x2, . xn) — это любая функция от n переменных x1, x2, . xn, в которой её аргументы принимают одно из двух значений: либо 0, либо 1, и сама функция принимает значения 0 или 1. То есть это правило, по которому произвольному набору нулей и единиц ставится в соответствие значение 0 или 1. Подробнее про булевы функции можно посмотреть на Википедии.
Видео:СДНФ СКНФ Полином Жегалкина для логических выраженийСкачать
Что такое таблица истинности?
Таблица истинности — это таблица, описывающая логическую функцию, а именно отражающую все значения функции при всех возможных значениях её аргументов. Таблица состоит из n+1 столбцов и 2 n строк, где n — число используемых переменных. В первых n столбцах записываются всевозможные значения аргументов (переменных) функции, а в n+1-ом столбце записываются значения функции, которые она принимает на данном наборе аргументов.
Довольно часто встречается вариант таблицы, в которой число столбцов равно n + число используемых логических операций. В такой таблице также первые n столбцов заполнены наборами аргументов, а оставшиеся столбцы заполняются значениями подфункций, входящих в запись функции, что позволяет упростить расчёт конечного значения функции за счёт уже промежуточных вычислений.
Видео:Полином Жегалкина с нуля. Часть 1Скачать
Логические операции
Логическая операция — операция над высказываниями, позволяющая составлять новые высказывания путём соединения более простых. В качестве основных операций обычно называют конъюнкцию (∧ или &), дизъюнкцию (∨ или |), импликацию (→), отрицание (¬), эквивалентность (=), исключающее ИЛИ (⊕).
Таблица истинности логических операций
a | b | a ∧ b | a ∨ b | ¬a | ¬b | a → b | a = b | a ⊕ b |
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 |
0 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 |
1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 |
Видео:Многочлен полином Жегалкина Метод неопределенных коэффициентовСкачать
Как задать логическую функцию
Есть множество способов задать булеву функцию:
- таблица истинности
- характеристические множества
- вектор значений
- матрица Грея
- формулы
Рассмотрим некоторые из них:
Чтобы задать функцию через вектор значений необходимо записать вектор из 2 n нулей и единиц, где n — число аргументов, от которых зависит функция. Например, функцию двух аргументов можно задать так: 0001 (операция И), 0111 (операция ИЛИ).
Чтобы задать функцию в виде формулы, необходимо записать математическое выражение, состоящее из аргументов функции и логических операций. Например, можно задать такую функцию: a∧b ∨ b∧c ∨ a∧c
Видео:Дискретная математика. Видео 1. Минимизация булевых функций.Скачать
Способы представления булевой функции
С помощью формул можно получать огромное количество разнообразных функций, причём с помощью разных формул можно получить одну и ту же функцию. Иногда бывает весьма полезно узнать, как построить ту или иную функцию, используя лишь небольшой набор заданных операций или используя как можно меньше произвольных операций. Рассмотрим основные способы задания булевых функций:
- Совершенная дизъюнктивная нормальная форма (СДНФ)
- Совершенная конъюнктивная нормальная форма (СКНФ)
- Алгебраическая нормальная форма (АНФ, полином Жегалкина)
Совершенная дизъюнктивная нормальная форма (ДНФ)
Простая конъюнкция — это конъюнкция некоторого конечного набора переменных, или их отрицаний, причём каждая переменная встречается не более одного раза.
Дизъюнктивная нормальная форма (ДНФ) — это дизъюнкция простых конъюнкций.
Совершенная дизъюнктивная нормальная форма (СДНФ) — ДНФ относительно некоторого заданного конечного набора переменных, в каждую конъюнкцию которой входят все переменные данного набора.
Например, ДНФ является функция ¬a bc ∨ ¬a ¬b c ∨ ac, но не является СДНФ, так как в последней конъюнкции отсутствует переменная b.
Совершенная конъюнктивная нормальная форма (КНФ)
Простая дизъюнкция — это дизъюнкция одной или нескольких переменных, или их отрицаний, причём каждая переменная входит в неё не более одного раза.
Конъюнктивная нормальная форма (КНФ) — это конъюнкция простых дизъюнкций.
Совершенная конъюнктивная нормальная форма (СКНФ) — КНФ относительно некоторого заданного конечного набора переменных, в каждую дизъюнкцию которой входят все переменные данного набора.
Например, КНФ является функция (a ∨ b) ∧ (a ∨ b ∨ c), но не является СДНФ, так как в первой дизъюнкции отсутствует переменная с.
Алгебраическая нормальная форма (АНФ, полином Жегалкина)
Алгебраическая нормальная форма, полином Жегалкина — это форма представления логической функции в виде полинома с коэффициентами вида 0 и 1, в котором в качестве произведения используется операция конъюнкции, а в качестве сложения — исключающее ИЛИ.
Примеры полиномов Жегалкина: 1, a, a⊕b, ab⊕a⊕b⊕1
Алгоритм построения СДНФ для булевой функции
- Построить таблицу истинности для функции
- Найти все наборы аргументов, на которых функция принимает значение 1
- Выписать простые конъюнкции для каждого из наборов по следующему правилу: если в наборе переменная принимает значение 0, то она входит в конъюнкцию с отрицанием, а иначе без отрицания
- Объединить все простые конъюнкции с помощью дизъюнкции
Алгоритм построения СКНФ для булевой функции
- Построить таблицу истинности для функции
- Найти все наборы аргументов, на которых функция принимает значение 0
- Выписать простые дизъюнкции для каждого из наборов по следующему правилу: если в наборе переменная принимает значение 1, то она входит в дизъюнкцию с отрицанием, а иначе без отрицания
- Объединить все простые дизъюнкции с помощью конъюнкции
Алгоритм построения полинома Жегалкина булевой функции
Есть несколько методов построения полинома Жегалкина, в данной статье рассмотрим наиболее удобный и простой из всех.
- Построить таблицу истинности для функции
- Добавить новый столбец к таблице истинности и записать в 1, 3, 5. ячейки значения из тех же строк предыдущего столбца таблицы истинности, а к значениям в строках 2, 4, 6. прибавить по модулю два значения из соответственно 1, 3, 5. строк.
- Добавить новый столбец к таблице истинности и переписать в новый столбец значения 1, 2, 5, 6, 9, 10. строк, а к 3, 4, 7, 8, 11, 12. строкам аналогично предыдущему пункту прибавить переписанные значения.
- Повторить действия каждый раз увеличивая в два раза количество переносимых и складываемых элементов до тех пор, пока длина не станет равна числу строк таблицы.
- Выписать булевы наборы, на которых значение последнего столбца равно единице
- Записать вместо единиц в наборах имена переменных, соответствующие набору (для нулевого набора записать единицу) и объединить их с помощью операции исключающего ИЛИ.
Видео:Треугольник ПаскаляСкачать
Примеры построения различных представлений логических функций
Построим совершенные дизъюнктивную и дизъюнктивную нормальные формы, а также полином Жегалкина для функции трёх переменных F = ¬a b∨ ¬b c∨ca
1. Построим таблицу истинности для функции
a | b | c | ¬a | ¬a ∧b | ¬b | ¬b ∧c | ¬a ∧b∨ ¬b ∧c | c∧a | ¬a ∧b∨ ¬b ∧c∨c∧a |
0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 1 |
0 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 |
0 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 |
1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 |
1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
Построение совершенной дизъюнктивной нормальной формы:
Найдём наборы, на которых функция принимает истинное значение:
В соответствие найденным наборам поставим элементарные конъюнкции по всем переменным, причём если переменная в наборе принимает значение 0, то она будет записана с отрицанием:
Объединим конъюнкции с помощью дизъюнкции и получим совершенную дизъюнктивную нормальную форму:
Построение совершенной конъюнктивной нормальной формы:
Найдём наборы, на которых функция принимает ложное значение:
В соответствие найденным наборам поставим элементарные дизъюнкции по всем переменным, причём если переменная в наборе принимает значение 1, то она будет записана с отрицанием:
Объединим дизъюнкции с помощью конъюнкции и получим совершенную конъюнктивную нормальную форму:
Построение полинома Жегалкина:
Добавим новый столбец к таблице истинности и запишем в 1, 3, 5 и 7 строки значения из тех же строк предыдущего столбца таблицы истинности, а значения в строках 2, 4, 6 и 8 сложим по модулю два со значениями из соответственно 1, 3, 5 и 7 строк:
a | b | c | F | 1 | |
0 | 0 | 0 | 0 | → | 0 |
0 | 0 | 1 | 1 | ⊕ 0 | 1 |
0 | 1 | 0 | 1 | → | 1 |
0 | 1 | 1 | 1 | ⊕ 1 | 0 |
1 | 0 | 0 | 0 | → | 0 |
1 | 0 | 1 | 1 | ⊕ 0 | 1 |
1 | 1 | 0 | 0 | → | 0 |
1 | 1 | 1 | 1 | ⊕ 0 | 1 |
Добавим новый столбец к таблице истинности и запишем в 1 и 2, 5 и 6 строки значения из тех же строк предыдущего столбца таблицы истинности, а значения в строках 3 и 4, 7 и 8 сложим по модулю два со значениями из соответственно 1 и 2, 5 и 6 строк:
a | b | c | F | 1 | 2 | |
0 | 0 | 0 | 0 | 0 | → | 0 |
0 | 0 | 1 | 1 | 1 | → | 1 |
0 | 1 | 0 | 1 | 1 | ⊕ 0 | 1 |
0 | 1 | 1 | 1 | 0 | ⊕ 1 | 1 |
1 | 0 | 0 | 0 | 0 | → | 0 |
1 | 0 | 1 | 1 | 1 | → | 1 |
1 | 1 | 0 | 0 | 0 | ⊕ 0 | 0 |
1 | 1 | 1 | 1 | 1 | ⊕ 1 | 0 |
Добавим новый столбец к таблице истинности и запишем в 1 2, 3 и 4 строки значения из тех же строк предыдущего столбца таблицы истинности, а значения в строках 5, 6, 7 и 8 сложим по модулю два со значениями из соответственно 1, 2, 3 и 4 строк:
a | b | c | F | 1 | 2 | 3 | |
0 | 0 | 0 | 0 | 0 | 0 | → | 0 |
0 | 0 | 1 | 1 | 1 | 1 | → | 1 |
0 | 1 | 0 | 1 | 1 | 1 | → | 1 |
0 | 1 | 1 | 1 | 0 | 1 | → | 1 |
1 | 0 | 0 | 0 | 0 | 0 | ⊕ 0 | 0 |
1 | 0 | 1 | 1 | 1 | 1 | ⊕ 1 | 0 |
1 | 1 | 0 | 0 | 0 | 0 | ⊕ 1 | 1 |
1 | 1 | 1 | 1 | 1 | 0 | ⊕ 1 | 1 |
Окончательно получим такую таблицу:
a | b | c | F | 1 | 2 | 3 |
0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 1 | 1 | 1 |
0 | 1 | 0 | 1 | 1 | 1 | 1 |
0 | 1 | 1 | 1 | 0 | 1 | 1 |
1 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 1 | 1 | 1 | 1 | 0 |
1 | 1 | 0 | 0 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 1 | 0 | 1 |
Выпишем наборы, на которых получившийся вектор принимает единичное значение и запишем вместо единиц в наборах имена переменных, соответствующие набору (для нулевого набора следует записать единицу):
Объединяя полученные конъюнкции с помощью операции исключающего или, получим полином Жегалкина: c⊕b⊕bc⊕ab⊕abc
Programforyou — это сообщество, в котором Вы можете подтянуть свои знания по программированию, узнать, как эффективно решать те или иные задачи, а также воспользоваться нашими онлайн сервисами.
💡 Видео
Как использовать метод неопределённых коэффициентов для минимизации ДНФ и КНФ? Душкин объяснитСкачать
Многочлен Жегалкина.Скачать
ДМ 1 курс - 3 лекция - булевы функции, полиномы Жегалкина, критерий ПостаСкачать
20-2 Полиномы ЖегалкинаСкачать