• Stars
    star
    575
  • Rank 75,630 (Top 2 %)
  • Language Coq
  • License
    BSD 2-Clause "Sim...
  • Created over 9 years ago
  • Updated 6 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A framework for formally verifying distributed systems implementations in Coq

Verdi

Docker CI

Verdi is a Coq framework to implement and formally verify distributed systems. Verdi supports several different fault models ranging from idealistic to realistic. Verdi's verified system transformers (VSTs) encapsulate common fault tolerance techniques. Developers can verify an application in an idealized fault model, and then apply a VST to obtain an application that is guaranteed to have analogous properties in a more adversarial environment.

Meta

Building and installation instructions

We recommend installing Verdi via opam, which will automatically build and install its dependencies:

opam repo add coq-extra-dev https://coq.inria.fr/opam/extra-dev
opam install coq-verdi

To build Verdi manually, first install all requirements. Then, run make in the Verdi root directory. This will compile the framework's core specifications and proofs, as well as some simple example systems and their correctness proofs.

To run Verdi systems on real hardware, event handler code must be extracted to OCaml and linked with one of the shims in the Verdi runtime library that handles low-level network communication.

Documentation

To set up your own Verdi-based distributed systems verification project, we recommend basing it on Verdi LockServ.

Verdi LockServ contains a minimalistic implementation of a message-passing lock server and a proof that it maintains mutual exclusion between client nodes. At build time, extracted OCaml code is linked to a runtime library shim to produce an executable program that can be run in a cluster. There is also a simple script to interface with cluster nodes.

In addition to the example verified systems listed below, see the scientific papers and blog posts listed at the Verdi website. See also Verdi Raft, a verified implementation of the Raft distributed consensus protocol.

Files

  • Core Verdi files:
    • Verdi.v: exporting of core Verdi theories, imported by systems
    • Net.v: core (unlabeled) network semantics
    • LabeledNet.v: labeled network semantics, for use in liveness reasoning
    • HandlerMonad.v: a monad for writing network/input handlers
    • StatePacketPacket.v: a technique for writing easily decomposable invariants
  • Example systems:
    • Counter.v: counting server with backup
    • LockServ.v: lock server with proof of safety
    • LiveLockServ.v: lock server with proof of liveness
    • VarD.v: vard, a key-value store
  • Verified system transformers:
    • SeqNum.v and SeqNumCorrect.v, a system transformer implementing sequence numbering
    • LockServSeqNum.v, the sequence numbering transformer applied to the lock server
    • PrimaryBackup.v, a system transformer implementing asynchronous primary-backup replication
    • VarDPrimaryBackup.v, the primary-backup transformer applied to the key-value store

More Repositories

1

verdi-raft

An implementation of the Raft distributed consensus protocol, verified in Coq using the Verdi framework
Coq
178
star
2

tensat

Re-implementation of the TASO compiler using equality saturation
Rust
108
star
3

ruler

Rewrite Rule Inference Using Equality Saturation
Rust
105
star
4

Cassius

A CSS specification and reasoning engine
Racket
90
star
5

herbgrind

A Valgrind tool for Herbie
C
90
star
6

crust

A compiler from Rust to C, and a checker for unsafe code
Rust
81
star
7

PUMPKIN-PATCH

Proof Updater Mechanically Passing Knowledge Into New Proofs, Assisting The Coq Hacker
OCaml
50
star
8

Casper

A compiler for automatically re-targeting sequential Java code to Apache Spark.
Java
49
star
9

pumpkin-pi

An extension to PUMPKIN PATCH with support for proof repair across type equivalences.
Coq
49
star
10

szalinski

Szalinski: A Tool for Synthesizing Structured CAD Models with Equality Saturation and Inverse Transformations
OpenSCAD
41
star
11

CoqAST

Fun plugin to play with the Gallina AST.
OCaml
37
star
12

oddity

A graphical, time-traveling debugger for distributed systems
Clojure
32
star
13

cheerios

Formally verified Coq serialization library with support for extraction to OCaml
Coq
23
star
14

dexter

a compiler for re-writing image processing functions in C++ to Halide
Java
22
star
15

synapse

Optimizing Synthesis with Metasketches, POPL 2016
Racket
22
star
16

StructTact

Coq utility and tactic library.
Coq
21
star
17

memsynth

An advanced automated reasoning tool for memory consistency model specifications.
Alloy
19
star
18

rake

compiling DSLs to high-level hardware instructions
Racket
19
star
19

stng

compiler for fortran stencils using verified lifting,
C++
17
star
20

oeuf

gallina frontend for CompCert
Coq
17
star
21

ferrite

Ferrite, a toolkit for developing file system crash-consistency models
Racket
16
star
22

potpie

Proof Object Transformation, Preserving Imp Embeddings: the first proof compiler to be formally proven correct
Coq
13
star
23

reincarnate-aec

Reincarnate Artifact for ICFP 2018
JavaScript
13
star
24

magic

Demystifying the magic of supertactics
OCaml
13
star
25

arvo

A proof assistant.
C
12
star
26

coq-plugin-lib

Library of useful utility functions for Coq plugins
OCaml
11
star
27

SaltShaker

Verifying x86 semantics
Shell
10
star
28

concerto

Combined concrete and abstract interpretation
Java
7
star
29

crimp

Certified Relational to Imperative
Coq
5
star
30

analytics-data

Coq
5
star
31

incarnate-exploration-archive

PL for 3D Printing
OpenSCAD
5
star
32

peek

Peek: a verified peephole optimizer for CompCert
Coq
5
star
33

iag-synthesis

Parallel, incremental evaluation of attribute grammars through synthesis
HTML
4
star
34

bagpipe

Reasoning about BGP configurations. Public development repo.
Coq
4
star
35

theia

Automatically Visualizing Program Execution
OCaml
4
star
36

fix-to-elim

Fixpoint to eliminator translation in Coq
Coq
3
star
37

coq-change-analytics

REPLICA: REPL Instrumentation for Coq Analysis
Python
3
star
38

scout

Using High-Level Design Constraints to Automatically Generate Design Alternatives
Jupyter Notebook
3
star
39

syncro

Synthesis of Incremental Operations
Racket
2
star
40

legato

Legato is a static analysis for finding bugs in dynamic resource usage
Java
2
star
41

univalent-rewrites

POPL 2020 PUMPKIN/DEVOID submission
TeX
2
star
42

staccato

Stale Configuration and Consistency Analysis Tool
Java
2
star
43

pumpkin

Public webpage for Pumpkin Patch
HTML
1
star
44

VeriCQ

Use SpaceSearch to verify Conjunctive Query Rewrite Rules
Perl
1
star
45

epics-tools

Static analysis tools for EPICS
Haskell
1
star
46

PUMPKIN-git

A prototype PUMPKIN PATCH interface with Git integration
OCaml
1
star
47

seguard-resources

SeGuard Public Resources
HTML
1
star
48

nightly-conf

The public nightly server configuration
1
star
49

majortom

An Oddity shim for "arbitrary" x86-64 Linux binaries
Rust
1
star