Vérification de programmes avec pointeurs à l'aide de régions et de permissions

La vérification déductive de programmes consiste à annoter des programmes par une spécification, c'est-à-dire un ensemble de formules logiques décrivant le comportement du programme, et à prouver que les programmes vérifient bien leur spécification. Des outils tels que la plate-forme Why prenne...

Full description

Bibliographic Details
Main Author: Bardou, Romain
Other Authors: Paris 11
Language:en
Published: 2011
Subjects:
Online Access:http://www.theses.fr/2011PA112220/document
id ndltd-theses.fr-2011PA112220
record_format oai_dc
spelling ndltd-theses.fr-2011PA1122202017-06-16T04:21:14Z Vérification de programmes avec pointeurs à l'aide de régions et de permissions Verification of Pointer Programs Using Regions and Permissions Typage Langage de programmation Vérification déductive Logique Alias de pointeurs Régions Permissions Séparation Modèle mémoire Typing Programming languages Deductive verification Logic Pointer aliases Regions Permissions Separation Memory model La vérification déductive de programmes consiste à annoter des programmes par une spécification, c'est-à-dire un ensemble de formules logiques décrivant le comportement du programme, et à prouver que les programmes vérifient bien leur spécification. Des outils tels que la plate-forme Why prennent en entrée un programme et sa spécification et calculent des formules logiques telles que, si elles sont prouvées, le programme vérifie sa spécification. Ces formules logiques peuvent être prouvées automatiquement ou à l'aide d'assistants de preuve.Lorsqu'un programme est écrit dans un langage supportant les alias de pointeurs, c'est-à-dire si plusieurs variables peuvent désigner la même case mémoire, alors le raisonnement sur le programme devient particulièrement ardu. Il est nécessaire de spécifier quels pointeurs peuvent être égaux ou non. Les invariants des structures de données, en particulier, sont plus difficiles à vérifier.Cette thèse propose un système de type permettant de structurer la mémoire de façon modulaire afin de contrôler les alias de pointeurs et les invariants de données. Il est basé sur les notions de région et de permission. Les programmes sont ensuite interprétés vers Why de telle façon que les pointeurs soient séparés au mieux, facilitant ainsi le raisonnement. Cette thèse propose aussi un mécanisme d'inférence permettant d'alléger le travail d'annotation des opérations de régions introduites par le langage. Un modèle est introduit pour décrire la sémantique du langage et prouver sa sûreté. En particulier, il est prouvé que si le type d'un pointeur affirme que celui-ci vérifie son invariant, alors cet invariant est effectivement vérifié dans le modèle. Cette thèse a fait l'objet d'une implémentation sous la forme d'un outil nommé Capucine. Plusieurs exemples ont été écrits pour illustrer le langage, et ont été vérifié à l'aide de Capucine. Deductive verification consists in annotating programs by a specification, i.e. logic formulas which describe the behavior of the program, and prove that programs verify their specification. Tools such as the Why platform take a program and its specification as input and compute logic formulas such that, if they are valid, the program verifies its specification. These logic formulas can be proven automatically or using proof assistants.When a program is written in a language supporting pointer aliasing, i.e. if several variables may denote the same memory cell, then reasoning about the program becomes particularly tricky. It is necessary to specify which pointers may or may not be equal. Invariants of data structures, in particular, are harder to maintain.This thesis proposes a type system which allows to structure the heap in a modular fashion in order to control pointer aliases and data invariants. It is based on the notions of region and permission. Programs are then translated to Why such that pointers are separated as best as possible, to facilitate reasoning. This thesis also proposes an inference mechanism to alleviate the need to write region operations introduced by the language. A model is introduced to describe the semantics of the language and prove its safety. In particular, it is proven that if the type of a pointer tells that its invariant holds, then this invariant indeed holds in the model. This work has been implemented as a tool named Capucine. Several examples have been written to illustrate the language, and where verified using Capucine. Electronic Thesis or Dissertation Text StillImage en http://www.theses.fr/2011PA112220/document Bardou, Romain 2011-10-14 Paris 11 Marché, Claude
collection NDLTD
language en
sources NDLTD
topic Typage
Langage de programmation
Vérification déductive
Logique
Alias de pointeurs
Régions
Permissions
Séparation
Modèle mémoire
Typing
Programming languages
Deductive verification
Logic
Pointer aliases
Regions
Permissions
Separation
Memory model

