{"id":13993144,"url":"https://github.com/gebner/hott3","last_synced_at":"2025-04-14T13:23:52.489Z","repository":{"id":49779489,"uuid":"100124734","full_name":"gebner/hott3","owner":"gebner","description":"HoTT in Lean 3","archived":false,"fork":false,"pushed_at":"2020-08-03T18:52:08.000Z","size":463,"stargazers_count":78,"open_issues_count":0,"forks_count":11,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-02-16T10:44:31.767Z","etag":null,"topics":["hott","lean"],"latest_commit_sha":null,"homepage":null,"language":"Lean","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/gebner.png","metadata":{"files":{"readme":"README.md","changelog":"changes.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-08-12T16:35:12.000Z","updated_at":"2025-02-06T21:38:47.000Z","dependencies_parsed_at":"2022-09-02T17:08:59.367Z","dependency_job_id":null,"html_url":"https://github.com/gebner/hott3","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/gebner%2Fhott3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gebner%2Fhott3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gebner%2Fhott3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gebner%2Fhott3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gebner","download_url":"https://codeload.github.com/gebner/hott3/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248887061,"owners_count":21177811,"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":["hott","lean"],"created_at":"2024-08-09T14:02:14.903Z","updated_at":"2025-04-14T13:23:52.459Z","avatar_url":"https://github.com/gebner.png","language":"Lean","funding_links":[],"categories":["Lean"],"sub_categories":[],"readme":"# Homotopy type theory in Lean 3\n\n[![Build Status](https://travis-ci.org/gebner/hott3.svg?branch=master)](https://travis-ci.org/gebner/hott3)\n\nThis repository contains a work-in-progress port of the [Lean 2 HoTT library](https://github.com/leanprover/lean2/tree/master/hott) to Lean 3.\n\n## Design \n\n* No modifications to the Lean kernel are made. Since the Lean 3 kernel is inconsistent with univalence, we \"disable\" singleton elimination. Singleton elimination is the property that some `Prop`-valued inductive types (where terms can only be constructed in one way) can eliminate to `Type`. The main example is that the equality type `eq` which is defined to be in `Prop` can eliminate to `Type`, which is inconsistent with univalence. Whenever a definition/theorem with the `[hott]` attribute uses singleton elimination, we print an error. Currently we need to add this attribute to all definitions, but in future we expect to say once at the top of a file that all definitions/theorems in that file have the `[hott]` attribute. Without singleton elimination the system is conjectured to be consistent (if it isn't, we can easily extend the check).\n* We add univalence as an axiom.\n* We add HITs using Dan Licata's trick. Declarations with the `[hott]` attribute are checked to not use the internal inconsistent induction principle for HITs.\n* We try to write domain-specific automation using the powerful metaprogramming language of Lean 3\n* All declarations in Lean 3 `init` are available. This is necessary to get the basic tactics. This also means that some \"unsafe\" tactics are available which use the `Prop`-valued equality.\n    - don't use `rewrite`, use `rwr` instead\n    - `cases` sometimes uses singleton elimination. In this case, try replacing it with `induction`.\n    - `dsimp` is useful for definitional simplifying. It will rewrite all equalities marked with `[hsimp]`. Furthermore you can use `dsimp [foo]` to unfold/rewrite with `foo` (or `dsimp only [foo]` if you don't want to do anything else). For non-definitional simplifying, use `hsimp`.\n\n## Contributing\n\n* Feel free to help porting with files. \n    - If you want you can open an issue to ask which files are currently being ported \n    - For your convenience you can look [here](https://github.com/fpvandoorn/hott3/tree/searchreplace/from2) for files where some common changes are made with a simple regex-replace.\n        * If you port a file from [Spectral](https://github.com/cmu-phil/Spectral), make sure it hasn't been modified since september 2017.\n    - Modify the file to fix all errors in Lean 3. Common changes are listed [here](https://github.com/fpvandoorn/hott3/blob/searchreplace/from2/changes.txt)\n    - Make a pull request.\n* Feel free to write any domain specific automation you want. Incomplete wishlist:\n    - A better algorithm to prove truncatedness and connectedness\n    - A simple equivalence-maker (for example to prove that structures are sigma types)\n    - A induct-on-everything tactic (or maybe just induct-on-all-paths and destruct-all-pointed-objects)\n    - Maybe some tactic other than `dsimp` to do simplification on the goal which has the functionality of `esimp` in Lean 2.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgebner%2Fhott3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgebner%2Fhott3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgebner%2Fhott3/lists"}