Как проверить булеву функцию на монотонность

Определение. Булева функция f(x1, …, xn) называется монотонной (принадлежит классу M), если для любой пары наборов α и β таких, что αβ, выполняется условие f(α)≤ f(β) (назовем его условием монотонности).

Примеры. Исследуем мажоритарную булеву функцию.

Перебор пар начнем с наборов α=000 и β=001: для них αβ и выполнено условие монотонности f(000)=f(001). Отметим, что набор α таков, что любой другой набор β является последователем α, и, казалось бы, следует анализировать каждую из этих пар. Однако f(α)=0, поэтому условие f(α)≤ f(β) будет выполнено для любого набора β. Значит, в качестве α достаточно рассмотреть лишь те наборы, на которых функция принимает значение единица: 011, 101, 110 и 111. Кроме того, наборы в таблице истинности расположены в естественном порядке, значит, наборы –последователи лежат ниже предшественников. Набор α=011 имеет единственного последователя β=111 и f(011)=f(111), то есть условие монотонности для этой пары не нарушено. Рассмотрим остальные возможные пары наборов: α=101, β=111 и α=110, β=111 (набор α=111 последователей не имеет). Для них условие монотонности также не нарушено. Значит, мажоритарная функция монотонна.

Из элементарных булевых функций монотонными являются, например, конъюнкция и дизъюнкция. Не являются монотонными, например, штрих Шеффера и стрелка Пирса. •

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

Утверждение о условии немонотонности. Для любой пары наборов α и β таких, что αβ и f(α) > f(β), найдется пара соседних наборов α’, β’ с теми же свойствами: α’β’ и f(α’) > f(β’).

Доказательство. Если α и β – соседи, то утверждение верно (α’=α, β’=β). Иначе вычислим расстояние d (по Хэммингу) между наборами α=a1… an и β=b1… bn и начнем строить цепочку наборов γ, …, γd такую, что

и любые два расположенных рядом набора γi –1i (i=1, …, d) являются соседями. Очередной набор γi получим из предыдущего набора γi –1 заменой значения одной из ортогональных компонент наборов γi –1 и β (это будет замена 0 на 1, так как αβ), затем проверим условие немонотонности f(γi –1)>f(γi). Если оно выполнено, утверждение доказано (α’=γi –1, β’=γi). Иначе получим и исследуем очередной набор. В худшем случае, когда постоянно выполняется условие монотонности, имеем

но тогда f(γd –1)=1 и f(β)=0, значит, условие немонотонности выполнится для последней пары: α’=γd –1 и β’=γd=β. •

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

Если f(α)>f(β), то смена значения функции с 1 на 0 произойдет по крайней мере на одной из четырех пар соседей. •

Алгоритм распознавания монотонной булевой функции (основан на утверждении о условии немонотонности).

Начало. Задана таблица истинности булевой функции.

Шаг 1. Сравниваем значения функции на наборах, соседних по первой переменной, то есть верхнюю половину столбца значений функции (вектор φ1) с нижней половиной (вектор φ1). Если условие φ1φ1 нарушено, то функция не монотонна, идем на конец.

Шаг 2. Сравниваем значения функции на наборах, соседних по второй переменной, то есть верхние четвертины столбца значений функции (векторы φ’2, φ»2) с нижними четвертинами (векторами φ’2, φ»2) в каждой половине. Если хотя бы одно из условий φ’2φ’2 и φ»2φ»2нарушено, то функция не монотонна, идем на конец.

Читайте также:  Как записать victoria на флешку ultraiso

Шаги 3 –n. Аналогично сравниваем восьмые, шестнадцатые части, и так далее. Если ни одно из проверяемых условий не нарушено, то функция монотонна.

Примеры. Рассмотрим две булевых функции (первая – мажоритарная).

Проверим на монотонность мажоритарную функцию. Сравниваем половины столбца значений: φ1=0001 0111=φ1. Сравниваем четвертины: φ’2=00 01=φ’2, φ»2=01 11=φ»2. Сравниваем осьмушки: 0 0 , 0 1, 0 1 , 1 1 . Следовательно, мажоритарная функция монотонна.

Проверим на монотонность функцию g(x,y,z). Сравниваем половины столбца значений: φ1=0110 0111=φ1. Сравниваем четвертины: так как φ’2=01 не предшествует φ’2=10, функция g(x,y,z) не монотонна. •

Теорема о замкнутости класса M. Множество всех монотонных булевых функций является замкнутым классом.