spellingShingle Typage
Langage de programmation
Vérification déductive
Logique
Alias de pointeurs
Régions
Permissions
Séparation
Modèle mémoire
Typing
Programming languages
Deductive verification
Logic
Pointer aliases
Regions
Permissions
Separation
Memory model

Bardou, Romain
Vérification de programmes avec pointeurs à l'aide de régions et de permissions
description La vérification déductive de programmes consiste à annoter des programmes par une spécification, c'est-à-dire un ensemble de formules logiques décrivant le comportement du programme, et à prouver que les programmes vérifient bien leur spécification. Des outils tels que la plate-forme Why prennent en entrée un programme et sa spécification et calculent des formules logiques telles que, si elles sont prouvées, le programme vérifie sa spécification. Ces formules logiques peuvent être prouvées automatiquement ou à l'aide d'assistants de preuve.Lorsqu'un programme est écrit dans un langage supportant les alias de pointeurs, c'est-à-dire si plusieurs variables peuvent désigner la même case mémoire, alors le raisonnement sur le programme devient particulièrement ardu. Il est nécessaire de spécifier quels pointeurs peuvent être égaux ou non. Les invariants des structures de données, en particulier, sont plus difficiles à vérifier.Cette thèse propose un système de type permettant de structurer la mémoire de façon modulaire afin de contrôler les alias de pointeurs et les invariants de données. Il est basé sur les notions de région et de permission. Les programmes sont ensuite interprétés vers Why de telle façon que les pointeurs soient séparés au mieux, facilitant ainsi le raisonnement. Cette thèse propose aussi un mécanisme d'inférence permettant d'alléger le travail d'annotation des opérations de régions introduites par le langage. Un modèle est introduit pour décrire la sémantique du langage et prouver sa sûreté. En particulier, il est prouvé que si le type d'un pointeur affirme que celui-ci vérifie son invariant, alors cet invariant est effectivement vérifié dans le modèle. Cette thèse a fait l'objet d'une implémentation sous la forme d'un outil nommé Capucine. Plusieurs exemples ont été écrits pour illustrer le langage, et ont été vérifié à l'aide de Capucine. === Deductive verification consists in annotating programs by a specification, i.e. logic formulas which describe the behavior of the program, and prove that programs verify their specification. Tools such as the Why platform take a program and its specification as input and compute logic formulas such that, if they are valid, the program verifies its specification. These logic formulas can be proven automatically or using proof assistants.When a program is written in a language supporting pointer aliasing, i.e. if several variables may denote the same memory cell, then reasoning about the program becomes particularly tricky. It is necessary to specify which pointers may or may not be equal. Invariants of data structures, in particular, are harder to maintain.This thesis proposes a type system which allows to structure the heap in a modular fashion in order to control pointer aliases and data invariants. It is based on the notions of region and permission. Programs are then translated to Why such that pointers are separated as best as possible, to facilitate reasoning. This thesis also proposes an inference mechanism to alleviate the need to write region operations introduced by the language. A model is introduced to describe the semantics of the language and prove its safety. In particular, it is proven that if the type of a pointer tells that its invariant holds, then this invariant indeed holds in the model. This work has been implemented as a tool named Capucine. Several examples have been written to illustrate the language, and where verified using Capucine.
author2 Paris 11
author_facet Paris 11
Bardou, Romain
author Bardou, Romain
author_sort Bardou, Romain
title Vérification de programmes avec pointeurs à l'aide de régions et de permissions
title_short Vérification de programmes avec pointeurs à l'aide de régions et de permissions
title_full Vérification de programmes avec pointeurs à l'aide de régions et de permissions
title_fullStr Vérification de programmes avec pointeurs à l'aide de régions et de permissions
title_full_unstemmed Vérification de programmes avec pointeurs à l'aide de régions et de permissions
title_sort vérification de programmes avec pointeurs à l'aide de régions et de permissions
publishDate 2011
url http://www.theses.fr/2011PA112220/document
work_keys_str_mv AT bardouromain verificationdeprogrammesavecpointeursalaidederegionsetdepermissions
AT bardouromain verificationofpointerprogramsusingregionsandpermissions
_version_ 1718460028837429248