Correctly Compiling Proofs Without Proving Compilers Correct
Speaker: Audrey Seo
Audrey Seo is a 5th year PhD student, advised by Dan Grossman, in the PLSE lab at the University of Washington. Their work falls mainly in formal methods and verification, though they are also interested in the engineering challenges of working with interactive theorem provers.
Abstract
Guaranteeing correct compilation is nearly synonymous with compiler verification. However, the correctness guarantees for certified compilers and translation validation can be stronger than we need. While many compilers do have incorrect behavior, even when a compiler bug occurs, it may not change the program’s behavior meaningfully with respect to its specification. In this talk, I will explain our technique for getting strong guarantees about compiled programs even in the presence of unverified or even incorrect compilers. Our workflow compiles programs, specifications, and proof objects, from an embedded source language and logic to an embedded target language and logic. Our source and target languages are simple and imperative, and each has its own Hoare-style program logic. We are able to use our workflow with multiple different compilers -- all with varying degrees of correctness -- to successfully compile Hoare proofs about source programs to equivalent Hoare proofs about target programs. All results are formalized and proven correct in the proof assistant Rocq, formerly known as Coq. This opens up new options for which proof burdens one might shoulder instead of, or in addition to, compiler correctness.