Greatly appreciated! I’ve been doing a deep dive on logic programming recently, specifically the actual implementations of various methods. For such a mature field it’s remarkable how little accessible information there is. (Kudos to the *Kanren folks and various SMT enthusiasts for being the exception there.)
I also recommend The Power of Prolog. This book teaches you to use the good, pure-logical parts of Prolog, which means you can think declaratively like in Datalog or miniKanren.
It’s magic! For example, Advent of Code 2021 - Day 24 gives you an assembly-like language and asks “For which inputs does this program output zero? Find the largest.” It doesn’t sound trivial: it requires some kind of static analysis. But in Prolog it is trivial! I wrote a boring interpreter, and then queried it with an unknown input.
Given the absence of a
prolog
tag, for readers interested in Prolog and related logic programming languages, I’ll link this list of several previous Prolog/Datalog-related submissions.I agree a
prolog
orlogic programming
tag would be very interesting!Greatly appreciated! I’ve been doing a deep dive on logic programming recently, specifically the actual implementations of various methods. For such a mature field it’s remarkable how little accessible information there is. (Kudos to the *Kanren folks and various SMT enthusiasts for being the exception there.)
I also recommend The Power of Prolog. This book teaches you to use the good, pure-logical parts of Prolog, which means you can think declaratively like in Datalog or miniKanren.
It’s magic! For example, Advent of Code 2021 - Day 24 gives you an assembly-like language and asks “For which inputs does this program output zero? Find the largest.” It doesn’t sound trivial: it requires some kind of static analysis. But in Prolog it is trivial! I wrote a boring interpreter, and then queried it with an unknown input.
FWIW this project was used to prototype the Rust type system
Core dev Niko has several talks where he mentions it
I’ve wanted to give it a spin for a long time, but a problem hasn’t come up so far
My favorite post about Soufflé: https://ianthehenry.com/posts/drinking-with-datalog/
Describes building a recipe system with Soufflé; very easy to follow tutorial.
flora.pm uses Soufflé to process packages’ categories from Hackage: https://github.com/flora-pm/flora-server/blob/development/cbits/categorise.dl