previous up next top index
Précédent : Composition de l'équipe Remonter : Projet COQ Suivant : Actions de recherche


Présentation du projet

Le projet Coq a pour but la réalisation de systèmes de traitement de démonstrations, c'est-à-dire de systèmes capables de vérifier, produire et transformer des démonstrations mathématiques.

Ces systèmes peuvent en particulier être utilisés pour vérifier les démonstrations de correction de matériels et de logiciels informatiques vis-à-vis d'une spécification formelle, permettant ainsi la production de produits informatiques de qualité totale (zéro défaut ). Ils construisent explicitement un objet représentant la preuve de correction du programme qui peut ainsi être à nouveau vérifiée dans le cadre de la certification d'un logiciel.

Dans la conception d'un système de traitement de démonstrations, le choix du formalisme dans lequel s'expriment les définitions, les axiomes, les théorèmes et les démonstrations est crucial. La théorie des ensembles n'est malheureusement pas totalement adaptée aux buts orientés vers l'informatique que nous poursuivons. Nous travaillons donc avec une variante de la théorie des ensembles appelée Le Calcul des Constructions Inductives.

La principale originalité de ce formalisme est que les démonstrations y sont des objets au même titre que les nombres, les fonctions ou les ensembles. Ainsi un entier pair sera représenté par un couple formé d'un entier et d'une preuve que cet entier est pair. La seconde originalité de ce formalisme est que chaque terme exprimant un objet d'un type de données, peut se réduire sur une valeur de ce type de données. Par exemple le terme 2 + 5 se réduit sur la valeur 7.

Ces propriétés mises ensemble permettent de concevoir la spécification d'un programme comme une relation liant la valeur d'entrée et la valeur de sortie de ce programme. En effet, si Q(x,y) décrit une telle relation, une preuve dans le Calcul des Constructions Inductives de la totalité de cette relation ( tex2html_wrap_inline309 ) est en fait une fonction qui, à tout objet a associe un objet b et une preuve de Q(a,b). À partir de cette preuve, il est possible d'exprimer dans le calcul à la fois un programme fonctionnel f et sa preuve de correction tex2html_wrap_inline319 . La fonction f appliquée à l'entrée a se réduira pour fournir la sortie b. Mais les preuves ne sont pas, en général, des programmes efficaces, et il est nécessaire, en pratique, d'éliminer certaines parties de ces preuves non pertinentes pour le calcul : cette étape s'appelle l'extraction de programme. Les programmes extraits peuvent alors être traduits dans un langage de programmation ordinaire tel que ML, puis compilés en code machine.

Dans cette approche, la spécification du programme est vue comme une formule mathématique et le programme certifié est identifié à la preuve de cette formule.

Le langage de spécification associé au Calcul des Constructions Inductives (appelé Gallina) contient en particulier un calcul des prédicats d'ordre supérieur typé permettant d'exprimer des propriétés sur des objets appartenant à des structures algébriques quelconques. Il permet une représentation directe sans codage excessif des notions fondamentales d'objets structurés, de fonctions ou de relations très souvent utilisées dans les preuves informatiques.

La puissance même du système logique rend a priori impossible l'automatisation complète de la recherche d'une preuve d'une formule. L'approche repose sur deux autres idées. La première est qu'étant donnée une démonstration formelle assez détaillée, il est possible de vérifier mécaniquement sa correction. La seconde est que des programmes arbitraires (appelés tactiques) peuvent être utilisés pour construire par étapes successives une démonstration dont la correction est ensuite vérifiée. Ceci permet de laisser l'utilisateur construire ses propres procédures tout en garantissant la correction des preuves finales.

Une partie de notre activité concerne le développement et l'expérimentation d'un système de traitement des démonstrations : le système Coq qui est fondé sur le Calcul des Constructions Inductives. Nous nous intéressons à deux grandes classes de problèmes pouvant être abordés avec cet outil. Le premier est la certification de code mobile sur le réseau Internet et son application au télé-paiement dans le cadre du projet VIP avec le GIE Dyade. Le second est la certification d'outils automatiques tels que des compilateurs mis en oeuvre dans des développements de systèmes réactifs critiques.

Parallèlement, nous menons des activités de recherche à plus long terme concernant l'extraction, et plus généralement, la preuve de programmes, l'architecture des systèmes de vérification de démonstrations (en particulier la recherche d'une architecture suffisamment simple pour être elle-même spécifiée et vérifiée), la modélisation de structures fondamentales des objets de preuve et l'étude du Calcul des Constructions Inductives ainsi que certaines de ses extensions et alternatives possibles.



previous up next top index Précédent : Composition de l'équipe Suivant : Actions de recherche Remonter : Projet COQ