This is the rKanren extension of core.logic using rKanren paper
miniKanren uses a biased interleaving search, alternating between disjuncts to unfold. The alternation is biased towards disjuncts that have more of their constraints already satisfied. However, one can affect bias by parametrizing the search strategy using ranks.
Why rank is important?
The parametrization is beneficial if we want to take advantage of differentiable programming to guide the search strategies. Think of Deep Neural Networks that are trained to generate appropriate ranks based on a fixed given puzzle. You can play with sudoku example using the included jar file.
Example on how to affect the search speed of the sudoku
java -jar target/uberjar/minimax-kanren-0.1.0-SNAPSHOT-standalone.jar --puzzle 192005640000060002006001300907083000000000000000590103009800200200070000085600739 --rank 22.214.171.124.126.96.36.199.188.8.131.52.184.108.40.206.220.127.116.11.18.104.22.168.22.214.171.124.126.96.36.199.188.8.131.52.184.108.40.206.220.127.116.11.18.104.22.168.22.214.171.124.126.96.36.199.188.8.131.52.184.108.40.206.220.127.116.11.18.104.22.168.22.214.171.124.126.96.36.199
Stay tuned for the result/papers and the Pytorch codes for showcasing the benefit of Neural guidance in the search strategies of constraint logical programmings. If this idea tingled your brain, make sure to check neural-guided-constraint-logic-programming-for-program-synthesis.