POPL 2026
Sun 11 - Sat 17 January 2026 Rennes, France
Tue 13 Jan 2026 16:00 - 16:22 at Belvédère - Separation logic Chair(s): Thibault Dardinier

Data structures based on trees and tree traversals are ubiquitous in computer systems. Many low-level programs, including some implementations of critical systems like page tables and the web browser DOM, rely on \emph{generic} tree-traversal functions that traverse tree nodes in a pre-determined order, applying a client-provided operation to each visited node. Developing a general approach to specifying and verifying such traversals is tricky since the client-provided per-node operation can be stateful and may potentially depend on or modify the structure of the tree being traversed.

In this paper, we present a \emph{recipe} for (semi-)automated verification of such generic, stateful tree traversals. Our recipe is (a)~\emph{general}: it applies to a range of tree traversals, in particular, pre-, post- and in-order depth-first traversals; (b)~\emph{modular}: parts of a traversal’s proof can be reused in verifying other similar traversals; (c)~\emph{expressive}: using the specification of a tree traversal, we can verify clients that use the traversal in a variety of different ways; and (d)~\emph{automatable}: many proof obligations can be discharged automatically.

At the heart of our recipe is a novel use of tree \emph{zippers} to represent a logical abstraction of the tree traversal state, and zipper transitions as an abstraction of traversal steps. We realize our recipe in the RefinedC framework in Rocq, which allows us to verify a number of different tree traversals and their clients written in C.

Tue 13 Jan

Displayed time zone: Brussels, Copenhagen, Madrid, Paris change

16:00 - 17:50
Separation logicCPP at Belvédère
Chair(s): Thibault Dardinier EPFL
16:00
22m
Talk
A Recipe for Modular Verification of Generic Tree Traversals
CPP
Laila Elbeheiry MPI-SWS, Michael Sammler Institute of Science and Technology Austria, Robbert Krebbers Radboud University Nijmegen, Derek Dreyer MPI-SWS, Deepak Garg MPI-SWS
16:22
22m
Talk
Precise Reasoning about Container-Internal Pointers with Logical Pinningdistinguished paper
CPP
DOI Pre-print
16:44
22m
Talk
Modular Specifications and Implementations of Random Samplers in Higher-Order Separation Logic
CPP
Virgil Marionneau ENS Rennes, Félix Sassus-Bourda ENS Paris Saclay, Alejandro Aguirre Aarhus University, Lars Birkedal Aarhus University
17:06
22m
Talk
Using Ghost Ownership to Verify Union-Find and Persistent Arrays in Rust
CPP
Arnaud Golfouse Université Paris-Saclay, CNRS, ENS Paris-Saclay, Inria, Laboratoire des méthodes formelles, 91190, Gif-sur-Yvette, France, Armaël Guéneau Université Paris-Saclay - CNRS - ENS Paris-Saclay - Inria, Jacques-Henri Jourdan LMF, CNRS, Université Paris-Saclay
17:28
22m
Talk
A Rose Tree is Blooming (Proof Pearl)
CPP
Joomy Korkut Bloomberg
DOI Pre-print