@inproceedings{BG09,
title = {Using Checker Predicates in Certifying Code Generation },
author = {Blech, Jan Olaf and Gr\'egoire, Benjamin},
year = {2009},
booktitle = {Workshop on Compiler Optimization meets Compiler Verification (COCV)},
team = {DCS},
abstract = {Certifying compilation is a way to guarantee the correctness of compiler runs. A certifying compiler generates for each run a proof that it has performed the compilation task correctly. The proof is checked in a separate theorem prover. If the theorem prover is content with the proof, one can be sure that the compiler produced correct code. Our notion of compilation correctness is based on a human readable formalization of simulation of systems to ensure the same observable behavior of programs. We focus on certifying code generation translating an intermediate language into assembler code. In previous work we found out that the time spent for checking the proofs is the bottleneck of certifying compilation. We introduced the concept of checker predicates. These are formalized in an executable way within a theorem prover to increase the speed of distinct sub tasks of certificate checking. Once the checker predicates are proved correct we are able to use them instead of traditional proving techniques within our theorem prover environment. \r\nIn this paper, we present a more elaborate checker predicate for proving the simulation between intermediate and assembler programs correct. In the past this task has turned out to be the most complicated and time consuming task in certificate checking. Our checker predicate uses internally a specially formalized semantics representation of programs which is particularly suited for a fast conduction of proofs in the Coq theorem prover. Using this checker predicate we are able to speed up the task of certificate checking considerably.},
}