A Formalization of Abstract Rewriting in Agda

Cet article présente une formalisation constructive des systèmes de réécriture abstraits dans l'assistant de preuve Agda, visant à éliminer l'usage de la logique classique, à affiner les critères de terminaison et de confluence, et à illustrer cette approche par une formalisation du lambda-calcul.

Sam Arkle, Andrew Polonsky

Publié Thu, 12 Ma
📖 6 min de lecture🧠 Analyse approfondie

Each language version is independently generated for its own context, not a direct translation.

Imaginez que vous êtes un grand chef cuisinier (le mathématicien) qui a écrit un livre de recettes très célèbre, appelé Terese. Ce livre explique comment les ingrédients (les termes) peuvent être transformés en d'autres ingrédients selon certaines règles (la réécriture). Parfois, si vous mélangez trop, vous ne savez plus comment revenir en arrière ou si vous allez finir par une soupe infinie.

Les auteurs de cet article, Samuel et Andrew, ont décidé de prendre ce livre de recettes et de le réécrire entièrement pour un robot très rigoureux nommé Agda. Ce robot est spécial : il ne croit que ce qu'on peut construire avec ses propres mains. Il refuse les "magies" de la logique classique (comme dire "c'est vrai ou faux, je ne sais pas lequel, donc c'est vrai").

Voici l'explication de leur travail, imagée et simplifiée :

1. Le Projet : Construire une cuisine sans magie

Dans le monde classique, on peut dire : "Il existe une solution, même si on ne sait pas laquelle." Pour Agda, c'est interdit. Il faut montrer la solution, comme si on devait donner la recette exacte pour faire le gâteau, pas juste dire "il y a un gâteau quelque part".

Les auteurs ont donc pris les règles de base de la réécriture (comment les termes changent) et les ont codées dans Agda. Leur but ? Créer une fondation solide pour que d'autres puissent construire des théories de programmation plus complexes, comme des langages de programmation ou des systèmes de calcul, sans avoir à tout réinventer.

2. Les Concepts Clés (avec des analogies)

Pour comprendre leur travail, imaginons un labyrinthe où vous êtes un explorateur.

  • La Réécriture (Rewriting) : C'est comme avancer dans le labyrinthe. Vous avez des règles : "Si vous voyez un mur rouge, tournez à gauche".
  • Termination (Normalisation) : C'est la capacité de sortir du labyrinthe.
    • Faible termination : Vous sortez un jour, mais vous avez peut-être fait des détours inutiles.
    • Forte termination (Strong Normalization) : Peu importe le chemin que vous choisissez, vous finirez toujours par sortir. C'est plus fort.
    • Le problème : Dans la logique classique, on dit souvent "si on ne peut pas rester coincé à l'infini, alors on sort". Mais pour Agda, il faut prouver comment on sort. Les auteurs ont dû trouver des moyens de prouver cela sans tricher.
  • Confluence (Church-Rosser) : Imaginez que vous partez d'un point A et que vous avez deux chemins différents (gauche et droite). La confluence, c'est la garantie que si vous continuez à marcher, vous finirez par vous retrouver au même endroit (un point B). C'est comme dire : "Peu importe l'ordre dans lequel vous mélangez vos ingrédients, vous obtiendrez le même plat final."

3. Les Découvertes Importantes

Les auteurs ont fait trois choses géniales en nettoyant ce livre de recettes pour le robot Agda :

A. Ils ont éliminé la "magie" (Logique Classique)

Dans le livre original, pour prouver certaines choses, les auteurs utilisaient des raccourcis magiques (comme le "Principe du Tiers Exclu" : soit c'est vrai, soit c'est faux, point final).
Les auteurs ont dit : "Non, on va faire ça à la main !" Ils ont prouvé que pour la plupart des systèmes de réécriture (comme ceux qu'on utilise en informatique), on n'a pas besoin de magie. On peut tout construire. C'est comme passer d'une recette qui dit "ajoutez un peu de sel au goût" à une recette qui dit "ajoutez exactement 3 grammes de sel".

B. Ils ont trouvé de nouvelles règles (La Hiérarchie)

En regardant de très près comment les explorateurs sortent du labyrinthe, ils ont découvert de nouvelles catégories.
Ils ont créé une "famille" de propriétés. Par exemple, ils ont défini ce qu'est une "forme minimale" (un point où on ne peut plus avancer). Ils ont montré comment ces nouvelles règles se connectent aux anciennes. C'est comme si, en étudiant les cartes de labyrinthe, ils avaient découvert que certains chemins qui semblaient différents étaient en fait des variantes d'un même chemin secret.

C. Ils ont amélioré le célèbre "Lemma de Newman"

Il y a une règle célèbre en mathématiques appelée le Lemme de Newman. Elle dit : "Si votre labyrinthe a une forte termination (vous sortez toujours) et une faible confluence (les chemins se rejoignent souvent), alors il est parfaitement confluente (tous les chemins se rejoignent)."
Les auteurs ont dit : "Attendez, on n'a pas besoin d'une termination si forte !" Ils ont trouvé une version plus faible et plus générale qui fonctionne tout aussi bien. C'est comme si on découvrait qu'on n'a pas besoin d'un moteur de fusée pour aller à la boulangerie, un vélo suffit, et ça marche mieux.

4. Pourquoi c'est utile ? (L'exemple du Lambda Calcul)

Pour montrer que leur travail n'est pas juste de la théorie abstraite, ils l'ont appliqué au Calcul Lambda (la base mathématique de tous les langages de programmation modernes, comme Haskell ou les fonctions dans Excel).

Ils ont utilisé leur nouvelle bibliothèque pour prouver des choses sur le calcul Lambda. Résultat ?

  • Le robot Agda peut maintenant calculer automatiquement le résultat final d'un programme, au lieu de juste dire "ça marche".
  • Ils ont prouvé que si deux programmes sont équivalents, ils donnent le même résultat (consistance).
  • Ils ont montré que pour vérifier si un programme est fini, on peut le faire de manière mécanique.

En résumé

Cet article, c'est comme une rénovation complète d'une bibliothèque de mathématiques.
Les auteurs ont pris des livres écrits avec des stylos magiques (logique classique) et les ont réécrits avec des crayons à papier (logique constructive). Ils ont nettoyé les règles, trouvé des raccourcis plus intelligents, et prouvé que tout fonctionne parfaitement pour les ordinateurs réels.

Leur message final est simple : "Vous n'avez pas besoin de magie pour faire de la programmation fiable. Vous avez juste besoin de règles claires et constructives."

C'est un travail de fond qui permet aux futurs développeurs et chercheurs de construire des logiciels plus sûrs, car chaque étape de leur logique a été vérifiée par un robot qui ne fait jamais d'erreur de raisonnement.