Distributed Causal Memory: Modular Specification and Verification in Higher-Order Distributed Separation Logic - Coq Formalization

This is the documentation of the Coq formalization for the paper "Distributed Causal Memory: Modular Specification and Verification in Higher-Order Distributed Separation Logic", submitted to POPL'21.

Setup Instructions

There are two ways to build the development: using the provided Dockerfile (recommended), or manually.

Docker Setup

  1. Install Docker

  2. In order to build the development, you might have to increase the amount of memory allocated to a running Docker container. We suggest 4GB. For instructions, see here.

  3. Build the Docker image (include the . at the end): docker build --pull -t ccddb .

  4. Run the built Docker container: docker run -i -t ccddb

  5. From within the container, build the development: make -jN , where N is the number of CPU cores in the Docker VM.

Manual Setup

  1. Install opam

  2. To install the dependencies, you have to add the following opam repositories:

    • opam repo add coq-released https://coq.inria.fr/opam/released
    • opam repo add iris-dev https://gitlab.mpi-sws.org/iris/opam.git

  3. opam update

  4. make build-dep

  5. Run make -jN to build the full development, where N is the number of your CPU cores.

The concrete version of Iris and std++ libraries relied upon are specified in the opam file.

Theory of Aneris

Our formalization is built on top of the Aneris framework, which consists of a programming language for writing distributed programs, as well as bespoke logic to reason about the same.

Causally Consistent Distributed Database

Mapping

The following list maps concepts, definitions, and results from the paper to the Coq development.

Verifying the Formalization

You can verify the development by

Used Libraries

Our development relies on the following libraries: