Перейти к содержимому

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

  • автор:

О порождении булевых функций в предположении монотонности Текст научной статьи по специальности «Математика»

Аннотация научной статьи по математике, автор научной работы — Вороненко А. А., Федорова В. С.

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по математике , автор научной работы — Вороненко А. А., Федорова В. С.

О сложности схем в базисах, содержащих монотонные элементы с нулевыми весами
О длине сертификата повторности в некоторых расширенных элементарных базисах
О порождающих системах в классах монотонных функций многозначной логики
Тестирование бесповторных функций в элементарном базисе
О максимальных неразделённых семействах подмножеств
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

On the Boolean function generation under monotonicity

We consider the problem of the possibility of a Boolean function f definition such that for any monotone function g one could produce a number of sets of a given function f so that function g is the only one among the monotone functions matching with f on these sets. It is shown that there are no such functions for the set of all monotone functions. At the same time an example of a sequence of functions, each generating a large number of monotone functions is constructed.

Текст научной работы на тему «О порождении булевых функций в предположении монотонности»

А. А. Вороненко1, В. С. Федорова2

О ПОРОЖДЕНИИ БУЛЕВЫХ ФУНКЦИЙ В ПРЕДПОЛОЖЕНИИ МОНОТОННОСТИ

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

Ключевые слова: монотонная функция, порождение функции, универсальная функция.

Расшифровка функций является ключевой задачей теории алгоритмического обучения, одного из активно развивающихся направлений современной дискретной математики, и заключается в следующем. Пусть фиксирован некоторый класс функций, для определенности булевых, и имеется черный ящик, в котором «содержится» некоторая неизвестная функция из этого класса. Требуется, задавая вопросы типа «Какое значение принимает неизвестная функция на данном входном наборе?», определить, какая именно функция находится в черном ящике? Предполагается, что каждый следующий вопрос может зависеть от ответов на предыдущие. Одной из классических задач такого рода является задача расшифровки монотонных булевых функций, решенная в 1966 г. Ж. Анселем [1]; с тех пор задача рассматривается в различных моделях расшифровки для функций из разных классов.

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

Для булевых векторов х = (xi. ,хп) и у = . ,уп) соотношение х ^ у выполняется тогда и только тогда, когда для любого i, 1 ^ г ^ п, выполнено x,i ^yi — Булева функция / называется [2, см., например, с. 17] монотонной тогда и только тогда, когда для любых векторов ж и у, таких, что х ^ у, выполняется соотношение f(x) ^ f(y)- Будем говорить, что (не обязательно всюду определенная) булева функция / порождает монотонную булеву функцию д, если существует такое множество наборов из области определения / (назовем их предъявляемыми наборами), что единственной монотонной функцией, совпадающей с / на этих наборах, является д. Булева функция /, которая порождает все монотонные функции, называется универсальной [3]. Впервые задача об изучении свойств порождения и универсальных функций была поставлена для класса линейных функций в работе [3], где было доказано, что требуемое количество предъявляемых наборов универсальной функции растет линейным образом относительно числа переменных порождаемой функции.

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

Теорема 1. Пусть f(xi. ,хт) — произвольная монотонная функция. Не обязательно всюду определенная булева функция g(xi. хт) порождает f(xi. хт) тогда и только тогда, когда g принимает значение 0 на всех верхних нулях f и 1 на всех нижних единицах /.

1 Факультет ВМК МГУ, проф., д.ф.-м.н., e-mail: dm6Qcs.msu.ru

2 Факультет ВМК МГУ, мл. научн. сотр., к.ф.-м.н., e-mail: fedorovavsQcs.msu.ru

* Работа выполнена при поддержке ФЦП «Научные и научно-педагогические кадры инновационной России» на 20092013 годы.

Доказательство. Достаточность. Докажем, что можно так выбрать множество предъявляемых наборов функции д, что для произвольного набора à, такого, что f(â) = a, a G , значение порожденной функции действительно совпадет с а на наборе à. Пусть а = 0. Тогда у монотонной функции / существует верхний ноль ß, такой, что à ^ ß. По условию теоремы g(ß) = 0. Предъявив этот набор д, в предположении монотонности получим f(â) = 0. Случай а = 1 рассматривается аналогично.

