Projet : PROTHEO

previous up next contents
Précédent : Contraintes Remonter : Fondements scientifiques Suivant : Démonstration automatique


   
Réécriture et stratégies

Mots clés : réécriture, programmation fonctionnelle, démonstration automatique, stratégie .

Résumé :

La réécriture est largement utilisée au sein du projet, d'une part comme technique essentielle dans les démonstrateurs et les résolveurs de contraintes que nous développons, d'autre part comme cadre logique pour spécifier et prototyper les outils que nous proposons. Dans ce type d'applications, la formalisation et l'étude des stratégies jouent un rôle important.

Les techniques de réécriture ont été développées depuis les années 1970 et appliquées en particulier au prototypage des spécifications formelles algébriques et à la démonstration de propriétés liées à la vérification de programme.

A l'origine, le but était de trouver un système de réécriture canonique qui permette de prouver la validité d'un théorème équationnel, en réécrivant chaque membre de l'égalité en un même terme. La procédure de complétion de Knuth et Bendix [KB70] a été conçue pour engendrer, quand cela est possible, à partir d'une théorie équationnelle, un système de réécriture confluent et terminant. Ces deux propriétés assurent la complétude de cette méthode pour décider la validité d'un théorème équationnel. Les techniques de réécriture ont ensuite été appliquées à la preuve par récurrence, à la preuve de cohérence et complétude des spécifications équationnelles ou conditionnelles, à la preuve en logique du premier ordre, à la résolution d'équations dans les théories équationnelles ou conditionnelles, et à des domaines plus spécifiques comme les preuves en géométrie ou les preuves de circuits. Les techniques de réécriture se sont avérées extrêmement utiles en démonstration automatique pour simplifier les espaces de recherche, ou pour inclure des procédures de décision de l'égalité dans des démonstrateurs plus généraux. Les démonstrateurs que nous développons tels SPIKE et daTac utilisent largement ces techniques.

Par ailleurs, la réécriture joue un rôle fondamental dans l'évaluation des langages de programmation fonctionnelle. Dans ce domaine, nos travaux ont porté sur le typage, l'introduction de fonctions partielles, la modularité et la paramétrisation des spécifications. La logique de réécriture a été introduite plus récemment [Mes92] comme une logique dans laquelle la déduction correspond à la réécriture concurrente, c'est-à-dire à l'application en une étape de règles de réécriture à différentes positions disjointes dans le terme. Cette logique fournit aussi un cadre permettant de coder d'autres logiques et a été le point de départ de nos travaux sur le système ELAN.

Un autre point commun à l'évaluation des langages fonctionnels et aux démonstrateurs de théorèmes (y compris les assistants de preuves) est l'étude des stratégies. Elles permettent de restreindre l'espace de recherche en sélectionnant certaines branches, de guider les calculs et les déductions en spécifiant quelle règle doit être appliquée à quelle position dans le terme. En programmation fonctionnelle, on peut citer comme exemple la stratégie d'appel par nécessité ou celle d'évaluation paresseuse. En démonstration automatique, il est intéressant de décomposer règles d'inférence et stratégies exprimant le contrôle, car les preuves de correction et de complétude en sont facilitées. Par ailleurs, il est nécessaire d'avoir un langage de stratégies suffisamment puissant pour pouvoir exprimer en particulier l'itération, le raisonnement par cas, les choix déterministes et non déterministes. Nous étudions les stratégies du point de vue de leur spécification et de leurs propriétés, et nous les utilisons pour formaliser les preuves dans les démonstrateurs que nous développons.



previous up next contents
Précédent : Contraintes Remonter : Fondements scientifiques Suivant : Démonstration automatique