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

