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

