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

