Section: New Results
Proof Checking and Logic Programming
Participants : Roberto Blanco, Tomer Libal, Dale Miller, Marco Volpe.
In a world where trusting software systems is increasingly important, formal methods and formal proofs can help provide some basis for trust. Proof checking can help to reduce the size of the trusted base since we do not need to trust an entire theorem prover: instead, we only need to trust a (smaller and simpler) proof checker. Many approaches to building proof checkers require embedding within them a full programming language. In most modern proof checkers and theorem provers, that programming language is a functional programming language, often a variant of ML. In fact, aspects of ML (e.g., strong typing, abstract data types, and higher-order programming) were designed to make ML a trustworthy “meta-language” for checking proofs. While there is considerable overlap between logic programming and proof checking (e.g., both benefit from unification, backtracking search, efficient term structures, etc), the discipline of logic programming has, in fact, played a minor role in the history of proof checking. Miller has been pushing the argument that logic programming can have a major role in the future of this important topic . Many aspects of the ProofCert project are based on this perspective that logic programming techniques and methods can have significant utility within proof checking. This perspective stands in constrast to the work on the Dedukti proof checking framework  where functional programming principles are employed for proof checking.