Certified functional programming :
Program extraction within Coq proof assistant
Programmation fonctionnelle certifiée :
L'extraction de programmes dans l'assistant Coq
Résumé
This work concerns the generation of programs which are certified
to be correct by construction. These programs are obtained by
extracting relevant information from constructive proofs made with
the Coq proof assistant.
Such a translation, named ``extraction'', of constructive proofs into
functional programs is not new, and corresponds to an isomorphism
known as Curry-Howard's. An extraction tool has been part of Coq
assistant for a long time. But this old extraction tool suffered from
several limitations: in particular, some Coq proofs were refused by
it, whereas some others led to incorrect programs.
In order to overcome these limitations, we built a completely new
extraction tool for Coq, including both a new theory and a new
implementation. Concerning theory, we developed new correctness
proofs for this extraction mechanism. These new proofs are both
complex and original. Concerning implementation, we focused on
the generation of efficient and realistic code, which can be integrated
in large-scale software developments, using modules and interfaces.
Finally, we also present several case studies illustrating the
capabilities of our new extraction. For example, we describe the
certification of a modular library of finite set structures, and the
production of programs about real exact arithmetic, starting from a
formalization of constructive real analysis. These examples show
the progress already achieved, even if the situation is not perfect yet,
in particular in the last study.
to be correct by construction. These programs are obtained by
extracting relevant information from constructive proofs made with
the Coq proof assistant.
Such a translation, named ``extraction'', of constructive proofs into
functional programs is not new, and corresponds to an isomorphism
known as Curry-Howard's. An extraction tool has been part of Coq
assistant for a long time. But this old extraction tool suffered from
several limitations: in particular, some Coq proofs were refused by
it, whereas some others led to incorrect programs.
In order to overcome these limitations, we built a completely new
extraction tool for Coq, including both a new theory and a new
implementation. Concerning theory, we developed new correctness
proofs for this extraction mechanism. These new proofs are both
complex and original. Concerning implementation, we focused on
the generation of efficient and realistic code, which can be integrated
in large-scale software developments, using modules and interfaces.
Finally, we also present several case studies illustrating the
capabilities of our new extraction. For example, we describe the
certification of a modular library of finite set structures, and the
production of programs about real exact arithmetic, starting from a
formalization of constructive real analysis. These examples show
the progress already achieved, even if the situation is not perfect yet,
in particular in the last study.
Nous nous intéressons ici à la génération de programmes certifiés
corrects par construction. Ces programmes sont obtenus en
extrayant l'information pertinente de preuves constructives réalisées
dans l'assistant de preuves Coq.
Une telle traduction, ou "extraction", des preuves constructives
en programmes fonctionnels n'est pas nouvelle, elle correspond
à un isomorphisme bien connu sous le nom de Curry-Howard. Et
l'assistant Coq comporte depuis longtemps un tel outil d'extraction.
Mais l'outil précédent présentait d'importantes limitations. Certaines
preuves Coq étaient ainsi hors de son champ d'application, alors que
d'autres engendraient des programmes incorrects.
Afin de résoudre ces limitations, nous avons effectué une refonte
complète de l'extraction dans Coq, tant du point de vue de la théorie
que de l'implantation. Au niveau théorique, cette refonte a entraîné
la réalisation de nouvelles preuves de correction de ce mécanisme
d'extraction, preuves à la fois complexes et originales. Concernant
l'implantation, nous nous sommes efforcés d'engendrer du code
extrait efficace et réaliste, pouvant en particulier être intégré dans des
développement logiciels de plus grande échelle, par le biais de
modules et d'interfaces.
Enfin, nous présentons également plusieurs études de cas illustrant
les possibilités de notre nouvelle extraction. Nous décrivons ainsi la
certification d'une bibliothèque modulaire d'ensembles finis, et
l'obtention de programmes d'arithmétique réelle exacte à partir d'une
formalisation d'analyse réelle constructive. Même si des progrès
restent encore à obtenir, surtout dans ce dernier cas, ces exemples
mettent en évidence le chemin déjà parcouru.
corrects par construction. Ces programmes sont obtenus en
extrayant l'information pertinente de preuves constructives réalisées
dans l'assistant de preuves Coq.
Une telle traduction, ou "extraction", des preuves constructives
en programmes fonctionnels n'est pas nouvelle, elle correspond
à un isomorphisme bien connu sous le nom de Curry-Howard. Et
l'assistant Coq comporte depuis longtemps un tel outil d'extraction.
Mais l'outil précédent présentait d'importantes limitations. Certaines
preuves Coq étaient ainsi hors de son champ d'application, alors que
d'autres engendraient des programmes incorrects.
Afin de résoudre ces limitations, nous avons effectué une refonte
complète de l'extraction dans Coq, tant du point de vue de la théorie
que de l'implantation. Au niveau théorique, cette refonte a entraîné
la réalisation de nouvelles preuves de correction de ce mécanisme
d'extraction, preuves à la fois complexes et originales. Concernant
l'implantation, nous nous sommes efforcés d'engendrer du code
extrait efficace et réaliste, pouvant en particulier être intégré dans des
développement logiciels de plus grande échelle, par le biais de
modules et d'interfaces.
Enfin, nous présentons également plusieurs études de cas illustrant
les possibilités de notre nouvelle extraction. Nous décrivons ainsi la
certification d'une bibliothèque modulaire d'ensembles finis, et
l'obtention de programmes d'arithmétique réelle exacte à partir d'une
formalisation d'analyse réelle constructive. Même si des progrès
restent encore à obtenir, surtout dans ce dernier cas, ces exemples
mettent en évidence le chemin déjà parcouru.
Loading...