У меня такая проблема:
У меня есть две пропозициональные формулы, которые должны стать логически эквивалентными. Только один из них содержит «переменную» в том смысле, что переменную можно заменить любой пропозициональной формулой. Теперь проблема в том, что мне нужно найти фактическую замену переменной, чтобы логическая эквивалентность стала истинной. Пример:
(a ^ ~b) or x = a
Здесь x обозначает переменную. Эту логическую эквивалентность можно сделать истинной, заменив x на a ^ b, так что получится:
(a ^ ~b) or (a ^ b) = a
Так вот в чем проблема. Мне нужен алгоритм, который получает на входе «уравнение с одной переменной x» и дает на выходе значение для переменной x, так что уравнение становится логической эквивалентностью.
Всегда будет одна переменная. (на самом деле у меня могут возникнуть проблемы с более чем одной переменной, но сначала я хочу решить простой случай). Причем рассматриваемые формулы могут иметь любую форму (их нет в CNF или DNF). Кроме того, формулы могут быть ЛОЖЬ или ИСТИНА, и бывают случаи, когда нет решения (например, для «a или x = false» нет решения) или более одного решения (например, для «a и x = false» "любое ложное предложение было бы правильным ответом).
Все, что у меня есть, - это составитель таблиц, который говорит мне, выполнима ли формула или нет. Итак, я могу протестировать решение. Но моя проблема в том, чтобы просто дать мне решение.