Projet Coq

previous up next contents
Précédent : Présentation générale et objectifs Remonter : Projet COQ, Spécifications et preuves Suivant : Grands domaines d'application



Fondements scientifiques

Environnement interactif de preuves

Mots-clés : Tactiques, objet preuve


Tactiques: Une tactique est un programme permettant à partir d'une propriété à démontrer de construire un ensemble (éventuellement vide) de nouvelles propriétés qui sont suffisantes pour valider la propriété initiale. Les tactiques peuvent être combinées en utilisant des opérateurs appelés ``tacticals''
Objet preuve: Un objet preuve est une représentation concrète d'une preuve qui explicite les étapes élémentaires ayant permis de justifier la correction du développement (lemmes utilisés, instanciations, récurrence)
Calcul des Constructions Inductives: Langage issu de la théorie des types. Intégrant des types d'ordre supérieurs, polymorphes, dépendants et des définitions inductives et co-inductives primitives, il permet la représentation des spécifications et des preuves et sert de base à l'assistant Coq
CCI: Calcul des Constructions Inductives
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.


Notre système de traitement de démonstrations repose sur le formalisme du Calcul des Constructions Inductives que nous avons élaboré. Le langage de spécification associé est appelé Gallina. Il 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.

Preuves et Programmes

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


Logique Intuitionniste: Logique qui n'admet pas a priori le principe du tiers-exclu $A \vee \neg A$ pour n'importe quelle formule $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 ($\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 $\forall x.Q(x,f(x))$. 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.



previous up next contents Précédent : Présentation générale et objectifs Remonter : Projet COQ, Spécifications et preuves Suivant : Grands domaines d'application