Propriétés relationnnelles pour la spécification et la vérification de programmes C avec Frama-C
Auteur / Autrice : | Lionel Blatter |
Direction : | Pascale Le Gall |
Type : | Thèse de doctorat |
Discipline(s) : | Informatique |
Date : | Soutenance le 26/09/2019 |
Etablissement(s) : | Université Paris-Saclay (ComUE) |
Ecole(s) doctorale(s) : | École doctorale Interfaces : matériaux, systèmes, usages (Palaiseau, Essonne ; 2015-....) |
Partenaire(s) de recherche : | Laboratoire : Mathématiques et informatique pour la complexité et les systèmes (Gif-sur-Yvette, Essonne ; 2006-....) |
établissement opérateur d'inscription : CentraleSupélec (2015-....) | |
Jury : | Président / Présidente : Jean-Christophe Filliâtre |
Examinateurs / Examinatrices : Pascale Le Gall, Jean-Christophe Filliâtre, Alain Giorgetti, Mattias Ulbrich, Mihaela Sighireany, Virgile Prevosto, Nikolaï Kosmatov | |
Rapporteurs / Rapporteuses : Alain Giorgetti, Mattias Ulbrich |
Mots clés
Résumé
Les techniques de vérification déductive fournissent des méthodes puissantes pour la vérification formelle des propriétés exprimées dans la Logique de Hoare. Dans cette formalisation, également connue sous le nom de sémantique axiomatique, un programme est considéré comme un transformateur de prédicat, où chaque programme c exécuté sur un état vérifiant une propriété P conduit à un état vérifiant une autre propriété Q. Les propriétés relationnelles, de leur côté, lient un ensemble de programmes à deux propriétés. Plus précisément, une propriété relationnelle est une propriété concernant n programmes c1; ::::; cn, indiquant que si chaque programme ci commence dans un état si et termine dans un état s0 i tel que P(s1; ::::; sn) soit vérifié, alors Q(s0 1; :::; s0 n) est vérifié. Ainsi, les propriétés relationnelles invoquent tout nombre fini d’exécutions de programmes éventuellement dissemblables. De telles propriétés ne peuvent pas être exprimées directement dans le cadre traditionnel de la vérification déductive modulaire, car la sémantique axiomatique ne peut se référer à deux exécutions distinctes d’un programme c, ou à des programmes différents c1 et c2. Cette thèse apporte deux solutions à la vérification déductive des propriétés relationnelles. Les deux approches permettent de prouver une propriété relationnelle et de l’utiliser comme hypothèse dans des vérifications ultérieures. Nous modélisons ces solutions à l’aide d’un mini-langage impératif contenant des appels de procédures. Les deux solutions sont implémentées dans le contexte du langage de programmation C, de la plateforme FRAMA-C, du langage de spécification ACSL et du plugin de vérification déductive WP. Le nouvel outil, appelé RPP, permet de spécifier une propriété relationnelle, de la prouver en utilisant la vérification déductive classique, et de l’utiliser comme hypothèse dans la preuve d’autres propriétés. L’outil est évalué sur une série d’exemples illustratifs. Des expériences ont également été faites sur la vérification à l’exécution de propriétés relationnelles et la génération de contre-exemples lorsqu’une propriété ne peut être prouvée.