I am looking for a library/assembly that allows me to work with logical variables in F#. I want to avoid reinventing the wheel in implementing the required union-find datastructure, unification code and so on.
I have found Prolog.NET, but the manual is a bit sparse. I do not want a full-fledged Prolog implementation, but only its treatment of logical variables and the manual is kind of lacking in that respect.
Here’s what I want to be able to do:
- declare new logical variables
- bind a log.var. to a term (perferably the library allows complete Herbrand terms for that)
- equalize log.vars. (i.e. unification)
- meta-treatment of log.vars. (is it ground? to which other log.vars. has it been equalized?…)
- eventually, the library even supports matching, i.e. one-sided unification.
Does anyone know any library that does all this, or libraries that might at least be used as a starting point?
Mini-Kanren has been implemented for Scala. I’m not a .NET programmer, and can’t say how useful this is to you, but Mini-Kanren fits your requirements in terms of a programmatic logic-variable language: if the Scala embedding in .NET has properties compatible with what you are after, then you should be there.