Логическая функция F задаётся выражением ((x ∧ w) ∨ (w ∧ z)) ≡ ((z → y) ∧ (y → x)).
Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности функции F.
Определите, какому столбцу таблицы истинности соответствует каждая из переменных x, y, z, w.
| Переменная 1 | Переменная 2 | Переменная 3 | Переменная 4 | Функция |
|---|---|---|---|---|
| ??? | ??? | ??? | ??? | F |
| 1 | 0 | 1 | 1 | 1 |
| 1 | 0 | 0 | 1 | |
| 1 | 0 | 0 | 1 |
В ответе напишите буквы x, y, z, w в том порядке, в котором идут соответствующие им столбцы (сначала — буква, соответствующая первому столбцу; затем — буква, соответствующая второму столбцу, и т. д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Пример. Пусть задано выражение x → y, зависящее от двух переменных x и y, и фрагмент таблицы истинности:
| Переменная 1 | Переменная 1 | Функция |
|---|---|---|
| ??? | ??? | F |
| 0 | 1 | 0 |
Тогда первому столбцу соответствует переменная y, а второму столбцу соответствует переменная x. В ответе нужно написать: yx.
Поскольку строки в таблице не должны повторяться, заполним пустые ячейки в таблице:
| Переменная 1 | Переменная 2 | Переменная 3 | Переменная 4 | Функция |
|---|---|---|---|---|
| ??? | ??? | ??? | ??? | F |
| 1 | 0 | 1 | 1 | 1 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 0 | 1 |
Рассмотрим данное выражение. Логическая функция принимает значение 1, когда обе части выражения принимают значения 1 или 0. Первая часть выражения принимает значение 1 при наборах переменных x, z, w, равных соответственно 011, 101, 111. Вторая часть выражения принимает значение 1 при наборах переменных x, y, z, равных соответственно 000, 100, 110, 111. Первая часть выражения принимает значение 0 при наборах переменных x, z, w, равных соответственно 000, 001, 010, 100, 110. Вторая часть выражения принимает значение 0 при наборах переменных x, y, z, равных соответственно 001, 010, 011, 101. Заметим, что y соответствует первому столбцу таблицы истинности, а w и x — третьему и четвёртому столбцам таблицы истинности. Значит, второму столбцу таблицы истинности соответствует z.
Ответ: yzwx.
Приведем другое решение.
Составим таблицу истинности для выражения ((x ∧ w) ∨ (w ∧ z)) ≡ ((z → y) ∧ (y → x)) вручную или при помощи языка 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 and w) or (w and z)) == ((z <= y) and (y <= x)):
print(x, y, z, w)
Далее выпишем те наборы переменных, при которых данное выражение равно 1. В наборах переменные запишем в порядке x, y, z, w.
Получим следующие наборы:
(0, 0, 1, 0),
(0, 1, 0, 0),
(0, 1, 0, 1),
(0, 1, 1, 0),
(1, 0, 0, 1),
(1, 0, 1, 0),
(1, 1, 0, 1),
(1, 1, 1, 1).
Заметим, что только в одном из наборов три переменные принимают единичные значения — в наборе (1, 1, 0, 1). Следовательно, этот набор соответствует первой строке таблицы, а второй столбец соответствует переменной z.
Выпишем наборы переменных, в которых переменная z равна 0, а значение выражения равно 1, получим следующие наборы:
(0, 1, 0, 0),
(0, 1, 0, 1),
(1, 0, 0, 1).
Заметим, что строки в таблице истинности не должны повторяться. Следовательно, вторая или третья строка имеет вид (1, 0, 0, 0) и может соответствовать только набору (0, 1, 0, 0), тогда первый столбец — это переменная y. Тогда оставшаяся строка имеет вид (1, 0, 1, 0) и соответствует набору (0, 1, 0, 1), в котором переменная y принимает единичное значение. Следовательно, третий столбец соответствует переменной w, а четвертый столбец — переменной x.
Приведём решение Магомед Гаджиумарова на языке Python.
from itertools import *
def f(w, x, y, z):
F = ((x and w) or (w and z)) == ((z <= y) and (y <= x))
return F
for a in product([0, 1], repeat=2):
table = [(1, 0, 1, 1), (1, 0, a[0], 0), (1, 0, a[1], 0)]
if len(table) == len(set(table)):
for p in permutations('wxyz'):
if [f(**dict(zip(p, row))) for row in table] == [1, 1, 1]:
print(*p, sep='')

