12 November 2015

Learning from Interpretations

The LFI-Problog algorithm, for doing inference on probabilistic logic programs.

05 October 2015

Finding Counterexamples from Parsing Conflicts

How the CUP parser generator explains conflicts.

19 September 2015


A system for implementing and verifying distributed algorithms.

12 September 2015

Push/Pull for Transactions

A unified model for understanding many transactional systems.

29 July 2015

Coverability for Vector Addition Systems

Vector addition systems are a model of computation. For this model, coverability is one of the easiest decision problems. This post presents an old (1978) upper bound, with accompanying code.

27 April 2015

Tree Buffers

Circular buffers are one of the most fundamental and pervasive data structures. They are an efficient implementation for buffering linear sequences. Tree buffers are a more general data structure.

03 April 2015

RIP Herman Conjecture (2005-2015)

In 1990, Herman proposed a sweet self-stabilizing protocol. In 2005, McIver and Morgan conjectured that its running time is $\frac{4}{27} N^2$. Well … they were right.