Projet Coq

previous up next contents
Précédent : Logiciels Remonter : Projet COQ, Spécifications et preuves Suivant : Actions industrielles



Résultats nouveaux

Modélisation et formalisation dans Coq

Résumé : Nous étudions la formalisation de preuves provenant des domaines informatique ou mathématique qui permettent de valider les choix faits dans l'environnement de preuve, de proposer de nouvelles fonctionnalités et de construire des bibliothèques générales.

Formalisation d'un système de preuves avec types inductifs

 

Participant : Bruno Barras


Mots-clés : types inductifs, algorithmes de typage, bootstrap


Bootstrap d'un système logique: formalisation d'un système logique dans ce même système, une fois admise la cohérence. L'extraction permet alors d'engendrer un programme équivalent à celui qui l'a engendré.

B. Barras a poursuivi la formalisation de systèmes de types, avec comme but le bootstrap du Calcul des Constructions Inductives, et la vérification d'un système de preuves autonome.

La classe de systèmes formalisés jusqu'à présent, les Systèmes de Types Purs munis de sous-typage abstrait, a été étendue avec de nouvelles constructions. Premièrement, une construction let$/$in, autorisant des définitions locales a été rajoutée, ce qui augmente l'utilisabilité du système. Puis, ce système a été étendu avec le type inductif des entiers naturels. B. Barras a alors commencé la formalisation d'un système comportant des types mutuellement inductifs, voisins de ceux implantés dans Coq. Ceux-ci ne sont pas des objets de première classe, mais des constantes introduites dans une signature globale.

Un deuxième axe de recherche a été la formalisation de l'interface d'un petit système de preuves [25], qui était jusque là réduit à une fonction de typage. Cela a compris notamment la formalisation des messages d'erreur, pour s'assurer que ceux-ci sont corrects et pertinents vis-à-vis de leur spécification.

Vérification de protocoles cryptographiques



Participants : Jean Goubault-Larrecq [G.I.E. Dyade], Amokrane Saïbi


Mots-clés : Protocoles cryptographiques, Méthodes formelles, Commerce électronique


Résumé : L'action VIP du G.I.E. Dyade, s'intéresse à la modélisation et vérification de protocoles intervenants dans le commerce électronique. Les techniques utilisées ont été développées par Dominique Bolignano (G.I.E. Dyade) [Bol96,Bol97]. Coq est utilisé comme outil pour formaliser ces preuves. Les principales difficultés concernent la recherche de représentations des problèmes dans Coq qui facilitent les preuves et la conception de techniques et d'outils de preuves permettant une automatisation partielle de la tâche.

Langage de spécification pour protocoles cryptographiques

