06 Aug 25
An extensive collection of notes on picat that cover nearly all corners of the language
25 Aug 24
Twelf is a language used to specify, implement, and prove properties of deductive systems such as programming languages and logics
16 Jun 24
A quick and dirty ref. card for Clojure’s core logic
21 May 24
It cannot find its own problems; it cannot feed itself. … This, however, is not a defect in a machine; we do not want it to do its own business, but ours.
28 Nov 23
This is a tool to perform proofs in various logics (e.g. propositional, predicate logic) visually
24 Aug 23
prolog-like programming in racket programming systems.
06 Aug 23
So from day one, they warned us Turing machines are clumsy beasts where easy tasks are hard to accomplish, and generally hang unpredictably.
01 Aug 23
In terms of implementation, though, it is far from simple. Lambda calculus has variables, which introduce huge complexity into the interpreter: especially if you want to do any kind of formal reasoning about programs, this complexity is a problem. We might want to reach for something even lower-level than lambda calculus: this is where combinator calculi come in.
28 Jul 23
This is a top-down introduction to core.logic which attempts to lead you to that elusive AHA! moment of understanding what logic programming is about.
Core miniKanren extends Scheme with three operations: ==, fresh, and conde. There is also run, which serves as an interface between Scheme and miniKanren, and whose value is a list.
28 May 23
A useful table of all the combinators and their effects.
18 May 23
miniKanren is a family of Domain Specific Languages for logic programming.The name kanren comes from a Japanese word (関連) meaning “relation”.The core miniKanren language is very simple, with only three logical operators and one interface operator.The core language, using Scheme as the host language, is described in this short, interactive tutorial.
14 May 23
When a condition is found to be TRUE, the engine executes the THEN clause, which results in new information being added to its dataset. In other words, the engine starts with a number of facts and applies rules to derive all possible conclusions from those facts. This is where the name “forward chaining” comes from – the fact that the inference engine starts with the data and reasons its way forward to the answer, as opposed to backward chaining, which works the other way around.How about backward chaining?In backward chaining, the system works from conclusions backwards towards the facts, an approach called goal driven. Compared to forward chaining, few data are asked, but many rules are searched. Backward-chaining rules engines are not suited for dynamic situations and are mostly only used as expert systems in decision making
12 May 23
The topic of type theory is fundamental both in logic and computer science. We limit ourselves here to sketch some aspects that are important in logic. For the importance of types in computer science, we refer the reader for instance to Reynolds 1983 and 1985.
The functional style of programming is founded on simple, everyday mathematical intuition: If a procedure or method has no side effects, then (ignoring efficiency) all we need to understand about it is how it maps inputs to outputs – that is, we can think of it as just a concrete method for computing a mathematical function. This is one sense of the word “functional” in “functional programming.” The direct connection between programs and simple mathematical objects supports both formal correctness proofs and sound informal reasoning about program behavior.
23 Mar 23
26 Dec 22
Girard’s linear logic can be used to model programming languages in which each bound variable name has exactly one “occurrence”–i.e., no variable can have implicit “fan-out”; multiple uses require explicit duplication. Among other nice properties, “linear” languages need no garbage collector, yet have no dangling reference problems. We show a natural equivalence between a “linear” programming language and a stack machine in which the top items can undergo arbitrary permutations. Such permutation stack machines can be considered combinator abstractions of Moore’s Forth programming language.