{"id":13722839,"url":"https://github.com/imdea-software/htt","last_synced_at":"2025-07-03T23:35:08.733Z","repository":{"id":15294346,"uuid":"18024017","full_name":"imdea-software/htt","owner":"imdea-software","description":"Hoare Type Theory ","archived":false,"fork":false,"pushed_at":"2024-10-07T21:35:11.000Z","size":516,"stargazers_count":69,"open_issues_count":0,"forks_count":5,"subscribers_count":8,"default_branch":"master","last_synced_at":"2024-10-30T01:43:37.542Z","etag":null,"topics":["coq","hoare-logic","hoare-monads","linked-list","separation-logic","type-system"],"latest_commit_sha":null,"homepage":null,"language":"Coq","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/imdea-software.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":"2014-03-23T01:28:14.000Z","updated_at":"2024-10-07T18:39:11.000Z","dependencies_parsed_at":"2023-11-21T22:31:25.623Z","dependency_job_id":"e11f24ff-44db-4211-b7fc-c68ae7a7d86d","html_url":"https://github.com/imdea-software/htt","commit_stats":{"total_commits":173,"total_committers":10,"mean_commits":17.3,"dds":"0.36416184971098264","last_synced_commit":"37897600e120faeeadd39131380bd2f2497fbbba"},"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imdea-software%2Fhtt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imdea-software%2Fhtt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imdea-software%2Fhtt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/imdea-software%2Fhtt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/imdea-software","download_url":"https://codeload.github.com/imdea-software/htt/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248027407,"owners_count":21035594,"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","hoare-logic","hoare-monads","linked-list","separation-logic","type-system"],"created_at":"2024-08-03T01:01:33.656Z","updated_at":"2025-07-03T23:35:08.710Z","avatar_url":"https://github.com/imdea-software.png","language":"Coq","funding_links":[],"categories":["Coq"],"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# Hoare Type Theory\n\n[![Docker CI][docker-action-shield]][docker-action-link]\n\n[docker-action-shield]: https://github.com/imdea-software/htt/actions/workflows/docker-action.yml/badge.svg?branch=master\n[docker-action-link]: https://github.com/imdea-software/htt/actions/workflows/docker-action.yml\n\n\n\n\nHoare Type Theory (HTT) is a verification system for reasoning about sequential heap-manipulating\nprograms based on Separation logic.\n\nHTT incorporates Hoare-style specifications via preconditions and postconditions into types. A\nHoare type `ST P (fun x : A =\u003e Q)` denotes computations with a precondition `P` and postcondition\n`Q`, returning a value `x` of type `A`. Hoare types are a dependently typed version of monads,\nas used in the programming language Haskell. Monads hygienically combine the language features\nfor pure functional programming, with those for imperative programming, such as state or\nexceptions. In this sense, HTT establishes a formal connection in the style of Curry-Howard\nisomorphism between monads and (functional programming variant of) Separation logic. Every\neffectful command in HTT has a type that corresponds to the appropriate non-structural inference\nrule in Separation logic, and vice versa, every non-structural inference rule corresponds to a\ncommand in HTT that has that rule as the type. The type for monadic bind is the Hoare rule for\nsequential composition, and the type for monadic unit combines the Hoare rules for the idle\nprogram (in a small-footprint variant) and for variable assignment (adapted for functional\nvariables). The connection reconciles dependent types with effects of state and exceptions and\nestablishes Separation logic as a type theory for such effects. In implementation terms, it means\nthat HTT implements Separation logic as a shallow embedding in Coq.\n\n## Meta\n\n- Author(s):\n  - Aleksandar Nanevski (initial)\n  - Germán Andrés Delbianco\n  - Alexander Gryzlov\n  - Marcos Grandury\n- License: [Apache-2.0](LICENSE)\n- Compatible Coq versions: 9.0 or later\n- Additional dependencies:\n  - [Hierarchy Builder 1.7.0 or later](https://github.com/math-comp/hierarchy-builder)\n  - [MathComp ssreflect 2.4 or later](https://math-comp.github.io)\n  - [MathComp algebra](https://math-comp.github.io)\n  - [MathComp fingroup](https://math-comp.github.io)\n  - [FCSL-PCM 2.2](https://github.com/imdea-software/fcsl-pcm)\n  - [Dune](https://dune.build) 3.6 or later\n- Coq namespace: `htt`\n- Related publication(s):\n  - [Structuring the verification of heap-manipulating programs](https://software.imdea.org/~aleks/papers/reflect/reflect.pdf) doi:[10.1145/1706299.1706331](https://doi.org/10.1145/1706299.1706331)\n\n## Building and installation instructions\n\nThe easiest way to install the latest released version of Hoare Type Theory\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-htt\n```\n\nTo instead build and install manually, do:\n\n``` shell\ngit clone https://github.com/imdea-software/htt.git\ncd htt\ndune build\ndune install htt\n```\n\nIf you also want to build the examples, run `make` instead of `dune`.\n\n\n## History\n\nThe original version of HTT can be found [here](https://software.imdea.org/~aleks/htt/).\n\n## References\n\n* [Dependent Type Theory of Stateful Higher-Order Functions](https://software.imdea.org/~aleks/papers/hoarelogic/depstate.pdf)\n\n  Aleksandar Nanevski and Greg Morrisett. Technical report TR-24-05, Harvard University, 2005.\n\n* [Polymorphism and Separation in Hoare Type Theory](http://software.imdea.org/~aleks/htt/icfp06.pdf)\n\n  Aleksandar Nanevski, Greg Morrisett and Lars Birkedal. ICFP 2006.\n\n  The first paper containing a (very impoverished) definition of HTT.\n\n* [Hoare Type Theory, Polymorphism and Separation](http://software.imdea.org/~aleks/htt/jfpsep07.pdf)\n\n  Aleksandar Nanevski, Greg Morrisett and Lars Birkedal. JFP 2007.\n\n  Journal version of the ICFP 2006 paper.\n\n* [Abstract Predicates and Mutable ADTs in Hoare Type Theory](http://software.imdea.org/~aleks/htt/esop07.pdf)\n\n  Aleksandar Nanevski, Amal Ahmed, Greg Morrisett, Lars Birkedal. ESOP 2007.\n\n  Adding abstract predicates to HTT.\n\n* [A Realizability Model for Impredicative Hoare Type Theory](http://software.imdea.org/~aleks/htt/esop08.pdf)\n\n  Rasmus L. Petersen, Lars Birkedal, Aleksandar Nanevski, Greg Morrisett. ESOP 2008.\n\n  A semantic model for HTT, but without large sigma types.\n\n* [Ynot: Dependent Types for Imperative Programs](http://software.imdea.org/~aleks/htt/ynot08.pdf)\n\n  Aleksandar Nanevski, Greg Morrisett, Avi Shinnar, Paul Govereau, Lars Birkedal. ICFP 2008.\n\n  First implementation of HTT as a DSL in Coq, and a number of examples.\n\n* [Structuring the Verification of Heap-Manipulating Programs](http://software.imdea.org/~aleks/htt/reflect.pdf)\n\n  Aleksandar Nanevski, Viktor Vafeiadis and Josh Berfine. POPL 2010.\n\n  This paper introduces what is closest to the current structure of the implementation of HTT.\n  It puts emphasis on structuring programs and proofs together, rather than on attacking the\n  verification problem using proof automation. It carries out a large case study, verifying the\n  congruence closure algorithm of the Barcelogic SAT solver.\n\n  The current implementation differs from what's explained in this paper, in that it uses unary,\n  rather than binary postconditions.\n\n* [Partiality, State and Dependent Types](http://software.imdea.org/~aleks/htt/tlca11.pdf)\n\n  Kasper Svendsen, Lars Birkedal and Aleksandar Nanevski. TLCA 2011.\n\n  A semantic model for HTT, with large sigma types.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimdea-software%2Fhtt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimdea-software%2Fhtt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimdea-software%2Fhtt/lists"}