Доказательство. Рассмотрим суперпозицию любых булевых функций из M, то есть функцию

и покажем, что она монотонна. Подставим в суперпозицию любую пару наборов α и β таких, что αβ, получим:

где γ и δ – булевы векторы. Так как αβ, и булевы функции f1(x1, …, xn), …, fm(x1, …, xn) монотонны, то γδ. Поскольку функция f(y1, …, ym) также монотонна, то f(γ)≤ f(δ), следовательно, f(α)≤ f(β), то есть f(x1, …, xn) монотонна, и класс M замкнут. •

Лемма о немонотонной булевой функции. Если булева функция немонотонна, то из нее подстановкой вместо аргументов констант 0 и 1 и переменной x можно получить инверсию переменной x .

Доказательство. Рассмотрим немонотонную функцию f(x1, …, xn). Согласно утверждению о условии немонотонности, существует пара соседних наборов α=a1… an и β=b1… bn таких, что αβ и f(α) > f(β), то есть

Пусть α и β – соседи по k –й компоненте, тогда

Подставим в функцию f(x1, …, xn) вместо каждого аргумента xi либо константу ai, если i ≠ k, либо переменную x, если i = k (подстановка константы и переменной допустима по условию теоремы). В результате получим функцию одного аргумента

Покажем, что g(x)= x :

Итак, инверсия x получена. •

Пример. Рассмотрим функцию f(y,z) = y ↓ z.

Она немонотонна, так как существует пара наборов α=00 и β=10 таких, что αβ и f(α)>f(β). Так как α и β – соседи по первой компоненте, то, согласно доказательству леммы, положим y=x и подставим вместо z константу 0, получим:

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

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

Множество функций, сохраняющих 1. Определяется условием f (1, 1, 1) = 1.

Линейные. Множество функций, многочлен Жегалкина которых не содержит произведений.

Монотонные. Выполнено условие: если набор α меньше набора β, то f (α) ≤ f (β).

Уточнение: для сравнения наборов используется правило — набор α меньше набора β тогда и только тогда, когда каждый элемент α не больше соответствующего элемента β, и хотя бы один элемент α меньше соответствующего элемента β.

Например, набор (0, 1, 0) меньше набора (1, 1, 1). А про наборы (1, 1, 0) и (1, 0, 1) нельзя сказать, что один меньше другого.

Для проверки функции на монотонность используют рисунок, называемый диаграммой Хассе.

Читайте также:  Как из одного формата видео сделать другой

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

При этом, если будет нарушение монотонности, оно обнаружится на диаграмме.

Например, для функции нарушение монотонности происходит следующим образом: (0, 0, 1) f (0, 1, 1), поскольку f (0, 0, 1) =1, f (0, 1, 1) = 0.

Наконец, самодвойственной называют булеву функцию, которая равна двойственной к ней.

Ответ на задачу о проверке принадлежности булевой функции к классам замкнутости записывают так:

T0 T1 L M S
f + +

Здесь T0 означает функции, сохраняющие 0, T1 – функции, сохраняющие 1, L – линейные, M – монотонные, S – самодвойственные.

Ответ в таблице приведён, разумеется, для функции .

Применение теоремы Пóста

Перед решением заключительной задачи про булевы функции вспомним формулировку теоремы Пóста: если в наборе булевых функций есть хотя бы одна не сохраняющая 0, хотя бы одна не сохраняющая 1, хотя бы одна нелинейная, хотя бы одна немонотонная и хотя бы одна несамодвойственная, то через функции этого набора можно выразить все остальные булевы функции.

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

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

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

Представление конъюнкции и отрицания через данную функцию f (x, y, z) и её отрицание

Первый шаг в такой работе – вычисление и . Получим две противоположные функции от одной переменной.

Далее возможны два случая: или это 0 и 1, или это x и .

(Например, для функции получим , )

В общем случае для достижения конечного результат нам понадобятся и обе константы, и отрицание, поэтому рассмотрим оба случая.

Если есть две константы: по немонотонности найдутся два набора, на которых нарушается монотонность. Например, (0, 0, 1) f (0, 1, 1). Тогда поставим x на место разряда, на котором нарушается монотонность.

В данном случае обозначим h (x) = f (0, x, 1). Эта функция переводит 0 в 1, а 1 в 0, следовательно, h (x) – это отрицание.

Если есть отрицание, то по несамодвойственности найдутся два инверсных набора (наборы, получающиеся заменой 0 на 1 и 1 на 0), значения в которых одинаковы.

