Précédent : Environnement interactif de
preuves Remonter : Fondements scientifiques Suivant :
Domaines
d'applications
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
A
permet de décider qui de A ou
A est vérifié, une preuve de
x.P(x) permet
de construire a tel que P(a).
Le principe du tiers-exclu
A
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.
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
x.
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
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.