Ну давайте сравним.
Код:
(* Wolfram Mathematica 8 *)
abcd = {a, b, c, d}; (* АБСД *)
wxyz = {w, x, y, z}; (* ЖХУТ (кажется очевидным, что это WXYZ) *)
(* все возможные варианты в виде списка списков пар равных атомов *)
arrangements = Table[MapThread[{#1, #2} &, {abcd, wxyzn}],
{wxyzn, Permutations[wxyz]}];
(* возможные равенства атомов (список пар) *)
possibilities = Join @@ Table[{i, j}, {i, abcd}, {j, wxyz}];
(* неявные ограничения на равенства и неравенства атомов *)
eqs0 = Or @@ Map[And @@ # &,
Table[If[MemberQ[arr, p], e @@ p, ! e @@ p],
{arr, arrangements}, {p, possibilities}]];
(* все ограничения, включая явные *)
eqs = eqs0 &&
(! e[a, x] \[Implies] ! e[c, y]) &&
(e[b, y] || e[b, z] \[Implies] e[a, x]) &&
(! e[c, w] \[Implies] e[b, z]) &&
(e[d, y] \[Implies] ! e[b, x]) &&
(! e[d, x] \[Implies] e[b, x]); (* в редакторе \[Implies] выглядит как ⇒ *)
eqs // LogicalExpand // Resolve
(* в выбранном мною пути без LogicalExpand не срабатывает, читайте предложение Aritaborian *)
(* зато с этим Resolve удачно выдаёт СДНФ (кажется, иногда не выдаёт, не помню) *)
Ответ:
Код:
e[a, y] && e[b, x] && e[c, w] && e[d, z] &&
! e[a, w] && ! e[a, x] && ! e[a, z] && ! e[b, w] &&
! e[b, y] && ! e[b, z] && ! e[c, x] && ! e[c, y] &&
! e[c, z] && ! e[d, w] && ! e[d, x] && ! e[d, y]
То есть, в наших терминах, А = У, Б = Х, С = Ж, Д = Т.
P. S. Знаю, что это в текущем контексте не совсем уместно, но уже переписал сюда код (а написал я его днём, заинтересовавшись единственностью и существованием решения), когда увидел новые ответы, а удалять не хочется… Вообще приводилку к СДНФ можно довольно быстро написать (заодно попрактиковавшись в понимании алгоритма в учебнике!). Вот задавать ей исходную формулу вручную я бы постеснялся, а чтобы генерировать её, нужно или добавлять к приводилке нехилый скриптовый движок, или, что выглядит разумнее, сгенерировать задание на том же языке, на котором написана она сама. Но любая смена задании тогда потребует перекомпиляции, если язык компилирующийся. Если б я хорошо разбирался в Python, посоветовал бы его — там и DSL должно быть легко сделать, чтобы вводить куски формул красиво и легко.