Le projet de langage de spécification minimaliste pour décrire les protocoles cryptographiques, Clap, commencé en 1996 (il s'appelait alors Slap) est en bonne voie. Le but est de pouvoir décrire une spécification suffisamment abstraite d'un protocole cryptographique, de décrire quelques scénarios (modèles de sécurité, et en général hypothèses faites sur le monde extérieur), et de vérifier le plus automatiquement possible, la correction des protocoles vis-à-vis des propriétés de sécurité désirées. Ultimement, le prouveur de Clap devrait pouvoir sortir une démonstration formelle en Coq.

En 1997, le travail s'est principalement porté sur la définition du langage lui-même, syntaxe, système de types et sémantique. Le design de Clap est décrit dans [37].

Automatisation des preuves de protocoles cryptographiques

Un prouveur automatique pour les spécifications Clap est en cours de réalisation, et un certain nombre de problèmes de recherche sont encore à résoudre, notamment liés à l'utilisation très répandue du ``ou exclusif'' pour combiner deux messages en un. L'automatisation de certains aspects plus simples, et notamment du calcul du prédicat $known\_in$ de Dominique Bolignano, est achevée `sur le papier' dans le cas où le ``ou exclusif'' n'est pas utilisé, et un étudiant de DEA, Karim Gam, en a commencé la preuve formelle en Coq durant les trois mois de son stage. Une tactique de décision de ce prédicat, par réflexion en Coq, est en cours de réalisation.

A. Saïbi étudie depuis septembre la possibilité d'automatiser certaines parties des preuves de protocoles cryptographiques. Plusieurs possibilités sont envisagées:

Le théorème des trois intervalles



Participants : Micaela Mayero , Gilles Dowek , Gérard Huet


Micaela Mayero, dans le cadre de son stage de DEA sous la direction de Gérard Huet et Gilles Dowek s'est attachée à spécifier et démontrer [56] en Coq un théorème des mathématiques ``le théorème des trois intervalles'' qui est la preuve (1986) de la conjecture de Steinhaus (1950).

Ce travail a nécessité, entre autres choses, le développement d'une théorie axiomatique des nombres réels. Il est précurseur de son travail de thèse, dirigé par Gilles Dowek sur les méthodes formelles pour l'analyse numérique.

Arithmétique flottante



Participant : Patrick Loiseleur , Christine Paulin


Dans le cadre d'un stage de DEA co-encadré par Christine Paulin et Jean-Michel Müller du LIP à l'ENS Lyon, Patrick Loiseleur a formalisé en Coq la norme ANSI/IEEE 754 de 1985, aujourd'hui implantée dans tous les microprocesseurs, qui spécifie l'arithmétique en virgule flottante. La caractéristique de cette norme est l'exigence de l'arrondi exact, qui stipule que toutes les opérations doivent se comporter comme un calcul exact dans les nombres réels suivi d'un arrondi vers un ``nombre machine '' plus proche. Un algorithme d'addition dû à Knuth a été prouvé. Dans le futur, ce travail peut servir de base à la preuve d'algorithmes numériques, ou bien être une des ``briques'' de la preuve d'un microprocesseur.

Algorithme de synchronisation



Participant : Jean Duprat


Jean Duprat a réécrit en Coq la preuve de correction de la solution au problème de la ligne de fusiliers (firing squad) proposée par J. Mazoyer en 1987 [Maz87]. Ce problème consiste à définir une fonction de transition régissant l'évolution dans le temps d'une ligne d'automates cellulaires qui, d'une situation initiale ou tous les automates sauf un sont dans un état "quiescent" amène à une situation finale où tous les automates sont pour la première fois dans un état "feu". La solution de J. Mazoyer est minimale en temps et ne demande que six états. La preuve de la correction utilise des méthodes de géométrie discrète dans le plan, elle construit des structures inductives de plus en plus complexes pour finir par caractériser toute l'évolution temporelle. De plus, elle demande la vérification de nombreux cas particuliers.

Théorie des Automates Finis



Participant : Jean-Christophe Filliâtre


Mots-clés : Théorie des Automates


En janvier 1997, Jean-Christophe Filliâtre a repris et amélioré la formalisation de la théorie des automates finis qu'il avait réalisée dans la version 5.8 du système Coq de mai à juillet 1993, dans le cadre d'un stage de maîtrise. Le développement a été porté dans la version 6.1 du système Coq et un programme Caml a été extrait de la preuve constructive du théorème de Kleene. Ce travail est décrit dans [51].

Preuves d'algorithmes de calcul formel



Participants : Benjamin Werner , Gilberto Perez Vega


 Benjamin Werner a reçu, pendant trois mois, la visite de Gilberto Perez Vega. Ils ont travaillé sur la formalisation et la vérification en Coq de l'algorithme de Buchberger. Cet algorithme, utilisé dans les systèmes de calcul formel, permet d'obtenir une base de Gröbner d'un idéal de polynômes. Ce travail a consisté d'abord en une formalisation de la théorie des polynômes en Coq. La preuve des algorithmes proprement dits est en cours.

Vérification de protocoles



Participant : Eduardo Giménez


Eduardo Giménez a continué ses recherches autour de l'utilisation de types co-inductifs pour la modélisation de protocoles de communication et de processus concurrents. En particulier, il s'est attaqué au problème de vérifier l'algorithme d'exclusion mutuelle de Petersson et sa généralisation à un nombre arbitraire de processus.

Raisonnement classique et théorie des types



Participante : Christine Paulin


La théorie des types utilisée dans Coq est constructive ce qui permet à partir d'une preuve mathématique d'existence de pouvoir effectivement calculer un objet. Cependant, il est parfois plus adapté de raisonner de manière classique en utilisant un raisonnement par l'absurde ou le principe de tiers exclu. L'axiome du tiers exclu, dans toute sa généralité, est incompatible avec d'autres principes du Calcul des Constructions Inductives et rend le système incohérent. On peut transformer chaque proposition $P$ que l'on veut démontrer de manière classique en une propriété classiquement équivalente qui pourra être montrée sans avoir recours au tiers exclu. C. Paulin a proposé une méthode de définition de propriétés inductives classiques, celles-ci s'obtiennent par l'ajout d'un constructeur indiquant que la définition est équivalente à sa double négation. On peut ainsi définir un ``type des propositions classiques'' qui est l'ensemble des formules equivalentes à leur double négation. En utilisant les coercions développées par A. Saïbi, ce type peut être vu comme une nouvelle ``sorte '' des propositions classiques ce qui permet des notations très concises tout en garantissant la cohérence.

On sait aussi que pour une certaine classe de formule ($\forall x.\exists y.Q(x,y)$ avec $Q(x,y)$ sans quantificateur), la prouvabilité classique implique la prouvabilité intuitionniste. Le mécanisme permettant de transformer la preuve classique en preuve intuitioniste est non trivial, cependant la méthode de représentation de formules classiques précédemment décrite peut être adaptée de manière à utiliser des techniques de $A$-traduction qui permettent de développer une preuve effectivement intuitionniste mais en suivant un raisonnement classique.

Développement d'un assistant à la démonstration: Coq

Résumé : Coq a acquis une communauté d'utilisateurs académiques et industriels. L'utilisation de cet environnement pour des preuves de grosse taille a posé des problèmes d'efficacité qui ont été partiellement résolus par l'adoption d'une technique de réduction des termes plus efficaces. L'utilisation de Coq à des fins de spécification de logiciel rend nécessaire une réflexion sur le langage de spécification afin de le rendre plus naturel et d'en donner une définition et une interprétation indépendante de l'implantation particulière de Coq utilisée. Un problème crucial est également l'automatisation des preuves. Des procédures de preuves par réécriture sont maintenant proposées. L'utilisateur doit pouvoir construire lui-même des tactiques sophistiquées adaptées à son problème. Ceci nécessite de donner accès aux fonctions élémentaires permettant la manipulation des termes ainsi qu'à des stratégies de preuves élémentaires. Une modification essentielle apportée au code cette année est la gestion des notations. Nous utilisions un système de grammaires extensibles ad-hoc qui a été réécrit à l'aide de l'outil camlp4 développé dans le projet Cristal.

Grammaires extensibles



Participants : Bruno Barras , Daniel [ de]Rauglaudre


Daniel de Rauglaudre du projet Cristal a réécrit la partie "analyse syntaxique" du système Coq, en utilisant Camlp4, un système de grammaires extensibles qu'il a développé. Il en résulte une meilleure compréhension de cette partie de Coq, une accélération de l'analyse syntaxique (6 à 7 fois plus rapide), et une amélioration de son interface en particulier par des messages d'erreur plus explicites. Bruno Barras a poursuivi cet effort et a restructuré également le système d'affichage. Celui-ci apparaît maintenant mieux comme le procédé inverse de l'analyse syntaxique.

Patrick Loiseleur a développé une grammaire spécifique pour les expressions arithmétiques permettant l'usage des notations infixes usuelles.

Réduction



Participant : Bruno Barras


B. Barras a réécrit des fonctions de réduction, en implantant une machine abstraite de réduction héritant à la fois de la machine abstraite de Krivine (KAM) et des travaux sur les substitutions explicites. Il est ainsi possible de combiner plusieurs substitutions, ce qui évite de parcourir le terme à réduire un trop grand nombre de fois. Ceci est particulièrement intéressant pour les termes de taille importante.

Deux stratégies ont été implantées:

Recherche dans une bibliothèque



Participant : David Delahaye , Benjamin Werner


David Delahaye, dans le cadre de son stage de DEA sous la direction de Benjamin Werner (INRIA) et Roberto Di Cosmo (ENS) a conçu et réalisé un outil de recherche dans une bibliothèque de preuves Coq en utilisant le type comme motif et ``modulo isomorphismes''. Il a ainsi développé une théorie pour Coq qui est essentiellement une généralisation de l'axiomatisation pour le $\lambda{}$-calcul typé associé aux Catégories Cartésiennes Fermées (CCC) en prenant en compte le polymorphisme et les types dépendants. De là, il a montré quelques propriétés de base telles que la correction, l'incomplétude (par rapport au calcul inductif des constructions), la décidabilité et a mis en évidence la nécessité de propager les termes de conversion dans les preuves d'isomorphismes (au niveau du passage au contexte). Ainsi, son implémentation caractérise, dans un souci de performances, le sous-ensemble congruent de cette théorie permettant d'ignorer les convertisseurs. Elle est constituée de deux outils. Le premier est interne à Coq et effectue la recherche dans l'environnement courant. Le deuxième est indépendant et importe, sous une forme allégée, toute la bibliothèque de Coq.

Nouvelles tactiques



Participants : Eduardo Giménez , Amokrane Saïbi


Tactiques de Réécriture

La réécriture est le processus qui consiste à utiliser des équations comme des règles de transformation afin de simplifier des termes. Elle peut aussi être utilisée pour démontrer des égalités. Plusieurs difficultés rendent l'automatisation du raisonnement équationnel délicate:

Pour répondre à toutes ces exigences, A. Saïbi a adapté au système Coq le langage de conversions et de conversionals introduit par L. Paulson dans LCF, dans le même esprit que celui des tactiques et tacticals. Ce langage consiste en un package modulaire de fonctions ML pouvant être combinées de différentes manières, permettant ainsi à l'utilisateur de définir ses propres stratégies de réécriture (éventuellement très sophistiquées). Cette technique a été adoptée dans les systèmes HOL, Isabelle et Nuprl.

Implantation de nouvelles fonctionnalités.

Eduardo Giménez a implanté de nouvelles tactiques, et intégré des fonctionnalités auxquelles l'utilisateur n'avait pas encore accès. Les plus importantes à mentionner sont :
1.
l'introduction du mécanisme de définition de tactiques paramétrées (commande Tactic Definition);
2.
l'extension de la procédure de décision de tautologies de Coq (tactique Tauto) à des connecteurs logiques introduits par l'utilisateur, et à des types avec contenu calculatoire;
3.
la tactique Decompose, qui permet d'appliquer récursivement un ensemble de règles d'élimination à une hypothèse.

Restructuration et optimisation du code



Participants : Eduardo Giménez , Hugo Herbelin


Eduardo Giménez a travaillé à la restructuration et la modularisation du code existant, notamment en ce qui concerne l'implantation des tactiques de démonstration de Coq. L'objectif était de rendre cette partie du code plus accessible à l'utilisateur, de manière à ce qu'il puisse implanter des procédures de démonstration adaptées à son application particulière. De nouveaux combinateurs de tactiques (``tacticals'') ont aussi été implantés, et devraient faciliter le développement de stratégies de démonstration dans le futur. Comme résultat de cette réorganisation, la taille du code et le nombre total de modules ont été sensiblement réduits. Le noyau du système a été isolé par rapport aux structures de données utilisées par la machinerie de l'éditeur de preuves.

Une boîte à outils contenant diverses fonctions d'utilité pour la manipulation de termes et l'implantation de tactiques est actuellement en construction.

Profitant des foncteurs de O'Caml, Hugo Herbelin a abstrait la structure de certaines des tables globales utilisées dans Coq. Cela a permis de comparer in situ l'efficacité de tables impératives (tables de hachage) et de tables fonctionnelles (arbres balancés). La question est d'importance pour se diriger vers un système auto-certifié correct : la preuve de certification est, a priori, plus simple pour les structures fonctionnelles que pour les structures impératives.

Les tables impératives pour lesquelles la suppression des effets de bord n'a pas entraîné de baisse de performance du système ont été rendues fonctionnelles. Certaines tables d'identificateurs, supposées accélérer le système, se sont avérées le ralentir. Elles ont été supprimées.

Documentation de Coq



Participant : Hugo Herbelin


Mots-clés : Coq, Gallina


Gallina: Gallina est le sous-langage de Coq qui permet la spécification des fonctions et de leurs propriétés

Hugo Herbelin s'est chargé de la réactualisation du manuel de référence et du tutorial de Coq V6.1. Il a en particulier remanié la présentation générale de la théorie. Il a mis en place une version HTML pour ce manuel et dirige actuellement les discussions autour de la définition formelle de Gallina qui doit servir de référence pour la spécification des fonctions et propriétés écrites en Coq.

Eduardo Giménez prépare un document décrivant comment implanter une nouvelle tactique dans Coq. Destiné à l'utilisateur, il devra remplacer l'actuel chapitre 13 du manuel.

Un système de traitement de démonstrations partielles



Participants : Gilles Dowek , Benjamin Werner


Mots-clés : métavariables,substitutions explicites,auto-vérification


Gilles Dowek et Benjamin Werner ont entrepris l'implémentation de noyau d'un nouveau système de traitement de démonstrations, permettant le traitement de démonstrations partielles, en utilisant le formalisme développé par César Muñoz dans sa thèse (cf [*]). L'objectif est que ce système soit suffisamment simple et petit pour pouvoir être spécifié et certifié, suivant la méthode développée par Bruno Barras (cf [*]).

Noyau indépendant de vérification de preuves



Participant : Ajay Chander


 Ajay Chander a identifié un sous-ensemble du système Coq permettant de revérifier des termes de preuves. L'idée est qu'une bibliothèque développée par une personne $X$ puisse être chargée par un utilisateur $Y$ en revérifiant de manière rapide mais sûre que les preuves sont valides. Le vérificateur agit directement sur la représentation interne de bas niveau des preuves en évitant ainsi de refaire les étapes d'analyse syntaxique, de résolution des notations implicites ou d'exécution des tactiques de recherche de preuve. Cette technologie pourrait s'appliquer à une preuve chargée à travers le réseau qui pourrait être localement revérifiée avant d'en extraire un code qui s'exécuterait localement et serait garanti correct par rapport à la spécification requise. Ce travail est décrit dans [60].

Preuves de programmes

Preuve de programmes impératifs



Participants : Jean-Christophe Filliâtre


Mots-clés : Validation de programmes, Logique de Hoare, Réalisabilité, Théorie des Types


Coq offre un cadre puissant pour le développement de programmes purement fonctionnels certifiés corrects. Cependant, pour des raisons d'efficacité évidentes, il est également nécessaire de pouvoir raisonner sur des programmes impératifs, c'est-à-dire comprenant aussi des références, des tableaux ou des exceptions. L'idée est alors d'exprimer la sémantique du programme comme une expression purement fonctionnelle à laquelle on peut appliquer les techniques connues.

Dans le cadre de son travail de thèse, Jean-Christophe Filliâtre s'intéresse aux preuves de programmes mélangeant des traits impératifs et des traits fonctionnels (dans le but de prouver des programmes Caml, mais les résultats s'appliquent à la preuve de programmes purement impératifs, tels que des programmes C ou Pascal). Il a défini une traduction des programmes impératifs vers des programmes fonctionnels de même sémantique. Il devient ainsi possible de manipuler ces programmes dans le Calcul des Constructions en conservant leur caractère calculatoire. Une telle traduction s'inspire des travaux autour des monades (Wadler, Moggi) mais en raffinant cette notion : on détermine quels sont les effets de chaque sous-expression du programme afin d'en faire une traduction la plus proche possible du programme fonctionnel que l'on pourrait écrire à la main.

L'étape suivante consiste à comprendre comment spécifier des programmes impératifs et comment en construire des preuves d'une façon modulaire par rapport à leur structure. En ce qui concerne les programmes purement impératifs, la logique de Hoare constitue un cadre bien défini et abondamment étudié d'un point de vue théorique. Il s'avère en fait que la traduction fonctionnelle de programmes impératifs précédemment décrite associée à la technologie de preuve de programmes fonctionnels partiellement annotés développée par Catherine Parent donne les mêmes obligations de preuves que la logique de Hoare traditionnelle. Mais surtout, cette technique de preuve de programmes peut être facilement étendue aux principaux traits de programmation tels que les tableaux, les fonctions récursives et les exceptions, ce qui n'est pas le cas de la logique de Hoare traditionnelle. Ce rapport entre logique de Hoare et réalisabilité a fait l'objet d'un rapport de recherche [52].

Un autre avantage de cette méthodologie est qu'elle permet de parler dans un même langage (ici le Calcul des Constructions Inductives) d'un programme, de sa spécification, de sa formule de correction et de sa preuve de correction. En particulier, pour faire la preuve d'un programme, on pourra utiliser un autre principe de récurrence que celui basé sur la syntaxe. Jean-Christophe Filliâtre implante actuellement un module de preuve de programmes impératifs dans le système Coq.

Récursion bien fondée



Participante : Cristina Cornes


Mots-clés : types inductifs, analyse par cas, récurrence


problème d'unification: équation $a=b$ où certaines variables de $a$ et/ou de $b$ peuvent dénoter des valeurs inconnues à trouver.

problème de filtrage: problème d'unification $a=b$$b$ ne contient pas de variable à résoudre.

Dans le but d'automatiser les preuves de terminaison de fonctions récursives définies équationnellement, C. Cornes a étudié la gestion des principes de récurrence et d'analyse par cas dans une théorie des types avec types inductifs primitifs. À partir de la méthode de synthèse de preuves proposée par Gilles Dowek pour les Systèmes de Types du Cube, et celle proposée par Hassan Saïdi pour le Système T de Gödel, C. Cornes a proposé une méthode de synthèse de preuves pour le Calcul des Constructions Inductives. Cette méthode est complète et fournit un cadre général où définir des stratégies de recherche de preuves. Malgré la complétude, cette méthode n'est pas intéressante pour une implantation car elle ne termine pas. C. Cornes a donc étudié des restrictions qui permettent de résoudre une certaine classe de problèmes de filtrage et de problèmes d'unification du second ordre dans $CCI$.

Ce travail a permis d'incorporer au système Coq les définitions de fonctions par filtrage de motifs, dans une syntaxe proche de celle des langages de programmation à la ML. L'implantation de la stratégie d'unification permettra à terme d'ajouter au système Coq des heuristiques pour prouver la terminaison des fonctions récursives définies par équations; en particulier, elle permettra d'étendre la commande Recursive Definition proposée par Pascal Manoury dans le système Coq.

Analyse de programmes fonctionnels par le typage



Participant : Frédéric Prost


On utilise de plus en plus souvent des systèmes de types annotés en vue d'analyser les programmes. Cependant cette méthode interdit certaines optimisations lorsque. pour maintenir la cohérence du typage, on contraint un morceau de code à avoir un type unique.

F. Prost a étudié les caractéristiques à donner aux systèmes de typages pour éviter de tels inconvénients. Il a développé une analogie entre l'utilisation des types conjonctifs et le polymorphisme à la ML. Il est en effet apparu que les différents types attribués pour un même morceau de code se conforment tous à un schéma précis et n'apparaissent que dans des $\beta$-redexes. Cette nouvelle approche permet notamment de transformer des algorithmes compliqués de type Data-Flow en un algorithme de typage semblable à celui de Milner pour ML, puis en une substitution de variable de marques par des marques. Cette réflexion est l'objet de [43]. F. Prost a, en collaboration avec F. Damiani développé un autre angle d'approche basé sur l'utilisation de types intersection (voir [30]).

Formalismes et méta-théorie

Résumé : Le langage utilisé par Coq pour la spécification des problèmes et pour la représentation interne des preuves n'est pas figé. Au contraire, celui-ci évolue pour pouvoir intégrer des notations de haut niveau essentielles pour les spécifications comme par exemple les modules ou bien les définitions récursives de fonctions. Ces extensions nécessitent des travaux théoriques afin d'assurer la préservation des propriétés fondamentales de cohérence et décidabilité.

Calcul de module au-dessus des systèmes de types purs



Participant : Judicaël Courant


La lourdeur du formalisme est l'un des problèmes majeurs lors de la manipulation formelle de preuves. En particulier, il est très difficile de réaliser des bibliothèques de preuves qui soient à la fois utilisables et génériques. L'approche des systèmes de modules des langages de programmation à la SML semble de ce fait intéressante. Les avancées récentes en la matière, en particulier les travaux de Leroy, Harper et Lillibridge, permettaient d'envisager une adaptation de ces systèmes de modules aux langages de preuves. J. Courant s'est attaché à améliorer ces systèmes, de façon à ce qu'ils possèdent la propriété de préservation des types par le calcul (appelée propriété d'auto-réduction) sans perdre leur capacité d'abstraction. La propriété d'auto-réduction a permis d'étudier ces systèmes de modules sous l'angle des réductions. En particulier, J. Courant a montré que la réduction des modules était fortement normalisante et possédait la propriété de confluence. Le calcul ainsi obtenu s'adapte aux Systèmes de Types Purs (PTS). En particulier, il fournit une extension conservative du Calcul des Constructions, qui devrait permettre de mieux modulariser les développements Coq, ainsi que la vérification séparée des différents modules les composant. Les deux aspects -- preuve et programmation -- de ce travail ont notamment fait l'objet de deux communications [27,28].

Représentation de preuves partielles dans le calcul des constructions

 

Participant : César Muñoz


Mots-clés : Substitutions explicites, Preuves partielles, Synthèse de preuves


Calcul avec substitutions explicites: Calcul dans lequel l'opération de substitution fait partie du langage formel.
Preuves partielles: Preuve contenant des parties restant à construire.
Métavariables: Expression du $\lambda$-calcul permettant de nommer un trou dans un terme.

Afin de voir la construction de preuves comme un processus incrémental de construction de termes, il est nécessaire d'étendre le $\lambda$-calcul avec de nouvelles constructions. On considère, d'une part, des métavariables typées pour représenter les parties d'une preuve restant à construire, et, d'autre part, on rend explicite l'opération de substitution afin de gérer les problèmes de capture de variables liées dans un terme contenant des métavariables.

Malheureusement, la théorie des calculs avec substitutions explicites et métavariables typées est plus complexe que celle du $\lambda$-calcul. Et, plus grave encore, en général elle ne jouit pas des mêmes propriétés.

C. Muñoz propose un calcul avec substitutions explicites et métavariables typées pour les systèmes avec types dépendants, et notamment pour le calcul des constructions, permettant de représenter les preuves partielles. Il démontre que ces systèmes vérifient les propriétés essentielles des calculs typés : l'unicité du type, la préservation du type par réduction, la confluence, la normalisation faible et la décidabilité du typage.

Il donne enfin une application de ce formalisme à la synthèse de preuves dans le calcul des constructions. La méthode présentée combine une procédure d'énumération des termes avec une technique d'unification d'ordre supérieur à l'aide de substitutions explicites où les variables d'unification sont codées comme des métavariables. ce travail est décrit dans sa thèse [20].

Logique modale S4 et substitutions explicites



Participant : Jean Goubault-Larrecq [G.I.E. Dyade]


Mots-clés : logique modale, substitutions explicites


Les travaux des années précédentes sur une interprétation à la Curry-Howard de la logique modale S4 intuitionniste [GL96a,GL96b,GL96c], utilisant une tour de $\lambda$-calculs avec substitutions explicites et donnant une explication mathématiquement élégante de mécanismes d'évaluation et de citation à la Lisp, se sont poursuivis cette année par un rapport [53] prouvant les dernières propriétés intéressantes des calculs des rapports précédents: terminaison faible dans le cas typé, et confluence du calcul avec la règle $\eta$-modale. L'extension à la logique modale S4 classique est en cours.

Une retombée de ce travail est la preuve de terminaison faible de ces calculs dans le cas simplement typé, qui s'adapte aux cas plus simples des $\lambda$-calculs avec substitutions explicites [35].

Ce travail a conduit à l'examen des traductions connues de la logique intuitionniste en S4, ce qui devrait fournir a priori de nouveaux calculs par réécriture implémentant le $\lambda$-calcul. Le plus prometteur provient des calculs ci-dessus, par un examen de la sémantique de Kripke comparée des deux logiques, et fournit apparemment un calcul du premier ordre ayant toutes les propriétés du $\lambda$-calcul: confluence, standardisation, existence d'étiquetages gardant trace des rédex à travers les réductions (à la Lévy), normalisation forte dans le cas simplement typé, caractérisation des termes fortement normalisants (resp. normalisants, resp. résolubles) comme étant les termes typables dans certains systèmes de types conjonctifs ...mais il n'implémente pas le $\lambda$-calcul. On peut en fait montrer qu'il implémente un calcul strictement compris entre le $\lambda$-calcul par valeur de Plotkin et le $\lambda$-calcul complet (par nom). Pour implémenter le $\lambda$-calcul complet, il suffit de passer par une traduction supplémentaire du $\lambda$-calcul complet vers le $\lambda$-calcul par valeur, ce qui peut se faire de nombreuses façons différentes. Il reste à examiner si ce calcul est intéressant, ou utilisable pour implémenter une machine à réduction pour le noyau d'un prouveur comme Coq.

Il suffirait aussi pour que ce calcul implémente le $\lambda$-calcul complet de lui ajouter une règle, et on obtient alors un calcul proposé par Healfdene Goguen à TYPES'96 en décembre 1996; malheureusement, ce dernier ne termine pas même dans le cas typé, et même sans faire de $\beta$-contraction (contre-exemple communiqué à H. Goguen en juillet 1997).

Comparaison entre théorie des types et théorie des ensembles



Participant : Benjamin Werner


Le formalisme du système Coq est une théorie des types, le Calcul des Constructions Inductives (CCI) tandis que les mathématiques usuelles sont généralement développées dans le formalisme de la théorie des ensembles intuitioniste de Zermelo-Frænkel (ZFI). En s'appuyant sur des travaux de Peter Aczel et Thierry Coquand, Benjamin Werner a proposé deux codages mutuels de chaque théorie dans l'autre. Il a ainsi établi l'équivalence des pouvoirs expressifs des deux théories. Le codage de ZFI dans CCI a été formellement vérifié dans Coq et fait maintenant partie de la distribution du système.

Plus précisément, il a vérifié que les univers de Coq étaient équivalents à l'existence des cardinaux inaccessibles dans ZF. Ces travaux sont exposés dans [46].

Benjamin Werner a également proposé une nouvelle formulation de l'axiome du choix dans CCI. Il a montré que cette formulation était suffisante pour vérifier l'axiome du choix ensembliste dans le codage de ZF. Il a également montré que cet axiome permettait de dériver la loi du tiers-exclu dans Coq, proposant ainsi une transcription en théorie des types du paradoxe de Diaconescu [58].

Étude et extensions du Calcul des Constructions Inductives



Participant : Eduardo Giménez


Toujours dans le but de simplifier la formulation de la théorie de base de Coq, E. Giménez a continué à travailler sur une extension de cette théorie par des types inductifs et co-inductifs. Cette extension intègre le calcul proposé dans sa thèse et les règles de typage des définitions récursives proposées par Mendler pour le système Nuprl. Un article sur ce sujet est en préparation.

Une nouvelle formulation de la théorie des types



Participant : Gilles Dowek


Gilles Dowek a achevé la rédaction d'un article consacré à la reformulation du Calcul des constructions dans un cadre non typé, cet article a été publié dans les actes du symposium Types [34].

Démonstration automatique



Participants : Gilles Dowek , Thérèse Hardin , Claude Kirchner


Mots-clés : élimination des coupures, réécriture, résolution d'ordre supérieur


Gilles Dowek, Thérèse Hardin (de l'Université Pierre et Marie Curie (Paris 6) et du projet Para) et Claude Kirchner (du projet Protheo) ont poursuivi leur collaboration consacrée à l'application à la logique d'ordre supérieur de techniques de preuves de logique du premier ordre.

Gilles Dowek a proposé une notion de coupure associée aux axiomes de la présentation au premier ordre de la logique d'ordre supérieur et a adapté la démonstration du théorème d'élimination des coupures dans ce cadre. Ces travaux ont été publiés dans les actes de la conférence Theorem proving in higher order logics [33].

Gilles Dowek, Thérèse Hardin et Claude Kirchner ont entrepris la rédaction d'un article consacré à la recherche de démonstrations modulo un système de réécriture transformant des propositions atomiques en des propositions quelconques.

Application des modèles en termes de jeux du calcul à la conception de machines à environnement



Participant : Hugo Herbelin


Mots-clés : Modèles en terme de jeux du calcul, machines à environnement


calcul d'ordre supérieur: langage de fonctions dans lequel certaines fonctions (des fonctionnelles), prennent comme arguments d'autres fonctions d'arité arbitraire (et récursivement...)
arité: nombre d'arguments qu'une fonction attend pour s'évaluer complétement

De l'interaction aux machines à environnement

Hugo Herbelin a poursuivi cette année sa collaboration avec Pierre-Louis Curien (ENS) sur les applications des modèles en termes de jeux du calcul. Une de ses applications est de fournir des machines à environnement originales pour l'évaluation des fonctions du lambda-calcul. L'aspect opérationnel d'un terme du lambda-calcul est caractérisé par l'arbre de Böhm associé à ce terme. Dans le cas du lambda-calcul simplement typé, une notion encore plus épurée caractérisant l'aspect opérationnel du lambda-calcul est celle d'arbre de Böhm abstrait. Cette notion est l'objet d'un article soumis par Pierre-Louis Curien et Hugo Herbelin [29]. A l'appui de cette notion, une analyse de différentes machines à environnement inspirées de l'approche jeux sont présentées et comparées.

Gestion de l'arité des fonctions dans le système F de Girard-Reynolds

Une extension de la notion d'arbre de Böhm abstrait au cas du lambda-calcul d'ordre supérieur est l'objet principal de recherche théorique d'Hugo Herbelin pour cette année. Les applications à attendre sont : une meilleure formalisation de la notion d'arité en calcul d'ordre supérieur et en particulier dans Coq; la possibilité de machine à environnement tirant parti de l'arité pour être plus efficace; l'éventualité d'un modèle en terme du jeux de la logique d'ordre supérieur.

Preuves de normalisation



Participant : Benjamin Werner


Pour un $\lambda$-calcul typé, la propriété de normalisation forte correspond à la terminaison des calculs; c'est aussi la partie logiquement la plus complexe de la preuve de cohérence du formalisme logique correspondant. En collaboration avec Paul-André Melliès, de l'université d'Edinburgh, Benjamin Werner a proposé une nouvelle technique de preuve [40], qui permet de prouver cette propriété syntaxique en s'appuyant sur la construction d'un modèle. On illustre mieux ainsi les liens entre syntaxe et sémantique.

Zippers



Participant : Gérard Huet


Les ``zippers'' sont des structures de données applicatives permettant la représentation de structures mutables, avec accès et mutation en temps constant. Il y a une manière uniforme de transformer la signature d'une algèbre libre en l'algèbre de ``zippers'' correspondante. Ce travail peut servir de base à la conception d'un éditeur structuré de structures arborescentes, l'espace de navigation et d'édition étant le zipper approprié.

Ce travail, présenté l'an dernier à FLoC'96, a été accepté pour publication cette année [21].

Arbres de Böhm rationnels et algébriques



Participants : Gérard Huet , Henri Laulhère


Les arbres de Böhm, formes normales à l'infini des $\lambda$-termes, peuvent être présentés par des systèmes récursifs de combinateurs. Un tel système fini présente un arbre de Böhm rationnel, au sens d'avoir un nombre fini de sous-arbres distincts. L'égalité extensionnelle de ces arbres (ou égalité dans le modèle $D_\infty$)est décidable par un algorithme de mémorisation d'équivalences rationnelles. Ce travail a fait l'objet d'un article accepté dans Math. Struct. in Comp. Science [22].

Les arbres de Böhm rationnels permettent de représenter des algorithmes réactifs sur des structures de données co-inductives. En particulier, on peut y coder les primitives du langage de programmation réactif Lustre. Henri Laulhère investigue cette traduction, ainsi que les problèmes algorithmiques liés à l'implémentaion efficace de l'algorithme de décision, dans le cadre de sa thèse. Un premier résultat, montrant comment représenter les transducteurs rationnels fidèlement dans les arbres de Böhm rationnels, a fait l'objet d'une conférence invitée au congrès TACS'97 à Sendai (Japon) [39].

Les arbres de Böhm rationnels sont la structure fonctionnelle correspondant aux transducteurs finis. Il reste à comprendre quels sont les formalismes fonctionnels à mettre en correspondance avec d'autre types d'automates. En particulier, il faut comprendre comment les problèmes de décidabilité de chacune des approches se correspondent. Henri Laulhère explore des extensions du formalisme pour définir des arbres de Böhm algébriques.



previous up next contents Précédent : Logiciels Remonter : Projet COQ, Spécifications et preuves Suivant : Actions industrielles