Frame Problem: Dynamic Frames vs Separation Logic
Program verification is the process of applying static reasoning techniques to ensure the correctness of programs. It involves drawing logical conclusions about the behavior of programs, ensuring that they meet their specifications and perform as intended without errors. Verification techniques allow us to reason about various program properties such as termination, safety, and correctness without executing the program.
One challenge in program verification is the Frame Problem. This problem arises when trying to specify which parts of a program’s state are modified by a method or procedure, while leaving the rest of the state unchanged. In deductive program logics, like Hoare logic, this can be a cumbersome task, as it requires explicitly specifying which memory locations remain unaltered by a given operation.
To address this issue, two approaches have emerged: Dynamic Frames and Separation Logic. Dynamic Frames express memory modifications as logical sets, providing flexibility in specifying what a method can change. In contrast, Separation Logic partitions memory into disjoint regions, allowing simpler reasoning about isolated memory areas.
Goal
In this seminar, you will explore both approaches in detail, comparing how they solve the Frame Problem. You will analyze the advantages and limitations of each, giving you a deeper understanding of their practical applications in program verification. As part of your analysis, you will consider the different “flavors” of each approach: explicit vs implicit Dynamic Frames, and classical vs intuitionistic Separation Logic. You will also focus on how these approaches handle reasoning about concurrency, an essential aspect in modern software systems.
You will experiment with Dafny, which utilizes Dynamic Frames, along with a chosen Separation Logic tool, verifying example programs in both verifiers and providing a comparative analysis of your experiences.
Starting Points
- Separation Logic and Concurrency (OPLSS 2016)
- Dynamic Frames Based Verification Method for Concurrent Java Programs
- The dynamic frames theory
- Implicit Dynamic Frames
- Dafny Program verifier based on dynamic frames
- Viper Permission-based program verifier
- VeriFast Program verifier based on separation logic, if you encounter problems with a nightly build, choose a stable, named release instead