Задание №2 — Построение таблицы истинности
Миша заполнял таблицу истинности логической функции
,
но успел заполнить лишь фрагмент из трёх различных её строк, даже не указав, какому столбцу таблицы соответствует каждая из переменных w, x, y, z.
| F | ||||
| 1 | 0 | |||
| 1 | 1 | 0 | ||
| 1 | 1 | 0 |
Определите, какому столбцу таблицы соответствует каждая из переменных w, x, y, z.
Правильный ответ
zxwy
Пояснение
Решение:
В задании известны только фрагменты трёх различных строк таблицы истинности, причём неизвестно, какая переменная стоит в каком столбце. Приём здесь всегда один: сначала выписываем все наборы, на которых функция принимает указанное значение, а затем прикладываем к ним строки фрагмента и смотрим, при каком порядке столбцов всё сходится.
Дизъюнкция равна нулю, когда нулевые все слагаемые. Отсюда ; равенство равносильно ; и . При последняя конъюнкция нулевая при любом , а при необходимо . Наборы:
| w | x | y | z | F |
|---|---|---|---|---|
| 0 | 0 | 0 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 0 |
Во всех наборах , поэтому в столбце нет единиц; единицы фрагмента стоят в первом, втором и четвёртом столбцах, значит — третий столбец. Первый столбец равен единице в двух разных строках, второй — тоже, а истинна лишь на одном наборе, поэтому не может занимать ни первый, ни второй столбец: это четвёртый столбец. В третьей строке фрагмента , что соответствует набору ; в той же строке второй столбец равен единице, поэтому там , а в первом столбце — .
Те же три набора нетрудно получить и перебором:
from itertools import product
def F(w, x, y, z):
return ((not y) == (not z)) or w or (y and not x)
for w, x, y, z in product((0, 1), repeat=4):
if not F(w, x, y, z):
print(w, x, y, z)Ответ: zxwy