{"id":26888808,"url":"https://github.com/rocq-community/tarjan","last_synced_at":"2025-04-10T03:24:31.690Z","repository":{"id":40368563,"uuid":"84448746","full_name":"rocq-community/tarjan","owner":"rocq-community","description":"Coq formalization of algorithms due to Tarjan and Kosaraju for finding strongly connected graph components using Mathematical Components and SSReflect [maintainers=@CohenCyril,@palmskog]","archived":false,"fork":false,"pushed_at":"2025-02-25T09:49:00.000Z","size":238,"stargazers_count":14,"open_issues_count":0,"forks_count":8,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-03-24T15:06:59.047Z","etag":null,"topics":["coq","mathcomp","mathcomp-ci","ssreflect","tarjan-algorithm"],"latest_commit_sha":null,"homepage":"","language":"Coq","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rocq-community.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":"2017-03-09T14:05:24.000Z","updated_at":"2025-02-25T09:49:05.000Z","dependencies_parsed_at":"2024-05-03T03:00:33.535Z","dependency_job_id":"421fb633-7f6e-4b7e-8463-6e95f9bf22a0","html_url":"https://github.com/rocq-community/tarjan","commit_stats":null,"previous_names":["coq-community/tarjan","math-comp/tarjan","rocq-community/tarjan"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rocq-community%2Ftarjan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rocq-community%2Ftarjan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rocq-community%2Ftarjan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rocq-community%2Ftarjan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rocq-community","download_url":"https://codeload.github.com/rocq-community/tarjan/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248149607,"owners_count":21055792,"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","mathcomp","mathcomp-ci","ssreflect","tarjan-algorithm"],"created_at":"2025-03-31T20:01:24.889Z","updated_at":"2025-04-10T03:24:31.658Z","avatar_url":"https://github.com/rocq-community.png","language":"Coq","funding_links":[],"categories":["Rocq Prover"],"sub_categories":[],"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# Tarjan and Kosaraju\n\n[![Docker CI][docker-action-shield]][docker-action-link]\n[![Contributing][contributing-shield]][contributing-link]\n[![Code of Conduct][conduct-shield]][conduct-link]\n[![Zulip][zulip-shield]][zulip-link]\n\n[docker-action-shield]: https://github.com/coq-community/tarjan/actions/workflows/docker-action.yml/badge.svg?branch=master\n[docker-action-link]: https://github.com/coq-community/tarjan/actions/workflows/docker-action.yml\n\n[contributing-shield]: https://img.shields.io/badge/contributions-welcome-%23f7931e.svg\n[contributing-link]: https://github.com/coq-community/manifesto/blob/master/CONTRIBUTING.md\n\n[conduct-shield]: https://img.shields.io/badge/%E2%9D%A4-code%20of%20conduct-%23f15a24.svg\n[conduct-link]: https://github.com/coq-community/manifesto/blob/master/CODE_OF_CONDUCT.md\n\n[zulip-shield]: https://img.shields.io/badge/chat-on%20zulip-%23c1272d.svg\n[zulip-link]: https://coq.zulipchat.com/#narrow/stream/237663-coq-community-devs.20.26.20users\n\n\n\nThis development contains formalizations and correctness proofs, using Coq and the Mathematical\nComponents library, of algorithms originally due to Kosaraju and Tarjan for finding strongly\nconnected components in finite graphs. It also contains a verified implementation of topological\nsorting with extended guarantees for acyclic graphs.\n\n## Meta\n\n- Author(s):\n  - Cyril Cohen (initial)\n  - Jean-Jacques Lévy (initial)\n  - Karl Palmskog\n  - Laurent Théry (initial)\n- Coq-community maintainer(s):\n  - Cyril Cohen ([**@CohenCyril**](https://github.com/CohenCyril))\n  - Karl Palmskog ([**@palmskog**](https://github.com/palmskog))\n- License: [CeCILL-B](LICENSE)\n- Compatible Coq versions: 8.16 or later\n- Additional dependencies:\n  - [MathComp ssreflect 2.0 or later](https://math-comp.github.io)\n  - [MathComp fingroup](https://math-comp.github.io)\n  - [Hierarchy Builder](https://github.com/math-comp/hierarchy-builder) 1.4.0 or later\n- Coq namespace: `mathcomp.tarjan`\n- Related publication(s):\n  - [Formal Proofs of Tarjan's Strongly Connected Components Algorithm in Why3, Coq and Isabelle](https://hal.inria.fr/hal-01906155) doi:[10.4230/LIPIcs.ITP.2019.13](https://doi.org/10.4230/LIPIcs.ITP.2019.13)\n  - [Formally-Proven Kosaraju's algorithm](https://hal.inria.fr/hal-01095533) \n\n## Building and installation instructions\n\nThe easiest way to install the latest released version of Tarjan and Kosaraju\nis via [OPAM](https://opam.ocaml.org/doc/Install.html):\n\n```shell\nopam repo add coq-released https://coq.inria.fr/opam/released\nopam install coq-mathcomp-tarjan\n```\n\nTo instead build and install manually, do:\n\n``` shell\ngit clone https://github.com/coq-community/tarjan.git\ncd tarjan\nmake   # or make -j \u003cnumber-of-cores-on-your-machine\u003e \nmake install\n```\n\n\n## Main files\n\n### Extra library files\n* `bigmin.v`: extra library to deal with `\\min(i in A) F i`\n* `extra.v`: naive definitions of strongly connected components and various basic extentions of mathcomp libraries on paths and fintypes\n* `acyclic.v`: definition of acyclic graphs and proof that acyclicity can be determined by knowing strongly connected components\n\n### Proof of Kosaraju strongly connected component algorithm\n* `kosaraju.v`: proof of topological sorting and Kosaraju connected component algorithm\n* `acyclic_tsorted.v`: properties of topological sorting in acyclic graphs\n\n### Proofs of Tarjan strongly connected component algorithm (independent from each other)\n* `tarjan_rank.v`: proof with rank\n* `tarjan_rank_bigmin.v`: same proof but with a `\\min_` instead of multiple inequalities on the output rank\n* `tarjan_num.v`: same proof as `tarjan_rank_bigmin.v` but with serial numbers instead of ranks\n* `tarjan_nocolor.v`: new proof, with ranks and without colors, less fields in environement and less invariants, preconditions and postconditions.\n* `tarjan_nocolor_optim.v`: same proof as `tarjan_nocolor.v`, but with the serial number field of the environement restored, and passing around stack extensions as sets\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frocq-community%2Ftarjan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frocq-community%2Ftarjan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frocq-community%2Ftarjan/lists"}