Две логические функции заданы выражениями:
Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности обеих функций. Определите, какому столбцу таблицы истинности соответствует каждая из переменных w, x, y, z.
??? | ??? | ??? | ??? | F1 | F2 |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | |
| 1 | 1 | 0 | |||
| 0 | 0 | 0 | 0 |
В ответе напишите буквы w, x, y, z в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т. д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Пример. Пусть задано выражение x → y, зависящее от двух переменных x и y, и фрагмент таблицы истинности для одной функции:
| Переменная 1 ??? | Переменная 2 ??? | Функция F |
|---|---|---|
| 0 | 1 | 0 |
Тогда первому столбцу соответствует переменная y, а второму столбцу соответствует переменная x. В ответе нужно написать: yx.
Составим таблицу истинности для исходных выражений при помощи языка Python:
def f_1(x, y, z, w):
if ((x or not(y)) <= (w == z )) == 1:
return 1
else:
return 0
def f_2(x, y, z, w):
if ((x or not(y)) == (w <= z)) == 1:
return 1
else:
return 0
print('x y z w f1 f2')
for x in range(2):
for y in range(2):
for z in range(2):
for w in range(2):
print(x, y, z, w, ' ', f_1(x, y, z, w), ' ',f_2(x, y, z, w))
Мы получили 16 наборов (см. табл).
| x | y | z | w | f1 | f2 |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 | 1 |
| 0 | 0 | 0 | 1 | 0 | 0 |
| 0 | 0 | 1 | 0 | 0 | 1 |
| 0 | 0 | 1 | 1 | 1 | 1 |
| 0 | 1 | 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 1 | 1 | 1 |
| 0 | 1 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 0 | 0 |
| 1 | 0 | 1 | 0 | 0 | 1 |
| 1 | 0 | 1 | 1 | 1 | 1 |
| 1 | 1 | 0 | 0 | 1 | 1 |
| 1 | 1 | 0 | 1 | 0 | 0 |
| 1 | 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 | 1 |
Рассмотрим первую строку таблицы, в ней значение первой функции равно 0 и значение второй — 0, при этом три переменные принимают значение 0. Это возможно только в одном случае (0, 0, 0, 1), то есть w соответствует второй столбец.
Рассмотрим третью строку таблицы, в ней значение второй функции равно 0, при этом три переменные принимают значение 0. Это возможно только в одном случае (0, 1, 0, 0), то есть y соответствует первый столбец.
Рассмотрим вторую строку таблицы, в ней значение первой функции равно 0, w принимает значение 1. Это возможно только в двух случаях (1, 0, 0, 1) и (1, 1, 0, 1). В обоих вариантах x принимает значение 1, а z принимает значение 0. Следовательно, x соответствует третий столбец, а z соответствует четвертый столбец.
Ответ: ywxz.
Приведем решение на языке Python.
from itertools import product as p, permutations as pp
f1 = lambda x, y, z, w: 1 if not (x or not y) or (w == z) else 0
f2 = lambda x, y, z, w: 1 if (x or not y) == (not w or z) else 0
for a0, a1, a2, a3 in p((0,1), repeat=4):
s = [(0, a1, 0, 0), (a0, 1, 1, a3), (a0, 0, 0, 0)]
if len(set(s)) == len(s):
for x, y, z, w in pp((0, 1, 2, 3)):
if not sum([f1(i[x], i[y], i[z], i[w]) for i in s][:-1]) and\
(t:=[f2(i[x], i[y], i[z], i[w]) for i in s]) and t[0] + t[2] == 0:
print(f'x = {x+1}; y = {y+1}; z = {z+1}; w = {w+1}'); break
Вывод: x = 3; y = 1; z = 4 и w = 2.
Ответ: ywxz.

