{"id":15100524,"url":"https://github.com/logsem/aneris","last_synced_at":"2025-07-27T05:31:57.058Z","repository":{"id":37408447,"uuid":"292826544","full_name":"logsem/aneris","owner":"logsem","description":"Program logic for developing and verifying distributed systems","archived":false,"fork":false,"pushed_at":"2024-10-29T19:47:07.000Z","size":5677,"stargazers_count":33,"open_issues_count":6,"forks_count":8,"subscribers_count":10,"default_branch":"master","last_synced_at":"2024-10-29T21:29:13.776Z","etag":null,"topics":["coq","distributed-systems","iris","separation-logic"],"latest_commit_sha":null,"homepage":"","language":"Coq","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/logsem.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":"2020-09-04T11:06:36.000Z","updated_at":"2024-10-25T14:54:57.000Z","dependencies_parsed_at":"2024-02-06T12:23:11.380Z","dependency_job_id":"4aa74590-7cae-404b-a30e-debe8783b6f4","html_url":"https://github.com/logsem/aneris","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logsem%2Faneris","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logsem%2Faneris/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logsem%2Faneris/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logsem%2Faneris/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/logsem","download_url":"https://codeload.github.com/logsem/aneris/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":227763353,"owners_count":17816170,"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","distributed-systems","iris","separation-logic"],"created_at":"2024-09-25T18:00:33.516Z","updated_at":"2025-07-27T05:31:57.051Z","avatar_url":"https://github.com/logsem.png","language":"Coq","funding_links":[],"categories":["Rocq Prover"],"sub_categories":[],"readme":"# Aneris\n[![CI](https://github.com/logsem/aneris/workflows/CI/badge.svg?branch=master)](https://github.com/logsem/aneris/actions?query=workflow%3ACI)\n\nAneris is a higher-order distributed concurrent separation logic for developing\nand verifying distributed systems with facilities for modular specification and\nverification of partial correctness properties and refinement. The logic is\nbuilt using the [Iris](https://iris-project.org) program logic framework and\nmechanized in the [Coq proof assistant](https://coq.inria.fr/).\n\nRecent documentation of Aneris is available [`here`](documentation.pdf). \n\n## Compiling\n\nThe project maintains compatibility with Coq 8.18 and relies on `coqc` being\navailable in your shell. Clone the external git submodule dependencies using\n\n    git submodule update --init --recursive\n\nAlternatively, clone the repository using the `--recurse-submodules` flag.\n\nRun `make -jN` to build the full development, where `N` is the number of your\nCPU cores.\n\n## Directory Structure\n\n- [`trillium/`](trillium/): The Trillium program logic framework\n\n- [`aneris/`](aneris/): The Aneris instantiation of Trillium\n  * [`examples/`](aneris/examples/): examples and case studies\n\n- [`fairness/`](fairness/): A HeapLang instantiation of Trillium for reasoning\n  about fair termination of concurrent programs.\n\n- [`ml_sources/`](ml_sources/): The Multicore OCaml source files\n  * [`aneris_lang/`](ml_sources/aneris_lang/): shim and aneris libraries\n  * [`examples/`](ml_sources/examples/): examples and case studies\n\n## Git submodule dependencies\n\nThis project uses git submodules to manage dependencies with other Coq\nlibraries. By default, when working with a repository that uses submodules, the\nsubmodules will *not* be populated and updated automatically, and it is often\nnecessary to invoke `git submodule update --init --recursive` or use the\n`--recurse-submodules` flag. However, this can be automated by setting the\n`submodule.recurse` setting to `true` in your git config by running\n\n    git config --global submodule.recurse true\n\nThis will make `git clone`, `git checkout`, `git pull`, etc. work as you would\nexpect and it should rarely be necessary to invoke any `git submodule update`\ncommands.\n\nA git submodule is pinned to a particular commit of an external (remote)\nrepository. If new commits have been pushed to the remote repository and you\nwish to integrate these in to the development, invoke\n\n    git submodule update --remote\n\nto fetch the new commits and apply them to your local repository. This changes\nwhich commit your *local* submodule is pinned to. Remember to commit and push\nthe submodule update to make it visible to other users of the repository.\n\nRead more about git submodules in [this\ntutorial](https://git-scm.com/book/en/v2/Git-Tools-Submodules).\n\n## Compiling from OCaml sources\n\nTo generate AnerisLang programs from OCaml source files, pin the `ocaml2lang` package:\n\n    opam pin git+https://github.com/leon-gondelman/ocaml2lang#multicore\n\nThis will produce an executable `o2a`. After installation succeeds, you can try `o2a` by doing\n\n    o2a --help\n\nYou can now run\n\n    o2a --rewrite\n\nat the root of the repository to generate Coq files from the OCaml sources in\n[`ml_sources`](/ml_sources). To compile the source files, run\n\n    dune build --root .\n\nat the root of the repository.\n\n## Publications\n\nAneris was initially presented in the ESOP 2020 paper [Aneris: A Mechanised\nLogic for Modular Reasoning about Distributed\nSystems](https://iris-project.org/pdfs/2020-esop-aneris-final.pdf) by Morten\nKrogh-Jespersen, [Amin Timany](https://cs.au.dk/~timany/), Marit Edna\nOhlenbusch, [Simon Oddershede Gregersen](https://cs.au.dk/~gregersen/), and\n[Lars Birkedal](https://cs.au.dk/~birke/). Since then, the duplicate protection\nassumption as described in the paper has been relaxed.\n\nAt POPL 2022, a formal specification and verification of causally-consistent\ndistributed key-values store using Aneris was presented in the paper\n[Distributed Causal Memory: Modular Specification and Verification in\nHigher-Order Distributed Separation\nLogic](https://iris-project.org/pdfs/2021-popl-ccddb-final.pdf) by [Leon\nGondelman](https://cs.au.dk/~gondelman/), [Simon Oddershede\nGregersen](https://cs.au.dk/~gregersen/), [Abel\nNieto](https://abeln.github.io/), [Amin Timany](https://cs.au.dk/~timany/), and\n[Lars Birkedal](https://cs.au.dk/~birke/). This development is available in the\n[aneris/examples/ccddb](aneris/examples/ccddb) folder.\n\n[Trillium](https://iris-project.org/pdfs/2024-popl-trillium.pdf) \nis a program logic framework for both proving\npartial correctness properties and trace properties; Aneris is now an\ninstantiation of the Trillium framework.\n\nAneris also supports trace-based reasoning to establish free theorems using the \nthe method described in [Theorems for Free from Separation Logic Specifications](https://iris-project.org/pdfs/2021-icfp-intensional-final.pdf). \nIn fact, parts of the Coq development accompaying the paper \nare injected into the Aneris program logic. \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogsem%2Faneris","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flogsem%2Faneris","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogsem%2Faneris/lists"}