223
pages
Français
Documents
Obtenez un accès à la bibliothèque pour le consulter en ligne En savoir plus
Découvre YouScribe en t'inscrivant gratuitement
Découvre YouScribe en t'inscrivant gratuitement
223
pages
Français
Ebook
Obtenez un accès à la bibliothèque pour le consulter en ligne En savoir plus
D´epartement de formation doctorale en informatique
Institut National ´Ecole doctorale IAEM Lorraine
Polytechnique de Lorraine
R´e´ecriture et compilation de confiance
`THESE
pr´esent´ee et soutenue publiquement le 27 novembre 2006
pour l’obtention du
Doctorat de l’Institut National Polytechnique de Lorraine
(sp´ecialit´e informatique)
par
Antoine Reilles
Composition du jury
´Rapporteurs : Pierre Cointe Professeur, Ecole des Mines de Nantes, France
Paul Klint Professeur, Universiteit van Amsterdam, Pays-Bas
Examinateurs : Claude Kirchner Directeur de recherche, INRIA, Nancy, France
´Pierre-Etienne Moreau Charg´e de recherche, INRIA, Nancy, France
´Karl Tombre Professeur, Ecole des Mines de Nancy, INPL, France
Reinhard Wilhelm Professeur, Universit¨at des Saarlandes, Allemagne
Laboratoire Lorrain de Recherche en Informatique et ses Applications — UMR 7503AMis en page avec LT XETable des matières
Remerciements v
Extended Abstract vii
Introduction 1
1. Notions préliminaires 7
1.1. Réécriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.1. Termes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.2. Filtrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.1.3. Systèmes de réécriture . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.1.4. Confluence et terminaison . . . . . . . . . . . . . . . . . . . . . . . 10
1.2. Pouvoir expressif de la réécriture . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.1. Réécriture conditionnelle . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.2. Réécriture sous stratégies . . . . . . . . . . . . . . . . . . . . . . . 12
1.2.3. Réécriture modulo une théorie . . . . . . . . . . . . . . . . . . . . 13
1.3. Langages basés sur la réécriture . . . . . . . . . . . . . . . . . . . . . . . . 13
1.3.1. La réécriture comme paradigme de calcul . . . . . . . . . . . . . . 14
1.3.2. Des langages basés sur la réécriture . . . . . . . . . . . . . . . . . . 14
2. Le langage Tom 17
2.1. Motivations et historique . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2. Le cœur du langage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2.1. Filtrage dans Java . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.2. Mappings : notion d’ancrage . . . . . . . . . . . . . . . . . . . . . . 19
2.2.3. Filtrage associatif . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.2.4. Notations utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.3. Structures de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.3.1. Définition des mappings . . . . . . . . . . . . . . . . . . . . . . . . 26
2.3.2. Contraintes sur les structures de données pour Tom . . . . . . . . 28
2.3.3. Générateurs de structures de données . . . . . . . . . . . . . . . . 29
2.4. Des problèmes à résoudre . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.4.1. Correction du code généré . . . . . . . . . . . . . . . . . . . . . . . 30
2.4.2. Les invariants des structures de données . . . . . . . . . . . . . . . 31
2.4.3. Traversées génériques des arbres . . . . . . . . . . . . . . . . . . . 31
iTable des matières
3. Certification du filtrage 33
3.1. Certifier la compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.1.1. Compilateur certifié . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.1.2. Validation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.2. Particularités de l’environnement : îlot formel . . . . . . . . . . . . . . . . 35
3.2.1. Un cadre plus large. . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3.3. Certifier le filtrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3.1. Ancrage formel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.3.2. Fonction de représentation. . . . . . . . . . . . . . . . . . . . . . . 37
3.3.3. Le langage intermédiaire PIL . . . . . . . . . . . . . . . . . . . . . 39
3.3.4. Processus de validation . . . . . . . . . . . . . . . . . . . . . . . . 45
3.4. Une extension pour Tom et Caml : multi-match . . . . . . . . . . . . . . 53
3.4.1. Sémantique de la séquence. . . . . . . . . . . . . . . . . . . . . . . 54
3.4.2. Correction de la compilation . . . . . . . . . . . . . . . . . . . . . 55
3.5. Génération des contraintes et des obligations de preuve . . . . . . . . . . 57
3.5.1. Algorithme de collecte de contraintes . . . . . . . . . . . . . . . . . 57
3.5.2. Simplification des contraintes . . . . . . . . . . . . . . . . . . . . . 59
3.6. Autres extensions : notation crochet, alias . . . . . . . . . . . . . . . . . . 61
3.6.1. Notations crochet et souligné . . . . . . . . . . . . . . . . . . . . . 61
3.6.2. Alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.6.3. Filtrage de liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
3.7. Implémentation et intégration . . . . . . . . . . . . . . . . . . . . . . . . . 63
4. Structure de données sûre 65
4.1. Des arbres de syntaxe abstraits en Java . . . . . . . . . . . . . . . . . . . 65
4.1.1. Une bibliothèque générique pour représenter des arbres : ATerm . 66
4.1.2. Un générateur d’implantation typée : ApiGen . . . . . . . . . . . 68
4.2. Discussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.2.1. Caractéristiques d’ApiGen pour Java . . . . . . . . . . . . . . . . 69
4.2.2. Améliorations possibles . . . . . . . . . . . . . . . . . . . . . . . . 70
4.2.3. Travaux en rapport. . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.3. Le langage Gom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.3.1. Définir des signatures . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.3.2. Le code généré . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.3.3. Filtrage pour Tom . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.4. Représentants canoniques . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.4.1. Hooks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
4.5. Interactions avec Tom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.5.1. Un exemple plus élaboré : le calcul des structures . . . . . . . . . . 88
4.5.2. L’approche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
4.5.3. Structure de données . . . . . . . . . . . . . . . . . . . . . . . . . . 90
4.5.4. Les invariants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
4.5.5. Les règles du calcul . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
4.5.6. Stratégie d’application et recherche de preuve . . . . . . . . . . . . 97
iiTable des matières
4.6. Synthèse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
4.6.1. Modules dans Gom . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
4.6.2. Le problème des phases . . . . . . . . . . . . . . . . . . . . . . . . 100
5. Les opérateurs associatifs et leur représentation 101
5.1. Opérateurs associatifs et opérateurs variadiques . . . . . . . . . . . . . . . 101
5.1.1. Signature associative . . . . . . . . . . . . . . . . . . . . . . . . . . 101
5.1.2. Signature variadique . . . . . . . . . . . . . . . . . . . . . . . . . . 102
5.2. Représentants canoniques . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
5.2.1. Représentants canoniques pour les termes associatifs . . . . . . . . 103
5.2.2. Représentants canoniques pour les termes variadiques . . . . . . . 104
5.3. Passer de terme associatif à terme variadique . . . . . . . . . . . . . . . . 104
5.4. Liens entre termes variadiques et termes associatifs . . . . . . . . . . . . . 105
5.5. Preuves, utilisant Coq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
5.5.1. Les fonctions de normalisation et transformation . . . . . . . . . . 108
5.5.2. Les théorèmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
5.6. Synthèse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
6. Stratégies de réécriture réflexives en Java 113
6.1. Langages de stratégies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.1.1. Ce qu’on veut pouvoir exprimer. . . . . . . . . . . . . . . . . . . . 113
6.1.2. Tour d’horizon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
6.2. Rendre l’opérateur de récursion μ explicite. . . . . . . . . . . . . . . . . . 123
6.2.1. La μ-expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
6.2.2. Stratégies visitables . . . . . . . . . . . . . . . . . . . . . . . . . . 125
6.3. Filtrage et transformation de stratégies . . . . . . . . . . . . . . . . . . . 125
6.3.1. Les stratégies sont des termes : un mapping pour Tom . . . . . . . 126
6.3.2. Opérateur μ encore plus explicite . . . . . . . . .