We use separation logic to specify and verify a Java program
that implements snapshotable search trees, fully formalizing the speci-
cation and verication in the Coq proof assistant. We achieve local and
modular reasoning about a tree and its snapshots and their iterators, al-
though the implementation involves shared mutable heap data structures
with no separation or ownership relation between the various data.
The paper also introduces a series of four increasingly sophisticated im-
plementations and veries the rst one. The others are included as future
work and as a set of challenge problems for full functional specication
and verication, whether by separation logic or by other formalisms.