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.

Reply via email to