Thèse soutenue

Outils et techniques pour la vérification de programmes impératives modulaires

FR  |  
EN
Auteur / Autrice : Mário José Parreira Pereira
Direction : Jean-Christophe Filliâtre
Type : Thèse de doctorat
Discipline(s) : Informatique
Date : Soutenance le 10/12/2018
Etablissement(s) : Université Paris-Saclay (ComUE)
Ecole(s) doctorale(s) : École doctorale Sciences et technologies de l'information et de la communication (Orsay, Essonne ; 2015-....)
Partenaire(s) de recherche : Laboratoire : Laboratoire de recherche en informatique (Orsay, Essonne ; 1998-2020)
établissement opérateur d'inscription : Université Paris-Sud (1970-2019)
Jury : Président / Présidente : Xavier Leroy
Examinateurs / Examinatrices : Jean-Christophe Filliâtre, Xavier Leroy, Jorge Sousa Pinto, Wolfgang Ahrendt, Catherine Dubois, Mihaela Sighireanu, Laurent Fribourg
Rapporteurs / Rapporteuses : Jorge Sousa Pinto, Wolfgang Ahrendt

Résumé

FR  |  
EN

Cette thèse se place dans le cadre des méthodes formelles et plus précisément dans celui de la vérification déductive et du système Why3. Ce dernier fournit un ensemble d'outils pour la spécification, l'implémentation et la vérification à l'aide de démonstrateurs externes. Why3 propose en particulier un langage de programmation adapté à la preuve, appelé WhyML. Un aspect important de ce langage est le code fantôme, à savoir des éléments de programme introduits exclusivement pour les besoins de la spécification et de la preuve. Pour obtenir un code exécutable, le code fantôme est éliminé par un processus automatique appelé extraction. L'une des contributions principales de cette thèse est la formalisation et l'implémentation du mécanisme d'extraction deWhy3. La formalisation consiste à montrer que le programme extrait préserve la sémantique du programme de départ, en s'appuyant notamment sur un système de types avec effets. Ce mécanisme d'extraction a été utilisé avec succès pour obtenir plusieurs modules OCaml corrects par construction, dans le cadre d'une bibliothèque vérifiée de structures de données et d'algorithmes. Cet effort de preuve a conduit à deux autres contributions de cette thèse.La première est une technique systématique pour la vérification de structures avec pointeurs, à l'aide de modèles du tas délimités.Une preuve entièrement automatique d'une structure union-find a pu être obtenue grâce à cette technique. La seconde contribution est un moyen de spécifier un algorithme d'itération indépendamment de son implémentation. Plusieurs curseurs et itérateurs d'ordre supérieur ont été spécifiés et vérifiés en utilisant cette approche.