Formal verification of an optimizing compiler for functional languages - Archive ouverte HAL Access content directly
Theses Year : 2009

Formal verification of an optimizing compiler for functional languages

Vérification formelle d'un compilateur optimisant pour langages fonctionnels

(1)
1

Abstract

As part of formal verification of critical software, preserving properties established on the source code in the executable code seems to be crucial. To guarantee this preservation, the compiler must itself be verified. A compiler is formally verified if it comes with a proof of semantic preservation: "if compilation succeeds, the behavior of the compiled code agrees with that of the source program". The CompCert project investigates the formal verification of realistic compilers usable for critical embedded software. The project designs, develops and mechanically verifies compilers using the Coq proof assistant. By this method, a C compiler producing PowerPC assembly code has already be developed and verified. Using the extraction mechanism of Coq, the compiler is automatically extracted into OCaml code, which is compiled by the Objective Caml system. Actually, the production of the executable compiler uses two unverified processes: the extraction mechanism and the Objective Caml compiler. In fact, this is true for any program specified in the Coq proof assistant, then extracted to an executable. This thesis investigates the design, development and mechanized verification, using the Coq proof assistant, of a compiler for the purely functional fragment of ML, which is the target language for Coq's extraction. Concretely, a front-end compiler from miniML (lambda-calculus plus let, letrec, and pattern-matching) to Cminor was developed and proved correct. Cminor is a low-level C-like language that is the first intermediate language of the CompCert back-end. Considering the expressiveness of the source language, the compiler is realistic. It implements several classic optimizations: uncurrying (the same optimization as in OCaml), uniform data structure representation (as numbering constructor and closure conversion) and an optimizing CPS translation. Like other modern compilers for high-level languages, the miniML compiler needs to interact with a memory manager. This interaction has been mechanized verified.
La préservation de propriétés établies sur le programme source jusqu'au code exécutable est un point important dans les méthodes formelles. Cette propriété de préservation est établie par la vérification formelle du proccessus de compilation. Un compilateur est formellement vérifié s'il est accompagné d'une preuve de préservation sémantique : "si la compilation réussit, le code compilé se comporte comme le code source le prédit." Le projet CompCert étudie la vérification formelle de compilateurs réalistes utilisable dans l'embarqué-critique. Il s'agit de développer et formellement vérifier de tels compilateur via l'assistant de preuve Coq. Un compilateur pour le langage C vers l'assembleur PowerPC a déjà ainsi été produit. Le code exécutable du compilateur a été obtenu en deux étapes non vérifiés : la génération automatique de code Ocaml par le mécanisme d'extration de Coq et la compilation du de ce code extrait par le système Objective Caml. En fait, cette lacune est commune à tous les développements spécifiés dans l'assistant de preuve Coq et destinés à produire un éxécutable. Cette thèse décrit l'étude, le développement et la vérification formelle, dans l'assistant de preuve Coq, d'un compilateur pour le fragment purement fonctionnel du langage ML : le langage cible du mécanisme d'extraction de Coq. Concrètement, il s'git d'une chaîne de compilation en amont pour mini-ML (lambda calcul, let, letrec et filtrage) vers le premier langage intermédiaire de la chaîne de compilation en aval du compilateur CompCert. Ce langage, Cminor, est un langage de bas niveau à la C. L'expressivité du langage source traité rend ce compilateur réaliste. Il comporte aussi des optimisations classiques propre à la compilation de langages fonctionnels : la décurryfication, comme celle implémentée dans le compilateur OCaml ; la représentation uniforme des données, explicitation des fermetures, numérotation des constructeurs et une mise en style par passage de continuation (CPS) optimisée. Le point fort de ce compilateur et que, comme les compilateurs modernes pour langage de haut niveau, il peut interagir avec un gestionnaire de mémoire automatique. Cette interaction a aussi été formellement vérifiée.
Fichier principal
Vignette du fichier
these_Zaynah_Dargaye.pdf (1.76 Mo) Télécharger le fichier
Loading...

Dates and versions

tel-00452440 , version 1 (02-02-2010)

Identifiers

  • HAL Id : tel-00452440 , version 1

Cite

Zaynah Dargaye. Vérification formelle d'un compilateur optimisant pour langages fonctionnels. Génie logiciel [cs.SE]. Université Paris-Diderot - Paris VII, 2009. Français. ⟨NNT : ⟩. ⟨tel-00452440⟩

Collections

INRIA INRIA2
916 View
816 Download

Share

Gmail Facebook Twitter LinkedIn More