Я пишу инструмент, который имеет дело с некоторой булевой алгеброй. Это в основном инструмент для создания конечного автомата на основе пользовательского файла, который содержит имена состояний, условия и информацию о переходах. Метод, с помощью которого происходят переходы состояний, заключается в основном в просмотре логической таблицы логики. например переход из State1 в State2, если:
(A & B) | (C & ~D) | (E)
Я все это реализовал, но теперь мне нужно добавить возможность делать такие забавные вещи, как инвертирование всего шебанга:
~((A & B) | (C & ~D) | (E)) = (via DeMorgan) (~A & ~C & ~E) | (~A & D & ~E) | (~B & ~C & ~E) | (~B & D & ~E)
Результат должен быть в Разъединительной нормальной форме .
По сути, я не хочу писать это сам, и я надеюсь, что где-то есть библиотека, которая знает, как справляться с подобными вещами. Я сталкивался с SymPy, но я не уверен, есть ли модуль булевой алгебры.
Мое приложение написано на C (вероятно, не должно быть), но все поможет.