Тема 3.
Для задания булевых функций, помимо таблиц, используют формулы, которые обычно строят по «принципу матрешек», вкладывая друг в друга символические обозначения функций. Говоря о формуле, часто указывают, с использованием каких функций она строилась. В некоторых случаях нужно указывать и то, какие использовались переменные.
Например, ((𝑥1 ∨ 𝑥2) → (𝑥2|𝑥3)) - формула над множеством функций, состоящим из дизъюнкции, импликации и штриха Шеффера с переменными из множества {𝑥1, 𝑥2, 𝑥3}.
Формула каждому набору значений аргументов ставит в соответствие значение некоторой функции и может служить, наряду с таблицей, способом задания этой функции. При этом говорят, что формула задает (представляет, реализует) функцию.
----
Если 𝐴 - подформула формулы 𝛷, то при замене в формуле 𝛷 любого вхождения 𝐴 на равносильную ей формулу 𝐴1 формула 𝛷 переходит в равносильную ей формулу 𝛷1.
----
(𝑥1 ↔ (𝑥2 ∧ (¬𝑥1))) = 𝑥1 ↔ 𝑥2𝑥̄1
Булевым вектором называется упорядоченный набор (𝛼1, 𝛼2,..., 𝛼n), где 𝛼i принимают значения 0 или 1.
Числа 𝛼i называют координатами вектора, число 𝑛 - его длиной.
Число 𝑣(
)
= 𝛼1 ⋅
2n-1
+ 𝛼2
⋅ 2n-2+...
+𝛼k
⋅ 2n-k+…
+𝛼n
⋅ 20
называют номером булева вектора
= (𝛼1,
𝛼2,...,
𝛼n).
----
𝑣( ) = 𝛼1 ⋅ 23 + 𝛼2 ⋅ 22 + 𝛼3 ⋅ 21 + 𝛼4 ⋅ 20 = 15
8𝛼1 + 4𝛼2 + 2𝛼3 + 𝛼4 = 15
𝛼1 = 1
𝛼2 = 1
𝛼3 = 1
𝛼4 = 1
----
Опр. Функция, определенная на 𝐵n и принимающая значение 0 или 1, называется булевой функцией от 𝑛 переменных.
Чтобы задать булеву функцию 𝑓 от 𝑛 переменных, достаточно указать ее значение (0 или 1) на каждом наборе (𝛼1, 𝛼2,..., 𝛼n) значений аргументов 𝑥1, 𝑥2,..., 𝑥n. Для задания булевой функции удобно использовать таблицу истинности (табл. 2.1). В каждой строке такой таблицы вначале идет набор (𝛼1, 𝛼2,..., 𝛼n) значений переменных 𝑥1, 𝑥2,..., 𝑥n, а затем значение функции на этом наборе. Булевы векторы перечисляются сверху вниз в порядке возрастания номеров.
Таблицы истинности булевых функций от одного числа аргументов отличаются лишь последним столбцом. Поэтому булеву функцию можно также задать вектором значений, выписав его по правому столбцу таблицы истинности.
----
Ответ: 2, 3, n (тк количество переменных – длина булева вектора)
----
Ответ: Число булевых векторов длины n равно 2n. Действительно, с точки зрения комбинаторики булев вектор длины n - упорядоченная выборка элементов множества {0,1}, которую можно построить за n шагов (на первом шаге выбрать первую координату, на втором - вторую и т.д.). Для выбора каждой координаты есть два варианта (0 или 1). Следовательно, согласно правилу произведения, последовательный выбор n координат можно сделать 2 ⋅ 2 ⋅...⋅ 2 = 2n способами.
Если формулы 𝛷1 и 𝛷2 задают одну функцию, то их называют равносильными и пишут 𝛷1 = 𝛷2.
----
Пошагово строим для каждой функции таблицу истинности.
----
Тема 4.
----
Ответ: 2^8-1
для сднф мы берем если функция = 1
значит можем либо взять, либо не взять => 2 варианта
и вырожденный случай когда все значения равны 0
О
пр.
Формулу вида где для любого 𝑖
𝜎i
равно 0 или 1 и все переменные разные
(𝑖v
≠ 𝑖µ,
если 𝜈
≠ 𝜇),
называют элементарной
конъюнкцией ранга r
над множеством X.
Константу 1 считают элементарной конъюнкцией ранга 0.
Полиномом Жегалкина над множеством 𝑋 = {𝑥1, 𝑥2, ..., 𝑥n} называется всякая сумма (по модулю два) различных элементарных конъюнкций над 𝑋, не содержащих отрицаний переменных.
Пример: x1+x2x3 =1
Теорема 2.9. Для любой булевой функции существует задающий ее полином Жегалкина. Он единственен с точностью до перестановок слагаемых.
Алгоритм: 1. Представляем функцию в виде СДНФ функции
2. Избавляемся от отрицания и дизъюнкции с помощью формул 8 и 4
3. Перемножаем скобки воспользовавшись тождествами 3 и 7
4. Упрощаем с помощью равенств 1-6
Пример.
Двойственная функция.
Функция,
заданная формулой
(𝑥̄1,
𝑥̄2,...,
𝑥̄n),
называется двойственной к
функции 𝑓(𝑥1,
𝑥2,...,
𝑥n).
Функцию, двойственную к 𝑓, обозначают 𝑓*, таким образом, 𝑓*(𝑥1,𝑥2,...,𝑥n) = (𝑥̄1,𝑥̄2,...,𝑥̄n).
Нетрудно заметить, что столбец значений функции 𝑓* можно получить из столбца значений функции 𝑓, действуя по следующему алгоритму:
1) столбец значений функции 𝑓 переписать в обратном порядке (т.е. число, стоящее в первой строке, записать в последнюю строку; число, стоящее во второй строке, - в предпоследнюю строку и т.д.);
2) в получившемся в результате выполнения п. 1 столбце значений каждое число заменить его отрицанием (0 заменить 1 и 1 заменить 0).
Очевидно, что этот алгоритм можно использовать для построения двойственной функции в случае любого числа аргументов.
Если функция задана вектором значений, то роль столбца значений в алгоритме выполняет вектор значений.
Eсли функция 𝑔 = 𝑓*, то функция 𝑓 = 𝑔*. Это утверждение несложно обосновать теоретически.
Действительно, пусть 𝑔(𝑥1, 𝑥2,..., 𝑥n) = 𝑓*( 𝑥1, 𝑥2,..., 𝑥n). Тогда
g*(𝑥1, 𝑥2,..., 𝑥n) = (𝑓*( 𝑥1, 𝑥2,..., 𝑥n))*= ( (𝑥̄1,𝑥̄2,...,𝑥̄n))*=
=
(
,
,…,
)=
𝑓( 𝑥1,
𝑥2,...,
𝑥n).
Пусть функция 𝑓 задана формулой, и мы хотим построить формулу для двойственной к ней функции 𝑓*. Согласно определению, это можно сделать, заменив в формуле, которой задана 𝑓, каждую переменную ее отрицанием и взяв отрицание от самой формулы.
Принцип двойственности.
Если формула 𝛷[𝑓1, 𝑓2,..., 𝑓n] задает функцию 𝑔, то формула, полученная из нее заменой символов функций 𝑓1, 𝑓2,..., 𝑓n на символы двойственных к ним функций 𝑓1*, 𝑓2*,..., 𝑓n*, задает функцию 𝑔*, двойственную к функции 𝑔. Полученную таким образом формулу будем называть двойственной к 𝛷[𝑓1, 𝑓2,..., 𝑓n] и обозначать 𝛷*[𝑓1, 𝑓2,..., 𝑓n].
Если функция
задана формулой над множеством 0,1,
x,
,
xy, xy
, то, используя пример 1, принципу
двойственности можно придать более
конкретный вид: если в формуле 𝛷,
представляющей функцию 𝑓,
все конъюнкции заменить на дизъюнкции,
дизъюнкции - на конъюнкции, 1 на 0, 0 на 1,
то получим формулу 𝛷*,
представляющую функцию 𝑓*,
двойственную к 𝑓.
