Précédent : Présentation générale et
objectifs Remonter : Projet COQ, Spécifications et preuves
Suivant : Grands domaines d'application
Résumé : Un environnement interactif de preuves est un outil permettant de construire des théories mathématiques en introduisant des définitions, des hypothèses, en énonçant des propriétés et enfin en construisant des preuves de théorèmes.Il ne s'agit pas de résoudre tous les problèmes automatiquement, mais d'interagir avec l'utilisateur qui indique des stratégies de preuve (appelées tactiques) qui peuvent résoudre complètement un problème ou bien proposer une liste de sous-problèmes à résoudre. La machine vérifie la correction du raisonnement et certifie donc que les problèmes ainsi résolus correspondent à des théorèmes prouvés.
Le langage dans lequel sont exprimés les objets et les propriétés doit avoir un grand pouvoir d'expression. Notre approche repose sur une théorie des types d'ordre supérieur qui offre un langage de spécification riche et permet une représentation concrète des preuves qui reste proche du raisonnement humain.
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.
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é.
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
décrit une telle relation, une preuve
dans le Calcul des Constructions Inductives de la totalité
de cette relation (
)
est en fait une fonction qui, à tout objet
associe
un objet
et une preuve de
. À partir de cette preuve, il est possible d'exprimer
dans le calcul à la fois un programme fonctionnel
et sa preuve de correction
.
La fonction
appliquée à l'entrée
se réduira pour fournir la sortie
. 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.