Скажем, мне нужно создать конструктор логических выражений, который состоит из предикатов (любая функция, возвращающая true / false).
Я хочу создать цепочку, подобную цепочке:
$chainA = new Chain(predicateA1());
$chainA->add(AND, predicateX());
$chainB = new Chain(predicateB1());
$chainB->add(AND, predicateX());
$chain = new Chain($chainA);
$chain->add(OR, $chainB);
Итак, я получаю такое выражение (A1 и X) или (B1 и X), все это довольно просто, но мне нужна одна особенность — сделать некоторое логическое преобразование в конъюнктивную / дизъюнктивную форму, например:
(А1 и Х) или (В1 и Х) -> (А1 или В1) и Х.
Я понятия не имею, как реализовать это.
Есть ли шаблоны или библиотеки в php или java, решающие эту проблему?
Задача ещё не решена.
Других решений пока нет …