Today’s Internet services are often expected to stay available and
render high responsiveness even in the face of site crashes and
network partitions. Theoretical results state that causal consistency
is one of the strongest consistency guarantees that is possible under
these requirements, and many practical systems provide causally
consistent key-value stores. In this paper, we present modular
verification of causal consistency for replicated key-value store
algorithms and their client programs. Specifically, we formulate
separate correctness conditions for key-value store algorithms and
for their clients. The interface between the two is a novel operational
semantics for causal consistency. We have verified the causal
consistency of two key-value store algorithms from the literature
using a novel proof technique. We have also implemented a simple
automatic model checker for the correctness of client programs. The
two independently verified results for the algorithms and clients
can be composed to conclude correctness of any of the programs
when executed with any of the algorithms. We have developed and
checked our framework in Coq, extracted it to OCaml, and built
executable stores.