Необходимость. Пусть ß — верхний ноль функции f(x\. ,хт) и пусть g(ß) = 1. Наряду с /(ж 1. хт) рассмотрим функцию h(xi. хт), отличающуюся от /(жi. хт) только на наборе ß. Функция h(x 1. ,хт) также монотонна, и f(x\. ,хт) нельзя отличить от нее, предъявляя значения, общие для g и /. Теорема доказана.

Следствие. Универсальных монотонных функций не существует.

Напомним, что вес булевого набора — это число единиц в нем. Введем в рассмотрение симметрическую булеву функцию ш(хi. хп). Пусть здесь и далее п = 2к + 1, если п нечетно, и п 21,- + 2. если п четно. Положим ш <х) = 0, если вес набора х принадлежит множеству <0,1. А; — 1, к + 1>и ш(х) = 1, если вес набора х принадлежит множеству .

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

Лемма 1. Функция ш(хi. ,хп) порождает монотонную функцию f(xi. ,жп), равную нулю на всех наборах веса к — 1 и единице на всех наборах веса к + 2, если f(xi. ,хп) не имеет верхних нулей веса к и все верхние нули f(xi. ,хп) в (к + 1 )-м слое образуют множество, свободное от лунок.

Доказательство. Предъявим все наборы веса к + 2 и к — 1. На них обе функции ш(хi. хп) и f(x 1. ,хп) равны единице и нулю соответственно. В предположении монотонности f(xi. ,хп) данные значения полностью определяют значения этой функции на наборах всех весов, кроме к и к + 1. Предъявим значения ш(х\. хп) на множестве всех верхних нулей f(xi. ,хп) веса к + 1 и все единицы ш(х 1. ,жп), не попадающие в нижнюю тень точек этого множества. В предположении монотонности в силу отсутствия лунок получим искомую функцию f(x 1. ,жп). Лемма доказана.

Расстояние между наборами кода одной лунки не больше четырех и поэтому справедлива следующая

Лемма 2. Код с расстоянием не менее шести свободен от лунок.

Теорема 2. Для некоторой константы с > 0 булева функция ш

Доказательство. Достаточно воспользоваться леммами 1 и 2. Заметим, что двоичный логарифм общего числа кодов с расстоянием шесть не меньше максимальной мощности такого кода. Для ее оценки применим жадный алгоритм [2, см., например, с. 57-58]: на каждом шаге будем добавлять в код произвольный набор веса к + 1, исключая из рассматриваемого множества все наборы, удаленные от него на расстояния два и четыре. Количество таких наборов составляет 0(п4), а количество наборов веса к + 1 составляет fi

1. Hansel G. Sur le nombre des fonctions booléennes monotones de variables // C. R. Acad. Sei. Paris. 1966. 262. P. 1088-1090.

2. Алексеев В. Б. Лекции по дискретной математике. Учеб. пособие. М.: Инфра-М, 2012.

3. Вороиенко А. А. Об универсальных частичных функциях для класса линейных // Дискретная математика. 2012. № 3. С. 62-65.

Поступила в редакцию 07.09.12

ON THE BOOLEAN FUNCTION GENERATION UNDER MONOTONICITY

Voronenko A. A., Fedorova V. S.

We consider the problem of the possibility of a Boolean function / definition such that for any monotone function g one could produce a number of sets of a given function / so that function g is the only one among the monotone functions matching with / on these sets. It is shown that there are no such functions for the set of all monotone functions. At the same time an example of a sequence of functions, each generating a large number of monotone functions is constructed.

Keywords: monotone function, function generation, universal function.

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

Здравствуйте.
Булева ф-я f(x1. xk) задана вектором своих значений (битвектором длины 2^k)).
Они идут по порядку, т.е. в 0-й ячейке будет f(0,0,0..0) в 1-й — от 000..01 во второй — от 000..10 и т.д.
Как проверить на монотонность? (т.е. «неубываемость»?)

Re: Проверка булевой функции на монотонность.

От: Аноним
Дата: 01.08.10 16:09
Оценка: -2

U>Здравствуйте.
U>Булева ф-я f(x1. xk) задана вектором своих значений (битвектором длины 2^k)).
U>Они идут по порядку, т.е. в 0-й ячейке будет f(0,0,0..0) в 1-й — от 000..01 во второй — от 000..10 и т.д.
U>Как проверить на монотонность? (т.е. «неубываемость»?)

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

Re[2]: Проверка булевой функции на монотонность.

От: Аноним
Дата: 01.08.10 16:24
Оценка: -1

Здравствуйте, Аноним, Вы писали:

