Я использовал следующую структуру данных для представления пропозициональной логики в Haskell:
data Prop
= Pred String
| Not Prop
| And Prop Prop
| Or Prop Prop
| Impl Prop Prop
| Equiv Prop Prop
deriving (Eq, Ord)
Любые комментарии к этой структуре приветствуются.
Однако теперь я хочу расширить свои алгоритмы для обработки логики FOL - предикатов. Что было бы хорошим способом представления FOL в Haskell?
Я видел версии, которые - в значительной степени - расширение вышеупомянутого, и версии, основанные на более классических контекстно-свободных грамматиках. Есть ли какая-либо литература по этому вопросу, которую можно было бы рекомендовать?