TwelfTwelf is an implementation of the logical framework LF developed by Frank Pfenning and Carsten Schürmann at Carnegie Mellon University.[1] It is used for logic programming and for the formalization of programming language theory. IntroductionAt its simplest, a Twelf program (called a "signature") is a collection of declarations of type families (relations) and constants that inhabit those type families. For example, the following is the standard definition of the natural numbers, with nat : type.
z : nat.
s : nat -> nat.
Here plus : nat -> nat -> nat -> type.
plus_zero : {M:nat} plus M z M.
plus_succ : {M:nat} {N:nat} {P:nat}
plus M (s N) (s P)
<- plus M N P.
The type family The constant Twelf features type reconstruction and supports implicit parameters, so in practice, one usually does not need to explicitly write These simple examples do not display LF's higher-order features, nor any of its theorem checking capabilities. See the Twelf distribution for its included examples. UsesLogic programmingTwelf signatures can be executed via a search procedure. Its core is more sophisticated than Prolog, since it is higher-order and dependently typed, but it is restricted to pure operators: there is no cut or other extralogical operators (such as ones for performing I/O) as are often found in Prolog implementations, which may make it less well-suited for practical logic programming applications. Some uses of Prolog's cut rule can be obtained by declaring that certain operators belong to deterministic type families, which avoids recalculation. Also, like λProlog, Twelf generalizes Horn clauses to hereditary Harrop formulas, which allow for logically well-founded operational notions of fresh-name generation and scoped extension of the clause database. Formalizing mathematicsTwelf is mainly used today as a system for formalizing mathematics, especially the metatheory of programming languages. As such, it is closely related to Rocq and Isabelle/HOL/HOL Light. However, unlike those systems, Twelf proofs are typically developed by hand. Despite this, for the problem domains at which it excels, Twelf proofs are often shorter and easier to develop than in the automated, general-purpose systems. Twelf's built-in notion of binding and substitution facilitates the encoding of programming languages and logics, most of which make use of binding and substitution, which can often be directly encoded through higher-order abstract syntax (HOAS), where the meta-language's binders represent the object-level binders. Thus standard theorems such as type-preserving substitution and alpha conversion come "for free". Twelf has been used to formalize many different logics and programming languages (examples are included with the distribution). Among the larger projects are a proof of safety for Standard ML,[2] a foundational typed assembly language system from CMU,[3] and a foundational proof carrying code system from Princeton. ImplementationTwelf is written in Standard ML, and binaries are available for Linux and Windows. As of 2006[update], it is under active development, mostly at Carnegie Mellon University.[needs update] See alsoReferences
External links
|