Skip to Main content Skip to Navigation
Theses

Un système de types pragmatique pour la vérification déductive des programmes

Résumé : Cette thèse se place dans le contexte de la vérification déductive des programmes et a pour objectif de formaliser un certain nombre de concepts qui sont mis en œuvre dans l'outil de vérification Why3. L'idée générale est d'explorer des solutions qu'une approche à base de systèmes de types peut apporter à la vérification. Nous commençons par nous intéresser à la notion du code fantôme, une technique implantée dans de nombreux outils de vérification modernes, qui consiste à donner à des éléments de la spécification les apparences d'un code opérationnel. L'utilisation correcte du code fantôme requiert maintes précautions puisqu'il ne doit jamais interférer avec le reste du code. Le premier chapitre est consacré à une formalisation du code fantôme, en illustrant comment un système de types avec effets en permet une utilisation à la fois correcte et expressive. Puis nous nous intéressons à la vérification des programmes manipulant des pointeurs. En présence d'aliasing, c'est-à-dire lorsque plusieurs pointeurs manipulés dans un programme dénotent une même case mémoire, la spécification et la vérification deviennent non triviales. Plutôt que de nous diriger vers des approches existantes qui abordent le problème d'aliasing dans toute sa complexité, mais sortent du cadre de la logique de Hoare, nous présentons un système de types avec effets et régions singletons qui permet d'effectuer un contrôle statique des alias avant même de générer les obligations de preuve. Bien que ce système de types nous limite à des pointeurs dont l'identité peut être connue statiquement, notre observation est qu'il convient à une grande majorité des programmes que l'on souhaite vérifier. Enfin, nous abordons les questions liées à la vérification de programmes conçus de façon modulaire. Concrètement, nous nous intéressons à une situation où il existe une barrière d'abstraction entre le code de l'utilisateur et celui des bibliothèques dont il dépend. Cela signifie que les bibliothèques fournissent à l'utilisateur une énumération de fonctions et de structures de données manipulées, sans révéler les détails de leur implémentation. Le code de l'utilisateur ne peut alors exploiter ces données qu'à travers un ensemble de fonctions fournies. Dans une telle situation, la vérification peut elle-même être modulaire. Du côté de l'utilisateur, la vérification ne doit alors s'appuyer que sur des invariants de type et des contrats de fonctions exposés par les bibliothèques. Du côté de ces dernières, la vérification doit garantir que la représentation concrète raffine correctement les entités exposées, c'est-à-dire en préservant les invariants de types et les contrats de fonctions. Dans le troisième chapitre nous explorons comment un système de types permettant le contrôle statique des alias peut être adapté à la vérification modulaire et le raffinement des structures de données. Nous terminons notre travail sur une étude de cas où nous illustrons comment les solutions proposées dans les trois chapitres de la thèse peuvent être combinées pour vérifier une implémentation non triviale de table de hachage appelée cuckoo hashing.
Document type :
Theses
Complete list of metadatas

Cited literature [86 references]  Display  Hide  Download

https://tel.archives-ouvertes.fr/tel-01533090
Contributor : Léon Gondelman <>
Submitted on : Monday, June 5, 2017 - 6:34:10 PM
Last modification on : Monday, December 9, 2019 - 5:24:07 PM
Document(s) archivé(s) le : Wednesday, September 6, 2017 - 12:13:00 PM

Identifiers

  • HAL Id : tel-01533090, version 1

Citation

Léon Gondelman. Un système de types pragmatique pour la vérification déductive des programmes. Logique en informatique [cs.LO]. Université Paris Saclay, 2016. Français. ⟨tel-01533090v1⟩

Share

Metrics

Record views

123

Files downloads

139