previous up next contents
Précédent : Langages de programmation Remonter : Actions de recherche Suivant : Systèmes de réductions

Substitutions explicites

 

Participants : Bruno Pagano, Thérèse Hardin, Luc Maranget, Jean-Jacques Lévy

Mots clefs : lambda-calcul,programmation fonctionnelle

Les formalismes de substitution explicite (-calculs) sont des systèmes de réécriture du premier ordre, dans lesquels on peut encoder le -calcul de manière à gérer pas à pas la substitution, sans avoir à effectuer d'-conversion. Leur introduction avait pour objectif de donner une description plus précise des processus de compilation et d'exécution des langages fonctionnels. Ces systèmes se sont révélés être des systèmes de réécriture intéressants en eux-mêmes : preuves de confluence non triviales, non-terminaison dans le cas typé. Les termes du -calcul sont des termes clos de ces systèmes, la -réduction est une sous-relation de leur relation de réécriture. Les termes des -calculs peuvent aussi contenir des méta-variables, qui sont donc instanciables par une substitution du premier ordre. Celle-ci n'est pas un procédé de calcul de la -théorie. Les -calculs semblent donc pouvoir exprimer et calculer plus que le -calcul. Il est dès lors intéressant de comprendre si cette ``nouvelle puissance'' est réelle et à quoi elle peut servir.

T. Hardin a apporté un premier élément de réponse à cette question en donnant, en collaboration avec G. Dowek (projet COQ) et C. Kirchner (projet PROTHEO), une nouvelle présentation de l'algorithme d'unification à l'ordre supérieur utilisant le formalisme du -calcul. Grâce à ce formalisme, les principales difficultés de l'algorithme classique liées à l'interaction entre les variables d'unification et les variables ordinaires disparaissent. Les premières sont codées à l'aide des méta-variables, les secondes par des constantes (de de Bruijn). Le problème de l'unification d'ordre supérieur peut ainsi être ramené à un problème d'unification équationnelle, pour lequel les auteurs ont fourni un algorithme adapté. Ce travail a été présenté à la conférence LICS'95. [4]

En réponse aux premières motivations de ces calculs, T. Hardin, L. Maranget et B. Pagano ont décrit la compilation et l'exécution de machines abstraites dans le -calcul. Ce travail avait déjà été fait à plusieurs reprises, mais ne fournissait qu'une preuve de correction de la machine abstraite étudiée. Les résultats obtenus ici sont plus précis et plus généraux: définition d'un cadre commun de description des machines, mise en place d'une bisimulation prouvant que chacune des machines effectue à chaque étape au plus une étape de -réécriture, reconnaissance des stratégies suivies par les machines. Les machines étudiées sont la SECD, la machine de Krivine, la CAM (machines qui partagent l'environnement), mais aussi la FAM (machine qui copie les environnements). Pour la FAM, il s'agit à notre connaissance de la première description complètement formalisée. Ce travail est en cours de soumission.

J.-J. Lévy a étudié avec M. Abadi (du laboratoire DEC/SRC) et B. Lampson (MICROSOFT) sur les évaluations incrémentales du -calcul. Concrètement, il s'agit de comprendre le calcul incrémental du système de ``makefiles'' Vesta, utilisé à DEC/SRC pour développer leurs logiciels (Topaz, Modula-3, etc). Le langage de ce système est fonctionnel, comme celui d'E. Schmidt autrefois utilisé à XEROX-PARC. Il présente l'avantage de calculer les dépendances, et de ne pas les donner a priori comme dans les ``makefiles'' du système Unix. Le groupe Vesta de DEC avait une méthode relativement compliquée pour faire ce calcul incrémental de dépendances. Avec les méthodes standard de la substitution explicite et du -calcul étiqueté, augmenté d'un calcul élémentaire de ``records'', il a été possible de donner une solution assez simple à ces calculs. Un article [8] est soumis à la conférence ICFP 96.


previous up next contents
Précédent : Langages de programmation Remonter : Actions de recherche Suivant : Systèmes de réductions