title: What are the main technical differences between Prolog and miniKanren, with respect to logic programming?
body: <p>When I want to read up on logic programming I always stumble over two "main" ways to do it nowadays:</p>
  
  <ul>
  <li><strong>miniKanren</strong>, a minilanguage introduced in <a href="https://mitpress.mit.edu/books/reasoned-schemer" rel="noreferrer">The Reasoned Schemer</a> and popular at the moment due to <a href="https://github.com/clojure/core.logic" rel="noreferrer">core.logic</a>.</li>
  <li><strong>Prolog</strong>, the first "big" logic programming language.</li>
  </ul>
  
  <p>What I'm interested in now: What are the principal technical differences between the two? Are they very similar in approach and implementation, or do they take completely different approaches to logic programming? Which branches of mathematics do they come from, and what are the theoretical foundations?</p>