# Logic programming

## Notes

- The more I learn about logic programming the more I realize that implementing a type-checker is basically reinventing a logic programming language, but worse.
- Constraint-solving systems generally have awful ergonomics wherever you stray from the happy path because: 1. Perf is unpredictable, teeming w/ exponential runtime pitfalls. 2. Error messages are hard to debug.

## Links

- miniKanren - Embedded Domain Specific Language for logic programming. (How I learnt miniKanren)
- miniKanren with symbolic constraints
- probKanren - Probabilistic miniKanren.
- Edward Kmett - Logic Programming à la Carte (2019) (PDF slides)
- Holmes - Reference library for constraint-solving with propagators and CDCL.
- Incorrectness Logic (2020)
- Datalog in Haskell - Pure Haskell implementation of Datalog, as a library.
- "Constraint Logic Propagation Conflict Spreadsheets" by William Taysom (2015)
- Ceptre - Tiny logic programming language for prototyping rulesets that you can run, interact with, and analyze.
- TouIST - Language for propositional logic. (Web)
- Why Logic Programming Matters (2020)
- Mercury - Logic/functional programming language which combines the clarity and the expressiveness of declarative programming with advanced static analysis and error detection features. (Web)
- Advent of Code in Polar (logic programming) (2021)
- Making a “MiniKanren” using Z3Py (2021)
- Leverage the Power of Logic Programming With Souffle-haskell (2021)
- Popper - Inductive logic programming (ILP) system.
- Inductive logic programming at 30 (2021)
- The Joy of Concurrent Logic Programming (HN)
- Parallel Logic Programming: A Sequel (2021) (HN)
- CLP - Constraint Logic Programming over Integers. (Web)
- Neural Guided Constraint Logic Programming for Program Synthesis
- CLP(SMT)-miniKanren - Canonical miniKanren implementation, augmented with CLP(SMT).
- Owl - Tiny logic programming language highly inspired by Prolog.
- The joy of concurrent logic programming
- Ascent - Logic programming language (similar to Datalog) embedded in Rust via macros.
- miniKanren with a first-order representation of the search space
- Whereabouts - Logic programming with JSON.
- Culog - Declarative metalanguage.
- MiniKanrenT - Implementation of miniKanren in Haskell.
- Experiments with the Verse Calculus in miniKanren
- VAEL: Bridging Variational Autoencoders and Probabilistic Logic Programming (2022) (Code)
- Multiset Rewriting in miniKanren
- Minilog - Small relational (logic) programming language.
- Can Logic Programming Execute as Fast as Imperative Programming? (1990)
- kanren - Logic/relational programming in Python with miniKanren.
- z3.rs - Rust bindings for the Z3 solver.
- Logic programming is overrated, at least for logic puzzles (2013) (HN)
- clolog - Full-featured logic programming embedded in/callable from and supporting calls to Clojure.