Решение. Составим таблицу истинности для выражения (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 and not (y)) or (y == z ) or not (w)) == False:
print(x, y, z, w)
Далее выпишем полученные наборы переменных. В наборах переменные запишем в порядке х, y, z, w. Получим следующие наборы:
(0, 0, 1, 1),
(0, 1, 0, 1),
(1, 1, 0, 1).
Сопоставим эти наборы с приведенным в задании фрагментом таблицы истинности.
Рассмотрим третью строку таблицы истинности. Она может соответствовать только набору (1, 1, 0, 1). Посколкьу в этом наборе z равен нулю, то третий столбец — это z.
Рассмотрим второй столбец таблицы. Все значения в нем 1. Следовательно, это столбец w.
Первый столбец соответствует x, а четвертый столбец — y.
Ответ: xwzy.
Приведём решение Евгения Джобса (аналитическое).
Проанализируем выражение и таблицу. Видим три подвыражения перечисленные через знак дизъюнкции. Все выражение для трех различных наборов имеет ложные значения.
Составим таблицы истинности для всех подвыражений, когда они ложны.
Из полученных таблиц истинности выведем все возможные наборы x, y, z, w для всего выражения.
Сопоставим полученный фрагмент с фрагментом из задания:
Заметим, что w может быть только вторым столбцом (все единицы), y — последний столбец (один ноль), z — третий столбец, так как противоположен по значению столбцу y (1 и 4 столбец — противоречие в первой строке — одинаковые значения). Следовательно, х — первый столбец.
Приведём решение Евгения Джобса на языке Python.
Данное решение построено на переборе всех возможных пропусков во фрагменте из задания и всех возможных перестановок имен столбцов.
def f(x, y, z, w):
for x in range(0, 2):
return (x and not y) or (y == z) or not w
from itertools import *
# перебор всех пробелов
for a1, a2, a3, a4 in product([0, 1], repeat=4):
# все наборы
t = [(0,a1,a2,0),(0,1,0,1),(a3,1,0,a4)]
# проверка различности всех наборов
if len(set(t)) != len(t):
continue
# перебор всех перестановок имен столбцов
for p in permutations('xyzw'):
# проверка на совпадение результата
if [f(**dict(zip(p,r))) for r in t]==[0,0,0]:
print(*p, sep='')