Logic programming expresses computation as logical inference over a set of facts and rules. A program consists of declarations (facts: what is true) and rules (how to derive new truths from existing ones). The runtime engine (typically a resolution-based theorem prover) answers queries by searching for derivations. Prolog is the canonical logic programming language.