Логическая функция F задаётся выражением:
Определите, какому столбцу таблицы истинности соответствует каждая из переменных x, y, z, w.
| Переменная 1 | Переменная 2 | Переменная 3 | Переменная 4 | Функция |
|---|---|---|---|---|
| ??? | ??? | ??? | ??? | F |
| 1 | 1 | 1 | 0 | 1 |
| 0 | 0 | 0 | ||
| 0 | 0 |
В ответе напишите буквы x, y, z, w в том порядке, в котором идут соответствующие им столбцы (сначала — буква, соответствующая первому столбцу; затем — буква, соответствующая второму столбцу, и т. д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Пример. Пусть задано выражение x → y, зависящее от двух переменных x и y, и фрагмент таблицы истинности:
| Переменная 1 | Переменная 2 | Функция |
|---|---|---|
| ??? | ??? | F |
| 0 | 1 | 0 |
Тогда первому столбцу соответствует переменная y, а второму столбцу соответствует переменная x. В ответе нужно написать: yx.
Составим таблицу истинности для выражения
print("x y z w")
for x in range(0, 2):
for y in range(0, 2):
for z in range(0, 2):
for w in range(0, 2):
if not(z == (not x))<= ((w <= (not y)) and (y <= x)):
print(x, y, z, w)
Далее выпишем те наборы переменных, при которых данное выражение равно 0. В наборах переменные запишем в порядке х, y, z, w. Получим следующие наборы:
(0, 1, 1, 0),
(0, 1, 1, 1),
(1, 1, 0, 1).
Сопоставим эти наборы с приведенным в задании фрагментом таблицы истинности.
Рассмотрим вторую и третью строки таблицы истинности. Заметим, что вторая строка таблицы может соответствовать только первому набору. В третьей строке все незаполненные ячейки содержат 1. Поскольку вторая строка соответствует первому набору, то первые две переменные могут быть или z, или y. Поскольку переменная y может принимать только значение 1, а в третьей строке таблице у второй переменной стоит 0, то переменная y соответствует первому столбцу, а переменная z — второму столбцу.
Составим таблицу истинности для выражения
print("x y z w")
for x in range(0, 2):
for y in range(0, 2):
for z in range(0, 2):
for w in range(0, 2):
if (z == (not x))<= ((w <= (not y)) and (y <= x)):
print(x, y, z, w)
Далее выпишем те наборы переменных, при которых данное выражение равно 1 и три переменные принимают значение 1 (так как первая строка таблицы истинности содержит три 1 и один 0). В наборах переменные запишем в порядке х, y, z, w. Получим следующие наборы:
(1, 0, 1, 1),
(1, 1, 1, 0).
Заметим, что в переменная y может принимать значения только 1, тогда первой строке таблицы соответствует второй набор.
Поскольку переменная x принимает значение 1, то ей соответствует третий столбец таблицы истинности, тогда четвертый столбец соответствует переменной w.
Ответ: yzxw.
Приведём решение Ивана Валерьевича Ященко на языке Python.
from itertools import *
def f(x,y,w,z):
return (z==(not x))<=((w<=(not y)) and (y<=x))
for a1,a2,a3,a4,a5 in product([0,1], repeat = 5):
t=[(1,1,1,0),(a1,a2,0,0),(a3,0,a4,a5)]
if len(set(t))==3:
for p in permutations('xywz'):
if [f(**dict(zip(p,r))) for r in t]==[1,0,0]:
print(p)