U>>Здравствуйте.
U>>Булева ф-я f(x1. xk) задана вектором своих значений (битвектором длины 2^k)).
U>>Они идут по порядку, т.е. в 0-й ячейке будет f(0,0,0..0) в 1-й — от 000..01 во второй — от 000..10 и т.д.
U>>Как проверить на монотонность? (т.е. «неубываемость»?)

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

а. оказывается есть монотонность для булевой:
http://ru.wikipedia.org/wiki/Булева_функция
это если в дизъюнктивной нормальной форме нет отрицаний переменных.
Но непонятно, это ли имелось ввиду . так как слово неубываемость тут вроде не к месту.

Re: Проверка булевой функции на монотонность.

От: dilmah
Дата: 01.08.10 18:40
Оценка:

U>Булева ф-я f(x1. xk) задана вектором своих значений (битвектором длины 2^k)).
U>Они идут по порядку, т.е. в 0-й ячейке будет f(0,0,0..0) в 1-й — от 000..01 во второй — от 000..10 и т.д.
U>Как проверить на монотонность? (т.е. «неубываемость»?)

По одному проходу для каждой переменной (при этом максимизируется «локальность» обращений к массиву).
Что-то вроде:

bool is_monotonic(const std::vector& vec) < size_t shift = vec.size(); if ((shift - 1) & shift) < // vector size is NOT a power of 2, bailing out return false; >while ((shift /= 2) > 0) < size_t i = 0; while (i < vec.size()) < for (size_t j = shift; j--; ++i) if (vec[i] >vec[i + shift]) < // monotonicity is violated return false; >> i += shift; > > return true; >

Re: Проверка булевой функции на монотонность.

От: Кодт
Дата: 01.08.10 19:05
Оценка:

Здравствуйте, ultrator, Вы писали:

U>Булева ф-я f(x1. xk) задана вектором своих значений (битвектором длины 2^k)).
U>Они идут по порядку, т.е. в 0-й ячейке будет f(0,0,0..0) в 1-й — от 000..01 во второй — от 000..10 и т.д.
U>Как проверить на монотонность? (т.е. «неубываемость»?)

Решение за O(2^k * k)

Функция монотонна, когда выполняется условие
f(xxx0xxx) То есть, если для каждого вектора X мы получим множество векторов таких, что некоторые нули из X там заменены на единицы, и проверим соблюдение этого условия f(X) Беда в том, что для O=000. 0 множество таких векторов — это все остальные.
Что делать?

А делать вот что. Проверять не все, а только с изменённым одним битом (итого, не более k).
Ибо,

То есть, по индукции мы охватим всё множество.

Интересно, можно ли быстрее?

Перекуём баги на фичи!
Re[2]: Проверка булевой функции на монотонность.

От: dilmah
Дата: 01.08.10 19:15
Оценка: 37 (2)

К>А делать вот что. Проверять не все, а только с изменённым одним битом (итого, не более k).
К>Например, k=3.
К>Проверив, что
К>f(000) К>f(000) К>f(000)

код выше именно это и делает. Только порядок циклов у него другой — если сгруппировать эти сравнения так как выше, то доступ в массив будет не очень локален/линеен, поэтому нужно делать по проходу на каждую переменную.
То есть порядок проверок такой:
проход 1
f(000) f(001) f(010) f(011) проход 2
f(000) f(001) f(100) f(101) проход 3
f(000) f(010) f(100) f(110)
Re[2]: Проверка булевой функции на монотонность.

От: Аноним
Дата: 02.08.10 11:28
Оценка:

Здравствуйте, Кодт, Вы писали:

К>Функция монотонна, когда выполняется условие
К>f(xxx0xxx) К>То есть, если для каждого вектора X мы получим множество векторов таких, что некоторые нули из X там заменены на единицы, и проверим соблюдение этого условия f(X) К>Беда в том, что для O=000. 0 множество таких векторов — это все остальные.
К>Что делать?

К>А делать вот что. Проверять не все, а только с изменённым одним битом (итого, не более k).

Спасибо. Так и делал.
Потом заметил ещё вот что:

вектор f «монотонен» «монотонны» левый и правый полувекторы, и правый >= левого.

На основе этого можно сделать алгоритм, который будет в несколько раз быстрее, но всё равно с O(2^k * k), т.е. не принципиально лучше.

К>Интересно, можно ли быстрее?

Re[3]: Проверка булевой функции на монотонность.

