{"id":13572568,"url":"https://github.com/Paper-Proof/paperproof","last_synced_at":"2025-04-04T10:30:53.410Z","repository":{"id":153992700,"uuid":"614919385","full_name":"Paper-Proof/paperproof","owner":"Paper-Proof","description":"Lean theorem proving interface which feels like pen-and-paper proofs.","archived":false,"fork":false,"pushed_at":"2024-04-01T01:59:20.000Z","size":30629,"stargazers_count":279,"open_issues_count":9,"forks_count":6,"subscribers_count":6,"default_branch":"main","last_synced_at":"2024-04-01T02:52:07.780Z","etag":null,"topics":["lean4","mathematics","metaprogramming","proof-tree"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/Paper-Proof.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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":"2023-03-16T15:24:27.000Z","updated_at":"2024-05-12T11:33:42.327Z","dependencies_parsed_at":"2024-04-01T02:59:54.766Z","dependency_job_id":null,"html_url":"https://github.com/Paper-Proof/paperproof","commit_stats":null,"previous_names":["paper-proof/paper-proof"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Paper-Proof%2Fpaperproof","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Paper-Proof%2Fpaperproof/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Paper-Proof%2Fpaperproof/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Paper-Proof%2Fpaperproof/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Paper-Proof","download_url":"https://codeload.github.com/Paper-Proof/paperproof/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247160242,"owners_count":20893796,"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":["lean4","mathematics","metaprogramming","proof-tree"],"created_at":"2024-08-01T14:01:26.977Z","updated_at":"2025-04-04T10:30:53.398Z","avatar_url":"https://github.com/Paper-Proof.png","language":"TypeScript","funding_links":[],"categories":["TypeScript","Tools"],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003ePaperproof\u003c/h1\u003e\n\n\u003ch2 align=\"center\"\u003e\nA new proof interface for Lean 4.  \n\u003c/h2\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg width=\"900\" alt=\"Paperproof vscode\" src=\"https://github.com/user-attachments/assets/08c4438a-c940-4dc4-92e8-cd82be4af32a\"\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cb\u003eTry Paperproof online\u003c/b\u003e\u003cbr/\u003e\n\n  \u003ca href=\"https://codespaces.new/Paper-Proof/paperproof\"\u003e\n    \u003cimg width=\"200\" src=\"https://github.com/codespaces/badge.svg\"/\u003e\n  \u003c/a\u003e\n    \n\u003c/div\u003e\n\u003cbr/\u003e\n\nPaperproof will inspect how the hypotheses and goals were changing throughout the Lean 4 proof, and display this history - making it equivalent to how we think of a mathematical proof on paper.\n\n\n\n---\n\nIn the following tables, you can see what tactics such as `apply`, `rw`, or `cases` look like in Paperproof; and how Paperproof renders real proofs from well-known repos.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\n    Common tactics\n  \u003c/summary\u003e\n\n  \u003ctable\u003e\n  \u003ctbody\u003e\n    \n  \u003ctr\u003e\n  \u003cth\u003eLean\u003c/th\u003e\n  \u003cth\u003ePaperproof\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n  \u003ctd colspan=\"2\" align=\"center\"\u003e\n\n**apply**\n\n  \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n  \u003ctd\u003e\n\n```lean\ntheorem apply (a b: ℝ) : a = b := by\n  apply le_antisymm\n```\n\n  \u003c/td\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003cimg width=\"232\" alt=\"image\" src=\"https://github.com/user-attachments/assets/eb183244-22e8-4219-9566-54edf4a590ce\"\u003e\n  \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\u003ctd colspan=\"2\" align=\"center\"\u003e\n\n**have**\n\n  \u003c/td\u003e\u003c/tr\u003e\n  \u003ctd\u003e\n\n```lean\ntheorem have (a b: ℝ)\n(h1: a ≤ b) (h2: b ≤ a) : True := by\n  have hi := le_antisymm h1 h2\n```\n\n  \u003c/td\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003cimg width=\"232\" alt=\"image\" src=\"https://github.com/user-attachments/assets/162205b8-4c43-4c8e-967d-cd942197c6c5\"\u003e\n  \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\u003ctd colspan=\"2\" align=\"center\"\u003e\n\n**intro**\n\n  \u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n  \u003ctd\u003e\n\n```lean\ntheorem intro\n: ∀ (N: ℕ), ∃ M, N + N = M := by\n  intro n\n```\n\n  \u003c/td\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003cimg width=\"232\" alt=\"image\" src=\"https://github.com/user-attachments/assets/9b465827-6f49-4be6-a7fe-7126165c9b2b\"\u003e\n  \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\u003ctd colspan=\"2\" align=\"center\"\u003e\n\n**rw**\n\n  \u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n  \u003ctd\u003e\n\n```lean\ntheorem rw (a b: ℕ)\n(h1: a = b) : (10 * a = 666) := by\n  rw [h1]\n```\n\n  \u003c/td\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003cimg width=\"232\" alt=\"image\" src=\"https://github.com/user-attachments/assets/f12799fe-4bbc-48a1-9441-859d814b7512\"\u003e\n  \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\u003ctd colspan=\"2\" align=\"center\"\u003e\n\n**by_contra**\n\n  \u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n  \u003ctd\u003e\n\n```lean\ntheorem by_contra (m: ℕ)\n: 2 ≤ m := by\n  by_contra h\n```\n\n  \u003c/td\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003cimg width=\"232\" alt=\"image\" src=\"https://github.com/user-attachments/assets/0274d202-b64c-4bb0-959a-565713ba0140\"\u003e\n  \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\u003ctd colspan=\"2\" align=\"center\"\u003e\n\n**use**\n\n  \u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n  \u003ctd\u003e\n\n```lean\ntheorem use\n: ∃ x: ℕ, x = 5 := by\n  use 42\n```\n\n  \u003c/td\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003cimg width=\"232\" alt=\"image\" src=\"https://github.com/user-attachments/assets/eecfec7b-9610-4fee-a9dc-51a6a95dd5f9\"\u003e\n  \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\u003ctd colspan=\"2\" align=\"center\"\u003e\n\n**induction**\n\n  \u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n  \u003ctd\u003e\n\n```lean\ntheorem induction (n: ℕ)\n: Nat.mul 0 n = 0 := by\n  induction' n with k ih\n```\n\n  \u003c/td\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003cimg width=\"408\" alt=\"image\" src=\"https://github.com/user-attachments/assets/0f2c746c-9940-4444-8f30-27185a4eb2bc\"\u003e\n  \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\u003ctd colspan=\"2\" align=\"center\"\u003e\n\n**cases**\n\n  \u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n  \u003ctd\u003e\n\n```lean\ntheorem casesN (n: ℕ)\n: Nat.mul 0 n = 0 := by\n  cases' n with m\n```\n\n  \u003c/td\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003cimg width=\"385\" alt=\"image\" src=\"https://github.com/user-attachments/assets/15ca7899-a77c-479a-90b9-1fd4159bb0b5\"\u003e\n  \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n  \u003ctd\u003e\n\n```lean\ntheorem casesAnd (A B C: Prop)\n(h: A ∧ B) : C := by\n  cases' h with a b\n```\n\n  \u003c/td\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003cimg width=\"217\" alt=\"image\" src=\"https://github.com/user-attachments/assets/077eae28-c1fc-4eb7-b9db-6e37e615e178\"\u003e\n  \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n  \u003ctd\u003e\n\n```lean\ntheorem casesOr (A B C: Prop)\n(h: A ∨ B) : C := by\n  cases' h with a b\n```\n\n  \u003c/td\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003cimg width=\"306\" alt=\"image\" src=\"https://github.com/user-attachments/assets/da0592e5-9db0-4548-b475-a0ae7945cd98\"\u003e\n  \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\n  \u003ctd\u003e\n\n```lean\ninductive Random where\n  | hi: ℕ → String → Random\n  | hello: (2 + 2 = 4) → Random\n  | wow: Random\ntheorem casesRandom (C: Prop)\n(h: Random) : C := by\n  cases' h with a b c\n```\n\n  \u003c/td\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003cimg width=\"410px\" alt=\"image\" src=\"https://github.com/user-attachments/assets/ba2d3dd0-06c7-42ae-b409-67f343ee97b2\"\u003e\n  \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003c/tbody\u003e\n  \u003c/table\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\n  Full-fledged proofs\n  \u003c/summary\u003e\n\n  \u003ctable\u003e\n  \u003ctbody\u003e\n\n  \u003ctr\u003e\u003c/tr\u003e\n    \n  \u003ctr\u003e\n  \u003ctd align=\"center\"\u003e\n\n**Mathematics in Lean (Jeremy Avigad, Patrick Massot)** \u003cbr/\u003e([mathematics_in_lean/MIL/C05_Elementary_Number_Theory/solutions/Solutions_S03_Infinitely_Many_Primes.lean:155](https://github.com/leanprover-community/mathematics_in_lean/blob/4bc81ddea0a62c3bbd33cbfc4b4b501d2d0dfb03/MIL/C05_Elementary_Number_Theory/solutions/Solutions_S03_Infinitely_Many_Primes.lean#L155))\n\n  \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003cimg width=\"1136\" alt=\"Mathematics in Lean - Paperproof\" src=\"https://github.com/user-attachments/assets/432dd171-faf8-42c1-a4c2-4d5f62672ff1\"\u003e\n  \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\n  \u003ctd align=\"center\"\u003e\n\n**Mathlib** \u003cbr/\u003e([mathlib4/Mathlib/Algebra/Field/Power.lean:30](https://github.com/leanprover-community/mathlib4/blob/9893bbd22fdca4005b93c8dbff16c1d2de21bc1a/Mathlib/Algebra/Field/Power.lean#L30))\n\n  \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n  \u003ctd align=\"center\"\u003e  \n    \u003cimg width=\"1042\" alt=\"Mathlib - Paperproof\" src=\"https://github.com/user-attachments/assets/05a69569-3370-4f4e-b50b-aef7a41d50f5\"\u003e\n  \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\n  \u003ctd align=\"center\"\u003e\n\n**Hitchhiker's Guide to Logical Verification** \u003cbr/\u003e **(Anne Baanen, Alexander Bentkamp, Jasmin Blanchette, Johannes Hölzl, Jannis Limperg)** \u003cbr/\u003e\n([logical_verification_2023/blob/main/lean/LoVe/LoVe05_FunctionalProgramming_Demo.lean:316](https://github.com/blanchette/logical_verification_2023/blob/f709e20d2cd515d4ede3e7d2db30103d4f58aaca/lean/LoVe/LoVe05_FunctionalProgramming_Demo.lean#L316))\n\n  \u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003cimg width=\"1207\" alt=\"Hitchhiker's Guide to Logical Verification - Paperproof\" src=\"https://github.com/user-attachments/assets/4b04b1a9-ddf9-4994-b9ca-a24611a3eb93\"\u003e\n  \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003c/tbody\u003e\n  \u003c/table\u003e\n\u003c/details\u003e\n\n## Installation\n\n1. Install the \"Paperproof\" vscode extension ([link](https://marketplace.visualstudio.com/items?itemName=paperproof.paperproof)).\n\n2. In your `lakefile.toml`, write:\n   \n   ```lean\n   [[require]]\n   name = \"Paperproof\"\n   git = \"https://github.com/Paper-Proof/paperproof.git\"\n   subDir = \"lean\"\n   rev = \"main\"\n   ```\n\n   OR, if you use `lakefile.lean`, write:\n\n   ```lean\n   -- if you are on a Lean version \u003e= 4.12.0:\n   require Paperproof from git \"https://github.com/Paper-Proof/paperproof.git\"@\"main\"/\"lean\"\n   -- if you are on a Lean version \u003c= 4.8.0:\n   require Paperproof from git \"https://github.com/Paper-Proof/paperproof.git\"@\"21e4ec999c23fc6181d6528cbaecb600a2db6851\"/\"lean\"\n   ```\n\n   \u003e Note: if you are on a Lean version in-between these two versions, one of these lines should work.     \n\n4. Then, in your terminal, run:\n\n   ```shell\n   lake update Paperproof\n   ```\n\n   \u003e Note:\n   \u003e if you're getting \"error: unexpected arguments: Paperproof\", it means you're on the older version of Lean, and it doesn't support per-package updates. In that case, just run `lake build`.\n\n5. In a Lean file with your theorems, write:\n\n   ```lean\n   import Paperproof\n   ```\n\n6. **You're done!**\n\n   Now, click on the paperproof icon (after you installed the Paperproof extension, it should appear in all `.lean` files), this will open a Paperproof panel within vscode.\n\n   \u003cimg width=\"200\" src=\"https://github.com/Paper-Proof/paperproof/assets/7578559/fd077fbe-36a3-4e94-9fa8-b7a38ffd1eea\"/\u003e\n\n   You can click on any theorem now (well, only tactic-based proofs, those starting with `by`, are supported now) - you should see your proof tree rendered.\n\n\u003e [!TIP]\n\u003e If you get a build error when you try to build the paperproof package, please copypaste the error message and create the corresponding issue in Paperproof.\n\u003e Lean updates its metaprogramming api frequently - we try to go along with it, and it's helpful when incompatibilities are discovered on time.   \n\u003e The quickfix for any Paperproof build error is to use the Lean version mentioned in [Paperproof's lean-toolchain](https://github.com/Paper-Proof/paperproof/blob/main/lean-toolchain).\n\n## Tutorial\n\nIf you worked with formal proofs before, you might find Paperproof most similar to proof trees/Gentzen trees. The resemblance is not spurious, we can easily mimic Semantic Tableaux and Natural Deduction trees with Paperproof. All of these interfaces show \"the history of a proof\" - the way hypotheses and nodes were changing throughout the proof.\n\nUnlike Gentzen, we can make use of css and javascript - so there are many visual syntax sugars on top of what would be a formal proof tree:\n\n- hypotheses aren't repeated when used multiple times,\n- goals and hypotheses are visually differentiated,\n- variable scopes are shown as darkening backgrounds,\n- available hypotheses are indicated via node transparencies,\n- and so on.\n\nBelow, you will see a table with the main features of Paperproof.\n\n\u003cdetails\u003e\n  \u003csummary\u003e\n  Paperproof walkthrough\n  \u003c/summary\u003e\n  \u003ctable\u003e\n    \n  \u003ctbody\u003e\n    \n  \u003ctr\u003e\n  \u003cth\u003eLean\u003c/th\u003e\n  \u003cth\u003ePaperproof\u003c/th\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\n  \u003ctd colspan=\"2\" align=\"center\"\u003e\n  \u003cb\u003eHypotheses are displayed as green nodes, \u003cbr/\u003egoals are displayed as red nodes,\u003cbr/\u003etactics are displayed as transparent nodes with dashed borders.\u003c/b\u003e \n  \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003cimg width=\"204\" alt=\"image\" src=\"https://github.com/Paper-Proof/paperproof/assets/7578559/afc8000f-ad15-4ed4-b1fa-6740745895c6\"\u003e\n  \u003c/td\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003cimg width=\"360\" alt=\"image\" src=\"https://github.com/user-attachments/assets/28605079-847b-4353-a6bf-3f668829ff97\"\u003e\n  \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\n  \u003ctd colspan=\"2\" align=\"center\"\u003e\n  \u003cb\u003eA proof should be read \"towards the middle\".\u003c/b\u003e\u003cbr/\u003e\n  So, hypotheses should be read from top to bottom; and goals should be read bottom up.\n\n  \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\n  \u003ctd align=\"center\"\u003e    \n    \u003cimg width=\"308\" alt=\"image\" src=\"https://github.com/Paper-Proof/paperproof/assets/7578559/2bd007e9-6fb3-4f32-a17d-d010af53a798\"\u003e\n\n  \u003c/td\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003cimg width=\"366\" alt=\"image\" src=\"https://github.com/user-attachments/assets/2899b1fd-063b-4612-8f54-ecb972ab70cd\"\u003e\n  \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \n  \u003ctr\u003e\n  \u003ctd colspan=\"2\" align=\"center\"\u003e\n  \u003cb\u003eTo zoom in on a particular dark box, you can click on it.\u003c/b\u003e\u003cbr/\u003e\n  \u003ci\u003eHint: these boxes represent variable scopes. Don't overthink this however, we'll always highlight the available hypotheses as you're writing the proof, consider these boxes a visual hint that will eventually become second nature.\u003c/i\u003e\n  \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\n  \u003ctd\u003e\n  \u003c/td\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003cimg width=\"332\" alt=\"Screenshot 2024-08-26 at 13 58 30\" src=\"https://github.com/user-attachments/assets/02deceff-f482-4897-af5c-4f7223b8bafb\"\u003e\n  \u003c/td\u003e\n  \u003c/tr\u003e\n\n\n  \n\n  \u003ctr\u003e\n  \u003ctd colspan=\"2\" align=\"center\"\u003e\n  \u003cb\u003eNodes becomes transparent when they are not in scope.\u003c/b\u003e\u003cbr/\u003e\n  So, an opaque red node represents a currently focused goal, and opaque green nodes represent currently available hypotheses.\u003cbr/\u003e  \n  \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003ctr\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003cimg width=\"151\" alt=\"image\" src=\"https://github.com/user-attachments/assets/d4b2e7cb-b3bd-4e03-b005-7af3b8e9ed70\"\u003e\n\n  \u003c/td\u003e\n  \u003ctd align=\"center\"\u003e\n    \u003cimg width=\"360\" alt=\"image\" src=\"https://github.com/user-attachments/assets/cf8ccdf1-29d3-4648-91ee-a6c9889289c2\"\u003e\n  \u003c/td\u003e\n  \u003c/tr\u003e\n\n  \u003c/tbody\u003e\n  \u003c/table\u003e\n\u003c/details\u003e\n\n## Updating\n\nTo update Paperproof, you only need to rerun `lake update Paperproof`. This will fetch the newest version of the Paperproof Lean library from this github repo, and build it.\n\nVscode extensions are automatically updated, however you can check for new updates with  \n**`cmd+shift+p` =\u003e \"Extensions: Show Extension Updates\"**.\n\nPaperproof is a package that's usually only used during development, so you might want to remove it from your `lakefile.lean` when you're pushing to production. In order to do that, just remove the Paperproof require from `lakefile.lean`, and run `lake update Paperproof`. This will clean up `lake-manifest.json` and `lake-packages` for you.\n\n## About Paperproof\n\n**Theoretical:**\n\n- Paperproof ♥️ Semantic Tableaux: [link](https://lakesare.brick.do/paperproof-love-semantic-tableaux-G6rR2BxL5Eyl)\n- Paperproof ♥️ Natural Deduction: [link](https://lakesare.brick.do/paperproof-love-natural-deduction-3Mve6W8NgYRJ)\n- Paperproof ⚔️ Lean's _#explode_: [link](https://paperproof.brick.do/paperproof-lean-s-explode-Bab05XYMp21q)\n- Lean ⚔️ Coq ⚔️ Metamath ⚔️ Isabel proof trees: [link](https://lakesare.brick.do/lean-coq-isabel-and-their-proof-trees-yjnd2O2RgxwV)\n- Paperproof's Architecture: [link](https://paperproof.brick.do/paperproof-s-architecture-P632P44ezDa9)\n\n**Practical:**\n\n- How to add my Lean repo to Github Codespaces: [link](https://lakesare.brick.do/how-to-add-my-lean-repo-to-github-codespaces-A13P6g7aYwgg)\n- Can Paperproof render proof terms: [link](https://paperproof.brick.do/can-paperproof-render-proof-terms-qm1NZZkazb21)\n- How to parse the _InfoTree_: [link](https://antonkov.github.io/posts/How-to-build-a-proof-tree)\n\n**Videos:**\n\n- a super quick 1-minute demo of Paperproof: [youtube link](https://youtu.be/xiIQ0toSpxQ)\n- our Lean Together presentation: [youtube link](https://www.youtube.com/watch?v=DWuAGt2RDaM)\n- a full Paperproof tutorial: [youtube link](https://youtu.be/q9w1djIcCvc)\n\n## Development\n\nYou're welcome to contribute to Paperproof, see the instructions in [CONTRIBUTING.md](https://github.com/Paper-Proof/paperproof/blob/main/CONTRIBUTING.md).\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg width=\"60px\" src=\"https://github.com/Paper-Proof/paperproof/assets/7578559/58f24cf2-4336-4376-8738-6463e3802ba0\"\u003e\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FPaper-Proof%2Fpaperproof","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FPaper-Proof%2Fpaperproof","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FPaper-Proof%2Fpaperproof/lists"}