Программирование на языке python

Как решить эту задачу ?
Сначала нормализовать выражение, приведя его к ДНФ:
¬(y → ¬(z → w)) = ¬(¬y ∨ ¬(¬z ∨ w)) = y ∧ (¬z ∨ w) = (y ∧ ¬z) ∨ (y ∧ w)
¬z → (¬w ≡ x) = z ∨ (¬w ∧ x) ∨ (w ∧ ¬x)
((y ∧ ¬z) ∨ (y ∧ w)) ∧ (z ∨ (¬w ∧ x) ∨ (w ∧ ¬x)) =
= (y ∧ ¬z ∧ z) ∨ (y ∧ w ∧ z) ∨ (y ∧ ¬z ∧ ¬w ∧ x) ∨ (y ∧ w ∧ ¬w ∧ x) ∨
∨ (y ∧ ¬z ∧ w ∧ ¬x) ∨ (y ∧ w ∧ w ∧ ¬x) =
= 0 ∨ (y ∧ w ∧ z) ∨ (y ∧ ¬z ∧ ¬w ∧ x) ∨ 0 ∨
∨ (y ∧ ¬z ∧ w ∧ ¬x) ∨ (y ∧ w ∧ ¬x) =
= (w ∧ y ∧ z) ∨ (¬w ∧ x ∧ y ∧ ¬z) ∨ (w ∧ ¬x ∧ y)
Конъюнкция переменной с её отрицанием равна нулю.
Нули делают произведение нулевым.
Нули не влияют на сумму, поэтому вычёркиваем их из неё.
Последнее ненулевое слагаемое поглощает предпоследнее.
Из трёх оставшихся слагаемых ДНФ получаем строки таблицы, в которых значение функции равно 1 (во всех остальных случаях F = 0):
w x y z
1 - 1 1
0 1 1 0
1 0 1 -
(прочерк означает, что при любом значении переменной F = 1)
Можно это раскрыть:
w x y z
1 0 1 1
1 1 1 1
0 1 1 0
1 0 1 0
(строка 1 0 1 1 при раскрытии переменной повторяется дважды, поэтому исключаем дубликат, и строк остаётся 4)
Видим, что только 3-я и 4-я строки содержат по 2 нуля, они соответствуют 2-й и 3-й строкам исходной таблице, причём, 3-я колонка исходной таблицы 0 - это z (т.к. она дважды с нулём). Колонка исходной таблицы без нуля (1-я) - это y.
Теперь, какая из остальных w, а какая x? Мы видим, что эти переменные не равны (для F = 1 нет строк с тремя нулями).
2-я колонка не может быть x, т.к. при y = z = w = 1 F = 1 независимо от значения x.
Отсюда заключаем, что 2-я колонка - это w, а для x остаётся 4-я колонка.
Ответ:
y w z x
И никакого программирования на Питон тут не понадобилось.