{"id":13836547,"url":"https://github.com/logsem/clutch","last_synced_at":"2025-09-20T07:51:28.685Z","repository":{"id":74946019,"uuid":"533229949","full_name":"logsem/clutch","owner":"logsem","description":"Probabilistic separation logics for verifying higher-order probabilistic programs.","archived":false,"fork":false,"pushed_at":"2025-09-09T18:39:04.000Z","size":7784,"stargazers_count":26,"open_issues_count":2,"forks_count":8,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-09-09T18:48:19.642Z","etag":null,"topics":["asynchronous","coq","couplings","higher-order","iris","logic","probabilistic","relational","separation-logic"],"latest_commit_sha":null,"homepage":"","language":"Rocq Prover","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-09-06T08:26:31.000Z","updated_at":"2025-09-09T15:46:02.000Z","dependencies_parsed_at":"2023-10-26T16:38:58.191Z","dependency_job_id":"80bf1565-4fd5-4824-b63a-4b7a45118b04","html_url":"https://github.com/logsem/clutch","commit_stats":{"total_commits":1810,"total_committers":10,"mean_commits":181.0,"dds":0.6651933701657459,"last_synced_commit":"9e7225097550cf2c6e906973f3df86d1d488e784"},"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/logsem/clutch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logsem%2Fclutch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logsem%2Fclutch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logsem%2Fclutch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logsem%2Fclutch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/logsem","download_url":"https://codeload.github.com/logsem/clutch/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/logsem%2Fclutch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":276064329,"owners_count":25578999,"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","status":"online","status_checked_at":"2025-09-20T02:00:10.207Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["asynchronous","coq","couplings","higher-order","iris","logic","probabilistic","relational","separation-logic"],"created_at":"2024-08-04T15:00:49.523Z","updated_at":"2025-09-20T07:51:28.677Z","avatar_url":"https://github.com/logsem.png","language":"Rocq Prover","funding_links":[],"categories":["Coq"],"sub_categories":[],"readme":"# Clutch Project\n\nThis repository contains the formal development of multiple higher-order probabilistic separation logics for proving properties of higher-order probabilistic programs.\nAll of the logics are built using the [Iris](https://iris-project.org) program logic framework and mechanized in the [Coq proof assistant](https://coq.inria.fr/).\n\n## Publications\n\n[**Modular Reasoning about Error Bounds for Concurrent Probabilistic Programs**](https://dl.acm.org/doi/10.1145/3747514)\u003cbr\u003e\n*Kwing Hei Li, Alejandro Aguirre, Simon Oddershede Gregersen, Philipp G. Haselwarter, Joseph Tassarotti, Lars Birkedal*\u003cbr\u003e\nIn ICFP 2025: ACM SIGPLAN International Conference on Functional Programming\n\n[**Approximate Relational Reasoning for Higher-Order Probabilistic Programs**](https://dl.acm.org/doi/10.1145/3704877)\u003cbr\u003e\n*Philipp G. Haselwarter, Kwing Hei Li, Alejandro Aguirre, Simon Oddershede Gregersen, Joseph Tassarotti, Lars Birkedal*\u003cbr\u003e\nIn POPL 2025: ACM SIGPLAN Symposium on Principles of Programming Languages\n\n[**Tachis: Higher-Order Separation Logic with Credits for Expected Costs**](https://doi.org/10.1145/3689753)\u003cbr\u003e\n*Philipp G. Haselwarter, Kwing Hei Li, Markus de Medeiros, Simon Oddershede Gregersen, Alejandro Aguirre, Joseph Tassarotti, Lars Birkedal*\u003cbr\u003e\nIn OOPSLA 2024: ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications\n\n[**Error Credits: Resourceful Reasoning about Error Bounds for Higher-Order Probabilistic Programs**](https://doi.org/10.1145/3674635)\u003cbr\u003e\n*Alejandro Aguirre, Philipp G. Haselwarter, Markus de Medeiros, Kwing Hei Li, Simon Oddershede Gregersen, Joseph Tassarotti, Lars Birkedal*\u003cbr\u003e\nIn ICFP 2024: ACM SIGPLAN International Conference on Functional Programming\n\n[**Almost-Sure Termination by Guarded Refinement**](https://doi.org/10.1145/3674632) \u003cbr\u003e\n*Simon Oddershede Gregersen, Alejandro Aguirre, Philipp G. Haselwarter, Joseph Tassarotti, Lars Birkedal*\u003cbr\u003e\nIn ICFP 2024: ACM SIGPLAN International Conference on Functional Programming\n\n[**Asynchronous Probabilistic Couplings in Higher-Order Separation Logic**](https://dl.acm.org/doi/10.1145/3632868)\u003cbr\u003e\n*Simon Oddershede Gregersen, Alejandro Aguirre, Philipp G. Haselwarter, Joseph Tassarotti, Lars Birkedal*\u003cbr\u003e\nIn POPL 2024: ACM SIGPLAN Symposium on Principles of Programming Languages\n\n## Building the development\n\nThe project is known to compile with\n\n- [Coq](https://coq.inria.fr/) 8.19.1\n- [std++](https://gitlab.mpi-sws.org/iris/stdpp) 1.10.0\n- [Iris](https://gitlab.mpi-sws.org/iris/iris/) 4.2.0\n- [Coquelicot](https://gitlab.inria.fr/coquelicot/coquelicot/) 3.4.1\n- [Autosubst](https://github.com/coq-community/autosubst) 1.8\n- [Mathcomp-solvable](https://github.com/math-comp/math-comp) 2.2.0\n\nThe recommended way to install the dependencies is through [opam](https://opam.ocaml.org/doc/Install.html).\n\n1. Install [opam](https://opam.ocaml.org/doc/Install.html) if not already installed (a version greater than 2.0 is required).\n2. Install a new switch and link it to the project.\n```\nopam switch create clutch 4.14.1\nopam switch link clutch .\n```\n3. Add the Coq and Iris `opam` repositories.\n```\nopam repo add rocq-released https://coq.inria.fr/opam/released\nopam repo add iris-dev https://gitlab.mpi-sws.org/iris/opam.git\nopam update\n```\n4. Install the right version of the dependencies as specified in the `clutch.opam` file.\n```\nopam install . --deps-only\n```\n\nYou should now be able to build the development by using `make -j N` where `N` is the number of cores available on your machine.\n\n## Axioms\n\nThe development relies on axioms for classical reasoning and an axiomatization of the reals numbers, both found in Coq's standard library. For example, the following list is produced when executing the command `Print Assumptions eager_lazy_equiv.` in [`theories/clutch/examples/lazy_eager_coin.v`](theories/clutch/examples/lazy_eager_coin.v):\n\n```\nClassicalDedekindReals.sig_not_dec : ∀ P : Prop, {¬ ¬ P} + {¬ P}\nClassicalDedekindReals.sig_forall_dec : ∀ P : nat → Prop, (∀ n : nat, {P n} + {¬ P n}) → {n : nat | ¬ P n} + {∀ n : nat, P n}\nfunctional_extensionality_dep : ∀ (A : Type) (B : A → Type) (f g : ∀ x : A, B x), (∀ x : A, f x = g x) → f = g\nconstructive_indefinite_description : ∀ (A : Type) (P : A → Prop), (∃ x : A, P x) → {x : A | P x}\nclassic : ∀ P : Prop, P ∨ ¬ P\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogsem%2Fclutch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flogsem%2Fclutch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flogsem%2Fclutch/lists"}