• Aucun résultat trouvé

Langages basés sur la réécriture

Dans le document Réécriture et compilation de confiance (Page 29-33)

de sélectionner les règles appliquées, en donnant une priorité, mais les règles sont

appli-quées à toutes les positions dans le terme. D’autres stratégies permettent de spécifier les

positions où appliquer les règles.

1.2.3. Réécriture modulo une théorie

Les termes sont utilisés pour représenter les objets du calcul. Certaines théories

asso-ciées à ces termes, comme l’associativité, la commutativité ou les éléments neutres sont

communément utilisées lors de la description du problème à modéliser à l’aide de règles

de réécriture.

Ces théories équationnelles définissent des classes d’équivalence entre les termes, et

afin de faciliter la définition des règles de réécriture, on s’intéresse à la définition des

opérations sur les termes modulo cette théorie équationnelle.

Pour introduire cette notion, nous allons nous baser sur un exemple : le filtrage

associatif-commutatif. Cela permet de modéliser le calcul dans les groupes ou sur d’autres

structures algébriques dotées d’opérateurs commutatifs et associatifs. Typiquement, cela

permet quand on calcule sur les entiers, de ne pas avoir à spécifier les cas des différentes

permutations.

Exemple 3. Le symbole d’arité2 «add» est associatif-commutatif (AC). Les axiomes

d’associativité et commutativité sont les suivants :

∀x, y; add(x, y) =add(y, x)

∀x, y; add(x, add(y, z)) =add(add(x, y), z).

– Le problème de filtrageadd(x, y)add(a, b)possède alors deux solutions distinctes

modulo AC : σ

1

={x7→a, y7→b} etσ

2

={x7→b, y7→a}.

– Le problème de filtrageadd(x, y)add(add(a, b), c)possède quant à lui6solutions

modulo AC :

σ

1

={x7→a, y7→add(b, c)} σ

2

={x7→add(b, c), y7→a}

σ

3

={x7→b, y7→add(a, c)} σ

4

={x7→add(a, c), y 7→b}

σ

5

={x7→c, y7→add(a, b)} σ

6

={x7→add(a, b), y 7→c}

Dans cet exemple, on voit informellement ce qu’est un axiome. Une théorie équationelle

est l’ensemble des classes d’équivalence sur une structure modulo un ensemble d’axiomes.

1.3. Langages basés sur la réécriture

Les systèmes d’équations et les systèmes de réécriture permettent de spécifier des

problèmes et offrent la puissance des machines de Turing [Dau89]. Ces spécifications

doivent ensuite être rendues exécutables.

1.3.1. La réécriture comme paradigme de calcul

La logique de réécriture offre par exemple un cadre adéquat pour la définition d’un

langage de programmation.

Étant donnée une théorie dans la logique de réécriture représentée par un système de

réécritureR et un termet clos, nous cherchons tous les termest

0

vérifiant

t→

R

t

0

.

On doit pour cela explorer toutes les dérivations obtenues à partir det en appliquant

les règles deR. Cette recherche de solutions peut être considérée comme une procédure

algorithmique, ou comme une sémantique opérationnelle d’un langage de programmation

basé sur la logique de réécriture. Un programme d’un tel langage est constitué d’un

ensemble de règles de réécriture et d’un terme de départ.

Dans le cas où le système R n’est pas confluent, il est possible d’obtenir suivant

l’ordre d’application des règles plusieurs résultats. Ceci permet de modéliser l’évolution

de systèmes non-déterministes comme c’est le cas des simulations de protocoles réseau

ou la recherche de preuves.

1.3.2. Des langages basés sur la réécriture

De nombreux langages de programmation ont été conçus pour exploiter les concepts

de la réécriture.OBJ[GWM

+

93] peut être considéré comme l’aïeul de cette lignée.

OBJ Ce projet initié par Joseph Goguen [Gog78], puis développé en collaboration avec

Kokichi Futatsugi, Jean-Pierre Jouannaud et José Meseguer [GWM

+

93] met l’accent

sur le formalisme de spécification et l’expressivité du langage. Il propose de définir des

signatures avec inclusion de sortes, des systèmes de réécriture modulo toutes les

com-binaisons de l’associativité et la commutativité ainsi que des modules paramétrés et la

notion de vue.

Maude Directement inspiré d’OBJ et introduit en 1996 [CM00], Maude enrichit le

formalisme d’OBJ en intégrant la notion de réflexivité, la programmation objet ainsi

qu’en permettant d’effectuer la réécriture modulo des axiomes plus variés, comme les

éléments neutres.

ASF+SDF Jan Heering et Paul Klint ont mis en route le projet ASF+SDF dans les

années1980, avec pour objectif de définir un environnement de programmation générique

permettant d’éditer, exécuter et déboguer des programmes écrits dans un langage spécifié

par une grammaire [BHKO02b]. Le premier interpréteur vit le jour en1989, et le premier

compilateur en 1993. Il est utilisé par exemple pour effectuer automatiquement de la

rénovation d’applications critiques en COBOL.

1.3. Langages basés sur la réécriture

Elan Le langage Elana été élaboré au sein du projet Protheo à Nancy au début des

années 90 [Vit94]. Elan à été conçu comme cadre logique pour le prototypage de

sys-tèmes de calcul. Une de ses contributions fondamentales est l’introduction d’un langage

de stratégies permettant à l’utilisateur de définir finement comment l’espace de recherche

doit être exploré. Le système Elana beaucoup évolué au cours du temps. Un premier

compilateur à été écrit par Marian Vittek [Vit96], puis un second compilateur du langage

permettant d’utiliser des symboles associatifs-commutatifs à été développé [MK98] ; le

langage de stratégies a été rendu plus expressif par Peter Borovanský [Bor98].

Stratego Eelco Visser, s’inspirant du langageASF+SDF ainsi que du langage de

stra-tégies d’Elan a défini le langage de transformations de programmes Stratego à partir

de 1998 [VBT98]. Dans ce cadre, il est possible de simplifier le langage de stratégies

(supprimant la gestion du non-déterminisme par exemple) pour obtenir un langage de

transformation efficace et simple. Ce projet repose aussi sur l’héritage d’ASF+SDF en

reprenant les techniques d’analyse syntaxique et grammaires.

Les langages à base de réécriture ont permis de traiter des problèmes variés, montrant

la généralité du paradigme de réécriture, ainsi que l’expressivité et la puissance de celle-ci

comme outil de programmation.

Parmi ces applications, on peut citer dans divers domaines :

Les prouveurs de théorèmes

Il existe une implantation du prouveur de prédicatsBen Elan[CK97] ;

Vérification de protocoles

Vérification du protocole d’authentification de Needham-Schroeder [Cir01] ;

Transformation de programmes

La définition d’optimiseurs de programmes en Stratego [VBT98],

Définition d’afficheurs de programmes avec ASF+SDF [BV96], restructuration de

code COBOL [BSV97, BSV98] ;

Compilation

Le compilateur Stratego est lui-même écrit avec Stratego et bootstrappé. Le

compi-lateur d’ASF+SDF est quand à lui décrit avecASF+SDF [BHKO02a] ;

Résolution de contraintes

La combinaison d’algorithmes d’unification [Rin97], la résolution de problèmes de

satisfaction de contraintes [Cas98] ainsi qu’un un algorithme d’unification d’ordre

supérieur [Bor95].

Complétion de systèmes équationnels

Dans le document Réécriture et compilation de confiance (Page 29-33)