Тип 2 № 56502
Логическая функция F задаётся выражением:
((*x* → *y*)∨(*z* → *w*))∧((*z* ≡ *y*) → (*w* ≡ *x*))
.
Дан частично заполненный фрагмент, содержащий неповторяющиеся строки таблицы истинности функции F.
Определите, какому столбцу таблицы истинности соответствует каждая из переменных w, x, y, z.
Комментарии к коду решения:
from itertools import *
- Импортируем все функци из модуля itertools
.def F(x, y, z, w):
- Определяем функцию F
с четырьмя параметрами x, y, z, w
.return ((x <= y) or (z <= w)) and ((z == y) <= (w == x))
- Возвращаем результат логического выражения.for a1, a2, a3, a4 in product([0, 1], repeat=4):
- Запускаем итерацию по всем возможным комбинациям 0 и 1 для переменных a1, a2, a3, a4
(кол-во переменных зависит от кол-ва пропусков в таблице).table = [(a1, 1, 0, a2), (0, 1, 0, 1), (a3, 1, 0, a4)]
- Формируем таблицу истинности значений по заданным правилам (из условия).if len(set(table)) == len(table):
- Проверяем, что все строки в таблице уникальны.for i in permutations('xyzw'):
- Запускаем итерацию по всем перестановкам символов 'xyzw'
.