Следствие 2. Если Ai и Bi – произвольные векторы, причем Ai не связаны сдвигом, то существуют булевы функции F, преобразующие каждый вектор Ai в соответствующий ему вектор Bi.
Пример 2. Пусть требуется найти функцию F, преобразующую векторы
A1 = 1011 в вектор B1 = 0110,
A2 = 0111 в вектор B2 = 1001,
A3 = 0101 в вектор B3 = 1110.
Построим часть таблицы истинности функции F, выписывая только те наборы, на которых функция определена.
a b c d e g h |
F |
1 0 1 1 |
0 |
1 0 1 1 |
1 |
1 0 1 1 |
1 |
1 0 1 1 |
0 |
0 1 1 1 |
1 |
0 1 1 1 |
0 |
0 1 1 1 |
0 |
0 1 1 1 |
1 |
0 1 0 1 |
1 |
0 1 0 1 |
1 |
0 1 0 1 |
1 |
0 1 0 1 |
0 |
Упражнение.
Постройте
диаграмму Вейча функции F, и убедитесь
в том, что при некотором способе
доопределения функция будет иметь вид:
.
Следствие 3. Если Ai, i = 1,2,3,…,k – произвольные двоичные векторы, не связанные сдвигом, то существуют булевы функции F, преобразующие A1 в любой вектор Ai, т.е. A2=F(A1), A3 = F(A2), …, Ak = F (Ak-1) и A1 = F(Ak)
Пример 3. Пусть требуется найти булеву функцию F, обеспечивающую следующие преобразования: A1 A2 A3 A4 A5 A6 A1, где A1 = 1011, A2 = 0110, A3 = 0111, A4 = 1001, A5= 0101, A6 = 1111.
Упражнение. Используя описанную выше методику, выпишите часть таблицы истинности, постройте диаграмму Вейча и найдите один из вариантов решения (в диаграмме Вейча в пустых клетках должны стоять прочерки, т.е. на этих наборах функция не определена). Диаграмма Вейча этой функции будет иметь вид:
------------------------------------------- d |
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
------------------------------------------- c |
|
|
|
|
|
|
||||||||
|
|
-------------------- |
|
|
|
|
-------------------- b |
|
|
|
|
|||||||
|
-------- |
|
|
-------- |
|
|
-------- |
|
|
-------- a |
|
|
|
|||||
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| | | | g |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| | |
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| | | | f |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
0 |
|
|
|
|
|
|
1 |
0 |
|
|
|
|
|
|
|
|
||
1 |
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
1 |
| | e |
|
|
1 |
|
|
|
0 |
|
|
0 |
1 |
|
|
1 |
1 |
|
|
|
|
||
|
0 |
0 |
1 |
0 |
1 |
|
1 |
|
1 |
1 |
0 |
|
|
|
|
|
|
|
Одно из возможных решений: F = a c e e g a b ac c d c d e b c e f g. (знак «» означает унарную операцию отрицания).
Представляет интерес
определить количество наборов длины n
не связанных сдвигом и их долю в общем
числе двоичных наборов длины n. Расчет
произведем для наборов длины n веса q
(т.е. содержащих ровно q единиц). Для этого
заметим, что если в младшем (например,
левом) разряде поставить 1, а остальные
q-1 единиц на оставшихся n- 1 позициях
расставить так, чтобы получить разные
двоичные коды, то мы получим все наборы,
не связанные сдвигом, содержащие ровно
q единиц. Тогда число таких наборов будет
равно
.
Поскольку общее число наборов длины n
веса q равно
,
то доля наборов не связанных сдвигом
составляет q/n. Так, например, при n = 20, q
= 10 S(20,10) = 92378.
Возьмем теперь произвольный вектор A (1 0 0 1 1 1 0 1 0 0 0 1) и некоторую функцию F = ai ai-3 ai+2 ai+5. Применив преобразование F к вектору A, получим вектор:
B (1 1 0 1 0 1 1 1 0 1 0 0). Чтобы найти функцию, которая по вектору B позволила бы восстановить вектор A, можно построить таблицу истинности частично определенной функции 23 аргументов вида:
a |
b |
c |
d |
e |
f |
G |
h |
i |
j |
k |
l |
m |
n |
o |
p |
Q |
r |
s |
t |
u |
v |
w |
A |
|
|
|
|
|
|
|
|
|
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
|
|
|
|
|
|
|
|
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
0 |
|
|
|
|
|
|
|
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
0 |
|
|
|
|
|
|
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
1 |
|
|
|
|
|
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
1 |
|
|
|
|
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
|
1 |
|
|
|
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
|
|
0 |
|
|
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
|
|
|
1 |
|
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
|
|
|
|
0 |
|
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
|
|
|
|
|
0 |
|
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
|
|
|
|
|
|
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
|
|
|
|
|
|
|
|
|
|
|
1 |
Если из приведенной матрицы выделить минимальный набор столбцов так, чтобы в матрице, построенной только из этих столбцов строки, на которых элементы вектора A принимают значение 1, отличались бы от строк, на которых элементы вектора A принимают значение 0, то выделенные столбцы будут составлять минимальный набор аргументов функции F.
Обратная к F функция, которая восстанавливает вектор A по вектору B, определена всего на 12 наборах аргументов, а на N= 223 – 12 наборах не определена. Следовательно, ее можно доопределить 2N способами. Это число настолько велико, что задачу однозначного нахождения обратной к F функции можно считать нереальной.
Поскольку преобразование F является односторонней функцией и нахождение обратной функции неоднозначно, возможно использовать эти преобразования в криптографии.
Упражнение. Докажите еще одно (четвертое) следствие из приведенной теоремы:
Пусть имеются Аi (i = 1,2,…,k1), Bj (j = 1,2,…,k2), Cs(s = 1,2,…,k3)… и произвольные векторы Y1,Y2,Y3…Тогда существует булева функция F, такая, что F(Ai) = Y1, F(Bj) = Y2, F(Cs) = Y3.