Automated verification of heap-manipulating programs with infinite data
Institution:
Paris 7Disciplines:
Directors:
Abstract EN:
In this thesis, we focus on the verification of safety properties for sequential programs manipulating dynamic data structures carrying unbounded data. We develop a logic-based framework where program specifications are given by formulas. First, we address the issue of automatizing pre/post-condition reasoning. We define a logic, called CSL, for the specification of linked structures or arrays, as well as compositions of these structures. The formulas in CSL can describe reachability relations between cells in the heap following some pointer fields, the size of the heap, and the scalar data, We prove that the satisfiability problem of CSL is decidable and that CSL is closed under the computation of the strongest post-condition. Second, we address the issue of automatic synthesis of assertions for programs with singly-linked lists. We define an abstract interpretation based framework which combines a specific finite-range abstraction on the shape of the heap with an abstract domain on sequences of data. Different abstractions on sequences are considered allowing to reason about their sizes, the multisets of their elements, or relations on their data at different positions. We define an interprocedural analysis that computes the effect of each procedure in a local manner, by considering only the part of the heap reachable from its actual parameters. We have implemented our techniques in a tool which shows that our approach is powerful enough for automatic generation of non-trivial procedure summaries and pre/post-condition reasoning.
Abstract FR:
Le développement de techniques rigoureuses et automatiques pour la vérification des systèmes logiciels est une tâche importante. Cette thèse porte sur la vérification des propriétés de sûreté pour des programmes avec mémoire dynamique et données infinies. Elle développe un cadre basé sur la logique où les spécifications des programmes sont données par des formules. Premièrement, nous considérons l'automatisation du raisonnement pré/post-condition. Nous définissons une logique, appelée CSL, pour la spécification des structures chaînées ou des tableaux, ainsi que des compositions de ces structures. Les formules CSL décrivent des relations d'accessibilité entre les cellules de mémoire, la taille du tas et les données scalaires. Nous prouvons que le problème de la satisfiabilité pour CSL est décidable et que CSL est fermée par le calcul de la post-condition. Ensuite, nous considérons la synthèse automatique d'assertions pour des programmes avec des listes simplement chaînées. Un cadre basé sur l'interprétation abstraite est défini qui combine une abstraction finie sur la forme du tas avec une abstraction sur des séquences de données. Les abstractions sur les séquences permettent de raisonner sur leurs tailles, les multi-ensembles de leurs éléments, ou les relations entre leurs données à des différentes positions. Nous définissons une analyse inter-procédurale qui calcule l'effet de chaque procédure de façon locale sur la partie du tas accessible à partir de ses paramètres. Ces techniques sont implantées dans un outil qui montre que notre approche est assez puissante pour la génération automatique de résumés de procédure non-triviales et le raisonnement pré/post-condition.