Thèse soutenue

Propriétés relationnnelles pour la spécification et la vérification de programmes C avec Frama-C

FR  |  
EN
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

Résumé

FR  |  
EN

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.