## Abstract

Separation logic is an extension of Hoare logic for reasoning about programs that use pointers or references to potentially-shared data. The problem with such programs, both in formal proofs and in informal understanding of them, is to know not only what data they change but also to know what data they leave unmodified. Separation logic has one simple general answer to this, known as the frame rule; it intuitively says that all data that is disjoint from the minimal footprint of the program will be unmodified. This thesis is a collection of papers with the common theme of presenting new separation logics and examples of using these logics to verify challenging programs.

The article Modular Verification of Linked Lists with Views via Separation Logic reports on verification of a practical data structure with separation logic. The challenges identified in this work has served as motivation for later articles on verifying object-oriented programs and on giving specifications where the meaning of disjointness is different from physical heap disjointness in the implementation.

In Verifying Object-Oriented Programs with Higher-Order Separation Logic in Coq, we are concerned with giving modular specifications to programs that use object-oriented inheritance and dynamic dispatch. Dynamic dispatch is as powerful as general functional programming, but the typical usage patterns do not exploit that full generality. We designed logic to handle the fully general case and presented design patterns that allow simple verification of simple programs.

Fictional Separation Logic allows multiple notions of disjointness to coexist in a verification framework, thereby extending the utility of the frame rule. Using techniques developed in the previous article, the exact meaning of disjointness can be made abstract, hiding the implementation from clients.

The article High-Level Separation Logic for Low-Level Code continues the theme of defining a powerful separation logic to give concise and intuitive specifications to challenging programs. In this case, the logic targets x86 machine code. Challenges here include unstructured control flow and the lack of basic facilities in the language such as memory allocation and procedure calls.

Finally, the chapter Techniques for Model Construction in Separation Logic surveys the mathematical techniques used to develop the previous separation logics and many other logics in the literature, concluding that most separation logic models fit into a common mathematical framework, and that building new separation logics within this framework provides practical benefits.

The article Modular Verification of Linked Lists with Views via Separation Logic reports on verification of a practical data structure with separation logic. The challenges identified in this work has served as motivation for later articles on verifying object-oriented programs and on giving specifications where the meaning of disjointness is different from physical heap disjointness in the implementation.

In Verifying Object-Oriented Programs with Higher-Order Separation Logic in Coq, we are concerned with giving modular specifications to programs that use object-oriented inheritance and dynamic dispatch. Dynamic dispatch is as powerful as general functional programming, but the typical usage patterns do not exploit that full generality. We designed logic to handle the fully general case and presented design patterns that allow simple verification of simple programs.

Fictional Separation Logic allows multiple notions of disjointness to coexist in a verification framework, thereby extending the utility of the frame rule. Using techniques developed in the previous article, the exact meaning of disjointness can be made abstract, hiding the implementation from clients.

The article High-Level Separation Logic for Low-Level Code continues the theme of defining a powerful separation logic to give concise and intuitive specifications to challenging programs. In this case, the logic targets x86 machine code. Challenges here include unstructured control flow and the lack of basic facilities in the language such as memory allocation and procedure calls.

Finally, the chapter Techniques for Model Construction in Separation Logic surveys the mathematical techniques used to develop the previous separation logics and many other logics in the literature, concluding that most separation logic models fit into a common mathematical framework, and that building new separation logics within this framework provides practical benefits.

Originalsprog | Engelsk |
---|

Antal sider | 195 |
---|---|

ISBN (Trykt) | 978-87-7949-296-7 |

Status | Udgivet - 2014 |