Задание №2 — Построение таблицы истинности
Миша заполнял таблицу истинности логической функции
,
но успел заполнить лишь фрагмент из трёх различных её строк, даже не указав, какому столбцу таблицы соответствует каждая из переменных w, x, y, z.
| F | ||||
| 0 | 1 | 0 | 1 | |
| 1 | 0 | 1 | 1 | |
| 1 | 0 | 1 |
Определите, какому столбцу таблицы соответствует каждая из переменных w, x, y, z.
Правильный ответ
zywx
Пояснение
Решение:
Конъюнкция равна единице, только если истинны все множители: ; из следует ; а означает, что при обязательно .
Таких наборов ровно три: равно , или .
Во всех строках , поэтому в столбце не может быть нулей. Нули есть в первом, третьем и четвёртом столбцах, значит — второй столбец.
Столбцы и всюду различаются, а в первой строке первый и третий столбцы оба равны 0 — такой парой они быть не могут. Значит один из столбцов , — обязательно четвёртый, а переменной достаётся первый или третий столбец.
В первой строке и первый, и третий столбцы равны 0. Один из них — это , значит в этой строке , и первая строка — набор , где , . Второй из этих двух нулей может быть только переменной (ведь ), поэтому — четвёртый столбец, а и занимают первый и третий.
Если бы стоял в первом столбце, а — в третьем, то вторая строка (третий столбец даёт , четвёртый даёт , откуда ) снова оказалась бы набором и совпала с первой. Значит первый столбец — , а третий — ; строки фрагмента это , и .
Тот же результат даёт перебор всех 24 расстановок переменных по столбцам:
from itertools import permutations, product
def F(w, x, y, z):
return (x != w) and (z or not w) and y
rows = [t for t in product([0, 1], repeat=4) if F(*t)] # наборы (w, x, y, z) с F = 1
frag = [[0, 1, 0, None],
[None, 1, 0, 1],
[1, None, None, 0]]
for cols in permutations('wxyz'): # cols[i] — переменная в i-м столбце
for order in permutations(rows, 3): # какой набор какой строке фрагмента
val = [dict(zip('wxyz', t)) for t in order]
if all(frag[r][i] is None or frag[r][i] == val[r][cols[i]]
for r in range(3) for i in range(4)):
print(''.join(cols))
break
Ответ: zywx