While I haven't been able to come up with a general solution to the problem of incompatible constraints, core.logic now has a relatively efficient means for users to check for incompatible constraint combinations in the constraint store themselves.
For example, it's now possible to write numbero and symbolo without modifications to core.logic itself such that: (run* [q] (numbero q) (symbolo q)) will fail. The idea is that users are provided a hook that is run *before* the constraint is actually added to the constraint store. This hook is given the constraint store so that users can inspect the contents of the store in order to determine whether an impossible combination of constraints on a variable(s) is about to be introduced. It is fail fast. I believe this allows user to build out sound, efficient constraint solvers. Granted, it does not solve the general problem of how to determine soundness between arbitrary constraint domains. I'm beginning to suspect that for this to work in the general case we need to maintain runtime domain information (like tags) and provide a hierarchy of relationships between those domains (a tower of terms?). David -- You received this message because you are subscribed to the Google Groups "minikanren" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/minikanren. For more options, visit https://groups.google.com/groups/opt_out.
