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