Projet : COQ

previous up next contents
Précédent : Environnement interactif de preuves Remonter : Fondements scientifiques Suivant : Domaines d'applications


   
Preuves et Programmes

Mots clés : Isomorphisme de Curry-Howard, Réalisabilité, Logique intuitionniste, Calcul des Constructions Inductives .

Glossaire :

Logique Intuitionniste Logique constructive dans laquelle la disjonction ou la quantification existentielle ont un sens fort : une preuve de A $ \vee$ $ \neg$A permet de décider qui de A ou $ \neg$A est vérifié, une preuve de $ \exists$x.P(x) permet de construire a tel que P(a). Le principe du tiers-exclu A $ \vee$ $ \neg$A n'est pas a priori admis pour une formule quelconque A.

Réalisabilité Introduite par le logicien Kleene, il s'agit d'une interprétation de la logique intuitionniste dans laquelle toute formule est vue comme la caractérisation d'une propriété de programmes et toute preuve de cette formule peut être traduite en un programme satisfaisant la propriété.

Isomorphisme de Curry-Howard Correspondance entre les preuves en déduction naturelle et les lambda-termes typés.

Résumé :

Le Calcul des Constructions Inductives repose sur l'isomorphisme de Curry-Howard qui identifie les preuves et les programmes fonctionnels. Coq propose une chaîne de développement allant de l'écriture de la spécification jusqu'à la production d'un code exécutable certifié.

La principale originalité du Calcul des Constructions Inductives 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 combinées 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 (c'est-à-dire que $ \forall$x.$ \exists$y.Q(x, y)) 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 (c'est-à-dire $ \forall$x.Q(x, f (x))). La fonction fappliqué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.



previous up next contents
Précédent : Environnement interactif de preuves Remonter : Fondements scientifiques Suivant : Domaines d'applications