Skip to content

VictorCMiraldo/aaosl-agda

 
 

Repository files navigation

Formal Verification of Authenticated, Append-Only Skip Lists in Agda

This repository provides the Agda proofs described in the paper "Formal Verification of Authenticated, Append-Only Skip Lists in Agda", published in CPP2021; the remaining description assumes familiarity with that paper. The repository contains a model of a class of Authenticated Append-Only SkipLists (AAOSLs), proofs of some key correctness properties of this class, and an instantiation of the class that yields a specific AAOSL due to Maniatis and Baker, thus confirming the properties argued manually in that paper. The model and proofs are written in Agda.

Repository structure

The development is structured as follows:

  • The Data namespace contains auxiliary definitions and proofs relating to injective encoding of natural numbers and reasoning about whether they are odd or even.
  • The Abstract namespace contains a model of a class of AAOSLs, parameterized by a dependency relation DepRel that defines the "hops" used by an AAOSL, along with properties this relation is required to obey. It includes proofs of the key correctness properties, culminating in the Evolutionary Collision Resistance (EVO-CR) property.
  • The Concrete module provides a concrete instance of our AAOSLs (by constructing a DepRel), which is equivalent to the one presented by Maniatis and Baker. It depends on definitions and key properties presented in the Hops.agda module.

Getting started

To work with aaosl-agda, you need to have Agda and its standard library installed. The project currently works with Agda version 2.6.1.1 and Agda Standard Library v1.3 (i.e., we can successfully run ./Scripts/run-everything.sh yes without errors or warnings). Detailed instructions for installing Agda and setting up your environment are included in the Getting Started section of Programming Language Foundations in Agda, which is an excellent resource for learning Agda.

Once you have installed the correct version of Agda, you should be able to run ./Scripts/run-everything.sh yes from the root directory of the project and observe successful completion with no errors or warnings.

To explore the repo, we suggest starting with the AAOSL.Abstract.Advancement module to understand the abstract correctness proof for a class of AAOSLs, and then examine the AAOSL.Concrete module to see how we instantiate this class to achieve proofs of key properties of the original AAOSL due to Maniatis and Baker.

If you would like to consider contributing to the project, please see our Contribution Guide.

Get Support

License

aaosl-agda is licensed under UPL 1.0.

Contributors

As of the beginning of this repo, contributions have been made by Victor Cacciari Miraldo, Harold Carr, Mark Moir, and Lisandra Silva, all while employed at Oracle Labs.

We are grateful to the following people for contributions since then:

  • [your name here]

About

No description, website, or topics provided.

Resources

License

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Agda 98.6%
  • Shell 1.4%