Thèse soutenue

Méthodes et outils pour la spécification et la preuve de propriétés difficiles de programmes séquentiels

FR  |  
EN
Auteur / Autrice : Martin Clochard
Direction : Claude Marché
Type : Thèse de doctorat
Discipline(s) : Informatique
Date : Soutenance le 30/03/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 : Toccata (Saclay) - Laboratoire de recherche en informatique (Orsay, Essonne ; 1998-2020)
établissement opérateur d'inscription : Université Paris-Sud (1970-2019)
Jury : Président / Présidente : François Pottier
Examinateurs / Examinatrices : Claude Marché, François Pottier, Sandrine Blazy, Alexandre Miquel, Andrei Paskevich, Hubert Comon-Lundh
Rapporteurs / Rapporteuses : Sandrine Blazy, Alexandre Miquel

Mots clés

FR  |  
EN

Résumé

FR  |  
EN

Cette thèse se positionne dans le domaine de la vérification déductive de programmes, qui consiste à transformer une propriété à vérifier sur un programme en un énoncé logique, pour ensuite démontrer cet énoncé. La vérification effective d'un programme peut poser de nombreuses difficultés pratiques. En fait, les concepts mis en jeu derrière le programme peuvent suffire à faire obstacle à la vérification. En effet, certains programmes peuvent être assez courts et n'utiliser que des constructions simples, et pourtant s'avérer très difficiles à vérifier. Cela nous amène à la question suivante: dans le contexte d'un environnement de vérification déductive de programmes basé sur les démonstrateurs automatiques, quelles méthodes appliquer pour réduire l'effort nécessaire à la fois pour spécifier des comportements attendus complexes, ainsi que pour démontrer qu'un programme respecte ces comportements attendus? Pour mener notre étude, nous nous sommes placés dans le cadre de l'environnement de vérification déductive de programmes Why3. La vérification de programmes en Why3 est basée sur la génération de conditions de vérification, et l'usage de démonstrateurs externes pour les prouver, que ces démonstrateurs soient automatiques ou interactifs. Nous avons développé plusieurs méthodes, certaines générales et d'autres spécifiques à des classes de programmes, pour réduire l'effort manuel. Nos contributions sont les suivantes. Tout d'abord, nous ajoutons des fonctionnalités à Why3 pour assister le processus de vérification, notamment un mécanisme léger de preuve déclarative basé sur la notion d'indicateurs de coupures. Ensuite, nous présentons une méthode de vérification d'absence de débordement arithmétique pour une classe d'utilisation des entiers difficile à traiter par les méthodes standards. Enfin, nous nous intéressons au développement d'une bibliothèque générique pour la spécification et la preuve de programmes générateurs de code.