{"id":17130988,"url":"https://github.com/m4lvin/gomoche","last_synced_at":"2026-01-18T17:33:45.348Z","repository":{"id":37209912,"uuid":"105454700","full_name":"m4lvin/GoMoChe","owner":"m4lvin","description":"🗣️📞 Gossip Model Checking","archived":false,"fork":false,"pushed_at":"2024-02-01T15:08:06.000Z","size":88,"stargazers_count":2,"open_issues_count":2,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-02-12T08:58:39.552Z","etag":null,"topics":["distributed-systems","epistemic-logic","gossip","haskell","model-checking","protocol"],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/m4lvin.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}},"created_at":"2017-10-01T16:09:01.000Z","updated_at":"2022-07-18T12:43:43.000Z","dependencies_parsed_at":"2024-02-01T17:21:10.397Z","dependency_job_id":null,"html_url":"https://github.com/m4lvin/GoMoChe","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/m4lvin%2FGoMoChe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m4lvin%2FGoMoChe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m4lvin%2FGoMoChe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/m4lvin%2FGoMoChe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/m4lvin","download_url":"https://codeload.github.com/m4lvin/GoMoChe/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247427012,"owners_count":20937214,"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":["distributed-systems","epistemic-logic","gossip","haskell","model-checking","protocol"],"created_at":"2024-10-14T19:13:44.267Z","updated_at":"2026-01-18T17:33:45.319Z","avatar_url":"https://github.com/m4lvin.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# GoMoChe - Gossip Model Checking\n\n[![CI status](https://github.com/m4lvin/GoMoChe/actions/workflows/ci.yml/badge.svg)](https://github.com/m4lvin/GoMoChe/actions/workflows/ci.yml)\n[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/m4lvin/GoMoChe)\n\nA Haskell tool to analyse (dynamic) gossip protocols, including an epistemic model checker.\n\n## Getting Started\n\nOption A: For a quick try-out, [click here to use GoMoChe in your browser via GitPod](https://gitpod.io/#https://github.com/m4lvin/GoMoChe), *wait* and use the terminal there.\n\nOption B: To use GoMoChe locally, you need the [Haskell Tool Stack](https://haskellstack.org). Then do `stack build` and `stack ghci` inside this folder.\n\n## Usage Examples\n\nList all call sequences permitted by the protocol `lns` on the graph `threeExample` defined in the module `Gossip.Examples`:\n\n    GoMoChe\u003e mapM_ print $ sequences lns (threeExample,[])\n    [(0,1),(0,2),(1,2)]\n    [(0,1),(1,2),(0,2)]\n    [(0,1),(2,1),(0,2)]\n    [(1,2),(0,1)]\n    [(2,1),(0,1)]\n\nCount how many of these call sequences are successful and unsuccessful:\n\n    GoMoChe\u003e statistics lns (threeExample,[])\n    (3,2)\n\nThe same, for another gossip graph given in short notation:\n\n    GoMoChe\u003e statistics lns (parseGraph \"01-12-231-3 I4\",[])\n    (57,20)\n\nEvaluate a formula at a gossip state:\n\n    GoMoChe\u003e eval (threeExample,[(0,1)]) (S 1 0)\n    True\n    GoMoChe\u003e eval (threeExample,[(0,1)]) (S 1 2)\n    False\n    GoMoChe\u003e eval (threeExample,[(0,1)]) (K 2 anyCall (S 1 0))\n    True\n    GoMoChe\u003e eval (threeExample,[(0,1)]) (K 2 lns (S 1 0))\n    True\n    GoMoChe\u003e eval (threeExample,[(0,1),(1,2)]) (S 0 2)\n    False\n    GoMoChe\u003e eval (threeExample,[(0,1),(1,2)]) (S 2 0)\n    True\n\nIf you have graphviz installed, you can visualize gossip graphs like this:\n\n    GoMoChe\u003e dispDot $ diamondExample\n\n![](doc/diamondExample.svg)\n\nAlso execution trees can be visualized, for example:\n\n    GoMoChe\u003e dispTreeWith [2] 2 1 lns (tree lns (nExample,[]))\n\n![](doc/nExample_2_2_1.svg)\n\nNote: In GitPod, use `pdf` and `pdfTreeWith` instead of `dispDot` and `dispTreeWidth`.\n\n## Tests\n\nThe file `test/results.hs` contains a test suite that also covers most examples.\nYou can run it with `stack clean; stack test --coverage`.\n\n## References\n\n- Hans van Ditmarsch, Malvin Gattinger, Louwe B. Kuijer, Pere Pardo:\n  [Strengthening Gossip Protocols using Protocol-Dependent Knowledge](https://malv.in/2019/StrengtheningGossipProtocols.pdf)\n  In: Journal of Applied Logics - IfCoLog Journal of Logics and their Applications, Volume 6, Number 1, 2019.\n\n- Chapter 6 \"Dynamic Gossip\"\n  in Malvin Gattinger: [New Directions in Model Checking Dynamic Epistemic Logic](https://malv.in/phdthesis)\n  PhD thesis at ILLC, University of Amsterdam, 2018.\n\n- Hans van Ditmarsch, Jan van Eijck, Pere Pardo, Rahim Ramezanian, François Schwarzentruber:\n  *Dynamic Gossip*.\n  In: Bulletin of the Iranian Mathematical Society (BIMS), 2018.\n  https://doi.org/10.1007/s41980-018-0160-4\n\n- Hans van Ditmarsch, Jan van Eijck, Pere Pardo, Rahim Ramezanian, François Schwarzentruber:\n  *Epistemic protocols for dynamic gossip*.\n  In: Journal of Applied Logic, Volume 20, 2017, Pages 1-31,\n  https://doi.org/10.1016/j.jal.2016.12.001\n\n## Other Tools\n\n- *ElmGossip: Explore dynamic gossip in your browser* by Ramon Meffert\n  \u003chttps://github.com/RamonMeffert/elm-gossip\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm4lvin%2Fgomoche","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fm4lvin%2Fgomoche","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fm4lvin%2Fgomoche/lists"}