{"id":28194659,"url":"https://github.com/kuniwak/isabelle-git-commit-graph","last_synced_at":"2026-02-09T03:03:30.147Z","repository":{"id":291866980,"uuid":"977298015","full_name":"Kuniwak/isabelle-git-commit-graph","owner":"Kuniwak","description":"Formal Definition of the Git Commit‑Graph Model","archived":false,"fork":false,"pushed_at":"2025-05-10T01:31:00.000Z","size":16,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-17T14:13:11.340Z","etag":null,"topics":["formal-methods","git","isabelle"],"latest_commit_sha":null,"homepage":"","language":"Isabelle","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/Kuniwak.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}},"created_at":"2025-05-03T21:49:46.000Z","updated_at":"2025-05-20T10:37:35.000Z","dependencies_parsed_at":"2025-05-07T00:19:20.917Z","dependency_job_id":"88a58adf-4152-4cc4-9a7a-64c6035a1207","html_url":"https://github.com/Kuniwak/isabelle-git-commit-graph","commit_stats":null,"previous_names":["kuniwak/isabelle-git-commit-graph"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Kuniwak/isabelle-git-commit-graph","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kuniwak%2Fisabelle-git-commit-graph","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kuniwak%2Fisabelle-git-commit-graph/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kuniwak%2Fisabelle-git-commit-graph/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kuniwak%2Fisabelle-git-commit-graph/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Kuniwak","download_url":"https://codeload.github.com/Kuniwak/isabelle-git-commit-graph/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Kuniwak%2Fisabelle-git-commit-graph/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29255387,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-09T01:52:29.835Z","status":"online","status_checked_at":"2026-02-09T02:00:09.501Z","response_time":56,"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":["formal-methods","git","isabelle"],"created_at":"2025-05-16T13:12:32.344Z","updated_at":"2026-02-09T03:03:30.136Z","avatar_url":"https://github.com/Kuniwak.png","language":"Isabelle","funding_links":[],"categories":[],"sub_categories":[],"readme":"Formal Definition of the Git Commit‑Graph Model\n===============================================\n\nThis document gives a formally defined state‑transition model of a Git commit‑object graph that can be mechanically verified in Isabelle.\nWith this definition, you can quickly write formal definitions of Git branching strategies and formal specifications of the tools that surround them.\n\nTo keep the focus on describing the commit graph itself, the concepts of tree and blob objects are omitted.\nConsequently, this model is not suitable for formally specifying tools—such as merge drivers—that manipulate trees or blobs.\nMoreover, because orphan branches are rarely used, we assume that any two commits in the graph share a common ancestor.\nThis lets us ignore merge‑failure cases caused by the absence of a common ancestor.\n\nAn example definition of a branching strategy can be found in [`ExampleBranchStrategy.thy`](./ExampleBranchStrategy.thy).\n\n⸻\n\nTypes\n\n\u003cdl\u003e\n\u003cdt\u003eGit State\u003c/dt\u003e\n\u003cdd\u003e\u003ccode\u003e(commit graph * commit)\u003c/code\u003e\u003c/dd\u003e\n\u003cdt\u003eGraph\u003c/dt\u003e\n\u003cdd\u003e\u003ccode\u003e('a set * 'a rel)\u003c/code\u003e\u003c/dd\u003e\n\u003cdt\u003eCommit\u003c/dt\u003e\n\u003cdd\u003eAbstracted as natural numbers, since only distinguishability between commits is required.\u003c/dd\u003e\n\u003c/dl\u003e\n\nThe initial state of the system is provided by `init`.\n\nTransition Functions\n\n\u003cdl\u003e\n\u003cdt\u003e\u003ccode\u003emerge\u003c/code\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003ccode\u003emerge  :: git ⇒ commit set ⇒ git option\u003c/code\u003e\u003c/dd\u003e\n\u003cdt\u003e\u003ccode\u003ecommit\u003c/code\u003e\u003c/dt\u003e\n\u003cdd\u003e\u003ccode\u003ecommit :: git ⇒ commit     ⇒ git option\u003c/code\u003e\u003c/dd\u003e\n\u003c/dl\u003e\n\nLicense\n-------\n\nMIT License\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkuniwak%2Fisabelle-git-commit-graph","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkuniwak%2Fisabelle-git-commit-graph","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkuniwak%2Fisabelle-git-commit-graph/lists"}