{"id":13803692,"url":"https://github.com/uwplse/verdi","last_synced_at":"2025-04-04T06:09:24.438Z","repository":{"id":23336915,"uuid":"26697351","full_name":"uwplse/verdi","owner":"uwplse","description":"A framework for formally verifying distributed systems implementations in Coq","archived":false,"fork":false,"pushed_at":"2024-05-17T11:40:08.000Z","size":2675,"stargazers_count":601,"open_issues_count":5,"forks_count":56,"subscribers_count":66,"default_branch":"master","last_synced_at":"2025-03-28T05:12:06.555Z","etag":null,"topics":["coq","coq-library","distributed-systems","proof","verdi"],"latest_commit_sha":null,"homepage":null,"language":"Coq","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/uwplse.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-11-15T23:17:51.000Z","updated_at":"2025-03-18T19:28:57.000Z","dependencies_parsed_at":"2023-01-13T23:09:12.212Z","dependency_job_id":"dafdb355-9c33-41e0-96ae-5d3978761a53","html_url":"https://github.com/uwplse/verdi","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uwplse%2Fverdi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uwplse%2Fverdi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uwplse%2Fverdi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/uwplse%2Fverdi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/uwplse","download_url":"https://codeload.github.com/uwplse/verdi/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247128752,"owners_count":20888235,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["coq","coq-library","distributed-systems","proof","verdi"],"created_at":"2024-08-04T01:00:36.970Z","updated_at":"2025-04-04T06:09:24.415Z","avatar_url":"https://github.com/uwplse.png","language":"Coq","readme":"\u003c!---\nThis file was generated from `meta.yml`, please do not edit manually.\nFollow the instructions on https://github.com/coq-community/templates to regenerate.\n---\u003e\n# Verdi\n\n[![Docker CI][docker-action-shield]][docker-action-link]\n\n[docker-action-shield]: https://github.com/uwplse/verdi/actions/workflows/docker-action.yml/badge.svg?branch=master\n[docker-action-link]: https://github.com/uwplse/verdi/actions/workflows/docker-action.yml\n\n\n\n\nVerdi is a Coq framework to implement and formally verify distributed systems.\nVerdi supports several different fault models ranging from idealistic to realistic.\nVerdi's verified system transformers (VSTs) encapsulate common fault tolerance\ntechniques. Developers can verify an application in an idealized fault model, and\nthen apply a VST to obtain an application that is guaranteed to have analogous\nproperties in a more adversarial environment.\n\n## Meta\n\n- Author(s):\n  - Justin Adsuara\n  - Steve Anton\n  - Ryan Doenges\n  - Karl Palmskog\n  - Pavel Panchekha\n  - Zachary Tatlock\n  - James R. Wilcox\n  - Doug Woos\n- License: [BSD 2-Clause \"Simplified\" license](LICENSE)\n- Compatible Coq versions: 8.14 or later\n- Additional dependencies:\n  - [InfSeqExt](https://github.com/DistributedComponents/InfSeqExt)\n  - [StructTact](https://github.com/uwplse/StructTact)\n  - [Cheerios](https://github.com/uwplse/cheerios)\n- Coq namespace: `Verdi`\n- Related publication(s):\n  - [Verdi: A Framework for Implementing and Verifying Distributed Systems](https://homes.cs.washington.edu/~mernst/pubs/verify-distsystem-pldi2015.pdf) doi:[10.1145/2737924.2737958](https://doi.org/10.1145/2737924.2737958)\n  - [Planning for Change in a Formal Verification of the Raft Consensus Protocol](https://homes.cs.washington.edu/~mernst/pubs/raft-proof-cpp2016.pdf) doi:[10.1145/2854065.2854081](https://doi.org/10.1145/2854065.2854081)\n\n## Building and installation instructions\n\nWe recommend installing Verdi via [opam](http://opam.ocaml.org/doc/Install.html),\nwhich will automatically build and install its dependencies:\n```shell\nopam repo add coq-extra-dev https://coq.inria.fr/opam/extra-dev\nopam install coq-verdi\n```\n\nTo build Verdi manually, first install all requirements. Then,\nrun `make` in the Verdi root directory.  This will compile\nthe framework's core specifications and proofs, as well as some\nsimple example systems and their correctness proofs.\n\nTo run Verdi systems on real hardware, event handler code must be extracted\nto OCaml and linked with one of the shims in the Verdi\n[runtime library](https://github.com/DistributedComponents/verdi-runtime)\nthat handles low-level network communication.\n\n## Documentation\n\nTo set up your own Verdi-based distributed systems verification project, we\nrecommend basing it on\n[Verdi LockServ](https://github.com/DistributedComponents/verdi-lockserv).\n\nVerdi LockServ contains a minimalistic implementation of a message-passing\nlock server and a proof that it maintains mutual exclusion between client\nnodes. At build time, extracted OCaml code is linked to a runtime library\nshim to produce an executable program that can be run in a cluster. There\nis also a simple script to interface with cluster nodes.\n\nIn addition to the example verified systems listed below, see the\nscientific papers and blog posts listed at the\n[Verdi website](http://verdi.uwplse.org). See also\n[Verdi Raft](https://github.com/uwplse/verdi-raft), a verified\nimplementation of the Raft distributed consensus protocol.\n\n### Files\n\n- Core Verdi files:\n  - `Verdi.v`: exporting of core Verdi theories, imported by systems\n  - `Net.v`: core (unlabeled) network semantics\n  - `LabeledNet.v`: labeled network semantics, for use in liveness reasoning\n  - `HandlerMonad.v`: a monad for writing network/input handlers\n  - `StatePacketPacket.v`: a technique for writing easily decomposable\n  invariants\n- Example systems:\n  - `Counter.v`: counting server with backup\n  - `LockServ.v`: lock server with proof of safety\n  - `LiveLockServ.v`: lock server with proof of liveness\n  - `VarD.v`: `vard`, a key-value store\n- Verified system transformers:\n  - `SeqNum.v` and `SeqNumCorrect.v`, a system transformer implementing sequence numbering\n  - `LockServSeqNum.v`, the sequence numbering transformer applied to the lock server\n  - `PrimaryBackup.v`, a system transformer implementing asynchronous primary-backup replication\n  - `VarDPrimaryBackup.v`, the primary-backup transformer applied to the key-value store\n","funding_links":[],"categories":["Projects","Rocq Prover"],"sub_categories":["Frameworks"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuwplse%2Fverdi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fuwplse%2Fverdi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fuwplse%2Fverdi/lists"}