programming languages

Building Extensible Program Logics through Effect Handlers

arXiv:2607.12642

summary

The paper presents a method for constructing extensible program logics using effect handlers, enabling modular reasoning about effects such as concurrency, distributed execution, and crash‑recovery, and also provides a relational logic for contextual refinements.

Abstract

One strategy for reasoning about programs that have certain kinds of effects is to use program logics that provide specialized rules for reasoning about these effects. However, developing program logics requires skills that are distinct from those needed for using program logics, making the development of new logics challenging and less accessible. Moreover, when developing new logics, it can be difficult to reuse components from prior logics or combine support for different effects. In this paper, we propose an approach for operationally building extensible program logics based on effect handlers. Our starting point is an expressive program logic for reasoning about programs written in a pure, sequential language with support for effect handlers. Within this language, we implement handlers that model concurrency, distributed execution, and crash-recovery behavior. Then, by proving properties about these handlers, we extend the program logic and derive expressive rules for reasoning about these effects. In some cases, this approach leads to stronger reasoning rules than those found in prior program logics targeting these features. In addition, we develop a relational logic for proving contextual refinements between programs using effects. As with unary reasoning, handlers enable this relational logic to be developed in an extensible way.

Topics & keywords

#effect handlers#program logics#concurrency#distributed execution#relational reasoningoperational semanticscontextual refinementhandler-based extensioncrash-recoveryunary reasoning
Building Extensible Program Logics through Effect Handlers · wovepaper