Participants : Damien Doligez, Georges Gonthier
Mots clefs : architecture multiprocesseur, parallélisme asynchrone, concurrence, ramasse-miettes, preuve de programme, démonstration automatique
Comme décrit dans leur article de POPL 94 et dans le rapport d'activité 1994, D. Doligez et G. Gonthier ont conçu, modélisé et prouvé correct un algorithme de récupération de mémoire concurrent, portable et efficace, mettant en oeuvre l'architecture auparavant décrite par D. Doligez et X. Leroy (projet CRISTAL) dans leur article de POPL 92. Par le biais d'un modèle rigoureux et détaillé, ils ont pu mettre au point un algorithme de récupération de mémoire parfaitement concurrent ; bon nombre des détails les plus délicats de l'algorithme ont été fixés par la preuve formelle de sa correction.
G. Gonthier et D. Doligez ont terminé en mars la vérification formelle et mécanique de cet algorithme concurrent de récupération de mémoire, ce qui en fait le premier algorithme de ce type à avoir été à la fois mis en oeuvre dans une application réelle (Concurrent Caml light) et rigoureusement validé par une preuve de correction formelle acceptée par un vérificateur automatique. Ainsi, on utilise la preuve automatique pour résoudre l'opposition entre efficacité et sûreté.
Le travail a d'abord consisté à écrire l'algorithme (environ
100 lignes de pseudo-code C) dans le formalisme TLA de L. Lamport
(268 lignes), et dans le format d'entrée du système TLP de
Engberg (un traducteur bâti sur le prouveur LP de Garland et
Guttag) (791 lignes) ; puis on a formulé un invariant assurant la
sûreté de l'algorithme (247 lignes), que l'on a enfin prouvé avec
un script TLP de plus de
lignes, en plus de 24h de temps machine. La preuve a
pris 9 hommes/mois. Un exemple de cette taille met en lumière les
faiblesses des démonstrateurs de théorèmes, en particulier pour
la gestion de la complexité. Ainsi le format de preuve structurée
fourni par le traducteur TLP s'est avéré être indispensable pour
organiser les quelques
sous-lemmes de la preuve.
Chaque étape successive (analyse, implémentation, formalisation, preuve, et vérification) a permis de corriger plusieurs erreurs dans la précédente, et quelques unes dans les étapes antérieures, ce qui démontre à la fois le bon étagement de la démarche et également l'utilité de la mener à terme : ainsi la preuve formelle contenait une erreur majeure qui n'a été révélée qu'au cours de la vérification de la dernière étape de l'algorithme (mais, par chance, elle n'était pas répercutée dans l'algorithme même).
L'algorithme, sa formalisation et sa preuve formelle sont décrits dans la thèse de D. Doligez [1], soutenue le 5 mai 1995.