От: Кодт
Дата: 02.08.10 17:26
Оценка:

Здравствуйте, Аноним, Вы писали:

К>>Интересно, можно ли быстрее?
А>Мне тоже.

Можно посчитать теоретическую оценку.
k-арная функция отображается на 2^k-арный вектор.
Всего k-арных функций — N(k) = 2^(2^k).
Из них, монотонных функций. это числа Дедекинда
M(k) ≈ 2^C(k,k/2)

Из этого следует. следует из этого. Чёрт, всё позабыл!

Помогите описать алгоритм, написанный на С++, на великом и могучем

введите сюда описание изображения

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

Отслеживать
задан 25 окт 2016 в 20:45
3 2 2 бронзовых знака

лучше приложить картинку нормально, а не через десять кликов и на сайте, на котором ещё и видеореклама, пробивающаяся через фильтры. Но там же в тексте есть описание на русском языке. > Функция монотонна, когда выполняется условие f(xxx0xxx) <= f(xxx1xxx) >То есть, если для каждого вектора X мы получим множество векторов таких, что некоторые нули из X там заменены на единицы, и проверим соблюдение этого условия f(X)

25 окт 2016 в 21:01

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

25 окт 2016 в 21:15

Код написан достаточно просто. Там нет ничего такого, что бы выходило за пределы формулы, описанной выше. Просто в коде пытаются это дело «преждевременно оптимизировать». Или думаете если просто перевести на русский, (if — если и тому подобное), то оно станет проще?

2.3.2. Основные замкнутые классы

А). Обозначим через К0 множество булевых функций F(X1, X2, …, Xn), сохраняющих константу 0, т. е. таких, что F(0, 0, … , 0) = 0.

Такими функциями являются, например, сама константа 0, конъюнкция Х1Х2, дизъюнкция , сумма по модулю два и др..

Не принадлежат классу К0 функции 1, , , и т. д.

Предложение. Класс функций К0 является замкнутым.

Доказательство. Действительно, пусть функция — является композицией функций F0, F1, … , Fs. Тогда , что и требовалось доказать.

Б). Пусть К1 – класс функций F(X1, X2, …, Xn), сохраняющих константу 1, т. е. таких, что F(1, 1, …, 1) = 1.

Например, константу 1 сохраняют функции 1, Х1Х2, , Х, и другие. Не сохраняют константу 1 функции , и т. д..

Предложение. Класс функций К1 является замкнутым.

Доказательство такое же, как и для класса К0.

В). Пусть KS – класс Самодвойственных функций F(X1, X2, …, Xn), т. е. таких, что .

Очевидно, функции и являются самодвойственными. Рассмотрим также . Тогда

— самодвойственная.

В общем случае, самодвойственность функции легко проверять по таблице истинности: если столбец значений, после замены нулей на единицы, единиц на нули и переворачивания, не меняется, то функция – самодвойственная (см. пример в 3).

Предложение. Класс KS является замкнутым.

Доказательство. Пусть функция является композицией самодвойственных функций F0, F1, …, FS. Применяя принцип двойствен-ности, находим

,

Что и требовалось доказать.

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

Понятно, что если вместо какой-либо переменной, или переменных подставить линейную функцию, то в результате (после возможных упрощений) снова получится линейная функция, и значит, справедливо

Предложение. Класс KL – линейных функций является замкнутым.

Д). Введём на множестве (Z2)n следующее отношение частичного порядка (свойства рефлексивности, антисимметричности и транзитивности легко проверяются). Если и — два упорядоченных бинарных набора, то положим , если . Если и , то ( как это и принято для отношения частичного порядка) будем писать: .

Определение. Булева функция F(X1, X2, …, Xn) называется монотонной, если для любых бинарных наборов и таких, что выполняется .

Монотонными являются, например функции 0, 1, Xy, . В общем случае, монотонность, функции легко проверить по диаграмме Хассе данного отношения, которая представляет собой N-мерный куб. В вершинах куба запишем соответствующие значения функции. Если найдётся хотя бы одно ребро, в верхней вершине которого записан 0 а в нижней 1, то функция – не монотонная; в противном случае, если, поднимаясь по рёбрам, значение функции не уменьшается, то она – монотонная. Ниже приведены примеры немонотонной функции F(X, Y) (ребро, на котором не выполняется условие монотонности, выделено) и монотонной функции G(X, Y, Z).

F(X, y)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *