Whenever a new programming formalism is introduced, it is essential to check that it is sound in the sense that it properly enforces levels of abstraction. Unfortunately, soundness proofs often involve checking numerous cases, making them especially prone to error. A closely related issue is that a proliferation of logical systems have been introduced for reasoning about programs. These include not only classical formalisms such as predicate calculus, but also less familiar ones based on modal and temporal logics. If these logics are to be used as part of a mechanical verification system, it is necessary to implement a proof checker and related tools for each such logic.
Experience shows that much of the work is tantalizingly similar for many different logics.
It would be useful to have a general means of implementing proof checkers for a wide variety of logics. The purpose of a logical framework is to provide a solution to these problems. The idea of a logical framework is to provide a single, universal formalism for representing formalisms so that an implementation of a formal system may be obtained by simply representing it in the framework. Furio Honsell , Gordon Plotkin , and I introduced the LF logical framework for exactly this purpose. A surprisingly large number of formal systems may be encoded in LF, providing evidence for its universality.