Логическая функция F задаётся выражением (x ≡ ( w ∨ y)) ∨ ((w → z ) ∧ (y → w)).
Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности функции F.
Определите, какому столбцу таблицы истинности соответствует каждая из переменных x, y, z, w.
| Переменная 1 | Переменная 2 | Переменная 3 | Переменная 4 | Функция |
|---|---|---|---|---|
| ??? | ??? | ??? | ??? | F |
| 1 | 1 | 0 | ||
| 1 | 0 | |||
| 1 | 1 | 0 |
В ответе напишите буквы w, x, y, z в том порядке, в котором идут соответствующие им столбцы (сначала — буква, соответствующая первому столбцу; затем — буква, соответствующая второму столбцу, и т. д.). Буквы в ответе пишите подряд, никаких разделителей между буквами ставить не нужно.
Пример. Пусть задано выражение x → y, зависящее от двух переменных x и y, и фрагмент таблицы истинности:
| Переменная 1 | Переменная 2 | Функция |
|---|---|---|
| ??? | ??? | F |
| 0 | 1 | 0 |
Тогда первому столбцу соответствует переменная y, а второму столбцу соответствует переменная x. В ответе нужно написать: yx.
Рассмотрим данное выражение. Преобразуем логическое выражение (x ≡ ( w ∨ y)) ∨ ((w → z ) ∧ (y → w)) и получим систему, при которой оно ложно:
Заметим, что первый и четвёртый столбцы таблицы истинности — это y и w. Из условия следует, что переменная x соответствует второму столбцу таблицы истинности. Следовательно, третьему столбцу соответствует переменная z.
Приведем другое решение.
Составим таблицу истинности для выражения (x ≡ ( w ∨ y)) ∨ ((w → z ) ∧ (y → 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((x == (w or y)) or ((w <= z) and (y <= w))):
print(x, y, z, w)
Далее выпишем те наборы переменных, при которых данное выражение равно 0. В наборах переменные запишем в порядке х, y, z, w.
Получим следующие наборы:
(0, 0, 0, 1),
(0, 1, 0, 0),
(0, 1, 0, 1),
(0, 1, 1, 0).
Сопоставим эти наборы с приведенным в задании фрагментом таблицы истинности.
Первая строка таблицы (как минимум две единицы) может соответствовать либо набору (0, 1, 0, 1), либо набору (0, 1, 1, 0).
Третья строка таблицы также может соответствовать одному из этих двух наборов.
Заметим, что в каждом из этих двух наборов переменная y принимает значение 1. Следовательно, ей соответствует первый столбец таблицы.
В данных наборах единичные значения принимают также переменные z и w. Заметим, что переменная z принимает единичное значение в единственном наборе переменных. Следовательно, ей не может соответствовать четвертый столбец. Тогда переменной z соответствует третий столбец, а переменной w — четвертый столбец.
Следовательно, переменной х соответствует второй столбец.
Ответ: yxzw.
Приведём решение Юрия Коломеец на языке Python.
from random import *
from itertools import *
true_v = []
null = lambda x, y, z, w: True if (x == (w or y)) or ((not w or z) and (not y or w)) else False # (x ≡ ( w ∨ y)) ∨ ((w → z ) ∧ (y → w)).
act = True
while act:
f = [randint(0,1) for i in range(4)]
if null(f[0], f[1], f[2], f[3]) == False and f not in true_v and len(true_v) < 4:true_v.append(f)
if len(true_v) == 4:
for t in true_v:shuffle(t)
s = sample(true_v, 3)
for ind, val in enumerate(permutations([h for h in range(4)])):
if null(s[0][val[0]], s[0][val[1]], s[0][val[2]], s[0][val[3]]) == False and s[0][0] == 1 and s[0][3] == 1:
if null(s[1][val[0]], s[1][val[1]], s[1][val[2]], s[1][val[3]]) == False and s[1][3] == 1:
if null(s[2][val[0]], s[2][val[1]], s[2][val[2]], s[2][val[3]]) == False and s[2][0] == 1 and s[2][2] == 1:
for i in s:print(i)
print(f"Ответ: x = {val[0] + 1}; y = {val[1] + 1}; z = {val[2] + 1}; w = {val[3] + 1}")
act = False
s.clear()
Приведём решение Глеба Гришко на языке Python.
from itertools import *
def f(x,y,w,z):
return (x==(w or y)) or ((w<=z) and (y<=w))
for a1,a2,a3,a4,a5,a6,a7 in product([0,1], repeat = 7):
t=[(1,a1,a2,1),(a3,a4,a5,1),(1,a6,1,a7)]
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)