Тогда подставим в один из этих наборов x вместо 1 и вместо 0. Например, f (1, 0, 0) = f (0, 1, 1) = 0. Рассмотрим функцию . Поскольку её значение не меняется при инверсии набора, то значение равно константе. В данном случае 0. Чтобы получить 1, возьмём отрицание f. Таким образом, в данном примере .

Итак, мы получили две константы и отрицание. Теперь нужно получить дизъюнкцию. Получим её с помощью нелинейности. Многочлен Жегалкина содержит хотя бы одно произведение. Например, f (x, y, z) = z + xy + yz. Если мы получим выражение, целиком состоящее из произведения двух переменных, то наша цель достигнута.

В нашем примере можно принять z = 0 и получить: f (x, y, 0) = xy.

Осталось выразить 0, причём только через f и отрицание этой функции.

.

Подставим одно выражение в другое.

Теперь воспользуемся этим нулём.

Таким образом, можем записать ответ:

Обращаем ваше внимание на то, что в ответе не должно быть констант, в выражении для конъюнкции не должно быть отрицания х.

Читайте также:  Как очистить память компьютера от ненужных файлов

Для других многочленов Жегалкина могут потребоваться другие подстановки, одного метода на все случаи жизни не существует, поэтому ограничимся некоторыми общими рекомендациями.

Не обязательно получать произведение xy. Например, произведение xz, если вы его получите, тоже будет решением задачи.

Не обязательно одно из чисел принимать именно за 0. Можно принять его за 1. Например, в случае 1 + z + xy замена z = 1 быстрее приведёт к цели, чем замена z = 0.

Во многих случаях для получения конъюнкции поможет отрицание. Например, для случая f (x, y, 0) = x + xy можно вынести x за скобку и получить выражение x (y + 1) = .

Тогда получим . Но нам нужно получить не , а xy.

Для этого мы возьмём отрицание от y в обеих частях и получим: , а это и требовалось. Осталось только записать произведение по правилам, то есть без констант и отрицаний.

Наконец, иногда получается не xy, а . Например, . В этом случае нужно взять .

В целом, заключительная задача творческая, и её решение, вообще говоря, не однозначно определено.

  1. Конструктивно-исследовательские задачи. Например: существует ли булева функция линейная, но не монотонная. И так далее. (Ответ: да. например, отрицание или XOR).
  2. Комбинаторные задачи про булевы функции. Например: сколько существует линейных функций от 5 переменных? (ответ: 64)

(Задание для функции, формула которой приведена после номера варианта, с формулировками, разобранными в теоретическом материале.)

Не нашли то, что искали? Воспользуйтесь поиском:

Пример я сам придумал, поэтому здесь, да, всё очевидно.

Но вот если в нём разделить вектор значений пополам и сравнивать 1101 и 1110, то несмотря на предшествование эти наборы не сравнимы.

Но вот если в нём разделить вектор значений пополам и сравнивать 1101 и 1110, то несмотря на предшествование эти наборы не сравнимы.

Ну вот!
Если они не сравнимы, значит функция немонотонна.
Т.е. несравнимость этих половинок означает, что на некоторых наборах значений переменных условие монотонности выполняется, а на некоторых нет.
Причем наборы значений переменных здесь попарно сравнимы.

Всё таки не до конца понятно, но тем не менее, уже ближе к цели.

Спасибо за ответ!

mad-math, ну, задайте вопросы )
Я с удовольствием отвечу.
Давайте так. Вот таблица для вашей функции.
000 1
001 1
010 0
011 1
100 1
101 1
110 1
111 0

Сравним первую строку с пятой, вторую с шестой, третью с седьмой, четвертую с восьмой.
Имеем:
1) 000 — 0 — условие монотонности НЕ выполняется

Что мы видим?
Во-первых, мы видим, что все взятые наборы переменных сравнимы и значит сравнение значений функции на них легитимно.
Во-вторых мы видим, что если бы функция была монотонна, то две половинки вектора значений были бы сравнимы. Потому что под номерами 1), 2), 3), 4) после точки с запятой как раз выполняется поэлементное сравнение первой и второй половин вектора f.

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

Спасибо большое за желание помочь, просто мне неудобно напрягать людей.

Сейчас распишу мои размышления. Поправьте, если я где-то ошибаюсь.

Пусть есть функция `f(0001 0010)`.

Условие `(0001) preceq (0010) ` может быть переписано в виде системы:
` <(0 URL

  • Профиль
Adblock detector