Méthodes et outils pour la spécification et la preuve de propriétés difficiles de programmes séquentiels
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
Mots clés contrôlés
Mots clés libres
Résumé
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.