## 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 [18].
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 [44] where functional programming
principles are employed for proof checking.