Миша заполнял таблицу истинности логической функции F:
| F | ||||
|---|---|---|---|---|
| 1 | 1 | 1 | ||
| 0 | 1 | 0 | 1 | |
| 1 | 1 | 0 | 1 |
Определите, какому столбцу таблицы соответствует каждая из переменных w, x, y, z.
В ответе напишите буквы w, x, y, z в том порядке, в котором идут соответствующие им столбцы (сначала буква, соответствующая первому столбцу; затем буква, соответствующая второму столбцу, и т. д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Пример. Функция F задана выражением
| F | ||
|---|---|---|
| 0 | 1 | 0 |
В этом случае первому столбцу соответствует переменная y, а второму столбцу — переменная x. В ответе следует написать: yx.
Составим таблицу истинности для выражения (x∨y)∧¬(y≡z)∧¬w, вручную или при помощи языка Python:
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 (x or y) and (not(y == z)) and (not (w)):
print(x, y, z, w)
Далее выпишем те наборы переменных, при которых данное выражение равно 1. В наборах переменные запишем в порядке х, y, z, w. Получим следующие наборы:
(0, 1, 0, 0),
(1, 0, 1, 0),
(1, 1, 0, 0).
Сопоставим эти наборы с приведенным в задании фрагментом таблицы истинности.
Рассмотрим последний столбец таблицы истинности, он может соответствовать только переменной w, так как только эта переменная не может принимать значение 1.
Рассмотрим вторую строку таблицы истинности. Это строка может соответствовать только набору (0, 1, 0, 0). Следовательно, первая и последние строки содержать по две 1 и два 0. Получаем третий столбец как (1, 0, 1). Он может соответствовать только y или x. Заметим, что первая и последняя строка могут являются наборами (1, 0, 1, 0) и (0, 1, 1, 0) соответственно. Следовательно, первый столбец (1, 0, 0) может соответствовать только z. Поскольку y не равен z, то y — это второй столбец, а x — это третий столбец.
Ответ: zyxw.
Приведём решение Александра Козлова на языке Python.
from itertools import product, permutations
def f(x, y, w, z):
return (x or y) and (not(y == z) and not w)
for a1, a2, a3, a4 in product((0, 1), repeat=4):
t = [(1,a1,1,a2),(0,1,a3,0),(a4,1,1,0)]
if len(set(t)) == 3:
for p in permutations('xywz'):
if [f(**dict(zip(p, r))) for r in t] == [1, 1, 1]:
print('Ответ:',*p)

